@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
@@ -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. Two-phase fail-closed semantics:
26
- * 1. Upsert the PSS artifact (Webhook or TriggeredAction) under a deterministic name.
27
- * 2. PATCH `triggerConfig.sync_config` on IS (records the artifact), then mark IS ACTIVE.
28
- * If step 2 fails the artifact is compensatingly deleted.
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`. Deletes the PSS artifact (404-tolerant), transitions
33
- * IS to INACTIVE, and clears the artifact reference from `sync_config`.
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;AAIrD,OAAO,EAIL,KAAK,QAAQ,EAEd,MAAM,wCAAwC,CAAC;AAmBhD,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;;;;;OAKG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA6EtE;;;OAGG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAgCzE"}
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. Two-phase fail-closed semantics:
77
- * 1. Upsert the PSS artifact (Webhook or TriggeredAction) under a deterministic name.
78
- * 2. PATCH `triggerConfig.sync_config` on IS (records the artifact), then mark IS ACTIVE.
79
- * If step 2 fails the artifact is compensatingly deleted.
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, _b;
80
+ var _a;
83
81
  const flow = await this.client.getById(id);
84
82
  if (!flow) {
85
- throw new errors_1.ActionError('FLOW_NOT_FOUND', `Flow ${id} not found`);
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
- throw new errors_1.ActionError('MISSING_SYNC_STRATEGY', `Flow ${id} has no valid sync strategy in triggerConfig`);
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
- let kind;
100
- let artifactType;
101
- let artifact;
102
- if (sc.strategy === data_flow_spec_interface_1.SyncStrategy.SCHEDULED) {
103
- // Direction decides push vs pull: outbound (Skedulo source) pushes to the
104
- // vendor; inbound pulls from it.
105
- const isOutbound = flow.sourceSystem === constants_1.SKEDULO_SYSTEM;
106
- kind = data_flow_spec_interface_1.TriggerType.WEBHOOK;
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. This
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: kind }),
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 (_c) {
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`. Deletes the PSS artifact (404-tolerant), transitions
154
- * IS to INACTIVE, and clears the artifact reference from `sync_config`.
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.ActionError('FLOW_NOT_FOUND', `Flow ${id} not found`);
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 artifactType = sc.trigger_type === data_flow_spec_interface_1.TriggerType.WEBHOOK
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/interval.
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":"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"}
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;AAC/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;AA+B/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;QACnB,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;IA8DjB,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;IA0CxB,OAAO,CAAC,QAAQ;CAejB"}
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
- // SyncRunner is the high-level entry point for integration packages.
11
- //
12
- // It owns:
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: prefer flow.lastRunAt over caller-supplied since.
73
- // When lastRunAt is set, args.since is ignored entirely.
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
- try {
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":"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"}
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';
@@ -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 { ACTIONS } from '../actions/utils/action-names';
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 100 chars (we don't truncate, since collisions
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 → fall back to `*\/n * * * *` (cron itself rejects > 59 in min field;
19
- * callers should pass a divisor of 60 for n >= 60)
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 BuildScheduledWebhookOpts {
30
- name: string;
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
- export declare function buildScheduledWebhookArtifact(opts: BuildScheduledWebhookOpts): {
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.push" | "sync.scheduled-pull";
49
- 'sked-data-flow-id': string;
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
- 'sked-data-flow-id': string;
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`; on any error (including not-found)
86
- * fall back to `create`. The PSS artifact API is name-keyed, so this collapses
87
- * "create" and "replace" into a single safe call.
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,EAAiB,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAWvE;;;;;;;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,CAQrE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAUxD;AAMD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,MAAM,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,yBAAyB;;;;;;;;;;;;;;;EAe5E;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;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhG"}
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"}