@xemahq/temporal-runtime 0.6.0 → 0.8.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 (114) hide show
  1. package/README.md +203 -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 +14 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +21 -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 +107 -0
  19. package/dist/lib/biome-worker.d.ts.map +1 -0
  20. package/dist/lib/biome-worker.js +348 -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 +4 -0
  39. package/dist/lib/fairness-constants.d.ts.map +1 -0
  40. package/dist/lib/fairness-constants.js +7 -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/nexus-constants.d.ts +8 -0
  47. package/dist/lib/nexus-constants.d.ts.map +1 -0
  48. package/dist/lib/nexus-constants.js +14 -0
  49. package/dist/lib/nexus-constants.js.map +1 -0
  50. package/dist/lib/nexus-contract.d.ts +43 -0
  51. package/dist/lib/nexus-contract.d.ts.map +1 -0
  52. package/dist/lib/nexus-contract.js +101 -0
  53. package/dist/lib/nexus-contract.js.map +1 -0
  54. package/dist/lib/nexus-handler.d.ts +32 -0
  55. package/dist/lib/nexus-handler.d.ts.map +1 -0
  56. package/dist/lib/nexus-handler.js +144 -0
  57. package/dist/lib/nexus-handler.js.map +1 -0
  58. package/dist/lib/nexus-workflow.d.ts +22 -0
  59. package/dist/lib/nexus-workflow.d.ts.map +1 -0
  60. package/dist/lib/nexus-workflow.js +74 -0
  61. package/dist/lib/nexus-workflow.js.map +1 -0
  62. package/dist/lib/org-erasure.d.ts +13 -0
  63. package/dist/lib/org-erasure.d.ts.map +1 -0
  64. package/dist/lib/org-erasure.js +68 -0
  65. package/dist/lib/org-erasure.js.map +1 -0
  66. package/dist/lib/proactive-token-refresher.d.ts +47 -0
  67. package/dist/lib/proactive-token-refresher.d.ts.map +1 -0
  68. package/dist/lib/proactive-token-refresher.js +147 -0
  69. package/dist/lib/proactive-token-refresher.js.map +1 -0
  70. package/dist/lib/search-attribute-constants.d.ts +3 -0
  71. package/dist/lib/search-attribute-constants.d.ts.map +1 -0
  72. package/dist/lib/search-attribute-constants.js +6 -0
  73. package/dist/lib/search-attribute-constants.js.map +1 -0
  74. package/dist/lib/search-attributes.d.ts +4 -18
  75. package/dist/lib/search-attributes.d.ts.map +1 -1
  76. package/dist/lib/search-attributes.js +33 -40
  77. package/dist/lib/search-attributes.js.map +1 -1
  78. package/dist/lib/standalone-activity.d.ts +23 -0
  79. package/dist/lib/standalone-activity.d.ts.map +1 -0
  80. package/dist/lib/standalone-activity.js +48 -0
  81. package/dist/lib/standalone-activity.js.map +1 -0
  82. package/dist/lib/versioned-worker.d.ts +26 -0
  83. package/dist/lib/versioned-worker.d.ts.map +1 -0
  84. package/dist/lib/versioned-worker.js +60 -0
  85. package/dist/lib/versioned-worker.js.map +1 -0
  86. package/dist/lib/worker-deployment-version.d.ts +8 -0
  87. package/dist/lib/worker-deployment-version.d.ts.map +1 -0
  88. package/dist/lib/worker-deployment-version.js +45 -0
  89. package/dist/lib/worker-deployment-version.js.map +1 -0
  90. package/dist/lib/worker.d.ts +8 -7
  91. package/dist/lib/worker.d.ts.map +1 -1
  92. package/dist/lib/worker.js +55 -37
  93. package/dist/lib/worker.js.map +1 -1
  94. package/dist/lib/workflow-interceptors/fairness-guard.d.ts +4 -0
  95. package/dist/lib/workflow-interceptors/fairness-guard.d.ts.map +1 -0
  96. package/dist/lib/workflow-interceptors/fairness-guard.js +79 -0
  97. package/dist/lib/workflow-interceptors/fairness-guard.js.map +1 -0
  98. package/dist/lib/workflow-interceptors/fairness-propagation.d.ts +3 -0
  99. package/dist/lib/workflow-interceptors/fairness-propagation.d.ts.map +1 -0
  100. package/dist/lib/workflow-interceptors/fairness-propagation.js +6 -0
  101. package/dist/lib/workflow-interceptors/fairness-propagation.js.map +1 -0
  102. package/dist/lib/workflow-interceptors/org-fairness-required.d.ts +3 -0
  103. package/dist/lib/workflow-interceptors/org-fairness-required.d.ts.map +1 -0
  104. package/dist/lib/workflow-interceptors/org-fairness-required.js +6 -0
  105. package/dist/lib/workflow-interceptors/org-fairness-required.js.map +1 -0
  106. package/dist/lib/workflow-interceptors/org-search-attribute.d.ts +3 -0
  107. package/dist/lib/workflow-interceptors/org-search-attribute.d.ts.map +1 -0
  108. package/dist/lib/workflow-interceptors/org-search-attribute.js +49 -0
  109. package/dist/lib/workflow-interceptors/org-search-attribute.js.map +1 -0
  110. package/dist/lib/workflow-purity.d.ts +27 -0
  111. package/dist/lib/workflow-purity.d.ts.map +1 -0
  112. package/dist/lib/workflow-purity.js +115 -0
  113. package/dist/lib/workflow-purity.js.map +1 -0
  114. package/package.json +33 -10
@@ -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;AAU5B,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;IAOxD,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC5D;AA6CD,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,cAAc,CAAC,CA2BzB;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,66 @@
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
- async function bundlePlatformWorkflows(workflowsPath, options) {
9
- return (0, worker_1.bundleWorkflowCode)({
10
- workflowsPath,
11
- ...(options?.workflowInterceptorModules !== undefined
12
- ? { workflowInterceptorModules: [...options.workflowInterceptorModules] }
13
- : {}),
8
+ const versioned_worker_1 = require("./versioned-worker");
9
+ const workflow_purity_1 = require("./workflow-purity");
10
+ const nexus_constants_1 = require("./nexus-constants");
11
+ const ORG_SEARCH_ATTRIBUTE_INTERCEPTOR_MODULE = (0, node_path_1.join)(__dirname, 'workflow-interceptors', 'org-search-attribute');
12
+ function defineNexusEndpoints(endpoints) {
13
+ const value = JSON.stringify(endpoints);
14
+ return (config) => ({
15
+ ...config,
16
+ plugins: [
17
+ ...(config.plugins ?? []),
18
+ {
19
+ apply(compiler) {
20
+ new compiler.webpack.DefinePlugin({
21
+ [nexus_constants_1.NEXUS_ENDPOINTS_DEFINE]: value,
22
+ }).apply(compiler);
23
+ },
24
+ },
25
+ ],
14
26
  });
15
27
  }
16
- 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
+ async function bundlePlatformWorkflows(workflowsPath, options) {
29
+ const violations = [];
30
+ let bundle;
31
+ try {
32
+ bundle = await (0, worker_1.bundleWorkflowCode)({
33
+ workflowsPath,
34
+ webpackConfigHook: (config) => {
35
+ const pure = (0, workflow_purity_1.workflowPurityWebpackHook)(violations)(config);
36
+ return options?.nexusEndpoints !== undefined
37
+ ? defineNexusEndpoints(options.nexusEndpoints)(pure)
38
+ : pure;
39
+ },
40
+ workflowInterceptorModules: [
41
+ ORG_SEARCH_ATTRIBUTE_INTERCEPTOR_MODULE,
42
+ ...(options?.workflowInterceptorModules ?? []),
28
43
  ],
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
- : {}),
44
+ });
45
+ }
46
+ catch (error) {
47
+ if (violations.length > 0) {
48
+ throw new workflow_purity_1.WorkflowPurityError(workflowsPath, violations, { cause: error });
49
+ }
50
+ throw error;
51
+ }
52
+ if (violations.length > 0) {
53
+ throw new workflow_purity_1.WorkflowPurityError(workflowsPath, violations);
54
+ }
55
+ return bundle;
56
+ }
57
+ async function assertWorkflowsBundle(workflowsPath, options) {
58
+ await bundlePlatformWorkflows(workflowsPath, options);
59
+ }
60
+ async function createPlatformWorker(options) {
61
+ return (0, versioned_worker_1.createVersionedWorker)({
62
+ ...options,
63
+ identity: (0, versioned_worker_1.platformWorkerIdentity)('xema-platform-worker', options.namespace, options.taskQueue),
46
64
  });
47
65
  }
48
66
  //# 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":";;AAwGA,0DA8BC;AAQD,sDAKC;AA6CD,oDAWC;AA3MD,yCAAiC;AAEjC,+CAM4B;AAE5B,yDAK4B;AAE5B,uDAI2B;AAE3B,uDAA2D;AAgB3D,MAAM,uCAAuC,GAAG,IAAA,gBAAI,EAClD,SAAS,EACT,uBAAuB,EACvB,sBAAsB,CACvB,CAAC;AA+BF,SAAS,oBAAoB,CAC3B,SAA2C;IAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACxC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClB,GAAG,MAAM;QACT,OAAO,EAAE;YACP,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YACzB;gBACE,KAAK,CAAC,QAAwB;oBAC5B,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC;wBAChC,CAAC,wCAAsB,CAAC,EAAE,KAAK;qBAChC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrB,CAAC;aACgE;SACpE;KACF,CAAC,CAAC;AACL,CAAC;AAaM,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,CAAC,MAAM,EAAE,EAAE;gBAC5B,MAAM,IAAI,GAAG,IAAA,2CAAyB,EAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC3D,OAAO,OAAO,EAAE,cAAc,KAAK,SAAS;oBAC1C,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;oBACpD,CAAC,CAAC,IAAI,CAAC;YACX,CAAC;YACD,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,EASL,KAAK,oBAAoB,EAE1B,MAAM,sBAAsB,CAAC;AA+H9B,wBAAgB,+BAA+B,IAAI,oBAAoB,CAEtE;AAGD,wBAAgB,+BAA+B,IAAI,oBAAoB,CAKtE"}
@@ -0,0 +1,79 @@
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
+ async startNexusOperation(input, next) {
46
+ const requested = Object.entries(input.headers ?? {}).find(([name]) => name.toLowerCase() === fairness_constants_1.XEMA_NEXUS_ORG_HEADER)?.[1];
47
+ const key = propagatedKey(requested, `Nexus operation ${input.service}/${input.operation}`);
48
+ if (key === undefined) {
49
+ return next(input);
50
+ }
51
+ const headers = {};
52
+ for (const [name, value] of Object.entries(input.headers ?? {})) {
53
+ if (name.toLowerCase() !== fairness_constants_1.XEMA_NEXUS_ORG_HEADER)
54
+ headers[name] = value;
55
+ }
56
+ headers[fairness_constants_1.XEMA_NEXUS_ORG_HEADER] = key;
57
+ return next({ ...input, headers });
58
+ }
59
+ }
60
+ class OrgFairnessRequiredInbound {
61
+ async execute(input, next) {
62
+ if (ownFairnessKey() === undefined) {
63
+ const info = (0, workflow_1.workflowInfo)();
64
+ throw workflow_1.ApplicationFailure.nonRetryable(`Workflow ${info.workflowType} started on org-fair task queue ` +
65
+ `${info.taskQueue} with no fairness key. Start it with startWorkflowForOrg.`, fairness_constants_1.ORG_FAIRNESS_KEY_MISSING);
66
+ }
67
+ return next(input);
68
+ }
69
+ }
70
+ function fairnessPropagationInterceptors() {
71
+ return { outbound: [new FairnessPropagationOutbound()] };
72
+ }
73
+ function orgFairnessRequiredInterceptors() {
74
+ return {
75
+ inbound: [new OrgFairnessRequiredInbound()],
76
+ outbound: [new FairnessPropagationOutbound()],
77
+ };
78
+ }
79
+ //# 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":"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"}
@@ -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.8.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,40 @@
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.55.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.55.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/nexus": "^1.24.0",
50
+ "@temporalio/proto": "^1.24.0",
51
+ "@temporalio/worker": "^1.24.0",
52
+ "@temporalio/workflow": "^1.24.0",
53
+ "nexus-rpc": "0.0.3"
43
54
  },
44
55
  "exports": {
45
56
  ".": {
@@ -47,6 +58,16 @@
47
58
  "xema-source": "./src/index.ts",
48
59
  "default": "./dist/index.js"
49
60
  },
61
+ "./nexus-contract": {
62
+ "types": "./dist/lib/nexus-contract.d.ts",
63
+ "xema-source": "./src/lib/nexus-contract.ts",
64
+ "default": "./dist/lib/nexus-contract.js"
65
+ },
66
+ "./nexus-workflow": {
67
+ "types": "./dist/lib/nexus-workflow.d.ts",
68
+ "xema-source": "./src/lib/nexus-workflow.ts",
69
+ "default": "./dist/lib/nexus-workflow.js"
70
+ },
50
71
  "./dist/lib/*": {
51
72
  "types": "./dist/lib/*.d.ts",
52
73
  "default": "./dist/lib/*.js"
@@ -54,8 +75,10 @@
54
75
  },
55
76
  "scripts": {
56
77
  "clean": "rm -rf dist",
57
- "build": "tsc -p tsconfig.json",
78
+ "build": "tsc -p tsconfig.build.json",
58
79
  "format": "prettier --write \"src/**/*.ts\"",
59
- "typecheck": "tsc -p tsconfig.json --noEmit"
80
+ "typecheck": "tsc -p tsconfig.json --noEmit",
81
+ "test": "jest --config jest.config.ts && jest --config jest.dev-server.config.ts",
82
+ "test:integration": "jest --config jest.integration.config.ts --runInBand"
60
83
  }
61
84
  }