@skedulo/integration-sdk 0.1.2 → 0.2.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.
- package/CHANGELOG.md +12 -0
- package/README.md +59 -3
- package/dist/adapters/base.adapter.d.ts +61 -0
- package/dist/adapters/base.adapter.d.ts.map +1 -0
- package/dist/adapters/base.adapter.js +69 -0
- package/dist/adapters/base.adapter.js.map +1 -0
- package/dist/adapters/skedulo.adapter.d.ts +8 -0
- package/dist/adapters/skedulo.adapter.d.ts.map +1 -1
- package/dist/adapters/skedulo.adapter.js +79 -4
- package/dist/adapters/skedulo.adapter.js.map +1 -1
- package/dist/browser.d.ts +3 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +3 -1
- package/dist/browser.js.map +1 -1
- package/dist/clients/dataflow.client.d.ts +1 -1
- package/dist/clients/dataflow.client.d.ts.map +1 -1
- package/dist/clients/dataflow.client.js +6 -4
- package/dist/clients/dataflow.client.js.map +1 -1
- package/dist/clients/proxy.client.d.ts +1 -0
- package/dist/clients/proxy.client.d.ts.map +1 -1
- package/dist/clients/proxy.client.js +5 -1
- package/dist/clients/proxy.client.js.map +1 -1
- package/dist/constants.d.ts +15 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +14 -1
- package/dist/constants.js.map +1 -1
- package/dist/context.d.ts +7 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/index.d.ts +10 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/interfaces/adapter.interface.d.ts +54 -19
- package/dist/interfaces/adapter.interface.d.ts.map +1 -1
- package/dist/interfaces/field-mapping.interface.d.ts +10 -5
- package/dist/interfaces/field-mapping.interface.d.ts.map +1 -1
- package/dist/interfaces/integration-capabilities.interface.d.ts +6 -0
- package/dist/interfaces/integration-capabilities.interface.d.ts.map +1 -1
- package/dist/interfaces/lookup-rule.interface.d.ts +8 -7
- package/dist/interfaces/lookup-rule.interface.d.ts.map +1 -1
- package/dist/interfaces/sync-flow-strategy.interface.d.ts +15 -0
- package/dist/interfaces/sync-flow-strategy.interface.d.ts.map +1 -0
- package/dist/interfaces/sync-flow-strategy.interface.js +3 -0
- package/dist/interfaces/sync-flow-strategy.interface.js.map +1 -0
- package/dist/interfaces/sync-pipeline.interface.d.ts +108 -0
- package/dist/interfaces/sync-pipeline.interface.d.ts.map +1 -0
- package/dist/interfaces/sync-pipeline.interface.js +12 -0
- package/dist/interfaces/sync-pipeline.interface.js.map +1 -0
- package/dist/services/external-id-sync.strategy.d.ts +13 -0
- package/dist/services/external-id-sync.strategy.d.ts.map +1 -0
- package/dist/services/external-id-sync.strategy.js +139 -0
- package/dist/services/external-id-sync.strategy.js.map +1 -0
- package/dist/services/field-mapping.service.d.ts +30 -0
- package/dist/services/field-mapping.service.d.ts.map +1 -0
- package/dist/services/field-mapping.service.js +131 -0
- package/dist/services/field-mapping.service.js.map +1 -0
- package/dist/services/id-mapping-sync.strategy.d.ts +19 -0
- package/dist/services/id-mapping-sync.strategy.d.ts.map +1 -0
- package/dist/services/id-mapping-sync.strategy.js +389 -0
- package/dist/services/id-mapping-sync.strategy.js.map +1 -0
- package/dist/services/id-mapping.service.d.ts +38 -0
- package/dist/services/id-mapping.service.d.ts.map +1 -0
- package/dist/services/id-mapping.service.js +207 -0
- package/dist/services/id-mapping.service.js.map +1 -0
- package/dist/services/preview.service.js +2 -2
- package/dist/services/preview.service.js.map +1 -1
- package/dist/services/sync-runner.d.ts +3 -0
- package/dist/services/sync-runner.d.ts.map +1 -1
- package/dist/services/sync-runner.js +22 -7
- package/dist/services/sync-runner.js.map +1 -1
- package/dist/services/sync.service.d.ts +3 -2
- package/dist/services/sync.service.d.ts.map +1 -1
- package/dist/services/sync.service.js +55 -109
- package/dist/services/sync.service.js.map +1 -1
- package/package.json +2 -1
- package/yarn.lock +3 -3
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ExternalIdSyncStrategy = void 0;
|
|
15
|
+
const field_mapping_service_1 = require("./field-mapping.service");
|
|
16
|
+
// ExternalIdSyncStrategy encapsulates the original SyncService batch and event logic.
|
|
17
|
+
//
|
|
18
|
+
// Identity resolution: target.resolveLookups() uses EQL to translate ExternalId → UID.
|
|
19
|
+
// This is the default strategy — zero behaviour change from the pre-strategy SyncService.
|
|
20
|
+
class ExternalIdSyncStrategy {
|
|
21
|
+
async processBatch(ctx, flow, source, target, records, localFilter) {
|
|
22
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
23
|
+
// Step 3b: filter records and apply FME field mappings.
|
|
24
|
+
const _s = await (0, field_mapping_service_1.filterAndMapBatch)(flow, records, localFilter, (_b = (_a = source === null || source === void 0 ? void 0 : source.getRecordIdField) === null || _a === void 0 ? void 0 : _a.call(source)) !== null && _b !== void 0 ? _b : 'id', (msg) => ctx.logger.error(`dlq_write: dataFlowId=${flow.id} error=${msg}`)), { pairs, sourceIds: _sourceIds } = _s, filterStats = __rest(_s, ["pairs", "sourceIds"]);
|
|
25
|
+
const stats = Object.assign({}, filterStats);
|
|
26
|
+
// Sync pipeline stats so hooks can read them.
|
|
27
|
+
if (ctx.pipeline) {
|
|
28
|
+
ctx.pipeline.data = pairs;
|
|
29
|
+
ctx.pipeline.stats = stats;
|
|
30
|
+
}
|
|
31
|
+
if (pairs.length === 0)
|
|
32
|
+
return stats;
|
|
33
|
+
// afterMap hook — ctx.pipeline.data[].mapped is now populated.
|
|
34
|
+
await ((_c = source === null || source === void 0 ? void 0 : source.afterMap) === null || _c === void 0 ? void 0 : _c.call(source, ctx));
|
|
35
|
+
await ((_d = target.afterMap) === null || _d === void 0 ? void 0 : _d.call(target, ctx));
|
|
36
|
+
// Step 4: resolve relationships (ExternalId strategy: EQL via resolveLookups).
|
|
37
|
+
await ((_e = source === null || source === void 0 ? void 0 : source.beforeResolve) === null || _e === void 0 ? void 0 : _e.call(source, ctx));
|
|
38
|
+
await ((_f = target.beforeResolve) === null || _f === void 0 ? void 0 : _f.call(target, ctx));
|
|
39
|
+
if (target.resolveLookups) {
|
|
40
|
+
try {
|
|
41
|
+
await target.resolveLookups(ctx, flow, pairs);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
45
|
+
captureProcessError(ctx, 'resolve', message, stats.succeeded);
|
|
46
|
+
stats.failed += stats.succeeded;
|
|
47
|
+
stats.succeeded = 0;
|
|
48
|
+
return stats;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
await ((_g = source === null || source === void 0 ? void 0 : source.afterResolve) === null || _g === void 0 ? void 0 : _g.call(source, ctx));
|
|
52
|
+
await ((_h = target.afterResolve) === null || _h === void 0 ? void 0 : _h.call(target, ctx));
|
|
53
|
+
// Step 5: write to target.
|
|
54
|
+
await ((_j = source === null || source === void 0 ? void 0 : source.beforeUpsert) === null || _j === void 0 ? void 0 : _j.call(source, ctx));
|
|
55
|
+
await ((_k = target.beforeUpsert) === null || _k === void 0 ? void 0 : _k.call(target, ctx));
|
|
56
|
+
try {
|
|
57
|
+
const outcomes = await target.upsert(ctx, flow, pairs.map((p) => p.mapped));
|
|
58
|
+
if (ctx.pipeline)
|
|
59
|
+
ctx.pipeline.outcomes = outcomes;
|
|
60
|
+
for (let i = 0; i < outcomes.length; i++) {
|
|
61
|
+
if (outcomes[i].status !== 'ok') {
|
|
62
|
+
const message = (_l = outcomes[i].error) !== null && _l !== void 0 ? _l : outcomes[i].status;
|
|
63
|
+
captureRecordError(ctx, 'upsert', i, message, (_m = pairs[i]) === null || _m === void 0 ? void 0 : _m.raw);
|
|
64
|
+
ctx.logger.error(`upsert_failed: dataFlowId=${flow.id} recordIndex=${i} status=${outcomes[i].status} error=${message} data=${JSON.stringify((_p = (_o = pairs[i]) === null || _o === void 0 ? void 0 : _o.raw) !== null && _p !== void 0 ? _p : {})}`);
|
|
65
|
+
stats.succeeded--;
|
|
66
|
+
stats.failed++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
await ((_q = source === null || source === void 0 ? void 0 : source.afterUpsert) === null || _q === void 0 ? void 0 : _q.call(source, ctx));
|
|
70
|
+
await ((_r = target.afterUpsert) === null || _r === void 0 ? void 0 : _r.call(target, ctx));
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
74
|
+
captureProcessError(ctx, 'upsert', message, stats.succeeded);
|
|
75
|
+
stats.failed += stats.succeeded;
|
|
76
|
+
stats.succeeded = 0;
|
|
77
|
+
}
|
|
78
|
+
return stats;
|
|
79
|
+
}
|
|
80
|
+
async handleDeleteEvent(ctx, flow, target, recordId) {
|
|
81
|
+
var _a, _b;
|
|
82
|
+
if (ctx.pipeline)
|
|
83
|
+
ctx.pipeline.deleteIds = [recordId];
|
|
84
|
+
await ((_a = target.beforeDelete) === null || _a === void 0 ? void 0 : _a.call(target, ctx));
|
|
85
|
+
try {
|
|
86
|
+
await target.delete(ctx, flow, [recordId]);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
90
|
+
captureProcessError(ctx, 'delete', message, 1);
|
|
91
|
+
ctx.logger.error(`delete_failed: dataFlowId=${flow.id} recordId=${recordId} error=${message}`);
|
|
92
|
+
return { status: 'failed', recordsProcessed: 0, error: message };
|
|
93
|
+
}
|
|
94
|
+
await ((_b = target.afterDelete) === null || _b === void 0 ? void 0 : _b.call(target, ctx));
|
|
95
|
+
return { status: 'synced', recordsProcessed: 1 };
|
|
96
|
+
}
|
|
97
|
+
async handleUpsertEvent(ctx, flow, _source, target, event) {
|
|
98
|
+
var _a, _b, _c;
|
|
99
|
+
// Step 3b: filter + FME mapping (single record).
|
|
100
|
+
const mapped = await (0, field_mapping_service_1.executeMapping)(flow, event.payload);
|
|
101
|
+
if (!mapped) {
|
|
102
|
+
return { status: 'filtered', recordsProcessed: 0 };
|
|
103
|
+
}
|
|
104
|
+
if (ctx.pipeline) {
|
|
105
|
+
ctx.pipeline.data = [{ raw: event.payload, mapped }];
|
|
106
|
+
}
|
|
107
|
+
// Step 5: write to target.
|
|
108
|
+
await ((_a = target.beforeUpsert) === null || _a === void 0 ? void 0 : _a.call(target, ctx));
|
|
109
|
+
const outcomes = await target.upsert(ctx, flow, [mapped]);
|
|
110
|
+
const outcome = outcomes[0];
|
|
111
|
+
if (ctx.pipeline)
|
|
112
|
+
ctx.pipeline.outcomes = outcomes;
|
|
113
|
+
await ((_b = target.afterUpsert) === null || _b === void 0 ? void 0 : _b.call(target, ctx));
|
|
114
|
+
if (outcome.status === 'ok') {
|
|
115
|
+
return { status: 'synced', recordsProcessed: 1 };
|
|
116
|
+
}
|
|
117
|
+
const message = (_c = outcome.error) !== null && _c !== void 0 ? _c : outcome.status;
|
|
118
|
+
captureRecordError(ctx, 'upsert', 0, message, event.payload);
|
|
119
|
+
ctx.logger.error(`push_failed: dataFlowId=${flow.id} recordId=${event.recordId} status=${outcome.status} error=${message} data=${JSON.stringify(event.payload)}`);
|
|
120
|
+
return { status: 'failed', recordsProcessed: 0, error: message };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.ExternalIdSyncStrategy = ExternalIdSyncStrategy;
|
|
124
|
+
// Captures a record-level pipeline error and logs it. recordIndex is the position in
|
|
125
|
+
// ctx.pipeline.data. data is the raw source record at the point of failure.
|
|
126
|
+
function captureRecordError(ctx, stage, recordIndex, message, data) {
|
|
127
|
+
var _a;
|
|
128
|
+
(_a = ctx.pipeline) === null || _a === void 0 ? void 0 : _a.errors.push({ stage, message, recordIndex, data });
|
|
129
|
+
}
|
|
130
|
+
// Captures a process-level (whole-batch) pipeline error and logs it.
|
|
131
|
+
// affectedCount is how many records were lost due to the failure.
|
|
132
|
+
function captureProcessError(ctx, stage, message, affectedCount) {
|
|
133
|
+
var _a;
|
|
134
|
+
if (ctx.pipeline)
|
|
135
|
+
ctx.pipeline.failedAtStage = stage;
|
|
136
|
+
(_a = ctx.pipeline) === null || _a === void 0 ? void 0 : _a.errors.push({ stage, message });
|
|
137
|
+
ctx.logger.error(`process_failed: stage=${stage} message=${message} affectedRecords=${affectedCount}`);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=external-id-sync.strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-id-sync.strategy.js","sourceRoot":"","sources":["../../src/services/external-id-sync.strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { FilterSpec, DataFlow } from '../types';
|
|
2
|
+
import type { EnrichmentPair } from '../interfaces/adapter.interface';
|
|
3
|
+
import { compileFilter } from '../utils/compileFilter';
|
|
4
|
+
export { compileFilter };
|
|
5
|
+
export declare const engineCache: Map<string, MappingEngine>;
|
|
6
|
+
export declare function applyMapping(flow: DataFlow, record: Record<string, unknown>): Promise<Record<string, unknown> | null>;
|
|
7
|
+
export declare function executeMapping(flow: DataFlow, record: Record<string, unknown>): Promise<Record<string, unknown> | null>;
|
|
8
|
+
export interface MappingDetail {
|
|
9
|
+
status: 'success' | 'filtered' | 'required_missing' | 'error';
|
|
10
|
+
data: Record<string, unknown> | null;
|
|
11
|
+
missingFields?: string[];
|
|
12
|
+
errorMessage?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function executeMappingDetailed(flow: DataFlow, record: Record<string, unknown>): Promise<MappingDetail>;
|
|
15
|
+
export declare function evaluateFilter(filter: FilterSpec | undefined, record: Record<string, unknown>): Promise<boolean>;
|
|
16
|
+
export interface FilterMapResult {
|
|
17
|
+
pairs: EnrichmentPair[];
|
|
18
|
+
sourceIds: string[];
|
|
19
|
+
succeeded: number;
|
|
20
|
+
filtered: number;
|
|
21
|
+
failed: number;
|
|
22
|
+
dlqWrites: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Pipeline step 1: filter records using localFilter then apply FME field mappings.
|
|
26
|
+
* Returns mapped pairs alongside per-record source IDs and running counters.
|
|
27
|
+
* Strategies call this before their identity-resolution step.
|
|
28
|
+
*/
|
|
29
|
+
export declare function filterAndMapBatch(flow: DataFlow, records: Record<string, unknown>[], localFilter: FilterSpec | null, sourceIdField: string, onError: (message: string) => void): Promise<FilterMapResult>;
|
|
30
|
+
//# sourceMappingURL=field-mapping.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-mapping.service.d.ts","sourceRoot":"","sources":["../../src/services/field-mapping.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,CAAC;AAGzB,eAAO,MAAM,WAAW,4BAAmC,CAAC;AAG5D,wBAAsB,YAAY,CAChC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAIzC;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAKzC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,kBAAkB,GAAG,OAAO,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,aAAa,CAAC,CAiCxB;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAClC,WAAW,EAAE,UAAU,GAAG,IAAI,EAC9B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC,eAAe,CAAC,CAmC1B"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.engineCache = exports.compileFilter = void 0;
|
|
7
|
+
exports.applyMapping = applyMapping;
|
|
8
|
+
exports.executeMapping = executeMapping;
|
|
9
|
+
exports.executeMappingDetailed = executeMappingDetailed;
|
|
10
|
+
exports.evaluateFilter = evaluateFilter;
|
|
11
|
+
exports.filterAndMapBatch = filterAndMapBatch;
|
|
12
|
+
const jsonata_1 = __importDefault(require("jsonata"));
|
|
13
|
+
const field_mapping_engine_1 = require("@skedulo/field-mapping-engine");
|
|
14
|
+
const compileFilter_1 = require("../utils/compileFilter");
|
|
15
|
+
Object.defineProperty(exports, "compileFilter", { enumerable: true, get: function () { return compileFilter_1.compileFilter; } });
|
|
16
|
+
// Cache compiled engines per mapping signature to avoid re-parsing JSONata per event
|
|
17
|
+
exports.engineCache = new Map();
|
|
18
|
+
// Exported for testing. Not part of the public SDK API (not re-exported from index.ts).
|
|
19
|
+
async function applyMapping(flow, record) {
|
|
20
|
+
const engine = getEngine(flow);
|
|
21
|
+
const result = await engine.processRecord(record);
|
|
22
|
+
return result.status === 'SUCCESS' ? result.data : null;
|
|
23
|
+
}
|
|
24
|
+
async function executeMapping(flow, record) {
|
|
25
|
+
// Filter first — cheap short-circuit
|
|
26
|
+
if (flow.filter && !(await evaluateFilter(flow.filter, record)))
|
|
27
|
+
return null;
|
|
28
|
+
return applyMapping(flow, record);
|
|
29
|
+
}
|
|
30
|
+
async function executeMappingDetailed(flow, record) {
|
|
31
|
+
var _a, _b, _c;
|
|
32
|
+
if (flow.filter && !(await evaluateFilter(flow.filter, record))) {
|
|
33
|
+
return { status: 'filtered', data: null };
|
|
34
|
+
}
|
|
35
|
+
const engine = getEngine(flow);
|
|
36
|
+
const result = await engine.processRecord(record);
|
|
37
|
+
if (result.status === 'SUCCESS') {
|
|
38
|
+
return { status: 'success', data: result.data };
|
|
39
|
+
}
|
|
40
|
+
const hasRequiredFieldError = result.errors.some((e) => e.includes('Required field') && e.includes('is missing'));
|
|
41
|
+
if (hasRequiredFieldError) {
|
|
42
|
+
const requiredValidations = (_c = (_b = (_a = flow.mappingConfig) === null || _a === void 0 ? void 0 : _a.validations) === null || _b === void 0 ? void 0 : _b.filter((v) => v.action === 'ERROR')) !== null && _c !== void 0 ? _c : [];
|
|
43
|
+
const missingFields = requiredValidations
|
|
44
|
+
.filter((v) => v.message && result.errors.some((e) => e === v.message))
|
|
45
|
+
.map((v) => {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
const match = (_a = v.message) === null || _a === void 0 ? void 0 : _a.match(/Required field (.+) is missing/);
|
|
48
|
+
return match ? match[1] : ((_b = v.label) !== null && _b !== void 0 ? _b : 'unknown');
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
status: 'required_missing',
|
|
52
|
+
data: null,
|
|
53
|
+
missingFields: missingFields.length > 0 ? missingFields : undefined,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return { status: 'error', data: null, errorMessage: result.errors.join('; ') };
|
|
57
|
+
}
|
|
58
|
+
async function evaluateFilter(filter, record) {
|
|
59
|
+
if (!filter)
|
|
60
|
+
return true;
|
|
61
|
+
const exprStr = (0, compileFilter_1.compileFilter)(filter);
|
|
62
|
+
if (exprStr === 'true')
|
|
63
|
+
return true;
|
|
64
|
+
const expr = (0, jsonata_1.default)(exprStr);
|
|
65
|
+
const result = await expr.evaluate(record);
|
|
66
|
+
return result === true;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Pipeline step 1: filter records using localFilter then apply FME field mappings.
|
|
70
|
+
* Returns mapped pairs alongside per-record source IDs and running counters.
|
|
71
|
+
* Strategies call this before their identity-resolution step.
|
|
72
|
+
*/
|
|
73
|
+
async function filterAndMapBatch(flow, records, localFilter, sourceIdField, onError) {
|
|
74
|
+
var _a;
|
|
75
|
+
if (localFilter)
|
|
76
|
+
(0, compileFilter_1.compileFilter)(localFilter);
|
|
77
|
+
const result = {
|
|
78
|
+
pairs: [],
|
|
79
|
+
sourceIds: [],
|
|
80
|
+
succeeded: 0,
|
|
81
|
+
filtered: 0,
|
|
82
|
+
failed: 0,
|
|
83
|
+
dlqWrites: 0,
|
|
84
|
+
};
|
|
85
|
+
for (const record of records) {
|
|
86
|
+
if (localFilter && !(await evaluateFilter(localFilter, record))) {
|
|
87
|
+
result.filtered++;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const mapped = await applyMapping(flow, record);
|
|
92
|
+
if (!mapped) {
|
|
93
|
+
result.filtered++;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
result.pairs.push({ raw: record, mapped });
|
|
97
|
+
result.sourceIds.push(String((_a = record[sourceIdField]) !== null && _a !== void 0 ? _a : ''));
|
|
98
|
+
result.succeeded++;
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
result.failed++;
|
|
102
|
+
result.dlqWrites++;
|
|
103
|
+
onError(err instanceof Error ? err.message : String(err));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
function getEngine(flow) {
|
|
109
|
+
var _a, _b, _c;
|
|
110
|
+
const mc = flow.mappingConfig;
|
|
111
|
+
if (!mc)
|
|
112
|
+
throw new Error(`No mappingConfig for flow ${flow.id}`);
|
|
113
|
+
const key = `${flow.id}:${JSON.stringify(mc)}`;
|
|
114
|
+
let engine = exports.engineCache.get(key);
|
|
115
|
+
if (!engine) {
|
|
116
|
+
engine = new field_mapping_engine_1.MappingEngine({
|
|
117
|
+
integration_id: `sdk-${flow.id}`,
|
|
118
|
+
sourceSystem: '',
|
|
119
|
+
sourceObject: '',
|
|
120
|
+
destinationSystem: '',
|
|
121
|
+
destinationObject: '',
|
|
122
|
+
mappings: mc.mappings.map(({ target, expression, label }) => ({ target, expression, label })),
|
|
123
|
+
translations: (_a = mc.translations) !== null && _a !== void 0 ? _a : [],
|
|
124
|
+
validations: ((_b = mc.validations) !== null && _b !== void 0 ? _b : []).map((v) => { var _a; return (Object.assign(Object.assign({}, v), { label: (_a = v.label) !== null && _a !== void 0 ? _a : '' })); }),
|
|
125
|
+
variables: (_c = mc.variables) !== null && _c !== void 0 ? _c : [],
|
|
126
|
+
});
|
|
127
|
+
exports.engineCache.set(key, engine);
|
|
128
|
+
}
|
|
129
|
+
return engine;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=field-mapping.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-mapping.service.js","sourceRoot":"","sources":["../../src/services/field-mapping.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IntegrationContext } from '../context';
|
|
2
|
+
import type { Adapter } from '../interfaces/adapter.interface';
|
|
3
|
+
import type { DataFlow } from '../interfaces/data-flow-spec.interface';
|
|
4
|
+
import type { FilterSpec } from '../interfaces/filter.interface';
|
|
5
|
+
import type { MappedEvent } from '../interfaces/mapped-event.interface';
|
|
6
|
+
import type { BatchResult, SyncResult } from '../interfaces/sync-result.interface';
|
|
7
|
+
import type { SyncFlowStrategy } from '../interfaces/sync-flow-strategy.interface';
|
|
8
|
+
import { IdMappingService } from './id-mapping.service';
|
|
9
|
+
export declare class IdMappingSyncStrategy implements SyncFlowStrategy {
|
|
10
|
+
private readonly idMappingService;
|
|
11
|
+
constructor(idMappingService: IdMappingService);
|
|
12
|
+
processBatch(ctx: IntegrationContext, flow: DataFlow, source: Adapter | null, target: Adapter, records: Record<string, unknown>[], localFilter: FilterSpec | null): Promise<BatchResult>;
|
|
13
|
+
handleDeleteEvent(ctx: IntegrationContext, flow: DataFlow, target: Adapter, recordId: string): Promise<SyncResult>;
|
|
14
|
+
handleUpsertEvent(ctx: IntegrationContext, flow: DataFlow, source: Adapter | null, target: Adapter, event: MappedEvent): Promise<SyncResult>;
|
|
15
|
+
private _resolveRelationshipsBatch;
|
|
16
|
+
private _resolveRelationshipsOne;
|
|
17
|
+
private _writeMappingEntries;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=id-mapping-sync.strategy.d.ts.map
|
|
@@ -0,0 +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;AAGnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAsBxD,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;IAkFjB,iBAAiB,CACrB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC;IAqDhB,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;YA2DR,0BAA0B;YA+F1B,wBAAwB;YAqExB,oBAAoB;CA4CnC"}
|