@skedulo/integration-sdk 0.3.4 → 0.5.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 +24 -0
- package/README.md +84 -20
- 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 +43 -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 +56 -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 +68 -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 +107 -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 +39 -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
|
@@ -1,14 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.functionCallbackUrl = functionCallbackUrl;
|
|
3
4
|
exports.buildArtifactName = buildArtifactName;
|
|
4
5
|
exports.intervalMinutesToCron = intervalMinutesToCron;
|
|
6
|
+
exports.jobIntervalToMinutes = jobIntervalToMinutes;
|
|
7
|
+
exports.buildJobArtifactName = buildJobArtifactName;
|
|
5
8
|
exports.buildSkeduloQuery = buildSkeduloQuery;
|
|
6
|
-
exports.
|
|
9
|
+
exports.buildJobWebhookArtifact = buildJobWebhookArtifact;
|
|
7
10
|
exports.buildTriggeredActionArtifact = buildTriggeredActionArtifact;
|
|
8
11
|
exports.upsertArtifact = upsertArtifact;
|
|
9
12
|
exports.deleteArtifactIfExists = deleteArtifactIfExists;
|
|
13
|
+
const scheduled_job_interface_1 = require("../interfaces/scheduled-job.interface");
|
|
10
14
|
const action_names_1 = require("../actions/utils/action-names");
|
|
11
|
-
const
|
|
15
|
+
const errors_1 = require("../actions/utils/errors");
|
|
16
|
+
// Per-flow artifact (webhook / triggered action) — generated deterministically
|
|
17
|
+
// from immutable fields (integrationType, source/target objects, numeric flow
|
|
18
|
+
// id), so 255 is plenty of headroom for long object names.
|
|
19
|
+
const MAX_FLOW_ARTIFACT_NAME_LENGTH = 255;
|
|
20
|
+
// Scheduled-job webhook — derived from a user-supplied job name. Kept tighter
|
|
21
|
+
// so a long display name is rejected up-front instead of producing an artifact
|
|
22
|
+
// name no one can read.
|
|
23
|
+
const MAX_JOB_ARTIFACT_NAME_LENGTH = 200;
|
|
24
|
+
/**
|
|
25
|
+
* Callback URL an artifact posts to. `{{ SKEDULO_API_URL }}` is substituted with
|
|
26
|
+
* the tenant API host by the platform when the artifact fires.
|
|
27
|
+
*/
|
|
28
|
+
function functionCallbackUrl(integrationType) {
|
|
29
|
+
return `{{ SKEDULO_API_URL }}/function/${integrationType}/${integrationType}`;
|
|
30
|
+
}
|
|
12
31
|
function slugify(value) {
|
|
13
32
|
return value
|
|
14
33
|
.toLowerCase()
|
|
@@ -20,7 +39,7 @@ function slugify(value) {
|
|
|
20
39
|
* webhook / triggered action provisioned for a DataFlow.
|
|
21
40
|
*
|
|
22
41
|
* Format: `sked-int-${integrationType}-${sourceObject}-to-${targetObject}-flow${id}`
|
|
23
|
-
* Throws if the result exceeds
|
|
42
|
+
* Throws if the result exceeds 255 chars (we don't truncate, since collisions
|
|
24
43
|
* on the prefix would cause silent cross-flow overwrites).
|
|
25
44
|
*/
|
|
26
45
|
function buildArtifactName(flow, integrationType) {
|
|
@@ -28,8 +47,8 @@ function buildArtifactName(flow, integrationType) {
|
|
|
28
47
|
throw new Error('buildArtifactName requires an integrationType');
|
|
29
48
|
}
|
|
30
49
|
const name = `sked-int-${slugify(integrationType)}-${slugify(flow.sourceObject)}-to-${slugify(flow.targetObject)}-flow${flow.id}`;
|
|
31
|
-
if (name.length >
|
|
32
|
-
throw new Error(`buildArtifactName produced a name of ${name.length} characters (max ${
|
|
50
|
+
if (name.length > MAX_FLOW_ARTIFACT_NAME_LENGTH) {
|
|
51
|
+
throw new Error(`buildArtifactName produced a name of ${name.length} characters (max ${MAX_FLOW_ARTIFACT_NAME_LENGTH}): "${name}"`);
|
|
33
52
|
}
|
|
34
53
|
return name;
|
|
35
54
|
}
|
|
@@ -38,8 +57,8 @@ function buildArtifactName(flow, integrationType) {
|
|
|
38
57
|
* - n <= 1 → `* * * * *` (every minute)
|
|
39
58
|
* - 1 < n < 60 → `*\/n * * * *`
|
|
40
59
|
* - 60 <= n, multiples of 60 → `0 *\/h * * *` (every h hours)
|
|
41
|
-
* - otherwise
|
|
42
|
-
*
|
|
60
|
+
* - otherwise (n >= 60 and not a multiple of 60) → throws, since `*\/n` is an
|
|
61
|
+
* invalid cron minute field for n > 59
|
|
43
62
|
*/
|
|
44
63
|
function intervalMinutesToCron(intervalMinutes) {
|
|
45
64
|
if (!Number.isInteger(intervalMinutes) || intervalMinutes <= 1)
|
|
@@ -50,7 +69,52 @@ function intervalMinutesToCron(intervalMinutes) {
|
|
|
50
69
|
const hours = intervalMinutes / 60;
|
|
51
70
|
return hours === 1 ? '0 * * * *' : `0 */${hours} * * *`;
|
|
52
71
|
}
|
|
53
|
-
|
|
72
|
+
throw new Error(`Unsupported intervalMinutes=${intervalMinutes}; for values >= 60, use multiples of 60.`);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Convert a scheduled job's `{ interval_value, interval_unit }` into minutes,
|
|
76
|
+
* validating the bounds (minutes 1–60, hours 1–24). Throws `InvalidInputError`
|
|
77
|
+
* on out-of-range or non-integer values. `hours` → ×60 (maps onto
|
|
78
|
+
* `intervalMinutesToCron`, which requires multiples of 60 for hourly crons).
|
|
79
|
+
*/
|
|
80
|
+
function jobIntervalToMinutes(args) {
|
|
81
|
+
const { interval_value: value, interval_unit: unit } = args;
|
|
82
|
+
if (!Number.isInteger(value)) {
|
|
83
|
+
throw new errors_1.InvalidInputError('interval_value must be an integer');
|
|
84
|
+
}
|
|
85
|
+
if (unit === scheduled_job_interface_1.JobIntervalUnit.MINUTES) {
|
|
86
|
+
if (value < 1 || value > 60) {
|
|
87
|
+
throw new errors_1.InvalidInputError('interval_value must be between 1 and 60 for minutes');
|
|
88
|
+
}
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
if (unit === scheduled_job_interface_1.JobIntervalUnit.HOURS) {
|
|
92
|
+
if (value < 1 || value > 24) {
|
|
93
|
+
throw new errors_1.InvalidInputError('interval_value must be between 1 and 24 for hours');
|
|
94
|
+
}
|
|
95
|
+
return value * 60;
|
|
96
|
+
}
|
|
97
|
+
throw new errors_1.InvalidInputError(`interval_unit must be "minutes" or "hours"`);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Deterministic artifact name for a scheduled job — this IS the job's
|
|
101
|
+
* `webhook_name`. Derived from the job's display name:
|
|
102
|
+
* `sked-int-${integrationType}-job-${slug(name)}`. Throws on overflow (>200) or
|
|
103
|
+
* a name that slugs to empty.
|
|
104
|
+
*/
|
|
105
|
+
function buildJobArtifactName(integrationType, jobName) {
|
|
106
|
+
if (!integrationType) {
|
|
107
|
+
throw new Error('buildJobArtifactName requires an integrationType');
|
|
108
|
+
}
|
|
109
|
+
const slug = slugify(jobName);
|
|
110
|
+
if (!slug) {
|
|
111
|
+
throw new errors_1.InvalidInputError('job name must contain at least one alphanumeric character');
|
|
112
|
+
}
|
|
113
|
+
const name = `sked-int-${slugify(integrationType)}-job-${slug}`;
|
|
114
|
+
if (name.length > MAX_JOB_ARTIFACT_NAME_LENGTH) {
|
|
115
|
+
throw new errors_1.InvalidInputError(`job webhook_name would be ${name.length} characters (max ${MAX_JOB_ARTIFACT_NAME_LENGTH}): "${name}". Use a shorter job name.`);
|
|
116
|
+
}
|
|
117
|
+
return name;
|
|
54
118
|
}
|
|
55
119
|
/**
|
|
56
120
|
* GraphQL selection-set fragment for the triggered action's `action.query`.
|
|
@@ -72,9 +136,13 @@ function buildSkeduloQuery(flow) {
|
|
|
72
136
|
}
|
|
73
137
|
// ── Artifact bodies ──────────────────────────────────────────────────────────
|
|
74
138
|
const ADMIN_AUTH_HEADER = 'Bearer {{ INTEGRATION_ADMIN_TOKEN }}';
|
|
75
|
-
|
|
139
|
+
/**
|
|
140
|
+
* Scheduled webhook for an integration-level job. Fires `sync.run-job` and
|
|
141
|
+
* carries the job's `webhook_name` so the handler can load it from config.
|
|
142
|
+
*/
|
|
143
|
+
function buildJobWebhookArtifact(opts) {
|
|
76
144
|
return {
|
|
77
|
-
name: opts.
|
|
145
|
+
name: opts.webhookName,
|
|
78
146
|
metadata: { type: 'Webhook' },
|
|
79
147
|
webhook: {
|
|
80
148
|
type: 'scheduled',
|
|
@@ -82,8 +150,8 @@ function buildScheduledWebhookArtifact(opts) {
|
|
|
82
150
|
cron: opts.cron,
|
|
83
151
|
headers: {
|
|
84
152
|
Authorization: ADMIN_AUTH_HEADER,
|
|
85
|
-
[action_names_1.ACTION_HEADER]:
|
|
86
|
-
[action_names_1.
|
|
153
|
+
[action_names_1.ACTION_HEADER]: action_names_1.ACTIONS.sync.runJob,
|
|
154
|
+
[action_names_1.SCHEDULED_JOB_NAME_HEADER]: opts.webhookName,
|
|
87
155
|
},
|
|
88
156
|
},
|
|
89
157
|
};
|
|
@@ -112,17 +180,24 @@ function buildTriggeredActionArtifact(opts) {
|
|
|
112
180
|
}
|
|
113
181
|
// ── Upsert / delete helpers ──────────────────────────────────────────────────
|
|
114
182
|
/**
|
|
115
|
-
* Idempotent upsert: try `get` then `update`;
|
|
116
|
-
*
|
|
117
|
-
* "create" and "replace"
|
|
183
|
+
* Idempotent upsert: try `get` then `update`; fall back to `create` only when
|
|
184
|
+
* `get` reports a 404 (not-found). Other errors (auth/validation/5xx) propagate.
|
|
185
|
+
* The PSS artifact API is name-keyed, so this collapses "create" and "replace"
|
|
186
|
+
* into a single safe call.
|
|
118
187
|
*/
|
|
119
188
|
async function upsertArtifact(client, name, artifact) {
|
|
120
189
|
try {
|
|
121
190
|
await client.get({ name });
|
|
122
191
|
await client.update({ name }, artifact);
|
|
123
192
|
}
|
|
124
|
-
catch (
|
|
125
|
-
|
|
193
|
+
catch (err) {
|
|
194
|
+
// Only treat a genuine not-found as "create"; auth/validation/5xx must
|
|
195
|
+
// surface instead of being masked as a missing artifact.
|
|
196
|
+
if (err instanceof Error && /Status:\s*404\b/.test(err.message)) {
|
|
197
|
+
await client.create({ name }, artifact);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
throw err;
|
|
126
201
|
}
|
|
127
202
|
}
|
|
128
203
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-builder.js","sourceRoot":"","sources":["../../src/utils/artifact-builder.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"artifact-builder.js","sourceRoot":"","sources":["../../src/utils/artifact-builder.ts"],"names":[],"mappings":"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"}
|