temporalio 0.3.0-arm64-darwin → 0.4.0-arm64-darwin
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +4 -0
- data/Rakefile +1 -1
- data/lib/temporalio/activity/context.rb +13 -0
- data/lib/temporalio/activity/definition.rb +22 -5
- data/lib/temporalio/activity/info.rb +3 -0
- data/lib/temporalio/api/batch/v1/message.rb +6 -1
- data/lib/temporalio/api/command/v1/message.rb +1 -1
- data/lib/temporalio/api/common/v1/message.rb +2 -1
- data/lib/temporalio/api/deployment/v1/message.rb +38 -0
- data/lib/temporalio/api/enums/v1/batch_operation.rb +1 -1
- data/lib/temporalio/api/enums/v1/common.rb +1 -1
- data/lib/temporalio/api/enums/v1/deployment.rb +23 -0
- data/lib/temporalio/api/enums/v1/event_type.rb +1 -1
- data/lib/temporalio/api/enums/v1/failed_cause.rb +1 -1
- data/lib/temporalio/api/enums/v1/nexus.rb +21 -0
- data/lib/temporalio/api/enums/v1/reset.rb +1 -1
- data/lib/temporalio/api/enums/v1/workflow.rb +2 -1
- data/lib/temporalio/api/errordetails/v1/message.rb +3 -1
- data/lib/temporalio/api/failure/v1/message.rb +3 -1
- data/lib/temporalio/api/history/v1/message.rb +3 -1
- data/lib/temporalio/api/nexus/v1/message.rb +2 -1
- data/lib/temporalio/api/payload_visitor.rb +75 -7
- data/lib/temporalio/api/query/v1/message.rb +2 -1
- data/lib/temporalio/api/taskqueue/v1/message.rb +4 -1
- data/lib/temporalio/api/workflow/v1/message.rb +9 -1
- data/lib/temporalio/api/workflowservice/v1/request_response.rb +40 -11
- data/lib/temporalio/api/workflowservice/v1/service.rb +1 -1
- data/lib/temporalio/api.rb +1 -0
- data/lib/temporalio/client/connection/workflow_service.rb +238 -28
- data/lib/temporalio/client/interceptor.rb +39 -0
- data/lib/temporalio/client/schedule.rb +25 -1
- data/lib/temporalio/client/with_start_workflow_operation.rb +115 -0
- data/lib/temporalio/client/workflow_execution.rb +19 -0
- data/lib/temporalio/client/workflow_handle.rb +3 -3
- data/lib/temporalio/client.rb +125 -2
- data/lib/temporalio/contrib/open_telemetry.rb +470 -0
- data/lib/temporalio/error.rb +1 -0
- data/lib/temporalio/internal/bridge/3.2/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/3.3/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/3.4/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +1 -1
- data/lib/temporalio/internal/bridge/api/common/common.rb +2 -1
- data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +1 -1
- data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +1 -1
- data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +2 -1
- data/lib/temporalio/internal/bridge/runtime.rb +3 -0
- data/lib/temporalio/internal/bridge/testing.rb +3 -0
- data/lib/temporalio/internal/client/implementation.rb +232 -10
- data/lib/temporalio/internal/proto_utils.rb +34 -2
- data/lib/temporalio/internal/worker/activity_worker.rb +20 -8
- data/lib/temporalio/internal/worker/multi_runner.rb +2 -2
- data/lib/temporalio/internal/worker/workflow_instance/context.rb +57 -3
- data/lib/temporalio/internal/worker/workflow_instance/details.rb +4 -2
- data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +11 -26
- data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +22 -2
- data/lib/temporalio/internal/worker/workflow_instance.rb +76 -32
- data/lib/temporalio/internal/worker/workflow_worker.rb +62 -19
- data/lib/temporalio/runtime/metric_buffer.rb +94 -0
- data/lib/temporalio/runtime.rb +48 -10
- data/lib/temporalio/search_attributes.rb +13 -0
- data/lib/temporalio/testing/activity_environment.rb +42 -14
- data/lib/temporalio/testing/workflow_environment.rb +26 -3
- data/lib/temporalio/version.rb +1 -1
- data/lib/temporalio/worker/interceptor.rb +3 -0
- data/lib/temporalio/worker/thread_pool.rb +5 -5
- data/lib/temporalio/worker/tuner.rb +38 -0
- data/lib/temporalio/worker/workflow_executor/thread_pool.rb +13 -8
- data/lib/temporalio/worker/workflow_executor.rb +1 -1
- data/lib/temporalio/worker/workflow_replayer.rb +350 -0
- data/lib/temporalio/worker.rb +58 -52
- data/lib/temporalio/workflow/definition.rb +40 -8
- data/lib/temporalio/workflow/future.rb +2 -2
- data/lib/temporalio/workflow/info.rb +22 -0
- data/lib/temporalio/workflow.rb +60 -8
- data/lib/temporalio/workflow_history.rb +26 -1
- data/temporalio.gemspec +2 -1
- metadata +25 -4
| @@ -10,7 +10,7 @@ require 'temporalio/api/common/v1/message' | |
| 10 10 | 
             
            require 'temporalio/internal/bridge/api/common/common'
         | 
| 11 11 |  | 
| 12 12 |  | 
| 13 | 
            -
            descriptor_data = "\n3temporal/sdk/core/activity_task/activity_task.proto\x12\x15\x63oresdk.activity_task\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a$temporal/api/common/v1/message.proto\x1a%temporal/sdk/core/common/common.proto\"\x8d\x01\n\x0c\x41\x63tivityTask\x12\x12\n\ntask_token\x18\x01 \x01(\x0c\x12-\n\x05start\x18\x03 \x01(\x0b\x32\x1c.coresdk.activity_task.StartH\x00\x12/\n\x06\x63\x61ncel\x18\x04 \x01(\x0b\x32\x1d.coresdk.activity_task.CancelH\x00\x42\t\n\x07variant\"\ | 
| 13 | 
            +
            descriptor_data = "\n3temporal/sdk/core/activity_task/activity_task.proto\x12\x15\x63oresdk.activity_task\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a$temporal/api/common/v1/message.proto\x1a%temporal/sdk/core/common/common.proto\"\x8d\x01\n\x0c\x41\x63tivityTask\x12\x12\n\ntask_token\x18\x01 \x01(\x0c\x12-\n\x05start\x18\x03 \x01(\x0b\x32\x1c.coresdk.activity_task.StartH\x00\x12/\n\x06\x63\x61ncel\x18\x04 \x01(\x0b\x32\x1d.coresdk.activity_task.CancelH\x00\x42\t\n\x07variant\"\xa1\x07\n\x05Start\x12\x1a\n\x12workflow_namespace\x18\x01 \x01(\t\x12\x15\n\rworkflow_type\x18\x02 \x01(\t\x12\x45\n\x12workflow_execution\x18\x03 \x01(\x0b\x32).temporal.api.common.v1.WorkflowExecution\x12\x13\n\x0b\x61\x63tivity_id\x18\x04 \x01(\t\x12\x15\n\ractivity_type\x18\x05 \x01(\t\x12\x45\n\rheader_fields\x18\x06 \x03(\x0b\x32..coresdk.activity_task.Start.HeaderFieldsEntry\x12.\n\x05input\x18\x07 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12:\n\x11heartbeat_details\x18\x08 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12\x32\n\x0escheduled_time\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x42\n\x1e\x63urrent_attempt_scheduled_time\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0cstarted_time\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07\x61ttempt\x18\x0c \x01(\r\x12<\n\x19schedule_to_close_timeout\x18\r \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x16start_to_close_timeout\x18\x0e \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11heartbeat_timeout\x18\x0f \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x0cretry_policy\x18\x10 \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12\x32\n\x08priority\x18\x12 \x01(\x0b\x32 .temporal.api.common.v1.Priority\x12\x10\n\x08is_local\x18\x11 \x01(\x08\x1aT\n\x11HeaderFieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"E\n\x06\x43\x61ncel\x12;\n\x06reason\x18\x01 \x01(\x0e\x32+.coresdk.activity_task.ActivityCancelReason*X\n\x14\x41\x63tivityCancelReason\x12\r\n\tNOT_FOUND\x10\x00\x12\r\n\tCANCELLED\x10\x01\x12\r\n\tTIMED_OUT\x10\x02\x12\x13\n\x0fWORKER_SHUTDOWN\x10\x03\x42\x32\xea\x02/Temporalio::Internal::Bridge::Api::ActivityTaskb\x06proto3"
         | 
| 14 14 |  | 
| 15 15 | 
             
            pool = Google::Protobuf::DescriptorPool.generated_pool
         | 
| 16 16 | 
             
            pool.add_serialized_file(descriptor_data)
         | 
| @@ -7,7 +7,7 @@ require 'google/protobuf' | |
| 7 7 | 
             
            require 'google/protobuf/duration_pb'
         | 
| 8 8 |  | 
| 9 9 |  | 
| 10 | 
            -
            descriptor_data = "\n%temporal/sdk/core/common/common.proto\x12\x0e\x63oresdk.common\x1a\x1egoogle/protobuf/duration.proto\"U\n\x1bNamespacedWorkflowExecution\x12\x11\n\tnamespace\x18\x01 \x01(\t\x12\x13\n\x0bworkflow_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\t*@\n\x10VersioningIntent\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0e\n\nCOMPATIBLE\x10\x01\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x02\x42,\xea\x02)Temporalio::Internal::Bridge::Api::Commonb\x06proto3"
         | 
| 10 | 
            +
            descriptor_data = "\n%temporal/sdk/core/common/common.proto\x12\x0e\x63oresdk.common\x1a\x1egoogle/protobuf/duration.proto\"U\n\x1bNamespacedWorkflowExecution\x12\x11\n\tnamespace\x18\x01 \x01(\t\x12\x13\n\x0bworkflow_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\t\"D\n\x17WorkerDeploymentVersion\x12\x17\n\x0f\x64\x65ployment_name\x18\x01 \x01(\t\x12\x10\n\x08\x62uild_id\x18\x02 \x01(\t*@\n\x10VersioningIntent\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0e\n\nCOMPATIBLE\x10\x01\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x02\x42,\xea\x02)Temporalio::Internal::Bridge::Api::Commonb\x06proto3"
         | 
| 11 11 |  | 
| 12 12 | 
             
            pool = Google::Protobuf::DescriptorPool.generated_pool
         | 
| 13 13 | 
             
            pool.add_serialized_file(descriptor_data)
         | 
| @@ -18,6 +18,7 @@ module Temporalio | |
| 18 18 | 
             
                  module Api
         | 
| 19 19 | 
             
                    module Common
         | 
| 20 20 | 
             
                      NamespacedWorkflowExecution = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("coresdk.common.NamespacedWorkflowExecution").msgclass
         | 
| 21 | 
            +
                      WorkerDeploymentVersion = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("coresdk.common.WorkerDeploymentVersion").msgclass
         | 
| 21 22 | 
             
                      VersioningIntent = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("coresdk.common.VersioningIntent").enummodule
         | 
| 22 23 | 
             
                    end
         | 
| 23 24 | 
             
                  end
         | 
| @@ -17,7 +17,7 @@ require 'temporalio/internal/bridge/api/common/common' | |
| 17 17 | 
             
            require 'temporalio/internal/bridge/api/nexus/nexus'
         | 
| 18 18 |  | 
| 19 19 |  | 
| 20 | 
            -
            descriptor_data = "\n?temporal/sdk/core/workflow_activation/workflow_activation.proto\x12\x1b\x63oresdk.workflow_activation\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a%temporal/api/failure/v1/message.proto\x1a$temporal/api/update/v1/message.proto\x1a$temporal/api/common/v1/message.proto\x1a$temporal/api/enums/v1/workflow.proto\x1a\x37temporal/sdk/core/activity_result/activity_result.proto\x1a\x35temporal/sdk/core/child_workflow/child_workflow.proto\x1a%temporal/sdk/core/common/common.proto\x1a#temporal/sdk/core/nexus/nexus.proto\"\ | 
| 20 | 
            +
            descriptor_data = "\n?temporal/sdk/core/workflow_activation/workflow_activation.proto\x12\x1b\x63oresdk.workflow_activation\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a%temporal/api/failure/v1/message.proto\x1a$temporal/api/update/v1/message.proto\x1a$temporal/api/common/v1/message.proto\x1a$temporal/api/enums/v1/workflow.proto\x1a\x37temporal/sdk/core/activity_result/activity_result.proto\x1a\x35temporal/sdk/core/child_workflow/child_workflow.proto\x1a%temporal/sdk/core/common/common.proto\x1a#temporal/sdk/core/nexus/nexus.proto\"\xfa\x02\n\x12WorkflowActivation\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12-\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x14\n\x0cis_replaying\x18\x03 \x01(\x08\x12\x16\n\x0ehistory_length\x18\x04 \x01(\r\x12@\n\x04jobs\x18\x05 \x03(\x0b\x32\x32.coresdk.workflow_activation.WorkflowActivationJob\x12 \n\x18\x61vailable_internal_flags\x18\x06 \x03(\r\x12\x1a\n\x12history_size_bytes\x18\x07 \x01(\x04\x12!\n\x19\x63ontinue_as_new_suggested\x18\x08 \x01(\x08\x12T\n#deployment_version_for_current_task\x18\t \x01(\x0b\x32\'.coresdk.common.WorkerDeploymentVersion\"\xe0\n\n\x15WorkflowActivationJob\x12N\n\x13initialize_workflow\x18\x01 \x01(\x0b\x32/.coresdk.workflow_activation.InitializeWorkflowH\x00\x12<\n\nfire_timer\x18\x02 \x01(\x0b\x32&.coresdk.workflow_activation.FireTimerH\x00\x12K\n\x12update_random_seed\x18\x04 \x01(\x0b\x32-.coresdk.workflow_activation.UpdateRandomSeedH\x00\x12\x44\n\x0equery_workflow\x18\x05 \x01(\x0b\x32*.coresdk.workflow_activation.QueryWorkflowH\x00\x12\x46\n\x0f\x63\x61ncel_workflow\x18\x06 \x01(\x0b\x32+.coresdk.workflow_activation.CancelWorkflowH\x00\x12\x46\n\x0fsignal_workflow\x18\x07 \x01(\x0b\x32+.coresdk.workflow_activation.SignalWorkflowH\x00\x12H\n\x10resolve_activity\x18\x08 \x01(\x0b\x32,.coresdk.workflow_activation.ResolveActivityH\x00\x12G\n\x10notify_has_patch\x18\t \x01(\x0b\x32+.coresdk.workflow_activation.NotifyHasPatchH\x00\x12q\n&resolve_child_workflow_execution_start\x18\n \x01(\x0b\x32?.coresdk.workflow_activation.ResolveChildWorkflowExecutionStartH\x00\x12\x66\n resolve_child_workflow_execution\x18\x0b \x01(\x0b\x32:.coresdk.workflow_activation.ResolveChildWorkflowExecutionH\x00\x12\x66\n resolve_signal_external_workflow\x18\x0c \x01(\x0b\x32:.coresdk.workflow_activation.ResolveSignalExternalWorkflowH\x00\x12u\n(resolve_request_cancel_external_workflow\x18\r \x01(\x0b\x32\x41.coresdk.workflow_activation.ResolveRequestCancelExternalWorkflowH\x00\x12:\n\tdo_update\x18\x0e \x01(\x0b\x32%.coresdk.workflow_activation.DoUpdateH\x00\x12`\n\x1dresolve_nexus_operation_start\x18\x0f \x01(\x0b\x32\x37.coresdk.workflow_activation.ResolveNexusOperationStartH\x00\x12U\n\x17resolve_nexus_operation\x18\x10 \x01(\x0b\x32\x32.coresdk.workflow_activation.ResolveNexusOperationH\x00\x12I\n\x11remove_from_cache\x18\x32 \x01(\x0b\x32,.coresdk.workflow_activation.RemoveFromCacheH\x00\x42\t\n\x07variant\"\xd9\n\n\x12InitializeWorkflow\x12\x15\n\rworkflow_type\x18\x01 \x01(\t\x12\x13\n\x0bworkflow_id\x18\x02 \x01(\t\x12\x32\n\targuments\x18\x03 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12\x17\n\x0frandomness_seed\x18\x04 \x01(\x04\x12M\n\x07headers\x18\x05 \x03(\x0b\x32<.coresdk.workflow_activation.InitializeWorkflow.HeadersEntry\x12\x10\n\x08identity\x18\x06 \x01(\t\x12I\n\x14parent_workflow_info\x18\x07 \x01(\x0b\x32+.coresdk.common.NamespacedWorkflowExecution\x12=\n\x1aworkflow_execution_timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x37\n\x14workflow_run_timeout\x18\t \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x38\n\x15workflow_task_timeout\x18\n \x01(\x0b\x32\x19.google.protobuf.Duration\x12\'\n\x1f\x63ontinued_from_execution_run_id\x18\x0b \x01(\t\x12J\n\x13\x63ontinued_initiator\x18\x0c \x01(\x0e\x32-.temporal.api.enums.v1.ContinueAsNewInitiator\x12;\n\x11\x63ontinued_failure\x18\r \x01(\x0b\x32 .temporal.api.failure.v1.Failure\x12@\n\x16last_completion_result\x18\x0e \x01(\x0b\x32 .temporal.api.common.v1.Payloads\x12\x1e\n\x16\x66irst_execution_run_id\x18\x0f \x01(\t\x12\x39\n\x0cretry_policy\x18\x10 \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12\x0f\n\x07\x61ttempt\x18\x11 \x01(\x05\x12\x15\n\rcron_schedule\x18\x12 \x01(\t\x12\x46\n\"workflow_execution_expiration_time\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x45\n\"cron_schedule_to_schedule_interval\x18\x14 \x01(\x0b\x32\x19.google.protobuf.Duration\x12*\n\x04memo\x18\x15 \x01(\x0b\x32\x1c.temporal.api.common.v1.Memo\x12\x43\n\x11search_attributes\x18\x16 \x01(\x0b\x32(.temporal.api.common.v1.SearchAttributes\x12.\n\nstart_time\x18\x17 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12@\n\rroot_workflow\x18\x18 \x01(\x0b\x32).temporal.api.common.v1.WorkflowExecution\x12\x32\n\x08priority\x18\x19 \x01(\x0b\x32 .temporal.api.common.v1.Priority\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"\x18\n\tFireTimer\x12\x0b\n\x03seq\x18\x01 \x01(\r\"m\n\x0fResolveActivity\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12;\n\x06result\x18\x02 \x01(\x0b\x32+.coresdk.activity_result.ActivityResolution\x12\x10\n\x08is_local\x18\x03 \x01(\x08\"\xd1\x02\n\"ResolveChildWorkflowExecutionStart\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12[\n\tsucceeded\x18\x02 \x01(\x0b\x32\x46.coresdk.workflow_activation.ResolveChildWorkflowExecutionStartSuccessH\x00\x12X\n\x06\x66\x61iled\x18\x03 \x01(\x0b\x32\x46.coresdk.workflow_activation.ResolveChildWorkflowExecutionStartFailureH\x00\x12]\n\tcancelled\x18\x04 \x01(\x0b\x32H.coresdk.workflow_activation.ResolveChildWorkflowExecutionStartCancelledH\x00\x42\x08\n\x06status\";\n)ResolveChildWorkflowExecutionStartSuccess\x12\x0e\n\x06run_id\x18\x01 \x01(\t\"\xa6\x01\n)ResolveChildWorkflowExecutionStartFailure\x12\x13\n\x0bworkflow_id\x18\x01 \x01(\t\x12\x15\n\rworkflow_type\x18\x02 \x01(\t\x12M\n\x05\x63\x61use\x18\x03 \x01(\x0e\x32>.coresdk.child_workflow.StartChildWorkflowExecutionFailedCause\"`\n+ResolveChildWorkflowExecutionStartCancelled\x12\x31\n\x07\x66\x61ilure\x18\x01 \x01(\x0b\x32 .temporal.api.failure.v1.Failure\"i\n\x1dResolveChildWorkflowExecution\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12;\n\x06result\x18\x02 \x01(\x0b\x32+.coresdk.child_workflow.ChildWorkflowResult\"+\n\x10UpdateRandomSeed\x12\x17\n\x0frandomness_seed\x18\x01 \x01(\x04\"\x84\x02\n\rQueryWorkflow\x12\x10\n\x08query_id\x18\x01 \x01(\t\x12\x12\n\nquery_type\x18\x02 \x01(\t\x12\x32\n\targuments\x18\x03 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12H\n\x07headers\x18\x05 \x03(\x0b\x32\x37.coresdk.workflow_activation.QueryWorkflow.HeadersEntry\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\" \n\x0e\x43\x61ncelWorkflow\x12\x0e\n\x06reason\x18\x01 \x01(\t\"\x83\x02\n\x0eSignalWorkflow\x12\x13\n\x0bsignal_name\x18\x01 \x01(\t\x12.\n\x05input\x18\x02 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12\x10\n\x08identity\x18\x03 \x01(\t\x12I\n\x07headers\x18\x05 \x03(\x0b\x32\x38.coresdk.workflow_activation.SignalWorkflow.HeadersEntry\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"\"\n\x0eNotifyHasPatch\x12\x10\n\x08patch_id\x18\x01 \x01(\t\"_\n\x1dResolveSignalExternalWorkflow\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x31\n\x07\x66\x61ilure\x18\x02 \x01(\x0b\x32 .temporal.api.failure.v1.Failure\"f\n$ResolveRequestCancelExternalWorkflow\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x31\n\x07\x66\x61ilure\x18\x02 \x01(\x0b\x32 .temporal.api.failure.v1.Failure\"\xcb\x02\n\x08\x44oUpdate\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1c\n\x14protocol_instance_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12.\n\x05input\x18\x04 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12\x43\n\x07headers\x18\x05 \x03(\x0b\x32\x32.coresdk.workflow_activation.DoUpdate.HeadersEntry\x12*\n\x04meta\x18\x06 \x01(\x0b\x32\x1c.temporal.api.update.v1.Meta\x12\x15\n\rrun_validator\x18\x07 \x01(\x08\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"\xa7\x01\n\x1aResolveNexusOperationStart\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x16\n\x0coperation_id\x18\x02 \x01(\tH\x00\x12\x16\n\x0cstarted_sync\x18\x03 \x01(\x08H\x00\x12\x42\n\x16\x63\x61ncelled_before_start\x18\x04 \x01(\x0b\x32 .temporal.api.failure.v1.FailureH\x00\x42\x08\n\x06status\"Y\n\x15ResolveNexusOperation\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x33\n\x06result\x18\x02 \x01(\x0b\x32#.coresdk.nexus.NexusOperationResult\"\xe0\x02\n\x0fRemoveFromCache\x12\x0f\n\x07message\x18\x01 \x01(\t\x12K\n\x06reason\x18\x02 \x01(\x0e\x32;.coresdk.workflow_activation.RemoveFromCache.EvictionReason\"\xee\x01\n\x0e\x45victionReason\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0e\n\nCACHE_FULL\x10\x01\x12\x0e\n\nCACHE_MISS\x10\x02\x12\x12\n\x0eNONDETERMINISM\x10\x03\x12\r\n\tLANG_FAIL\x10\x04\x12\x12\n\x0eLANG_REQUESTED\x10\x05\x12\x12\n\x0eTASK_NOT_FOUND\x10\x06\x12\x15\n\x11UNHANDLED_COMMAND\x10\x07\x12\t\n\x05\x46\x41TAL\x10\x08\x12\x1f\n\x1bPAGINATION_OR_HISTORY_FETCH\x10\t\x12\x1d\n\x19WORKFLOW_EXECUTION_ENDING\x10\nB8\xea\x02\x35Temporalio::Internal::Bridge::Api::WorkflowActivationb\x06proto3"
         | 
| 21 21 |  | 
| 22 22 | 
             
            pool = Google::Protobuf::DescriptorPool.generated_pool
         | 
| 23 23 | 
             
            pool.add_serialized_file(descriptor_data)
         | 
| @@ -15,7 +15,7 @@ require 'temporalio/internal/bridge/api/child_workflow/child_workflow' | |
| 15 15 | 
             
            require 'temporalio/internal/bridge/api/common/common'
         | 
| 16 16 |  | 
| 17 17 |  | 
| 18 | 
            -
            descriptor_data = "\n;temporal/sdk/core/workflow_commands/workflow_commands.proto\x12\x19\x63oresdk.workflow_commands\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a$temporal/api/common/v1/message.proto\x1a$temporal/api/enums/v1/workflow.proto\x1a%temporal/api/failure/v1/message.proto\x1a\'temporal/api/sdk/v1/user_metadata.proto\x1a\x35temporal/sdk/core/child_workflow/child_workflow.proto\x1a%temporal/sdk/core/common/common.proto\"\xe5\x0f\n\x0fWorkflowCommand\x12\x38\n\ruser_metadata\x18\x64 \x01(\x0b\x32!.temporal.api.sdk.v1.UserMetadata\x12<\n\x0bstart_timer\x18\x01 \x01(\x0b\x32%.coresdk.workflow_commands.StartTimerH\x00\x12H\n\x11schedule_activity\x18\x02 \x01(\x0b\x32+.coresdk.workflow_commands.ScheduleActivityH\x00\x12\x42\n\x10respond_to_query\x18\x03 \x01(\x0b\x32&.coresdk.workflow_commands.QueryResultH\x00\x12S\n\x17request_cancel_activity\x18\x04 \x01(\x0b\x32\x30.coresdk.workflow_commands.RequestCancelActivityH\x00\x12>\n\x0c\x63\x61ncel_timer\x18\x05 \x01(\x0b\x32&.coresdk.workflow_commands.CancelTimerH\x00\x12[\n\x1b\x63omplete_workflow_execution\x18\x06 \x01(\x0b\x32\x34.coresdk.workflow_commands.CompleteWorkflowExecutionH\x00\x12S\n\x17\x66\x61il_workflow_execution\x18\x07 \x01(\x0b\x32\x30.coresdk.workflow_commands.FailWorkflowExecutionH\x00\x12g\n\"continue_as_new_workflow_execution\x18\x08 \x01(\x0b\x32\x39.coresdk.workflow_commands.ContinueAsNewWorkflowExecutionH\x00\x12W\n\x19\x63\x61ncel_workflow_execution\x18\t \x01(\x0b\x32\x32.coresdk.workflow_commands.CancelWorkflowExecutionH\x00\x12\x45\n\x10set_patch_marker\x18\n \x01(\x0b\x32).coresdk.workflow_commands.SetPatchMarkerH\x00\x12`\n\x1estart_child_workflow_execution\x18\x0b \x01(\x0b\x32\x36.coresdk.workflow_commands.StartChildWorkflowExecutionH\x00\x12\x62\n\x1f\x63\x61ncel_child_workflow_execution\x18\x0c \x01(\x0b\x32\x37.coresdk.workflow_commands.CancelChildWorkflowExecutionH\x00\x12w\n*request_cancel_external_workflow_execution\x18\r \x01(\x0b\x32\x41.coresdk.workflow_commands.RequestCancelExternalWorkflowExecutionH\x00\x12h\n\"signal_external_workflow_execution\x18\x0e \x01(\x0b\x32:.coresdk.workflow_commands.SignalExternalWorkflowExecutionH\x00\x12Q\n\x16\x63\x61ncel_signal_workflow\x18\x0f \x01(\x0b\x32/.coresdk.workflow_commands.CancelSignalWorkflowH\x00\x12S\n\x17schedule_local_activity\x18\x10 \x01(\x0b\x32\x30.coresdk.workflow_commands.ScheduleLocalActivityH\x00\x12^\n\x1drequest_cancel_local_activity\x18\x11 \x01(\x0b\x32\x35.coresdk.workflow_commands.RequestCancelLocalActivityH\x00\x12\x66\n!upsert_workflow_search_attributes\x18\x12 \x01(\x0b\x32\x39.coresdk.workflow_commands.UpsertWorkflowSearchAttributesH\x00\x12Y\n\x1amodify_workflow_properties\x18\x13 \x01(\x0b\x32\x33.coresdk.workflow_commands.ModifyWorkflowPropertiesH\x00\x12\x44\n\x0fupdate_response\x18\x14 \x01(\x0b\x32).coresdk.workflow_commands.UpdateResponseH\x00\x12U\n\x18schedule_nexus_operation\x18\x15 \x01(\x0b\x32\x31.coresdk.workflow_commands.ScheduleNexusOperationH\x00\x12`\n\x1erequest_cancel_nexus_operation\x18\x16 \x01(\x0b\x32\x36.coresdk.workflow_commands.RequestCancelNexusOperationH\x00\x42\t\n\x07variant\"S\n\nStartTimer\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x38\n\x15start_to_fire_timeout\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\"\x1a\n\x0b\x43\x61ncelTimer\x12\x0b\n\x03seq\x18\x01 \x01(\r\"\x84\x06\n\x10ScheduleActivity\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x13\n\x0b\x61\x63tivity_id\x18\x02 \x01(\t\x12\x15\n\ractivity_type\x18\x03 \x01(\t\x12\x12\n\ntask_queue\x18\x05 \x01(\t\x12I\n\x07headers\x18\x06 \x03(\x0b\x32\x38.coresdk.workflow_commands.ScheduleActivity.HeadersEntry\x12\x32\n\targuments\x18\x07 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12<\n\x19schedule_to_close_timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12<\n\x19schedule_to_start_timeout\x18\t \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x16start_to_close_timeout\x18\n \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11heartbeat_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x0cretry_policy\x18\x0c \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12N\n\x11\x63\x61ncellation_type\x18\r \x01(\x0e\x32\x33.coresdk.workflow_commands.ActivityCancellationType\x12\x1e\n\x16\x64o_not_eagerly_execute\x18\x0e \x01(\x08\x12;\n\x11versioning_intent\x18\x0f \x01(\x0e\x32 .coresdk.common.VersioningIntent\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"\xee\x05\n\x15ScheduleLocalActivity\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x13\n\x0b\x61\x63tivity_id\x18\x02 \x01(\t\x12\x15\n\ractivity_type\x18\x03 \x01(\t\x12\x0f\n\x07\x61ttempt\x18\x04 \x01(\r\x12:\n\x16original_schedule_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12N\n\x07headers\x18\x06 \x03(\x0b\x32=.coresdk.workflow_commands.ScheduleLocalActivity.HeadersEntry\x12\x32\n\targuments\x18\x07 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12<\n\x19schedule_to_close_timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12<\n\x19schedule_to_start_timeout\x18\t \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x16start_to_close_timeout\x18\n \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x0cretry_policy\x18\x0b \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12\x38\n\x15local_retry_threshold\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12N\n\x11\x63\x61ncellation_type\x18\r \x01(\x0e\x32\x33.coresdk.workflow_commands.ActivityCancellationType\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"$\n\x15RequestCancelActivity\x12\x0b\n\x03seq\x18\x01 \x01(\r\")\n\x1aRequestCancelLocalActivity\x12\x0b\n\x03seq\x18\x01 \x01(\r\"\x9c\x01\n\x0bQueryResult\x12\x10\n\x08query_id\x18\x01 \x01(\t\x12<\n\tsucceeded\x18\x02 \x01(\x0b\x32\'.coresdk.workflow_commands.QuerySuccessH\x00\x12\x32\n\x06\x66\x61iled\x18\x03 \x01(\x0b\x32 .temporal.api.failure.v1.FailureH\x00\x42\t\n\x07variant\"A\n\x0cQuerySuccess\x12\x31\n\x08response\x18\x01 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload\"L\n\x19\x43ompleteWorkflowExecution\x12/\n\x06result\x18\x01 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload\"J\n\x15\x46\x61ilWorkflowExecution\x12\x31\n\x07\x66\x61ilure\x18\x01 \x01(\x0b\x32 .temporal.api.failure.v1.Failure\"\xfb\x06\n\x1e\x43ontinueAsNewWorkflowExecution\x12\x15\n\rworkflow_type\x18\x01 \x01(\t\x12\x12\n\ntask_queue\x18\x02 \x01(\t\x12\x32\n\targuments\x18\x03 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12\x37\n\x14workflow_run_timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x38\n\x15workflow_task_timeout\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12Q\n\x04memo\x18\x06 \x03(\x0b\x32\x43.coresdk.workflow_commands.ContinueAsNewWorkflowExecution.MemoEntry\x12W\n\x07headers\x18\x07 \x03(\x0b\x32\x46.coresdk.workflow_commands.ContinueAsNewWorkflowExecution.HeadersEntry\x12j\n\x11search_attributes\x18\x08 \x03(\x0b\x32O.coresdk.workflow_commands.ContinueAsNewWorkflowExecution.SearchAttributesEntry\x12\x39\n\x0cretry_policy\x18\t \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12;\n\x11versioning_intent\x18\n \x01(\x0e\x32 .coresdk.common.VersioningIntent\x1aL\n\tMemoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x1aX\n\x15SearchAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"\x19\n\x17\x43\x61ncelWorkflowExecution\"6\n\x0eSetPatchMarker\x12\x10\n\x08patch_id\x18\x01 \x01(\t\x12\x12\n\ndeprecated\x18\x02 \x01(\x08\"\xe0\t\n\x1bStartChildWorkflowExecution\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x11\n\tnamespace\x18\x02 \x01(\t\x12\x13\n\x0bworkflow_id\x18\x03 \x01(\t\x12\x15\n\rworkflow_type\x18\x04 \x01(\t\x12\x12\n\ntask_queue\x18\x05 \x01(\t\x12.\n\x05input\x18\x06 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12=\n\x1aworkflow_execution_timeout\x18\x07 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x37\n\x14workflow_run_timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x38\n\x15workflow_task_timeout\x18\t \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x46\n\x13parent_close_policy\x18\n \x01(\x0e\x32).coresdk.child_workflow.ParentClosePolicy\x12N\n\x18workflow_id_reuse_policy\x18\x0c \x01(\x0e\x32,.temporal.api.enums.v1.WorkflowIdReusePolicy\x12\x39\n\x0cretry_policy\x18\r \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12\x15\n\rcron_schedule\x18\x0e \x01(\t\x12T\n\x07headers\x18\x0f \x03(\x0b\x32\x43.coresdk.workflow_commands.StartChildWorkflowExecution.HeadersEntry\x12N\n\x04memo\x18\x10 \x03(\x0b\x32@.coresdk.workflow_commands.StartChildWorkflowExecution.MemoEntry\x12g\n\x11search_attributes\x18\x11 \x03(\x0b\x32L.coresdk.workflow_commands.StartChildWorkflowExecution.SearchAttributesEntry\x12P\n\x11\x63\x61ncellation_type\x18\x12 \x01(\x0e\x32\x35.coresdk.child_workflow.ChildWorkflowCancellationType\x12;\n\x11versioning_intent\x18\x13 \x01(\x0e\x32 .coresdk.common.VersioningIntent\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x1aL\n\tMemoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x1aX\n\x15SearchAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\":\n\x1c\x43\x61ncelChildWorkflowExecution\x12\x1a\n\x12\x63hild_workflow_seq\x18\x01 \x01(\r\"~\n&RequestCancelExternalWorkflowExecution\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12G\n\x12workflow_execution\x18\x02 \x01(\x0b\x32+.coresdk.common.NamespacedWorkflowExecution\"\x8f\x03\n\x1fSignalExternalWorkflowExecution\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12I\n\x12workflow_execution\x18\x02 \x01(\x0b\x32+.coresdk.common.NamespacedWorkflowExecutionH\x00\x12\x1b\n\x11\x63hild_workflow_id\x18\x03 \x01(\tH\x00\x12\x13\n\x0bsignal_name\x18\x04 \x01(\t\x12-\n\x04\x61rgs\x18\x05 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12X\n\x07headers\x18\x06 \x03(\x0b\x32G.coresdk.workflow_commands.SignalExternalWorkflowExecution.HeadersEntry\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x42\x08\n\x06target\"#\n\x14\x43\x61ncelSignalWorkflow\x12\x0b\n\x03seq\x18\x01 \x01(\r\"\xe6\x01\n\x1eUpsertWorkflowSearchAttributes\x12j\n\x11search_attributes\x18\x01 \x03(\x0b\x32O.coresdk.workflow_commands.UpsertWorkflowSearchAttributes.SearchAttributesEntry\x1aX\n\x15SearchAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"O\n\x18ModifyWorkflowProperties\x12\x33\n\rupserted_memo\x18\x01 \x01(\x0b\x32\x1c.temporal.api.common.v1.Memo\"\xd2\x01\n\x0eUpdateResponse\x12\x1c\n\x14protocol_instance_id\x18\x01 \x01(\t\x12*\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12\x34\n\x08rejected\x18\x03 \x01(\x0b\x32 .temporal.api.failure.v1.FailureH\x00\x12\x34\n\tcompleted\x18\x04 \x01(\x0b\x32\x1f.temporal.api.common.v1.PayloadH\x00\x42\n\n\x08response\"\xd7\x02\n\x16ScheduleNexusOperation\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x10\n\x08\x65ndpoint\x18\x02 \x01(\t\x12\x0f\n\x07service\x18\x03 \x01(\t\x12\x11\n\toperation\x18\x04 \x01(\t\x12.\n\x05input\x18\x05 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12<\n\x19schedule_to_close_timeout\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12X\n\x0cnexus_header\x18\x07 \x03(\x0b\x32\x42.coresdk.workflow_commands.ScheduleNexusOperation.NexusHeaderEntry\x1a\x32\n\x10NexusHeaderEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"*\n\x1bRequestCancelNexusOperation\x12\x0b\n\x03seq\x18\x01 \x01(\r*X\n\x18\x41\x63tivityCancellationType\x12\x0e\n\nTRY_CANCEL\x10\x00\x12\x1f\n\x1bWAIT_CANCELLATION_COMPLETED\x10\x01\x12\x0b\n\x07\x41\x42\x41NDON\x10\x02\x42\x36\xea\x02\x33Temporalio::Internal::Bridge::Api::WorkflowCommandsb\x06proto3"
         | 
| 18 | 
            +
            descriptor_data = "\n;temporal/sdk/core/workflow_commands/workflow_commands.proto\x12\x19\x63oresdk.workflow_commands\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a$temporal/api/common/v1/message.proto\x1a$temporal/api/enums/v1/workflow.proto\x1a%temporal/api/failure/v1/message.proto\x1a\'temporal/api/sdk/v1/user_metadata.proto\x1a\x35temporal/sdk/core/child_workflow/child_workflow.proto\x1a%temporal/sdk/core/common/common.proto\"\xe5\x0f\n\x0fWorkflowCommand\x12\x38\n\ruser_metadata\x18\x64 \x01(\x0b\x32!.temporal.api.sdk.v1.UserMetadata\x12<\n\x0bstart_timer\x18\x01 \x01(\x0b\x32%.coresdk.workflow_commands.StartTimerH\x00\x12H\n\x11schedule_activity\x18\x02 \x01(\x0b\x32+.coresdk.workflow_commands.ScheduleActivityH\x00\x12\x42\n\x10respond_to_query\x18\x03 \x01(\x0b\x32&.coresdk.workflow_commands.QueryResultH\x00\x12S\n\x17request_cancel_activity\x18\x04 \x01(\x0b\x32\x30.coresdk.workflow_commands.RequestCancelActivityH\x00\x12>\n\x0c\x63\x61ncel_timer\x18\x05 \x01(\x0b\x32&.coresdk.workflow_commands.CancelTimerH\x00\x12[\n\x1b\x63omplete_workflow_execution\x18\x06 \x01(\x0b\x32\x34.coresdk.workflow_commands.CompleteWorkflowExecutionH\x00\x12S\n\x17\x66\x61il_workflow_execution\x18\x07 \x01(\x0b\x32\x30.coresdk.workflow_commands.FailWorkflowExecutionH\x00\x12g\n\"continue_as_new_workflow_execution\x18\x08 \x01(\x0b\x32\x39.coresdk.workflow_commands.ContinueAsNewWorkflowExecutionH\x00\x12W\n\x19\x63\x61ncel_workflow_execution\x18\t \x01(\x0b\x32\x32.coresdk.workflow_commands.CancelWorkflowExecutionH\x00\x12\x45\n\x10set_patch_marker\x18\n \x01(\x0b\x32).coresdk.workflow_commands.SetPatchMarkerH\x00\x12`\n\x1estart_child_workflow_execution\x18\x0b \x01(\x0b\x32\x36.coresdk.workflow_commands.StartChildWorkflowExecutionH\x00\x12\x62\n\x1f\x63\x61ncel_child_workflow_execution\x18\x0c \x01(\x0b\x32\x37.coresdk.workflow_commands.CancelChildWorkflowExecutionH\x00\x12w\n*request_cancel_external_workflow_execution\x18\r \x01(\x0b\x32\x41.coresdk.workflow_commands.RequestCancelExternalWorkflowExecutionH\x00\x12h\n\"signal_external_workflow_execution\x18\x0e \x01(\x0b\x32:.coresdk.workflow_commands.SignalExternalWorkflowExecutionH\x00\x12Q\n\x16\x63\x61ncel_signal_workflow\x18\x0f \x01(\x0b\x32/.coresdk.workflow_commands.CancelSignalWorkflowH\x00\x12S\n\x17schedule_local_activity\x18\x10 \x01(\x0b\x32\x30.coresdk.workflow_commands.ScheduleLocalActivityH\x00\x12^\n\x1drequest_cancel_local_activity\x18\x11 \x01(\x0b\x32\x35.coresdk.workflow_commands.RequestCancelLocalActivityH\x00\x12\x66\n!upsert_workflow_search_attributes\x18\x12 \x01(\x0b\x32\x39.coresdk.workflow_commands.UpsertWorkflowSearchAttributesH\x00\x12Y\n\x1amodify_workflow_properties\x18\x13 \x01(\x0b\x32\x33.coresdk.workflow_commands.ModifyWorkflowPropertiesH\x00\x12\x44\n\x0fupdate_response\x18\x14 \x01(\x0b\x32).coresdk.workflow_commands.UpdateResponseH\x00\x12U\n\x18schedule_nexus_operation\x18\x15 \x01(\x0b\x32\x31.coresdk.workflow_commands.ScheduleNexusOperationH\x00\x12`\n\x1erequest_cancel_nexus_operation\x18\x16 \x01(\x0b\x32\x36.coresdk.workflow_commands.RequestCancelNexusOperationH\x00\x42\t\n\x07variant\"S\n\nStartTimer\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x38\n\x15start_to_fire_timeout\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\"\x1a\n\x0b\x43\x61ncelTimer\x12\x0b\n\x03seq\x18\x01 \x01(\r\"\xb8\x06\n\x10ScheduleActivity\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x13\n\x0b\x61\x63tivity_id\x18\x02 \x01(\t\x12\x15\n\ractivity_type\x18\x03 \x01(\t\x12\x12\n\ntask_queue\x18\x05 \x01(\t\x12I\n\x07headers\x18\x06 \x03(\x0b\x32\x38.coresdk.workflow_commands.ScheduleActivity.HeadersEntry\x12\x32\n\targuments\x18\x07 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12<\n\x19schedule_to_close_timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12<\n\x19schedule_to_start_timeout\x18\t \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x16start_to_close_timeout\x18\n \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x34\n\x11heartbeat_timeout\x18\x0b \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x0cretry_policy\x18\x0c \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12N\n\x11\x63\x61ncellation_type\x18\r \x01(\x0e\x32\x33.coresdk.workflow_commands.ActivityCancellationType\x12\x1e\n\x16\x64o_not_eagerly_execute\x18\x0e \x01(\x08\x12;\n\x11versioning_intent\x18\x0f \x01(\x0e\x32 .coresdk.common.VersioningIntent\x12\x32\n\x08priority\x18\x10 \x01(\x0b\x32 .temporal.api.common.v1.Priority\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"\xee\x05\n\x15ScheduleLocalActivity\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x13\n\x0b\x61\x63tivity_id\x18\x02 \x01(\t\x12\x15\n\ractivity_type\x18\x03 \x01(\t\x12\x0f\n\x07\x61ttempt\x18\x04 \x01(\r\x12:\n\x16original_schedule_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12N\n\x07headers\x18\x06 \x03(\x0b\x32=.coresdk.workflow_commands.ScheduleLocalActivity.HeadersEntry\x12\x32\n\targuments\x18\x07 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12<\n\x19schedule_to_close_timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12<\n\x19schedule_to_start_timeout\x18\t \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x16start_to_close_timeout\x18\n \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x39\n\x0cretry_policy\x18\x0b \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12\x38\n\x15local_retry_threshold\x18\x0c \x01(\x0b\x32\x19.google.protobuf.Duration\x12N\n\x11\x63\x61ncellation_type\x18\r \x01(\x0e\x32\x33.coresdk.workflow_commands.ActivityCancellationType\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"$\n\x15RequestCancelActivity\x12\x0b\n\x03seq\x18\x01 \x01(\r\")\n\x1aRequestCancelLocalActivity\x12\x0b\n\x03seq\x18\x01 \x01(\r\"\x9c\x01\n\x0bQueryResult\x12\x10\n\x08query_id\x18\x01 \x01(\t\x12<\n\tsucceeded\x18\x02 \x01(\x0b\x32\'.coresdk.workflow_commands.QuerySuccessH\x00\x12\x32\n\x06\x66\x61iled\x18\x03 \x01(\x0b\x32 .temporal.api.failure.v1.FailureH\x00\x42\t\n\x07variant\"A\n\x0cQuerySuccess\x12\x31\n\x08response\x18\x01 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload\"L\n\x19\x43ompleteWorkflowExecution\x12/\n\x06result\x18\x01 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload\"J\n\x15\x46\x61ilWorkflowExecution\x12\x31\n\x07\x66\x61ilure\x18\x01 \x01(\x0b\x32 .temporal.api.failure.v1.Failure\"\xfb\x06\n\x1e\x43ontinueAsNewWorkflowExecution\x12\x15\n\rworkflow_type\x18\x01 \x01(\t\x12\x12\n\ntask_queue\x18\x02 \x01(\t\x12\x32\n\targuments\x18\x03 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12\x37\n\x14workflow_run_timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x38\n\x15workflow_task_timeout\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12Q\n\x04memo\x18\x06 \x03(\x0b\x32\x43.coresdk.workflow_commands.ContinueAsNewWorkflowExecution.MemoEntry\x12W\n\x07headers\x18\x07 \x03(\x0b\x32\x46.coresdk.workflow_commands.ContinueAsNewWorkflowExecution.HeadersEntry\x12j\n\x11search_attributes\x18\x08 \x03(\x0b\x32O.coresdk.workflow_commands.ContinueAsNewWorkflowExecution.SearchAttributesEntry\x12\x39\n\x0cretry_policy\x18\t \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12;\n\x11versioning_intent\x18\n \x01(\x0e\x32 .coresdk.common.VersioningIntent\x1aL\n\tMemoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x1aX\n\x15SearchAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"\x19\n\x17\x43\x61ncelWorkflowExecution\"6\n\x0eSetPatchMarker\x12\x10\n\x08patch_id\x18\x01 \x01(\t\x12\x12\n\ndeprecated\x18\x02 \x01(\x08\"\x94\n\n\x1bStartChildWorkflowExecution\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x11\n\tnamespace\x18\x02 \x01(\t\x12\x13\n\x0bworkflow_id\x18\x03 \x01(\t\x12\x15\n\rworkflow_type\x18\x04 \x01(\t\x12\x12\n\ntask_queue\x18\x05 \x01(\t\x12.\n\x05input\x18\x06 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12=\n\x1aworkflow_execution_timeout\x18\x07 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x37\n\x14workflow_run_timeout\x18\x08 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x38\n\x15workflow_task_timeout\x18\t \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x46\n\x13parent_close_policy\x18\n \x01(\x0e\x32).coresdk.child_workflow.ParentClosePolicy\x12N\n\x18workflow_id_reuse_policy\x18\x0c \x01(\x0e\x32,.temporal.api.enums.v1.WorkflowIdReusePolicy\x12\x39\n\x0cretry_policy\x18\r \x01(\x0b\x32#.temporal.api.common.v1.RetryPolicy\x12\x15\n\rcron_schedule\x18\x0e \x01(\t\x12T\n\x07headers\x18\x0f \x03(\x0b\x32\x43.coresdk.workflow_commands.StartChildWorkflowExecution.HeadersEntry\x12N\n\x04memo\x18\x10 \x03(\x0b\x32@.coresdk.workflow_commands.StartChildWorkflowExecution.MemoEntry\x12g\n\x11search_attributes\x18\x11 \x03(\x0b\x32L.coresdk.workflow_commands.StartChildWorkflowExecution.SearchAttributesEntry\x12P\n\x11\x63\x61ncellation_type\x18\x12 \x01(\x0e\x32\x35.coresdk.child_workflow.ChildWorkflowCancellationType\x12;\n\x11versioning_intent\x18\x13 \x01(\x0e\x32 .coresdk.common.VersioningIntent\x12\x32\n\x08priority\x18\x14 \x01(\x0b\x32 .temporal.api.common.v1.Priority\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x1aL\n\tMemoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x1aX\n\x15SearchAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"J\n\x1c\x43\x61ncelChildWorkflowExecution\x12\x1a\n\x12\x63hild_workflow_seq\x18\x01 \x01(\r\x12\x0e\n\x06reason\x18\x02 \x01(\t\"\x8e\x01\n&RequestCancelExternalWorkflowExecution\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12G\n\x12workflow_execution\x18\x02 \x01(\x0b\x32+.coresdk.common.NamespacedWorkflowExecution\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\x8f\x03\n\x1fSignalExternalWorkflowExecution\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12I\n\x12workflow_execution\x18\x02 \x01(\x0b\x32+.coresdk.common.NamespacedWorkflowExecutionH\x00\x12\x1b\n\x11\x63hild_workflow_id\x18\x03 \x01(\tH\x00\x12\x13\n\x0bsignal_name\x18\x04 \x01(\t\x12-\n\x04\x61rgs\x18\x05 \x03(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12X\n\x07headers\x18\x06 \x03(\x0b\x32G.coresdk.workflow_commands.SignalExternalWorkflowExecution.HeadersEntry\x1aO\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\x42\x08\n\x06target\"#\n\x14\x43\x61ncelSignalWorkflow\x12\x0b\n\x03seq\x18\x01 \x01(\r\"\xe6\x01\n\x1eUpsertWorkflowSearchAttributes\x12j\n\x11search_attributes\x18\x01 \x03(\x0b\x32O.coresdk.workflow_commands.UpsertWorkflowSearchAttributes.SearchAttributesEntry\x1aX\n\x15SearchAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload:\x02\x38\x01\"O\n\x18ModifyWorkflowProperties\x12\x33\n\rupserted_memo\x18\x01 \x01(\x0b\x32\x1c.temporal.api.common.v1.Memo\"\xd2\x01\n\x0eUpdateResponse\x12\x1c\n\x14protocol_instance_id\x18\x01 \x01(\t\x12*\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12\x34\n\x08rejected\x18\x03 \x01(\x0b\x32 .temporal.api.failure.v1.FailureH\x00\x12\x34\n\tcompleted\x18\x04 \x01(\x0b\x32\x1f.temporal.api.common.v1.PayloadH\x00\x42\n\n\x08response\"\xd7\x02\n\x16ScheduleNexusOperation\x12\x0b\n\x03seq\x18\x01 \x01(\r\x12\x10\n\x08\x65ndpoint\x18\x02 \x01(\t\x12\x0f\n\x07service\x18\x03 \x01(\t\x12\x11\n\toperation\x18\x04 \x01(\t\x12.\n\x05input\x18\x05 \x01(\x0b\x32\x1f.temporal.api.common.v1.Payload\x12<\n\x19schedule_to_close_timeout\x18\x06 \x01(\x0b\x32\x19.google.protobuf.Duration\x12X\n\x0cnexus_header\x18\x07 \x03(\x0b\x32\x42.coresdk.workflow_commands.ScheduleNexusOperation.NexusHeaderEntry\x1a\x32\n\x10NexusHeaderEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"*\n\x1bRequestCancelNexusOperation\x12\x0b\n\x03seq\x18\x01 \x01(\r*X\n\x18\x41\x63tivityCancellationType\x12\x0e\n\nTRY_CANCEL\x10\x00\x12\x1f\n\x1bWAIT_CANCELLATION_COMPLETED\x10\x01\x12\x0b\n\x07\x41\x42\x41NDON\x10\x02\x42\x36\xea\x02\x33Temporalio::Internal::Bridge::Api::WorkflowCommandsb\x06proto3"
         | 
| 19 19 |  | 
| 20 20 | 
             
            pool = Google::Protobuf::DescriptorPool.generated_pool
         | 
| 21 21 | 
             
            pool.add_serialized_file(descriptor_data)
         | 
| @@ -6,11 +6,12 @@ require 'google/protobuf' | |
| 6 6 |  | 
| 7 7 | 
             
            require 'temporalio/api/failure/v1/message'
         | 
| 8 8 | 
             
            require 'temporalio/api/enums/v1/failed_cause'
         | 
| 9 | 
            +
            require 'temporalio/api/enums/v1/workflow'
         | 
| 9 10 | 
             
            require 'temporalio/internal/bridge/api/common/common'
         | 
| 10 11 | 
             
            require 'temporalio/internal/bridge/api/workflow_commands/workflow_commands'
         | 
| 11 12 |  | 
| 12 13 |  | 
| 13 | 
            -
            descriptor_data = "\n?temporal/sdk/core/workflow_completion/workflow_completion.proto\x12\x1b\x63oresdk.workflow_completion\x1a%temporal/api/failure/v1/message.proto\x1a(temporal/api/enums/v1/failed_cause.proto\x1a%temporal/sdk/core/common/common.proto\x1a;temporal/sdk/core/workflow_commands/workflow_commands.proto\"\xac\x01\n\x1cWorkflowActivationCompletion\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12:\n\nsuccessful\x18\x02 \x01(\x0b\x32$.coresdk.workflow_completion.SuccessH\x00\x12\x36\n\x06\x66\x61iled\x18\x03 \x01(\x0b\x32$.coresdk.workflow_completion.FailureH\x00\x42\x08\n\x06status\" | 
| 14 | 
            +
            descriptor_data = "\n?temporal/sdk/core/workflow_completion/workflow_completion.proto\x12\x1b\x63oresdk.workflow_completion\x1a%temporal/api/failure/v1/message.proto\x1a(temporal/api/enums/v1/failed_cause.proto\x1a$temporal/api/enums/v1/workflow.proto\x1a%temporal/sdk/core/common/common.proto\x1a;temporal/sdk/core/workflow_commands/workflow_commands.proto\"\xac\x01\n\x1cWorkflowActivationCompletion\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12:\n\nsuccessful\x18\x02 \x01(\x0b\x32$.coresdk.workflow_completion.SuccessH\x00\x12\x36\n\x06\x66\x61iled\x18\x03 \x01(\x0b\x32$.coresdk.workflow_completion.FailureH\x00\x42\x08\n\x06status\"\xac\x01\n\x07Success\x12<\n\x08\x63ommands\x18\x01 \x03(\x0b\x32*.coresdk.workflow_commands.WorkflowCommand\x12\x1b\n\x13used_internal_flags\x18\x06 \x03(\r\x12\x46\n\x13versioning_behavior\x18\x07 \x01(\x0e\x32).temporal.api.enums.v1.VersioningBehavior\"\x81\x01\n\x07\x46\x61ilure\x12\x31\n\x07\x66\x61ilure\x18\x01 \x01(\x0b\x32 .temporal.api.failure.v1.Failure\x12\x43\n\x0b\x66orce_cause\x18\x02 \x01(\x0e\x32..temporal.api.enums.v1.WorkflowTaskFailedCauseB8\xea\x02\x35Temporalio::Internal::Bridge::Api::WorkflowCompletionb\x06proto3"
         | 
| 14 15 |  | 
| 15 16 | 
             
            pool = Google::Protobuf::DescriptorPool.generated_pool
         | 
| 16 17 | 
             
            pool.add_serialized_file(descriptor_data)
         | 
| @@ -37,6 +37,8 @@ module Temporalio | |
| 37 37 | 
             
                      :metric_periodicity, # Optional
         | 
| 38 38 | 
             
                      :metric_temporality_delta,
         | 
| 39 39 | 
             
                      :durations_as_seconds,
         | 
| 40 | 
            +
                      :http,
         | 
| 41 | 
            +
                      :histogram_bucket_overrides, # Optional
         | 
| 40 42 | 
             
                      keyword_init: true
         | 
| 41 43 | 
             
                    )
         | 
| 42 44 |  | 
| @@ -45,6 +47,7 @@ module Temporalio | |
| 45 47 | 
             
                      :counters_total_suffix,
         | 
| 46 48 | 
             
                      :unit_suffix,
         | 
| 47 49 | 
             
                      :durations_as_seconds,
         | 
| 50 | 
            +
                      :histogram_bucket_overrides, # Optional
         | 
| 48 51 | 
             
                      keyword_init: true
         | 
| 49 52 | 
             
                    )
         | 
| 50 53 | 
             
                  end
         | 
| @@ -18,9 +18,11 @@ module Temporalio | |
| 18 18 | 
             
                        :port, # Optional
         | 
| 19 19 | 
             
                        :database_filename, # Optional
         | 
| 20 20 | 
             
                        :ui,
         | 
| 21 | 
            +
                        :ui_port, # Optional, should be nil if ui is false
         | 
| 21 22 | 
             
                        :log_format,
         | 
| 22 23 | 
             
                        :log_level,
         | 
| 23 24 | 
             
                        :extra_args,
         | 
| 25 | 
            +
                        :download_ttl, # Optional
         | 
| 24 26 | 
             
                        keyword_init: true
         | 
| 25 27 | 
             
                      )
         | 
| 26 28 |  | 
| @@ -32,6 +34,7 @@ module Temporalio | |
| 32 34 | 
             
                        :download_dest_dir, # Optional
         | 
| 33 35 | 
             
                        :port, # Optional
         | 
| 34 36 | 
             
                        :extra_args,
         | 
| 37 | 
            +
                        :download_ttl, # Optional
         | 
| 35 38 | 
             
                        keyword_init: true
         | 
| 36 39 | 
             
                      )
         | 
| 37 40 |  | 
| @@ -9,6 +9,7 @@ require 'temporalio/client/connection' | |
| 9 9 | 
             
            require 'temporalio/client/interceptor'
         | 
| 10 10 | 
             
            require 'temporalio/client/schedule'
         | 
| 11 11 | 
             
            require 'temporalio/client/schedule_handle'
         | 
| 12 | 
            +
            require 'temporalio/client/with_start_workflow_operation'
         | 
| 12 13 | 
             
            require 'temporalio/client/workflow_execution'
         | 
| 13 14 | 
             
            require 'temporalio/client/workflow_execution_count'
         | 
| 14 15 | 
             
            require 'temporalio/client/workflow_handle'
         | 
| @@ -41,18 +42,15 @@ module Temporalio | |
| 41 42 | 
             
                    end
         | 
| 42 43 |  | 
| 43 44 | 
             
                    def initialize(client)
         | 
| 44 | 
            -
                      super(nil)
         | 
| 45 | 
            +
                      super(nil) # steep:ignore
         | 
| 45 46 | 
             
                      @client = client
         | 
| 46 47 | 
             
                    end
         | 
| 47 48 |  | 
| 48 49 | 
             
                    def start_workflow(input)
         | 
| 49 | 
            -
                      # TODO(cretz): Signal/update with start
         | 
| 50 50 | 
             
                      req = Api::WorkflowService::V1::StartWorkflowExecutionRequest.new(
         | 
| 51 51 | 
             
                        request_id: SecureRandom.uuid,
         | 
| 52 52 | 
             
                        namespace: @client.namespace,
         | 
| 53 | 
            -
                        workflow_type: Api::Common::V1::WorkflowType.new(
         | 
| 54 | 
            -
                          name: Workflow::Definition._workflow_type_from_workflow_parameter(input.workflow)
         | 
| 55 | 
            -
                        ),
         | 
| 53 | 
            +
                        workflow_type: Api::Common::V1::WorkflowType.new(name: input.workflow),
         | 
| 56 54 | 
             
                        workflow_id: input.workflow_id,
         | 
| 57 55 | 
             
                        task_queue: Api::TaskQueue::V1::TaskQueue.new(name: input.task_queue.to_s),
         | 
| 58 56 | 
             
                        input: @client.data_converter.to_payloads(input.args),
         | 
| @@ -68,6 +66,9 @@ module Temporalio | |
| 68 66 | 
             
                        search_attributes: input.search_attributes&._to_proto,
         | 
| 69 67 | 
             
                        workflow_start_delay: ProtoUtils.seconds_to_duration(input.start_delay),
         | 
| 70 68 | 
             
                        request_eager_execution: input.request_eager_start,
         | 
| 69 | 
            +
                        user_metadata: ProtoUtils.to_user_metadata(
         | 
| 70 | 
            +
                          input.static_summary, input.static_details, @client.data_converter
         | 
| 71 | 
            +
                        ),
         | 
| 71 72 | 
             
                        header: ProtoUtils.headers_to_proto(input.headers, @client.data_converter)
         | 
| 72 73 | 
             
                      )
         | 
| 73 74 |  | 
| @@ -104,6 +105,225 @@ module Temporalio | |
| 104 105 | 
             
                      )
         | 
| 105 106 | 
             
                    end
         | 
| 106 107 |  | 
| 108 | 
            +
                    def start_update_with_start_workflow(input)
         | 
| 109 | 
            +
                      raise ArgumentError, 'Start operation is required' unless input.start_workflow_operation
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                      if input.start_workflow_operation.options.id_conflict_policy == WorkflowIDConflictPolicy::UNSPECIFIED
         | 
| 112 | 
            +
                        raise ArgumentError, 'ID conflict policy is required in start operation'
         | 
| 113 | 
            +
                      end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                      # Try to mark used before using
         | 
| 116 | 
            +
                      input.start_workflow_operation._mark_used
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                      # Build request
         | 
| 119 | 
            +
                      start_options = input.start_workflow_operation.options
         | 
| 120 | 
            +
                      start_req = _start_workflow_request_from_with_start_options(
         | 
| 121 | 
            +
                        Api::WorkflowService::V1::StartWorkflowExecutionRequest, start_options
         | 
| 122 | 
            +
                      )
         | 
| 123 | 
            +
                      req = Api::WorkflowService::V1::ExecuteMultiOperationRequest.new(
         | 
| 124 | 
            +
                        namespace: @client.namespace,
         | 
| 125 | 
            +
                        operations: [
         | 
| 126 | 
            +
                          Api::WorkflowService::V1::ExecuteMultiOperationRequest::Operation.new(start_workflow: start_req),
         | 
| 127 | 
            +
                          Api::WorkflowService::V1::ExecuteMultiOperationRequest::Operation.new(
         | 
| 128 | 
            +
                            update_workflow: Api::WorkflowService::V1::UpdateWorkflowExecutionRequest.new(
         | 
| 129 | 
            +
                              namespace: @client.namespace,
         | 
| 130 | 
            +
                              workflow_execution: Api::Common::V1::WorkflowExecution.new(
         | 
| 131 | 
            +
                                workflow_id: start_options.id
         | 
| 132 | 
            +
                              ),
         | 
| 133 | 
            +
                              request: Api::Update::V1::Request.new(
         | 
| 134 | 
            +
                                meta: Api::Update::V1::Meta.new(
         | 
| 135 | 
            +
                                  update_id: input.update_id,
         | 
| 136 | 
            +
                                  identity: @client.connection.identity
         | 
| 137 | 
            +
                                ),
         | 
| 138 | 
            +
                                input: Api::Update::V1::Input.new(
         | 
| 139 | 
            +
                                  name: input.update,
         | 
| 140 | 
            +
                                  args: @client.data_converter.to_payloads(input.args),
         | 
| 141 | 
            +
                                  header: Internal::ProtoUtils.headers_to_proto(input.headers, @client.data_converter)
         | 
| 142 | 
            +
                                )
         | 
| 143 | 
            +
                              ),
         | 
| 144 | 
            +
                              wait_policy: Api::Update::V1::WaitPolicy.new(
         | 
| 145 | 
            +
                                lifecycle_stage: input.wait_for_stage
         | 
| 146 | 
            +
                              )
         | 
| 147 | 
            +
                            )
         | 
| 148 | 
            +
                          )
         | 
| 149 | 
            +
                        ]
         | 
| 150 | 
            +
                      )
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                      # Continually try to start until an exception occurs, the user-asked stage is reached, or the stage is
         | 
| 153 | 
            +
                      # accepted. But we will set the workflow handle as soon as we can.
         | 
| 154 | 
            +
                      # @type var update_resp: untyped
         | 
| 155 | 
            +
                      update_resp = nil
         | 
| 156 | 
            +
                      run_id = nil
         | 
| 157 | 
            +
                      begin
         | 
| 158 | 
            +
                        loop do
         | 
| 159 | 
            +
                          resp = @client.workflow_service.execute_multi_operation(
         | 
| 160 | 
            +
                            req, rpc_options: Implementation.with_default_rpc_options(input.rpc_options)
         | 
| 161 | 
            +
                          )
         | 
| 162 | 
            +
                          run_id = resp.responses.first.start_workflow.run_id
         | 
| 163 | 
            +
                          # Set workflow handle (no-op if already set)
         | 
| 164 | 
            +
                          input.start_workflow_operation._set_workflow_handle(
         | 
| 165 | 
            +
                            Temporalio::Client::WorkflowHandle.new(
         | 
| 166 | 
            +
                              client: @client,
         | 
| 167 | 
            +
                              id: start_options.id,
         | 
| 168 | 
            +
                              run_id: nil,
         | 
| 169 | 
            +
                              result_run_id: run_id,
         | 
| 170 | 
            +
                              first_execution_run_id: run_id
         | 
| 171 | 
            +
                            )
         | 
| 172 | 
            +
                          )
         | 
| 173 | 
            +
                          update_resp = resp.responses.last.update_workflow
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                          # We're only done if the response stage is at least accepted
         | 
| 176 | 
            +
                          if update_resp && Api::Enums::V1::UpdateWorkflowExecutionLifecycleStage.resolve(update_resp.stage) >=
         | 
| 177 | 
            +
                                            Temporalio::Client::WorkflowUpdateWaitStage::ACCEPTED
         | 
| 178 | 
            +
                            break
         | 
| 179 | 
            +
                          end
         | 
| 180 | 
            +
                        end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                        # If the user wants to wait until completed, we must poll until outcome if not already there
         | 
| 183 | 
            +
                        if input.wait_for_stage == Temporalio::Client::WorkflowUpdateWaitStage::COMPLETED && update_resp.outcome
         | 
| 184 | 
            +
                          update_resp.outcome = @client._impl.poll_workflow_update(
         | 
| 185 | 
            +
                            Temporalio::Client::Interceptor::PollWorkflowUpdateInput.new(
         | 
| 186 | 
            +
                              workflow_id: start_options.id,
         | 
| 187 | 
            +
                              run_id:,
         | 
| 188 | 
            +
                              update_id: input.update_id,
         | 
| 189 | 
            +
                              rpc_options: input.rpc_options
         | 
| 190 | 
            +
                            )
         | 
| 191 | 
            +
                          )
         | 
| 192 | 
            +
                        end
         | 
| 193 | 
            +
                      rescue Error => e
         | 
| 194 | 
            +
                        # If this is a multi-operation failure, set exception to the first present, non-OK, non-aborted error
         | 
| 195 | 
            +
                        if e.is_a?(Error::RPCError)
         | 
| 196 | 
            +
                          multi_err = e.grpc_status.details&.first&.unpack(Api::ErrorDetails::V1::MultiOperationExecutionFailure)
         | 
| 197 | 
            +
                          if multi_err
         | 
| 198 | 
            +
                            non_aborted = multi_err.statuses.find do |s|
         | 
| 199 | 
            +
                              # Exists, not-ok, not-aborted
         | 
| 200 | 
            +
                              s && s.code != Error::RPCError::Code::OK &&
         | 
| 201 | 
            +
                                !s.details&.first&.is(Api::Failure::V1::MultiOperationExecutionAborted)
         | 
| 202 | 
            +
                            end
         | 
| 203 | 
            +
                            if non_aborted
         | 
| 204 | 
            +
                              e = Error::RPCError.new(
         | 
| 205 | 
            +
                                non_aborted.message,
         | 
| 206 | 
            +
                                code: non_aborted.code,
         | 
| 207 | 
            +
                                raw_grpc_status: Api::Common::V1::GrpcStatus.new(
         | 
| 208 | 
            +
                                  code: non_aborted.code, message: non_aborted.message, details: non_aborted.details.to_a
         | 
| 209 | 
            +
                                )
         | 
| 210 | 
            +
                              )
         | 
| 211 | 
            +
                            end
         | 
| 212 | 
            +
                          end
         | 
| 213 | 
            +
                        end
         | 
| 214 | 
            +
                        if e.is_a?(Error::RPCError)
         | 
| 215 | 
            +
                          # Deadline exceeded or cancel is a special error type
         | 
| 216 | 
            +
                          if e.code == Error::RPCError::Code::DEADLINE_EXCEEDED || e.code == Error::RPCError::Code::CANCELED
         | 
| 217 | 
            +
                            e = Error::WorkflowUpdateRPCTimeoutOrCanceledError.new
         | 
| 218 | 
            +
                          elsif e.code == Error::RPCError::Code::ALREADY_EXISTS && e.grpc_status.details.first
         | 
| 219 | 
            +
                            # Unpack and set already started if that's the error
         | 
| 220 | 
            +
                            details = e.grpc_status.details.first.unpack(
         | 
| 221 | 
            +
                              Api::ErrorDetails::V1::WorkflowExecutionAlreadyStartedFailure
         | 
| 222 | 
            +
                            )
         | 
| 223 | 
            +
                            if details
         | 
| 224 | 
            +
                              e = Error::WorkflowAlreadyStartedError.new(
         | 
| 225 | 
            +
                                workflow_id: start_options.id,
         | 
| 226 | 
            +
                                workflow_type: start_req.workflow_type,
         | 
| 227 | 
            +
                                run_id: details.run_id
         | 
| 228 | 
            +
                              )
         | 
| 229 | 
            +
                            end
         | 
| 230 | 
            +
                          end
         | 
| 231 | 
            +
                        end
         | 
| 232 | 
            +
                        # Cancel is a special type
         | 
| 233 | 
            +
                        e = Error::WorkflowUpdateRPCTimeoutOrCanceledError.new if e.is_a?(Error::CanceledError)
         | 
| 234 | 
            +
                        # Before we raise here, we want to try to set the start operation exception (no-op if already set with a
         | 
| 235 | 
            +
                        # handle)
         | 
| 236 | 
            +
                        input.start_workflow_operation._set_workflow_handle(e)
         | 
| 237 | 
            +
                        raise e
         | 
| 238 | 
            +
                      end
         | 
| 239 | 
            +
             | 
| 240 | 
            +
                      # Return handle
         | 
| 241 | 
            +
                      Temporalio::Client::WorkflowUpdateHandle.new(
         | 
| 242 | 
            +
                        client: @client,
         | 
| 243 | 
            +
                        id: input.update_id,
         | 
| 244 | 
            +
                        workflow_id: start_options.id,
         | 
| 245 | 
            +
                        workflow_run_id: run_id,
         | 
| 246 | 
            +
                        known_outcome: update_resp.outcome
         | 
| 247 | 
            +
                      )
         | 
| 248 | 
            +
                    end
         | 
| 249 | 
            +
             | 
| 250 | 
            +
                    def signal_with_start_workflow(input)
         | 
| 251 | 
            +
                      raise ArgumentError, 'Start operation is required' unless input.start_workflow_operation
         | 
| 252 | 
            +
             | 
| 253 | 
            +
                      # Try to mark used before using
         | 
| 254 | 
            +
                      input.start_workflow_operation._mark_used
         | 
| 255 | 
            +
             | 
| 256 | 
            +
                      # Build req
         | 
| 257 | 
            +
                      start_options = input.start_workflow_operation.options
         | 
| 258 | 
            +
                      req = _start_workflow_request_from_with_start_options(
         | 
| 259 | 
            +
                        Api::WorkflowService::V1::SignalWithStartWorkflowExecutionRequest, start_options
         | 
| 260 | 
            +
                      )
         | 
| 261 | 
            +
                      req.signal_name = input.signal
         | 
| 262 | 
            +
                      req.signal_input = @client.data_converter.to_payloads(input.args)
         | 
| 263 | 
            +
             | 
| 264 | 
            +
                      # Send request
         | 
| 265 | 
            +
                      begin
         | 
| 266 | 
            +
                        resp = @client.workflow_service.signal_with_start_workflow_execution(
         | 
| 267 | 
            +
                          req,
         | 
| 268 | 
            +
                          rpc_options: Implementation.with_default_rpc_options(input.rpc_options)
         | 
| 269 | 
            +
                        )
         | 
| 270 | 
            +
                      rescue Error::RPCError => e
         | 
| 271 | 
            +
                        # Unpack and raise already started if that's the error, otherwise default raise
         | 
| 272 | 
            +
                        if e.code == Error::RPCError::Code::ALREADY_EXISTS && e.grpc_status.details.first
         | 
| 273 | 
            +
                          details = e.grpc_status.details.first.unpack(
         | 
| 274 | 
            +
                            Api::ErrorDetails::V1::WorkflowExecutionAlreadyStartedFailure
         | 
| 275 | 
            +
                          )
         | 
| 276 | 
            +
                          if details
         | 
| 277 | 
            +
                            e = Error::WorkflowAlreadyStartedError.new(
         | 
| 278 | 
            +
                              workflow_id: req.workflow_id,
         | 
| 279 | 
            +
                              workflow_type: req.workflow_type.name,
         | 
| 280 | 
            +
                              run_id: details.run_id
         | 
| 281 | 
            +
                            )
         | 
| 282 | 
            +
                          end
         | 
| 283 | 
            +
                        end
         | 
| 284 | 
            +
                        # Before we raise here, we want to the start operation exception
         | 
| 285 | 
            +
                        input.start_workflow_operation._set_workflow_handle(e)
         | 
| 286 | 
            +
                        raise e
         | 
| 287 | 
            +
                      end
         | 
| 288 | 
            +
             | 
| 289 | 
            +
                      # Set handle and return handle
         | 
| 290 | 
            +
                      handle = Temporalio::Client::WorkflowHandle.new(
         | 
| 291 | 
            +
                        client: @client,
         | 
| 292 | 
            +
                        id: start_options.id,
         | 
| 293 | 
            +
                        run_id: nil,
         | 
| 294 | 
            +
                        result_run_id: resp.run_id,
         | 
| 295 | 
            +
                        first_execution_run_id: resp.run_id
         | 
| 296 | 
            +
                      )
         | 
| 297 | 
            +
                      input.start_workflow_operation._set_workflow_handle(handle)
         | 
| 298 | 
            +
                      handle
         | 
| 299 | 
            +
                    end
         | 
| 300 | 
            +
             | 
| 301 | 
            +
                    def _start_workflow_request_from_with_start_options(klass, start_options)
         | 
| 302 | 
            +
                      klass.new(
         | 
| 303 | 
            +
                        request_id: SecureRandom.uuid,
         | 
| 304 | 
            +
                        namespace: @client.namespace,
         | 
| 305 | 
            +
                        workflow_type: Api::Common::V1::WorkflowType.new(name: start_options.workflow),
         | 
| 306 | 
            +
                        workflow_id: start_options.id,
         | 
| 307 | 
            +
                        task_queue: Api::TaskQueue::V1::TaskQueue.new(name: start_options.task_queue.to_s),
         | 
| 308 | 
            +
                        input: @client.data_converter.to_payloads(start_options.args),
         | 
| 309 | 
            +
                        workflow_execution_timeout: ProtoUtils.seconds_to_duration(start_options.execution_timeout),
         | 
| 310 | 
            +
                        workflow_run_timeout: ProtoUtils.seconds_to_duration(start_options.run_timeout),
         | 
| 311 | 
            +
                        workflow_task_timeout: ProtoUtils.seconds_to_duration(start_options.task_timeout),
         | 
| 312 | 
            +
                        identity: @client.connection.identity,
         | 
| 313 | 
            +
                        workflow_id_reuse_policy: start_options.id_reuse_policy,
         | 
| 314 | 
            +
                        workflow_id_conflict_policy: start_options.id_conflict_policy,
         | 
| 315 | 
            +
                        retry_policy: start_options.retry_policy&._to_proto,
         | 
| 316 | 
            +
                        cron_schedule: start_options.cron_schedule,
         | 
| 317 | 
            +
                        memo: ProtoUtils.memo_to_proto(start_options.memo, @client.data_converter),
         | 
| 318 | 
            +
                        search_attributes: start_options.search_attributes&._to_proto,
         | 
| 319 | 
            +
                        workflow_start_delay: ProtoUtils.seconds_to_duration(start_options.start_delay),
         | 
| 320 | 
            +
                        user_metadata: ProtoUtils.to_user_metadata(
         | 
| 321 | 
            +
                          start_options.static_summary, start_options.static_details, @client.data_converter
         | 
| 322 | 
            +
                        ),
         | 
| 323 | 
            +
                        header: ProtoUtils.headers_to_proto(start_options.headers, @client.data_converter)
         | 
| 324 | 
            +
                      )
         | 
| 325 | 
            +
                    end
         | 
| 326 | 
            +
             | 
| 107 327 | 
             
                    def list_workflows(input)
         | 
| 108 328 | 
             
                      Enumerator.new do |yielder|
         | 
| 109 329 | 
             
                        req = Api::WorkflowService::V1::ListWorkflowExecutionsRequest.new(
         | 
| @@ -191,7 +411,7 @@ module Temporalio | |
| 191 411 | 
             
                            workflow_id: input.workflow_id,
         | 
| 192 412 | 
             
                            run_id: input.run_id || ''
         | 
| 193 413 | 
             
                          ),
         | 
| 194 | 
            -
                          signal_name:  | 
| 414 | 
            +
                          signal_name: input.signal,
         | 
| 195 415 | 
             
                          input: @client.data_converter.to_payloads(input.args),
         | 
| 196 416 | 
             
                          header: Internal::ProtoUtils.headers_to_proto(input.headers, @client.data_converter),
         | 
| 197 417 | 
             
                          identity: @client.connection.identity,
         | 
| @@ -212,7 +432,7 @@ module Temporalio | |
| 212 432 | 
             
                              run_id: input.run_id || ''
         | 
| 213 433 | 
             
                            ),
         | 
| 214 434 | 
             
                            query: Api::Query::V1::WorkflowQuery.new(
         | 
| 215 | 
            -
                              query_type:  | 
| 435 | 
            +
                              query_type: input.query,
         | 
| 216 436 | 
             
                              query_args: @client.data_converter.to_payloads(input.args),
         | 
| 217 437 | 
             
                              header: Internal::ProtoUtils.headers_to_proto(input.headers, @client.data_converter)
         | 
| 218 438 | 
             
                            ),
         | 
| @@ -255,7 +475,7 @@ module Temporalio | |
| 255 475 | 
             
                            identity: @client.connection.identity
         | 
| 256 476 | 
             
                          ),
         | 
| 257 477 | 
             
                          input: Api::Update::V1::Input.new(
         | 
| 258 | 
            -
                            name:  | 
| 478 | 
            +
                            name: input.update,
         | 
| 259 479 | 
             
                            args: @client.data_converter.to_payloads(input.args),
         | 
| 260 480 | 
             
                            header: Internal::ProtoUtils.headers_to_proto(input.headers, @client.data_converter)
         | 
| 261 481 | 
             
                          )
         | 
| @@ -284,11 +504,13 @@ module Temporalio | |
| 284 504 | 
             
                        end
         | 
| 285 505 | 
             
                      rescue Error::RPCError => e
         | 
| 286 506 | 
             
                        # Deadline exceeded or cancel is a special error type
         | 
| 287 | 
            -
                        if e.code == Error::RPCError::Code::DEADLINE_EXCEEDED || e.code == Error::RPCError::Code:: | 
| 507 | 
            +
                        if e.code == Error::RPCError::Code::DEADLINE_EXCEEDED || e.code == Error::RPCError::Code::CANCELED
         | 
| 288 508 | 
             
                          raise Error::WorkflowUpdateRPCTimeoutOrCanceledError
         | 
| 289 509 | 
             
                        end
         | 
| 290 510 |  | 
| 291 511 | 
             
                        raise
         | 
| 512 | 
            +
                      rescue Error::CanceledError
         | 
| 513 | 
            +
                        raise Error::WorkflowUpdateRPCTimeoutOrCanceledError
         | 
| 292 514 | 
             
                      end
         | 
| 293 515 |  | 
| 294 516 | 
             
                      # If the user wants to wait until completed, we must poll until outcome
         | 
| @@ -338,7 +560,7 @@ module Temporalio | |
| 338 560 | 
             
                        return resp.outcome if resp.outcome
         | 
| 339 561 | 
             
                      rescue Error::RPCError => e
         | 
| 340 562 | 
             
                        # Deadline exceeded or cancel is a special error type
         | 
| 341 | 
            -
                        if e.code == Error::RPCError::Code::DEADLINE_EXCEEDED || e.code == Error::RPCError::Code:: | 
| 563 | 
            +
                        if e.code == Error::RPCError::Code::DEADLINE_EXCEEDED || e.code == Error::RPCError::Code::CANCELED
         | 
| 342 564 | 
             
                          raise Error::WorkflowUpdateRPCTimeoutOrCanceledError
         | 
| 343 565 | 
             
                        end
         | 
| 344 566 |  | 
| @@ -51,7 +51,7 @@ module Temporalio | |
| 51 51 | 
             
                  end
         | 
| 52 52 |  | 
| 53 53 | 
             
                  def self.memo_from_proto(memo, converter)
         | 
| 54 | 
            -
                    return nil if memo.nil? || memo.fields.size.zero? # rubocop:disable Style/ZeroLengthPredicate Google Maps don't have empty
         | 
| 54 | 
            +
                    return nil if memo.nil? || memo.fields.size.zero? # rubocop:disable Style/ZeroLengthPredicate -- Google Maps don't have empty
         | 
| 55 55 |  | 
| 56 56 | 
             
                    memo.fields.each_with_object({}) { |(key, val), h| h[key] = converter.from_payload(val) } # rubocop:disable Style/HashTransformValues
         | 
| 57 57 | 
             
                  end
         | 
| @@ -73,7 +73,7 @@ module Temporalio | |
| 73 73 | 
             
                  end
         | 
| 74 74 |  | 
| 75 75 | 
             
                  def self.headers_from_proto_map(headers, converter)
         | 
| 76 | 
            -
                    return nil if headers.nil? || headers.size.zero? # rubocop:disable Style/ZeroLengthPredicate Google Maps don't have empty
         | 
| 76 | 
            +
                    return nil if headers.nil? || headers.size.zero? # rubocop:disable Style/ZeroLengthPredicate -- Google Maps don't have empty
         | 
| 77 77 |  | 
| 78 78 | 
             
                    headers.each_with_object({}) do |(key, val), h| # rubocop:disable Style/HashTransformValues
         | 
| 79 79 | 
             
                      # @type var h: Hash[String, Object?]
         | 
| @@ -106,6 +106,38 @@ module Temporalio | |
| 106 106 | 
             
                    converter.to_payloads(values).payloads.to_ary
         | 
| 107 107 | 
             
                  end
         | 
| 108 108 |  | 
| 109 | 
            +
                  def self.assert_non_reserved_name(name)
         | 
| 110 | 
            +
                    name = name&.to_s # In case it's a symbol or not present
         | 
| 111 | 
            +
                    return unless name
         | 
| 112 | 
            +
                    raise "'#{name}' cannot start with '__temporal_'" if name.start_with?('__temporal_')
         | 
| 113 | 
            +
                    # Might as well disable __stack_trace and __enhanced_stack_trace everywhere even though technically it's only
         | 
| 114 | 
            +
                    # reserved for queries
         | 
| 115 | 
            +
                    raise "'#{name}' name invalid" if name == '__stack_trace' || name == '__enhanced_stack_trace'
         | 
| 116 | 
            +
                  end
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                  def self.reserved_name?(name)
         | 
| 119 | 
            +
                    name = name&.to_s # In case it's a symbol or not present
         | 
| 120 | 
            +
                    return false unless name
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                    name.start_with?('__temporal_') || name == '__stack_trace' || name == '__enhanced_stack_trace'
         | 
| 123 | 
            +
                  end
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                  def self.to_user_metadata(summary, details, converter)
         | 
| 126 | 
            +
                    return nil if (!summary || summary.empty?) && (!details || details.empty?)
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                    metadata = Temporalio::Api::Sdk::V1::UserMetadata.new
         | 
| 129 | 
            +
                    metadata.summary = converter.to_payload(summary) if summary && !summary.empty?
         | 
| 130 | 
            +
                    metadata.details = converter.to_payload(details) if details && !details.empty?
         | 
| 131 | 
            +
                    metadata
         | 
| 132 | 
            +
                  end
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                  def self.from_user_metadata(metadata, converter)
         | 
| 135 | 
            +
                    [
         | 
| 136 | 
            +
                      (converter.from_payload(metadata.summary) if metadata&.summary), #: String?
         | 
| 137 | 
            +
                      (converter.from_payload(metadata.details) if metadata&.details) #: String?
         | 
| 138 | 
            +
                    ]
         | 
| 139 | 
            +
                  end
         | 
| 140 | 
            +
             | 
| 109 141 | 
             
                  class LazyMemo
         | 
| 110 142 | 
             
                    def initialize(raw_memo, converter)
         | 
| 111 143 | 
             
                      @raw_memo = raw_memo
         |