Skip to content
Open
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ http-api-docs:
--openapiv2_out=openapi \
--openapiv2_opt=allow_merge=true,merge_file_name=openapiv2,simple_operation_ids=true \
temporal/api/workflowservice/v1/* \
temporal/api/applicationservice/v1/* \
temporal/api/operatorservice/v1/*

jq --rawfile desc $(OAPI_OUT)/payload_description.txt < $(OAPI_OUT)/openapiv2.swagger.json '.definitions.v1Payload={description: $$desc}' > $(OAPI_OUT)/v2.tmp
Expand Down Expand Up @@ -131,6 +132,7 @@ nexus-rpc-yaml: nexus-rpc-yaml-install
--nexus-rpc-yaml_opt=include_operation_tags=exposed \
--nexus-rpc-yaml_out=. \
temporal/api/workflowservice/v1/* \
temporal/api/applicationservice/v1/* \
temporal/api/operatorservice/v1/*

nexus-rpc-yaml-install:
Expand Down
1 change: 1 addition & 0 deletions api-linter.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@

- included_paths:
- "**/workflowservice/v1/service.proto"
- "**/applicationservice/v1/service.proto"
- "**/operatorservice/v1/service.proto"
disabled_rules:
- "core::0127::resource-name-extraction" # We extract specific fields in URL since the gRPC API predates the HTTP API -- https://linter.aip.dev/127/resource-name-extraction
Expand Down
17 changes: 17 additions & 0 deletions nexus/temporal-proto-models-nexusrpc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,20 @@ services:
$pythonRef: temporalio.api.workflowservice.v1.SignalWithStartWorkflowExecutionResponse
$rubyRef: Temporalio::Api::WorkflowService::V1::SignalWithStartWorkflowExecutionResponse
$typescriptRef: '@temporalio/api/workflowservice/v1.SignalWithStartWorkflowExecutionResponse'
temporal.api.applicationservice.v1.ApplicationService:
operations:
GetWorkflowExecutionResult:
input:
$dotnetRef: Temporalio.Api.Applicationservice.V1.GetWorkflowExecutionResultRequest
$goRef: go.temporal.io/api/applicationservice/v1.GetWorkflowExecutionResultRequest
$javaRef: io.temporal.api.applicationservice.v1.GetWorkflowExecutionResultRequest
$pythonRef: temporalio.api.applicationservice.v1.GetWorkflowExecutionResultRequest
$rubyRef: Temporalio::Api::Applicationservice::V1::GetWorkflowExecutionResultRequest
$typescriptRef: '@temporalio/api/applicationservice/v1.GetWorkflowExecutionResultRequest'
output:
$dotnetRef: Temporalio.Api.Applicationservice.V1.GetWorkflowExecutionResultResponse
$goRef: go.temporal.io/api/applicationservice/v1.GetWorkflowExecutionResultResponse
$javaRef: io.temporal.api.applicationservice.v1.GetWorkflowExecutionResultResponse
$pythonRef: temporalio.api.applicationservice.v1.GetWorkflowExecutionResultResponse
$rubyRef: Temporalio::Api::Applicationservice::V1::GetWorkflowExecutionResultResponse
$typescriptRef: '@temporalio/api/applicationservice/v1.GetWorkflowExecutionResultResponse'
3 changes: 3 additions & 0 deletions openapi/openapiv2.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
{
"name": "WorkflowService"
},
{
"name": "ApplicationService"
},
{
"name": "OperatorService"
}
Expand Down
31 changes: 31 additions & 0 deletions temporal/api/applicationservice/v1/request_response.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
syntax = "proto3";

package temporal.api.applicationservice.v1;

option go_package = "go.temporal.io/api/applicationservice/v1;applicationservice";
option java_package = "io.temporal.api.applicationservice.v1";
option java_multiple_files = true;
option java_outer_classname = "RequestResponseProto";
option ruby_package = "Temporalio::Api::Applicationservice::V1";
option csharp_namespace = "Temporalio.Api.Applicationservice.V1";

import "temporal/api/common/v1/message.proto";
import "temporal/api/failure/v1/message.proto";

// (-- api-linter: core::0131::request-name-required=disabled --)
// (-- api-linter: core::0131::request-unknown-fields=disabled --)
message GetWorkflowExecutionResultRequest {
// The workflow execution to wait for. This is always the latest workflow run for the given workflow ID.
// RunID is not required and will be ignored if provided.
temporal.api.common.v1.WorkflowExecution execution = 1;
}


message GetWorkflowExecutionResultResponse {
// If the workflow execution being waited on completed successfully, the result will be set. If it failed, the failure will be set.
// If the workflow execution is still running, neither field will be set.
oneof completion_status {
temporal.api.common.v1.Payload result = 1;
temporal.api.failure.v1.Failure failure = 2;
}
}
38 changes: 38 additions & 0 deletions temporal/api/applicationservice/v1/service.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
syntax = "proto3";

package temporal.api.applicationservice.v1;

option go_package = "go.temporal.io/api/applicationservice/v1;applicationservice";
option java_package = "io.temporal.api.applicationservice.v1";
option java_multiple_files = true;
option java_outer_classname = "ServiceProto";
option ruby_package = "Temporalio::Api::Applicationservice::V1";
option csharp_namespace = "Temporalio.Api.Applicationservice.V1";

import "nexusannotations/v1/options.proto";
import "temporal/api/applicationservice/v1/request_response.proto";

// ApplicationService API defines how Temporal SDKs and other clients interact with the Temporal server.
service ApplicationService {
// GetWorkflowExecutionResult asynchronously waits for an external workflow to complete.
//
// (-- api-linter: core::0136::prepositions=disabled
// aip.dev/not-precedent: GetWorkflowExecutionResult is the established name for this operation. --)
// (-- api-linter: core::0131::http-body=disabled
// aip.dev/not-precedent: This is an async long-poll, not a standard Get; it carries a request body. --)
// (-- api-linter: core::0131::http-method=disabled
// aip.dev/not-precedent: POST is used to allow a request body for the long-poll wait. --)
// (-- api-linter: core::0131::http-uri-name=disabled
// aip.dev/not-precedent: Uses a custom verb path for the wait operation. --)
// (-- api-linter: core::0131::method-signature=disabled
// aip.dev/not-precedent: Request has no `name` field; identifies the workflow by namespace + execution. --)
// (-- api-linter: core::0131::response-message-name=disabled
// aip.dev/not-precedent: Returns a dedicated response message, not the workflow resource itself. --)
// (-- api-linter: core::0127::resource-name-extraction=disabled
// aip.dev/not-precedent: Path variables use existing workflow_id field, not AIP-122 resource names. --)
// (-- api-linter: core::0127::http-annotation=disabled
// aip.dev/not-precedent: Not exposed over HTTP; this is a Nexus-only operation. --)
rpc GetWorkflowExecutionResult (GetWorkflowExecutionResultRequest) returns (GetWorkflowExecutionResultResponse) {
option (nexusannotations.v1.operation).tags = "exposed";
}
}
Loading