@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.
- package/README.md +154 -11
- package/dist/bin/controller-token-publisher.d.ts +3 -0
- package/dist/bin/controller-token-publisher.d.ts.map +1 -0
- package/dist/bin/controller-token-publisher.js +18 -0
- package/dist/bin/controller-token-publisher.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/access-token.d.ts +11 -0
- package/dist/lib/access-token.d.ts.map +1 -0
- package/dist/lib/access-token.js +30 -0
- package/dist/lib/access-token.js.map +1 -0
- package/dist/lib/base-temporal-client.service.d.ts +3 -2
- package/dist/lib/base-temporal-client.service.d.ts.map +1 -1
- package/dist/lib/base-temporal-client.service.js +5 -5
- package/dist/lib/base-temporal-client.service.js.map +1 -1
- package/dist/lib/biome-worker.d.ts +83 -0
- package/dist/lib/biome-worker.d.ts.map +1 -0
- package/dist/lib/biome-worker.js +253 -0
- package/dist/lib/biome-worker.js.map +1 -0
- package/dist/lib/bounded-retry.d.ts +22 -0
- package/dist/lib/bounded-retry.d.ts.map +1 -0
- package/dist/lib/bounded-retry.js +67 -0
- package/dist/lib/bounded-retry.js.map +1 -0
- package/dist/lib/client-credentials-token-source.d.ts +23 -0
- package/dist/lib/client-credentials-token-source.d.ts.map +1 -0
- package/dist/lib/client-credentials-token-source.js +108 -0
- package/dist/lib/client-credentials-token-source.js.map +1 -0
- package/dist/lib/connection.d.ts +48 -9
- package/dist/lib/connection.d.ts.map +1 -1
- package/dist/lib/connection.js +153 -41
- package/dist/lib/connection.js.map +1 -1
- package/dist/lib/controller-token-publisher.d.ts +51 -0
- package/dist/lib/controller-token-publisher.d.ts.map +1 -0
- package/dist/lib/controller-token-publisher.js +116 -0
- package/dist/lib/controller-token-publisher.js.map +1 -0
- package/dist/lib/fairness-constants.d.ts +3 -0
- package/dist/lib/fairness-constants.d.ts.map +1 -0
- package/dist/lib/fairness-constants.js +6 -0
- package/dist/lib/fairness-constants.js.map +1 -0
- package/dist/lib/fairness.d.ts +13 -0
- package/dist/lib/fairness.d.ts.map +1 -0
- package/dist/lib/fairness.js +56 -0
- package/dist/lib/fairness.js.map +1 -0
- package/dist/lib/org-erasure.d.ts +13 -0
- package/dist/lib/org-erasure.d.ts.map +1 -0
- package/dist/lib/org-erasure.js +68 -0
- package/dist/lib/org-erasure.js.map +1 -0
- package/dist/lib/proactive-token-refresher.d.ts +47 -0
- package/dist/lib/proactive-token-refresher.d.ts.map +1 -0
- package/dist/lib/proactive-token-refresher.js +147 -0
- package/dist/lib/proactive-token-refresher.js.map +1 -0
- package/dist/lib/search-attribute-constants.d.ts +3 -0
- package/dist/lib/search-attribute-constants.d.ts.map +1 -0
- package/dist/lib/search-attribute-constants.js +6 -0
- package/dist/lib/search-attribute-constants.js.map +1 -0
- package/dist/lib/search-attributes.d.ts +4 -18
- package/dist/lib/search-attributes.d.ts.map +1 -1
- package/dist/lib/search-attributes.js +33 -40
- package/dist/lib/search-attributes.js.map +1 -1
- package/dist/lib/standalone-activity.d.ts +23 -0
- package/dist/lib/standalone-activity.d.ts.map +1 -0
- package/dist/lib/standalone-activity.js +48 -0
- package/dist/lib/standalone-activity.js.map +1 -0
- package/dist/lib/versioned-worker.d.ts +26 -0
- package/dist/lib/versioned-worker.d.ts.map +1 -0
- package/dist/lib/versioned-worker.js +60 -0
- package/dist/lib/versioned-worker.js.map +1 -0
- package/dist/lib/worker-deployment-version.d.ts +8 -0
- package/dist/lib/worker-deployment-version.d.ts.map +1 -0
- package/dist/lib/worker-deployment-version.js +45 -0
- package/dist/lib/worker-deployment-version.js.map +1 -0
- package/dist/lib/worker.d.ts +7 -7
- package/dist/lib/worker.d.ts.map +1 -1
- package/dist/lib/worker.js +33 -37
- package/dist/lib/worker.js.map +1 -1
- package/dist/lib/workflow-interceptors/fairness-guard.d.ts +4 -0
- package/dist/lib/workflow-interceptors/fairness-guard.d.ts.map +1 -0
- package/dist/lib/workflow-interceptors/fairness-guard.js +65 -0
- package/dist/lib/workflow-interceptors/fairness-guard.js.map +1 -0
- package/dist/lib/workflow-interceptors/fairness-propagation.d.ts +3 -0
- package/dist/lib/workflow-interceptors/fairness-propagation.d.ts.map +1 -0
- package/dist/lib/workflow-interceptors/fairness-propagation.js +6 -0
- package/dist/lib/workflow-interceptors/fairness-propagation.js.map +1 -0
- package/dist/lib/workflow-interceptors/org-fairness-required.d.ts +3 -0
- package/dist/lib/workflow-interceptors/org-fairness-required.d.ts.map +1 -0
- package/dist/lib/workflow-interceptors/org-fairness-required.js +6 -0
- package/dist/lib/workflow-interceptors/org-fairness-required.js.map +1 -0
- package/dist/lib/workflow-interceptors/org-search-attribute.d.ts +3 -0
- package/dist/lib/workflow-interceptors/org-search-attribute.d.ts.map +1 -0
- package/dist/lib/workflow-interceptors/org-search-attribute.js +49 -0
- package/dist/lib/workflow-interceptors/org-search-attribute.js.map +1 -0
- package/dist/lib/workflow-purity.d.ts +27 -0
- package/dist/lib/workflow-purity.d.ts.map +1 -0
- package/dist/lib/workflow-purity.js +115 -0
- package/dist/lib/workflow-purity.js.map +1 -0
- 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"}
|
package/dist/lib/worker.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
|
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
|
|
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
|
}
|
package/dist/lib/worker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/lib/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,
|
|
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"}
|
package/dist/lib/worker.js
CHANGED
|
@@ -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
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
6
7
|
const worker_1 = require("@temporalio/worker");
|
|
7
|
-
const
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
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
|
package/dist/lib/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/lib/worker.ts"],"names":[],"mappings":";;
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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.
|
|
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/
|
|
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.
|
|
44
|
+
"@xemahq/contracts": ">=0.52.0"
|
|
37
45
|
},
|
|
38
46
|
"dependencies": {
|
|
39
|
-
"@temporalio/client": "^1.
|
|
40
|
-
"@temporalio/common": "^1.
|
|
41
|
-
"@temporalio/proto": "^1.
|
|
42
|
-
"@temporalio/worker": "^1.
|
|
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
|
}
|