@xemahq/temporal-runtime 0.5.2 → 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 +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -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/namespace.d.ts +4 -0
- package/dist/lib/namespace.d.ts.map +1 -0
- package/dist/lib/namespace.js +18 -0
- package/dist/lib/namespace.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,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createVersionedWorker = createVersionedWorker;
|
|
4
|
+
exports.platformWorkerIdentity = platformWorkerIdentity;
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const worker_1 = require("@temporalio/worker");
|
|
7
|
+
const on_behalf_of_interceptor_1 = require("./on-behalf-of-interceptor");
|
|
8
|
+
const worker_deployment_version_1 = require("./worker-deployment-version");
|
|
9
|
+
async function createVersionedWorker(params) {
|
|
10
|
+
const version = (0, worker_deployment_version_1.assertWorkerDeploymentVersion)(params.version);
|
|
11
|
+
return worker_1.Worker.create({
|
|
12
|
+
connection: params.connection,
|
|
13
|
+
namespace: params.namespace,
|
|
14
|
+
taskQueue: params.taskQueue,
|
|
15
|
+
identity: params.identity,
|
|
16
|
+
...(params.workflowBundle !== undefined
|
|
17
|
+
? { workflowBundle: params.workflowBundle }
|
|
18
|
+
: {}),
|
|
19
|
+
...(params.activities !== undefined
|
|
20
|
+
? { activities: params.activities }
|
|
21
|
+
: {}),
|
|
22
|
+
...(params.nexusServices !== undefined && params.nexusServices.length > 0
|
|
23
|
+
? { nexusServices: [...params.nexusServices] }
|
|
24
|
+
: {}),
|
|
25
|
+
interceptors: {
|
|
26
|
+
activity: [
|
|
27
|
+
() => ({ inbound: new on_behalf_of_interceptor_1.OnBehalfOfActivityInterceptor() }),
|
|
28
|
+
...(params.activityInterceptors ?? []),
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
...(params.sinks !== undefined ? { sinks: params.sinks } : {}),
|
|
32
|
+
workerDeploymentOptions: {
|
|
33
|
+
version,
|
|
34
|
+
useWorkerVersioning: true,
|
|
35
|
+
defaultVersioningBehavior: 'PINNED',
|
|
36
|
+
},
|
|
37
|
+
...(params.payloadCodec
|
|
38
|
+
? { dataConverter: { payloadCodecs: [params.payloadCodec] } }
|
|
39
|
+
: {}),
|
|
40
|
+
...(params.maxConcurrentActivityTaskExecutions !== undefined
|
|
41
|
+
? {
|
|
42
|
+
maxConcurrentActivityTaskExecutions: params.maxConcurrentActivityTaskExecutions,
|
|
43
|
+
}
|
|
44
|
+
: {}),
|
|
45
|
+
...(params.maxConcurrentWorkflowTaskExecutions !== undefined
|
|
46
|
+
? {
|
|
47
|
+
maxConcurrentWorkflowTaskExecutions: params.maxConcurrentWorkflowTaskExecutions,
|
|
48
|
+
}
|
|
49
|
+
: {}),
|
|
50
|
+
...(params.maxConcurrentNexusTaskExecutions !== undefined
|
|
51
|
+
? {
|
|
52
|
+
maxConcurrentNexusTaskExecutions: params.maxConcurrentNexusTaskExecutions,
|
|
53
|
+
}
|
|
54
|
+
: {}),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function platformWorkerIdentity(role, namespace, taskQueue) {
|
|
58
|
+
return `${role}-${namespace}-${taskQueue}-${(0, node_crypto_1.randomUUID)().slice(0, 8)}`;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=versioned-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioned-worker.js","sourceRoot":"","sources":["../../src/lib/versioned-worker.ts"],"names":[],"mappings":";;AA4DA,sDAoDC;AAGD,wDAMC;AApHD,6CAAyC;AAEzC,+CAM4B;AAE5B,yEAA2E;AAC3E,2EAGqC;AAyC9B,KAAK,UAAU,qBAAqB,CACzC,MAA6B;IAE7B,MAAM,OAAO,GAAG,IAAA,yDAA6B,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,OAAO,eAAM,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;YACnC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YACvE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,YAAY,EAAE;YACZ,QAAQ,EAAE;gBACR,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,wDAA6B,EAAE,EAAE,CAAC;gBACxD,GAAG,CAAC,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC;aACvC;SACF;QACD,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,uBAAuB,EAAE;YACvB,OAAO;YACP,mBAAmB,EAAE,IAAI;YACzB,yBAAyB,EAAE,QAAQ;SACpC;QACD,GAAG,CAAC,MAAM,CAAC,YAAY;YACrB,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE;YAC7D,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,mCAAmC,KAAK,SAAS;YAC1D,CAAC,CAAC;gBACE,mCAAmC,EACjC,MAAM,CAAC,mCAAmC;aAC7C;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,mCAAmC,KAAK,SAAS;YAC1D,CAAC,CAAC;gBACE,mCAAmC,EACjC,MAAM,CAAC,mCAAmC;aAC7C;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,gCAAgC,KAAK,SAAS;YACvD,CAAC,CAAC;gBACE,gCAAgC,EAC9B,MAAM,CAAC,gCAAgC;aAC1C;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;AACL,CAAC;AAGD,SAAgB,sBAAsB,CACpC,IAAY,EACZ,SAAiB,EACjB,SAAiB;IAEjB,OAAO,GAAG,IAAI,IAAI,SAAS,IAAI,SAAS,IAAI,IAAA,wBAAU,GAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TemporalEnvReader } from './namespace';
|
|
2
|
+
import type { WorkerDeploymentVersion } from '@temporalio/common';
|
|
3
|
+
export type { WorkerDeploymentVersion } from '@temporalio/common';
|
|
4
|
+
export declare const TEMPORAL_DEPLOYMENT_NAME_ENV = "TEMPORAL_DEPLOYMENT_NAME";
|
|
5
|
+
export declare const TEMPORAL_WORKER_BUILD_ID_ENV = "TEMPORAL_WORKER_BUILD_ID";
|
|
6
|
+
export declare function assertWorkerDeploymentVersion(version: WorkerDeploymentVersion): WorkerDeploymentVersion;
|
|
7
|
+
export declare function resolveWorkerDeploymentVersionFromEnv(env: TemporalEnvReader): WorkerDeploymentVersion;
|
|
8
|
+
//# sourceMappingURL=worker-deployment-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-deployment-version.d.ts","sourceRoot":"","sources":["../../src/lib/worker-deployment-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,YAAY,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAMlE,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AAQvE,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AAMvE,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,uBAAuB,GAC/B,uBAAuB,CAiBzB;AAUD,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,iBAAiB,GACrB,uBAAuB,CAwBzB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TEMPORAL_WORKER_BUILD_ID_ENV = exports.TEMPORAL_DEPLOYMENT_NAME_ENV = void 0;
|
|
4
|
+
exports.assertWorkerDeploymentVersion = assertWorkerDeploymentVersion;
|
|
5
|
+
exports.resolveWorkerDeploymentVersionFromEnv = resolveWorkerDeploymentVersionFromEnv;
|
|
6
|
+
exports.TEMPORAL_DEPLOYMENT_NAME_ENV = 'TEMPORAL_DEPLOYMENT_NAME';
|
|
7
|
+
exports.TEMPORAL_WORKER_BUILD_ID_ENV = 'TEMPORAL_WORKER_BUILD_ID';
|
|
8
|
+
function assertWorkerDeploymentVersion(version) {
|
|
9
|
+
for (const [field, value] of [
|
|
10
|
+
['deploymentName', version.deploymentName],
|
|
11
|
+
['buildId', version.buildId],
|
|
12
|
+
]) {
|
|
13
|
+
if (typeof value !== 'string' ||
|
|
14
|
+
value.length === 0 ||
|
|
15
|
+
value.trim() !== value) {
|
|
16
|
+
throw new Error(`Worker Deployment version ${field} must be a non-empty string without ` +
|
|
17
|
+
`surrounding whitespace; got ${JSON.stringify(value)}.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return { deploymentName: version.deploymentName, buildId: version.buildId };
|
|
21
|
+
}
|
|
22
|
+
function resolveWorkerDeploymentVersionFromEnv(env) {
|
|
23
|
+
const deploymentName = env(exports.TEMPORAL_DEPLOYMENT_NAME_ENV);
|
|
24
|
+
const buildId = env(exports.TEMPORAL_WORKER_BUILD_ID_ENV);
|
|
25
|
+
const missing = [
|
|
26
|
+
deploymentName === undefined || deploymentName.length === 0
|
|
27
|
+
? exports.TEMPORAL_DEPLOYMENT_NAME_ENV
|
|
28
|
+
: undefined,
|
|
29
|
+
buildId === undefined || buildId.length === 0
|
|
30
|
+
? exports.TEMPORAL_WORKER_BUILD_ID_ENV
|
|
31
|
+
: undefined,
|
|
32
|
+
].filter((name) => name !== undefined);
|
|
33
|
+
if (missing.length > 0) {
|
|
34
|
+
throw new Error(`${missing.join(' and ')} ${missing.length === 1 ? 'is' : 'are'} required: ` +
|
|
35
|
+
'the Worker Deployment version is written into the pod by the Temporal ' +
|
|
36
|
+
'Worker Controller from the digest-pinned pod template. There is no ' +
|
|
37
|
+
'default and no unversioned mode — an unversioned worker would pick up ' +
|
|
38
|
+
'runs that were started on a different version.');
|
|
39
|
+
}
|
|
40
|
+
return assertWorkerDeploymentVersion({
|
|
41
|
+
deploymentName: deploymentName,
|
|
42
|
+
buildId: buildId,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=worker-deployment-version.js.map
|
|
@@ -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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"}
|