@xemahq/temporal-runtime 0.6.0 → 0.7.0

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 (98) hide show
  1. package/README.md +154 -11
  2. package/dist/bin/controller-token-publisher.d.ts +3 -0
  3. package/dist/bin/controller-token-publisher.d.ts.map +1 -0
  4. package/dist/bin/controller-token-publisher.js +18 -0
  5. package/dist/bin/controller-token-publisher.js.map +1 -0
  6. package/dist/index.d.ts +11 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +11 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/access-token.d.ts +11 -0
  11. package/dist/lib/access-token.d.ts.map +1 -0
  12. package/dist/lib/access-token.js +30 -0
  13. package/dist/lib/access-token.js.map +1 -0
  14. package/dist/lib/base-temporal-client.service.d.ts +3 -2
  15. package/dist/lib/base-temporal-client.service.d.ts.map +1 -1
  16. package/dist/lib/base-temporal-client.service.js +5 -5
  17. package/dist/lib/base-temporal-client.service.js.map +1 -1
  18. package/dist/lib/biome-worker.d.ts +83 -0
  19. package/dist/lib/biome-worker.d.ts.map +1 -0
  20. package/dist/lib/biome-worker.js +253 -0
  21. package/dist/lib/biome-worker.js.map +1 -0
  22. package/dist/lib/bounded-retry.d.ts +22 -0
  23. package/dist/lib/bounded-retry.d.ts.map +1 -0
  24. package/dist/lib/bounded-retry.js +67 -0
  25. package/dist/lib/bounded-retry.js.map +1 -0
  26. package/dist/lib/client-credentials-token-source.d.ts +23 -0
  27. package/dist/lib/client-credentials-token-source.d.ts.map +1 -0
  28. package/dist/lib/client-credentials-token-source.js +108 -0
  29. package/dist/lib/client-credentials-token-source.js.map +1 -0
  30. package/dist/lib/connection.d.ts +48 -9
  31. package/dist/lib/connection.d.ts.map +1 -1
  32. package/dist/lib/connection.js +153 -41
  33. package/dist/lib/connection.js.map +1 -1
  34. package/dist/lib/controller-token-publisher.d.ts +51 -0
  35. package/dist/lib/controller-token-publisher.d.ts.map +1 -0
  36. package/dist/lib/controller-token-publisher.js +116 -0
  37. package/dist/lib/controller-token-publisher.js.map +1 -0
  38. package/dist/lib/fairness-constants.d.ts +3 -0
  39. package/dist/lib/fairness-constants.d.ts.map +1 -0
  40. package/dist/lib/fairness-constants.js +6 -0
  41. package/dist/lib/fairness-constants.js.map +1 -0
  42. package/dist/lib/fairness.d.ts +13 -0
  43. package/dist/lib/fairness.d.ts.map +1 -0
  44. package/dist/lib/fairness.js +56 -0
  45. package/dist/lib/fairness.js.map +1 -0
  46. package/dist/lib/org-erasure.d.ts +13 -0
  47. package/dist/lib/org-erasure.d.ts.map +1 -0
  48. package/dist/lib/org-erasure.js +68 -0
  49. package/dist/lib/org-erasure.js.map +1 -0
  50. package/dist/lib/proactive-token-refresher.d.ts +47 -0
  51. package/dist/lib/proactive-token-refresher.d.ts.map +1 -0
  52. package/dist/lib/proactive-token-refresher.js +147 -0
  53. package/dist/lib/proactive-token-refresher.js.map +1 -0
  54. package/dist/lib/search-attribute-constants.d.ts +3 -0
  55. package/dist/lib/search-attribute-constants.d.ts.map +1 -0
  56. package/dist/lib/search-attribute-constants.js +6 -0
  57. package/dist/lib/search-attribute-constants.js.map +1 -0
  58. package/dist/lib/search-attributes.d.ts +4 -18
  59. package/dist/lib/search-attributes.d.ts.map +1 -1
  60. package/dist/lib/search-attributes.js +33 -40
  61. package/dist/lib/search-attributes.js.map +1 -1
  62. package/dist/lib/standalone-activity.d.ts +23 -0
  63. package/dist/lib/standalone-activity.d.ts.map +1 -0
  64. package/dist/lib/standalone-activity.js +48 -0
  65. package/dist/lib/standalone-activity.js.map +1 -0
  66. package/dist/lib/versioned-worker.d.ts +26 -0
  67. package/dist/lib/versioned-worker.d.ts.map +1 -0
  68. package/dist/lib/versioned-worker.js +60 -0
  69. package/dist/lib/versioned-worker.js.map +1 -0
  70. package/dist/lib/worker-deployment-version.d.ts +8 -0
  71. package/dist/lib/worker-deployment-version.d.ts.map +1 -0
  72. package/dist/lib/worker-deployment-version.js +45 -0
  73. package/dist/lib/worker-deployment-version.js.map +1 -0
  74. package/dist/lib/worker.d.ts +7 -7
  75. package/dist/lib/worker.d.ts.map +1 -1
  76. package/dist/lib/worker.js +33 -37
  77. package/dist/lib/worker.js.map +1 -1
  78. package/dist/lib/workflow-interceptors/fairness-guard.d.ts +4 -0
  79. package/dist/lib/workflow-interceptors/fairness-guard.d.ts.map +1 -0
  80. package/dist/lib/workflow-interceptors/fairness-guard.js +65 -0
  81. package/dist/lib/workflow-interceptors/fairness-guard.js.map +1 -0
  82. package/dist/lib/workflow-interceptors/fairness-propagation.d.ts +3 -0
  83. package/dist/lib/workflow-interceptors/fairness-propagation.d.ts.map +1 -0
  84. package/dist/lib/workflow-interceptors/fairness-propagation.js +6 -0
  85. package/dist/lib/workflow-interceptors/fairness-propagation.js.map +1 -0
  86. package/dist/lib/workflow-interceptors/org-fairness-required.d.ts +3 -0
  87. package/dist/lib/workflow-interceptors/org-fairness-required.d.ts.map +1 -0
  88. package/dist/lib/workflow-interceptors/org-fairness-required.js +6 -0
  89. package/dist/lib/workflow-interceptors/org-fairness-required.js.map +1 -0
  90. package/dist/lib/workflow-interceptors/org-search-attribute.d.ts +3 -0
  91. package/dist/lib/workflow-interceptors/org-search-attribute.d.ts.map +1 -0
  92. package/dist/lib/workflow-interceptors/org-search-attribute.js +49 -0
  93. package/dist/lib/workflow-interceptors/org-search-attribute.js.map +1 -0
  94. package/dist/lib/workflow-purity.d.ts +27 -0
  95. package/dist/lib/workflow-purity.d.ts.map +1 -0
  96. package/dist/lib/workflow-purity.js +115 -0
  97. package/dist/lib/workflow-purity.js.map +1 -0
  98. package/package.json +21 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-deployment-version.js","sourceRoot":"","sources":["../../src/lib/worker-deployment-version.ts"],"names":[],"mappings":";;;AAuBA,sEAmBC;AAUD,sFA0BC;AArEY,QAAA,4BAA4B,GAAG,0BAA0B,CAAC;AAQ1D,QAAA,4BAA4B,GAAG,0BAA0B,CAAC;AAMvE,SAAgB,6BAA6B,CAC3C,OAAgC;IAEhC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI;QAC3B,CAAC,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC;QAC1C,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC;KACpB,EAAE,CAAC;QACX,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,CAAC,MAAM,KAAK,CAAC;YAClB,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,EACtB,CAAC;YACD,MAAM,IAAI,KAAK,CACb,6BAA6B,KAAK,sCAAsC;gBACtE,+BAA+B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;AAC9E,CAAC;AAUD,SAAgB,qCAAqC,CACnD,GAAsB;IAEtB,MAAM,cAAc,GAAG,GAAG,CAAC,oCAA4B,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,oCAA4B,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG;QACd,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YACzD,CAAC,CAAC,oCAA4B;YAC9B,CAAC,CAAC,SAAS;QACb,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAC3C,CAAC,CAAC,oCAA4B;YAC9B,CAAC,CAAC,SAAS;KACd,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa;YAC1E,wEAAwE;YACxE,qEAAqE;YACrE,wEAAwE;YACxE,gDAAgD,CACnD,CAAC;IACJ,CAAC;IACD,OAAO,6BAA6B,CAAC;QACnC,cAAc,EAAE,cAAwB;QACxC,OAAO,EAAE,OAAiB;KAC3B,CAAC,CAAC;AACL,CAAC"}
@@ -1,21 +1,21 @@
1
- import { Worker, type ActivityInterceptorsFactory, type NativeConnection, type WorkerOptions, type WorkflowBundle } from '@temporalio/worker';
1
+ import { type ActivityInterceptorsFactory, type NativeConnection, type Worker, type WorkflowBundle } from '@temporalio/worker';
2
+ import { type PlatformWorkerSinks, type PlatformWorkerTuning } from './versioned-worker';
3
+ import type { WorkerDeploymentVersion } from './worker-deployment-version';
2
4
  import type { PayloadCodec } from '@temporalio/common';
3
- export type PlatformWorkerSinks = NonNullable<WorkerOptions['sinks']>;
5
+ export type { PlatformNexusServiceHandler, PlatformWorkerSinks, PlatformWorkerTuning, } from './versioned-worker';
4
6
  export interface BundlePlatformWorkflowsOptions {
5
7
  readonly workflowInterceptorModules?: readonly string[];
6
8
  }
7
9
  export declare function bundlePlatformWorkflows(workflowsPath: string, options?: BundlePlatformWorkflowsOptions): Promise<WorkflowBundle>;
8
- export interface PlatformWorkerOptions {
10
+ export declare function assertWorkflowsBundle(workflowsPath: string, options?: BundlePlatformWorkflowsOptions): Promise<void>;
11
+ export interface PlatformWorkerOptions extends PlatformWorkerTuning {
9
12
  readonly connection: NativeConnection;
10
13
  readonly namespace: string;
11
14
  readonly taskQueue: string;
12
15
  readonly workflowBundle: WorkflowBundle;
13
16
  readonly activities: object;
14
- readonly buildId: string;
15
- readonly useVersioning?: boolean;
17
+ readonly version: WorkerDeploymentVersion;
16
18
  readonly payloadCodec?: PayloadCodec;
17
- readonly maxConcurrentActivityTaskExecutions?: number;
18
- readonly maxConcurrentWorkflowTaskExecutions?: number;
19
19
  readonly activityInterceptors?: readonly ActivityInterceptorsFactory[];
20
20
  readonly sinks?: PlatformWorkerSinks;
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/lib/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,MAAM,EACN,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAEtE,MAAM,WAAW,8BAA8B;IAM7C,QAAQ,CAAC,0BAA0B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzD;AAOD,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,cAAc,CAAC,CAOzB;AAED,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAEtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAExC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAK5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAKjC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,MAAM,CAAC;IACtD,QAAQ,CAAC,mCAAmC,CAAC,EAAE,MAAM,CAAC;IAKtD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAEvE,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAYD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/lib/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,YAAY,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAa5B,MAAM,WAAW,8BAA8B;IAM7C,QAAQ,CAAC,0BAA0B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzD;AAaD,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,cAAc,CAAC,CAsBzB;AAQD,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,IAAI,CAAC,CAEf;AAGD,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IAEjE,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAEtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAExC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAO5B,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAK1C,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IAKrC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAEvE,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAYD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CASjB"}
@@ -1,48 +1,44 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.bundlePlatformWorkflows = bundlePlatformWorkflows;
4
+ exports.assertWorkflowsBundle = assertWorkflowsBundle;
4
5
  exports.createPlatformWorker = createPlatformWorker;
5
- const node_crypto_1 = require("node:crypto");
6
+ const node_path_1 = require("node:path");
6
7
  const worker_1 = require("@temporalio/worker");
7
- const on_behalf_of_interceptor_1 = require("./on-behalf-of-interceptor");
8
+ const versioned_worker_1 = require("./versioned-worker");
9
+ const workflow_purity_1 = require("./workflow-purity");
10
+ const ORG_SEARCH_ATTRIBUTE_INTERCEPTOR_MODULE = (0, node_path_1.join)(__dirname, 'workflow-interceptors', 'org-search-attribute');
8
11
  async function bundlePlatformWorkflows(workflowsPath, options) {
9
- return (0, worker_1.bundleWorkflowCode)({
10
- workflowsPath,
11
- ...(options?.workflowInterceptorModules !== undefined
12
- ? { workflowInterceptorModules: [...options.workflowInterceptorModules] }
13
- : {}),
14
- });
12
+ const violations = [];
13
+ let bundle;
14
+ try {
15
+ bundle = await (0, worker_1.bundleWorkflowCode)({
16
+ workflowsPath,
17
+ webpackConfigHook: (0, workflow_purity_1.workflowPurityWebpackHook)(violations),
18
+ workflowInterceptorModules: [
19
+ ORG_SEARCH_ATTRIBUTE_INTERCEPTOR_MODULE,
20
+ ...(options?.workflowInterceptorModules ?? []),
21
+ ],
22
+ });
23
+ }
24
+ catch (error) {
25
+ if (violations.length > 0) {
26
+ throw new workflow_purity_1.WorkflowPurityError(workflowsPath, violations, { cause: error });
27
+ }
28
+ throw error;
29
+ }
30
+ if (violations.length > 0) {
31
+ throw new workflow_purity_1.WorkflowPurityError(workflowsPath, violations);
32
+ }
33
+ return bundle;
34
+ }
35
+ async function assertWorkflowsBundle(workflowsPath, options) {
36
+ await bundlePlatformWorkflows(workflowsPath, options);
15
37
  }
16
38
  async function createPlatformWorker(options) {
17
- return worker_1.Worker.create({
18
- connection: options.connection,
19
- namespace: options.namespace,
20
- taskQueue: options.taskQueue,
21
- workflowBundle: options.workflowBundle,
22
- activities: options.activities,
23
- identity: `xema-platform-worker-${options.namespace}-${options.taskQueue}-${(0, node_crypto_1.randomUUID)().slice(0, 8)}`,
24
- interceptors: {
25
- activity: [
26
- () => ({ inbound: new on_behalf_of_interceptor_1.OnBehalfOfActivityInterceptor() }),
27
- ...(options.activityInterceptors ?? []),
28
- ],
29
- },
30
- ...(options.sinks !== undefined ? { sinks: options.sinks } : {}),
31
- buildId: options.buildId,
32
- useVersioning: options.useVersioning ?? false,
33
- ...(options.payloadCodec
34
- ? { dataConverter: { payloadCodecs: [options.payloadCodec] } }
35
- : {}),
36
- ...(options.maxConcurrentActivityTaskExecutions !== undefined
37
- ? {
38
- maxConcurrentActivityTaskExecutions: options.maxConcurrentActivityTaskExecutions,
39
- }
40
- : {}),
41
- ...(options.maxConcurrentWorkflowTaskExecutions !== undefined
42
- ? {
43
- maxConcurrentWorkflowTaskExecutions: options.maxConcurrentWorkflowTaskExecutions,
44
- }
45
- : {}),
39
+ return (0, versioned_worker_1.createVersionedWorker)({
40
+ ...options,
41
+ identity: (0, versioned_worker_1.platformWorkerIdentity)('xema-platform-worker', options.namespace, options.taskQueue),
46
42
  });
47
43
  }
48
44
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/lib/worker.ts"],"names":[],"mappings":";;AAmCA,0DAUC;AA6CD,oDAmCC;AA7HD,6CAAyC;AAEzC,+CAO4B;AAE5B,yEAA2E;AAwBpE,KAAK,UAAU,uBAAuB,CAC3C,aAAqB,EACrB,OAAwC;IAExC,OAAO,IAAA,2BAAkB,EAAC;QACxB,aAAa;QACb,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,SAAS;YACnD,CAAC,CAAC,EAAE,0BAA0B,EAAE,CAAC,GAAG,OAAO,CAAC,0BAA0B,CAAC,EAAE;YACzE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;AACL,CAAC;AA6CM,KAAK,UAAU,oBAAoB,CACxC,OAA8B;IAE9B,OAAO,eAAM,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,wBAAwB,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,IAAI,IAAA,wBAAU,GAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACtG,YAAY,EAAE;YACZ,QAAQ,EAAE;gBACR,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,wDAA6B,EAAE,EAAE,CAAC;gBACxD,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;aACxC;SACF;QACD,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,KAAK;QAC7C,GAAG,CAAC,OAAO,CAAC,YAAY;YACtB,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE;YAC9D,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,mCAAmC,KAAK,SAAS;YAC3D,CAAC,CAAC;gBACE,mCAAmC,EACjC,OAAO,CAAC,mCAAmC;aAC9C;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,mCAAmC,KAAK,SAAS;YAC3D,CAAC,CAAC;gBACE,mCAAmC,EACjC,OAAO,CAAC,mCAAmC;aAC9C;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/lib/worker.ts"],"names":[],"mappings":";;AA+DA,0DAyBC;AAQD,sDAKC;AA6CD,oDAWC;AA7JD,yCAAiC;AAEjC,+CAM4B;AAE5B,yDAK4B;AAE5B,uDAI2B;AAgB3B,MAAM,uCAAuC,GAAG,IAAA,gBAAI,EAClD,SAAS,EACT,uBAAuB,EACvB,sBAAsB,CACvB,CAAC;AAsBK,KAAK,UAAU,uBAAuB,CAC3C,aAAqB,EACrB,OAAwC;IAExC,MAAM,UAAU,GAA8B,EAAE,CAAC;IACjD,IAAI,MAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAA,2BAAkB,EAAC;YAChC,aAAa;YACb,iBAAiB,EAAE,IAAA,2CAAyB,EAAC,UAAU,CAAC;YACxD,0BAA0B,EAAE;gBAC1B,uCAAuC;gBACvC,GAAG,CAAC,OAAO,EAAE,0BAA0B,IAAI,EAAE,CAAC;aAC/C;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,qCAAmB,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,qCAAmB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAQM,KAAK,UAAU,qBAAqB,CACzC,aAAqB,EACrB,OAAwC;IAExC,MAAM,uBAAuB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AA6CM,KAAK,UAAU,oBAAoB,CACxC,OAA8B;IAE9B,OAAO,IAAA,wCAAqB,EAAC;QAC3B,GAAG,OAAO;QACV,QAAQ,EAAE,IAAA,yCAAsB,EAC9B,sBAAsB,EACtB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,CAClB;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type WorkflowInterceptors } from '@temporalio/workflow';
2
+ export declare function fairnessPropagationInterceptors(): WorkflowInterceptors;
3
+ export declare function orgFairnessRequiredInterceptors(): WorkflowInterceptors;
4
+ //# sourceMappingURL=fairness-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fairness-guard.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow-interceptors/fairness-guard.ts"],"names":[],"mappings":"AAIA,OAAO,EAOL,KAAK,oBAAoB,EAE1B,MAAM,sBAAsB,CAAC;AAmG9B,wBAAgB,+BAA+B,IAAI,oBAAoB,CAEtE;AAGD,wBAAgB,+BAA+B,IAAI,oBAAoB,CAKtE"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fairnessPropagationInterceptors = fairnessPropagationInterceptors;
4
+ exports.orgFairnessRequiredInterceptors = orgFairnessRequiredInterceptors;
5
+ const workflow_1 = require("@temporalio/workflow");
6
+ const fairness_constants_1 = require("../fairness-constants");
7
+ function ownFairnessKey() {
8
+ const key = (0, workflow_1.workflowInfo)().priority?.fairnessKey;
9
+ return key === undefined || key.length === 0 ? undefined : key;
10
+ }
11
+ function propagatedKey(requested, what) {
12
+ const own = ownFairnessKey();
13
+ if (requested !== undefined && requested.length > 0 && requested !== own) {
14
+ throw workflow_1.ApplicationFailure.nonRetryable(`${what} was scheduled under fairness key ${JSON.stringify(requested)}, but ` +
15
+ `this run's key is ${JSON.stringify(own ?? '')}. Work carries its run's ` +
16
+ 'key; it may not be re-billed to another one.', fairness_constants_1.ORG_FAIRNESS_KEY_OVERRIDDEN);
17
+ }
18
+ return own;
19
+ }
20
+ class FairnessPropagationOutbound {
21
+ async scheduleActivity(input, next) {
22
+ const key = propagatedKey(input.options.priority?.fairnessKey, `Activity ${input.activityType}`);
23
+ return next(key === undefined
24
+ ? input
25
+ : {
26
+ ...input,
27
+ options: {
28
+ ...input.options,
29
+ priority: { ...input.options.priority, fairnessKey: key },
30
+ },
31
+ });
32
+ }
33
+ async startChildWorkflowExecution(input, next) {
34
+ const key = propagatedKey(input.options.priority?.fairnessKey, `Child workflow ${input.workflowType}`);
35
+ return next(key === undefined
36
+ ? input
37
+ : {
38
+ ...input,
39
+ options: {
40
+ ...input.options,
41
+ priority: { ...input.options.priority, fairnessKey: key },
42
+ },
43
+ });
44
+ }
45
+ }
46
+ class OrgFairnessRequiredInbound {
47
+ async execute(input, next) {
48
+ if (ownFairnessKey() === undefined) {
49
+ const info = (0, workflow_1.workflowInfo)();
50
+ throw workflow_1.ApplicationFailure.nonRetryable(`Workflow ${info.workflowType} started on org-fair task queue ` +
51
+ `${info.taskQueue} with no fairness key. Start it with startWorkflowForOrg.`, fairness_constants_1.ORG_FAIRNESS_KEY_MISSING);
52
+ }
53
+ return next(input);
54
+ }
55
+ }
56
+ function fairnessPropagationInterceptors() {
57
+ return { outbound: [new FairnessPropagationOutbound()] };
58
+ }
59
+ function orgFairnessRequiredInterceptors() {
60
+ return {
61
+ inbound: [new OrgFairnessRequiredInbound()],
62
+ outbound: [new FairnessPropagationOutbound()],
63
+ };
64
+ }
65
+ //# sourceMappingURL=fairness-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fairness-guard.js","sourceRoot":"","sources":["../../../src/lib/workflow-interceptors/fairness-guard.ts"],"names":[],"mappings":";;AAgHA,0EAEC;AAGD,0EAKC;AAtHD,mDAS8B;AAE9B,8DAG+B;AAE/B,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,IAAA,uBAAY,GAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;IACjD,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AACjE,CAAC;AASD,SAAS,aAAa,CACpB,SAA6B,EAC7B,IAAY;IAEZ,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACzE,MAAM,6BAAkB,CAAC,YAAY,CACnC,GAAG,IAAI,qCAAqC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ;YAC3E,qBAAqB,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,2BAA2B;YACzE,8CAA8C,EAChD,gDAA2B,CAC5B,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,2BAA2B;IAC/B,KAAK,CAAC,gBAAgB,CACpB,KAAoB,EACpB,IAAgE;QAEhE,MAAM,GAAG,GAAG,aAAa,CACvB,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EACnC,YAAY,KAAK,CAAC,YAAY,EAAE,CACjC,CAAC;QACF,OAAO,IAAI,CACT,GAAG,KAAK,SAAS;YACf,CAAC,CAAC,KAAK;YACP,CAAC,CAAC;gBACE,GAAG,KAAK;gBACR,OAAO,EAAE;oBACP,GAAG,KAAK,CAAC,OAAO;oBAChB,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE;iBAC1D;aACF,CACN,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC/B,KAAuC,EACvC,IAA2E;QAE3E,MAAM,GAAG,GAAG,aAAa,CACvB,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EACnC,kBAAkB,KAAK,CAAC,YAAY,EAAE,CACvC,CAAC;QACF,OAAO,IAAI,CACT,GAAG,KAAK,SAAS;YACf,CAAC,CAAC,KAAK;YACP,CAAC,CAAC;gBACE,GAAG,KAAK;gBACR,OAAO,EAAE;oBACP,GAAG,KAAK,CAAC,OAAO;oBAChB,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE;iBAC1D;aACF,CACN,CAAC;IACJ,CAAC;CACF;AAED,MAAM,0BAA0B;IAC9B,KAAK,CAAC,OAAO,CACX,KAEI,EACJ,IAAsD;QAEtD,IAAI,cAAc,EAAE,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAA,uBAAY,GAAE,CAAC;YAC5B,MAAM,6BAAkB,CAAC,YAAY,CACnC,YAAY,IAAI,CAAC,YAAY,kCAAkC;gBAC7D,GAAG,IAAI,CAAC,SAAS,2DAA2D,EAC9E,6CAAwB,CACzB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;CACF;AAGD,SAAgB,+BAA+B;IAC7C,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,2BAA2B,EAAE,CAAC,EAAE,CAAC;AAC3D,CAAC;AAGD,SAAgB,+BAA+B;IAC7C,OAAO;QACL,OAAO,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC;QAC3C,QAAQ,EAAE,CAAC,IAAI,2BAA2B,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { fairnessPropagationInterceptors } from './fairness-guard';
2
+ export declare const interceptors: typeof fairnessPropagationInterceptors;
3
+ //# sourceMappingURL=fairness-propagation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fairness-propagation.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow-interceptors/fairness-propagation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AAEnE,eAAO,MAAM,YAAY,wCAAkC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.interceptors = void 0;
4
+ const fairness_guard_1 = require("./fairness-guard");
5
+ exports.interceptors = fairness_guard_1.fairnessPropagationInterceptors;
6
+ //# sourceMappingURL=fairness-propagation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fairness-propagation.js","sourceRoot":"","sources":["../../../src/lib/workflow-interceptors/fairness-propagation.ts"],"names":[],"mappings":";;;AAEA,qDAAmE;AAEtD,QAAA,YAAY,GAAG,gDAA+B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { orgFairnessRequiredInterceptors } from './fairness-guard';
2
+ export declare const interceptors: typeof orgFairnessRequiredInterceptors;
3
+ //# sourceMappingURL=org-fairness-required.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-fairness-required.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow-interceptors/org-fairness-required.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AAEnE,eAAO,MAAM,YAAY,wCAAkC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.interceptors = void 0;
4
+ const fairness_guard_1 = require("./fairness-guard");
5
+ exports.interceptors = fairness_guard_1.orgFairnessRequiredInterceptors;
6
+ //# sourceMappingURL=org-fairness-required.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-fairness-required.js","sourceRoot":"","sources":["../../../src/lib/workflow-interceptors/org-fairness-required.ts"],"names":[],"mappings":";;;AAEA,qDAAmE;AAEtD,QAAA,YAAY,GAAG,gDAA+B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type WorkflowInterceptors } from '@temporalio/workflow';
2
+ export declare const interceptors: () => WorkflowInterceptors;
3
+ //# sourceMappingURL=org-search-attribute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-search-attribute.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow-interceptors/org-search-attribute.ts"],"names":[],"mappings":"AAeA,OAAO,EAKL,KAAK,oBAAoB,EAE1B,MAAM,sBAAsB,CAAC;AA6D9B,eAAO,MAAM,YAAY,QAAO,oBAE9B,CAAC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.interceptors = void 0;
4
+ const common_1 = require("@temporalio/common");
5
+ const workflow_1 = require("@temporalio/workflow");
6
+ const search_attribute_constants_1 = require("../search-attribute-constants");
7
+ const ORG_ID_KEY = (0, common_1.defineSearchAttributeKey)(search_attribute_constants_1.SEARCH_ATTR_ORG_ID, common_1.SearchAttributeType.KEYWORD);
8
+ function pairsOf(typed) {
9
+ if (typed === undefined)
10
+ return [];
11
+ return typed instanceof common_1.TypedSearchAttributes ? typed.getAll() : [...typed];
12
+ }
13
+ function requestedOrgIds(input) {
14
+ const requested = [];
15
+ for (const pair of pairsOf(input.options.typedSearchAttributes)) {
16
+ if (pair.key.name === search_attribute_constants_1.SEARCH_ATTR_ORG_ID)
17
+ requested.push(String(pair.value));
18
+ }
19
+ const untyped = input.options.searchAttributes?.[search_attribute_constants_1.SEARCH_ATTR_ORG_ID];
20
+ for (const value of untyped ?? [])
21
+ requested.push(String(value));
22
+ return requested;
23
+ }
24
+ class OrgSearchAttributeOutbound {
25
+ async startChildWorkflowExecution(input, next) {
26
+ const own = (0, workflow_1.workflowInfo)().typedSearchAttributes.get(ORG_ID_KEY);
27
+ const requested = requestedOrgIds(input);
28
+ if (own === undefined) {
29
+ return next(input);
30
+ }
31
+ const foreign = requested.find((value) => value !== own);
32
+ if (foreign !== undefined) {
33
+ throw workflow_1.ApplicationFailure.nonRetryable(`Child workflow ${input.workflowType} was started with OrgId ` +
34
+ `${JSON.stringify(foreign)}, but this run belongs to ${JSON.stringify(own)}. ` +
35
+ "A child belongs to its parent's org.", search_attribute_constants_1.ORG_SEARCH_ATTRIBUTE_OVERRIDDEN);
36
+ }
37
+ const typed = pairsOf(input.options.typedSearchAttributes).filter((pair) => pair.key.name !== search_attribute_constants_1.SEARCH_ATTR_ORG_ID);
38
+ typed.push({ key: ORG_ID_KEY, value: own });
39
+ return next({
40
+ ...input,
41
+ options: { ...input.options, typedSearchAttributes: typed },
42
+ });
43
+ }
44
+ }
45
+ const interceptors = () => ({
46
+ outbound: [new OrgSearchAttributeOutbound()],
47
+ });
48
+ exports.interceptors = interceptors;
49
+ //# sourceMappingURL=org-search-attribute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-search-attribute.js","sourceRoot":"","sources":["../../../src/lib/workflow-interceptors/org-search-attribute.ts"],"names":[],"mappings":";;;AASA,+CAK4B;AAC5B,mDAO8B;AAE9B,8EAGuC;AAEvC,MAAM,UAAU,GAAG,IAAA,iCAAwB,EACzC,+CAAkB,EAClB,4BAAmB,CAAC,OAAO,CAC5B,CAAC;AAEF,SAAS,OAAO,CACd,KAAgE;IAEhE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,KAAK,YAAY,8BAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,eAAe,CAAC,KAAuC;IAC9D,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAChE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,+CAAkB;YAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,+CAAkB,CAAC,CAAC;IACrE,KAAK,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;QAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,0BAA0B;IAC9B,KAAK,CAAC,2BAA2B,CAC/B,KAAuC,EACvC,IAA2E;QAE3E,MAAM,GAAG,GAAG,IAAA,uBAAY,GAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;QACzD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,6BAAkB,CAAC,YAAY,CACnC,kBAAkB,KAAK,CAAC,YAAY,0BAA0B;gBAC5D,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;gBAC9E,sCAAsC,EACxC,4DAA+B,CAChC,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAC/D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,+CAAkB,CAC/C,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;YACV,GAAG,KAAK;YACR,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC;CACF;AAGM,MAAM,YAAY,GAAG,GAAyB,EAAE,CAAC,CAAC;IACvD,QAAQ,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC;CAC7C,CAAC,CAAC;AAFU,QAAA,YAAY,gBAEtB"}
@@ -0,0 +1,27 @@
1
+ import type { BundleOptions } from '@temporalio/worker';
2
+ export declare enum WorkflowForbiddenModuleCategory {
3
+ Database = "database",
4
+ Network = "network",
5
+ Filesystem = "filesystem",
6
+ Redis = "redis",
7
+ OpenFga = "openfga",
8
+ Nest = "nest",
9
+ Activity = "activity"
10
+ }
11
+ export declare function workflowForbiddenModuleCategory(request: string): WorkflowForbiddenModuleCategory | undefined;
12
+ export interface WorkflowPurityViolation {
13
+ readonly request: string;
14
+ readonly category: WorkflowForbiddenModuleCategory;
15
+ readonly issuer: string | undefined;
16
+ }
17
+ export declare class WorkflowPurityError extends Error {
18
+ readonly workflowsPath: string;
19
+ readonly violations: readonly WorkflowPurityViolation[];
20
+ constructor(workflowsPath: string, violations: readonly WorkflowPurityViolation[], options?: {
21
+ cause?: unknown;
22
+ });
23
+ }
24
+ type WebpackConfig = Parameters<NonNullable<BundleOptions['webpackConfigHook']>>[0];
25
+ export declare function workflowPurityWebpackHook(violations: WorkflowPurityViolation[]): (config: WebpackConfig) => WebpackConfig;
26
+ export {};
27
+ //# sourceMappingURL=workflow-purity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-purity.d.ts","sourceRoot":"","sources":["../../src/lib/workflow-purity.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,oBAAY,+BAA+B;IACzC,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAkCD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,GACd,+BAA+B,GAAG,SAAS,CAiC7C;AAGD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;IAEnD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAE1C,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,uBAAuB,EAAE;gBAD9C,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,SAAS,uBAAuB,EAAE,EACvD,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAgBhC;AAED,KAAK,aAAa,GAAG,UAAU,CAC7B,WAAW,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAChD,CAAC,CAAC,CAAC,CAAC;AAmBL,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,uBAAuB,EAAE,GACpC,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,CA+B1C"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowPurityError = exports.WorkflowForbiddenModuleCategory = void 0;
4
+ exports.workflowForbiddenModuleCategory = workflowForbiddenModuleCategory;
5
+ exports.workflowPurityWebpackHook = workflowPurityWebpackHook;
6
+ var WorkflowForbiddenModuleCategory;
7
+ (function (WorkflowForbiddenModuleCategory) {
8
+ WorkflowForbiddenModuleCategory["Database"] = "database";
9
+ WorkflowForbiddenModuleCategory["Network"] = "network";
10
+ WorkflowForbiddenModuleCategory["Filesystem"] = "filesystem";
11
+ WorkflowForbiddenModuleCategory["Redis"] = "redis";
12
+ WorkflowForbiddenModuleCategory["OpenFga"] = "openfga";
13
+ WorkflowForbiddenModuleCategory["Nest"] = "nest";
14
+ WorkflowForbiddenModuleCategory["Activity"] = "activity";
15
+ })(WorkflowForbiddenModuleCategory || (exports.WorkflowForbiddenModuleCategory = WorkflowForbiddenModuleCategory = {}));
16
+ const EXACT = new Map([
17
+ ['prisma', WorkflowForbiddenModuleCategory.Database],
18
+ ['axios', WorkflowForbiddenModuleCategory.Network],
19
+ ['node-fetch', WorkflowForbiddenModuleCategory.Network],
20
+ ['undici', WorkflowForbiddenModuleCategory.Network],
21
+ ['got', WorkflowForbiddenModuleCategory.Network],
22
+ ['ky', WorkflowForbiddenModuleCategory.Network],
23
+ ['superagent', WorkflowForbiddenModuleCategory.Network],
24
+ ['cross-fetch', WorkflowForbiddenModuleCategory.Network],
25
+ ['isomorphic-fetch', WorkflowForbiddenModuleCategory.Network],
26
+ ['fs-extra', WorkflowForbiddenModuleCategory.Filesystem],
27
+ ['graceful-fs', WorkflowForbiddenModuleCategory.Filesystem],
28
+ ['redis', WorkflowForbiddenModuleCategory.Redis],
29
+ ['ioredis', WorkflowForbiddenModuleCategory.Redis],
30
+ ['openfga', WorkflowForbiddenModuleCategory.OpenFga],
31
+ ]);
32
+ const SCOPES = new Map([
33
+ ['@prisma', WorkflowForbiddenModuleCategory.Database],
34
+ ['@redis', WorkflowForbiddenModuleCategory.Redis],
35
+ ['@openfga', WorkflowForbiddenModuleCategory.OpenFga],
36
+ ['@nestjs', WorkflowForbiddenModuleCategory.Nest],
37
+ ]);
38
+ const GENERATED_CLIENT = /^@xemahq\/[a-z0-9-]+-client$/;
39
+ const ACTIVITY_MODULE = /\.activit(y|ies)(\.[cm]?[jt]s)?$/;
40
+ function workflowForbiddenModuleCategory(request) {
41
+ if (request.length === 0) {
42
+ return undefined;
43
+ }
44
+ if (request.startsWith('.') || request.startsWith('/')) {
45
+ if (/(^|\/)\.prisma(\/|$)/.test(request)) {
46
+ return WorkflowForbiddenModuleCategory.Database;
47
+ }
48
+ return ACTIVITY_MODULE.test(request.split('/').pop() ?? '')
49
+ ? WorkflowForbiddenModuleCategory.Activity
50
+ : undefined;
51
+ }
52
+ const parts = request.split('/');
53
+ const pkg = request.startsWith('@')
54
+ ? parts.slice(0, 2).join('/')
55
+ : parts[0];
56
+ if (pkg === '.prisma') {
57
+ return WorkflowForbiddenModuleCategory.Database;
58
+ }
59
+ const exact = EXACT.get(pkg);
60
+ if (exact !== undefined) {
61
+ return exact;
62
+ }
63
+ if (pkg.startsWith('@')) {
64
+ const scoped = SCOPES.get(parts[0]);
65
+ if (scoped !== undefined) {
66
+ return scoped;
67
+ }
68
+ if (GENERATED_CLIENT.test(pkg)) {
69
+ return WorkflowForbiddenModuleCategory.Network;
70
+ }
71
+ }
72
+ return undefined;
73
+ }
74
+ class WorkflowPurityError extends Error {
75
+ workflowsPath;
76
+ violations;
77
+ constructor(workflowsPath, violations, options) {
78
+ super(`the workflow bundle for ${workflowsPath} loads modules that cannot replay deterministically:\n` +
79
+ violations
80
+ .map((v) => ` - '${v.request}' (${v.category})` +
81
+ (v.issuer !== undefined ? `, imported by ${v.issuer}` : ''))
82
+ .join('\n') +
83
+ '\nWorkflow code performs no I/O: move this to an activity, and import activity signatures with `import type`.', options);
84
+ this.workflowsPath = workflowsPath;
85
+ this.violations = violations;
86
+ this.name = 'WorkflowPurityError';
87
+ }
88
+ }
89
+ exports.WorkflowPurityError = WorkflowPurityError;
90
+ function workflowPurityWebpackHook(violations) {
91
+ return (config) => {
92
+ const sdkExternals = config.externals;
93
+ if (typeof sdkExternals !== 'function') {
94
+ throw new Error('workflow purity: the Temporal bundler no longer installs an externals function; the purity probe cannot be composed with it.');
95
+ }
96
+ const inner = sdkExternals;
97
+ const externals = (data, callback) => {
98
+ const request = data.request ?? '';
99
+ const category = workflowForbiddenModuleCategory(request);
100
+ if (category !== undefined) {
101
+ const issuer = data.contextInfo?.issuer;
102
+ if (!violations.some((v) => v.request === request && v.issuer === issuer)) {
103
+ violations.push({ request, category, issuer });
104
+ }
105
+ return Promise.resolve(`commonjs ${request}`);
106
+ }
107
+ return inner(data, callback);
108
+ };
109
+ return {
110
+ ...config,
111
+ externals: externals,
112
+ };
113
+ };
114
+ }
115
+ //# sourceMappingURL=workflow-purity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-purity.js","sourceRoot":"","sources":["../../src/lib/workflow-purity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/temporal-runtime",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Temporal workers and clients for Xema — connection management, on-behalf-of auth interceptors, schedules, and search attributes.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Neuralchowder Inc. <developer@xema.dev> (https://xema.dev)",
@@ -17,29 +17,38 @@
17
17
  },
18
18
  "main": "dist/index.js",
19
19
  "types": "dist/index.d.ts",
20
+ "bin": {
21
+ "xema-temporal-controller-token-publisher": "dist/bin/controller-token-publisher.js"
22
+ },
20
23
  "files": [
21
24
  "dist"
22
25
  ],
23
26
  "devDependencies": {
24
27
  "@nestjs/common": "11.1.18",
28
+ "@temporalio/activity": "^1.24.0",
29
+ "@types/jest": "^30.0.0",
25
30
  "@types/node": "25.2.3",
31
+ "@xemahq/contracts": "^0.54.0",
32
+ "@xemahq/identity-client": "^0.14.0",
33
+ "jest": "^30.3.0",
26
34
  "prettier": "3.6.2",
27
35
  "reflect-metadata": "0.2.2",
36
+ "ts-jest": "^29.4.9",
28
37
  "typescript": "5.9.3",
29
- "@xemahq/identity-client": "^0.12.0",
30
- "@xemahq/contracts": "^0.49.0"
38
+ "@xemahq/temporal-test-server": "0.1.0"
31
39
  },
32
40
  "peerDependencies": {
33
41
  "@nestjs/common": "^11.0.0",
34
42
  "reflect-metadata": "^0.2",
35
43
  "@xemahq/identity-client": ">=0.9.0",
36
- "@xemahq/contracts": ">=0.49.0"
44
+ "@xemahq/contracts": ">=0.52.0"
37
45
  },
38
46
  "dependencies": {
39
- "@temporalio/client": "^1.16.2",
40
- "@temporalio/common": "^1.16.2",
41
- "@temporalio/proto": "^1.16.2",
42
- "@temporalio/worker": "^1.16.2"
47
+ "@temporalio/client": "^1.24.0",
48
+ "@temporalio/common": "^1.24.0",
49
+ "@temporalio/proto": "^1.24.0",
50
+ "@temporalio/worker": "^1.24.0",
51
+ "@temporalio/workflow": "^1.24.0"
43
52
  },
44
53
  "exports": {
45
54
  ".": {
@@ -54,8 +63,10 @@
54
63
  },
55
64
  "scripts": {
56
65
  "clean": "rm -rf dist",
57
- "build": "tsc -p tsconfig.json",
66
+ "build": "tsc -p tsconfig.build.json",
58
67
  "format": "prettier --write \"src/**/*.ts\"",
59
- "typecheck": "tsc -p tsconfig.json --noEmit"
68
+ "typecheck": "tsc -p tsconfig.json --noEmit",
69
+ "test": "jest --config jest.config.ts && jest --config jest.dev-server.config.ts",
70
+ "test:integration": "jest --config jest.integration.config.ts --runInBand"
60
71
  }
61
72
  }