@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.
Files changed (229) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +38 -19
  3. package/dist/actions/action-registry.d.ts.map +1 -1
  4. package/dist/actions/action-registry.js +27 -23
  5. package/dist/actions/action-registry.js.map +1 -1
  6. package/dist/actions/data-flow/activate.action.d.ts +10 -0
  7. package/dist/actions/data-flow/activate.action.d.ts.map +1 -0
  8. package/dist/actions/data-flow/activate.action.js +22 -0
  9. package/dist/actions/data-flow/activate.action.js.map +1 -0
  10. package/dist/actions/data-flow/create.action.d.ts +9 -0
  11. package/dist/actions/data-flow/create.action.d.ts.map +1 -0
  12. package/dist/actions/data-flow/create.action.js +55 -0
  13. package/dist/actions/data-flow/create.action.js.map +1 -0
  14. package/dist/actions/data-flow/deactivate.action.d.ts +9 -0
  15. package/dist/actions/data-flow/deactivate.action.d.ts.map +1 -0
  16. package/dist/actions/data-flow/deactivate.action.js +21 -0
  17. package/dist/actions/data-flow/deactivate.action.js.map +1 -0
  18. package/dist/actions/data-flow/delete.action.d.ts +10 -0
  19. package/dist/actions/data-flow/delete.action.d.ts.map +1 -0
  20. package/dist/actions/data-flow/delete.action.js +33 -0
  21. package/dist/actions/data-flow/delete.action.js.map +1 -0
  22. package/dist/actions/data-flow/get.action.d.ts +5 -0
  23. package/dist/actions/data-flow/get.action.d.ts.map +1 -0
  24. package/dist/actions/data-flow/get.action.js +22 -0
  25. package/dist/actions/data-flow/get.action.js.map +1 -0
  26. package/dist/actions/data-flow/index.d.ts +9 -0
  27. package/dist/actions/data-flow/index.d.ts.map +1 -0
  28. package/dist/actions/data-flow/index.js +33 -0
  29. package/dist/actions/data-flow/index.js.map +1 -0
  30. package/dist/actions/data-flow/list.action.d.ts +6 -0
  31. package/dist/actions/data-flow/list.action.d.ts.map +1 -0
  32. package/dist/actions/data-flow/list.action.js +25 -0
  33. package/dist/actions/data-flow/list.action.js.map +1 -0
  34. package/dist/actions/data-flow/shared.d.ts +3 -0
  35. package/dist/actions/data-flow/shared.d.ts.map +1 -0
  36. package/dist/actions/data-flow/shared.js +16 -0
  37. package/dist/actions/data-flow/shared.js.map +1 -0
  38. package/dist/actions/data-flow/types.d.ts +21 -0
  39. package/dist/actions/data-flow/types.d.ts.map +1 -0
  40. package/dist/actions/data-flow/types.js +3 -0
  41. package/dist/actions/data-flow/types.js.map +1 -0
  42. package/dist/actions/data-flow/update.action.d.ts +16 -0
  43. package/dist/actions/data-flow/update.action.d.ts.map +1 -0
  44. package/dist/actions/data-flow/update.action.js +62 -0
  45. package/dist/actions/data-flow/update.action.js.map +1 -0
  46. package/dist/actions/data-flow.action.d.ts.map +1 -1
  47. package/dist/actions/data-flow.action.js +5 -9
  48. package/dist/actions/data-flow.action.js.map +1 -1
  49. package/dist/actions/event/index.d.ts +4 -0
  50. package/dist/actions/event/index.d.ts.map +1 -0
  51. package/dist/actions/event/index.js +23 -0
  52. package/dist/actions/event/index.js.map +1 -0
  53. package/dist/actions/event/on-skedulo.action.d.ts +4 -0
  54. package/dist/actions/event/on-skedulo.action.d.ts.map +1 -0
  55. package/dist/actions/event/on-skedulo.action.js +81 -0
  56. package/dist/actions/event/on-skedulo.action.js.map +1 -0
  57. package/dist/actions/event/on-vendor.action.d.ts +4 -0
  58. package/dist/actions/event/on-vendor.action.d.ts.map +1 -0
  59. package/dist/actions/event/on-vendor.action.js +39 -0
  60. package/dist/actions/event/on-vendor.action.js.map +1 -0
  61. package/dist/actions/event/types.d.ts +28 -0
  62. package/dist/actions/event/types.d.ts.map +1 -0
  63. package/dist/actions/event/types.js +3 -0
  64. package/dist/actions/event/types.js.map +1 -0
  65. package/dist/actions/event.action.d.ts +9 -4
  66. package/dist/actions/event.action.d.ts.map +1 -1
  67. package/dist/actions/event.action.js +57 -33
  68. package/dist/actions/event.action.js.map +1 -1
  69. package/dist/actions/metadata/get-fields.action.d.ts +5 -0
  70. package/dist/actions/metadata/get-fields.action.d.ts.map +1 -0
  71. package/dist/actions/metadata/get-fields.action.js +26 -0
  72. package/dist/actions/metadata/get-fields.action.js.map +1 -0
  73. package/dist/actions/metadata/get-objects.action.d.ts +5 -0
  74. package/dist/actions/metadata/get-objects.action.d.ts.map +1 -0
  75. package/dist/actions/metadata/get-objects.action.js +18 -0
  76. package/dist/actions/metadata/get-objects.action.js.map +1 -0
  77. package/dist/actions/metadata/get-sample-apis.action.d.ts +5 -0
  78. package/dist/actions/metadata/get-sample-apis.action.d.ts.map +1 -0
  79. package/dist/actions/metadata/get-sample-apis.action.js +19 -0
  80. package/dist/actions/metadata/get-sample-apis.action.js.map +1 -0
  81. package/dist/actions/metadata/get-sample-records.action.d.ts +5 -0
  82. package/dist/actions/metadata/get-sample-records.action.d.ts.map +1 -0
  83. package/dist/actions/metadata/get-sample-records.action.js +33 -0
  84. package/dist/actions/metadata/get-sample-records.action.js.map +1 -0
  85. package/dist/actions/metadata/get-templates.action.d.ts +5 -0
  86. package/dist/actions/metadata/get-templates.action.d.ts.map +1 -0
  87. package/dist/actions/metadata/get-templates.action.js +19 -0
  88. package/dist/actions/metadata/get-templates.action.js.map +1 -0
  89. package/dist/actions/metadata/index.d.ts +7 -0
  90. package/dist/actions/metadata/index.d.ts.map +1 -0
  91. package/dist/actions/metadata/index.js +29 -0
  92. package/dist/actions/metadata/index.js.map +1 -0
  93. package/dist/actions/metadata/shared.d.ts +6 -0
  94. package/dist/actions/metadata/shared.d.ts.map +1 -0
  95. package/dist/actions/metadata/shared.js +11 -0
  96. package/dist/actions/metadata/shared.js.map +1 -0
  97. package/dist/actions/metadata/types.d.ts +38 -0
  98. package/dist/actions/metadata/types.d.ts.map +1 -0
  99. package/dist/actions/metadata/types.js +3 -0
  100. package/dist/actions/metadata/types.js.map +1 -0
  101. package/dist/actions/scheduled-job/create.action.d.ts +5 -0
  102. package/dist/actions/scheduled-job/create.action.d.ts.map +1 -0
  103. package/dist/actions/scheduled-job/create.action.js +53 -0
  104. package/dist/actions/scheduled-job/create.action.js.map +1 -0
  105. package/dist/actions/scheduled-job/delete.action.d.ts +15 -0
  106. package/dist/actions/scheduled-job/delete.action.d.ts.map +1 -0
  107. package/dist/actions/scheduled-job/delete.action.js +42 -0
  108. package/dist/actions/scheduled-job/delete.action.js.map +1 -0
  109. package/dist/actions/scheduled-job/get.action.d.ts +7 -0
  110. package/dist/actions/scheduled-job/get.action.d.ts.map +1 -0
  111. package/dist/actions/scheduled-job/get.action.js +23 -0
  112. package/dist/actions/scheduled-job/get.action.js.map +1 -0
  113. package/dist/actions/scheduled-job/index.d.ts +7 -0
  114. package/dist/actions/scheduled-job/index.d.ts.map +1 -0
  115. package/dist/actions/scheduled-job/index.js +29 -0
  116. package/dist/actions/scheduled-job/index.js.map +1 -0
  117. package/dist/actions/scheduled-job/list.action.d.ts +5 -0
  118. package/dist/actions/scheduled-job/list.action.d.ts.map +1 -0
  119. package/dist/actions/scheduled-job/list.action.js +18 -0
  120. package/dist/actions/scheduled-job/list.action.js.map +1 -0
  121. package/dist/actions/scheduled-job/shared.d.ts +30 -0
  122. package/dist/actions/scheduled-job/shared.d.ts.map +1 -0
  123. package/dist/actions/scheduled-job/shared.js +129 -0
  124. package/dist/actions/scheduled-job/shared.js.map +1 -0
  125. package/dist/actions/scheduled-job/types.d.ts +23 -0
  126. package/dist/actions/scheduled-job/types.d.ts.map +1 -0
  127. package/dist/actions/scheduled-job/types.js +3 -0
  128. package/dist/actions/scheduled-job/types.js.map +1 -0
  129. package/dist/actions/scheduled-job/update.action.d.ts +5 -0
  130. package/dist/actions/scheduled-job/update.action.d.ts.map +1 -0
  131. package/dist/actions/scheduled-job/update.action.js +64 -0
  132. package/dist/actions/scheduled-job/update.action.js.map +1 -0
  133. package/dist/actions/scheduled-job.action.d.ts +73 -0
  134. package/dist/actions/scheduled-job.action.d.ts.map +1 -0
  135. package/dist/actions/scheduled-job.action.js +355 -0
  136. package/dist/actions/scheduled-job.action.js.map +1 -0
  137. package/dist/actions/setup.action.js +1 -1
  138. package/dist/actions/setup.action.js.map +1 -1
  139. package/dist/actions/sync/index.d.ts +4 -0
  140. package/dist/actions/sync/index.d.ts.map +1 -0
  141. package/dist/actions/sync/index.js +23 -0
  142. package/dist/actions/sync/index.js.map +1 -0
  143. package/dist/actions/sync/run-flow.action.d.ts +8 -0
  144. package/dist/actions/sync/run-flow.action.d.ts.map +1 -0
  145. package/dist/actions/sync/run-flow.action.js +81 -0
  146. package/dist/actions/sync/run-flow.action.js.map +1 -0
  147. package/dist/actions/sync/run-job.action.d.ts +11 -0
  148. package/dist/actions/sync/run-job.action.d.ts.map +1 -0
  149. package/dist/actions/sync/run-job.action.js +75 -0
  150. package/dist/actions/sync/run-job.action.js.map +1 -0
  151. package/dist/actions/sync/types.d.ts +41 -0
  152. package/dist/actions/sync/types.d.ts.map +1 -0
  153. package/dist/actions/sync/types.js +3 -0
  154. package/dist/actions/sync/types.js.map +1 -0
  155. package/dist/actions/sync.action.d.ts +8 -47
  156. package/dist/actions/sync.action.d.ts.map +1 -1
  157. package/dist/actions/sync.action.js +30 -150
  158. package/dist/actions/sync.action.js.map +1 -1
  159. package/dist/actions/utils/action-names.d.ts +23 -4
  160. package/dist/actions/utils/action-names.d.ts.map +1 -1
  161. package/dist/actions/utils/action-names.js +23 -4
  162. package/dist/actions/utils/action-names.js.map +1 -1
  163. package/dist/actions/utils/define-action.d.ts +36 -0
  164. package/dist/actions/utils/define-action.d.ts.map +1 -0
  165. package/dist/actions/utils/define-action.js +43 -0
  166. package/dist/actions/utils/define-action.js.map +1 -0
  167. package/dist/actions/utils/errors.d.ts +54 -8
  168. package/dist/actions/utils/errors.d.ts.map +1 -1
  169. package/dist/actions/utils/errors.js +104 -14
  170. package/dist/actions/utils/errors.js.map +1 -1
  171. package/dist/actions/utils/helpers.d.ts.map +1 -1
  172. package/dist/actions/utils/helpers.js +2 -1
  173. package/dist/actions/utils/helpers.js.map +1 -1
  174. package/dist/actions/utils/metrics.d.ts +12 -0
  175. package/dist/actions/utils/metrics.d.ts.map +1 -0
  176. package/dist/actions/utils/metrics.js +12 -0
  177. package/dist/actions/utils/metrics.js.map +1 -0
  178. package/dist/actions/utils/middleware.d.ts +39 -0
  179. package/dist/actions/utils/middleware.d.ts.map +1 -0
  180. package/dist/actions/utils/middleware.js +85 -0
  181. package/dist/actions/utils/middleware.js.map +1 -0
  182. package/dist/actions/utils/types.d.ts +18 -6
  183. package/dist/actions/utils/types.d.ts.map +1 -1
  184. package/dist/adapters/base-adapter-handler.d.ts +10 -0
  185. package/dist/adapters/base-adapter-handler.d.ts.map +1 -1
  186. package/dist/adapters/base-adapter-handler.js +30 -33
  187. package/dist/adapters/base-adapter-handler.js.map +1 -1
  188. package/dist/browser.d.ts +2 -0
  189. package/dist/browser.d.ts.map +1 -1
  190. package/dist/browser.js +3 -1
  191. package/dist/browser.js.map +1 -1
  192. package/dist/clients/integration-config.client.d.ts +21 -0
  193. package/dist/clients/integration-config.client.d.ts.map +1 -0
  194. package/dist/clients/integration-config.client.js +44 -0
  195. package/dist/clients/integration-config.client.js.map +1 -0
  196. package/dist/context.d.ts +18 -3
  197. package/dist/context.d.ts.map +1 -1
  198. package/dist/context.js +21 -5
  199. package/dist/context.js.map +1 -1
  200. package/dist/index.d.ts +11 -0
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +30 -1
  203. package/dist/index.js.map +1 -1
  204. package/dist/interfaces/data-flow-spec.interface.d.ts +14 -21
  205. package/dist/interfaces/data-flow-spec.interface.d.ts.map +1 -1
  206. package/dist/interfaces/data-flow-spec.interface.js +10 -26
  207. package/dist/interfaces/data-flow-spec.interface.js.map +1 -1
  208. package/dist/interfaces/integration-capabilities.interface.d.ts +2 -2
  209. package/dist/interfaces/scheduled-job.interface.d.ts +40 -0
  210. package/dist/interfaces/scheduled-job.interface.d.ts.map +1 -0
  211. package/dist/interfaces/scheduled-job.interface.js +38 -0
  212. package/dist/interfaces/scheduled-job.interface.js.map +1 -0
  213. package/dist/services/dataflow.service.d.ts +13 -6
  214. package/dist/services/dataflow.service.d.ts.map +1 -1
  215. package/dist/services/dataflow.service.js +34 -57
  216. package/dist/services/dataflow.service.js.map +1 -1
  217. package/dist/services/sync-runner.d.ts +7 -0
  218. package/dist/services/sync-runner.d.ts.map +1 -1
  219. package/dist/services/sync-runner.js +38 -45
  220. package/dist/services/sync-runner.js.map +1 -1
  221. package/dist/types.d.ts +2 -0
  222. package/dist/types.d.ts.map +1 -1
  223. package/dist/types.js +4 -1
  224. package/dist/types.js.map +1 -1
  225. package/dist/utils/artifact-builder.d.ts +41 -16
  226. package/dist/utils/artifact-builder.d.ts.map +1 -1
  227. package/dist/utils/artifact-builder.js +93 -18
  228. package/dist/utils/artifact-builder.js.map +1 -1
  229. 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.buildScheduledWebhookArtifact = buildScheduledWebhookArtifact;
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 MAX_NAME_LENGTH = 100;
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 100 chars (we don't truncate, since collisions
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 > MAX_NAME_LENGTH) {
32
- throw new Error(`buildArtifactName produced a name of ${name.length} characters (max ${MAX_NAME_LENGTH}): "${name}"`);
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 → fall back to `*\/n * * * *` (cron itself rejects > 59 in min field;
42
- * callers should pass a divisor of 60 for n >= 60)
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
- return `*/${intervalMinutes} * * * *`;
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
- function buildScheduledWebhookArtifact(opts) {
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.name,
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]: opts.action,
86
- 'sked-data-flow-id': String(opts.dataFlowId),
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
  };
@@ -104,7 +172,7 @@ function buildTriggeredActionArtifact(opts) {
104
172
  headers: {
105
173
  Authorization: ADMIN_AUTH_HEADER,
106
174
  [action_names_1.ACTION_HEADER]: action_names_1.ACTIONS.event.onSkedulo,
107
- 'sked-data-flow-id': String(opts.dataFlowId),
175
+ [action_names_1.DATA_FLOW_ID_HEADER]: String(opts.dataFlowId),
108
176
  },
109
177
  query: opts.query,
110
178
  },
@@ -112,17 +180,24 @@ function buildTriggeredActionArtifact(opts) {
112
180
  }
113
181
  // ── Upsert / delete helpers ──────────────────────────────────────────────────
114
182
  /**
115
- * Idempotent upsert: try `get` then `update`; on any error (including not-found)
116
- * fall back to `create`. The PSS artifact API is name-keyed, so this collapses
117
- * "create" and "replace" into a single safe call.
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 (_a) {
125
- await client.create({ name }, artifact);
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":"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"}
1
+ {"version":3,"file":"artifact-builder.js","sourceRoot":"","sources":["../../src/utils/artifact-builder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skedulo/integration-sdk",
3
- "version": "0.3.3",
3
+ "version": "0.4.0",
4
4
  "description": "Runtime SDK for Skedulo integration data flows",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",