@skedulo/integration-sdk 0.12.1 → 0.13.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 (49) hide show
  1. package/.claude/worktrees/COR-1641/jest.config.js +12 -0
  2. package/.claude/worktrees/COR-1662/jest.config.js +12 -0
  3. package/CHANGELOG.md +39 -5
  4. package/dist/actions/sync/run-flow.action.d.ts.map +1 -1
  5. package/dist/actions/sync/run-flow.action.js +12 -3
  6. package/dist/actions/sync/run-flow.action.js.map +1 -1
  7. package/dist/actions/sync/run-job.action.d.ts +3 -0
  8. package/dist/actions/sync/run-job.action.d.ts.map +1 -1
  9. package/dist/actions/sync/run-job.action.js +45 -4
  10. package/dist/actions/sync/run-job.action.js.map +1 -1
  11. package/dist/adapters/skedulo.adapter.d.ts +4 -0
  12. package/dist/adapters/skedulo.adapter.d.ts.map +1 -1
  13. package/dist/adapters/skedulo.adapter.js +140 -1
  14. package/dist/adapters/skedulo.adapter.js.map +1 -1
  15. package/dist/browser.d.ts +1 -1
  16. package/dist/browser.d.ts.map +1 -1
  17. package/dist/browser.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/interfaces/adapter.interface.d.ts +14 -0
  22. package/dist/interfaces/adapter.interface.d.ts.map +1 -1
  23. package/dist/interfaces/field-mapping.interface.d.ts +6 -0
  24. package/dist/interfaces/field-mapping.interface.d.ts.map +1 -1
  25. package/dist/interfaces/sync-result.interface.d.ts +2 -0
  26. package/dist/interfaces/sync-result.interface.d.ts.map +1 -1
  27. package/dist/services/id-mapping-sync.strategy.d.ts +9 -0
  28. package/dist/services/id-mapping-sync.strategy.d.ts.map +1 -1
  29. package/dist/services/id-mapping-sync.strategy.js +267 -17
  30. package/dist/services/id-mapping-sync.strategy.js.map +1 -1
  31. package/dist/services/id-mapping.service.d.ts +7 -0
  32. package/dist/services/id-mapping.service.d.ts.map +1 -1
  33. package/dist/services/id-mapping.service.js +46 -0
  34. package/dist/services/id-mapping.service.js.map +1 -1
  35. package/dist/services/run-log-builder.d.ts +4 -2
  36. package/dist/services/run-log-builder.d.ts.map +1 -1
  37. package/dist/services/run-log-builder.js +22 -2
  38. package/dist/services/run-log-builder.js.map +1 -1
  39. package/dist/services/sync-runner.d.ts.map +1 -1
  40. package/dist/services/sync-runner.js +10 -13
  41. package/dist/services/sync-runner.js.map +1 -1
  42. package/dist/services/sync.service.d.ts.map +1 -1
  43. package/dist/services/sync.service.js +3 -1
  44. package/dist/services/sync.service.js.map +1 -1
  45. package/dist/utils/artifact-builder.d.ts +3 -0
  46. package/dist/utils/artifact-builder.d.ts.map +1 -1
  47. package/dist/utils/artifact-builder.js +22 -3
  48. package/dist/utils/artifact-builder.js.map +1 -1
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,sCAAsC,CAAC;AAC9C,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,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACpF,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACvE,YAAY,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,YAAY,EACV,OAAO,EACP,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,SAAS,GACV,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACtF,YAAY,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACjG,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,sCAAsC,CAAC;AAC9C,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,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACpF,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACvE,YAAY,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,YAAY,EACV,OAAO,EACP,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,SAAS,GACV,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACtF,YAAY,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACjG,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,wCAAwC;AACxC,sGAAsG;;;AAgBtG,kEAAiE;AAAxD,oHAAA,gBAAgB,OAAA;AAGzB,gFAAuE;AAA9D,0HAAA,eAAe,OAAA;AAqBxB,gFAAiE;AAAxD,oHAAA,SAAS,OAAA;AAElB,oFAAsF;AAA7E,qHAAA,QAAQ,OAAA;AAAE,oHAAA,OAAO,OAAA;AAAE,sHAAA,SAAS,OAAA;AAErC,yCAMqB;AALnB,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,iHAAA,oBAAoB,OAAA;AAGtB,8EAA8E;AAC9E,qEAAqE;AACrE,6DAAiG;AAAxF,6GAAA,aAAa,OAAA;AAAE,uGAAA,OAAO,OAAA;AAAE,yHAAA,yBAAyB,OAAA"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,wCAAwC;AACxC,sGAAsG;;;AAiBtG,kEAAiE;AAAxD,oHAAA,gBAAgB,OAAA;AAGzB,gFAAuE;AAA9D,0HAAA,eAAe,OAAA;AAqBxB,gFAAiE;AAAxD,oHAAA,SAAS,OAAA;AAElB,oFAAsF;AAA7E,qHAAA,QAAQ,OAAA;AAAE,oHAAA,OAAO,OAAA;AAAE,sHAAA,SAAS,OAAA;AAErC,yCAMqB;AALnB,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,iHAAA,oBAAoB,OAAA;AAGtB,8EAA8E;AAC9E,qEAAqE;AACrE,6DAAiG;AAAxF,6GAAA,aAAa,OAAA;AAAE,uGAAA,OAAO,OAAA;AAAE,yHAAA,yBAAyB,OAAA"}
package/dist/index.d.ts CHANGED
@@ -31,7 +31,7 @@ export { coerceFilterValues } from './utils/coerceFilterValues';
31
31
  export { AdapterRegistry } from './adapters/adapter-registry';
32
32
  export { BaseAdapterHandler } from './adapters/base-adapter-handler';
33
33
  export type { BaseAdapterHandlerConfig, RouteHandler } from './adapters/base-adapter-handler';
34
- export type { MappingConfigMapping, MappingConfigDto, TranslationTable, ValidationAction, } from './interfaces/field-mapping.interface';
34
+ export type { MatchExistingConfig, MappingConfigMapping, MappingConfigDto, TranslationTable, ValidationAction, } from './interfaces/field-mapping.interface';
35
35
  export type { AdapterCapabilities, DataFlowTemplate, ParsedChangeEvent, SampleAPI, } from './interfaces/adapter.interface';
36
36
  export { SyncStage } from './interfaces/sync-pipeline.interface';
37
37
  export type { SyncPipelineState, SyncPipelineError } from './interfaces/sync-pipeline.interface';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,yCAcqB;AAbnB,qGAAA,QAAQ,OAAA;AACR,0GAAA,aAAa,OAAA;AACb,8GAAA,iBAAiB,OAAA;AACjB,wGAAA,WAAW,OAAA;AACX,qGAAA,QAAQ,OAAA;AACR,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA;AACd,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,iHAAA,oBAAoB,OAAA;AAEtB,qCAA+F;AAAtF,6GAAA,kBAAkB,OAAA;AAAE,mHAAA,wBAAwB,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAE3E,uDAAqD;AAA5C,2GAAA,WAAW,OAAA;AAEpB,6DAA2D;AAAlD,iHAAA,cAAc,OAAA;AAEvB,iFAA8E;AAArE,oIAAA,uBAAuB,OAAA;AAChC,2EAAwE;AAA/D,8HAAA,oBAAoB,OAAA;AAC7B,oFAAsF;AAA7E,qHAAA,QAAQ,OAAA;AAAE,oHAAA,OAAO,OAAA;AAAE,sHAAA,SAAS,OAAA;AAErC,8DAAmF;AAA1E,qHAAA,kBAAkB,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAE9C,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AAExB,gFAA4F;AAAnF,8HAAA,mBAAmB,OAAA;AAAE,0HAAA,eAAe,OAAA;AAC7C,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AACvB,wDAAwE;AAA/D,2GAAA,WAAW,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAEtC,sDAAiG;AAAxF,yGAAA,UAAU,OAAA;AAAE,wHAAA,yBAAyB,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAChE,8DAA4E;AAAnE,iHAAA,cAAc,OAAA;AAAE,iHAAA,cAAc,OAAA;AACvC,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AAEpB,oEAAiE;AAAxD,sHAAA,gBAAgB,OAAA;AAGzB,0EAM0C;AALxC,uHAAA,cAAc,OAAA;AACd,uHAAA,cAAc,OAAA;AACd,+HAAA,sBAAsB,OAAA;AACtB,2HAAA,kBAAkB,OAAA;AAClB,0HAAA,iBAAiB,OAAA;AAGnB,iEAAgE;AAAvD,wHAAA,kBAAkB,OAAA;AAC3B,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AACxB,wEAAqE;AAA5D,0HAAA,kBAAkB,OAAA;AAe3B,gFAAiE;AAAxD,oHAAA,SAAS,OAAA;AAGlB,gFAAgF;AAChF,6DAAiG;AAAxF,6GAAA,aAAa,OAAA;AAAE,uGAAA,OAAO,OAAA;AAAE,yHAAA,yBAAyB,OAAA;AAG1D,mEAAmE;AACnE,iDAYgC;AAX9B,qGAAA,WAAW,OAAA;AACX,uGAAA,aAAa,OAAA;AACb,wGAAA,cAAc,OAAA;AACd,2GAAA,iBAAiB,OAAA;AACjB,uGAAA,aAAa,OAAA;AACb,6GAAA,mBAAmB,OAAA;AACnB,iHAAA,uBAAuB,OAAA;AACvB,gHAAA,sBAAsB,OAAA;AACtB,gHAAA,sBAAsB,OAAA;AACtB,2GAAA,iBAAiB,OAAA;AACjB,0GAAA,gBAAgB,OAAA;AAGlB,+DAA6D;AAApD,6GAAA,YAAY,OAAA;AAErB,yDAMoC;AALlC,qGAAA,OAAO,OAAA;AACP,oHAAA,YAAY,OAA0B;AACtC,uGAAA,SAAS,OAAA;AACT,yGAAA,WAAW,OAAA;AACX,yGAAA,WAAW,OAAA;AAGb,mDAAsD;AAA7C,sGAAA,WAAW,OAAA;AAGpB,4DAA4D;AAC5D,+DAAsF;AAA7E,2HAAA,uBAAuB,OAAA;AAAE,mHAAA,eAAe,OAAA;AAGjD,YAAY;AACZ,2CAQyB;AAPvB,sGAAA,WAAW,OAAA;AACX,qGAAA,UAAU,OAAA;AACV,wGAAA,aAAa,OAAA;AACb,wGAAA,aAAa,OAAA;AACb,yGAAA,cAAc,OAAA;AACd,uGAAA,YAAY,OAAA;AACZ,4GAAA,iBAAiB,OAAA"}
@@ -290,5 +290,19 @@ export interface Adapter<TRecord = Record<string, unknown>> {
290
290
  * failing the update.
291
291
  */
292
292
  filterExistingIds?(ctx: IntegrationContext, flow: DataFlow, ids: string[]): Promise<string[]>;
293
+ /**
294
+ * Optional. Return every matching record id per value, not only the first; leave out values
295
+ * with no match. Without it, `matchExisting` flows create as usual. See docs/ADAPTERS.md.
296
+ * `field` comes from admin-editable config: check it's a plain field name before putting it in
297
+ * a query, as `SkeduloAdapter.findByMatchKey` does with a name pattern.
298
+ */
299
+ findByMatchKey?(ctx: IntegrationContext, flow: DataFlow, field: string, values: string[]): Promise<Map<string, string[]>>;
300
+ /**
301
+ * Optional. Return the form `findByMatchKey` compares each value in (a number field's "00123"
302
+ * and "123" both give "123"); leave out values it can't compare. Used to find records in one
303
+ * run that share a value; without it, values are compared as written. See docs/ADAPTERS.md.
304
+ * `field` comes from admin-editable config, so check it before using it in a query.
305
+ */
306
+ normalizeMatchValues?(ctx: IntegrationContext, flow: DataFlow, field: string, values: string[]): Promise<Map<string, string>>;
293
307
  }
294
308
  //# sourceMappingURL=adapter.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/adapter.interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/adapter.interface.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,10 @@ export interface FieldMapping {
13
13
  }
14
14
  /** @deprecated Use FieldMapping — identical shape, kept for backward compatibility. */
15
15
  export type MappingConfigMapping = FieldMapping;
16
+ export interface MatchExistingConfig {
17
+ /** Target field to match on. It must also be a mapping target: its mapped value is what's looked up. */
18
+ targetField: string;
19
+ }
16
20
  export interface MappingConfigDto {
17
21
  mappings: FieldMapping[];
18
22
  version?: string;
@@ -27,5 +31,7 @@ export interface MappingConfigDto {
27
31
  label?: string;
28
32
  message?: string;
29
33
  }>;
34
+ /** IdMapping flows only. Off when missing, null or malformed. See docs/FIELD-MAPPINGS.md. */
35
+ matchExisting?: MatchExistingConfig | null;
30
36
  }
31
37
  //# sourceMappingURL=field-mapping.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-mapping.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/field-mapping.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2GAA2G;IAC3G,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,uFAAuF;AACvF,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,gBAAgB,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ"}
1
+ {"version":3,"file":"field-mapping.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/field-mapping.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2GAA2G;IAC3G,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,uFAAuF;AACvF,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,wGAAwG;IACxG,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,gBAAgB,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,6FAA6F;IAC7F,aAAa,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC5C"}
@@ -26,6 +26,8 @@ export interface BatchResult {
26
26
  errorCount?: number;
27
27
  /** Target records deleted via source-delete propagation on scheduled runs. */
28
28
  deleted?: number;
29
+ /** Records linked to an existing target record by `mappingConfig.matchExisting` whose update worked. Unset when none. */
30
+ linked?: number;
29
31
  /**
30
32
  * Set when the delete-propagation window could not be fully completed (fetch failed,
31
33
  * a delete failed, or the per-run cap truncated the id list). decideCursor holds the
@@ -1 +1 @@
1
- {"version":3,"file":"sync-result.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/sync-result.interface.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAErE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,qBAAqB,CAAC;IAC7E,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;IAC9D,gHAAgH;IAChH,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,wBAAwB,GAAG,iBAAiB,CAAC;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"sync-result.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/sync-result.interface.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAErE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,qBAAqB,CAAC;IAC7E,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yHAAyH;IACzH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;IAC9D,gHAAgH;IAChH,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,wBAAwB,GAAG,iBAAiB,CAAC;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -8,9 +8,18 @@ import type { SyncFlowStrategy } from '../interfaces/sync-flow-strategy.interfac
8
8
  import { IdMappingService } from './id-mapping.service';
9
9
  export declare class IdMappingSyncStrategy implements SyncFlowStrategy {
10
10
  private readonly idMappingService;
11
+ private readonly _warned;
12
+ private readonly _linkedThisRun;
13
+ private readonly _matchValueOwners;
11
14
  constructor(idMappingService: IdMappingService);
12
15
  processBatch(ctx: IntegrationContext, flow: DataFlow, source: Adapter | null, target: Adapter, records: Record<string, unknown>[], localFilter: FilterSpec | null): Promise<BatchResult>;
16
+ private _countLinkedWritten;
13
17
  private _reconcileStaleMappings;
18
+ private _matchExistingTargets;
19
+ private _matchLastCopies;
20
+ private _releaseMatchValue;
21
+ private _matchExistingField;
22
+ private _warnOnce;
14
23
  private _claimCreatesForBatch;
15
24
  private _releaseFailedClaims;
16
25
  filterPendingDeleteIds(ctx: IntegrationContext, flow: DataFlow, ids: string[]): Promise<string[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"id-mapping-sync.strategy.d.ts","sourceRoot":"","sources":["../../src/services/id-mapping-sync.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,iCAAiC,CAAC;AAC9F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAsDxD,qBAAa,qBAAsB,YAAW,gBAAgB;IAChD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAEzD,YAAY,CAChB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAClC,WAAW,EAAE,UAAU,GAAG,IAAI,GAC7B,OAAO,CAAC,WAAW,CAAC;YA6MT,uBAAuB;YAuEvB,qBAAqB;YAyBrB,oBAAoB;IAyB5B,sBAAsB,CAC1B,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC;IAYd,iBAAiB,CACrB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC;IA6DhB,iBAAiB,CACrB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,CAAC;IA6ItB,OAAO,CAAC,mBAAmB;YAsCb,0BAA0B;YAmG1B,wBAAwB;YAkExB,oBAAoB;CAmDnC"}
1
+ {"version":3,"file":"id-mapping-sync.strategy.d.ts","sourceRoot":"","sources":["../../src/services/id-mapping-sync.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,iCAAiC,CAAC;AAC9F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAuFxD,qBAAa,qBAAsB,YAAW,gBAAgB;IAShD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAR7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAG7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAG5D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;gBAElC,gBAAgB,EAAE,gBAAgB;IAEzD,YAAY,CAChB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAClC,WAAW,EAAE,UAAU,GAAG,IAAI,GAC7B,OAAO,CAAC,WAAW,CAAC;IAuPvB,OAAO,CAAC,mBAAmB;YAkBb,uBAAuB;YAsEvB,qBAAqB;YAsBrB,gBAAgB;IA4J9B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IA+C3B,OAAO,CAAC,SAAS;YAQH,qBAAqB;YA0BrB,oBAAoB;IA+B5B,sBAAsB,CAC1B,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC;IAYd,iBAAiB,CACrB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC;IA6DhB,iBAAiB,CACrB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,CAAC;IA8JtB,OAAO,CAAC,mBAAmB;YAsCb,0BAA0B;YAmG1B,wBAAwB;YAkExB,oBAAoB;CAwDnC"}
@@ -34,7 +34,8 @@ const helpers_1 = require("../utils/helpers");
34
34
  // Key differences from ExternalIdSyncStrategy:
35
35
  // - target.resolveLookups() is NOT called; the mapping table replaces EQL-based lookup
36
36
  // - Records with a mapping hit have __targetUID set → adapter updates by UID
37
- // - Records without a mapping hit are treated as creates → adapter inserts → mapping written
37
+ // - Records without a mapping hit are treated as creates → adapter inserts → mapping written,
38
+ // unless mappingConfig.matchExisting links them to an existing target record first
38
39
  // Split active pairs into insert/update buckets based on __targetUID presence,
39
40
  // stripping the marker from each payload. The marker is an internal convention;
40
41
  // adapters that implement insert/update shouldn't have to know about it.
@@ -54,9 +55,28 @@ function splitForDispatch(pairs) {
54
55
  }
55
56
  return { inserts, updates };
56
57
  }
58
+ function matchValue(value) {
59
+ if (typeof value === 'string')
60
+ return value.trim() === '' ? null : value;
61
+ if (typeof value === 'number') {
62
+ // Past 2^53 the source's digits are already lost, so two ids could compare as one.
63
+ const exact = Number.isSafeInteger(value) || (Number.isFinite(value) && !Number.isInteger(value));
64
+ return exact ? String(value) : null;
65
+ }
66
+ if (typeof value === 'boolean')
67
+ return String(value);
68
+ return null;
69
+ }
57
70
  class IdMappingSyncStrategy {
58
71
  constructor(idMappingService) {
59
72
  this.idMappingService = idMappingService;
73
+ this._warned = new Set();
74
+ // Target → source record linked or created by an earlier batch of this run. The owner query
75
+ // reads a replica and can miss those; within one batch, the links being saved are checked.
76
+ this._linkedThisRun = new Map();
77
+ // Compared match value → the first source record in this run to hold it. Not read from the
78
+ // replica, so a later page can't miss a value an earlier page linked or created.
79
+ this._matchValueOwners = new Map();
60
80
  }
61
81
  async processBatch(ctx, flow, source, target, records, localFilter) {
62
82
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
@@ -94,27 +114,37 @@ class IdMappingSyncStrategy {
94
114
  // Step 4b: a mapping can point at a target record that no longer exists (e.g. deleted
95
115
  // by hand). Drop those mapping rows and switch the records to the create path.
96
116
  await this._reconcileStaleMappings(ctx, flow, target, activePairs, activeSrcIds);
117
+ // After the reconcile, so a record whose target was deleted can link to another, not create.
118
+ const match = await this._matchExistingTargets(ctx, flow, target, activePairs.map((p, i) => ({ mapped: p.mapped, sourceId: activeSrcIds[i] })));
119
+ const activeToPairIndex = pairs.map((_, i) => i).filter((i) => !skipSet.has(i));
120
+ for (const [i, failure] of match.failures) {
121
+ (0, sync_pipeline_errors_1.captureRecordError)(ctx, 'resolve', activeToPairIndex[i], failure.message, activePairs[i].raw, activeSrcIds[i], failure.errorClass);
122
+ stats.succeeded--;
123
+ stats.failed++;
124
+ }
125
+ const resolvedPairs = activePairs.filter((_, i) => !match.failures.has(i));
126
+ const resolvedSrcIds = activeSrcIds.filter((_, i) => !match.failures.has(i));
97
127
  // Step 4c: claim creates. The mapping table has no idempotency key on the target write,
98
128
  // so concurrent deliveries of the same new record (e.g. a Skedulo INSERT plus a near-instant
99
129
  // UPDATE) can both resolve to "no mapping" and both insert — a duplicate. Reserving the
100
130
  // UniqueKey before the write serializes them: the winner creates, a loser means another
101
131
  // in-flight delivery already owns the create, so we skip it (its change reconciles on the
102
132
  // next sync) rather than create a second record.
103
- const wonUidBySourceId = await this._claimCreatesForBatch(ctx, flow, activePairs, activeSrcIds);
133
+ const wonUidBySourceId = await this._claimCreatesForBatch(ctx, flow, resolvedPairs, resolvedSrcIds);
104
134
  const keep = [];
105
- for (let i = 0; i < activePairs.length; i++) {
106
- const isCreateI = activePairs[i].mapped['__targetUID'] == null;
107
- if (isCreateI && activeSrcIds[i] && !wonUidBySourceId.has(activeSrcIds[i])) {
135
+ for (let i = 0; i < resolvedPairs.length; i++) {
136
+ const isCreateI = resolvedPairs[i].mapped['__targetUID'] == null;
137
+ if (isCreateI && resolvedSrcIds[i] && !wonUidBySourceId.has(resolvedSrcIds[i])) {
108
138
  stats.skipped++;
109
139
  stats.succeeded--;
110
- ctx.logger.warn(`id_mapping_create_lost_claim: dataFlowId=${flow.id} sourceId=${activeSrcIds[i]} ` +
140
+ ctx.logger.warn(`id_mapping_create_lost_claim: dataFlowId=${flow.id} sourceId=${resolvedSrcIds[i]} ` +
111
141
  `objectType=${flow.targetObject} — concurrent create won the claim; skipping to avoid a duplicate`);
112
142
  continue;
113
143
  }
114
144
  keep.push(i);
115
145
  }
116
- const dispatchPairs = keep.map((i) => activePairs[i]);
117
- const dispatchSrcIds = keep.map((i) => activeSrcIds[i]);
146
+ const dispatchPairs = keep.map((i) => resolvedPairs[i]);
147
+ const dispatchSrcIds = keep.map((i) => resolvedSrcIds[i]);
118
148
  if (dispatchPairs.length === 0)
119
149
  return stats;
120
150
  const isCreate = dispatchPairs.map((p) => p.mapped['__targetUID'] == null);
@@ -169,6 +199,9 @@ class IdMappingSyncStrategy {
169
199
  }
170
200
  }
171
201
  outcomesCounted = true;
202
+ const linked = this._countLinkedWritten(match.linkedSourceIds, dispatchSrcIds, outcomes);
203
+ if (linked > 0)
204
+ stats.linked = linked;
172
205
  await ((_o = source === null || source === void 0 ? void 0 : source.afterUpsert) === null || _o === void 0 ? void 0 : _o.call(source, ctx));
173
206
  await ((_p = target.afterUpsert) === null || _p === void 0 ? void 0 : _p.call(target, ctx));
174
207
  }
@@ -190,17 +223,29 @@ class IdMappingSyncStrategy {
190
223
  // Finalize any create that actually succeeded (so it isn't re-created as a duplicate next
191
224
  // run) and release reservations only for creates with no successful outcome.
192
225
  await this._writeMappingEntries(ctx, flow, target, dispatchSrcIds, outcomes, isCreate);
193
- await this._releaseFailedClaims(ctx, dispatchSrcIds, isCreate, outcomes, wonUidBySourceId);
226
+ await this._releaseFailedClaims(ctx, dispatchSrcIds, isCreate, outcomes, wonUidBySourceId, match.claimed);
194
227
  return stats;
195
228
  }
196
229
  // Release reservations for creates whose target write failed (empty-TargetId rows would
197
230
  // otherwise block the record from ever being created again).
198
- await this._releaseFailedClaims(ctx, dispatchSrcIds, isCreate, outcomes, wonUidBySourceId);
231
+ await this._releaseFailedClaims(ctx, dispatchSrcIds, isCreate, outcomes, wonUidBySourceId, match.claimed);
199
232
  // Step 6: write back — finalize each won reservation with the real TargetId (upsert on
200
233
  // UniqueKey updates the placeholder row written at claim time).
201
234
  await this._writeMappingEntries(ctx, flow, target, dispatchSrcIds, outcomes, isCreate);
202
235
  return stats;
203
236
  }
237
+ // A source record counts once, and only when every copy of it in the batch was written.
238
+ _countLinkedWritten(linkedSourceIds, sourceIds, outcomes) {
239
+ const written = new Set();
240
+ const failed = new Set();
241
+ sourceIds.forEach((id, i) => {
242
+ var _a;
243
+ if (!linkedSourceIds.has(id))
244
+ return;
245
+ (((_a = outcomes[i]) === null || _a === void 0 ? void 0 : _a.status) === 'ok' ? written : failed).add(id);
246
+ });
247
+ return [...written].filter((id) => !failed.has(id)).length;
248
+ }
204
249
  // Verify resolved target UIDs still exist (when the target adapter can check). For UIDs
205
250
  // that are gone: delete the stale mapping row, then null __targetUID so the record takes
206
251
  // the create path. Best-effort — on any failure the pairs keep the update path, which
@@ -254,6 +299,190 @@ class IdMappingSyncStrategy {
254
299
  ctx.logger.warn(`stale_mappings_reconciled: dataFlowId=${flow.id} objectType=${flow.targetObject} ` +
255
300
  `count=${stale.length} — target records gone; mappings dropped, records re-created`);
256
301
  }
302
+ // A delivery can carry one record twice; the last copy is assumed newest (events assumed oldest first) and decides.
303
+ async _matchExistingTargets(ctx, flow, target, items) {
304
+ const field = this._matchExistingField(ctx, flow, target);
305
+ if (!field)
306
+ return { linkedSourceIds: new Set(), failures: new Map(), claimed: new Map() };
307
+ const lastOf = new Map();
308
+ items.forEach((item, i) => lastOf.set(item.sourceId, i));
309
+ const result = await this._matchLastCopies(ctx, flow, target, field, items, lastOf);
310
+ const failures = new Map();
311
+ items.forEach((item, i) => {
312
+ var _a;
313
+ var _b;
314
+ const last = lastOf.get(item.sourceId);
315
+ const failure = result.failures.get(last);
316
+ if (failure)
317
+ failures.set(i, failure);
318
+ else
319
+ (_a = (_b = item.mapped)['__targetUID']) !== null && _a !== void 0 ? _a : (_b['__targetUID'] = items[last].mapped['__targetUID']);
320
+ });
321
+ return Object.assign(Object.assign({}, result), { failures });
322
+ }
323
+ // A record whose target can't be settled fails instead of creating: a duplicate can't be undone.
324
+ async _matchLastCopies(ctx, flow, target, field, items, lastOf) {
325
+ var _a, _b, _c, _d, _e;
326
+ const failures = new Map();
327
+ const claimed = new Map();
328
+ const none = { linkedSourceIds: new Set(), failures, claimed };
329
+ const candidates = items
330
+ .map((item, index) => (Object.assign(Object.assign({ index }, item), { value: matchValue(item.mapped[field]) })))
331
+ .filter((c) => c.mapped['__targetUID'] == null &&
332
+ c.value !== null &&
333
+ !!c.sourceId &&
334
+ lastOf.get(c.sourceId) === c.index);
335
+ if (candidates.length === 0)
336
+ return none;
337
+ const fail = (c, code, detail, errorClass) => {
338
+ failures.set(c.index, { message: `${code}: ${detail}`, errorClass });
339
+ ctx.logger.warn(`match_existing_failed: dataFlowId=${flow.id} sourceId=${c.sourceId} code=${code} field=${field}`);
340
+ };
341
+ const errorText = (err) => (err instanceof Error ? err.message : String(err));
342
+ const failAll = (list, code, err) => {
343
+ const detail = errorText(err);
344
+ for (const c of list)
345
+ failures.set(c.index, { message: `${code}: ${detail}` });
346
+ ctx.logger.warn(`match_existing_failed: dataFlowId=${flow.id} field=${field} code=${code} ` +
347
+ `count=${list.length} error=${(0, helpers_1.truncate)(detail)}`);
348
+ };
349
+ const values = [...new Set(candidates.map((c) => c.value))];
350
+ let found;
351
+ let keyOf = new Map();
352
+ try {
353
+ if (typeof target.normalizeMatchValues === 'function') {
354
+ keyOf = await target.normalizeMatchValues(ctx, flow, field, values);
355
+ }
356
+ found = await target.findByMatchKey(ctx, flow, field, values);
357
+ }
358
+ catch (err) {
359
+ failAll(candidates, 'match_existing_lookup_failed', err);
360
+ return none;
361
+ }
362
+ const idsOf = (c) => { var _a; return [...new Set((_a = found.get(c.value)) !== null && _a !== void 0 ? _a : [])]; };
363
+ const sourceSystem = (_a = flow.sourceSystem) !== null && _a !== void 0 ? _a : '';
364
+ const targetSystem = (_b = flow.targetSystem) !== null && _b !== void 0 ? _b : '';
365
+ const single = candidates.filter((c) => idsOf(c).length === 1);
366
+ let owners = new Map();
367
+ if (single.length > 0) {
368
+ try {
369
+ owners = await this.idMappingService.findSourceIdsByTargetIds(ctx, {
370
+ sourceSystem,
371
+ targetSystem,
372
+ objectType: flow.targetObject,
373
+ targetIds: [...new Set(single.map((c) => idsOf(c)[0]))],
374
+ });
375
+ }
376
+ catch (err) {
377
+ failAll(single, 'match_existing_lookup_failed', err);
378
+ }
379
+ }
380
+ const toLink = [];
381
+ for (const c of candidates) {
382
+ if (failures.has(c.index))
383
+ continue;
384
+ const key = (_c = keyOf.get(c.value)) !== null && _c !== void 0 ? _c : c.value;
385
+ const first = this._matchValueOwners.get(key);
386
+ if (first !== undefined && first !== c.sourceId) {
387
+ fail(c, 'match_existing_taken', `${field}=${c.value} is also on source record ${first} earlier in this run; ` +
388
+ `only that one can link to or create a ${flow.targetObject} record with it`, 'permanent');
389
+ continue;
390
+ }
391
+ const ids = idsOf(c);
392
+ if (ids.length > 1) {
393
+ fail(c, 'match_existing_ambiguous', `${field}=${c.value} matches ${ids.length} ${flow.targetObject} records`, 'permanent');
394
+ continue;
395
+ }
396
+ if (ids.length === 1) {
397
+ const owner = [
398
+ (_d = toLink.find((t) => t.targetId === ids[0])) === null || _d === void 0 ? void 0 : _d.sourceId,
399
+ this._linkedThisRun.get(ids[0]),
400
+ ...((_e = owners.get(ids[0])) !== null && _e !== void 0 ? _e : []),
401
+ ].find((id) => id !== undefined && id !== c.sourceId);
402
+ if (owner !== undefined) {
403
+ fail(c, 'match_existing_taken', `${flow.targetObject} ${ids[0]} (${field}=${c.value}) is already linked to source record ${owner}`, 'permanent');
404
+ continue;
405
+ }
406
+ toLink.push(Object.assign(Object.assign({}, c), { targetId: ids[0] }));
407
+ }
408
+ if (first === undefined) {
409
+ this._matchValueOwners.set(key, c.sourceId);
410
+ claimed.set(c.sourceId, key);
411
+ }
412
+ }
413
+ if (toLink.length === 0)
414
+ return none;
415
+ const entries = toLink.map((c) => ({
416
+ sourceSystem,
417
+ targetSystem,
418
+ objectType: flow.targetObject,
419
+ sourceId: c.sourceId,
420
+ targetId: c.targetId,
421
+ dataFlowId: String(flow.id),
422
+ }));
423
+ try {
424
+ await retryOnce(() => this.idMappingService.upsertMappings(ctx, entries));
425
+ }
426
+ catch (err) {
427
+ failAll(toLink, 'match_existing_link_failed', err);
428
+ for (const c of toLink)
429
+ this._releaseMatchValue(claimed, c.sourceId);
430
+ return none;
431
+ }
432
+ for (const c of toLink) {
433
+ c.mapped['__targetUID'] = c.targetId;
434
+ this._linkedThisRun.set(c.targetId, c.sourceId);
435
+ }
436
+ ctx.logger.info(`match_existing_linked: dataFlowId=${flow.id} objectType=${flow.targetObject} ` +
437
+ `field=${field} count=${toLink.length} — existing records linked, they update instead of being created`);
438
+ return { linkedSourceIds: new Set(toLink.map((c) => c.sourceId)), failures, claimed };
439
+ }
440
+ // Only for a record that wrote nothing, so a later page can't create a second target record.
441
+ _releaseMatchValue(claimed, sourceId) {
442
+ const key = claimed.get(sourceId);
443
+ if (key === undefined)
444
+ return;
445
+ claimed.delete(sourceId);
446
+ this._matchValueOwners.delete(key);
447
+ }
448
+ // Stored config is admin-editable, so a bad value turns matching off instead of failing runs.
449
+ _matchExistingField(ctx, flow, target) {
450
+ var _a, _b, _c;
451
+ const config = (_a = flow.mappingConfig) === null || _a === void 0 ? void 0 : _a.matchExisting;
452
+ if (config == null)
453
+ return null;
454
+ const raw = typeof config === 'object' ? config.targetField : undefined;
455
+ const field = typeof raw === 'string' ? raw.trim() : '';
456
+ if (field === '') {
457
+ this._warnOnce(ctx, `match_existing_invalid: dataFlowId=${flow.id} — mappingConfig.matchExisting needs a ` +
458
+ `non-empty targetField; matching is off`);
459
+ return null;
460
+ }
461
+ const writers = ((_c = (_b = flow.mappingConfig) === null || _b === void 0 ? void 0 : _b.mappings) !== null && _c !== void 0 ? _c : []).filter((m) => m.target === field);
462
+ if (writers.length === 0) {
463
+ this._warnOnce(ctx, `match_existing_field_not_mapped: dataFlowId=${flow.id} field=${field} — no mapping writes ` +
464
+ `this field, so there's no value to match on; creating as usual`);
465
+ return null;
466
+ }
467
+ if (writers.some((m) => m.lookup)) {
468
+ this._warnOnce(ctx, `match_existing_lookup_field: dataFlowId=${flow.id} field=${field} — a mapping that writes ` +
469
+ `this field has a lookup, so its value is a linked record's id; creating as usual`);
470
+ return null;
471
+ }
472
+ if (typeof target.findByMatchKey !== 'function') {
473
+ this._warnOnce(ctx, `match_existing_unsupported: dataFlowId=${flow.id} targetSystem=${flow.targetSystem} — ` +
474
+ `the target can't look records up by field; creating as usual`);
475
+ return null;
476
+ }
477
+ return field;
478
+ }
479
+ // One strategy instance per run or event batch, so this warns once per run.
480
+ _warnOnce(ctx, message) {
481
+ if (this._warned.has(message))
482
+ return;
483
+ this._warned.add(message);
484
+ ctx.logger.warn(message);
485
+ }
257
486
  // Reserve the UniqueKey for every create-classified pair. Returns the reserved-row UID per
258
487
  // won sourceId; absence from the map means the claim was lost to a concurrent delivery.
259
488
  async _claimCreatesForBatch(ctx, flow, activePairs, activeSrcIds) {
@@ -275,18 +504,22 @@ class IdMappingSyncStrategy {
275
504
  const { wonUidBySourceId } = await this.idMappingService.claimCreates(ctx, claims);
276
505
  return wonUidBySourceId;
277
506
  }
278
- // Delete reserved claim rows for creates with no successful outcome, so a stale empty-TargetId
279
- // row can't permanently block the record from ever being created. Retried once for symmetry
280
- // with the mapping write — a transient failure here strands the reservation. (A crash between
281
- // reserve and this release is still possible; such a row needs manual cleanup or reclaim.)
282
- async _releaseFailedClaims(ctx, dispatchSrcIds, isCreate, outcomes, wonUidBySourceId) {
507
+ // Delete reserved claim rows (and free the match values) for creates with no successful
508
+ // outcome, so a stale empty-TargetId row can't permanently block the record from ever being
509
+ // created. Retried once for symmetry with the mapping write — a transient failure here strands
510
+ // the reservation. (A crash between reserve and this release is still possible; such a row
511
+ // needs manual cleanup or reclaim.)
512
+ async _releaseFailedClaims(ctx, dispatchSrcIds, isCreate, outcomes, wonUidBySourceId, claimedValues) {
283
513
  var _a;
284
514
  const uids = [];
515
+ const created = new Set(dispatchSrcIds.filter((_, i) => { var _a; return isCreate[i] && ((_a = outcomes[i]) === null || _a === void 0 ? void 0 : _a.status) === 'ok'; }));
285
516
  for (let i = 0; i < dispatchSrcIds.length; i++) {
286
517
  if (!isCreate[i])
287
518
  continue;
288
519
  if (((_a = outcomes[i]) === null || _a === void 0 ? void 0 : _a.status) === 'ok')
289
520
  continue;
521
+ if (!created.has(dispatchSrcIds[i]))
522
+ this._releaseMatchValue(claimedValues, dispatchSrcIds[i]);
290
523
  const uid = wonUidBySourceId.get(dispatchSrcIds[i]);
291
524
  if (uid)
292
525
  uids.push(uid);
@@ -402,6 +635,13 @@ class IdMappingSyncStrategy {
402
635
  return terminal;
403
636
  await ((_m = source === null || source === void 0 ? void 0 : source.afterResolve) === null || _m === void 0 ? void 0 : _m.call(source, ctx));
404
637
  await ((_o = target.afterResolve) === null || _o === void 0 ? void 0 : _o.call(target, ctx));
638
+ // After afterResolve, as in processBatch, so hooks can still shape the match value.
639
+ const match = await this._matchExistingTargets(ctx, flow, target, [{ mapped, sourceId }]);
640
+ const matchFailure = match.failures.get(0);
641
+ if (matchFailure) {
642
+ (0, sync_pipeline_errors_1.captureRecordError)(ctx, 'resolve', 0, matchFailure.message, raw, sourceId, matchFailure.errorClass);
643
+ return { status: 'failed', recordsProcessed: 0, error: matchFailure.message };
644
+ }
405
645
  // Step 5: write to target — adapter performs insert (new) or update (existing).
406
646
  await ((_p = source === null || source === void 0 ? void 0 : source.beforeUpsert) === null || _p === void 0 ? void 0 : _p.call(source, ctx));
407
647
  await ((_q = target.beforeUpsert) === null || _q === void 0 ? void 0 : _q.call(target, ctx));
@@ -429,6 +669,8 @@ class IdMappingSyncStrategy {
429
669
  reservedUid = wonUidBySourceId.get(sourceId);
430
670
  }
431
671
  const releaseReservation = async () => {
672
+ if (isCreate)
673
+ this._releaseMatchValue(match.claimed, sourceId);
432
674
  if (isCreate && reservedUid) {
433
675
  await retryOnce(() => this.idMappingService.deleteReservations(ctx, [reservedUid])).catch((err) => ctx.logger.error(`id_mapping_reservation_release_failed: sourceId=${sourceId} ` +
434
676
  `uid=${reservedUid} error=${err instanceof Error ? err.message : String(err)}`));
@@ -671,13 +913,21 @@ class IdMappingSyncStrategy {
671
913
  });
672
914
  if (entries.length === 0)
673
915
  return;
674
- await retryOnce(() => this.idMappingService.upsertMappings(ctx, entries)).catch((err) => {
916
+ try {
917
+ await retryOnce(() => this.idMappingService.upsertMappings(ctx, entries));
918
+ }
919
+ catch (err) {
675
920
  const message = err instanceof Error ? err.message : String(err);
676
921
  // These records DID land in the target but their id pair wasn't saved, so the next run
677
922
  // would re-create duplicates. Record per source id so they surface for reconciliation.
678
923
  (0, sync_pipeline_errors_1.capturePerRecord)(ctx, 'mapping_write', message, createSourceIds.map((sourceId) => ({ sourceId })));
679
924
  ctx.logger.error(`mapping_write_failed: dataFlowId=${flow.id} error=${(0, helpers_1.truncate)(message)} entries=${entries.length}`);
680
- });
925
+ return;
926
+ }
927
+ if (this._matchExistingField(ctx, flow, target) === null)
928
+ return;
929
+ for (const e of entries)
930
+ this._linkedThisRun.set(e.targetId, e.sourceId);
681
931
  }
682
932
  }
683
933
  exports.IdMappingSyncStrategy = IdMappingSyncStrategy;