@skedulo/integration-sdk 0.3.4 → 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/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 +29 -162
- package/dist/actions/sync.action.js.map +1 -1
- package/dist/actions/utils/action-names.d.ts +19 -6
- package/dist/actions/utils/action-names.d.ts.map +1 -1
- package/dist/actions/utils/action-names.js +19 -6
- 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 +5 -4
- 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 +18 -34
- 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 +1 -0
- package/dist/services/sync-runner.d.ts.map +1 -1
- package/dist/services/sync-runner.js +7 -27
- 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 +40 -15
- package/dist/utils/artifact-builder.d.ts.map +1 -1
- package/dist/utils/artifact-builder.js +92 -17
- package/dist/utils/artifact-builder.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeScheduledJobUpdateAction = makeScheduledJobUpdateAction;
|
|
4
|
+
const artifact_builder_1 = require("../../utils/artifact-builder");
|
|
5
|
+
const helpers_1 = require("../../utils/helpers");
|
|
6
|
+
const action_names_1 = require("../utils/action-names");
|
|
7
|
+
const errors_1 = require("../utils/errors");
|
|
8
|
+
const shared_1 = require("./shared");
|
|
9
|
+
function makeScheduledJobUpdateAction(deps) {
|
|
10
|
+
return {
|
|
11
|
+
name: action_names_1.ACTIONS.scheduledJob.update,
|
|
12
|
+
parseInput(raw) {
|
|
13
|
+
const obj = (0, shared_1.asRecord)(raw);
|
|
14
|
+
const input = { webhook_name: (0, shared_1.parseWebhookName)(raw) };
|
|
15
|
+
if (obj.name !== undefined)
|
|
16
|
+
input.name = (0, shared_1.parseName)(obj.name);
|
|
17
|
+
if (obj.interval_value !== undefined) {
|
|
18
|
+
if (typeof obj.interval_value !== 'number') {
|
|
19
|
+
throw new errors_1.InvalidInputError('interval_value must be a number');
|
|
20
|
+
}
|
|
21
|
+
input.interval_value = obj.interval_value;
|
|
22
|
+
}
|
|
23
|
+
if (obj.interval_unit !== undefined)
|
|
24
|
+
input.interval_unit = (0, shared_1.parseIntervalUnit)(obj.interval_unit);
|
|
25
|
+
if (obj.flow_ids !== undefined)
|
|
26
|
+
input.flow_ids = (0, shared_1.parseFlowIds)(obj.flow_ids);
|
|
27
|
+
if (obj.enabled !== undefined)
|
|
28
|
+
input.enabled = Boolean(obj.enabled);
|
|
29
|
+
return input;
|
|
30
|
+
},
|
|
31
|
+
async handler(input, ctx) {
|
|
32
|
+
var _a, _b, _c, _d, _e;
|
|
33
|
+
if (!(0, helpers_1.isAdminRequest)(ctx.skedContext)) {
|
|
34
|
+
throw new errors_1.ForbiddenError('scheduled-job.update requires admin privileges');
|
|
35
|
+
}
|
|
36
|
+
const integrationType = deps.adapter.integrationType;
|
|
37
|
+
const prev = await (0, shared_1.readConfig)(ctx, integrationType);
|
|
38
|
+
const existing = prev.scheduled_jobs.find((j) => j.webhook_name === input.webhook_name);
|
|
39
|
+
if (!existing) {
|
|
40
|
+
throw new errors_1.NotFoundError('JOB_NOT_FOUND', `Scheduled job '${input.webhook_name}' not found`);
|
|
41
|
+
}
|
|
42
|
+
// webhook_name is immutable — only the mutable fields change.
|
|
43
|
+
const merged = {
|
|
44
|
+
webhook_name: existing.webhook_name,
|
|
45
|
+
name: (_a = input.name) !== null && _a !== void 0 ? _a : existing.name,
|
|
46
|
+
interval_value: (_b = input.interval_value) !== null && _b !== void 0 ? _b : existing.interval_value,
|
|
47
|
+
interval_unit: (_c = input.interval_unit) !== null && _c !== void 0 ? _c : existing.interval_unit,
|
|
48
|
+
flow_ids: (_d = input.flow_ids) !== null && _d !== void 0 ? _d : existing.flow_ids,
|
|
49
|
+
enabled: (_e = input.enabled) !== null && _e !== void 0 ? _e : existing.enabled,
|
|
50
|
+
};
|
|
51
|
+
(0, artifact_builder_1.jobIntervalToMinutes)(merged); // re-validate bounds after merge
|
|
52
|
+
const others = prev.scheduled_jobs.filter((j) => j.webhook_name !== input.webhook_name);
|
|
53
|
+
if (input.flow_ids !== undefined) {
|
|
54
|
+
await (0, shared_1.validateFlowIds)(ctx, integrationType, merged.flow_ids, others);
|
|
55
|
+
}
|
|
56
|
+
const next = {
|
|
57
|
+
scheduled_jobs: prev.scheduled_jobs.map((j) => j.webhook_name === merged.webhook_name ? merged : j),
|
|
58
|
+
};
|
|
59
|
+
await (0, shared_1.writeConfigThenArtifact)(ctx, integrationType, prev, next, merged);
|
|
60
|
+
return merged;
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=update.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.action.js","sourceRoot":"","sources":["../../../src/actions/scheduled-job/update.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { Adapter } from '../interfaces/adapter.interface';
|
|
2
|
+
import type { AdapterRegistry } from '../adapters/adapter-registry';
|
|
3
|
+
import type { BatchResult } from '../interfaces/sync-result.interface';
|
|
4
|
+
import { JobIntervalUnit, type ScheduledJob } from '../interfaces/scheduled-job.interface';
|
|
5
|
+
import type { Action } from './utils/types';
|
|
6
|
+
type JobDeps = {
|
|
7
|
+
adapter: Adapter;
|
|
8
|
+
registry: AdapterRegistry;
|
|
9
|
+
};
|
|
10
|
+
interface RunJobInput {
|
|
11
|
+
webhookName: string;
|
|
12
|
+
}
|
|
13
|
+
type PerFlowResultBase = {
|
|
14
|
+
flowId: number;
|
|
15
|
+
sourceObject?: string;
|
|
16
|
+
targetObject?: string;
|
|
17
|
+
};
|
|
18
|
+
export type PerFlowResult = PerFlowResultBase & ({
|
|
19
|
+
skipped: true;
|
|
20
|
+
reason: string;
|
|
21
|
+
} | {
|
|
22
|
+
error: string;
|
|
23
|
+
} | (BatchResult & {
|
|
24
|
+
durationMs: number;
|
|
25
|
+
}));
|
|
26
|
+
export interface RunJobOutput {
|
|
27
|
+
webhookName: string;
|
|
28
|
+
skipped?: boolean;
|
|
29
|
+
results: PerFlowResult[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Run a scheduled job: load it from config by `webhook_name`, then run its
|
|
33
|
+
* `flow_ids` sequentially in order. Continue-on-error — one flow failing does
|
|
34
|
+
* not stop the rest; the failed flow's cursor holds (SyncRunner only advances on
|
|
35
|
+
* zero failures) so it retries next cycle. Per-flow direction is decided by the
|
|
36
|
+
* flow's own `sourceSystem`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function makeRunJobAction(deps: JobDeps): Action<RunJobInput, RunJobOutput>;
|
|
39
|
+
export declare function makeScheduledJobListAction(deps: JobDeps): Action<void, ScheduledJob[]>;
|
|
40
|
+
export declare function makeScheduledJobGetAction(deps: JobDeps): Action<{
|
|
41
|
+
webhookName: string;
|
|
42
|
+
}, ScheduledJob>;
|
|
43
|
+
interface CreateJobInput {
|
|
44
|
+
name: string;
|
|
45
|
+
interval_value: number;
|
|
46
|
+
interval_unit: JobIntervalUnit;
|
|
47
|
+
flow_ids: number[];
|
|
48
|
+
enabled: boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare function makeScheduledJobCreateAction(deps: JobDeps): Action<CreateJobInput, ScheduledJob>;
|
|
51
|
+
interface UpdateJobInput {
|
|
52
|
+
webhook_name: string;
|
|
53
|
+
name?: string;
|
|
54
|
+
interval_value?: number;
|
|
55
|
+
interval_unit?: JobIntervalUnit;
|
|
56
|
+
flow_ids?: number[];
|
|
57
|
+
enabled?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export declare function makeScheduledJobUpdateAction(deps: JobDeps): Action<UpdateJobInput, ScheduledJob>;
|
|
60
|
+
/**
|
|
61
|
+
* Delete a scheduled job. Config is the source of truth, so the job is dropped
|
|
62
|
+
* from config first, then the webhook is torn down (404-tolerant, best-effort).
|
|
63
|
+
* If ES returns a 5xx the config write still stands and an orphan webhook may
|
|
64
|
+
* remain — safe to retry the delete, which is idempotent.
|
|
65
|
+
*/
|
|
66
|
+
export declare function makeScheduledJobDeleteAction(deps: JobDeps): Action<{
|
|
67
|
+
webhookName: string;
|
|
68
|
+
}, {
|
|
69
|
+
webhookName: string;
|
|
70
|
+
deleted: boolean;
|
|
71
|
+
}>;
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=scheduled-job.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-job.action.d.ts","sourceRoot":"","sources":["../../src/actions/scheduled-job.action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAEL,eAAe,EAEf,KAAK,YAAY,EAClB,MAAM,uCAAuC,CAAC;AAe/C,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,eAAe,CAAC;AAGvD,KAAK,OAAO,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC;AAgH/D,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,iBAAiB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAC3C,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AAEnG,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CA0EjF;AAID,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAWtF;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,YAAY,CAAC,CAe/C;AAID,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CA+ChG;AAID,UAAU,cAAc;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAyDhG;AAID;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA8B5E"}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeRunJobAction = makeRunJobAction;
|
|
4
|
+
exports.makeScheduledJobListAction = makeScheduledJobListAction;
|
|
5
|
+
exports.makeScheduledJobGetAction = makeScheduledJobGetAction;
|
|
6
|
+
exports.makeScheduledJobCreateAction = makeScheduledJobCreateAction;
|
|
7
|
+
exports.makeScheduledJobUpdateAction = makeScheduledJobUpdateAction;
|
|
8
|
+
exports.makeScheduledJobDeleteAction = makeScheduledJobDeleteAction;
|
|
9
|
+
const pulse_solution_services_1 = require("@skedulo/pulse-solution-services");
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const scheduled_job_interface_1 = require("../interfaces/scheduled-job.interface");
|
|
12
|
+
const sync_runner_1 = require("../services/sync-runner");
|
|
13
|
+
const helpers_1 = require("../utils/helpers");
|
|
14
|
+
const artifact_builder_1 = require("../utils/artifact-builder");
|
|
15
|
+
const action_names_1 = require("./utils/action-names");
|
|
16
|
+
const helpers_2 = require("./utils/helpers");
|
|
17
|
+
const errors_1 = require("./utils/errors");
|
|
18
|
+
// ── shared helpers ─────────────────────────────────────────────────────────
|
|
19
|
+
function readConfig(ctx, integrationType) {
|
|
20
|
+
return ctx.integrationConfigClient.get(integrationType).then((raw) => (0, scheduled_job_interface_1.asIntegrationConfig)(raw));
|
|
21
|
+
}
|
|
22
|
+
function jobCron(job) {
|
|
23
|
+
return (0, artifact_builder_1.intervalMinutesToCron)((0, artifact_builder_1.jobIntervalToMinutes)(job));
|
|
24
|
+
}
|
|
25
|
+
/** A job fires only when enabled with at least one flow. */
|
|
26
|
+
function jobShouldRun(job) {
|
|
27
|
+
return job.enabled && job.flow_ids.length > 0;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Reconcile the ES webhook for a job: provision when it should run, otherwise
|
|
31
|
+
* tear it down (404-tolerant). `webhook_name` is both the artifact name and the
|
|
32
|
+
* job-id header.
|
|
33
|
+
*/
|
|
34
|
+
async function reconcileJobArtifact(ctx, job) {
|
|
35
|
+
const client = ctx.newArtifactClient(pulse_solution_services_1.ArtifactType.WEBHOOK);
|
|
36
|
+
if (jobShouldRun(job)) {
|
|
37
|
+
await (0, artifact_builder_1.upsertArtifact)(client, job.webhook_name, (0, artifact_builder_1.buildJobWebhookArtifact)({
|
|
38
|
+
webhookName: job.webhook_name,
|
|
39
|
+
url: (0, artifact_builder_1.functionCallbackUrl)(ctx.integrationType),
|
|
40
|
+
cron: jobCron(job),
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
await (0, artifact_builder_1.deleteArtifactIfExists)(client, job.webhook_name);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Validate that every `flow_id` belongs to this integration and that no id is
|
|
49
|
+
* already claimed by another job (J5 — the per-flow cursor can't be shared).
|
|
50
|
+
*/
|
|
51
|
+
async function validateFlowIds(ctx, integrationType, flowIds, otherJobs) {
|
|
52
|
+
const claimed = new Map();
|
|
53
|
+
for (const j of otherJobs) {
|
|
54
|
+
for (const id of j.flow_ids)
|
|
55
|
+
claimed.set(id, j.webhook_name);
|
|
56
|
+
}
|
|
57
|
+
for (const id of flowIds) {
|
|
58
|
+
const owner = claimed.get(id);
|
|
59
|
+
if (owner) {
|
|
60
|
+
throw new errors_1.InvalidInputError(`Flow ${id} is already in scheduled job '${owner}'`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (flowIds.length === 0)
|
|
64
|
+
return;
|
|
65
|
+
const existing = await ctx.dataFlowService.list({ integrationType });
|
|
66
|
+
const validIds = new Set(existing.map((f) => f.id));
|
|
67
|
+
for (const id of flowIds) {
|
|
68
|
+
if (!validIds.has(id)) {
|
|
69
|
+
throw new errors_1.InvalidInputError(`Flow ${id} does not exist for integration '${integrationType}'`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// ── input parsing ────────────────────────────────────────────────────────────
|
|
74
|
+
function asRecord(raw) {
|
|
75
|
+
return (raw !== null && raw !== void 0 ? raw : {});
|
|
76
|
+
}
|
|
77
|
+
function parseName(value) {
|
|
78
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
79
|
+
throw new errors_1.InvalidInputError('name must be a non-empty string');
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
function parseIntervalUnit(value) {
|
|
84
|
+
if (value === scheduled_job_interface_1.JobIntervalUnit.MINUTES || value === scheduled_job_interface_1.JobIntervalUnit.HOURS)
|
|
85
|
+
return value;
|
|
86
|
+
throw new errors_1.InvalidInputError('interval_unit must be "minutes" or "hours"');
|
|
87
|
+
}
|
|
88
|
+
function parseFlowIds(value) {
|
|
89
|
+
if (!Array.isArray(value) || value.some((id) => !Number.isInteger(id) || id <= 0)) {
|
|
90
|
+
throw new errors_1.InvalidInputError('flow_ids must be an array of positive integers');
|
|
91
|
+
}
|
|
92
|
+
// Reject duplicates within the same job — ordering must be unambiguous.
|
|
93
|
+
if (new Set(value).size !== value.length) {
|
|
94
|
+
throw new errors_1.InvalidInputError('flow_ids must not contain duplicates');
|
|
95
|
+
}
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
function parseWebhookName(raw) {
|
|
99
|
+
var _a;
|
|
100
|
+
const obj = asRecord(raw);
|
|
101
|
+
// Accept both casings at the wire boundary: the persisted shape uses
|
|
102
|
+
// `webhook_name`, while UI/TS callers send `webhookName`.
|
|
103
|
+
const name = (_a = obj.webhook_name) !== null && _a !== void 0 ? _a : obj.webhookName;
|
|
104
|
+
if (typeof name !== 'string' || name.length === 0) {
|
|
105
|
+
throw new errors_1.InvalidInputError('webhook_name must be a non-empty string');
|
|
106
|
+
}
|
|
107
|
+
return name;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Run a scheduled job: load it from config by `webhook_name`, then run its
|
|
111
|
+
* `flow_ids` sequentially in order. Continue-on-error — one flow failing does
|
|
112
|
+
* not stop the rest; the failed flow's cursor holds (SyncRunner only advances on
|
|
113
|
+
* zero failures) so it retries next cycle. Per-flow direction is decided by the
|
|
114
|
+
* flow's own `sourceSystem`.
|
|
115
|
+
*/
|
|
116
|
+
function makeRunJobAction(deps) {
|
|
117
|
+
return {
|
|
118
|
+
name: action_names_1.ACTIONS.sync.runJob,
|
|
119
|
+
parseInput(raw, meta) {
|
|
120
|
+
const fromMeta = meta === null || meta === void 0 ? void 0 : meta.scheduledJobName;
|
|
121
|
+
if (typeof fromMeta === 'string' && fromMeta.length > 0) {
|
|
122
|
+
return { webhookName: fromMeta };
|
|
123
|
+
}
|
|
124
|
+
return { webhookName: parseWebhookName(raw) };
|
|
125
|
+
},
|
|
126
|
+
async handler(input, ctx) {
|
|
127
|
+
var _a, _b;
|
|
128
|
+
const integrationType = deps.adapter.integrationType;
|
|
129
|
+
const lookupStrategy = (0, helpers_2.resolveLookupStrategy)(deps.adapter);
|
|
130
|
+
const config = await readConfig(ctx, integrationType);
|
|
131
|
+
const job = config.scheduled_jobs.find((j) => j.webhook_name === input.webhookName);
|
|
132
|
+
if (!job) {
|
|
133
|
+
throw new errors_1.ActionError('JOB_NOT_FOUND', `Scheduled job '${input.webhookName}' not found`);
|
|
134
|
+
}
|
|
135
|
+
if (!jobShouldRun(job)) {
|
|
136
|
+
ctx.logger.info(`[run-job] ${job.webhook_name} skipped (disabled or no flows)`);
|
|
137
|
+
return { webhookName: job.webhook_name, skipped: true, results: [] };
|
|
138
|
+
}
|
|
139
|
+
ctx.logger.info(`[run-job] ${job.webhook_name} running ${job.flow_ids.length} flow(s) in order: ` +
|
|
140
|
+
job.flow_ids.join(', '));
|
|
141
|
+
const runner = new sync_runner_1.SyncRunner(deps.registry);
|
|
142
|
+
const results = [];
|
|
143
|
+
for (const flowId of job.flow_ids) {
|
|
144
|
+
const startedAt = Date.now();
|
|
145
|
+
try {
|
|
146
|
+
const flow = await ctx.dataFlowService.getFlowById(flowId);
|
|
147
|
+
if (!flow) {
|
|
148
|
+
ctx.logger.warn(`[run-job] ${job.webhook_name} flow=${flowId} not found — skipping`);
|
|
149
|
+
results.push({ flowId, skipped: true, reason: 'flow not found' });
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const stats = await runner.run({
|
|
153
|
+
flowId,
|
|
154
|
+
since: null,
|
|
155
|
+
sourceSystem: (_a = flow.sourceSystem) !== null && _a !== void 0 ? _a : integrationType,
|
|
156
|
+
targetSystem: (_b = flow.targetSystem) !== null && _b !== void 0 ? _b : constants_1.SKEDULO_SYSTEM,
|
|
157
|
+
options: { lookupStrategy },
|
|
158
|
+
}, ctx);
|
|
159
|
+
const durationMs = Date.now() - startedAt;
|
|
160
|
+
ctx.logger.info(`[run-job] ${job.webhook_name} flow=${flowId} ${flow.sourceObject}→${flow.targetObject} ` +
|
|
161
|
+
`${JSON.stringify(stats)} took=${durationMs}ms`);
|
|
162
|
+
results.push(Object.assign({ flowId, sourceObject: flow.sourceObject, targetObject: flow.targetObject, durationMs }, stats));
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
166
|
+
ctx.logger.error(`[run-job] ${job.webhook_name} flow=${flowId} failed: ${msg}`);
|
|
167
|
+
results.push({ flowId, error: msg });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return { webhookName: job.webhook_name, results };
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// ── scheduled-job.list / .get ────────────────────────────────────────────────
|
|
175
|
+
function makeScheduledJobListAction(deps) {
|
|
176
|
+
return {
|
|
177
|
+
name: action_names_1.ACTIONS.scheduledJob.list,
|
|
178
|
+
parseInput() {
|
|
179
|
+
return undefined;
|
|
180
|
+
},
|
|
181
|
+
async handler(_input, ctx) {
|
|
182
|
+
const config = await readConfig(ctx, deps.adapter.integrationType);
|
|
183
|
+
return config.scheduled_jobs;
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function makeScheduledJobGetAction(deps) {
|
|
188
|
+
return {
|
|
189
|
+
name: action_names_1.ACTIONS.scheduledJob.get,
|
|
190
|
+
parseInput(raw) {
|
|
191
|
+
return { webhookName: parseWebhookName(raw) };
|
|
192
|
+
},
|
|
193
|
+
async handler(input, ctx) {
|
|
194
|
+
const config = await readConfig(ctx, deps.adapter.integrationType);
|
|
195
|
+
const job = config.scheduled_jobs.find((j) => j.webhook_name === input.webhookName);
|
|
196
|
+
if (!job) {
|
|
197
|
+
throw new errors_1.ActionError('JOB_NOT_FOUND', `Scheduled job '${input.webhookName}' not found`);
|
|
198
|
+
}
|
|
199
|
+
return job;
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function makeScheduledJobCreateAction(deps) {
|
|
204
|
+
return {
|
|
205
|
+
name: action_names_1.ACTIONS.scheduledJob.create,
|
|
206
|
+
parseInput(raw) {
|
|
207
|
+
var _a;
|
|
208
|
+
const obj = asRecord(raw);
|
|
209
|
+
// Validate interval bounds eagerly so bad input is rejected at parse time.
|
|
210
|
+
const interval_value = typeof obj.interval_value === 'number' ? obj.interval_value : Number.NaN;
|
|
211
|
+
const input = {
|
|
212
|
+
name: parseName(obj.name),
|
|
213
|
+
interval_value,
|
|
214
|
+
interval_unit: parseIntervalUnit(obj.interval_unit),
|
|
215
|
+
flow_ids: parseFlowIds((_a = obj.flow_ids) !== null && _a !== void 0 ? _a : []),
|
|
216
|
+
enabled: obj.enabled === undefined ? true : Boolean(obj.enabled),
|
|
217
|
+
};
|
|
218
|
+
(0, artifact_builder_1.jobIntervalToMinutes)(input); // throws InvalidInputError on out-of-range
|
|
219
|
+
return input;
|
|
220
|
+
},
|
|
221
|
+
async handler(input, ctx) {
|
|
222
|
+
if (!(0, helpers_1.isAdminRequest)(ctx.skedContext)) {
|
|
223
|
+
throw new errors_1.ActionError('FORBIDDEN', 'scheduled-job.create requires admin privileges');
|
|
224
|
+
}
|
|
225
|
+
const integrationType = deps.adapter.integrationType;
|
|
226
|
+
const webhook_name = (0, artifact_builder_1.buildJobArtifactName)(integrationType, input.name);
|
|
227
|
+
const prev = await readConfig(ctx, integrationType);
|
|
228
|
+
if (prev.scheduled_jobs.some((j) => j.webhook_name === webhook_name)) {
|
|
229
|
+
throw new errors_1.InvalidInputError(`A scheduled job named '${input.name}' already exists (webhook_name '${webhook_name}')`);
|
|
230
|
+
}
|
|
231
|
+
await validateFlowIds(ctx, integrationType, input.flow_ids, prev.scheduled_jobs);
|
|
232
|
+
const job = {
|
|
233
|
+
webhook_name,
|
|
234
|
+
name: input.name,
|
|
235
|
+
interval_value: input.interval_value,
|
|
236
|
+
interval_unit: input.interval_unit,
|
|
237
|
+
flow_ids: input.flow_ids,
|
|
238
|
+
enabled: input.enabled,
|
|
239
|
+
};
|
|
240
|
+
const next = { scheduled_jobs: [...prev.scheduled_jobs, job] };
|
|
241
|
+
await writeConfigThenArtifact(ctx, integrationType, prev, next, job);
|
|
242
|
+
return job;
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function makeScheduledJobUpdateAction(deps) {
|
|
247
|
+
return {
|
|
248
|
+
name: action_names_1.ACTIONS.scheduledJob.update,
|
|
249
|
+
parseInput(raw) {
|
|
250
|
+
const obj = asRecord(raw);
|
|
251
|
+
const input = { webhook_name: parseWebhookName(raw) };
|
|
252
|
+
if (obj.name !== undefined)
|
|
253
|
+
input.name = parseName(obj.name);
|
|
254
|
+
if (obj.interval_value !== undefined) {
|
|
255
|
+
if (typeof obj.interval_value !== 'number') {
|
|
256
|
+
throw new errors_1.InvalidInputError('interval_value must be a number');
|
|
257
|
+
}
|
|
258
|
+
input.interval_value = obj.interval_value;
|
|
259
|
+
}
|
|
260
|
+
if (obj.interval_unit !== undefined)
|
|
261
|
+
input.interval_unit = parseIntervalUnit(obj.interval_unit);
|
|
262
|
+
if (obj.flow_ids !== undefined)
|
|
263
|
+
input.flow_ids = parseFlowIds(obj.flow_ids);
|
|
264
|
+
if (obj.enabled !== undefined)
|
|
265
|
+
input.enabled = Boolean(obj.enabled);
|
|
266
|
+
return input;
|
|
267
|
+
},
|
|
268
|
+
async handler(input, ctx) {
|
|
269
|
+
var _a, _b, _c, _d, _e;
|
|
270
|
+
if (!(0, helpers_1.isAdminRequest)(ctx.skedContext)) {
|
|
271
|
+
throw new errors_1.ActionError('FORBIDDEN', 'scheduled-job.update requires admin privileges');
|
|
272
|
+
}
|
|
273
|
+
const integrationType = deps.adapter.integrationType;
|
|
274
|
+
const prev = await readConfig(ctx, integrationType);
|
|
275
|
+
const existing = prev.scheduled_jobs.find((j) => j.webhook_name === input.webhook_name);
|
|
276
|
+
if (!existing) {
|
|
277
|
+
throw new errors_1.ActionError('JOB_NOT_FOUND', `Scheduled job '${input.webhook_name}' not found`);
|
|
278
|
+
}
|
|
279
|
+
// webhook_name is immutable — only the mutable fields change.
|
|
280
|
+
const merged = {
|
|
281
|
+
webhook_name: existing.webhook_name,
|
|
282
|
+
name: (_a = input.name) !== null && _a !== void 0 ? _a : existing.name,
|
|
283
|
+
interval_value: (_b = input.interval_value) !== null && _b !== void 0 ? _b : existing.interval_value,
|
|
284
|
+
interval_unit: (_c = input.interval_unit) !== null && _c !== void 0 ? _c : existing.interval_unit,
|
|
285
|
+
flow_ids: (_d = input.flow_ids) !== null && _d !== void 0 ? _d : existing.flow_ids,
|
|
286
|
+
enabled: (_e = input.enabled) !== null && _e !== void 0 ? _e : existing.enabled,
|
|
287
|
+
};
|
|
288
|
+
(0, artifact_builder_1.jobIntervalToMinutes)(merged); // re-validate bounds after merge
|
|
289
|
+
const others = prev.scheduled_jobs.filter((j) => j.webhook_name !== input.webhook_name);
|
|
290
|
+
if (input.flow_ids !== undefined) {
|
|
291
|
+
await validateFlowIds(ctx, integrationType, merged.flow_ids, others);
|
|
292
|
+
}
|
|
293
|
+
const next = {
|
|
294
|
+
scheduled_jobs: prev.scheduled_jobs.map((j) => j.webhook_name === merged.webhook_name ? merged : j),
|
|
295
|
+
};
|
|
296
|
+
await writeConfigThenArtifact(ctx, integrationType, prev, next, merged);
|
|
297
|
+
return merged;
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
// ── scheduled-job.delete ─────────────────────────────────────────────────────
|
|
302
|
+
/**
|
|
303
|
+
* Delete a scheduled job. Config is the source of truth, so the job is dropped
|
|
304
|
+
* from config first, then the webhook is torn down (404-tolerant, best-effort).
|
|
305
|
+
* If ES returns a 5xx the config write still stands and an orphan webhook may
|
|
306
|
+
* remain — safe to retry the delete, which is idempotent.
|
|
307
|
+
*/
|
|
308
|
+
function makeScheduledJobDeleteAction(deps) {
|
|
309
|
+
return {
|
|
310
|
+
name: action_names_1.ACTIONS.scheduledJob.delete,
|
|
311
|
+
parseInput(raw) {
|
|
312
|
+
return { webhookName: parseWebhookName(raw) };
|
|
313
|
+
},
|
|
314
|
+
async handler(input, ctx) {
|
|
315
|
+
if (!(0, helpers_1.isAdminRequest)(ctx.skedContext)) {
|
|
316
|
+
throw new errors_1.ActionError('FORBIDDEN', 'scheduled-job.delete requires admin privileges');
|
|
317
|
+
}
|
|
318
|
+
const integrationType = deps.adapter.integrationType;
|
|
319
|
+
const prev = await readConfig(ctx, integrationType);
|
|
320
|
+
const existed = prev.scheduled_jobs.some((j) => j.webhook_name === input.webhookName);
|
|
321
|
+
// Config is source of truth: drop the job first, then tear down the webhook
|
|
322
|
+
// (404-tolerant, so no rollback needed). Idempotent if already gone.
|
|
323
|
+
if (existed) {
|
|
324
|
+
const next = {
|
|
325
|
+
scheduled_jobs: prev.scheduled_jobs.filter((j) => j.webhook_name !== input.webhookName),
|
|
326
|
+
};
|
|
327
|
+
await ctx.integrationConfigClient.replace(integrationType, next);
|
|
328
|
+
}
|
|
329
|
+
await (0, artifact_builder_1.deleteArtifactIfExists)(ctx.newArtifactClient(pulse_solution_services_1.ArtifactType.WEBHOOK), input.webhookName);
|
|
330
|
+
return { webhookName: input.webhookName, deleted: existed };
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Two-phase fail-closed write for create/update: persist config first, then
|
|
336
|
+
* reconcile the ES artifact. If the artifact step throws, roll the config back
|
|
337
|
+
* to `prev` (IS uses replace semantics) before re-raising — no orphaned webhook,
|
|
338
|
+
* no lost config.
|
|
339
|
+
*/
|
|
340
|
+
async function writeConfigThenArtifact(ctx, integrationType, prev, next, job) {
|
|
341
|
+
await ctx.integrationConfigClient.replace(integrationType, next);
|
|
342
|
+
try {
|
|
343
|
+
await reconcileJobArtifact(ctx, job);
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
try {
|
|
347
|
+
await ctx.integrationConfigClient.replace(integrationType, prev);
|
|
348
|
+
}
|
|
349
|
+
catch (_a) {
|
|
350
|
+
// best-effort rollback; surface the original artifact error
|
|
351
|
+
}
|
|
352
|
+
throw err;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=scheduled-job.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-job.action.js","sourceRoot":"","sources":["../../src/actions/scheduled-job.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ function makeSetupCreateAction(adapter) {
|
|
|
25
25
|
},
|
|
26
26
|
async handler(_input, ctx) {
|
|
27
27
|
if (!(0, helpers_1.isAdminRequest)(ctx.skedContext)) {
|
|
28
|
-
throw new errors_1.
|
|
28
|
+
throw new errors_1.ForbiddenError('setup requires admin privileges');
|
|
29
29
|
}
|
|
30
30
|
await skedulo_adapter_1.skeduloAdapter.bootstrap(ctx);
|
|
31
31
|
return { message: 'Setup complete', schema: adapter.integrationType };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.action.js","sourceRoot":"","sources":["../../src/actions/setup.action.ts"],"names":[],"mappings":";;AAYA,sDAUC;AAUD,sDAgBC;AA/CD,iEAAmF;AACnF,8CAAkD;AAClD,uDAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"setup.action.js","sourceRoot":"","sources":["../../src/actions/setup.action.ts"],"names":[],"mappings":";;AAYA,sDAUC;AAUD,sDAgBC;AA/CD,iEAAmF;AACnF,8CAAkD;AAClD,uDAA+C;AAC/C,2CAAgD;AAQhD,SAAgB,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,sBAAO,CAAC,KAAK,CAAC,MAAM;QAC1B,UAAU;YACR,OAAO,SAA6B,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACvB,OAAO,gCAAc,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC;AAUD,SAAgB,qBAAqB,CACnC,OAAgB;IAEhB,OAAO;QACL,IAAI,EAAE,sBAAO,CAAC,KAAK,CAAC,MAAM;QAC1B,UAAU;YACR,OAAO,SAA6B,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACvB,IAAI,CAAC,IAAA,wBAAc,EAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,uBAAc,CAAC,iCAAiC,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,gCAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;QACxE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/actions/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.makeRunJobAction = exports.makeRunFlowAction = void 0;
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
var run_flow_action_1 = require("./run-flow.action");
|
|
20
|
+
Object.defineProperty(exports, "makeRunFlowAction", { enumerable: true, get: function () { return run_flow_action_1.makeRunFlowAction; } });
|
|
21
|
+
var run_job_action_1 = require("./run-job.action");
|
|
22
|
+
Object.defineProperty(exports, "makeRunJobAction", { enumerable: true, get: function () { return run_job_action_1.makeRunJobAction; } });
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/actions/sync/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,qDAAsD;AAA7C,oHAAA,iBAAiB,OAAA;AAC1B,mDAAoD;AAA3C,kHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Action } from '../utils/types';
|
|
2
|
+
import type { RunFlowInput, RunFlowOutput, SyncDeps } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Manually run a single flow. Admin-only. Supports a one-off backfill (`since`)
|
|
5
|
+
* or full resync (`fullResync`) that overrides the persisted cursor.
|
|
6
|
+
*/
|
|
7
|
+
export declare function makeRunFlowAction(deps: SyncDeps): Action<RunFlowInput, RunFlowOutput>;
|
|
8
|
+
//# sourceMappingURL=run-flow.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-flow.action.d.ts","sourceRoot":"","sources":["../../../src/actions/sync/run-flow.action.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAsBrE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAoDrF"}
|