@memberjunction/integration-engine 5.38.0 → 5.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ActionMetadataGenerator.d.ts +8 -1
- package/dist/ActionMetadataGenerator.d.ts.map +1 -1
- package/dist/ActionMetadataGenerator.js +22 -3
- package/dist/ActionMetadataGenerator.js.map +1 -1
- package/dist/AdaptiveConcurrency.d.ts +85 -0
- package/dist/AdaptiveConcurrency.d.ts.map +1 -0
- package/dist/AdaptiveConcurrency.js +148 -0
- package/dist/AdaptiveConcurrency.js.map +1 -0
- package/dist/BaseIntegrationConnector.d.ts +127 -3
- package/dist/BaseIntegrationConnector.d.ts.map +1 -1
- package/dist/BaseIntegrationConnector.js +126 -11
- package/dist/BaseIntegrationConnector.js.map +1 -1
- package/dist/BaseRESTIntegrationConnector.d.ts +80 -15
- package/dist/BaseRESTIntegrationConnector.d.ts.map +1 -1
- package/dist/BaseRESTIntegrationConnector.js +314 -64
- package/dist/BaseRESTIntegrationConnector.js.map +1 -1
- package/dist/ConflictRecency.d.ts +24 -0
- package/dist/ConflictRecency.d.ts.map +1 -0
- package/dist/ConflictRecency.js +25 -0
- package/dist/ConflictRecency.js.map +1 -0
- package/dist/ContentHash.d.ts +28 -0
- package/dist/ContentHash.d.ts.map +1 -0
- package/dist/ContentHash.js +54 -0
- package/dist/ContentHash.js.map +1 -0
- package/dist/EnrichSchemaConstraints.d.ts +59 -0
- package/dist/EnrichSchemaConstraints.d.ts.map +1 -0
- package/dist/EnrichSchemaConstraints.js +168 -0
- package/dist/EnrichSchemaConstraints.js.map +1 -0
- package/dist/FieldMappingEngine.d.ts +22 -0
- package/dist/FieldMappingEngine.d.ts.map +1 -1
- package/dist/FieldMappingEngine.js +66 -5
- package/dist/FieldMappingEngine.js.map +1 -1
- package/dist/HashDiff.d.ts +68 -0
- package/dist/HashDiff.d.ts.map +1 -0
- package/dist/HashDiff.js +108 -0
- package/dist/HashDiff.js.map +1 -0
- package/dist/IntegrationActionGenerator.d.ts +93 -0
- package/dist/IntegrationActionGenerator.d.ts.map +1 -0
- package/dist/IntegrationActionGenerator.js +313 -0
- package/dist/IntegrationActionGenerator.js.map +1 -0
- package/dist/IntegrationConnectorCreationPipeline.d.ts +86 -0
- package/dist/IntegrationConnectorCreationPipeline.d.ts.map +1 -0
- package/dist/IntegrationConnectorCreationPipeline.js +226 -0
- package/dist/IntegrationConnectorCreationPipeline.js.map +1 -0
- package/dist/IntegrationEngine.d.ts +199 -1
- package/dist/IntegrationEngine.d.ts.map +1 -1
- package/dist/IntegrationEngine.js +1592 -109
- package/dist/IntegrationEngine.js.map +1 -1
- package/dist/IntegrationSchemaSync.d.ts +82 -0
- package/dist/IntegrationSchemaSync.d.ts.map +1 -1
- package/dist/IntegrationSchemaSync.js +289 -42
- package/dist/IntegrationSchemaSync.js.map +1 -1
- package/dist/MatchEngine.d.ts.map +1 -1
- package/dist/MatchEngine.js +4 -0
- package/dist/MatchEngine.js.map +1 -1
- package/dist/RateLimiter.d.ts +117 -0
- package/dist/RateLimiter.d.ts.map +1 -0
- package/dist/RateLimiter.js +159 -0
- package/dist/RateLimiter.js.map +1 -0
- package/dist/SyncLogger.d.ts +106 -0
- package/dist/SyncLogger.d.ts.map +1 -0
- package/dist/SyncLogger.js +176 -0
- package/dist/SyncLogger.js.map +1 -0
- package/dist/WatermarkService.d.ts +36 -1
- package/dist/WatermarkService.d.ts.map +1 -1
- package/dist/WatermarkService.js +113 -3
- package/dist/WatermarkService.js.map +1 -1
- package/dist/index.d.ts +23 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +52 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -6
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* metadata — IntegrationObjects and IntegrationObjectFields.
|
|
4
4
|
*
|
|
5
5
|
* For each supported object, this generator emits one action per CRUD verb
|
|
6
|
-
* (Get, Create, Update, Delete, Search, List) with strongly-typed ActionParams
|
|
6
|
+
* (Get, Create, Update, Delete, Upsert, Search, List) with strongly-typed ActionParams
|
|
7
7
|
* derived from the object's fields.
|
|
8
8
|
*
|
|
9
9
|
* Output is designed to be written directly to /metadata/ for `mj sync push`.
|
|
@@ -18,6 +18,12 @@ export interface IntegrationObjectInfo {
|
|
|
18
18
|
Description?: string;
|
|
19
19
|
/** Whether the connector supports writing to this object */
|
|
20
20
|
SupportsWrite: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* The unique business property to upsert this object by (e.g. 'email' for HubSpot
|
|
23
|
+
* contacts). When set, the connector's Upsert verb defaults to keying on this property.
|
|
24
|
+
* Optional — objects without a natural upsert key omit it.
|
|
25
|
+
*/
|
|
26
|
+
UpsertKey?: string;
|
|
21
27
|
/** Fields on this object */
|
|
22
28
|
Fields: IntegrationFieldInfo[];
|
|
23
29
|
/**
|
|
@@ -107,6 +113,7 @@ export declare class ActionMetadataGenerator {
|
|
|
107
113
|
private GenerateActionsForObject;
|
|
108
114
|
private BuildGetAction;
|
|
109
115
|
private BuildCreateAction;
|
|
116
|
+
private BuildUpsertAction;
|
|
110
117
|
private BuildUpdateAction;
|
|
111
118
|
private BuildDeleteAction;
|
|
112
119
|
private BuildSearchAction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionMetadataGenerator.d.ts","sourceRoot":"","sources":["../src/ActionMetadataGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,wEAAwE;AACxE,MAAM,WAAW,qBAAqB;IAClC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,aAAa,EAAE,OAAO,CAAC;IACvB,4BAA4B;IAC5B,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACjC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,UAAU,EAAE,OAAO,CAAC;IACpB,kFAAkF;IAClF,UAAU,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,YAAY,EAAE,OAAO,CAAC;CACzB;AAED,sCAAsC;AACtC,MAAM,WAAW,qBAAqB;IAClC,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,qEAAqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iHAAiH;IACjH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,yDAAyD;AACzD,UAAU,YAAY;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,eAAe,EAAE;QACb,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;QACzC,yBAAyB,EAAE,sBAAsB,EAAE,CAAC;KACvD,CAAC;CACL;AAED,+DAA+D;AAC/D,UAAU,iBAAiB;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,8DAA8D;AAC9D,UAAU,sBAAsB;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,2DAA2D;AAC3D,UAAU,cAAc;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,yCAAyC;AACzC,MAAM,WAAW,uBAAuB;IACpC,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,sDAAsD;IACtD,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,oFAAoF;IACpF,eAAe,EAAE,cAAc,EAAE,CAAC;CACrC;AAID;;;GAGG;AACH,qBAAa,uBAAuB;IAEhC;;;OAGG;IACI,QAAQ,CAAC,MAAM,EAAE,qBAAqB,GAAG,uBAAuB;IAgBvE,OAAO,CAAC,wBAAwB;
|
|
1
|
+
{"version":3,"file":"ActionMetadataGenerator.d.ts","sourceRoot":"","sources":["../src/ActionMetadataGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* metadata — IntegrationObjects and IntegrationObjectFields.
|
|
4
4
|
*
|
|
5
5
|
* For each supported object, this generator emits one action per CRUD verb
|
|
6
|
-
* (Get, Create, Update, Delete, Search, List) with strongly-typed ActionParams
|
|
6
|
+
* (Get, Create, Update, Delete, Upsert, Search, List) with strongly-typed ActionParams
|
|
7
7
|
* derived from the object's fields.
|
|
8
8
|
*
|
|
9
9
|
* Output is designed to be written directly to /metadata/ for `mj sync push`.
|
|
@@ -35,11 +35,12 @@ export class ActionMetadataGenerator {
|
|
|
35
35
|
const displayName = obj.DisplayName || this.Humanize(obj.Name);
|
|
36
36
|
// Get — always generated
|
|
37
37
|
actions.push(this.BuildGetAction(config, obj, displayName));
|
|
38
|
-
// Create/Update/Delete — only if object supports write
|
|
38
|
+
// Create/Update/Delete/Upsert — only if object supports write
|
|
39
39
|
if (obj.SupportsWrite) {
|
|
40
40
|
actions.push(this.BuildCreateAction(config, obj, displayName));
|
|
41
41
|
actions.push(this.BuildUpdateAction(config, obj, displayName));
|
|
42
42
|
actions.push(this.BuildDeleteAction(config, obj, displayName));
|
|
43
|
+
actions.push(this.BuildUpsertAction(config, obj, displayName));
|
|
43
44
|
}
|
|
44
45
|
// Search — if configured
|
|
45
46
|
if (config.IncludeSearch !== false) {
|
|
@@ -78,6 +79,24 @@ export class ActionMetadataGenerator {
|
|
|
78
79
|
params.push(this.BuildSystemParam('ExternalID', 'Output', false, `The external ID of the newly created ${displayName} record`));
|
|
79
80
|
return this.BuildAction(config, obj, 'Create', displayName, `Creates a new ${displayName} record in ${config.IntegrationName}`, params);
|
|
80
81
|
}
|
|
82
|
+
BuildUpsertAction(config, obj, displayName) {
|
|
83
|
+
const idPropertyDesc = obj.UpsertKey
|
|
84
|
+
? `The unique field used to match an existing ${displayName} record (defaults to "${obj.UpsertKey}")`
|
|
85
|
+
: `The unique field used to match an existing ${displayName} record (connector default if omitted)`;
|
|
86
|
+
const params = [
|
|
87
|
+
this.BuildSystemParam('CompanyIntegrationID', 'Input', false, 'Optional: specific CompanyIntegration to use'),
|
|
88
|
+
this.BuildSystemParam('IDProperty', 'Input', false, idPropertyDesc),
|
|
89
|
+
];
|
|
90
|
+
// Input params for writable fields
|
|
91
|
+
for (const field of obj.Fields) {
|
|
92
|
+
if (field.IsReadOnly || field.IsPrimaryKey)
|
|
93
|
+
continue;
|
|
94
|
+
params.push(this.FieldToInputParam(field, false)); // None required — upsert may match an existing record
|
|
95
|
+
}
|
|
96
|
+
// Output
|
|
97
|
+
params.push(this.BuildSystemParam('ExternalID', 'Output', false, `The external ID of the created or updated ${displayName} record`));
|
|
98
|
+
return this.BuildAction(config, obj, 'Upsert', displayName, `Creates or updates a ${displayName} in ${config.IntegrationName} (idempotent upsert keyed on a natural ID)`, params);
|
|
99
|
+
}
|
|
81
100
|
BuildUpdateAction(config, obj, displayName) {
|
|
82
101
|
const params = [
|
|
83
102
|
this.BuildSystemParam('ExternalID', 'Both', true, `The external ID of the ${displayName} record to update`),
|
|
@@ -201,7 +220,7 @@ export class ActionMetadataGenerator {
|
|
|
201
220
|
if (verb === 'Get') {
|
|
202
221
|
codes.push({ fields: { ActionID: '@parent:ID', ResultCode: 'NOT_FOUND', IsSuccess: false, Description: 'Record not found' } });
|
|
203
222
|
}
|
|
204
|
-
if (verb === 'Create' || verb === 'Update' || verb === 'Delete') {
|
|
223
|
+
if (verb === 'Create' || verb === 'Update' || verb === 'Delete' || verb === 'Upsert') {
|
|
205
224
|
codes.push({ fields: { ActionID: '@parent:ID', ResultCode: `${verb.toUpperCase()}_FAILED`, IsSuccess: false, Description: `${verb} operation failed` } });
|
|
206
225
|
codes.push({ fields: { ActionID: '@parent:ID', ResultCode: 'NOT_SUPPORTED', IsSuccess: false, Description: `${verb} not supported by this connector` } });
|
|
207
226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionMetadataGenerator.js","sourceRoot":"","sources":["../src/ActionMetadataGenerator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionMetadataGenerator.js","sourceRoot":"","sources":["../src/ActionMetadataGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIMD (Additive-Increase / Multiplicative-Decrease) concurrency controller for
|
|
3
|
+
* plan.md §7 — "smart-but-careful peak parallelization".
|
|
4
|
+
*
|
|
5
|
+
* Rather than a fixed `syncConcurrency` config, this auto-discovers the highest
|
|
6
|
+
* *safe* in-flight cap at runtime: it ramps the cap up by +1 on every healthy
|
|
7
|
+
* outcome (additive increase) and slashes it by ÷2 on every throttle/error
|
|
8
|
+
* (multiplicative decrease). This is the same control law TCP congestion control
|
|
9
|
+
* uses to find a network's safe throughput — it converges on the source's real
|
|
10
|
+
* peak without tipping into sustained 429s/errors.
|
|
11
|
+
*
|
|
12
|
+
* Pure + dependency-free (no DB, no network, no timers) so it is cheaply and
|
|
13
|
+
* deterministically unit-testable. The engine wires `OnSuccess()` /
|
|
14
|
+
* `OnThrottleOrError()` from each record's per-call outcome and reads the live
|
|
15
|
+
* `Cap` from `RunAdaptive` to bound the promise pool.
|
|
16
|
+
*/
|
|
17
|
+
/** Options for {@link AdaptiveConcurrencyController}; all bounds are clamped into a sane order. */
|
|
18
|
+
export interface AdaptiveConcurrencyOptions {
|
|
19
|
+
/** Starting cap. Defaults to {@link AdaptiveConcurrencyController.Min} (conservative ramp-up). */
|
|
20
|
+
start?: number;
|
|
21
|
+
/** Lower bound for the cap — never decreases below this. Defaults to 1. */
|
|
22
|
+
min?: number;
|
|
23
|
+
/** Upper bound for the cap — never increases above this. Defaults to 16. */
|
|
24
|
+
max?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Holds a single adaptive concurrency cap and mutates it under the AIMD law.
|
|
28
|
+
* Stateless beyond the current cap and its bounds; safe to share across a single
|
|
29
|
+
* `RunAdaptive` invocation (all calls run on one async thread, so no locking).
|
|
30
|
+
*/
|
|
31
|
+
export declare class AdaptiveConcurrencyController {
|
|
32
|
+
private readonly minCap;
|
|
33
|
+
private readonly maxCap;
|
|
34
|
+
private cap;
|
|
35
|
+
constructor(options?: AdaptiveConcurrencyOptions);
|
|
36
|
+
/** The live in-flight cap. Always within `[Min, Max]`. */
|
|
37
|
+
get Cap(): number;
|
|
38
|
+
/** Lower bound the cap can never fall below. */
|
|
39
|
+
get Min(): number;
|
|
40
|
+
/** Upper bound the cap can never rise above. */
|
|
41
|
+
get Max(): number;
|
|
42
|
+
/** Additive increase: a healthy outcome nudges the cap up by 1, clamped to Max. */
|
|
43
|
+
OnSuccess(): void;
|
|
44
|
+
/** Multiplicative decrease: a throttle/error halves the cap, floored at Min. */
|
|
45
|
+
OnThrottleOrError(): void;
|
|
46
|
+
private static normalizeMin;
|
|
47
|
+
private static normalizeMax;
|
|
48
|
+
private static normalizeStart;
|
|
49
|
+
}
|
|
50
|
+
/** Per-item outcome the worker fn reports back so the controller can adapt the cap. */
|
|
51
|
+
export interface AdaptiveItemOutcome {
|
|
52
|
+
/** True if the call succeeded (drives additive increase). */
|
|
53
|
+
ok: boolean;
|
|
54
|
+
/** True if the call was throttled/rate-limited (429 etc.) — drives multiplicative decrease. */
|
|
55
|
+
throttled?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/** Aggregate result of a {@link RunAdaptive} pass over a batch of items. */
|
|
58
|
+
export interface AdaptiveRunResult {
|
|
59
|
+
/** Number of items whose outcome reported `ok: true`. */
|
|
60
|
+
succeeded: number;
|
|
61
|
+
/** Number of items whose outcome reported `ok: false` (errors, including throttles). */
|
|
62
|
+
failed: number;
|
|
63
|
+
/** Number of outcomes that reported `throttled: true`. */
|
|
64
|
+
throttled: number;
|
|
65
|
+
/** Total items processed (always equals `items.length`). */
|
|
66
|
+
processed: number;
|
|
67
|
+
/** The highest number of fn invocations observed in flight at once during the run. */
|
|
68
|
+
peakInFlight: number;
|
|
69
|
+
/** The cap value at the end of the run (where AIMD converged for this batch). */
|
|
70
|
+
finalCap: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Runs `fn` over `items` with at most `controller.Cap` invocations in flight at
|
|
74
|
+
* any instant, re-reading the cap on every scheduling decision so it tracks the
|
|
75
|
+
* controller as AIMD mutates it. Mirrors `IntegrationEngine.runBounded`'s
|
|
76
|
+
* promise-pool shape, but the pool size is dynamic instead of fixed.
|
|
77
|
+
*
|
|
78
|
+
* Each completed call feeds its outcome back into the controller
|
|
79
|
+
* (`OnThrottleOrError` when `throttled` or `!ok`, else `OnSuccess`) so a later
|
|
80
|
+
* item benefits from (or is protected by) what earlier items revealed about the
|
|
81
|
+
* source's limits. No timers are used — concurrency is bounded purely by how
|
|
82
|
+
* many worker promises are permitted to be active.
|
|
83
|
+
*/
|
|
84
|
+
export declare function RunAdaptive<T>(items: T[], fn: (item: T) => Promise<AdaptiveItemOutcome>, controller: AdaptiveConcurrencyController): Promise<AdaptiveRunResult>;
|
|
85
|
+
//# sourceMappingURL=AdaptiveConcurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdaptiveConcurrency.d.ts","sourceRoot":"","sources":["../src/AdaptiveConcurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,mGAAmG;AACnG,MAAM,WAAW,0BAA0B;IACvC,kGAAkG;IAClG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,qBAAa,6BAA6B;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,GAAG,CAAS;gBAER,OAAO,GAAE,0BAA+B;IASpD,0DAA0D;IAC1D,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,gDAAgD;IAChD,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,gDAAgD;IAChD,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,mFAAmF;IAC5E,SAAS,IAAI,IAAI;IAIxB,gFAAgF;IACzE,iBAAiB,IAAI,IAAI;IAIhC,OAAO,CAAC,MAAM,CAAC,YAAY;IAK3B,OAAO,CAAC,MAAM,CAAC,YAAY;IAM3B,OAAO,CAAC,MAAM,CAAC,cAAc;CAKhC;AAED,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAChC,6DAA6D;IAC7D,EAAE,EAAE,OAAO,CAAC;IACZ,+FAA+F;IAC/F,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAC9B,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,EAAE,EACV,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,mBAAmB,CAAC,EAC7C,UAAU,EAAE,6BAA6B,GAC1C,OAAO,CAAC,iBAAiB,CAAC,CAoC5B"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIMD (Additive-Increase / Multiplicative-Decrease) concurrency controller for
|
|
3
|
+
* plan.md §7 — "smart-but-careful peak parallelization".
|
|
4
|
+
*
|
|
5
|
+
* Rather than a fixed `syncConcurrency` config, this auto-discovers the highest
|
|
6
|
+
* *safe* in-flight cap at runtime: it ramps the cap up by +1 on every healthy
|
|
7
|
+
* outcome (additive increase) and slashes it by ÷2 on every throttle/error
|
|
8
|
+
* (multiplicative decrease). This is the same control law TCP congestion control
|
|
9
|
+
* uses to find a network's safe throughput — it converges on the source's real
|
|
10
|
+
* peak without tipping into sustained 429s/errors.
|
|
11
|
+
*
|
|
12
|
+
* Pure + dependency-free (no DB, no network, no timers) so it is cheaply and
|
|
13
|
+
* deterministically unit-testable. The engine wires `OnSuccess()` /
|
|
14
|
+
* `OnThrottleOrError()` from each record's per-call outcome and reads the live
|
|
15
|
+
* `Cap` from `RunAdaptive` to bound the promise pool.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Holds a single adaptive concurrency cap and mutates it under the AIMD law.
|
|
19
|
+
* Stateless beyond the current cap and its bounds; safe to share across a single
|
|
20
|
+
* `RunAdaptive` invocation (all calls run on one async thread, so no locking).
|
|
21
|
+
*/
|
|
22
|
+
export class AdaptiveConcurrencyController {
|
|
23
|
+
constructor(options = {}) {
|
|
24
|
+
const min = AdaptiveConcurrencyController.normalizeMin(options.min);
|
|
25
|
+
const max = AdaptiveConcurrencyController.normalizeMax(options.max, min);
|
|
26
|
+
const start = AdaptiveConcurrencyController.normalizeStart(options.start, min, max);
|
|
27
|
+
this.minCap = min;
|
|
28
|
+
this.maxCap = max;
|
|
29
|
+
this.cap = start;
|
|
30
|
+
}
|
|
31
|
+
/** The live in-flight cap. Always within `[Min, Max]`. */
|
|
32
|
+
get Cap() {
|
|
33
|
+
return this.cap;
|
|
34
|
+
}
|
|
35
|
+
/** Lower bound the cap can never fall below. */
|
|
36
|
+
get Min() {
|
|
37
|
+
return this.minCap;
|
|
38
|
+
}
|
|
39
|
+
/** Upper bound the cap can never rise above. */
|
|
40
|
+
get Max() {
|
|
41
|
+
return this.maxCap;
|
|
42
|
+
}
|
|
43
|
+
/** Additive increase: a healthy outcome nudges the cap up by 1, clamped to Max. */
|
|
44
|
+
OnSuccess() {
|
|
45
|
+
this.cap = Math.min(this.maxCap, this.cap + 1);
|
|
46
|
+
}
|
|
47
|
+
/** Multiplicative decrease: a throttle/error halves the cap, floored at Min. */
|
|
48
|
+
OnThrottleOrError() {
|
|
49
|
+
this.cap = Math.max(this.minCap, Math.floor(this.cap / 2));
|
|
50
|
+
}
|
|
51
|
+
static normalizeMin(min) {
|
|
52
|
+
const n = Number(min);
|
|
53
|
+
return Number.isFinite(n) && n >= 1 ? Math.floor(n) : 1;
|
|
54
|
+
}
|
|
55
|
+
static normalizeMax(max, min) {
|
|
56
|
+
const n = Number(max);
|
|
57
|
+
const candidate = Number.isFinite(n) && n >= 1 ? Math.floor(n) : 16;
|
|
58
|
+
return Math.max(candidate, min);
|
|
59
|
+
}
|
|
60
|
+
static normalizeStart(start, min, max) {
|
|
61
|
+
const n = Number(start);
|
|
62
|
+
const candidate = Number.isFinite(n) && n >= 1 ? Math.floor(n) : min;
|
|
63
|
+
return Math.min(Math.max(candidate, min), max);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Runs `fn` over `items` with at most `controller.Cap` invocations in flight at
|
|
68
|
+
* any instant, re-reading the cap on every scheduling decision so it tracks the
|
|
69
|
+
* controller as AIMD mutates it. Mirrors `IntegrationEngine.runBounded`'s
|
|
70
|
+
* promise-pool shape, but the pool size is dynamic instead of fixed.
|
|
71
|
+
*
|
|
72
|
+
* Each completed call feeds its outcome back into the controller
|
|
73
|
+
* (`OnThrottleOrError` when `throttled` or `!ok`, else `OnSuccess`) so a later
|
|
74
|
+
* item benefits from (or is protected by) what earlier items revealed about the
|
|
75
|
+
* source's limits. No timers are used — concurrency is bounded purely by how
|
|
76
|
+
* many worker promises are permitted to be active.
|
|
77
|
+
*/
|
|
78
|
+
export async function RunAdaptive(items, fn, controller) {
|
|
79
|
+
const result = {
|
|
80
|
+
succeeded: 0,
|
|
81
|
+
failed: 0,
|
|
82
|
+
throttled: 0,
|
|
83
|
+
processed: 0,
|
|
84
|
+
peakInFlight: 0,
|
|
85
|
+
finalCap: controller.Cap,
|
|
86
|
+
};
|
|
87
|
+
if (items.length === 0)
|
|
88
|
+
return result;
|
|
89
|
+
const state = { nextIndex: 0, inFlight: 0 };
|
|
90
|
+
const runOne = async (i) => {
|
|
91
|
+
state.inFlight++;
|
|
92
|
+
if (state.inFlight > result.peakInFlight)
|
|
93
|
+
result.peakInFlight = state.inFlight;
|
|
94
|
+
try {
|
|
95
|
+
const outcome = await fn(items[i]);
|
|
96
|
+
applyOutcome(controller, result, outcome);
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
state.inFlight--;
|
|
100
|
+
result.processed++;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
// Self-scaling pool: spawn up to Max workers (the hard ceiling). Each worker
|
|
104
|
+
// re-reads the LIVE cap before pulling its next item and yields itself when
|
|
105
|
+
// in-flight has reached the current cap — so a mid-run multiplicative
|
|
106
|
+
// decrease genuinely throttles back the active set, and an increase lets a
|
|
107
|
+
// parked worker resume. Workers exit when the batch is drained.
|
|
108
|
+
const workerCount = Math.min(controller.Max, items.length);
|
|
109
|
+
const workers = Array.from({ length: workerCount }, () => adaptiveWorker(items, controller, state, runOne));
|
|
110
|
+
await Promise.all(workers);
|
|
111
|
+
result.finalCap = controller.Cap;
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* One worker in the adaptive pool. Loops claiming items, but before claiming it
|
|
116
|
+
* gates on the LIVE cap: if in-flight already meets/exceeds `controller.Cap`,
|
|
117
|
+
* the worker yields a MACROTASK and re-checks, so the active set tracks the cap
|
|
118
|
+
* as AIMD shrinks or grows it without starving in-flight I/O. Returns when no items remain.
|
|
119
|
+
*/
|
|
120
|
+
async function adaptiveWorker(items, controller, state, runOne) {
|
|
121
|
+
while (state.nextIndex < items.length) {
|
|
122
|
+
if (state.inFlight >= controller.Cap) {
|
|
123
|
+
// Over the live cap — park on a MACROTASK (not a microtask) and re-evaluate. A bare
|
|
124
|
+
// `await Promise.resolve()` keeps the microtask queue saturated and starves the in-flight
|
|
125
|
+
// network I/O callbacks (macrotasks) → event-loop stall. setTimeout yields to I/O.
|
|
126
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
const i = state.nextIndex++;
|
|
130
|
+
if (i >= items.length)
|
|
131
|
+
return;
|
|
132
|
+
await runOne(i);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/** Folds one item outcome into both the running tallies and the controller's cap. */
|
|
136
|
+
function applyOutcome(controller, result, outcome) {
|
|
137
|
+
if (outcome.throttled)
|
|
138
|
+
result.throttled++;
|
|
139
|
+
if (outcome.ok)
|
|
140
|
+
result.succeeded++;
|
|
141
|
+
else
|
|
142
|
+
result.failed++;
|
|
143
|
+
if (outcome.throttled || !outcome.ok)
|
|
144
|
+
controller.OnThrottleOrError();
|
|
145
|
+
else
|
|
146
|
+
controller.OnSuccess();
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=AdaptiveConcurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdaptiveConcurrency.js","sourceRoot":"","sources":["../src/AdaptiveConcurrency.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { UserInfo } from '@memberjunction/core';
|
|
2
2
|
import type { MJCompanyIntegrationEntity } from '@memberjunction/core-entities';
|
|
3
3
|
import type { IntegrationObjectInfo, ActionGeneratorConfig } from './ActionMetadataGenerator.js';
|
|
4
|
-
import type { ExternalRecord, DefaultFieldMapping, SourceSchemaInfo, IntrospectSchemaOptions, CreateRecordContext, UpdateRecordContext, DeleteRecordContext, GetRecordContext, CRUDResult, SearchContext, SearchResult, ListContext, ListResult } from './types.js';
|
|
4
|
+
import type { ExternalRecord, DefaultFieldMapping, SourceSchemaInfo, IntrospectSchemaOptions, CreateRecordContext, UpdateRecordContext, UpsertRecordContext, DeleteRecordContext, GetRecordContext, CRUDResult, SearchContext, SearchResult, ListContext, ListResult } from './types.js';
|
|
5
5
|
/** Result of testing a connection to an external system */
|
|
6
6
|
export interface ConnectionTestResult {
|
|
7
7
|
/** Whether the connection was successful */
|
|
@@ -36,9 +36,32 @@ export interface ExternalFieldSchema {
|
|
|
36
36
|
Description?: string;
|
|
37
37
|
/** Field data type in the external system */
|
|
38
38
|
DataType: string;
|
|
39
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Whether the field must be provided when creating a new record.
|
|
41
|
+
* Semantically distinct from AllowsNull — required is a create-time
|
|
42
|
+
* constraint; nullable is a record-state constraint. Often related but
|
|
43
|
+
* not always (e.g. a field can be required on create and become nullable
|
|
44
|
+
* later via update; a field can be optional on create with a default
|
|
45
|
+
* applied that produces a non-null stored value).
|
|
46
|
+
*/
|
|
40
47
|
IsRequired: boolean;
|
|
41
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Whether NULL is a permitted value at rest.
|
|
50
|
+
* Distinct from IsRequired (see above). When the source system reports
|
|
51
|
+
* neither explicit nullability nor a NOT NULL constraint, leave undefined
|
|
52
|
+
* — consumers default to permissive (nullable). Per the framework's
|
|
53
|
+
* provable-only policy, don't infer NOT NULL from sample data.
|
|
54
|
+
*/
|
|
55
|
+
AllowsNull?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Whether this field is THE primary key of the object.
|
|
58
|
+
* Distinct from IsUniqueKey — an object can have several unique fields
|
|
59
|
+
* (email, phone) of which only one is the PK. Connectors that introspect
|
|
60
|
+
* a source whose docs distinguish PK from unique constraint should set
|
|
61
|
+
* BOTH flags correctly; consumers should treat them independently.
|
|
62
|
+
*/
|
|
63
|
+
IsPrimaryKey?: boolean;
|
|
64
|
+
/** Whether the field is a unique identifier (may or may not be the PK) */
|
|
42
65
|
IsUniqueKey: boolean;
|
|
43
66
|
/** Whether the field is read-only */
|
|
44
67
|
IsReadOnly: boolean;
|
|
@@ -73,21 +96,50 @@ export interface FetchContext {
|
|
|
73
96
|
CurrentOffset?: number;
|
|
74
97
|
/** Current cursor for cursor-based pagination. Passed by engine on subsequent calls. */
|
|
75
98
|
CurrentCursor?: string;
|
|
99
|
+
/**
|
|
100
|
+
* KEYSET / seek resume position (plan.md §7): the last-seen value of the connector's
|
|
101
|
+
* StableOrderingKey. The connector fetches `WHERE <key> > AfterKeyValue ORDER BY <key>` so a
|
|
102
|
+
* mid-stream insert/delete cannot corrupt the scan position. Engine passes it on subsequent
|
|
103
|
+
* calls (and on restart-recovery). undefined/null on the first page.
|
|
104
|
+
*/
|
|
105
|
+
AfterKeyValue?: string | null;
|
|
76
106
|
/** Optional list of source field names to request from the external API. When provided, the connector should limit the returned fields to this set. */
|
|
77
107
|
RequestedSourceFields?: string[];
|
|
78
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* A non-fatal diagnostic a connector attaches to a fetch result so the engine surfaces it in the
|
|
111
|
+
* structured run artifact instead of letting it be a swallowed `console.warn`. The canonical use is
|
|
112
|
+
* a second-layer/association object that fetched ZERO records because its parents weren't available
|
|
113
|
+
* (not synced, unmapped, or DAG-ordered wrong) — the classic silent-empty.
|
|
114
|
+
*/
|
|
115
|
+
export interface FetchWarning {
|
|
116
|
+
/** Stable machine code, e.g. 'ZERO_PARENTS'. */
|
|
117
|
+
Code: string;
|
|
118
|
+
/** Human-readable explanation. */
|
|
119
|
+
Message: string;
|
|
120
|
+
/** Optional structured context (parent object name, counts, etc.). */
|
|
121
|
+
Data?: Record<string, unknown>;
|
|
122
|
+
}
|
|
79
123
|
/** Result of a FetchChanges call, containing a batch of records */
|
|
80
124
|
export interface FetchBatchResult {
|
|
81
125
|
/** Records retrieved in this batch */
|
|
82
126
|
Records: ExternalRecord[];
|
|
83
127
|
/** Whether there are more records to fetch after this batch */
|
|
84
128
|
HasMore: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Non-fatal diagnostics from this fetch (e.g. a second-layer object that found zero parents).
|
|
131
|
+
* The engine forwards each to the structured progress artifact as a SyncWarning so the
|
|
132
|
+
* silent-empty case is visible over GraphQL instead of a swallowed console.warn.
|
|
133
|
+
*/
|
|
134
|
+
Warnings?: FetchWarning[];
|
|
85
135
|
/** Updated watermark value after this batch */
|
|
86
136
|
NewWatermarkValue?: string;
|
|
87
137
|
/** Next page number to pass back via FetchContext.CurrentPage on the next call (page-based pagination) */
|
|
88
138
|
NextPage?: number;
|
|
89
139
|
/** Next offset to pass back via FetchContext.CurrentOffset on the next call (offset-based pagination) */
|
|
90
140
|
NextOffset?: number;
|
|
141
|
+
/** Next keyset/seek position — the highest StableOrderingKey value in this batch — to pass back via FetchContext.AfterKeyValue (plan.md §7 keyset resume). */
|
|
142
|
+
NextAfterKeyValue?: string;
|
|
91
143
|
/** Next cursor to pass back via FetchContext.CurrentCursor on the next call (cursor-based pagination) */
|
|
92
144
|
NextCursor?: string;
|
|
93
145
|
}
|
|
@@ -144,6 +196,19 @@ export interface DefaultIntegrationConfig {
|
|
|
144
196
|
* Callers can interrogate a connector instance to determine which
|
|
145
197
|
* operations it supports before attempting them.
|
|
146
198
|
*/
|
|
199
|
+
/**
|
|
200
|
+
* A connector's declared rate-limit policy for the engine's adaptive token-bucket limiter
|
|
201
|
+
* (plan.md §7). The engine starts at TokensPerSec, cuts multiplicatively on a 429/limit signal,
|
|
202
|
+
* and ramps back up on sustained success (AIMD).
|
|
203
|
+
*/
|
|
204
|
+
export interface RateLimitPolicy {
|
|
205
|
+
/** Sustained requests/sec ceiling for this source API. */
|
|
206
|
+
TokensPerSec: number;
|
|
207
|
+
/** Burst capacity. Defaults to TokensPerSec when omitted. */
|
|
208
|
+
Burst?: number;
|
|
209
|
+
/** Multiplicative-decrease factor applied on a throttle signal (0 < f < 1). */
|
|
210
|
+
ThrottleBackoffFactor?: number;
|
|
211
|
+
}
|
|
147
212
|
export declare abstract class BaseIntegrationConnector {
|
|
148
213
|
/** Whether this connector supports reading/fetching records. Always true. */
|
|
149
214
|
get SupportsGet(): boolean;
|
|
@@ -151,6 +216,11 @@ export declare abstract class BaseIntegrationConnector {
|
|
|
151
216
|
get SupportsCreate(): boolean;
|
|
152
217
|
/** Whether this connector supports updating existing records in the external system. */
|
|
153
218
|
get SupportsUpdate(): boolean;
|
|
219
|
+
/**
|
|
220
|
+
* Whether this connector supports idempotent upserts (create-or-update keyed
|
|
221
|
+
* by a unique business property). Connectors override this AND `Upsert` to enable it.
|
|
222
|
+
*/
|
|
223
|
+
get SupportsUpsert(): boolean;
|
|
154
224
|
/** Whether this connector supports deleting records from the external system. */
|
|
155
225
|
get SupportsDelete(): boolean;
|
|
156
226
|
/** Whether this connector supports searching/querying records with filters. */
|
|
@@ -169,6 +239,13 @@ export declare abstract class BaseIntegrationConnector {
|
|
|
169
239
|
* Check `SupportsUpdate` before calling.
|
|
170
240
|
*/
|
|
171
241
|
UpdateRecord(_ctx: UpdateRecordContext): Promise<CRUDResult>;
|
|
242
|
+
/**
|
|
243
|
+
* Upserts a record — a single idempotent create-or-update keyed by a unique
|
|
244
|
+
* business property (e.g. email), eliminating the search-then-create race window.
|
|
245
|
+
* Override in subclasses whose external system exposes a keyed upsert primitive.
|
|
246
|
+
* Check `SupportsUpsert` before calling.
|
|
247
|
+
*/
|
|
248
|
+
Upsert(_ctx: UpsertRecordContext): Promise<CRUDResult>;
|
|
172
249
|
/**
|
|
173
250
|
* Deletes a record from the external system.
|
|
174
251
|
* Override in subclasses that support delete operations.
|
|
@@ -192,6 +269,53 @@ export declare abstract class BaseIntegrationConnector {
|
|
|
192
269
|
* Check `SupportsListing` before calling.
|
|
193
270
|
*/
|
|
194
271
|
ListRecords(_ctx: ListContext): Promise<ListResult>;
|
|
272
|
+
/**
|
|
273
|
+
* Builds a CRUDResult for a record CREATE, failing LOUDLY when the external system returned
|
|
274
|
+
* no usable record ID. A 2xx response with an empty/undefined ID means the create did not
|
|
275
|
+
* durably produce a record we can track — returning Success:true there silently loses the
|
|
276
|
+
* record and causes duplicate creates on the next sync (the HubSpot-association class of bug,
|
|
277
|
+
* fixed in next commit 9f718a7e). This makes that failure explicit at the connector boundary.
|
|
278
|
+
*/
|
|
279
|
+
protected BuildCreatedResult(externalID: string | undefined | null, statusCode: number, objectName: string): CRUDResult;
|
|
280
|
+
/**
|
|
281
|
+
* Token-bucket rate-limit policy for this connector's source API (plan.md §7 peak-aware rate
|
|
282
|
+
* limiting). `null` → the engine derives a conservative rate from Integration.BatchRequestWaitTime.
|
|
283
|
+
* Override to push to the source's real limits.
|
|
284
|
+
*/
|
|
285
|
+
get RateLimitPolicy(): RateLimitPolicy | null;
|
|
286
|
+
/**
|
|
287
|
+
* Parse a Retry-After / rate-limit signal out of a failed response or thrown error into
|
|
288
|
+
* milliseconds so the engine can back off precisely. Return `undefined` when the error is not a
|
|
289
|
+
* throttle (or carries no hint).
|
|
290
|
+
*/
|
|
291
|
+
ExtractRetryAfterMs(_error: unknown): number | undefined;
|
|
292
|
+
/**
|
|
293
|
+
* Highest SAFE per-layer concurrency the source tolerates (plan.md §7 peak parallelization) — the
|
|
294
|
+
* ceiling the engine's adaptive controller ramps toward. `null` → use configured syncConcurrency.
|
|
295
|
+
*/
|
|
296
|
+
get MaxConcurrencyHint(): number | null;
|
|
297
|
+
/**
|
|
298
|
+
* Name of a stable, monotonic ordering key (PK/identity) usable for KEYSET/seek resume on
|
|
299
|
+
* watermark-less objects (plan.md §7 — resume from last-seen key, robust to mid-stream
|
|
300
|
+
* insert/delete). `null` → keyset resume unavailable for this object.
|
|
301
|
+
*/
|
|
302
|
+
StableOrderingKey(_objectName: string): string | null;
|
|
303
|
+
/** Whether this connector supports batched target writes (plan.md §7 aggressive batching). */
|
|
304
|
+
get SupportsBatchWrite(): boolean;
|
|
305
|
+
/** Batch-create. Default loops single-record CreateRecord, so the engine may always call the batch form. */
|
|
306
|
+
BatchCreateRecords(ctxs: CreateRecordContext[]): Promise<CRUDResult[]>;
|
|
307
|
+
/** Batch-update. Default loops single-record UpdateRecord. */
|
|
308
|
+
BatchUpdateRecords(ctxs: UpdateRecordContext[]): Promise<CRUDResult[]>;
|
|
309
|
+
/** Batch-delete. Default loops single-record DeleteRecord. */
|
|
310
|
+
BatchDeleteRecords(ctxs: DeleteRecordContext[]): Promise<CRUDResult[]>;
|
|
311
|
+
private runBatchViaSingles;
|
|
312
|
+
/**
|
|
313
|
+
* Type-driven post-processing hook (plan.md §10): a connector may normalize/enforce a record's
|
|
314
|
+
* values to the resolved column formats AFTER transform/normalize and BEFORE write. Default
|
|
315
|
+
* returns the record unchanged. (Named for this system — NOT MCP, not `take`.) The engine ALSO
|
|
316
|
+
* applies target-type constraint enforcement; this is the connector-side complement.
|
|
317
|
+
*/
|
|
318
|
+
PostProcessRecord(record: ExternalRecord): ExternalRecord;
|
|
195
319
|
/**
|
|
196
320
|
* Tests connectivity to the external system.
|
|
197
321
|
* @param companyIntegration - The company integration entity with connection credentials
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseIntegrationConnector.d.ts","sourceRoot":"","sources":["../src/BaseIntegrationConnector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EACR,qBAAqB,EACrB,qBAAqB,EACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACR,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,EACb,MAAM,YAAY,CAAC;AAEpB,2DAA2D;AAC3D,MAAM,WAAW,oBAAoB;IACjC,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACjC,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,uBAAuB,EAAE,OAAO,CAAC;IACjC,gEAAgE;IAChE,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED,iEAAiE;AACjE,MAAM,WAAW,mBAAmB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB
|
|
1
|
+
{"version":3,"file":"BaseIntegrationConnector.d.ts","sourceRoot":"","sources":["../src/BaseIntegrationConnector.ts"],"names":[],"mappings":"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"}
|