@temporalio/core-bridge 1.15.0 → 1.16.1

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.
Files changed (209) hide show
  1. package/Cargo.lock +172 -70
  2. package/lib/native.d.ts +1 -1
  3. package/package.json +2 -2
  4. package/releases/aarch64-apple-darwin/index.node +0 -0
  5. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  6. package/releases/x86_64-apple-darwin/index.node +0 -0
  7. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  8. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  9. package/sdk-core/.github/workflows/per-pr.yml +6 -6
  10. package/sdk-core/AGENTS.md +41 -30
  11. package/sdk-core/Cargo.toml +3 -0
  12. package/sdk-core/README.md +15 -9
  13. package/sdk-core/crates/client/Cargo.toml +4 -0
  14. package/sdk-core/crates/client/README.md +139 -0
  15. package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
  16. package/sdk-core/crates/client/src/callback_based.rs +7 -0
  17. package/sdk-core/crates/client/src/errors.rs +294 -0
  18. package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +280 -159
  19. package/sdk-core/crates/client/src/lib.rs +920 -1326
  20. package/sdk-core/crates/client/src/metrics.rs +24 -33
  21. package/sdk-core/crates/client/src/options_structs.rs +457 -0
  22. package/sdk-core/crates/client/src/replaceable.rs +5 -4
  23. package/sdk-core/crates/client/src/request_extensions.rs +8 -9
  24. package/sdk-core/crates/client/src/retry.rs +99 -54
  25. package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +1 -1
  26. package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
  27. package/sdk-core/crates/common/Cargo.toml +61 -2
  28. package/sdk-core/crates/common/build.rs +742 -12
  29. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
  30. package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
  31. package/sdk-core/crates/common/protos/api_upstream/buf.yaml +0 -3
  32. package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
  33. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +1166 -770
  34. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +1243 -750
  35. package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +2 -2
  36. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +4 -3
  37. package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
  38. package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +4 -0
  39. package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
  40. package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +16 -1
  41. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +64 -6
  42. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +88 -33
  43. package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +4 -2
  44. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +4 -0
  45. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +5 -5
  46. package/sdk-core/crates/common/src/activity_definition.rs +20 -0
  47. package/sdk-core/crates/common/src/data_converters.rs +770 -0
  48. package/sdk-core/crates/common/src/envconfig.rs +5 -0
  49. package/sdk-core/crates/common/src/lib.rs +15 -211
  50. package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
  51. package/sdk-core/crates/common/src/priority.rs +110 -0
  52. package/sdk-core/crates/common/src/protos/canned_histories.rs +3 -0
  53. package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
  54. package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
  55. package/sdk-core/crates/common/src/protos/mod.rs +122 -27
  56. package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
  57. package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
  58. package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +5 -7
  59. package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
  60. package/sdk-core/crates/common/src/telemetry/metrics.rs +268 -223
  61. package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
  62. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
  63. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
  64. package/sdk-core/crates/common/src/telemetry.rs +264 -4
  65. package/sdk-core/crates/common/src/worker.rs +68 -603
  66. package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
  67. package/sdk-core/crates/macros/Cargo.toml +5 -1
  68. package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
  69. package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
  70. package/sdk-core/crates/macros/src/lib.rs +138 -512
  71. package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
  72. package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
  73. package/sdk-core/crates/sdk/Cargo.toml +19 -6
  74. package/sdk-core/crates/sdk/README.md +415 -0
  75. package/sdk-core/crates/sdk/src/activities.rs +417 -0
  76. package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
  77. package/sdk-core/crates/sdk/src/lib.rs +757 -442
  78. package/sdk-core/crates/sdk/src/workflow_context/options.rs +45 -35
  79. package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
  80. package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
  81. package/sdk-core/crates/sdk/src/workflows.rs +711 -0
  82. package/sdk-core/crates/sdk-core/Cargo.toml +57 -64
  83. package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +41 -35
  84. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
  85. package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
  86. package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
  87. package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +13 -15
  88. package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
  89. package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
  90. package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
  91. package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +493 -26
  92. package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +4 -8
  93. package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +7 -7
  94. package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
  95. package/sdk-core/crates/sdk-core/src/lib.rs +41 -111
  96. package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
  97. package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +118 -19
  98. package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
  99. package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
  100. package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +179 -196
  101. package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -280
  102. package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +6 -9
  103. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
  104. package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
  105. package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
  106. package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +9 -5
  107. package/sdk-core/crates/sdk-core/src/worker/client.rs +103 -81
  108. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +7 -11
  109. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1124 -229
  110. package/sdk-core/crates/sdk-core/src/worker/nexus.rs +145 -23
  111. package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
  112. package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
  113. package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +13 -13
  114. package/sdk-core/crates/sdk-core/src/worker/tuner.rs +28 -8
  115. package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
  116. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
  117. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +19 -4
  118. package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +14 -18
  119. package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +4 -6
  120. package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
  121. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
  122. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
  123. package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
  124. package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
  125. package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
  126. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
  127. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
  128. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
  129. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
  130. package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
  131. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
  132. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
  133. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
  134. package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
  135. package/sdk-core/crates/sdk-core/tests/common/mod.rs +241 -196
  136. package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
  137. package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +3 -5
  138. package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -64
  139. package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +298 -252
  140. package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
  141. package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
  142. package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
  143. package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +16 -12
  144. package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +48 -40
  145. package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +327 -255
  146. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
  147. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +147 -126
  148. package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
  149. package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -453
  150. package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
  151. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +360 -231
  152. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +248 -185
  153. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -43
  154. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
  155. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +428 -315
  156. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -56
  157. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -28
  158. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -243
  159. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
  160. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +101 -42
  161. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -147
  162. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -28
  163. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1036
  164. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -41
  165. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +397 -238
  166. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +414 -189
  167. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
  168. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
  169. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +154 -137
  170. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -105
  171. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -38
  172. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -40
  173. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -54
  174. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +363 -226
  175. package/sdk-core/crates/sdk-core/tests/main.rs +17 -15
  176. package/sdk-core/crates/sdk-core/tests/manual_tests.rs +207 -152
  177. package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +65 -34
  178. package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
  179. package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
  180. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
  181. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
  182. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
  183. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
  184. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
  185. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
  186. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
  187. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
  188. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +7 -1
  189. package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +14 -14
  190. package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +83 -74
  191. package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +9 -14
  192. package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +1 -2
  193. package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +13 -13
  194. package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +6 -6
  195. package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +3 -4
  196. package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +62 -75
  197. package/sdk-core/rustfmt.toml +2 -1
  198. package/src/client.rs +205 -318
  199. package/src/metrics.rs +22 -30
  200. package/src/runtime.rs +4 -5
  201. package/src/worker.rs +16 -19
  202. package/ts/native.ts +1 -1
  203. package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
  204. package/sdk-core/crates/common/src/errors.rs +0 -85
  205. package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
  206. package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
  207. package/sdk-core/crates/sdk/src/app_data.rs +0 -37
  208. package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
  209. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
package/src/metrics.rs CHANGED
@@ -5,18 +5,15 @@ use std::sync::Arc;
5
5
  use neon::prelude::*;
6
6
  use serde::Deserialize;
7
7
 
8
- use temporalio_common::telemetry::metrics::{
9
- BufferInstrumentRef as CoreBufferInstrumentRef, CoreMeter, Counter as CoreCounter,
10
- CustomMetricAttributes, Gauge as CoreGauge, Histogram as CoreHistogram, MetricCallBufferer,
11
- MetricEvent as CoreMetricEvent, MetricKind as CoreMetricKind,
12
- MetricParameters as CoreMetricParameters, NewAttributes, TemporalMeter,
8
+ use temporalio_common::telemetry::metrics::core::{
9
+ BufferInstrumentRef as CoreBufferInstrumentRef, CustomMetricAttributes, MetricCallBufferer,
10
+ MetricEvent as CoreMetricEvent, MetricKind as CoreMetricKind, MetricUpdateVal,
13
11
  };
14
12
  use temporalio_common::telemetry::metrics::{
15
- GaugeF64 as CoreGaugeF64, HistogramF64 as CoreHistogramF64,
16
- };
17
- use temporalio_common::telemetry::{
18
- metrics,
19
- metrics::{MetricKeyValue as CoreMetricKeyValue, MetricValue as CoreMetricValue},
13
+ Counter as CoreCounter, Gauge as CoreGauge, GaugeF64 as CoreGaugeF64,
14
+ Histogram as CoreHistogram, HistogramF64 as CoreHistogramF64,
15
+ MetricKeyValue as CoreMetricKeyValue, MetricParameters as CoreMetricParameters,
16
+ MetricValue as CoreMetricValue, NewAttributes, TemporalMeter,
20
17
  };
21
18
 
22
19
  use bridge_macros::{TryIntoJs, js_function};
@@ -126,7 +123,7 @@ pub fn new_metric_counter(
126
123
  "Failed to get metric meter".into(),
127
124
  ))?;
128
125
 
129
- let counter = meter.inner.counter(
126
+ let counter = meter.counter(
130
127
  CoreMetricParameters::builder()
131
128
  .name(name)
132
129
  .unit(unit)
@@ -152,7 +149,7 @@ pub fn new_metric_histogram(
152
149
  "Failed to get metric meter".into(),
153
150
  ))?;
154
151
 
155
- let histogram = meter.inner.histogram(
152
+ let histogram = meter.histogram(
156
153
  CoreMetricParameters::builder()
157
154
  .name(name)
158
155
  .unit(unit)
@@ -178,7 +175,7 @@ pub fn new_metric_histogram_f64(
178
175
  "Failed to get metric meter".into(),
179
176
  ))?;
180
177
 
181
- let histogram = meter.inner.histogram_f64(
178
+ let histogram = meter.histogram_f64(
182
179
  CoreMetricParameters::builder()
183
180
  .name(name)
184
181
  .unit(unit)
@@ -204,7 +201,7 @@ pub fn new_metric_gauge(
204
201
  "Failed to get metric meter".into(),
205
202
  ))?;
206
203
 
207
- let gauge = meter.inner.gauge(
204
+ let gauge = meter.gauge(
208
205
  CoreMetricParameters::builder()
209
206
  .name(name)
210
207
  .unit(unit)
@@ -230,7 +227,7 @@ pub fn new_metric_gauge_f64(
230
227
  "Failed to get metric meter".into(),
231
228
  ))?;
232
229
 
233
- let gauge = meter.inner.gauge_f64(
230
+ let gauge = meter.gauge_f64(
234
231
  CoreMetricParameters::builder()
235
232
  .name(name)
236
233
  .unit(unit)
@@ -254,7 +251,6 @@ pub fn add_metric_counter_value(
254
251
 
255
252
  let attributes = counter_handle
256
253
  .meter
257
- .inner
258
254
  .new_attributes(parse_metric_attributes(attributes.value));
259
255
 
260
256
  counter_handle.counter.add(value as u64, &attributes);
@@ -270,7 +266,6 @@ pub fn record_metric_histogram_value(
270
266
  let histogram_handle = histogram_handle.borrow()?;
271
267
  let attributes = histogram_handle
272
268
  .meter
273
- .inner
274
269
  .new_attributes(parse_metric_attributes(attributes.value));
275
270
  histogram_handle.histogram.record(value, &attributes);
276
271
  Ok(())
@@ -285,7 +280,6 @@ pub fn record_metric_histogram_f64_value(
285
280
  let histogram_handle = histogram_handle.borrow()?;
286
281
  let attributes = histogram_handle
287
282
  .meter
288
- .inner
289
283
  .new_attributes(parse_metric_attributes(attributes.value));
290
284
  histogram_handle.histogram.record(value, &attributes);
291
285
  Ok(())
@@ -300,7 +294,6 @@ pub fn set_metric_gauge_value(
300
294
  let gauge_handle = gauge_handle.borrow()?;
301
295
  let attributes = gauge_handle
302
296
  .meter
303
- .inner
304
297
  .new_attributes(parse_metric_attributes(attributes.value));
305
298
  gauge_handle.gauge.record(value, &attributes);
306
299
  Ok(())
@@ -315,7 +308,6 @@ pub fn set_metric_gauge_f64_value(
315
308
  let gauge_handle = gauge_handle.borrow()?;
316
309
  let attributes = gauge_handle
317
310
  .meter
318
- .inner
319
311
  .new_attributes(parse_metric_attributes(attributes.value));
320
312
  gauge_handle.gauge.record(value, &attributes);
321
313
  Ok(())
@@ -400,14 +392,14 @@ impl MetricsCallBuffer {
400
392
  metric: instrument.get().as_ref().clone(),
401
393
  #[allow(clippy::match_same_arms, clippy::cast_precision_loss)]
402
394
  value: match update {
403
- metrics::MetricUpdateVal::Duration(v) if self.use_seconds_for_durations => {
395
+ MetricUpdateVal::Duration(v) if self.use_seconds_for_durations => {
404
396
  v.as_secs_f64()
405
397
  }
406
- metrics::MetricUpdateVal::Duration(v) => v.as_millis() as f64,
407
- metrics::MetricUpdateVal::Delta(v) => *v as f64,
408
- metrics::MetricUpdateVal::DeltaF64(v) => *v,
409
- metrics::MetricUpdateVal::Value(v) => *v as f64,
410
- metrics::MetricUpdateVal::ValueF64(v) => *v,
398
+ MetricUpdateVal::Duration(v) => v.as_millis() as f64,
399
+ MetricUpdateVal::Delta(v) => *v as f64,
400
+ MetricUpdateVal::DeltaF64(v) => *v,
401
+ MetricUpdateVal::Value(v) => *v as f64,
402
+ MetricUpdateVal::ValueF64(v) => *v,
411
403
  },
412
404
  attributes: attributes
413
405
  .get()
@@ -508,10 +500,10 @@ impl TryIntoJs for BufferedMetricAttributes {
508
500
  let k = kv.key.as_str();
509
501
  #[allow(clippy::cast_precision_loss)]
510
502
  match &kv.value {
511
- metrics::MetricValue::String(v) => object.set_property_from(cx, k, v.as_str()),
512
- metrics::MetricValue::Int(v) => object.set_property_from(cx, k, *v as f64),
513
- metrics::MetricValue::Float(v) => object.set_property_from(cx, k, *v),
514
- metrics::MetricValue::Bool(v) => object.set_property_from(cx, k, *v),
503
+ CoreMetricValue::String(v) => object.set_property_from(cx, k, v.as_str()),
504
+ CoreMetricValue::Int(v) => object.set_property_from(cx, k, *v as f64),
505
+ CoreMetricValue::Float(v) => object.set_property_from(cx, k, *v),
506
+ CoreMetricValue::Bool(v) => object.set_property_from(cx, k, *v),
515
507
  }?;
516
508
  }
517
509
 
package/src/runtime.rs CHANGED
@@ -9,10 +9,8 @@ use temporalio_common::telemetry::{
9
9
  CoreLog, OtelCollectorOptions as CoreOtelCollectorOptions,
10
10
  PrometheusExporterOptions as CorePrometheusExporterOptions, metrics::CoreMeter,
11
11
  };
12
- use temporalio_sdk_core::{
13
- CoreRuntime, TokioRuntimeBuilder,
14
- telemetry::{build_otlp_metric_exporter, start_prometheus_metric_exporter},
15
- };
12
+ use temporalio_common::telemetry::{build_otlp_metric_exporter, start_prometheus_metric_exporter};
13
+ use temporalio_sdk_core::{CoreRuntime, TokioRuntimeBuilder};
16
14
 
17
15
  use bridge_macros::js_function;
18
16
  use tokio_stream::StreamExt as _;
@@ -287,13 +285,14 @@ mod config {
287
285
  use std::{collections::HashMap, net::SocketAddr, sync::Arc, time::Duration};
288
286
 
289
287
  use neon::prelude::*;
288
+ use temporalio_common::telemetry::CoreLogStreamConsumer;
290
289
  use temporalio_common::telemetry::{
291
290
  HistogramBucketOverrides, Logger as CoreTelemetryLogger, MetricTemporality,
292
291
  OtelCollectorOptions as CoreOtelCollectorOptions, OtlpProtocol,
293
292
  PrometheusExporterOptions as CorePrometheusExporterOptions,
294
293
  TelemetryOptions as CoreTelemetryOptions,
295
294
  };
296
- use temporalio_sdk_core::{Url, telemetry::CoreLogStreamConsumer};
295
+ use temporalio_sdk_core::Url;
297
296
 
298
297
  use bridge_macros::TryFromJs;
299
298
 
package/src/worker.rs CHANGED
@@ -6,10 +6,6 @@ use prost::Message;
6
6
  use tokio::sync::mpsc::{Sender, channel};
7
7
  use tokio_stream::wrappers::ReceiverStream;
8
8
 
9
- use temporalio_common::Worker as CoreWorkerTrait;
10
- use temporalio_common::errors::{
11
- CompleteActivityError, CompleteNexusError, CompleteWfError, PollError,
12
- };
13
9
  use temporalio_common::protos::{
14
10
  coresdk::{
15
11
  ActivityHeartbeat, ActivityTaskCompletion, nexus::NexusTaskCompletion,
@@ -17,6 +13,7 @@ use temporalio_common::protos::{
17
13
  },
18
14
  temporal::api::history::v1::History,
19
15
  };
16
+ use temporalio_sdk_core::{CompleteActivityError, CompleteNexusError, CompleteWfError, PollError};
20
17
  use temporalio_sdk_core::{
21
18
  CoreRuntime, init_replay_worker, init_worker,
22
19
  replay::{HistoryForReplay, ReplayWorkerInput},
@@ -82,11 +79,12 @@ pub fn worker_new(
82
79
  let config = worker_options.into_core_config()?;
83
80
 
84
81
  let client_ref = client.borrow()?;
85
- let client = client_ref.core_client.clone();
82
+ let connection = client_ref.core_connection.clone();
86
83
  let runtime = client_ref.core_runtime.clone();
87
84
 
88
85
  enter_sync!(runtime);
89
- let worker = init_worker(&runtime, config, client).context("Failed to initialize worker")?;
86
+ let worker =
87
+ init_worker(&runtime, config, connection).context("Failed to initialize worker")?;
90
88
 
91
89
  Ok(OpaqueOutboundHandle::new(Worker {
92
90
  core_runtime: runtime,
@@ -120,13 +118,13 @@ pub fn worker_replace_client(
120
118
  ) -> BridgeResult<()> {
121
119
  let worker_ref = worker.borrow()?;
122
120
  let client_ref = client.borrow()?;
123
- let new_client = client_ref.core_client.clone();
121
+ let new_connection = client_ref.core_connection.clone();
124
122
  let runtime = worker_ref.core_runtime.clone();
125
123
 
126
124
  enter_sync!(runtime);
127
125
  worker_ref
128
126
  .core_worker
129
- .replace_client(new_client)
127
+ .replace_client(new_connection)
130
128
  .map_err(|err| BridgeError::UnexpectedError(err.to_string()))?;
131
129
 
132
130
  Ok(())
@@ -494,14 +492,14 @@ mod config {
494
492
  use temporalio_common::protos::temporal::api::enums::v1::VersioningBehavior as CoreVersioningBehavior;
495
493
  use temporalio_common::protos::temporal::api::worker::v1::PluginInfo;
496
494
  use temporalio_common::worker::{
497
- ActivitySlotKind, LocalActivitySlotKind, NexusSlotKind,
498
- PollerBehavior as CorePollerBehavior, SlotKind, WorkerConfig,
499
495
  WorkerDeploymentOptions as CoreWorkerDeploymentOptions,
500
- WorkerDeploymentVersion as CoreWorkerDeploymentVersion, WorkflowSlotKind,
496
+ WorkerDeploymentVersion as CoreWorkerDeploymentVersion,
501
497
  };
502
498
  use temporalio_sdk_core::{
503
- ResourceBasedSlotsOptions, ResourceSlotOptions,
504
- SlotSupplierOptions as CoreSlotSupplierOptions, TunerHolder, TunerHolderOptions,
499
+ ActivitySlotKind, LocalActivitySlotKind, NexusSlotKind,
500
+ PollerBehavior as CorePollerBehavior, ResourceBasedSlotsOptions, ResourceSlotOptions,
501
+ SlotKind, SlotSupplierOptions as CoreSlotSupplierOptions, TunerHolder, TunerHolderOptions,
502
+ WorkerConfig, WorkerVersioningStrategy, WorkflowSlotKind,
505
503
  };
506
504
 
507
505
  use super::custom_slot_supplier::CustomSlotSupplierOptions;
@@ -511,7 +509,6 @@ mod config {
511
509
  use neon::object::Object;
512
510
  use neon::prelude::JsResult;
513
511
  use neon::types::JsObject;
514
- use temporalio_common::worker::WorkerVersioningStrategy;
515
512
 
516
513
  #[derive(TryFromJs)]
517
514
  pub struct BridgeWorkerOptions {
@@ -553,7 +550,7 @@ mod config {
553
550
  pub struct WorkerDeploymentOptions {
554
551
  version: WorkerDeploymentVersion,
555
552
  use_worker_versioning: bool,
556
- default_versioning_behavior: VersioningBehavior,
553
+ default_versioning_behavior: Option<VersioningBehavior>,
557
554
  }
558
555
 
559
556
  #[derive(TryFromJs)]
@@ -662,7 +659,7 @@ mod config {
662
659
  Self {
663
660
  version: val.version.into(),
664
661
  use_worker_versioning: val.use_worker_versioning,
665
- default_versioning_behavior: Some(val.default_versioning_behavior.into()),
662
+ default_versioning_behavior: val.default_versioning_behavior.map(Into::into),
666
663
  }
667
664
  }
668
665
  }
@@ -806,14 +803,14 @@ mod custom_slot_supplier {
806
803
 
807
804
  use neon::{context::Context, handle::Handle, prelude::*};
808
805
 
809
- use temporalio_common::worker::{
806
+ use temporalio_sdk_core::{
810
807
  SlotInfo as CoreSlotInfo, SlotInfoTrait as _, SlotKind, SlotKindType as CoreSlotKindType,
811
808
  SlotMarkUsedContext as CoreSlotMarkUsedContext,
812
809
  SlotReleaseContext as CoreSlotReleaseContext,
813
810
  SlotReservationContext as CoreSlotReservationContext, SlotSupplier as CoreSlotSupplier,
811
+ SlotSupplierOptions as CoreSlotSupplierOptions,
814
812
  SlotSupplierPermit as CoreSlotSupplierPermit,
815
813
  };
816
- use temporalio_sdk_core::SlotSupplierOptions as CoreSlotSupplierOptions;
817
814
 
818
815
  use bridge_macros::{TryFromJs, TryIntoJs};
819
816
  use tracing::warn;
@@ -871,7 +868,7 @@ mod custom_slot_supplier {
871
868
  }
872
869
  Err(err) => {
873
870
  warn!("Error reserving slot: {err:?}");
874
- tokio::time::sleep(std::time::Duration::from_millis(1000)).await;
871
+ tokio::time::sleep(std::time::Duration::from_secs(1)).await;
875
872
  }
876
873
  }
877
874
  }
package/ts/native.ts CHANGED
@@ -257,7 +257,7 @@ export type PollerBehavior =
257
257
  export type WorkerDeploymentOptions = {
258
258
  version: WorkerDeploymentVersion;
259
259
  useWorkerVersioning: boolean;
260
- defaultVersioningBehavior: VersioningBehavior;
260
+ defaultVersioningBehavior: Option<VersioningBehavior>;
261
261
  };
262
262
 
263
263
  export type WorkerDeploymentVersion = {
@@ -1,212 +0,0 @@
1
- use crate::WorkflowService;
2
- use anyhow::{anyhow, bail};
3
- use std::{fmt::Debug, marker::PhantomData};
4
- use temporalio_common::protos::{
5
- coresdk::FromPayloadsExt,
6
- temporal::api::{
7
- common::v1::{Payload, WorkflowExecution},
8
- enums::v1::HistoryEventFilterType,
9
- failure::v1::Failure,
10
- history::v1::history_event::Attributes,
11
- workflowservice::v1::GetWorkflowExecutionHistoryRequest,
12
- },
13
- };
14
- use tonic::IntoRequest;
15
-
16
- /// Enumerates terminal states for a particular workflow execution
17
- // TODO: Add non-proto failure types, flesh out details, etc.
18
- #[derive(Debug)]
19
- #[allow(clippy::large_enum_variant)]
20
- pub enum WorkflowExecutionResult<T> {
21
- /// The workflow finished successfully
22
- Succeeded(T),
23
- /// The workflow finished in failure
24
- Failed(Failure),
25
- /// The workflow was cancelled
26
- Cancelled(Vec<Payload>),
27
- /// The workflow was terminated
28
- Terminated(Vec<Payload>),
29
- /// The workflow timed out
30
- TimedOut,
31
- /// The workflow continued as new
32
- ContinuedAsNew,
33
- }
34
-
35
- impl<T> WorkflowExecutionResult<T>
36
- where
37
- T: Debug,
38
- {
39
- /// Unwrap the result, panicking if it was not a success
40
- pub fn unwrap_success(self) -> T {
41
- match self {
42
- Self::Succeeded(t) => t,
43
- o => panic!("Expected success, got {o:?}"),
44
- }
45
- }
46
- }
47
-
48
- /// Options for fetching workflow results
49
- #[derive(Debug, Clone, Copy)]
50
- pub struct GetWorkflowResultOptions {
51
- /// If true (the default), follows to the next workflow run in the execution chain while
52
- /// retrieving results.
53
- pub follow_runs: bool,
54
- }
55
- impl Default for GetWorkflowResultOptions {
56
- fn default() -> Self {
57
- Self { follow_runs: true }
58
- }
59
- }
60
-
61
- /// A workflow handle which can refer to a specific workflow run, or a chain of workflow runs with
62
- /// the same workflow id.
63
- pub struct WorkflowHandle<ClientT, ResultT> {
64
- client: ClientT,
65
- info: WorkflowExecutionInfo,
66
-
67
- _res_type: PhantomData<ResultT>,
68
- }
69
-
70
- /// Holds needed information to refer to a specific workflow run, or workflow execution chain
71
- #[derive(Debug)]
72
- pub struct WorkflowExecutionInfo {
73
- /// Namespace the workflow lives in
74
- pub namespace: String,
75
- /// The workflow's id
76
- pub workflow_id: String,
77
- /// If set, target this specific run of the workflow
78
- pub run_id: Option<String>,
79
- }
80
-
81
- impl WorkflowExecutionInfo {
82
- /// Bind the workflow info to a specific client, turning it into a workflow handle
83
- pub fn bind_untyped<CT>(self, client: CT) -> UntypedWorkflowHandle<CT>
84
- where
85
- CT: WorkflowService + Clone,
86
- {
87
- UntypedWorkflowHandle::new(client, self)
88
- }
89
- }
90
-
91
- /// A workflow handle to a workflow with unknown types. Uses raw payloads.
92
- pub(crate) type UntypedWorkflowHandle<CT> = WorkflowHandle<CT, Vec<Payload>>;
93
-
94
- impl<CT, RT> WorkflowHandle<CT, RT>
95
- where
96
- CT: WorkflowService + Clone,
97
- // TODO: Make more generic, capable of (de)serialization w/ serde
98
- RT: FromPayloadsExt,
99
- {
100
- pub(crate) fn new(client: CT, info: WorkflowExecutionInfo) -> Self {
101
- Self {
102
- client,
103
- info,
104
- _res_type: PhantomData::<RT>,
105
- }
106
- }
107
-
108
- /// Get the workflow execution info
109
- pub fn info(&self) -> &WorkflowExecutionInfo {
110
- &self.info
111
- }
112
-
113
- /// Get the client attached to this handle
114
- pub fn client(&self) -> &CT {
115
- &self.client
116
- }
117
-
118
- /// Await the result of the workflow execution
119
- pub async fn get_workflow_result(
120
- &self,
121
- opts: GetWorkflowResultOptions,
122
- ) -> Result<WorkflowExecutionResult<RT>, anyhow::Error> {
123
- let mut next_page_tok = vec![];
124
- let mut run_id = self.info.run_id.clone().unwrap_or_default();
125
- loop {
126
- let server_res = self
127
- .client
128
- .clone()
129
- .get_workflow_execution_history(
130
- GetWorkflowExecutionHistoryRequest {
131
- namespace: self.info.namespace.to_string(),
132
- execution: Some(WorkflowExecution {
133
- workflow_id: self.info.workflow_id.clone(),
134
- run_id: run_id.clone(),
135
- }),
136
- skip_archival: true,
137
- wait_new_event: true,
138
- history_event_filter_type: HistoryEventFilterType::CloseEvent as i32,
139
- next_page_token: next_page_tok.clone(),
140
- ..Default::default()
141
- }
142
- .into_request(),
143
- )
144
- .await?
145
- .into_inner();
146
-
147
- let mut history = server_res
148
- .history
149
- .ok_or_else(|| anyhow!("Server returned an empty history!"))?;
150
-
151
- if history.events.is_empty() {
152
- next_page_tok = server_res.next_page_token;
153
- continue;
154
- }
155
- // If page token was previously set, clear it.
156
- next_page_tok = vec![];
157
-
158
- let event_attrs = history.events.pop().and_then(|ev| ev.attributes);
159
-
160
- macro_rules! follow {
161
- ($attrs:ident) => {
162
- if opts.follow_runs && $attrs.new_execution_run_id != "" {
163
- run_id = $attrs.new_execution_run_id;
164
- continue;
165
- }
166
- };
167
- }
168
-
169
- break match event_attrs {
170
- Some(Attributes::WorkflowExecutionCompletedEventAttributes(attrs)) => {
171
- follow!(attrs);
172
- Ok(WorkflowExecutionResult::Succeeded(RT::from_payloads(
173
- attrs.result,
174
- )))
175
- }
176
- Some(Attributes::WorkflowExecutionFailedEventAttributes(attrs)) => {
177
- follow!(attrs);
178
- Ok(WorkflowExecutionResult::Failed(
179
- attrs.failure.unwrap_or_default(),
180
- ))
181
- }
182
- Some(Attributes::WorkflowExecutionCanceledEventAttributes(attrs)) => Ok(
183
- WorkflowExecutionResult::Cancelled(Vec::from_payloads(attrs.details)),
184
- ),
185
- Some(Attributes::WorkflowExecutionTimedOutEventAttributes(attrs)) => {
186
- follow!(attrs);
187
- Ok(WorkflowExecutionResult::TimedOut)
188
- }
189
- Some(Attributes::WorkflowExecutionTerminatedEventAttributes(attrs)) => Ok(
190
- WorkflowExecutionResult::Terminated(Vec::from_payloads(attrs.details)),
191
- ),
192
- Some(Attributes::WorkflowExecutionContinuedAsNewEventAttributes(attrs)) => {
193
- if opts.follow_runs {
194
- if !attrs.new_execution_run_id.is_empty() {
195
- run_id = attrs.new_execution_run_id;
196
- continue;
197
- } else {
198
- bail!("New execution run id was empty in continue as new event!");
199
- }
200
- } else {
201
- Ok(WorkflowExecutionResult::ContinuedAsNew)
202
- }
203
- }
204
- o => Err(anyhow!(
205
- "Server returned an event that didn't match the CloseEvent filter. \
206
- This is either a server bug or a new event the SDK does not understand. \
207
- Event details: {o:?}"
208
- )),
209
- };
210
- }
211
- }
212
- }
@@ -1,85 +0,0 @@
1
- //! Error types exposed by public APIs
2
-
3
- use crate::protos::coresdk::activity_result::ActivityExecutionResult;
4
-
5
- /// Errors thrown by [crate::Worker::validate]
6
- #[derive(thiserror::Error, Debug)]
7
- pub enum WorkerValidationError {
8
- /// The namespace provided to the worker does not exist on the server.
9
- #[error("Namespace {namespace} was not found or otherwise could not be described: {source:?}")]
10
- NamespaceDescribeError {
11
- source: tonic::Status,
12
- namespace: String,
13
- },
14
- }
15
-
16
- /// Errors thrown by [crate::Worker] polling methods
17
- #[derive(thiserror::Error, Debug)]
18
- pub enum PollError {
19
- /// [crate::Worker::shutdown] was called, and there are no more tasks to be handled from this
20
- /// poll function. Lang must call [crate::Worker::complete_workflow_activation],
21
- /// [crate::Worker::complete_activity_task], or
22
- /// [crate::Worker::complete_nexus_task] for any remaining tasks, and then may exit.
23
- #[error("Core is shut down and there are no more tasks of this kind")]
24
- ShutDown,
25
- /// Unhandled error when calling the temporal server. Core will attempt to retry any non-fatal
26
- /// errors, so lang should consider this fatal.
27
- #[error("Unhandled grpc error when polling: {0:?}")]
28
- TonicError(#[from] tonic::Status),
29
- }
30
-
31
- /// Errors thrown by [crate::Worker::complete_workflow_activation]
32
- #[derive(thiserror::Error, Debug)]
33
- #[allow(clippy::large_enum_variant)]
34
- pub enum CompleteWfError {
35
- /// Lang SDK sent us a malformed workflow completion. This likely means a bug in the lang sdk.
36
- #[error("Lang SDK sent us a malformed workflow completion for run ({run_id}): {reason}")]
37
- MalformedWorkflowCompletion {
38
- /// Reason the completion was malformed
39
- reason: String,
40
- /// The run associated with the completion
41
- run_id: String,
42
- },
43
- /// Workflows have not been enabled on this worker.
44
- #[error("Workflows are not enabled on this worker")]
45
- WorkflowNotEnabled,
46
- }
47
-
48
- /// Errors thrown by [crate::Worker::complete_activity_task]
49
- #[derive(thiserror::Error, Debug)]
50
- #[allow(clippy::large_enum_variant)]
51
- pub enum CompleteActivityError {
52
- /// Lang SDK sent us a malformed activity completion. This likely means a bug in the lang sdk.
53
- #[error("Lang SDK sent us a malformed activity completion ({reason}): {completion:?}")]
54
- MalformedActivityCompletion {
55
- /// Reason the completion was malformed
56
- reason: String,
57
- /// The completion, which may not be included to avoid unnecessary copies.
58
- completion: Option<ActivityExecutionResult>,
59
- },
60
- /// Activities have not been enabled on this worker.
61
- #[error("Activities are not enabled on this worker")]
62
- ActivityNotEnabled,
63
- }
64
-
65
- /// Errors thrown by [crate::Worker::complete_nexus_task]
66
- #[derive(thiserror::Error, Debug)]
67
- pub enum CompleteNexusError {
68
- /// Lang SDK sent us a malformed nexus completion. This likely means a bug in the lang sdk.
69
- #[error("Lang SDK sent us a malformed nexus completion: {reason}")]
70
- MalformedNexusCompletion {
71
- /// Reason the completion was malformed
72
- reason: String,
73
- },
74
- /// Nexus has not been enabled on this worker. If a user registers any Nexus handlers, the
75
- #[error("Nexus is not enabled on this worker")]
76
- NexusNotEnabled,
77
- }
78
-
79
- /// Errors we can encounter during workflow processing which we may treat as either WFT failures
80
- /// or whole-workflow failures depending on user preference.
81
- #[derive(Clone, Debug, Eq, PartialEq, Hash)]
82
- pub enum WorkflowErrorType {
83
- /// A nondeterminism error
84
- Nondeterminism,
85
- }