@skedulo/integration-sdk 0.5.4 → 0.5.6
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 +2 -1
- package/dist/actions/event/on-skedulo.action.d.ts.map +1 -1
- package/dist/actions/event/on-skedulo.action.js +12 -11
- package/dist/actions/event/on-skedulo.action.js.map +1 -1
- package/dist/actions/event/on-vendor.action.d.ts.map +1 -1
- package/dist/actions/event/on-vendor.action.js +3 -2
- package/dist/actions/event/on-vendor.action.js.map +1 -1
- package/dist/actions/sync/run-flow.action.js +24 -13
- package/dist/actions/sync/run-flow.action.js.map +1 -1
- package/dist/actions/sync/run-job.action.d.ts.map +1 -1
- package/dist/actions/sync/run-job.action.js +20 -3
- package/dist/actions/sync/run-job.action.js.map +1 -1
- package/dist/actions/sync/types.d.ts +3 -2
- package/dist/actions/sync/types.d.ts.map +1 -1
- package/dist/adapters/skedulo.adapter.d.ts.map +1 -1
- package/dist/adapters/skedulo.adapter.js +2 -1
- package/dist/adapters/skedulo.adapter.js.map +1 -1
- package/dist/browser.d.ts +2 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +5 -1
- package/dist/browser.js.map +1 -1
- package/dist/clients/integration-log.client.d.ts +14 -0
- package/dist/clients/integration-log.client.d.ts.map +1 -0
- package/dist/clients/integration-log.client.js +24 -0
- package/dist/clients/integration-log.client.js.map +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/context.d.ts +8 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +5 -0
- package/dist/context.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces/integration-log.interface.d.ts +38 -0
- package/dist/interfaces/integration-log.interface.d.ts.map +1 -0
- package/dist/interfaces/integration-log.interface.js +14 -0
- package/dist/interfaces/integration-log.interface.js.map +1 -0
- package/dist/interfaces/sync-result.interface.d.ts +12 -0
- package/dist/interfaces/sync-result.interface.d.ts.map +1 -1
- package/dist/services/external-id-sync.strategy.d.ts.map +1 -1
- package/dist/services/external-id-sync.strategy.js +10 -6
- package/dist/services/external-id-sync.strategy.js.map +1 -1
- package/dist/services/id-mapping-sync.strategy.d.ts +2 -0
- package/dist/services/id-mapping-sync.strategy.d.ts.map +1 -1
- package/dist/services/id-mapping-sync.strategy.js +146 -32
- package/dist/services/id-mapping-sync.strategy.js.map +1 -1
- package/dist/services/id-mapping.service.d.ts +27 -0
- package/dist/services/id-mapping.service.d.ts.map +1 -1
- package/dist/services/id-mapping.service.js +70 -0
- package/dist/services/id-mapping.service.js.map +1 -1
- package/dist/services/run-log-builder.d.ts +35 -0
- package/dist/services/run-log-builder.d.ts.map +1 -0
- package/dist/services/run-log-builder.js +61 -0
- package/dist/services/run-log-builder.js.map +1 -0
- package/dist/services/sync-runner.d.ts +2 -5
- package/dist/services/sync-runner.d.ts.map +1 -1
- package/dist/services/sync-runner.js +159 -27
- package/dist/services/sync-runner.js.map +1 -1
- package/dist/services/sync.service.d.ts.map +1 -1
- package/dist/services/sync.service.js +22 -1
- package/dist/services/sync.service.js.map +1 -1
- package/dist/utils/helpers.d.ts +2 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +8 -0
- package/dist/utils/helpers.js.map +1 -1
- package/package.json +1 -1
package/dist/context.js
CHANGED
|
@@ -8,6 +8,7 @@ const pulse_solution_services_1 = require("@skedulo/pulse-solution-services");
|
|
|
8
8
|
const proxy_client_1 = require("./clients/proxy.client");
|
|
9
9
|
const dataflow_client_1 = require("./clients/dataflow.client");
|
|
10
10
|
const integration_config_client_1 = require("./clients/integration-config.client");
|
|
11
|
+
const integration_log_client_1 = require("./clients/integration-log.client");
|
|
11
12
|
const dataflow_service_1 = require("./services/dataflow.service");
|
|
12
13
|
const metrics_1 = require("./actions/utils/metrics");
|
|
13
14
|
class IntegrationContext extends pulse_solution_services_1.ExecutionContext {
|
|
@@ -48,6 +49,10 @@ class IntegrationContext extends pulse_solution_services_1.ExecutionContext {
|
|
|
48
49
|
var _a;
|
|
49
50
|
return ((_a = this._integrationConfigClient) !== null && _a !== void 0 ? _a : (this._integrationConfigClient = new integration_config_client_1.IntegrationConfigClient(this._baseConfig, this.executionOptions)));
|
|
50
51
|
}
|
|
52
|
+
get integrationLogClient() {
|
|
53
|
+
var _a;
|
|
54
|
+
return ((_a = this._integrationLogClient) !== null && _a !== void 0 ? _a : (this._integrationLogClient = new integration_log_client_1.IntegrationLogClient(this._baseConfig, this.executionOptions)));
|
|
55
|
+
}
|
|
51
56
|
get dataFlowService() {
|
|
52
57
|
var _a;
|
|
53
58
|
return ((_a = this._dataFlowService) !== null && _a !== void 0 ? _a : (this._dataFlowService = new dataflow_service_1.DataFlowService(this.dataFlowClient)));
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ export type { HttpMethod, ProxyRequestOptions, ProxyResult } from './clients/pro
|
|
|
7
7
|
export { DataFlowClient } from './clients/dataflow.client';
|
|
8
8
|
export type { DataFlowListParams } from './clients/dataflow.client';
|
|
9
9
|
export { IntegrationConfigClient } from './clients/integration-config.client';
|
|
10
|
+
export { IntegrationLogClient } from './clients/integration-log.client';
|
|
11
|
+
export { LogLevel, LogKind, LogSource } from './interfaces/integration-log.interface';
|
|
12
|
+
export type { IntegrationLogEntry } from './interfaces/integration-log.interface';
|
|
13
|
+
export { buildRunLogEntries } from './services/run-log-builder';
|
|
10
14
|
export { DataFlowService } from './services/dataflow.service';
|
|
11
15
|
export type { ScheduledJob, IntegrationConfig } from './interfaces/scheduled-job.interface';
|
|
12
16
|
export { asIntegrationConfig, JobIntervalUnit } from './interfaces/scheduled-job.interface';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
CHANGED
|
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
18
|
-
exports.humanizeFieldName = exports.requireAdmin = exports.isAdminRequest = exports.getQueryParam = exports.errorResponse = exports.okResponse = exports.unwrapProxy = exports.mockProxyResult = exports.runAdapterContractTests = exports.noopMetrics = exports.withMetrics = exports.withLogging = void 0;
|
|
17
|
+
exports.categoryRetryable = exports.UpstreamTransientError = exports.UpstreamPermanentError = exports.PreconditionFailedError = exports.NotImplementedError = exports.NotFoundError = exports.InvalidInputError = exports.ForbiddenError = exports.ConflictError = exports.ActionError = exports.SCHEDULED_JOB_NAME_HEADER = exports.ACTIONS = exports.ACTION_HEADER = exports.SyncStage = exports.BaseAdapterHandler = exports.AdapterRegistry = exports.executeMappingDetailed = exports.evaluateFilter = exports.executeMapping = exports.IdMappingService = exports.BaseAdapter = exports.skeduloAdapter = exports.SkeduloAdapter = exports.AdapterRoleError = exports.AdapterNotRegisteredError = exports.SyncRunner = exports.SyncService = exports.PreviewService = exports.JobIntervalUnit = exports.asIntegrationConfig = exports.DataFlowService = exports.buildRunLogEntries = exports.LogSource = exports.LogKind = exports.LogLevel = exports.IntegrationLogClient = exports.IntegrationConfigClient = exports.DataFlowClient = exports.ProxyClient = exports.createContextFactory = exports.createIntegrationContext = exports.IntegrationContext = exports.SKEDULO_SYSTEM = exports.DataFlowStatus = exports.LookupStrategy = exports.SyncMode = exports.AdapterRole = exports.LOOKUP_CHUNK_SIZE = exports.OperationName = exports.Strategy = void 0;
|
|
18
|
+
exports.humanizeFieldName = exports.requireAdmin = exports.isAdminRequest = exports.getQueryParam = exports.errorResponse = exports.okResponse = exports.unwrapProxy = exports.mockProxyResult = exports.runAdapterContractTests = exports.noopMetrics = exports.withMetrics = exports.withLogging = exports.withAudit = exports.requireAdminMiddleware = exports.compose = exports.defineAction = exports.categoryToStatus = void 0;
|
|
19
19
|
__exportStar(require("./types"), exports);
|
|
20
20
|
var constants_1 = require("./constants");
|
|
21
21
|
Object.defineProperty(exports, "Strategy", { enumerable: true, get: function () { return constants_1.Strategy; } });
|
|
@@ -36,6 +36,14 @@ var dataflow_client_1 = require("./clients/dataflow.client");
|
|
|
36
36
|
Object.defineProperty(exports, "DataFlowClient", { enumerable: true, get: function () { return dataflow_client_1.DataFlowClient; } });
|
|
37
37
|
var integration_config_client_1 = require("./clients/integration-config.client");
|
|
38
38
|
Object.defineProperty(exports, "IntegrationConfigClient", { enumerable: true, get: function () { return integration_config_client_1.IntegrationConfigClient; } });
|
|
39
|
+
var integration_log_client_1 = require("./clients/integration-log.client");
|
|
40
|
+
Object.defineProperty(exports, "IntegrationLogClient", { enumerable: true, get: function () { return integration_log_client_1.IntegrationLogClient; } });
|
|
41
|
+
var integration_log_interface_1 = require("./interfaces/integration-log.interface");
|
|
42
|
+
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return integration_log_interface_1.LogLevel; } });
|
|
43
|
+
Object.defineProperty(exports, "LogKind", { enumerable: true, get: function () { return integration_log_interface_1.LogKind; } });
|
|
44
|
+
Object.defineProperty(exports, "LogSource", { enumerable: true, get: function () { return integration_log_interface_1.LogSource; } });
|
|
45
|
+
var run_log_builder_1 = require("./services/run-log-builder");
|
|
46
|
+
Object.defineProperty(exports, "buildRunLogEntries", { enumerable: true, get: function () { return run_log_builder_1.buildRunLogEntries; } });
|
|
39
47
|
var dataflow_service_1 = require("./services/dataflow.service");
|
|
40
48
|
Object.defineProperty(exports, "DataFlowService", { enumerable: true, get: function () { return dataflow_service_1.DataFlowService; } });
|
|
41
49
|
var scheduled_job_interface_1 = require("./interfaces/scheduled-job.interface");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,yCASqB;AARnB,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;AAEhB,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,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AAExB,gFAA4F;AAAnF,8HAAA,mBAAmB,OAAA;AAAE,0HAAA,eAAe,OAAA;AAC7C,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AACvB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,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,0EAI0C;AAHxC,uHAAA,cAAc,OAAA;AACd,uHAAA,cAAc,OAAA;AACd,+HAAA,sBAAsB,OAAA;AAGxB,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AACxB,wEAAqE;AAA5D,0HAAA,kBAAkB,OAAA;AAc3B,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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,yCASqB;AARnB,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;AAEhB,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,8DAAgE;AAAvD,qHAAA,kBAAkB,OAAA;AAC3B,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AAExB,gFAA4F;AAAnF,8HAAA,mBAAmB,OAAA;AAAE,0HAAA,eAAe,OAAA;AAC7C,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AACvB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,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,0EAI0C;AAHxC,uHAAA,cAAc,OAAA;AACd,uHAAA,cAAc,OAAA;AACd,+HAAA,sBAAsB,OAAA;AAGxB,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AACxB,wEAAqE;AAA5D,0HAAA,kBAAkB,OAAA;AAc3B,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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SyncStage } from './sync-pipeline.interface';
|
|
2
|
+
export declare const LogLevel: {
|
|
3
|
+
readonly INFO: "info";
|
|
4
|
+
readonly WARNING: "warning";
|
|
5
|
+
readonly ERROR: "error";
|
|
6
|
+
};
|
|
7
|
+
export type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];
|
|
8
|
+
export declare const LogKind: {
|
|
9
|
+
readonly RUN_SUMMARY: "run_summary";
|
|
10
|
+
readonly RECORD_ERROR: "record_error";
|
|
11
|
+
};
|
|
12
|
+
export type LogKind = (typeof LogKind)[keyof typeof LogKind];
|
|
13
|
+
export declare const LogSource: {
|
|
14
|
+
readonly EVENT: "event";
|
|
15
|
+
readonly BATCH: "batch";
|
|
16
|
+
readonly SCHEDULED_JOB: "scheduled_job";
|
|
17
|
+
};
|
|
18
|
+
export type LogSource = (typeof LogSource)[keyof typeof LogSource];
|
|
19
|
+
/**
|
|
20
|
+
* One run-log row, written to integration-service `POST /logs`. Field set matches
|
|
21
|
+
* its CreateIntegrationLogDto; `tenantId` is stamped server-side from the token.
|
|
22
|
+
*/
|
|
23
|
+
export interface IntegrationLogEntry {
|
|
24
|
+
integrationType: string;
|
|
25
|
+
dataFlowId?: number | null;
|
|
26
|
+
dataFlowName?: string | null;
|
|
27
|
+
/** One per SyncRunner.run(). */
|
|
28
|
+
executionId: string;
|
|
29
|
+
source: LogSource;
|
|
30
|
+
level: LogLevel;
|
|
31
|
+
kind: LogKind;
|
|
32
|
+
stage?: SyncStage | null;
|
|
33
|
+
operation?: 'INSERT' | 'UPDATE' | 'DELETE' | null;
|
|
34
|
+
recordId?: string | null;
|
|
35
|
+
message: string;
|
|
36
|
+
data?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=integration-log.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-log.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/integration-log.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAG3D,eAAO,MAAM,QAAQ;;;;CAAgE,CAAC;AACtF,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAGhE,eAAO,MAAM,OAAO;;;CAAwE,CAAC;AAC7F,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAG7D,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LogSource = exports.LogKind = exports.LogLevel = void 0;
|
|
4
|
+
// Severity of a log entry. Mirrors integration-service's LogLevel.
|
|
5
|
+
exports.LogLevel = { INFO: 'info', WARNING: 'warning', ERROR: 'error' };
|
|
6
|
+
// Row shape: a per-run rollup or a per-record failure.
|
|
7
|
+
exports.LogKind = { RUN_SUMMARY: 'run_summary', RECORD_ERROR: 'record_error' };
|
|
8
|
+
// What drove the run.
|
|
9
|
+
exports.LogSource = {
|
|
10
|
+
EVENT: 'event',
|
|
11
|
+
BATCH: 'batch',
|
|
12
|
+
SCHEDULED_JOB: 'scheduled_job',
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=integration-log.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-log.interface.js","sourceRoot":"","sources":["../../src/interfaces/integration-log.interface.ts"],"names":[],"mappings":";;;AAEA,mEAAmE;AACtD,QAAA,QAAQ,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAW,CAAC;AAGtF,uDAAuD;AAC1C,QAAA,OAAO,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAW,CAAC;AAG7F,sBAAsB;AACT,QAAA,SAAS,GAAG;IACvB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,eAAe;CACtB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SyncPipelineError } from './sync-pipeline.interface';
|
|
1
2
|
export interface SyncResult {
|
|
2
3
|
status: 'synced' | 'filtered' | 'skipped' | 'failed' | 'precondition_failed';
|
|
3
4
|
recordsProcessed: number;
|
|
@@ -10,6 +11,17 @@ export interface BatchResult {
|
|
|
10
11
|
skipped: number;
|
|
11
12
|
failed: number;
|
|
12
13
|
dlqWrites: number;
|
|
14
|
+
/**
|
|
15
|
+
* Per-record errors accumulated across a run, capped at MAX_RECORD_ERRORS to
|
|
16
|
+
* bound memory. Populated by SyncService.run (snapshotted before each per-batch
|
|
17
|
+
* pipeline is cleared) so SyncRunner can emit record_error logs.
|
|
18
|
+
*/
|
|
19
|
+
errors?: SyncPipelineError[];
|
|
20
|
+
/**
|
|
21
|
+
* True total of record errors seen this run (may exceed errors.length once the
|
|
22
|
+
* cap kicks in). Lets the run-log builder report an accurate truncation count.
|
|
23
|
+
*/
|
|
24
|
+
errorCount?: number;
|
|
13
25
|
}
|
|
14
26
|
export interface PreviewResult {
|
|
15
27
|
sourceRecord: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-result.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/sync-result.interface.ts"],"names":[],"mappings":"
|
|
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,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;;;;OAIG;IACH,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-id-sync.strategy.d.ts","sourceRoot":"","sources":["../../src/services/external-id-sync.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,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;
|
|
1
|
+
{"version":3,"file":"external-id-sync.strategy.d.ts","sourceRoot":"","sources":["../../src/services/external-id-sync.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,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;AASnF,qBAAa,sBAAuB,YAAW,gBAAgB;IACvD,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;IAoFjB,iBAAiB,CACrB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC;IAiBhB,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;CA2CvB"}
|
|
@@ -13,15 +13,16 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.ExternalIdSyncStrategy = void 0;
|
|
15
15
|
const field_mapping_service_1 = require("./field-mapping.service");
|
|
16
|
+
const helpers_1 = require("../utils/helpers");
|
|
16
17
|
// ExternalIdSyncStrategy encapsulates the original SyncService batch and event logic.
|
|
17
18
|
//
|
|
18
19
|
// Identity resolution: target.resolveLookups() uses EQL to translate ExternalId → UID.
|
|
19
20
|
// This is the default strategy — zero behaviour change from the pre-strategy SyncService.
|
|
20
21
|
class ExternalIdSyncStrategy {
|
|
21
22
|
async processBatch(ctx, flow, source, target, records, localFilter) {
|
|
22
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p
|
|
23
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
23
24
|
// Step 3b: filter records and apply FME field mappings.
|
|
24
|
-
const
|
|
25
|
+
const _q = 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 } = _q, filterStats = __rest(_q, ["pairs", "sourceIds"]);
|
|
25
26
|
const stats = Object.assign(Object.assign({}, filterStats), { skipped: 0 });
|
|
26
27
|
// Sync pipeline stats so hooks can read them.
|
|
27
28
|
if (ctx.pipeline) {
|
|
@@ -61,13 +62,15 @@ class ExternalIdSyncStrategy {
|
|
|
61
62
|
if (outcomes[i].status !== 'ok') {
|
|
62
63
|
const message = (_l = outcomes[i].error) !== null && _l !== void 0 ? _l : outcomes[i].status;
|
|
63
64
|
captureRecordError(ctx, 'upsert', i, message, (_m = pairs[i]) === null || _m === void 0 ? void 0 : _m.raw);
|
|
64
|
-
|
|
65
|
+
// Identifiers + clamped message only — the raw record is captured into the
|
|
66
|
+
// pipeline error (persisted log), so dumping it here is redundant + leaks PII.
|
|
67
|
+
ctx.logger.error(`upsert_failed: dataFlowId=${flow.id} recordIndex=${i} status=${outcomes[i].status} error=${(0, helpers_1.truncate)(String(message))}`);
|
|
65
68
|
stats.succeeded--;
|
|
66
69
|
stats.failed++;
|
|
67
70
|
}
|
|
68
71
|
}
|
|
69
|
-
await ((
|
|
70
|
-
await ((
|
|
72
|
+
await ((_o = source === null || source === void 0 ? void 0 : source.afterUpsert) === null || _o === void 0 ? void 0 : _o.call(source, ctx));
|
|
73
|
+
await ((_p = target.afterUpsert) === null || _p === void 0 ? void 0 : _p.call(target, ctx));
|
|
71
74
|
}
|
|
72
75
|
catch (err) {
|
|
73
76
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -125,7 +128,8 @@ class ExternalIdSyncStrategy {
|
|
|
125
128
|
}
|
|
126
129
|
const message = (_g = outcome.error) !== null && _g !== void 0 ? _g : outcome.status;
|
|
127
130
|
captureRecordError(ctx, 'upsert', 0, message, raw);
|
|
128
|
-
|
|
131
|
+
// No raw record here — it's persisted via captureRecordError; console keeps identifiers only.
|
|
132
|
+
ctx.logger.error(`push_failed: dataFlowId=${flow.id} recordId=${event.recordId} status=${outcome.status} error=${(0, helpers_1.truncate)(String(message))}`);
|
|
129
133
|
return { status: 'failed', recordsProcessed: 0, error: message };
|
|
130
134
|
}
|
|
131
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-id-sync.strategy.js","sourceRoot":"","sources":["../../src/services/external-id-sync.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAQA,mEAA4E;
|
|
1
|
+
{"version":3,"file":"external-id-sync.strategy.js","sourceRoot":"","sources":["../../src/services/external-id-sync.strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export declare class IdMappingSyncStrategy implements SyncFlowStrategy {
|
|
|
10
10
|
private readonly idMappingService;
|
|
11
11
|
constructor(idMappingService: IdMappingService);
|
|
12
12
|
processBatch(ctx: IntegrationContext, flow: DataFlow, source: Adapter | null, target: Adapter, records: Record<string, unknown>[], localFilter: FilterSpec | null): Promise<BatchResult>;
|
|
13
|
+
private _claimCreatesForBatch;
|
|
14
|
+
private _releaseFailedClaims;
|
|
13
15
|
handleDeleteEvent(ctx: IntegrationContext, flow: DataFlow, target: Adapter, recordId: string): Promise<SyncResult>;
|
|
14
16
|
handleUpsertEvent(ctx: IntegrationContext, flow: DataFlow, source: Adapter | null, target: Adapter, event: MappedEvent): Promise<SyncResult>;
|
|
15
17
|
private _buildLookupQueries;
|
|
@@ -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;AAGnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
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;AAgDxD,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;YAqKT,qBAAqB;YAyBrB,oBAAoB;IAsB5B,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;IAoItB,OAAO,CAAC,mBAAmB;YAsCb,0BAA0B;YAmF1B,wBAAwB;YAkExB,oBAAoB;CA4CnC"}
|
|
@@ -13,6 +13,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.IdMappingSyncStrategy = void 0;
|
|
15
15
|
const field_mapping_service_1 = require("./field-mapping.service");
|
|
16
|
+
const helpers_1 = require("../utils/helpers");
|
|
16
17
|
// IdMappingSyncStrategy resolves cross-system identity via the IntegrationIdMapping
|
|
17
18
|
// custom object rather than ExternalId custom fields.
|
|
18
19
|
//
|
|
@@ -56,10 +57,10 @@ class IdMappingSyncStrategy {
|
|
|
56
57
|
this.idMappingService = idMappingService;
|
|
57
58
|
}
|
|
58
59
|
async processBatch(ctx, flow, source, target, records, localFilter) {
|
|
59
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p
|
|
60
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
60
61
|
const sourceIdField = (_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';
|
|
61
62
|
// Step 3b: evaluate filter and run FME field mappings.
|
|
62
|
-
const
|
|
63
|
+
const _q = await (0, field_mapping_service_1.filterAndMapBatch)(flow, records, localFilter, sourceIdField, (msg) => ctx.logger.error(`dlq_write: dataFlowId=${flow.id} error=${msg}`)), { pairs, sourceIds: activeSourceIds } = _q, filterStats = __rest(_q, ["pairs", "sourceIds"]);
|
|
63
64
|
const stats = Object.assign(Object.assign({}, filterStats), { skipped: 0 });
|
|
64
65
|
// Sync pipeline state so hooks can read live data and stats.
|
|
65
66
|
if (ctx.pipeline) {
|
|
@@ -83,14 +84,37 @@ class IdMappingSyncStrategy {
|
|
|
83
84
|
const activeSrcIds = activeSourceIds.filter((_, i) => !skipSet.has(i));
|
|
84
85
|
if (activePairs.length === 0)
|
|
85
86
|
return stats;
|
|
86
|
-
|
|
87
|
+
// Step 4b: claim creates. The mapping table has no idempotency key on the target write,
|
|
88
|
+
// so concurrent deliveries of the same new record (e.g. a Skedulo INSERT plus a near-instant
|
|
89
|
+
// UPDATE) can both resolve to "no mapping" and both insert — a duplicate. Reserving the
|
|
90
|
+
// UniqueKey before the write serializes them: the winner creates, a loser means another
|
|
91
|
+
// in-flight delivery already owns the create, so we skip it (its change reconciles on the
|
|
92
|
+
// next sync) rather than create a second record.
|
|
93
|
+
const wonUidBySourceId = await this._claimCreatesForBatch(ctx, flow, activePairs, activeSrcIds);
|
|
94
|
+
const keep = [];
|
|
95
|
+
for (let i = 0; i < activePairs.length; i++) {
|
|
96
|
+
const isCreateI = activePairs[i].mapped['__targetUID'] == null;
|
|
97
|
+
if (isCreateI && activeSrcIds[i] && !wonUidBySourceId.has(activeSrcIds[i])) {
|
|
98
|
+
stats.skipped++;
|
|
99
|
+
stats.succeeded--;
|
|
100
|
+
ctx.logger.warn(`id_mapping_create_lost_claim: dataFlowId=${flow.id} sourceId=${activeSrcIds[i]} ` +
|
|
101
|
+
`objectType=${flow.targetObject} — concurrent create won the claim; skipping to avoid a duplicate`);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
keep.push(i);
|
|
105
|
+
}
|
|
106
|
+
const dispatchPairs = keep.map((i) => activePairs[i]);
|
|
107
|
+
const dispatchSrcIds = keep.map((i) => activeSrcIds[i]);
|
|
108
|
+
if (dispatchPairs.length === 0)
|
|
109
|
+
return stats;
|
|
110
|
+
const isCreate = dispatchPairs.map((p) => p.mapped['__targetUID'] == null);
|
|
87
111
|
// Step 5: write to target — adapter performs insert (new) or update (existing).
|
|
88
112
|
await ((_j = source === null || source === void 0 ? void 0 : source.beforeUpsert) === null || _j === void 0 ? void 0 : _j.call(source, ctx));
|
|
89
113
|
await ((_k = target.beforeUpsert) === null || _k === void 0 ? void 0 : _k.call(target, ctx));
|
|
90
|
-
let outcomes = new Array(
|
|
114
|
+
let outcomes = new Array(dispatchPairs.length);
|
|
91
115
|
try {
|
|
92
116
|
if (typeof target.insert === 'function' || typeof target.update === 'function') {
|
|
93
|
-
const { inserts, updates } = splitForDispatch(
|
|
117
|
+
const { inserts, updates } = splitForDispatch(dispatchPairs);
|
|
94
118
|
if (inserts.length > 0) {
|
|
95
119
|
const insertOutcomes = typeof target.insert === 'function'
|
|
96
120
|
? await target.insert(ctx, flow, inserts.map((x) => x.mapped))
|
|
@@ -111,33 +135,87 @@ class IdMappingSyncStrategy {
|
|
|
111
135
|
else {
|
|
112
136
|
// Legacy adapters that only implement upsert(): pass the pairs through
|
|
113
137
|
// verbatim — they read __targetUID themselves and branch internally.
|
|
114
|
-
outcomes = await target.upsert(ctx, flow,
|
|
138
|
+
outcomes = await target.upsert(ctx, flow, dispatchPairs.map((p) => p.mapped));
|
|
115
139
|
}
|
|
116
140
|
if (ctx.pipeline)
|
|
117
141
|
ctx.pipeline.outcomes = outcomes;
|
|
118
142
|
for (let i = 0; i < outcomes.length; i++) {
|
|
119
143
|
if (outcomes[i].status !== 'ok') {
|
|
120
144
|
const message = (_l = outcomes[i].error) !== null && _l !== void 0 ? _l : outcomes[i].status;
|
|
121
|
-
captureRecordError(ctx, 'upsert', i, message, (_m =
|
|
122
|
-
|
|
145
|
+
captureRecordError(ctx, 'upsert', i, message, (_m = dispatchPairs[i]) === null || _m === void 0 ? void 0 : _m.raw);
|
|
146
|
+
// Identifiers + clamped message only — the raw record is captured into the
|
|
147
|
+
// pipeline error (persisted log), so dumping it here is redundant + leaks PII.
|
|
148
|
+
ctx.logger.error(`upsert_failed: dataFlowId=${flow.id} recordIndex=${i} status=${outcomes[i].status} error=${(0, helpers_1.truncate)(String(message))}`);
|
|
123
149
|
stats.succeeded--;
|
|
124
150
|
stats.failed++;
|
|
125
151
|
}
|
|
126
152
|
}
|
|
127
|
-
await ((
|
|
128
|
-
await ((
|
|
153
|
+
await ((_o = source === null || source === void 0 ? void 0 : source.afterUpsert) === null || _o === void 0 ? void 0 : _o.call(source, ctx));
|
|
154
|
+
await ((_p = target.afterUpsert) === null || _p === void 0 ? void 0 : _p.call(target, ctx));
|
|
129
155
|
}
|
|
130
156
|
catch (err) {
|
|
131
157
|
const message = err instanceof Error ? err.message : String(err);
|
|
132
|
-
captureProcessError(ctx, 'upsert', message,
|
|
133
|
-
stats.failed +=
|
|
134
|
-
stats.succeeded -=
|
|
158
|
+
captureProcessError(ctx, 'upsert', message, dispatchPairs.length);
|
|
159
|
+
stats.failed += dispatchPairs.length;
|
|
160
|
+
stats.succeeded -= dispatchPairs.length;
|
|
161
|
+
// Outcomes can be partial — one dispatch bucket may have landed before the other threw.
|
|
162
|
+
// Finalize any create that actually succeeded (so it isn't re-created as a duplicate next
|
|
163
|
+
// run) and release reservations only for creates with no successful outcome.
|
|
164
|
+
await this._writeMappingEntries(ctx, flow, target, dispatchSrcIds, outcomes, isCreate);
|
|
165
|
+
await this._releaseFailedClaims(ctx, dispatchSrcIds, isCreate, outcomes, wonUidBySourceId);
|
|
135
166
|
return stats;
|
|
136
167
|
}
|
|
137
|
-
//
|
|
138
|
-
|
|
168
|
+
// Release reservations for creates whose target write failed (empty-TargetId rows would
|
|
169
|
+
// otherwise block the record from ever being created again).
|
|
170
|
+
await this._releaseFailedClaims(ctx, dispatchSrcIds, isCreate, outcomes, wonUidBySourceId);
|
|
171
|
+
// Step 6: write back — finalize each won reservation with the real TargetId (upsert on
|
|
172
|
+
// UniqueKey updates the placeholder row written at claim time).
|
|
173
|
+
await this._writeMappingEntries(ctx, flow, target, dispatchSrcIds, outcomes, isCreate);
|
|
139
174
|
return stats;
|
|
140
175
|
}
|
|
176
|
+
// Reserve the UniqueKey for every create-classified pair. Returns the reserved-row UID per
|
|
177
|
+
// won sourceId; absence from the map means the claim was lost to a concurrent delivery.
|
|
178
|
+
async _claimCreatesForBatch(ctx, flow, activePairs, activeSrcIds) {
|
|
179
|
+
const claims = activePairs
|
|
180
|
+
.map((p, i) => ({ create: p.mapped['__targetUID'] == null, sourceId: activeSrcIds[i] }))
|
|
181
|
+
.filter((c) => c.create && c.sourceId)
|
|
182
|
+
.map((c) => {
|
|
183
|
+
var _a, _b;
|
|
184
|
+
return ({
|
|
185
|
+
sourceSystem: (_a = flow.sourceSystem) !== null && _a !== void 0 ? _a : '',
|
|
186
|
+
targetSystem: (_b = flow.targetSystem) !== null && _b !== void 0 ? _b : '',
|
|
187
|
+
objectType: flow.targetObject,
|
|
188
|
+
sourceId: c.sourceId,
|
|
189
|
+
dataFlowId: String(flow.id),
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
if (claims.length === 0)
|
|
193
|
+
return new Map();
|
|
194
|
+
const { wonUidBySourceId } = await this.idMappingService.claimCreates(ctx, claims);
|
|
195
|
+
return wonUidBySourceId;
|
|
196
|
+
}
|
|
197
|
+
// Delete reserved claim rows for creates with no successful outcome, so a stale empty-TargetId
|
|
198
|
+
// row can't permanently block the record from ever being created. Retried once for symmetry
|
|
199
|
+
// with the mapping write — a transient failure here strands the reservation. (A crash between
|
|
200
|
+
// reserve and this release is still possible; such a row needs manual cleanup or reclaim.)
|
|
201
|
+
async _releaseFailedClaims(ctx, dispatchSrcIds, isCreate, outcomes, wonUidBySourceId) {
|
|
202
|
+
var _a;
|
|
203
|
+
const uids = [];
|
|
204
|
+
for (let i = 0; i < dispatchSrcIds.length; i++) {
|
|
205
|
+
if (!isCreate[i])
|
|
206
|
+
continue;
|
|
207
|
+
if (((_a = outcomes[i]) === null || _a === void 0 ? void 0 : _a.status) === 'ok')
|
|
208
|
+
continue;
|
|
209
|
+
const uid = wonUidBySourceId.get(dispatchSrcIds[i]);
|
|
210
|
+
if (uid)
|
|
211
|
+
uids.push(uid);
|
|
212
|
+
}
|
|
213
|
+
if (uids.length === 0)
|
|
214
|
+
return;
|
|
215
|
+
await retryOnce(() => this.idMappingService.deleteReservations(ctx, uids)).catch((err) => {
|
|
216
|
+
ctx.logger.error(`id_mapping_reservation_release_failed: ${err instanceof Error ? err.message : String(err)} uids=${uids.length}`);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
141
219
|
async handleDeleteEvent(ctx, flow, target, recordId) {
|
|
142
220
|
var _a, _b, _c, _d;
|
|
143
221
|
const mappingTable = await this.idMappingService.resolve(ctx, [
|
|
@@ -183,7 +261,7 @@ class IdMappingSyncStrategy {
|
|
|
183
261
|
return { status: 'synced', recordsProcessed: 1 };
|
|
184
262
|
}
|
|
185
263
|
async handleUpsertEvent(ctx, flow, source, target, event) {
|
|
186
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
|
264
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
|
|
187
265
|
// Initialise pipeline data so beforeMap can mutate raw.
|
|
188
266
|
if (ctx.pipeline) {
|
|
189
267
|
ctx.pipeline.data = [{ raw: event.payload, mapped: {} }];
|
|
@@ -215,35 +293,71 @@ class IdMappingSyncStrategy {
|
|
|
215
293
|
await ((_q = target.beforeUpsert) === null || _q === void 0 ? void 0 : _q.call(target, ctx));
|
|
216
294
|
// Dispatch insert vs update based on resolved __targetUID, mirroring processBatch.
|
|
217
295
|
const isCreate = mapped['__targetUID'] == null;
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
296
|
+
// Claim the create before writing (see processBatch): serialize concurrent deliveries of the
|
|
297
|
+
// same new record via the UniqueKey constraint. A lost claim means another delivery already
|
|
298
|
+
// owns the create — skip rather than insert a duplicate.
|
|
299
|
+
let reservedUid;
|
|
300
|
+
if (isCreate) {
|
|
301
|
+
const { wonUidBySourceId, lostSourceIds } = await this.idMappingService.claimCreates(ctx, [
|
|
302
|
+
{
|
|
303
|
+
sourceSystem: (_r = flow.sourceSystem) !== null && _r !== void 0 ? _r : '',
|
|
304
|
+
targetSystem: (_s = flow.targetSystem) !== null && _s !== void 0 ? _s : '',
|
|
305
|
+
objectType: flow.targetObject,
|
|
306
|
+
sourceId,
|
|
307
|
+
dataFlowId: String(flow.id),
|
|
308
|
+
},
|
|
309
|
+
]);
|
|
310
|
+
if (lostSourceIds.length > 0) {
|
|
311
|
+
ctx.logger.warn(`id_mapping_create_lost_claim: dataFlowId=${flow.id} sourceId=${sourceId} ` +
|
|
312
|
+
`objectType=${flow.targetObject} — concurrent create won the claim; skipping to avoid a duplicate`);
|
|
313
|
+
return { status: 'skipped', recordsProcessed: 0, reason: 'concurrent_create' };
|
|
314
|
+
}
|
|
315
|
+
reservedUid = wonUidBySourceId.get(sourceId);
|
|
222
316
|
}
|
|
223
|
-
|
|
224
|
-
|
|
317
|
+
const releaseReservation = async () => {
|
|
318
|
+
if (isCreate && reservedUid) {
|
|
319
|
+
await retryOnce(() => this.idMappingService.deleteReservations(ctx, [reservedUid])).catch((err) => ctx.logger.error(`id_mapping_reservation_release_failed: sourceId=${sourceId} ` +
|
|
320
|
+
`uid=${reservedUid} error=${err instanceof Error ? err.message : String(err)}`));
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
let outcomes;
|
|
324
|
+
try {
|
|
325
|
+
if (isCreate && typeof target.insert === 'function') {
|
|
326
|
+
const _z = mapped, { __targetUID: _drop } = _z, payload = __rest(_z, ["__targetUID"]);
|
|
327
|
+
outcomes = await target.insert(ctx, flow, [payload]);
|
|
328
|
+
}
|
|
329
|
+
else if (!isCreate && typeof target.update === 'function') {
|
|
330
|
+
outcomes = await target.update(ctx, flow, [mapped]);
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
// Legacy path
|
|
334
|
+
outcomes = await target.upsert(ctx, flow, [mapped]);
|
|
335
|
+
}
|
|
225
336
|
}
|
|
226
|
-
|
|
227
|
-
//
|
|
228
|
-
|
|
337
|
+
catch (err) {
|
|
338
|
+
// Release the reservation so a stale empty-TargetId row can't permanently block re-creation.
|
|
339
|
+
await releaseReservation();
|
|
340
|
+
throw err;
|
|
229
341
|
}
|
|
230
342
|
const outcome = outcomes[0];
|
|
231
343
|
if (ctx.pipeline)
|
|
232
344
|
ctx.pipeline.outcomes = outcomes;
|
|
233
|
-
await ((
|
|
234
|
-
await ((
|
|
345
|
+
await ((_t = source === null || source === void 0 ? void 0 : source.afterUpsert) === null || _t === void 0 ? void 0 : _t.call(source, ctx));
|
|
346
|
+
await ((_u = target.afterUpsert) === null || _u === void 0 ? void 0 : _u.call(target, ctx));
|
|
235
347
|
if (outcome.status === 'precondition') {
|
|
236
|
-
|
|
348
|
+
await releaseReservation();
|
|
349
|
+
ctx.logger.error(`push_precondition: dataFlowId=${flow.id} recordId=${event.recordId} error=${(_v = outcome.error) !== null && _v !== void 0 ? _v : 'unknown'}`);
|
|
237
350
|
return {
|
|
238
351
|
status: 'precondition_failed',
|
|
239
352
|
recordsProcessed: 0,
|
|
240
|
-
error: (
|
|
353
|
+
error: (_w = outcome.error) !== null && _w !== void 0 ? _w : outcome.status,
|
|
241
354
|
};
|
|
242
355
|
}
|
|
243
356
|
if (outcome.status !== 'ok') {
|
|
357
|
+
await releaseReservation();
|
|
244
358
|
ctx.logger.error(`push_failed: dataFlowId=${flow.id} recordId=${event.recordId} ` +
|
|
245
|
-
`class=${outcome.status} error=${(
|
|
246
|
-
return { status: 'failed', recordsProcessed: 0, error: (
|
|
359
|
+
`class=${outcome.status} error=${(_x = outcome.error) !== null && _x !== void 0 ? _x : 'unknown'}`);
|
|
360
|
+
return { status: 'failed', recordsProcessed: 0, error: (_y = outcome.error) !== null && _y !== void 0 ? _y : outcome.status };
|
|
247
361
|
}
|
|
248
362
|
// Step 7: persist new source→target ID pair for a created record.
|
|
249
363
|
if (isCreate) {
|
|
@@ -442,7 +556,7 @@ class IdMappingSyncStrategy {
|
|
|
442
556
|
await retryOnce(() => this.idMappingService.upsertMappings(ctx, entries)).catch((err) => {
|
|
443
557
|
const message = err instanceof Error ? err.message : String(err);
|
|
444
558
|
captureProcessError(ctx, 'mapping_write', message, entries.length);
|
|
445
|
-
ctx.logger.error(`mapping_write_failed: dataFlowId=${flow.id} error=${message} entries=${
|
|
559
|
+
ctx.logger.error(`mapping_write_failed: dataFlowId=${flow.id} error=${(0, helpers_1.truncate)(message)} entries=${entries.length}`);
|
|
446
560
|
});
|
|
447
561
|
}
|
|
448
562
|
}
|