@skedulo/integration-sdk 0.9.1 → 0.11.0-rc.1

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 (114) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/actions/action-registry.d.ts.map +1 -1
  3. package/dist/actions/action-registry.js +1 -0
  4. package/dist/actions/action-registry.js.map +1 -1
  5. package/dist/actions/data-flow.action.d.ts +62 -0
  6. package/dist/actions/data-flow.action.d.ts.map +1 -0
  7. package/dist/actions/data-flow.action.js +217 -0
  8. package/dist/actions/data-flow.action.js.map +1 -0
  9. package/dist/actions/event.action.d.ts +32 -0
  10. package/dist/actions/event.action.d.ts.map +1 -0
  11. package/dist/actions/event.action.js +113 -0
  12. package/dist/actions/event.action.js.map +1 -0
  13. package/dist/actions/metadata.action.d.ts +44 -0
  14. package/dist/actions/metadata.action.d.ts.map +1 -0
  15. package/dist/actions/metadata.action.js +96 -0
  16. package/dist/actions/metadata.action.js.map +1 -0
  17. package/dist/actions/scheduled-job.action.d.ts +73 -0
  18. package/dist/actions/scheduled-job.action.d.ts.map +1 -0
  19. package/dist/actions/scheduled-job.action.js +355 -0
  20. package/dist/actions/scheduled-job.action.js.map +1 -0
  21. package/dist/actions/sync/index.d.ts +1 -0
  22. package/dist/actions/sync/index.d.ts.map +1 -1
  23. package/dist/actions/sync/index.js +3 -1
  24. package/dist/actions/sync/index.js.map +1 -1
  25. package/dist/actions/sync/retry-failed.action.d.ts +10 -0
  26. package/dist/actions/sync/retry-failed.action.d.ts.map +1 -0
  27. package/dist/actions/sync/retry-failed.action.js +61 -0
  28. package/dist/actions/sync/retry-failed.action.js.map +1 -0
  29. package/dist/actions/sync/types.d.ts +11 -0
  30. package/dist/actions/sync/types.d.ts.map +1 -1
  31. package/dist/actions/sync.action.d.ts +26 -0
  32. package/dist/actions/sync.action.d.ts.map +1 -0
  33. package/dist/actions/sync.action.js +81 -0
  34. package/dist/actions/sync.action.js.map +1 -0
  35. package/dist/actions/utils/action-names.d.ts +1 -0
  36. package/dist/actions/utils/action-names.d.ts.map +1 -1
  37. package/dist/actions/utils/action-names.js +1 -0
  38. package/dist/actions/utils/action-names.js.map +1 -1
  39. package/dist/adapters/capabilities-defaults.d.ts.map +1 -1
  40. package/dist/adapters/capabilities-defaults.js +7 -1
  41. package/dist/adapters/capabilities-defaults.js.map +1 -1
  42. package/dist/adapters/skedulo-mutation-result.d.ts +18 -0
  43. package/dist/adapters/skedulo-mutation-result.d.ts.map +1 -0
  44. package/dist/adapters/skedulo-mutation-result.js +124 -0
  45. package/dist/adapters/skedulo-mutation-result.js.map +1 -0
  46. package/dist/adapters/skedulo.adapter.d.ts +5 -0
  47. package/dist/adapters/skedulo.adapter.d.ts.map +1 -1
  48. package/dist/adapters/skedulo.adapter.js +140 -17
  49. package/dist/adapters/skedulo.adapter.js.map +1 -1
  50. package/dist/clients/failed-record.client.d.ts +37 -0
  51. package/dist/clients/failed-record.client.d.ts.map +1 -0
  52. package/dist/clients/failed-record.client.js +48 -0
  53. package/dist/clients/failed-record.client.js.map +1 -0
  54. package/dist/context.d.ts +3 -0
  55. package/dist/context.d.ts.map +1 -1
  56. package/dist/context.js +5 -0
  57. package/dist/context.js.map +1 -1
  58. package/dist/interfaces/adapter.interface.d.ts +28 -0
  59. package/dist/interfaces/adapter.interface.d.ts.map +1 -1
  60. package/dist/interfaces/integration-capabilities.interface.d.ts +22 -0
  61. package/dist/interfaces/integration-capabilities.interface.d.ts.map +1 -1
  62. package/dist/interfaces/sync-pipeline.interface.d.ts +11 -0
  63. package/dist/interfaces/sync-pipeline.interface.d.ts.map +1 -1
  64. package/dist/interfaces/sync-result.interface.d.ts +2 -0
  65. package/dist/interfaces/sync-result.interface.d.ts.map +1 -1
  66. package/dist/services/artifact-builder.d.ts +95 -0
  67. package/dist/services/artifact-builder.d.ts.map +1 -0
  68. package/dist/services/artifact-builder.js +142 -0
  69. package/dist/services/artifact-builder.js.map +1 -0
  70. package/dist/services/external-id-sync.strategy.d.ts.map +1 -1
  71. package/dist/services/external-id-sync.strategy.js +23 -24
  72. package/dist/services/external-id-sync.strategy.js.map +1 -1
  73. package/dist/services/id-mapping-sync.strategy.d.ts +1 -0
  74. package/dist/services/id-mapping-sync.strategy.d.ts.map +1 -1
  75. package/dist/services/id-mapping-sync.strategy.js +100 -30
  76. package/dist/services/id-mapping-sync.strategy.js.map +1 -1
  77. package/dist/services/id-mapping.service.d.ts +2 -0
  78. package/dist/services/id-mapping.service.d.ts.map +1 -1
  79. package/dist/services/id-mapping.service.js +57 -2
  80. package/dist/services/id-mapping.service.js.map +1 -1
  81. package/dist/services/run-log-builder.d.ts +4 -5
  82. package/dist/services/run-log-builder.d.ts.map +1 -1
  83. package/dist/services/run-log-builder.js +7 -7
  84. package/dist/services/run-log-builder.js.map +1 -1
  85. package/dist/services/sync-pipeline-errors.d.ts +24 -0
  86. package/dist/services/sync-pipeline-errors.d.ts.map +1 -0
  87. package/dist/services/sync-pipeline-errors.js +52 -0
  88. package/dist/services/sync-pipeline-errors.js.map +1 -0
  89. package/dist/services/sync-runner.d.ts +15 -0
  90. package/dist/services/sync-runner.d.ts.map +1 -1
  91. package/dist/services/sync-runner.js +246 -9
  92. package/dist/services/sync-runner.js.map +1 -1
  93. package/dist/services/sync.service.d.ts +3 -0
  94. package/dist/services/sync.service.d.ts.map +1 -1
  95. package/dist/services/sync.service.js +60 -0
  96. package/dist/services/sync.service.js.map +1 -1
  97. package/package.json +1 -1
  98. package/.claude/worktrees/agent-a16acadaf5412dffd/jest.config.js +0 -12
  99. package/.claude/worktrees/agent-a33c3e4636d488e49/jest.config.js +0 -12
  100. package/.claude/worktrees/agent-a5b1d2ffa4ceef4a6/jest.config.js +0 -12
  101. package/.claude/worktrees/agent-aa1db4c22eabbde8e/jest.config.js +0 -12
  102. package/.claude/worktrees/agent-ac197ae8c69d7061c/jest.config.js +0 -12
  103. package/dist/handlers/metadata.handler.d.ts +0 -17
  104. package/dist/handlers/metadata.handler.d.ts.map +0 -1
  105. package/dist/handlers/metadata.handler.js +0 -50
  106. package/dist/handlers/metadata.handler.js.map +0 -1
  107. package/dist/utils/normalizeDataFlow.d.ts +0 -3
  108. package/dist/utils/normalizeDataFlow.d.ts.map +0 -1
  109. package/dist/utils/normalizeDataFlow.js +0 -37
  110. package/dist/utils/normalizeDataFlow.js.map +0 -1
  111. package/dist/utils.d.ts +0 -2
  112. package/dist/utils.d.ts.map +0 -1
  113. package/dist/utils.js +0 -10
  114. package/dist/utils.js.map +0 -1
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeRetryFailedAction = makeRetryFailedAction;
4
+ const sync_runner_1 = require("../../services/sync-runner");
5
+ const action_names_1 = require("../utils/action-names");
6
+ const helpers_1 = require("../utils/helpers");
7
+ const errors_1 = require("../utils/errors");
8
+ const define_action_1 = require("../utils/define-action");
9
+ /**
10
+ * Retry specific failed records for a flow. Admin-only. Takes the source-system ids the
11
+ * caller already holds (from the failed-records list), re-fetches those records via the
12
+ * adapter's `fetchByIds` — current state, so a source-side fix takes effect — re-runs the
13
+ * pipeline, then reconciles: resolve the ones that now pass, re-record the ones that still fail.
14
+ */
15
+ function makeRetryFailedAction(deps) {
16
+ return (0, define_action_1.defineAction)({
17
+ name: action_names_1.ACTIONS.sync.retryFailed,
18
+ requireAdmin: true,
19
+ parseInput(raw) {
20
+ const obj = (raw !== null && raw !== void 0 ? raw : {});
21
+ if (!Number.isInteger(obj.flowId) || obj.flowId <= 0) {
22
+ throw new errors_1.InvalidInputError('flowId must be a positive integer');
23
+ }
24
+ // `recordIds` is a transitional alias: the pre-rename UI sends source ids under that key.
25
+ const ids = Array.isArray(obj.sourceIds) ? obj.sourceIds : obj.recordIds;
26
+ if (!Array.isArray(ids) || ids.length === 0) {
27
+ throw new errors_1.InvalidInputError('sourceIds must be a non-empty array');
28
+ }
29
+ // Dedupe: the reconcile upserts one failed-record row per source id, and the store
30
+ // rejects two conflicting (flow, source_id) rows in a single statement.
31
+ return { flowId: obj.flowId, sourceIds: [...new Set(ids.map((id) => String(id)))] };
32
+ },
33
+ async handler(input, ctx) {
34
+ var _a;
35
+ const flow = await ctx.dataFlowService.getFlowById(input.flowId);
36
+ if (!flow) {
37
+ throw new errors_1.NotFoundError('FLOW_NOT_FOUND', `Flow ${input.flowId} not found`);
38
+ }
39
+ // Retry re-fetches each record's current state from the flow's SOURCE, so that adapter must
40
+ // implement fetchByIds — the vendor for inbound flows, Skedulo for outbound. Reject with a
41
+ // typed 501 when the source can't re-fetch (rather than a bare AdapterRoleError → 500).
42
+ let source;
43
+ try {
44
+ source = flow.sourceSystem ? deps.registry.resolve(flow.sourceSystem) : undefined;
45
+ }
46
+ catch (_b) {
47
+ source = undefined;
48
+ }
49
+ if (typeof (source === null || source === void 0 ? void 0 : source.fetchByIds) !== 'function') {
50
+ throw new errors_1.NotImplementedError(`Retry is not supported for flow ${input.flowId}: its source (${(_a = flow.sourceSystem) !== null && _a !== void 0 ? _a : 'unknown'}) can't re-fetch records`);
51
+ }
52
+ const summary = await new sync_runner_1.SyncRunner(deps.registry).retryRecords({
53
+ flowId: input.flowId,
54
+ sourceIds: input.sourceIds,
55
+ options: { lookupStrategy: (0, helpers_1.resolveLookupStrategy)(deps.adapter) },
56
+ }, ctx);
57
+ return Object.assign({ flowId: input.flowId }, summary);
58
+ },
59
+ });
60
+ }
61
+ //# sourceMappingURL=retry-failed.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-failed.action.js","sourceRoot":"","sources":["../../../src/actions/sync/retry-failed.action.ts"],"names":[],"mappings":";;AAcA,sDAiDC;AA/DD,4DAAwD;AACxD,wDAAgD;AAChD,8CAAyD;AACzD,4CAAwF;AACxF,0DAAsD;AAItD;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,IAAc;IAClD,OAAO,IAAA,4BAAY,EAAsC;QACvD,IAAI,EAAE,sBAAO,CAAC,IAAI,CAAC,WAAW;QAC9B,YAAY,EAAE,IAAI;QAClB,UAAU,CAAC,GAAG;YACZ,MAAM,GAAG,GAAG,CAAC,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,EAAE,CAA4B,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAK,GAAG,CAAC,MAAiB,IAAI,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,0BAAiB,CAAC,mCAAmC,CAAC,CAAC;YACnE,CAAC;YACD,0FAA0F;YAC1F,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;YACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,0BAAiB,CAAC,qCAAqC,CAAC,CAAC;YACrE,CAAC;YACD,mFAAmF;YACnF,wEAAwE;YACxE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAgB,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;;YACtB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,sBAAa,CAAC,gBAAgB,EAAE,QAAQ,KAAK,CAAC,MAAM,YAAY,CAAC,CAAC;YAC9E,CAAC;YACD,4FAA4F;YAC5F,2FAA2F;YAC3F,wFAAwF;YACxF,IAAI,MAAM,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpF,CAAC;YAAC,WAAM,CAAC;gBACP,MAAM,GAAG,SAAS,CAAC;YACrB,CAAC;YACD,IAAI,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAA,KAAK,UAAU,EAAE,CAAC;gBAC7C,MAAM,IAAI,4BAAmB,CAC3B,mCAAmC,KAAK,CAAC,MAAM,iBAAiB,MAAA,IAAI,CAAC,YAAY,mCAAI,SAAS,0BAA0B,CACzH,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,wBAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAC9D;gBACE,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,EAAE,cAAc,EAAE,IAAA,+BAAqB,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE;aACjE,EACD,GAAG,CACJ,CAAC;YACF,uBAAS,MAAM,EAAE,KAAK,CAAC,MAAM,IAAK,OAAO,EAAG;QAC9C,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -17,6 +17,17 @@ export type RunFlowOutput = {
17
17
  runId: string;
18
18
  flowId: number;
19
19
  } & RunCounts;
20
+ export interface RetryFailedInput {
21
+ flowId: number;
22
+ /** Source-system record ids to retry — re-fetched via the adapter's fetchByIds. */
23
+ sourceIds: string[];
24
+ }
25
+ export interface RetryFailedOutput {
26
+ flowId: number;
27
+ requested: number;
28
+ succeeded: number;
29
+ failed: number;
30
+ }
20
31
  export interface RunJobInput {
21
32
  webhookName: string;
22
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/actions/sync/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,MAAM,QAAQ,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC;AAIvE,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,iBAAiB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAC3C,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC,SAAS,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/actions/sync/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,MAAM,QAAQ,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC;AAIvE,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AACD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,iBAAiB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAC3C,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC,SAAS,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B"}
@@ -0,0 +1,26 @@
1
+ import type { Adapter } from '../interfaces/adapter.interface';
2
+ import type { AdapterRegistry } from '../adapters/adapter-registry';
3
+ import type { BatchResult } from '../interfaces/sync-result.interface';
4
+ import type { Action } from './utils/types';
5
+ type SyncDeps = {
6
+ adapter: Adapter;
7
+ registry: AdapterRegistry;
8
+ };
9
+ export interface RunFlowInput {
10
+ flowId: number;
11
+ /** Manual backfill: sync from this time, overriding the persisted cursor. */
12
+ since?: Date;
13
+ /** Manual full resync: ignore the persisted cursor and pull everything. */
14
+ fullResync?: boolean;
15
+ }
16
+ export type RunFlowOutput = {
17
+ runId: string;
18
+ flowId: number;
19
+ } & BatchResult;
20
+ /**
21
+ * Manually run a single flow. Admin-only. Supports a one-off backfill (`since`)
22
+ * or full resync (`fullResync`) that overrides the persisted cursor.
23
+ */
24
+ export declare function makeRunFlowAction(deps: SyncDeps): Action<RunFlowInput, RunFlowOutput>;
25
+ export {};
26
+ //# sourceMappingURL=sync.action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.action.d.ts","sourceRoot":"","sources":["../../src/actions/sync.action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAOvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,KAAK,QAAQ,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC;AAahE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAC;AAa5E;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAoDrF"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeRunFlowAction = makeRunFlowAction;
4
+ const crypto_1 = require("crypto");
5
+ const constants_1 = require("../constants");
6
+ const sync_runner_1 = require("../services/sync-runner");
7
+ const helpers_1 = require("../utils/helpers");
8
+ const action_names_1 = require("./utils/action-names");
9
+ const helpers_2 = require("./utils/helpers");
10
+ const errors_1 = require("./utils/errors");
11
+ function parsePositiveInt(raw, field) {
12
+ const obj = (raw !== null && raw !== void 0 ? raw : {});
13
+ const v = obj[field];
14
+ if (!Number.isInteger(v) || v <= 0) {
15
+ throw new errors_1.InvalidInputError(`${field} must be a positive integer`);
16
+ }
17
+ return v;
18
+ }
19
+ function parseSinceDate(value) {
20
+ if (typeof value !== 'string') {
21
+ throw new errors_1.InvalidInputError('since must be an ISO date-time string');
22
+ }
23
+ const date = new Date(value);
24
+ if (Number.isNaN(date.getTime())) {
25
+ throw new errors_1.InvalidInputError(`since is not a valid date-time: "${value}"`);
26
+ }
27
+ return date;
28
+ }
29
+ /**
30
+ * Manually run a single flow. Admin-only. Supports a one-off backfill (`since`)
31
+ * or full resync (`fullResync`) that overrides the persisted cursor.
32
+ */
33
+ function makeRunFlowAction(deps) {
34
+ return {
35
+ name: action_names_1.ACTIONS.sync.runFlow,
36
+ parseInput(raw) {
37
+ const obj = (raw !== null && raw !== void 0 ? raw : {});
38
+ const input = { flowId: parsePositiveInt(raw, 'flowId') };
39
+ // fullResync takes precedence over since when both are supplied.
40
+ if (obj.fullResync === true) {
41
+ input.fullResync = true;
42
+ }
43
+ else if (obj.since !== undefined) {
44
+ input.since = parseSinceDate(obj.since);
45
+ }
46
+ return input;
47
+ },
48
+ async handler(input, ctx) {
49
+ var _a, _b;
50
+ if (!(0, helpers_1.isAdminRequest)(ctx.skedContext)) {
51
+ throw new errors_1.ActionError('FORBIDDEN', 'runFlow requires admin privileges');
52
+ }
53
+ const integrationType = deps.adapter.integrationType;
54
+ const lookupStrategy = (0, helpers_2.resolveLookupStrategy)(deps.adapter);
55
+ const runId = (0, crypto_1.randomUUID)();
56
+ const flow = await ctx.dataFlowService.getFlowById(input.flowId);
57
+ if (!flow) {
58
+ throw new errors_1.ActionError('FLOW_NOT_FOUND', `Flow ${input.flowId} not found`);
59
+ }
60
+ // overrideSince: undefined = normal resume, null = full resync, Date = backfill from time.
61
+ const overrideSince = input.fullResync ? null : input.since;
62
+ ctx.logger.info(`[run-flow] flowId=${input.flowId} runId=${runId} starting` +
63
+ (overrideSince === null
64
+ ? ' (full resync)'
65
+ : overrideSince
66
+ ? ` (backfill since ${overrideSince.toISOString()})`
67
+ : ''));
68
+ const stats = await new sync_runner_1.SyncRunner(deps.registry).run({
69
+ flowId: input.flowId,
70
+ since: null,
71
+ overrideSince,
72
+ sourceSystem: (_a = flow.sourceSystem) !== null && _a !== void 0 ? _a : integrationType,
73
+ targetSystem: (_b = flow.targetSystem) !== null && _b !== void 0 ? _b : constants_1.SKEDULO_SYSTEM,
74
+ options: { lookupStrategy },
75
+ }, ctx);
76
+ ctx.logger.info(`[run-flow] done: ${JSON.stringify(stats)}`);
77
+ return Object.assign({ runId, flowId: input.flowId }, stats);
78
+ },
79
+ };
80
+ }
81
+ //# sourceMappingURL=sync.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.action.js","sourceRoot":"","sources":["../../src/actions/sync.action.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ export declare const ACTIONS: Readonly<{
39
39
  readonly sync: Readonly<{
40
40
  runFlow: "sync.run-flow";
41
41
  runJob: "sync.run-job";
42
+ retryFailed: "sync.retry-failed";
42
43
  }>;
43
44
  readonly scheduledJob: Readonly<{
44
45
  create: "scheduled-job.create";
@@ -1 +1 @@
1
- {"version":3,"file":"action-names.d.ts","sourceRoot":"","sources":["../../../src/actions/utils/action-names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,aAAa,4BAA4B,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCT,CAAC;AAEZ,MAAM,MAAM,UAAU,GAClB,OAAO,OAAO,CAAC,YAAY,GAC3B,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC,GAClD,CAAC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,QAAQ,CAAC,GACxD,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,GAChD,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,YAAY,CAAC,GAChE,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC,GAClD,CAAC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"action-names.d.ts","sourceRoot":"","sources":["../../../src/actions/utils/action-names.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,aAAa,4BAA4B,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCT,CAAC;AAEZ,MAAM,MAAM,UAAU,GAClB,OAAO,OAAO,CAAC,YAAY,GAC3B,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC,GAClD,CAAC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,QAAQ,CAAC,GACxD,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,GAChD,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,YAAY,CAAC,GAChE,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC,GAClD,CAAC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC"}
@@ -42,6 +42,7 @@ exports.ACTIONS = Object.freeze({
42
42
  sync: Object.freeze({
43
43
  runFlow: 'sync.run-flow',
44
44
  runJob: 'sync.run-job',
45
+ retryFailed: 'sync.retry-failed',
45
46
  }),
46
47
  scheduledJob: Object.freeze({
47
48
  create: 'scheduled-job.create',
@@ -1 +1 @@
1
- {"version":3,"file":"action-names.js","sourceRoot":"","sources":["../../../src/actions/utils/action-names.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,aAAa,GAAG,yBAAyB,CAAC;AAEvD;;;;;GAKG;AACU,QAAA,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD;;;;;GAKG;AACU,QAAA,yBAAyB,GAAG,yBAAyB,CAAC;AAEnE;;;;;GAKG;AACU,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,YAAY,EAAE,cAAc;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,cAAc;KACvB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,UAAU,EAAE,sBAAsB;QAClC,SAAS,EAAE,qBAAqB;QAChC,YAAY,EAAE,wBAAwB;QACtC,aAAa,EAAE,0BAA0B;QACzC,gBAAgB,EAAE,6BAA6B;KAChD,CAAC;IACF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,eAAe;QACxB,MAAM,EAAE,cAAc;KACvB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1B,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,sBAAsB;QAC9B,IAAI,EAAE,oBAAoB;QAC1B,GAAG,EAAE,mBAAmB;KACzB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,kBAAkB;QAC7B,QAAQ,EAAE,iBAAiB;KAC5B,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,oBAAoB;QAC9B,UAAU,EAAE,sBAAsB;QAClC,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,mBAAmB;KAC7B,CAAC;CACM,CAAC,CAAC"}
1
+ {"version":3,"file":"action-names.js","sourceRoot":"","sources":["../../../src/actions/utils/action-names.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,aAAa,GAAG,yBAAyB,CAAC;AAEvD;;;;;GAKG;AACU,QAAA,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD;;;;;GAKG;AACU,QAAA,yBAAyB,GAAG,yBAAyB,CAAC;AAEnE;;;;;GAKG;AACU,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,YAAY,EAAE,cAAc;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,cAAc;KACvB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,UAAU,EAAE,sBAAsB;QAClC,SAAS,EAAE,qBAAqB;QAChC,YAAY,EAAE,wBAAwB;QACtC,aAAa,EAAE,0BAA0B;QACzC,gBAAgB,EAAE,6BAA6B;KAChD,CAAC;IACF,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,eAAe;QACxB,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,mBAAmB;KACjC,CAAC;IACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1B,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,sBAAsB;QAC9B,IAAI,EAAE,oBAAoB;QAC1B,GAAG,EAAE,mBAAmB;KACzB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,kBAAkB;QAC7B,QAAQ,EAAE,iBAAiB;KAC5B,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,oBAAoB;QAC9B,UAAU,EAAE,sBAAsB;QAClC,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,mBAAmB;KAC7B,CAAC;CACM,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities-defaults.d.ts","sourceRoot":"","sources":["../../src/adapters/capabilities-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGpF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAsBzE"}
1
+ {"version":3,"file":"capabilities-defaults.d.ts","sourceRoot":"","sources":["../../src/adapters/capabilities-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGpF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CA8BzE"}
@@ -30,14 +30,20 @@ function resolveCapabilities(adapter) {
30
30
  const isTarget = roles.includes(constants_1.AdapterRole.TARGET);
31
31
  const outbound = (_c = (_b = caps === null || caps === void 0 ? void 0 : caps.realtime) === null || _b === void 0 ? void 0 : _b.outbound) !== null && _c !== void 0 ? _c : isTarget;
32
32
  const inbound = (_e = (_d = caps === null || caps === void 0 ? void 0 : caps.realtime) === null || _d === void 0 ? void 0 : _d.inbound) !== null && _e !== void 0 ? _e : false;
33
+ // Reflects the EXTERNAL adapter's re-fetch ability, so it gates INBOUND retry only
34
+ // (vendor is the source). Derived from method presence, not hand-declared — adding
35
+ // fetchByIds flips inbound retry on with nothing to keep in sync. Outbound flows
36
+ // source from Skedulo (always re-fetchable), so the UI treats them as always retryable.
37
+ const errorHandling = { retryable: typeof adapter.fetchByIds === 'function' };
33
38
  if (!caps) {
34
39
  return {
35
40
  allowNewDataFlows: false,
36
41
  hasDataFlows: false,
37
42
  roles,
38
43
  realtime: { outbound, inbound },
44
+ errorHandling,
39
45
  };
40
46
  }
41
- return Object.assign(Object.assign({}, caps), { roles, realtime: { outbound, inbound } });
47
+ return Object.assign(Object.assign({}, caps), { roles, realtime: { outbound, inbound }, errorHandling });
42
48
  }
43
49
  //# sourceMappingURL=capabilities-defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities-defaults.js","sourceRoot":"","sources":["../../src/adapters/capabilities-defaults.ts"],"names":[],"mappings":";;AAwBA,kDAsBC;AA7CD,4CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,mBAAmB,CAAC,OAAgB;;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,MAAM,KAAK,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,mCAAI,CAAC,uBAAW,CAAC,MAAM,EAAE,uBAAW,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,MAAM,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,0CAAE,QAAQ,mCAAI,QAAQ,CAAC;IACtD,MAAM,OAAO,GAAG,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,0CAAE,OAAO,mCAAI,KAAK,CAAC;IAEjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,KAAK;YACnB,KAAK;YACL,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,uCACK,IAAI,KACP,KAAK,EACL,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAC/B;AACJ,CAAC"}
1
+ {"version":3,"file":"capabilities-defaults.js","sourceRoot":"","sources":["../../src/adapters/capabilities-defaults.ts"],"names":[],"mappings":";;AAwBA,kDA8BC;AArDD,4CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,mBAAmB,CAAC,OAAgB;;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,MAAM,KAAK,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,mCAAI,CAAC,uBAAW,CAAC,MAAM,EAAE,uBAAW,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,MAAM,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,0CAAE,QAAQ,mCAAI,QAAQ,CAAC;IACtD,MAAM,OAAO,GAAG,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,0CAAE,OAAO,mCAAI,KAAK,CAAC;IAEjD,mFAAmF;IACnF,mFAAmF;IACnF,iFAAiF;IACjF,wFAAwF;IACxF,MAAM,aAAa,GAAG,EAAE,SAAS,EAAE,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;IAE9E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,iBAAiB,EAAE,KAAK;YACxB,YAAY,EAAE,KAAK;YACnB,KAAK;YACL,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;YAC/B,aAAa;SACd,CAAC;IACJ,CAAC;IAED,uCACK,IAAI,KACP,KAAK,EACL,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAC/B,aAAa,IACb;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { UpsertOutcome } from '../interfaces/adapter.interface';
2
+ interface MutationLike {
3
+ data?: {
4
+ schema?: Record<string, string | null> | null;
5
+ } | null;
6
+ errors?: unknown[];
7
+ }
8
+ export type ParsedMutation = {
9
+ attributed: true;
10
+ outcomes: UpsertOutcome[];
11
+ } | {
12
+ attributed: false;
13
+ reason: string;
14
+ };
15
+ export declare function parseMutationResult(result: MutationLike, recordCount: number, operation: 'upsert' | 'insert' | 'update'): ParsedMutation;
16
+ export declare function classifySkeduloError(message: string): 'transient' | 'permanent';
17
+ export {};
18
+ //# sourceMappingURL=skedulo-mutation-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skedulo-mutation-result.d.ts","sourceRoot":"","sources":["../../src/adapters/skedulo-mutation-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAerE,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAChE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,GAC/C;IAAE,UAAU,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA0B1C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GACxC,cAAc,CAoEhB;AA8BD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAE/E"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseMutationResult = parseMutationResult;
4
+ exports.classifySkeduloError = classifySkeduloError;
5
+ const helpers_1 = require("../utils/helpers");
6
+ const ALIAS_RE = /^alias(\d+)$/;
7
+ // GraphQL error `path` for our mutation is ["schema", "alias<N>"]. Return the 1-based N,
8
+ // or null when no alias segment is present (a request/document-level error).
9
+ function aliasIndexOf(err) {
10
+ const path = err === null || err === void 0 ? void 0 : err.path;
11
+ if (!Array.isArray(path))
12
+ return null;
13
+ for (const seg of path) {
14
+ if (typeof seg === 'string') {
15
+ const m = ALIAS_RE.exec(seg);
16
+ if (m)
17
+ return Number(m[1]);
18
+ }
19
+ }
20
+ return null;
21
+ }
22
+ function messageOf(err) {
23
+ var _a;
24
+ const m = err === null || err === void 0 ? void 0 : err.message;
25
+ if (typeof m === 'string' && m.length > 0)
26
+ return m;
27
+ // JSON.stringify(undefined) and stringifying a function both yield undefined — guard so
28
+ // callers (truncate, classifySkeduloError) always receive a string.
29
+ return (_a = JSON.stringify(err)) !== null && _a !== void 0 ? _a : 'unknown error';
30
+ }
31
+ function parseMutationResult(result, recordCount, operation) {
32
+ var _a, _b;
33
+ const errors = Array.isArray(result === null || result === void 0 ? void 0 : result.errors) ? result.errors : [];
34
+ // Split errors into per-record (alias in range) and document-level (no alias, or an alias
35
+ // outside this batch — a server contract violation we can't tie to a record).
36
+ const errByIndex = new Map();
37
+ let docLevelMessage = null;
38
+ for (const err of errors) {
39
+ const alias = aliasIndexOf(err);
40
+ const idx = alias === null ? null : alias - 1; // 1-based alias → 0-based record index
41
+ if (idx === null || idx < 0 || idx >= recordCount) {
42
+ if (docLevelMessage === null)
43
+ docLevelMessage = messageOf(err);
44
+ continue;
45
+ }
46
+ if (!errByIndex.has(idx))
47
+ errByIndex.set(idx, messageOf(err));
48
+ }
49
+ const schema = (_a = result === null || result === void 0 ? void 0 : result.data) === null || _a === void 0 ? void 0 : _a.schema;
50
+ // No schema at all — we can't read a single UID, so nothing here is a CONFIRMED success.
51
+ // Re-probe one at a time (also the shape of a thrown/validation failure). Because nothing
52
+ // is confirmed, re-issuing is safe (the one exception — a commit that then threw client-side
53
+ // — is inherent at-least-once for a non-idempotent insert; see _mutate).
54
+ if (schema === undefined || schema === null) {
55
+ return {
56
+ attributed: false,
57
+ reason: docLevelMessage !== null && docLevelMessage !== void 0 ? docLevelMessage : (errors.length > 0 ? 'errors without data.schema' : 'empty response (no data.schema)'),
58
+ };
59
+ }
60
+ // Schema present ⇒ we can read every survivor's UID by key, so we attribute in place and
61
+ // NEVER fall back. Re-issuing a record that already has a UID would duplicate it.
62
+ const outcomes = [];
63
+ for (let i = 0; i < recordCount; i++) {
64
+ const errMsg = errByIndex.get(i);
65
+ if (errMsg !== undefined) {
66
+ outcomes.push({ status: classifySkeduloError(errMsg), error: (0, helpers_1.truncate)(errMsg) });
67
+ continue;
68
+ }
69
+ const uid = (_b = schema[`alias${i + 1}`]) !== null && _b !== void 0 ? _b : null;
70
+ if (uid !== null) {
71
+ outcomes.push({ status: 'ok', result: uid }); // confirmed success — never re-issued
72
+ continue;
73
+ }
74
+ // No UID for this record and no per-alias error naming it. Only a DOCUMENT-level error
75
+ // (unattributable, whole-request) casts doubt here — then don't assume it landed. A
76
+ // per-alias error on OTHER records says nothing about this one, so we must not mass-fail
77
+ // no-UID records just because a sibling failed (some successful update/upsert writes may
78
+ // legitimately return no UID). Falls through to the insert/update defaults otherwise.
79
+ if (docLevelMessage !== null) {
80
+ outcomes.push({
81
+ status: classifySkeduloError(docLevelMessage),
82
+ error: (0, helpers_1.truncate)(docLevelMessage),
83
+ });
84
+ continue;
85
+ }
86
+ if (operation === 'insert') {
87
+ outcomes.push({
88
+ status: 'precondition',
89
+ error: 'insert returned no UID — IntegrationIdMapping may not be bootstrapped (run /setup then /on-initial-sync)',
90
+ });
91
+ continue;
92
+ }
93
+ outcomes.push({ status: 'ok', result: null });
94
+ }
95
+ return { attributed: true, outcomes };
96
+ }
97
+ // Fallback classifier for a Skedulo write error message, used only when the adapter didn't
98
+ // supply an errorClass (batch-level throws, mapping write-back). Transient = worth retrying
99
+ // (infra); permanent = won't change on retry (data). Prefer the adapter's own class
100
+ // (`classifyHttpStatus` in base.adapter.ts, from the HTTP status) — this is the last resort.
101
+ // Keyword-only on purpose: bare HTTP-status patterns (5xx / 429) were removed because this
102
+ // fallback only ever sees map/batch-throw text, which carries no genuine status code, so a
103
+ // number in prose would misclassify a permanent failure as transient and (with zero successes)
104
+ // wrongly trip decideCursor's outage hold — re-wedging the flow this feature exists to unwedge.
105
+ const TRANSIENT_ERROR = new RegExp([
106
+ 'deadlock',
107
+ 'lock (wait )?timeout',
108
+ 'timeout',
109
+ 'timed out',
110
+ 'temporarily unavailable',
111
+ 'service unavailable',
112
+ 'too many requests',
113
+ 'rate ?limit',
114
+ 'throttl',
115
+ 'econnreset',
116
+ 'connection reset',
117
+ 'socket hang up',
118
+ '(token|session|credentials?) expired',
119
+ 'expired (token|session)',
120
+ ].join('|'), 'i');
121
+ function classifySkeduloError(message) {
122
+ return TRANSIENT_ERROR.test(message) ? 'transient' : 'permanent';
123
+ }
124
+ //# sourceMappingURL=skedulo-mutation-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skedulo-mutation-result.js","sourceRoot":"","sources":["../../src/adapters/skedulo-mutation-result.ts"],"names":[],"mappings":"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"}
@@ -16,10 +16,15 @@ export declare class SkeduloAdapter implements Adapter<Record<string, unknown>>
16
16
  checkBootstrap(ctx: IntegrationContext): Promise<BootstrapStatus>;
17
17
  bootstrap(ctx: IntegrationContext): Promise<void>;
18
18
  fetch(ctx: IntegrationContext, flow: DataFlow, since: Date | null, _filter: FilterSpec | null): AsyncIterable<Record<string, unknown>[]>;
19
+ fetchByIds(ctx: IntegrationContext, flow: DataFlow, ids: string[]): Promise<Record<string, unknown>[]>;
20
+ filterExistingIds(ctx: IntegrationContext, flow: DataFlow, ids: string[]): Promise<string[]>;
19
21
  resolveLookups(ctx: IntegrationContext, flow: DataFlow, pairs: EnrichmentPair[]): Promise<void>;
20
22
  upsert(ctx: IntegrationContext, flow: DataFlow, records: Record<string, unknown>[]): Promise<UpsertOutcome[]>;
21
23
  private _attribution;
22
24
  private _mutate;
25
+ private _rawMutate;
26
+ private _mutateEachSeparately;
27
+ private _mutateSingle;
23
28
  delete(ctx: IntegrationContext, flow: DataFlow, ids: string[]): Promise<void>;
24
29
  /** Delete by Skedulo UID directly — used by IdMappingSyncStrategy after mapping table lookup. */
25
30
  deleteById(ctx: IntegrationContext, flow: DataFlow, ids: string[]): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"skedulo.adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/skedulo.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,SAAS,EACT,UAAU,EACV,YAAY,EACZ,aAAa,EACd,MAAM,iCAAiC,CAAC;AAezC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAKD,qBAAa,cAAe,YAAW,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrE,QAAQ,CAAC,eAAe,aAAkB;IAE1C,QAAQ,CAAC,YAAY;;;;MAIV;IAIX,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAkC;IAMlE,cAAc,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;IAIjE,SAAS,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,KAAK,CACV,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,IAAI,GAAG,IAAI,EAClB,OAAO,EAAE,UAAU,GAAG,IAAI,GACzB,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAoCrC,cAAc,CAClB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,cAAc,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC;IAyCV,MAAM,CACV,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,aAAa,EAAE,CAAC;IAqE3B,OAAO,CAAC,YAAY;YAYN,OAAO;IAkDf,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBnF,iGAAiG;IAC3F,UAAU,CAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvF,gBAAgB,IAAI,MAAM;IAI1B,mBAAmB,CACjB,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,aAAa,EAAE,GACxB,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAQ1C,UAAU,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAO1D,SAAS,CAAC,GAAG,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAe5E,kBAAkB,CACtB,GAAG,EAAE,kBAAkB,EACvB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAAE,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,EAAE,CAAC;IAa1B;;;;;OAKG;YACW,mBAAmB;YA4BnB,YAAY;CA+B3B;AASD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
1
+ {"version":3,"file":"skedulo.adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/skedulo.adapter.ts"],"names":[],"mappings":"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"}