@skedulo/integration-sdk 0.3.3 → 0.4.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/CHANGELOG.md +15 -0
- package/README.md +38 -19
- package/dist/actions/action-registry.d.ts.map +1 -1
- package/dist/actions/action-registry.js +27 -23
- package/dist/actions/action-registry.js.map +1 -1
- package/dist/actions/data-flow/activate.action.d.ts +10 -0
- package/dist/actions/data-flow/activate.action.d.ts.map +1 -0
- package/dist/actions/data-flow/activate.action.js +22 -0
- package/dist/actions/data-flow/activate.action.js.map +1 -0
- package/dist/actions/data-flow/create.action.d.ts +9 -0
- package/dist/actions/data-flow/create.action.d.ts.map +1 -0
- package/dist/actions/data-flow/create.action.js +55 -0
- package/dist/actions/data-flow/create.action.js.map +1 -0
- package/dist/actions/data-flow/deactivate.action.d.ts +9 -0
- package/dist/actions/data-flow/deactivate.action.d.ts.map +1 -0
- package/dist/actions/data-flow/deactivate.action.js +21 -0
- package/dist/actions/data-flow/deactivate.action.js.map +1 -0
- package/dist/actions/data-flow/delete.action.d.ts +10 -0
- package/dist/actions/data-flow/delete.action.d.ts.map +1 -0
- package/dist/actions/data-flow/delete.action.js +33 -0
- package/dist/actions/data-flow/delete.action.js.map +1 -0
- package/dist/actions/data-flow/get.action.d.ts +5 -0
- package/dist/actions/data-flow/get.action.d.ts.map +1 -0
- package/dist/actions/data-flow/get.action.js +22 -0
- package/dist/actions/data-flow/get.action.js.map +1 -0
- package/dist/actions/data-flow/index.d.ts +9 -0
- package/dist/actions/data-flow/index.d.ts.map +1 -0
- package/dist/actions/data-flow/index.js +33 -0
- package/dist/actions/data-flow/index.js.map +1 -0
- package/dist/actions/data-flow/list.action.d.ts +6 -0
- package/dist/actions/data-flow/list.action.d.ts.map +1 -0
- package/dist/actions/data-flow/list.action.js +25 -0
- package/dist/actions/data-flow/list.action.js.map +1 -0
- package/dist/actions/data-flow/shared.d.ts +3 -0
- package/dist/actions/data-flow/shared.d.ts.map +1 -0
- package/dist/actions/data-flow/shared.js +16 -0
- package/dist/actions/data-flow/shared.js.map +1 -0
- package/dist/actions/data-flow/types.d.ts +21 -0
- package/dist/actions/data-flow/types.d.ts.map +1 -0
- package/dist/actions/data-flow/types.js +3 -0
- package/dist/actions/data-flow/types.js.map +1 -0
- package/dist/actions/data-flow/update.action.d.ts +16 -0
- package/dist/actions/data-flow/update.action.d.ts.map +1 -0
- package/dist/actions/data-flow/update.action.js +62 -0
- package/dist/actions/data-flow/update.action.js.map +1 -0
- package/dist/actions/data-flow.action.d.ts.map +1 -1
- package/dist/actions/data-flow.action.js +5 -9
- package/dist/actions/data-flow.action.js.map +1 -1
- package/dist/actions/event/index.d.ts +4 -0
- package/dist/actions/event/index.d.ts.map +1 -0
- package/dist/actions/event/index.js +23 -0
- package/dist/actions/event/index.js.map +1 -0
- package/dist/actions/event/on-skedulo.action.d.ts +4 -0
- package/dist/actions/event/on-skedulo.action.d.ts.map +1 -0
- package/dist/actions/event/on-skedulo.action.js +81 -0
- package/dist/actions/event/on-skedulo.action.js.map +1 -0
- package/dist/actions/event/on-vendor.action.d.ts +4 -0
- package/dist/actions/event/on-vendor.action.d.ts.map +1 -0
- package/dist/actions/event/on-vendor.action.js +39 -0
- package/dist/actions/event/on-vendor.action.js.map +1 -0
- package/dist/actions/event/types.d.ts +28 -0
- package/dist/actions/event/types.d.ts.map +1 -0
- package/dist/actions/event/types.js +3 -0
- package/dist/actions/event/types.js.map +1 -0
- package/dist/actions/event.action.d.ts +9 -4
- package/dist/actions/event.action.d.ts.map +1 -1
- package/dist/actions/event.action.js +57 -33
- package/dist/actions/event.action.js.map +1 -1
- package/dist/actions/metadata/get-fields.action.d.ts +5 -0
- package/dist/actions/metadata/get-fields.action.d.ts.map +1 -0
- package/dist/actions/metadata/get-fields.action.js +26 -0
- package/dist/actions/metadata/get-fields.action.js.map +1 -0
- package/dist/actions/metadata/get-objects.action.d.ts +5 -0
- package/dist/actions/metadata/get-objects.action.d.ts.map +1 -0
- package/dist/actions/metadata/get-objects.action.js +18 -0
- package/dist/actions/metadata/get-objects.action.js.map +1 -0
- package/dist/actions/metadata/get-sample-apis.action.d.ts +5 -0
- package/dist/actions/metadata/get-sample-apis.action.d.ts.map +1 -0
- package/dist/actions/metadata/get-sample-apis.action.js +19 -0
- package/dist/actions/metadata/get-sample-apis.action.js.map +1 -0
- package/dist/actions/metadata/get-sample-records.action.d.ts +5 -0
- package/dist/actions/metadata/get-sample-records.action.d.ts.map +1 -0
- package/dist/actions/metadata/get-sample-records.action.js +33 -0
- package/dist/actions/metadata/get-sample-records.action.js.map +1 -0
- package/dist/actions/metadata/get-templates.action.d.ts +5 -0
- package/dist/actions/metadata/get-templates.action.d.ts.map +1 -0
- package/dist/actions/metadata/get-templates.action.js +19 -0
- package/dist/actions/metadata/get-templates.action.js.map +1 -0
- package/dist/actions/metadata/index.d.ts +7 -0
- package/dist/actions/metadata/index.d.ts.map +1 -0
- package/dist/actions/metadata/index.js +29 -0
- package/dist/actions/metadata/index.js.map +1 -0
- package/dist/actions/metadata/shared.d.ts +6 -0
- package/dist/actions/metadata/shared.d.ts.map +1 -0
- package/dist/actions/metadata/shared.js +11 -0
- package/dist/actions/metadata/shared.js.map +1 -0
- package/dist/actions/metadata/types.d.ts +38 -0
- package/dist/actions/metadata/types.d.ts.map +1 -0
- package/dist/actions/metadata/types.js +3 -0
- package/dist/actions/metadata/types.js.map +1 -0
- package/dist/actions/scheduled-job/create.action.d.ts +5 -0
- package/dist/actions/scheduled-job/create.action.d.ts.map +1 -0
- package/dist/actions/scheduled-job/create.action.js +53 -0
- package/dist/actions/scheduled-job/create.action.js.map +1 -0
- package/dist/actions/scheduled-job/delete.action.d.ts +15 -0
- package/dist/actions/scheduled-job/delete.action.d.ts.map +1 -0
- package/dist/actions/scheduled-job/delete.action.js +42 -0
- package/dist/actions/scheduled-job/delete.action.js.map +1 -0
- package/dist/actions/scheduled-job/get.action.d.ts +7 -0
- package/dist/actions/scheduled-job/get.action.d.ts.map +1 -0
- package/dist/actions/scheduled-job/get.action.js +23 -0
- package/dist/actions/scheduled-job/get.action.js.map +1 -0
- package/dist/actions/scheduled-job/index.d.ts +7 -0
- package/dist/actions/scheduled-job/index.d.ts.map +1 -0
- package/dist/actions/scheduled-job/index.js +29 -0
- package/dist/actions/scheduled-job/index.js.map +1 -0
- package/dist/actions/scheduled-job/list.action.d.ts +5 -0
- package/dist/actions/scheduled-job/list.action.d.ts.map +1 -0
- package/dist/actions/scheduled-job/list.action.js +18 -0
- package/dist/actions/scheduled-job/list.action.js.map +1 -0
- package/dist/actions/scheduled-job/shared.d.ts +30 -0
- package/dist/actions/scheduled-job/shared.d.ts.map +1 -0
- package/dist/actions/scheduled-job/shared.js +129 -0
- package/dist/actions/scheduled-job/shared.js.map +1 -0
- package/dist/actions/scheduled-job/types.d.ts +23 -0
- package/dist/actions/scheduled-job/types.d.ts.map +1 -0
- package/dist/actions/scheduled-job/types.js +3 -0
- package/dist/actions/scheduled-job/types.js.map +1 -0
- package/dist/actions/scheduled-job/update.action.d.ts +5 -0
- package/dist/actions/scheduled-job/update.action.d.ts.map +1 -0
- package/dist/actions/scheduled-job/update.action.js +64 -0
- package/dist/actions/scheduled-job/update.action.js.map +1 -0
- package/dist/actions/scheduled-job.action.d.ts +73 -0
- package/dist/actions/scheduled-job.action.d.ts.map +1 -0
- package/dist/actions/scheduled-job.action.js +355 -0
- package/dist/actions/scheduled-job.action.js.map +1 -0
- package/dist/actions/setup.action.js +1 -1
- package/dist/actions/setup.action.js.map +1 -1
- package/dist/actions/sync/index.d.ts +4 -0
- package/dist/actions/sync/index.d.ts.map +1 -0
- package/dist/actions/sync/index.js +23 -0
- package/dist/actions/sync/index.js.map +1 -0
- package/dist/actions/sync/run-flow.action.d.ts +8 -0
- package/dist/actions/sync/run-flow.action.d.ts.map +1 -0
- package/dist/actions/sync/run-flow.action.js +81 -0
- package/dist/actions/sync/run-flow.action.js.map +1 -0
- package/dist/actions/sync/run-job.action.d.ts +11 -0
- package/dist/actions/sync/run-job.action.d.ts.map +1 -0
- package/dist/actions/sync/run-job.action.js +75 -0
- package/dist/actions/sync/run-job.action.js.map +1 -0
- package/dist/actions/sync/types.d.ts +41 -0
- package/dist/actions/sync/types.d.ts.map +1 -0
- package/dist/actions/sync/types.js +3 -0
- package/dist/actions/sync/types.js.map +1 -0
- package/dist/actions/sync.action.d.ts +8 -47
- package/dist/actions/sync.action.d.ts.map +1 -1
- package/dist/actions/sync.action.js +30 -150
- package/dist/actions/sync.action.js.map +1 -1
- package/dist/actions/utils/action-names.d.ts +23 -4
- package/dist/actions/utils/action-names.d.ts.map +1 -1
- package/dist/actions/utils/action-names.js +23 -4
- package/dist/actions/utils/action-names.js.map +1 -1
- package/dist/actions/utils/define-action.d.ts +36 -0
- package/dist/actions/utils/define-action.d.ts.map +1 -0
- package/dist/actions/utils/define-action.js +43 -0
- package/dist/actions/utils/define-action.js.map +1 -0
- package/dist/actions/utils/errors.d.ts +54 -8
- package/dist/actions/utils/errors.d.ts.map +1 -1
- package/dist/actions/utils/errors.js +104 -14
- package/dist/actions/utils/errors.js.map +1 -1
- package/dist/actions/utils/helpers.d.ts.map +1 -1
- package/dist/actions/utils/helpers.js +2 -1
- package/dist/actions/utils/helpers.js.map +1 -1
- package/dist/actions/utils/metrics.d.ts +12 -0
- package/dist/actions/utils/metrics.d.ts.map +1 -0
- package/dist/actions/utils/metrics.js +12 -0
- package/dist/actions/utils/metrics.js.map +1 -0
- package/dist/actions/utils/middleware.d.ts +39 -0
- package/dist/actions/utils/middleware.d.ts.map +1 -0
- package/dist/actions/utils/middleware.js +85 -0
- package/dist/actions/utils/middleware.js.map +1 -0
- package/dist/actions/utils/types.d.ts +18 -6
- package/dist/actions/utils/types.d.ts.map +1 -1
- package/dist/adapters/base-adapter-handler.d.ts +10 -0
- package/dist/adapters/base-adapter-handler.d.ts.map +1 -1
- package/dist/adapters/base-adapter-handler.js +30 -33
- package/dist/adapters/base-adapter-handler.js.map +1 -1
- package/dist/browser.d.ts +2 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +3 -1
- package/dist/browser.js.map +1 -1
- package/dist/clients/integration-config.client.d.ts +21 -0
- package/dist/clients/integration-config.client.d.ts.map +1 -0
- package/dist/clients/integration-config.client.js +44 -0
- package/dist/clients/integration-config.client.js.map +1 -0
- package/dist/context.d.ts +18 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +21 -5
- package/dist/context.js.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/data-flow-spec.interface.d.ts +14 -21
- package/dist/interfaces/data-flow-spec.interface.d.ts.map +1 -1
- package/dist/interfaces/data-flow-spec.interface.js +10 -26
- package/dist/interfaces/data-flow-spec.interface.js.map +1 -1
- package/dist/interfaces/integration-capabilities.interface.d.ts +2 -2
- package/dist/interfaces/scheduled-job.interface.d.ts +40 -0
- package/dist/interfaces/scheduled-job.interface.d.ts.map +1 -0
- package/dist/interfaces/scheduled-job.interface.js +38 -0
- package/dist/interfaces/scheduled-job.interface.js.map +1 -0
- package/dist/services/dataflow.service.d.ts +13 -6
- package/dist/services/dataflow.service.d.ts.map +1 -1
- package/dist/services/dataflow.service.js +34 -57
- package/dist/services/dataflow.service.js.map +1 -1
- package/dist/services/sync-runner.d.ts +7 -0
- package/dist/services/sync-runner.d.ts.map +1 -1
- package/dist/services/sync-runner.js +38 -45
- package/dist/services/sync-runner.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/artifact-builder.d.ts +41 -16
- package/dist/utils/artifact-builder.d.ts.map +1 -1
- package/dist/utils/artifact-builder.js +93 -18
- package/dist/utils/artifact-builder.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration-level scheduled jobs (Phase 2). A job drives an ES scheduled
|
|
4
|
+
* webhook that fires `sync.run-job`, which runs the job's `flow_ids` in order.
|
|
5
|
+
* Job config lives in the `config` JSONB column on `tenant_integration` (IS),
|
|
6
|
+
* which the SDK treats as `IntegrationConfig`.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.JobIntervalUnit = void 0;
|
|
10
|
+
exports.asIntegrationConfig = asIntegrationConfig;
|
|
11
|
+
/** Interval unit for a scheduled job. */
|
|
12
|
+
exports.JobIntervalUnit = {
|
|
13
|
+
MINUTES: 'minutes',
|
|
14
|
+
HOURS: 'hours',
|
|
15
|
+
};
|
|
16
|
+
function isScheduledJob(value) {
|
|
17
|
+
if (!value || typeof value !== 'object')
|
|
18
|
+
return false;
|
|
19
|
+
const j = value;
|
|
20
|
+
return (typeof j.webhook_name === 'string' &&
|
|
21
|
+
typeof j.name === 'string' &&
|
|
22
|
+
typeof j.interval_value === 'number' &&
|
|
23
|
+
(j.interval_unit === exports.JobIntervalUnit.MINUTES || j.interval_unit === exports.JobIntervalUnit.HOURS) &&
|
|
24
|
+
Array.isArray(j.flow_ids) &&
|
|
25
|
+
j.flow_ids.every((id) => Number.isInteger(id)) &&
|
|
26
|
+
typeof j.enabled === 'boolean');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Narrow a loosely typed `config` JSONB value into an `IntegrationConfig`.
|
|
30
|
+
* Returns `{ scheduled_jobs: [] }` for null/garbage; drops malformed job entries.
|
|
31
|
+
*/
|
|
32
|
+
function asIntegrationConfig(value) {
|
|
33
|
+
const jobs = value === null || value === void 0 ? void 0 : value.scheduled_jobs;
|
|
34
|
+
if (!Array.isArray(jobs))
|
|
35
|
+
return { scheduled_jobs: [] };
|
|
36
|
+
return { scheduled_jobs: jobs.filter(isScheduledJob) };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=scheduled-job.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-job.interface.js","sourceRoot":"","sources":["../../src/interfaces/scheduled-job.interface.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAmDH,kDAMC;AAvDD,yCAAyC;AAC5B,QAAA,eAAe,GAAG;IAC7B,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACN,CAAC;AA2BX,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,OAAO,CACL,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;QAClC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,cAAc,KAAK,QAAQ;QACpC,CAAC,CAAC,CAAC,aAAa,KAAK,uBAAe,CAAC,OAAO,IAAI,CAAC,CAAC,aAAa,KAAK,uBAAe,CAAC,KAAK,CAAC;QAC1F,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAC/B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,KAAiD;IAEjD,MAAM,IAAI,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACxD,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -22,15 +22,22 @@ export declare class DataFlowService {
|
|
|
22
22
|
update(id: number, patch: UpdateDataFlowPatch): Promise<DataFlow>;
|
|
23
23
|
delete(id: number): Promise<void>;
|
|
24
24
|
/**
|
|
25
|
-
* Idempotent activate.
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
25
|
+
* Idempotent activate.
|
|
26
|
+
*
|
|
27
|
+
* Realtime flows (those carrying a `sync_config`) get a triggered action,
|
|
28
|
+
* two-phase fail-closed:
|
|
29
|
+
* 1. Upsert the triggered action under a deterministic name.
|
|
30
|
+
* 2. PATCH `triggerConfig.sync_config` (records the artifact), then mark ACTIVE.
|
|
31
|
+
* If step 2 fails the artifact is compensatingly deleted.
|
|
32
|
+
*
|
|
33
|
+
* Batch-only flows (no `sync_config` — they're driven by integration-level
|
|
34
|
+
* scheduled jobs, not a per-flow artifact) are just marked ACTIVE on IS.
|
|
29
35
|
*/
|
|
30
36
|
activate(id: number, ctx: IntegrationContext): Promise<DataFlow>;
|
|
31
37
|
/**
|
|
32
|
-
* Inverse of `activate`.
|
|
33
|
-
*
|
|
38
|
+
* Inverse of `activate`. For a realtime flow, deletes the triggered action
|
|
39
|
+
* (404-tolerant) and clears the artifact reference from `sync_config`. Always
|
|
40
|
+
* transitions IS to INACTIVE.
|
|
34
41
|
*/
|
|
35
42
|
deactivate(id: number, ctx: IntegrationContext): Promise<DataFlow>;
|
|
36
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataflow.service.d.ts","sourceRoot":"","sources":["../../src/services/dataflow.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"dataflow.service.d.ts","sourceRoot":"","sources":["../../src/services/dataflow.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,wCAAwC,CAAC;AAUhD,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAE7C,gBAAgB,CAAC,IAAI,EAAE;QAC3B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAajB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIjD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,UAAU,CAAC,MAAM,EAAE;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAajB,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAIhE,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIjE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC;;;;;;;;;;;OAWG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyDtE;;;;OAIG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;CA4BzE"}
|
|
@@ -13,18 +13,10 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.DataFlowService = void 0;
|
|
15
15
|
const pulse_solution_services_1 = require("@skedulo/pulse-solution-services");
|
|
16
|
-
const action_names_1 = require("../actions/utils/action-names");
|
|
17
16
|
const errors_1 = require("../actions/utils/errors");
|
|
18
17
|
const constants_1 = require("../constants");
|
|
19
18
|
const data_flow_spec_interface_1 = require("../interfaces/data-flow-spec.interface");
|
|
20
19
|
const artifact_builder_1 = require("../utils/artifact-builder");
|
|
21
|
-
/**
|
|
22
|
-
* The `{{ SKEDULO_API_URL }}` token is substituted with the tenant API host by the
|
|
23
|
-
* platform when the artifact fires.
|
|
24
|
-
*/
|
|
25
|
-
function functionCallbackUrl(integrationType) {
|
|
26
|
-
return `{{ SKEDULO_API_URL }}/function/${integrationType}/${integrationType}`;
|
|
27
|
-
}
|
|
28
20
|
class DataFlowService {
|
|
29
21
|
constructor(client) {
|
|
30
22
|
this.client = client;
|
|
@@ -73,20 +65,29 @@ class DataFlowService {
|
|
|
73
65
|
await this.client.delete(id);
|
|
74
66
|
}
|
|
75
67
|
/**
|
|
76
|
-
* Idempotent activate.
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
68
|
+
* Idempotent activate.
|
|
69
|
+
*
|
|
70
|
+
* Realtime flows (those carrying a `sync_config`) get a triggered action,
|
|
71
|
+
* two-phase fail-closed:
|
|
72
|
+
* 1. Upsert the triggered action under a deterministic name.
|
|
73
|
+
* 2. PATCH `triggerConfig.sync_config` (records the artifact), then mark ACTIVE.
|
|
74
|
+
* If step 2 fails the artifact is compensatingly deleted.
|
|
75
|
+
*
|
|
76
|
+
* Batch-only flows (no `sync_config` — they're driven by integration-level
|
|
77
|
+
* scheduled jobs, not a per-flow artifact) are just marked ACTIVE on IS.
|
|
80
78
|
*/
|
|
81
79
|
async activate(id, ctx) {
|
|
82
|
-
var _a
|
|
80
|
+
var _a;
|
|
83
81
|
const flow = await this.client.getById(id);
|
|
84
82
|
if (!flow) {
|
|
85
|
-
throw new errors_1.
|
|
83
|
+
throw new errors_1.NotFoundError('FLOW_NOT_FOUND', `Flow ${id} not found`);
|
|
86
84
|
}
|
|
87
85
|
const sc = (0, data_flow_spec_interface_1.asSyncConfig)((_a = flow.triggerConfig) !== null && _a !== void 0 ? _a : null);
|
|
86
|
+
// Batch-only flow: no artifact to provision — scheduled jobs drive these.
|
|
88
87
|
if (!sc) {
|
|
89
|
-
|
|
88
|
+
await this.client.activate(id);
|
|
89
|
+
const updated = await this.client.getById(id);
|
|
90
|
+
return updated !== null && updated !== void 0 ? updated : flow;
|
|
90
91
|
}
|
|
91
92
|
if (sc.trigger_name) {
|
|
92
93
|
// Already provisioned — just (re)activate on IS.
|
|
@@ -95,42 +96,20 @@ class DataFlowService {
|
|
|
95
96
|
return updated !== null && updated !== void 0 ? updated : flow;
|
|
96
97
|
}
|
|
97
98
|
const name = (0, artifact_builder_1.buildArtifactName)(flow, ctx.integrationType);
|
|
98
|
-
const url = functionCallbackUrl(ctx.integrationType);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
artifactType = pulse_solution_services_1.ArtifactType.WEBHOOK;
|
|
108
|
-
artifact = (0, artifact_builder_1.buildScheduledWebhookArtifact)({
|
|
109
|
-
name,
|
|
110
|
-
url,
|
|
111
|
-
cron: (0, artifact_builder_1.intervalMinutesToCron)((_b = sc.interval_minutes) !== null && _b !== void 0 ? _b : 0),
|
|
112
|
-
action: isOutbound ? action_names_1.ACTIONS.sync.push : action_names_1.ACTIONS.sync.scheduledPull,
|
|
113
|
-
dataFlowId: flow.id,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
kind = data_flow_spec_interface_1.TriggerType.TRIGGERED_ACTION;
|
|
118
|
-
artifactType = pulse_solution_services_1.ArtifactType.TRIGGERED_ACTION;
|
|
119
|
-
artifact = (0, artifact_builder_1.buildTriggeredActionArtifact)({
|
|
120
|
-
name,
|
|
121
|
-
url,
|
|
122
|
-
schemaName: flow.sourceObject,
|
|
123
|
-
query: (0, artifact_builder_1.buildSkeduloQuery)(flow),
|
|
124
|
-
dataFlowId: flow.id,
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
const client = ctx.newArtifactClient(artifactType);
|
|
99
|
+
const url = (0, artifact_builder_1.functionCallbackUrl)(ctx.integrationType);
|
|
100
|
+
const artifact = (0, artifact_builder_1.buildTriggeredActionArtifact)({
|
|
101
|
+
name,
|
|
102
|
+
url,
|
|
103
|
+
schemaName: flow.sourceObject,
|
|
104
|
+
query: (0, artifact_builder_1.buildSkeduloQuery)(flow),
|
|
105
|
+
dataFlowId: flow.id,
|
|
106
|
+
});
|
|
107
|
+
const client = ctx.newArtifactClient(pulse_solution_services_1.ArtifactType.TRIGGERED_ACTION);
|
|
128
108
|
await (0, artifact_builder_1.upsertArtifact)(client, name, artifact);
|
|
129
109
|
try {
|
|
130
|
-
// Clean replacement — never merge legacy top-level keys back in.
|
|
131
|
-
// write is also the lazy migration of pre-rename rows.
|
|
110
|
+
// Clean replacement — never merge legacy top-level keys back in.
|
|
132
111
|
const nextTriggerConfig = {
|
|
133
|
-
sync_config: Object.assign(Object.assign({}, sc), { trigger_name: name, trigger_type:
|
|
112
|
+
sync_config: Object.assign(Object.assign({}, sc), { trigger_name: name, trigger_type: data_flow_spec_interface_1.TriggerType.TRIGGERED_ACTION }),
|
|
134
113
|
};
|
|
135
114
|
await this.client.update(id, {
|
|
136
115
|
triggerConfig: nextTriggerConfig,
|
|
@@ -141,7 +120,7 @@ class DataFlowService {
|
|
|
141
120
|
try {
|
|
142
121
|
await (0, artifact_builder_1.deleteArtifactIfExists)(client, name);
|
|
143
122
|
}
|
|
144
|
-
catch (
|
|
123
|
+
catch (_b) {
|
|
145
124
|
// best-effort compensating delete; surface the original error
|
|
146
125
|
}
|
|
147
126
|
throw err;
|
|
@@ -150,26 +129,24 @@ class DataFlowService {
|
|
|
150
129
|
return updated !== null && updated !== void 0 ? updated : flow;
|
|
151
130
|
}
|
|
152
131
|
/**
|
|
153
|
-
* Inverse of `activate`.
|
|
154
|
-
*
|
|
132
|
+
* Inverse of `activate`. For a realtime flow, deletes the triggered action
|
|
133
|
+
* (404-tolerant) and clears the artifact reference from `sync_config`. Always
|
|
134
|
+
* transitions IS to INACTIVE.
|
|
155
135
|
*/
|
|
156
136
|
async deactivate(id, ctx) {
|
|
157
137
|
var _a;
|
|
158
138
|
const flow = await this.client.getById(id);
|
|
159
139
|
if (!flow) {
|
|
160
|
-
throw new errors_1.
|
|
140
|
+
throw new errors_1.NotFoundError('FLOW_NOT_FOUND', `Flow ${id} not found`);
|
|
161
141
|
}
|
|
162
142
|
const sc = (0, data_flow_spec_interface_1.asSyncConfig)((_a = flow.triggerConfig) !== null && _a !== void 0 ? _a : null);
|
|
163
143
|
if (sc === null || sc === void 0 ? void 0 : sc.trigger_name) {
|
|
164
|
-
const
|
|
165
|
-
? pulse_solution_services_1.ArtifactType.WEBHOOK
|
|
166
|
-
: pulse_solution_services_1.ArtifactType.TRIGGERED_ACTION;
|
|
167
|
-
const client = ctx.newArtifactClient(artifactType);
|
|
144
|
+
const client = ctx.newArtifactClient(pulse_solution_services_1.ArtifactType.TRIGGERED_ACTION);
|
|
168
145
|
await (0, artifact_builder_1.deleteArtifactIfExists)(client, sc.trigger_name);
|
|
169
146
|
}
|
|
170
147
|
await this.client.deactivate(id);
|
|
171
148
|
if (sc) {
|
|
172
|
-
// Clean replacement: drop trigger_name/trigger_type, keep strategy
|
|
149
|
+
// Clean replacement: drop trigger_name/trigger_type, keep strategy.
|
|
173
150
|
const { trigger_name: _n, trigger_type: _t } = sc, rest = __rest(sc, ["trigger_name", "trigger_type"]);
|
|
174
151
|
void _n;
|
|
175
152
|
void _t;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataflow.service.js","sourceRoot":"","sources":["../../src/services/dataflow.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8EAAgE;AAQhE,
|
|
1
|
+
{"version":3,"file":"dataflow.service.js","sourceRoot":"","sources":["../../src/services/dataflow.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ export declare class SyncRunner {
|
|
|
18
18
|
run(args: {
|
|
19
19
|
flowId: number;
|
|
20
20
|
since: Date | null;
|
|
21
|
+
overrideSince?: Date | null;
|
|
21
22
|
sourceSystem?: string;
|
|
22
23
|
targetSystem?: string;
|
|
23
24
|
options?: SyncRunOptions;
|
|
@@ -26,6 +27,12 @@ export declare class SyncRunner {
|
|
|
26
27
|
event: MappedEvent;
|
|
27
28
|
options?: SyncRunOptions;
|
|
28
29
|
}, ctx: IntegrationContext): Promise<SyncResult[]>;
|
|
30
|
+
handleFlowEvent(args: {
|
|
31
|
+
flowId: number;
|
|
32
|
+
event: MappedEvent;
|
|
33
|
+
options?: SyncRunOptions;
|
|
34
|
+
}, ctx: IntegrationContext): Promise<SyncResult>;
|
|
35
|
+
private _processFlowEvent;
|
|
29
36
|
private _resolve;
|
|
30
37
|
}
|
|
31
38
|
//# sourceMappingURL=sync-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-runner.d.ts","sourceRoot":"","sources":["../../src/services/sync-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-runner.d.ts","sourceRoot":"","sources":["../../src/services/sync-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,4CAA4C,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAU/D,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW;CAI1D;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,UAAU,EAAE,MAAM;CAI/B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAI/B,QAAQ,CAAC,EAAE,eAAe;IAItC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAQ9C,GAAG,CACP,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;QAInB,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,cAAc,CAAC;KAC1B,EACD,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,WAAW,CAAC;IAgEjB,WAAW,CACf,IAAI,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,cAAc,CAAA;KAAE,EACtD,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BlB,eAAe,CACnB,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,cAAc,CAAA;KAAE,EACtE,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,UAAU,CAAC;YASR,iBAAiB;IAqB/B,OAAO,CAAC,QAAQ;CAejB"}
|
|
@@ -7,30 +7,9 @@ const external_id_sync_strategy_1 = require("./external-id-sync.strategy");
|
|
|
7
7
|
const id_mapping_sync_strategy_1 = require("./id-mapping-sync.strategy");
|
|
8
8
|
const id_mapping_service_1 = require("./id-mapping.service");
|
|
9
9
|
const sync_service_1 = require("./sync.service");
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
// - Adapter registration (keyed by system name, e.g. 'hubspot', 'skedulo')
|
|
14
|
-
// - Flow fetch by ID or by filter (for event-driven paths)
|
|
15
|
-
// - Adapter resolution from flow.sourceSystem / flow.targetSystem
|
|
16
|
-
// - Strategy creation based on SyncRunOptions.lookupStrategy
|
|
17
|
-
// - Delegation to SyncService for the actual pipeline
|
|
18
|
-
//
|
|
19
|
-
// Integration packages register their adapters at startup, then call
|
|
20
|
-
// run() or handleEvent() with minimal info (flowId or MappedEvent).
|
|
21
|
-
//
|
|
22
|
-
// runner = new SyncRunner()
|
|
23
|
-
// runner.register('hubspot', new HubSpotAdapter())
|
|
24
|
-
// runner.register('skedulo', new SkeduloAdapter())
|
|
25
|
-
//
|
|
26
|
-
// // Scheduled / Run Now (ExternalId strategy — default):
|
|
27
|
-
// await runner.run({ flowId, since }, ctx)
|
|
28
|
-
//
|
|
29
|
-
// // Scheduled / Run Now (IdMapping strategy):
|
|
30
|
-
// await runner.run({ flowId, since, options: { lookupStrategy: 'idMapping' } }, ctx)
|
|
31
|
-
//
|
|
32
|
-
// // Event-driven:
|
|
33
|
-
// await runner.handleEvent({ event, options: { lookupStrategy: 'idMapping' } }, ctx)
|
|
10
|
+
// High-level entry point: resolves adapters and a strategy from the flow, then
|
|
11
|
+
// delegates to SyncService. `run()` drives batch/scheduled syncs; `handleEvent`
|
|
12
|
+
// and `handleFlowEvent` drive event-driven ones.
|
|
34
13
|
class AdapterRoleError extends Error {
|
|
35
14
|
constructor(systemName, requiredRole) {
|
|
36
15
|
super(`adapter "${systemName}" does not support role: "${requiredRole}"`);
|
|
@@ -69,10 +48,11 @@ class SyncRunner {
|
|
|
69
48
|
const source = this._resolve((_b = (_a = flow.sourceSystem) !== null && _a !== void 0 ? _a : args.sourceSystem) !== null && _b !== void 0 ? _b : null, constants_1.AdapterRole.SOURCE);
|
|
70
49
|
const target = this._resolve((_d = (_c = flow.targetSystem) !== null && _c !== void 0 ? _c : args.targetSystem) !== null && _d !== void 0 ? _d : null, constants_1.AdapterRole.TARGET);
|
|
71
50
|
const strategy = createSyncStrategy((_e = args.options) !== null && _e !== void 0 ? _e : {}, ctx);
|
|
72
|
-
// Cursor computation:
|
|
73
|
-
//
|
|
51
|
+
// Cursor computation: an explicit overrideSince (manual backfill) wins;
|
|
52
|
+
// otherwise prefer flow.lastRunAt over caller-supplied since, and when
|
|
53
|
+
// lastRunAt is set args.since is ignored entirely.
|
|
74
54
|
const runStartedAt = new Date();
|
|
75
|
-
const lastRunAt = (_f = flow.lastRunAt) !== null && _f !== void 0 ? _f : args.since;
|
|
55
|
+
const lastRunAt = args.overrideSince !== undefined ? args.overrideSince : ((_f = flow.lastRunAt) !== null && _f !== void 0 ? _f : args.since);
|
|
76
56
|
const overlapMs = (_h = (_g = args.options) === null || _g === void 0 ? void 0 : _g.cursorOverlapMs) !== null && _h !== void 0 ? _h : 60000;
|
|
77
57
|
const effectiveCursor = lastRunAt ? new Date(lastRunAt.getTime() - overlapMs) : null; // null = full sync (no prior run)
|
|
78
58
|
const result = await new sync_service_1.SyncService(source, target, strategy).run({ flow, since: effectiveCursor }, ctx);
|
|
@@ -106,7 +86,6 @@ class SyncRunner {
|
|
|
106
86
|
// executionOrder (nulls last), and processes each sequentially so that a failure
|
|
107
87
|
// in one flow doesn't prevent the others from running.
|
|
108
88
|
async handleEvent(args, ctx) {
|
|
109
|
-
var _a, _b;
|
|
110
89
|
const { event } = args;
|
|
111
90
|
const flows = await ctx.dataFlowService.getFlowsByFilter({
|
|
112
91
|
integrationType: event.integrationType,
|
|
@@ -119,26 +98,40 @@ class SyncRunner {
|
|
|
119
98
|
const sorted = [...flows].sort((a, b) => { var _a, _b; return ((_a = a.executionOrder) !== null && _a !== void 0 ? _a : Infinity) - ((_b = b.executionOrder) !== null && _b !== void 0 ? _b : Infinity); });
|
|
120
99
|
const results = [];
|
|
121
100
|
for (const flow of sorted) {
|
|
122
|
-
|
|
123
|
-
const target = this._resolve((_a = flow.targetSystem) !== null && _a !== void 0 ? _a : null, constants_1.AdapterRole.TARGET);
|
|
124
|
-
const strategy = createSyncStrategy((_b = args.options) !== null && _b !== void 0 ? _b : {}, ctx);
|
|
125
|
-
const result = await new sync_service_1.SyncService(null, target, strategy).handleEvent({ event, flow }, ctx);
|
|
126
|
-
results.push(result);
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
if (err instanceof AdapterNotRegisteredError || err instanceof AdapterRoleError) {
|
|
130
|
-
ctx.logger.error(`sync_runner_event: ${err.message} flowId=${flow.id}`);
|
|
131
|
-
results.push({ status: 'failed', recordsProcessed: 0, error: err.message });
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
135
|
-
ctx.logger.error(`sync_runner_event: flowId=${flow.id} ${msg}`);
|
|
136
|
-
results.push({ status: 'failed', recordsProcessed: 0, error: msg });
|
|
137
|
-
}
|
|
138
|
-
}
|
|
101
|
+
results.push(await this._processFlowEvent(flow, event, args.options, ctx));
|
|
139
102
|
}
|
|
140
103
|
return results;
|
|
141
104
|
}
|
|
105
|
+
// Handle an inbound event for a single, already-known flow. Used by the
|
|
106
|
+
// outbound (Skedulo→vendor) triggered-action path, where each flow has its own
|
|
107
|
+
// ElasticServer triggered action carrying its `dataFlowId` — so we process only
|
|
108
|
+
// that flow rather than fanning out to every flow matching the object (which
|
|
109
|
+
// would double-process when multiple flows target the same Skedulo object).
|
|
110
|
+
async handleFlowEvent(args, ctx) {
|
|
111
|
+
const flow = await ctx.dataFlowService.getFlowById(args.flowId);
|
|
112
|
+
if (!flow) {
|
|
113
|
+
ctx.logger.warn(`sync_runner_event: flow ${args.flowId} not found`);
|
|
114
|
+
return { status: 'skipped', recordsProcessed: 0, reason: 'no_data_flow' };
|
|
115
|
+
}
|
|
116
|
+
return this._processFlowEvent(flow, args.event, args.options, ctx);
|
|
117
|
+
}
|
|
118
|
+
async _processFlowEvent(flow, event, options, ctx) {
|
|
119
|
+
var _a;
|
|
120
|
+
try {
|
|
121
|
+
const target = this._resolve((_a = flow.targetSystem) !== null && _a !== void 0 ? _a : null, constants_1.AdapterRole.TARGET);
|
|
122
|
+
const strategy = createSyncStrategy(options !== null && options !== void 0 ? options : {}, ctx);
|
|
123
|
+
return await new sync_service_1.SyncService(null, target, strategy).handleEvent({ event, flow }, ctx);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
if (err instanceof AdapterNotRegisteredError || err instanceof AdapterRoleError) {
|
|
127
|
+
ctx.logger.error(`sync_runner_event: ${err.message} flowId=${flow.id}`);
|
|
128
|
+
return { status: 'failed', recordsProcessed: 0, error: err.message };
|
|
129
|
+
}
|
|
130
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
131
|
+
ctx.logger.error(`sync_runner_event: flowId=${flow.id} ${msg}`);
|
|
132
|
+
return { status: 'failed', recordsProcessed: 0, error: msg };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
142
135
|
_resolve(systemName, role) {
|
|
143
136
|
var _a, _b;
|
|
144
137
|
if (!systemName)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-runner.js","sourceRoot":"","sources":["../../src/services/sync-runner.ts"],"names":[],"mappings":";;;AACA,4CAA2D;
|
|
1
|
+
{"version":3,"file":"sync-runner.js","sourceRoot":"","sources":["../../src/services/sync-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export type { FilterOperator, FilterOperatorOption, FilterRule, FilterSpec, } fr
|
|
|
4
4
|
export { FILTER_OPERATORS } from './interfaces/filter.interface';
|
|
5
5
|
export type { DataFlow, SyncConfig, TriggerConfig } from './interfaces/data-flow-spec.interface';
|
|
6
6
|
export { asSyncConfig, SyncStrategy, TriggerType } from './interfaces/data-flow-spec.interface';
|
|
7
|
+
export type { ScheduledJob, IntegrationConfig } from './interfaces/scheduled-job.interface';
|
|
8
|
+
export { asIntegrationConfig, JobIntervalUnit } from './interfaces/scheduled-job.interface';
|
|
7
9
|
export type { MappedEvent } from './interfaces/mapped-event.interface';
|
|
8
10
|
export type { SyncResult, BatchResult, PreviewResult } from './interfaces/sync-result.interface';
|
|
9
11
|
export type { SampleFetcher } from './interfaces/sample-fetcher.interface';
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,UAAU,GACX,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAChG,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACvE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACjG,YAAY,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,YAAY,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,GACb,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,UAAU,GACX,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAChG,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5F,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACvE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACjG,YAAY,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,YAAY,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,GACb,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC"}
|
package/dist/types.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TriggerType = exports.SyncStrategy = exports.asSyncConfig = exports.FILTER_OPERATORS = void 0;
|
|
3
|
+
exports.JobIntervalUnit = exports.asIntegrationConfig = exports.TriggerType = exports.SyncStrategy = exports.asSyncConfig = exports.FILTER_OPERATORS = void 0;
|
|
4
4
|
var filter_interface_1 = require("./interfaces/filter.interface");
|
|
5
5
|
Object.defineProperty(exports, "FILTER_OPERATORS", { enumerable: true, get: function () { return filter_interface_1.FILTER_OPERATORS; } });
|
|
6
6
|
var data_flow_spec_interface_1 = require("./interfaces/data-flow-spec.interface");
|
|
7
7
|
Object.defineProperty(exports, "asSyncConfig", { enumerable: true, get: function () { return data_flow_spec_interface_1.asSyncConfig; } });
|
|
8
8
|
Object.defineProperty(exports, "SyncStrategy", { enumerable: true, get: function () { return data_flow_spec_interface_1.SyncStrategy; } });
|
|
9
9
|
Object.defineProperty(exports, "TriggerType", { enumerable: true, get: function () { return data_flow_spec_interface_1.TriggerType; } });
|
|
10
|
+
var scheduled_job_interface_1 = require("./interfaces/scheduled-job.interface");
|
|
11
|
+
Object.defineProperty(exports, "asIntegrationConfig", { enumerable: true, get: function () { return scheduled_job_interface_1.asIntegrationConfig; } });
|
|
12
|
+
Object.defineProperty(exports, "JobIntervalUnit", { enumerable: true, get: function () { return scheduled_job_interface_1.JobIntervalUnit; } });
|
|
10
13
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAQA,kEAAiE;AAAxD,oHAAA,gBAAgB,OAAA;AAEzB,kFAAgG;AAAvF,wHAAA,YAAY,OAAA;AAAE,wHAAA,YAAY,OAAA;AAAE,uHAAA,WAAW,OAAA"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAQA,kEAAiE;AAAxD,oHAAA,gBAAgB,OAAA;AAEzB,kFAAgG;AAAvF,wHAAA,YAAY,OAAA;AAAE,wHAAA,YAAY,OAAA;AAAE,uHAAA,WAAW,OAAA;AAEhD,gFAA4F;AAAnF,8HAAA,mBAAmB,OAAA;AAAE,0HAAA,eAAe,OAAA"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import type { ArtifactClient } from '@skedulo/pulse-solution-services';
|
|
2
2
|
import type { DataFlow } from '../interfaces/data-flow-spec.interface';
|
|
3
|
-
import {
|
|
3
|
+
import type { JobIntervalUnit } from '../interfaces/scheduled-job.interface';
|
|
4
|
+
/**
|
|
5
|
+
* Callback URL an artifact posts to. `{{ SKEDULO_API_URL }}` is substituted with
|
|
6
|
+
* the tenant API host by the platform when the artifact fires.
|
|
7
|
+
*/
|
|
8
|
+
export declare function functionCallbackUrl(integrationType: string): string;
|
|
4
9
|
/**
|
|
5
10
|
* Deterministic artifact name used as the idempotency key for the
|
|
6
11
|
* webhook / triggered action provisioned for a DataFlow.
|
|
7
12
|
*
|
|
8
13
|
* Format: `sked-int-${integrationType}-${sourceObject}-to-${targetObject}-flow${id}`
|
|
9
|
-
* Throws if the result exceeds
|
|
14
|
+
* Throws if the result exceeds 255 chars (we don't truncate, since collisions
|
|
10
15
|
* on the prefix would cause silent cross-flow overwrites).
|
|
11
16
|
*/
|
|
12
17
|
export declare function buildArtifactName(flow: DataFlow, integrationType: string): string;
|
|
@@ -15,10 +20,27 @@ export declare function buildArtifactName(flow: DataFlow, integrationType: strin
|
|
|
15
20
|
* - n <= 1 → `* * * * *` (every minute)
|
|
16
21
|
* - 1 < n < 60 → `*\/n * * * *`
|
|
17
22
|
* - 60 <= n, multiples of 60 → `0 *\/h * * *` (every h hours)
|
|
18
|
-
* - otherwise
|
|
19
|
-
*
|
|
23
|
+
* - otherwise (n >= 60 and not a multiple of 60) → throws, since `*\/n` is an
|
|
24
|
+
* invalid cron minute field for n > 59
|
|
20
25
|
*/
|
|
21
26
|
export declare function intervalMinutesToCron(intervalMinutes: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* Convert a scheduled job's `{ interval_value, interval_unit }` into minutes,
|
|
29
|
+
* validating the bounds (minutes 1–60, hours 1–24). Throws `InvalidInputError`
|
|
30
|
+
* on out-of-range or non-integer values. `hours` → ×60 (maps onto
|
|
31
|
+
* `intervalMinutesToCron`, which requires multiples of 60 for hourly crons).
|
|
32
|
+
*/
|
|
33
|
+
export declare function jobIntervalToMinutes(args: {
|
|
34
|
+
interval_value: number;
|
|
35
|
+
interval_unit: JobIntervalUnit;
|
|
36
|
+
}): number;
|
|
37
|
+
/**
|
|
38
|
+
* Deterministic artifact name for a scheduled job — this IS the job's
|
|
39
|
+
* `webhook_name`. Derived from the job's display name:
|
|
40
|
+
* `sked-int-${integrationType}-job-${slug(name)}`. Throws on overflow (>200) or
|
|
41
|
+
* a name that slugs to empty.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildJobArtifactName(integrationType: string, jobName: string): string;
|
|
22
44
|
/**
|
|
23
45
|
* GraphQL selection-set fragment for the triggered action's `action.query`.
|
|
24
46
|
* ES executes this against the Skedulo schema and POSTs the result as the
|
|
@@ -26,15 +48,17 @@ export declare function intervalMinutesToCron(intervalMinutes: number): string;
|
|
|
26
48
|
* `UID` is always included since we use it as the record identifier.
|
|
27
49
|
*/
|
|
28
50
|
export declare function buildSkeduloQuery(flow: DataFlow): string;
|
|
29
|
-
export interface
|
|
30
|
-
name
|
|
51
|
+
export interface BuildJobWebhookOpts {
|
|
52
|
+
/** The job's `webhook_name` — used as the artifact name and the job-id header. */
|
|
53
|
+
webhookName: string;
|
|
31
54
|
url: string;
|
|
32
55
|
cron: string;
|
|
33
|
-
/** Value placed on the dispatcher action header so the function knows which action to run. */
|
|
34
|
-
action: typeof ACTIONS.sync.push | typeof ACTIONS.sync.scheduledPull;
|
|
35
|
-
dataFlowId: number;
|
|
36
56
|
}
|
|
37
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Scheduled webhook for an integration-level job. Fires `sync.run-job` and
|
|
59
|
+
* carries the job's `webhook_name` so the handler can load it from config.
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildJobWebhookArtifact(opts: BuildJobWebhookOpts): {
|
|
38
62
|
name: string;
|
|
39
63
|
metadata: {
|
|
40
64
|
type: string;
|
|
@@ -45,8 +69,8 @@ export declare function buildScheduledWebhookArtifact(opts: BuildScheduledWebhoo
|
|
|
45
69
|
cron: string;
|
|
46
70
|
headers: {
|
|
47
71
|
Authorization: string;
|
|
48
|
-
"sked-integration-action": "sync.
|
|
49
|
-
|
|
72
|
+
"sked-integration-action": "sync.run-job";
|
|
73
|
+
"sked-scheduled-job-name": string;
|
|
50
74
|
};
|
|
51
75
|
};
|
|
52
76
|
};
|
|
@@ -76,15 +100,16 @@ export declare function buildTriggeredActionArtifact(opts: BuildTriggeredActionO
|
|
|
76
100
|
headers: {
|
|
77
101
|
Authorization: string;
|
|
78
102
|
"sked-integration-action": "event.on-skedulo";
|
|
79
|
-
|
|
103
|
+
"sked-data-flow-id": string;
|
|
80
104
|
};
|
|
81
105
|
query: string;
|
|
82
106
|
};
|
|
83
107
|
};
|
|
84
108
|
/**
|
|
85
|
-
* Idempotent upsert: try `get` then `update`;
|
|
86
|
-
*
|
|
87
|
-
* "create" and "replace"
|
|
109
|
+
* Idempotent upsert: try `get` then `update`; fall back to `create` only when
|
|
110
|
+
* `get` reports a 404 (not-found). Other errors (auth/validation/5xx) propagate.
|
|
111
|
+
* The PSS artifact API is name-keyed, so this collapses "create" and "replace"
|
|
112
|
+
* into a single safe call.
|
|
88
113
|
*/
|
|
89
114
|
export declare function upsertArtifact(client: ArtifactClient, name: string, artifact: unknown): Promise<void>;
|
|
90
115
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-builder.d.ts","sourceRoot":"","sources":["../../src/utils/artifact-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"artifact-builder.d.ts","sourceRoot":"","sources":["../../src/utils/artifact-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAmB7E;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEnE;AASD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAajF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAUrE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,eAAe,CAAC;CAChC,GAAG,MAAM,CAkBT;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAerF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAUxD;AAMD,MAAM,WAAW,mBAAmB;IAClC,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB;;;;;;;;;;;;;;;EAehE;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,wBAAwB;;;;;;;;;;;;;;;;;;;;;EAqB1E;AAID;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhG"}
|