@memberjunction/integration-engine 6.1.0-edge.3 → 6.1.0-edge.5
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/BaseIntegrationConnector.d.ts +26 -2
- package/dist/BaseIntegrationConnector.d.ts.map +1 -1
- package/dist/BaseIntegrationConnector.js +145 -23
- package/dist/BaseIntegrationConnector.js.map +1 -1
- package/dist/BaseRESTIntegrationConnector.d.ts +62 -8
- package/dist/BaseRESTIntegrationConnector.d.ts.map +1 -1
- package/dist/BaseRESTIntegrationConnector.js +200 -20
- package/dist/BaseRESTIntegrationConnector.js.map +1 -1
- package/dist/BatchIdentity.d.ts +47 -0
- package/dist/BatchIdentity.d.ts.map +1 -0
- package/dist/BatchIdentity.js +78 -0
- package/dist/BatchIdentity.js.map +1 -0
- package/dist/DeclaredSampleMerge.d.ts +74 -0
- package/dist/DeclaredSampleMerge.d.ts.map +1 -0
- package/dist/DeclaredSampleMerge.js +104 -0
- package/dist/DeclaredSampleMerge.js.map +1 -0
- package/dist/DiscoveryWatchdog.d.ts +103 -0
- package/dist/DiscoveryWatchdog.d.ts.map +1 -0
- package/dist/DiscoveryWatchdog.js +166 -0
- package/dist/DiscoveryWatchdog.js.map +1 -0
- package/dist/FieldMapValidation.d.ts +40 -0
- package/dist/FieldMapValidation.d.ts.map +1 -0
- package/dist/FieldMapValidation.js +58 -0
- package/dist/FieldMapValidation.js.map +1 -0
- package/dist/FieldMappingEngine.d.ts +1 -13
- package/dist/FieldMappingEngine.d.ts.map +1 -1
- package/dist/FieldMappingEngine.js +18 -3
- package/dist/FieldMappingEngine.js.map +1 -1
- package/dist/IntegrationConnectorCreationPipeline.d.ts +20 -0
- package/dist/IntegrationConnectorCreationPipeline.d.ts.map +1 -1
- package/dist/IntegrationConnectorCreationPipeline.js +203 -30
- package/dist/IntegrationConnectorCreationPipeline.js.map +1 -1
- package/dist/IntegrationEngine.d.ts +204 -1
- package/dist/IntegrationEngine.d.ts.map +1 -1
- package/dist/IntegrationEngine.js +1224 -262
- package/dist/IntegrationEngine.js.map +1 -1
- package/dist/IntegrationSchemaSync.d.ts +54 -2
- package/dist/IntegrationSchemaSync.d.ts.map +1 -1
- package/dist/IntegrationSchemaSync.js +122 -16
- package/dist/IntegrationSchemaSync.js.map +1 -1
- package/dist/KeylessRecordGuard.d.ts +56 -0
- package/dist/KeylessRecordGuard.d.ts.map +1 -0
- package/dist/KeylessRecordGuard.js +80 -0
- package/dist/KeylessRecordGuard.js.map +1 -0
- package/dist/ResumeConcurrency.d.ts +46 -0
- package/dist/ResumeConcurrency.d.ts.map +1 -0
- package/dist/ResumeConcurrency.js +74 -0
- package/dist/ResumeConcurrency.js.map +1 -0
- package/dist/RetryAfter.d.ts +50 -0
- package/dist/RetryAfter.d.ts.map +1 -0
- package/dist/RetryAfter.js +127 -0
- package/dist/RetryAfter.js.map +1 -0
- package/dist/RetryRunner.d.ts +26 -2
- package/dist/RetryRunner.d.ts.map +1 -1
- package/dist/RetryRunner.js +11 -3
- package/dist/RetryRunner.js.map +1 -1
- package/dist/StreamingDiscovery.d.ts +11 -0
- package/dist/StreamingDiscovery.d.ts.map +1 -1
- package/dist/StreamingDiscovery.js +13 -3
- package/dist/StreamingDiscovery.js.map +1 -1
- package/dist/SyncDirectives.d.ts +66 -0
- package/dist/SyncDirectives.d.ts.map +1 -0
- package/dist/SyncDirectives.js +123 -0
- package/dist/SyncDirectives.js.map +1 -0
- package/dist/SyncLogger.d.ts +2 -1
- package/dist/SyncLogger.d.ts.map +1 -1
- package/dist/SyncLogger.js +1 -0
- package/dist/SyncLogger.js.map +1 -1
- package/dist/WatermarkService.d.ts +15 -0
- package/dist/WatermarkService.d.ts.map +1 -1
- package/dist/WatermarkService.js +26 -0
- package/dist/WatermarkService.js.map +1 -1
- package/dist/WriteSerializer.d.ts +44 -0
- package/dist/WriteSerializer.d.ts.map +1 -0
- package/dist/WriteSerializer.js +70 -0
- package/dist/WriteSerializer.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +45 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +66 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview How many orphaned syncs may be resumed at once, and the pool that does it.
|
|
3
|
+
*
|
|
4
|
+
* Syncs are STARTED concurrently — `processRSUPendingWork` launches each connector's `RunSync`
|
|
5
|
+
* without awaiting it — and used to be RESUMED serially, one `await` per iteration. A restart
|
|
6
|
+
* therefore converted a parallel workload into a queue ordered by whatever `RunView` returned,
|
|
7
|
+
* and the slowest connector became a head-of-line block for every other connector on the
|
|
8
|
+
* workspace. If it never finished, they never started.
|
|
9
|
+
*
|
|
10
|
+
* Kept in its own module so both decisions — the bound, and the isolation guarantee — can be
|
|
11
|
+
* tested directly rather than inferred from a resume that takes hours to run.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Default in-flight resumes. Deliberately small.
|
|
15
|
+
*
|
|
16
|
+
* A workspace is a single Node process: concurrency across connectors buys overlap on time spent
|
|
17
|
+
* waiting for different sources, not more CPU, because every response still returns to the same
|
|
18
|
+
* event loop to be parsed, hashed and written. Four covers the realistic case — a handful of
|
|
19
|
+
* connectors orphaned by one restart — without letting a boot that adopted fifty runs replace a
|
|
20
|
+
* head-of-line block with a thundering herd.
|
|
21
|
+
*
|
|
22
|
+
* The floor that actually matters is "greater than one". Serial was the bug.
|
|
23
|
+
*/
|
|
24
|
+
export declare const DEFAULT_RESUME_CONCURRENCY = 4;
|
|
25
|
+
/**
|
|
26
|
+
* Resolves the in-flight resume bound, honouring `MJ_RESUME_CONCURRENCY`.
|
|
27
|
+
*
|
|
28
|
+
* An operator recovering a workspace with many orphaned runs may want more; one recovering a
|
|
29
|
+
* memory-starved box may want fewer. Anything unparseable, zero, or negative falls back to the
|
|
30
|
+
* default rather than being clamped to 1 — silently reintroducing the serial behaviour because of
|
|
31
|
+
* a typo in an env var is exactly the failure this module exists to prevent.
|
|
32
|
+
*/
|
|
33
|
+
export declare function ResumeConcurrency(): number;
|
|
34
|
+
/**
|
|
35
|
+
* Runs `worker` over `items` with at most `concurrency` in flight, and does NOT stop early.
|
|
36
|
+
*
|
|
37
|
+
* The isolation is the point, and it is why this does not reuse a reject-on-first-error pool. A
|
|
38
|
+
* resume that fails must cost exactly one run, never the ones behind it — abandoning the queue on
|
|
39
|
+
* one bad item would recreate the head-of-line failure in a different shape. `ResumeOneOrphanedRun`
|
|
40
|
+
* already handles its own errors, so a rejection here means something genuinely unexpected; it is
|
|
41
|
+
* collected and rethrown only after every other item has had its turn.
|
|
42
|
+
*
|
|
43
|
+
* @throws the first worker rejection, AFTER all items have been attempted
|
|
44
|
+
*/
|
|
45
|
+
export declare function RunResumesBounded<T>(items: T[], concurrency: number, worker: (item: T) => Promise<void>): Promise<void>;
|
|
46
|
+
//# sourceMappingURL=ResumeConcurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResumeConcurrency.d.ts","sourceRoot":"","sources":["../src/ResumeConcurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACrC,KAAK,EAAE,CAAC,EAAE,EACV,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview How many orphaned syncs may be resumed at once, and the pool that does it.
|
|
3
|
+
*
|
|
4
|
+
* Syncs are STARTED concurrently — `processRSUPendingWork` launches each connector's `RunSync`
|
|
5
|
+
* without awaiting it — and used to be RESUMED serially, one `await` per iteration. A restart
|
|
6
|
+
* therefore converted a parallel workload into a queue ordered by whatever `RunView` returned,
|
|
7
|
+
* and the slowest connector became a head-of-line block for every other connector on the
|
|
8
|
+
* workspace. If it never finished, they never started.
|
|
9
|
+
*
|
|
10
|
+
* Kept in its own module so both decisions — the bound, and the isolation guarantee — can be
|
|
11
|
+
* tested directly rather than inferred from a resume that takes hours to run.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Default in-flight resumes. Deliberately small.
|
|
15
|
+
*
|
|
16
|
+
* A workspace is a single Node process: concurrency across connectors buys overlap on time spent
|
|
17
|
+
* waiting for different sources, not more CPU, because every response still returns to the same
|
|
18
|
+
* event loop to be parsed, hashed and written. Four covers the realistic case — a handful of
|
|
19
|
+
* connectors orphaned by one restart — without letting a boot that adopted fifty runs replace a
|
|
20
|
+
* head-of-line block with a thundering herd.
|
|
21
|
+
*
|
|
22
|
+
* The floor that actually matters is "greater than one". Serial was the bug.
|
|
23
|
+
*/
|
|
24
|
+
export const DEFAULT_RESUME_CONCURRENCY = 4;
|
|
25
|
+
/**
|
|
26
|
+
* Resolves the in-flight resume bound, honouring `MJ_RESUME_CONCURRENCY`.
|
|
27
|
+
*
|
|
28
|
+
* An operator recovering a workspace with many orphaned runs may want more; one recovering a
|
|
29
|
+
* memory-starved box may want fewer. Anything unparseable, zero, or negative falls back to the
|
|
30
|
+
* default rather than being clamped to 1 — silently reintroducing the serial behaviour because of
|
|
31
|
+
* a typo in an env var is exactly the failure this module exists to prevent.
|
|
32
|
+
*/
|
|
33
|
+
export function ResumeConcurrency() {
|
|
34
|
+
const raw = Number(process.env.MJ_RESUME_CONCURRENCY);
|
|
35
|
+
return Number.isFinite(raw) && raw >= 1 ? Math.floor(raw) : DEFAULT_RESUME_CONCURRENCY;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Runs `worker` over `items` with at most `concurrency` in flight, and does NOT stop early.
|
|
39
|
+
*
|
|
40
|
+
* The isolation is the point, and it is why this does not reuse a reject-on-first-error pool. A
|
|
41
|
+
* resume that fails must cost exactly one run, never the ones behind it — abandoning the queue on
|
|
42
|
+
* one bad item would recreate the head-of-line failure in a different shape. `ResumeOneOrphanedRun`
|
|
43
|
+
* already handles its own errors, so a rejection here means something genuinely unexpected; it is
|
|
44
|
+
* collected and rethrown only after every other item has had its turn.
|
|
45
|
+
*
|
|
46
|
+
* @throws the first worker rejection, AFTER all items have been attempted
|
|
47
|
+
*/
|
|
48
|
+
export async function RunResumesBounded(items, concurrency, worker) {
|
|
49
|
+
if (items.length === 0)
|
|
50
|
+
return;
|
|
51
|
+
let index = 0;
|
|
52
|
+
let firstError;
|
|
53
|
+
let hasError = false;
|
|
54
|
+
const runner = async () => {
|
|
55
|
+
while (index < items.length) {
|
|
56
|
+
const item = items[index++];
|
|
57
|
+
try {
|
|
58
|
+
await worker(item);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
// Keep going. One run's failure is one run's failure.
|
|
62
|
+
if (!hasError) {
|
|
63
|
+
hasError = true;
|
|
64
|
+
firstError = err;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const lanes = Math.max(1, Math.min(concurrency, items.length));
|
|
70
|
+
await Promise.all(Array.from({ length: lanes }, () => runner()));
|
|
71
|
+
if (hasError)
|
|
72
|
+
throw firstError;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=ResumeConcurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResumeConcurrency.js","sourceRoot":"","sources":["../src/ResumeConcurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;AAC3F,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,KAAU,EACV,WAAmB,EACnB,MAAkC;IAElC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,UAAmB,CAAC;IACxB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;QACrC,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC;gBACD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,sDAAsD;gBACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACZ,QAAQ,GAAG,IAAI,CAAC;oBAChB,UAAU,GAAG,GAAG,CAAC;gBACrB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEjE,IAAI,QAAQ;QAAE,MAAM,UAAU,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Standard `Retry-After` extraction, so a connector that writes no rate-limit code
|
|
3
|
+
* still backs off by the amount the vendor actually asked for.
|
|
4
|
+
*
|
|
5
|
+
* `BaseIntegrationConnector.ExtractRetryAfterMs` returned `undefined` unconditionally and no
|
|
6
|
+
* connector in this repo overrode it. The engine's limiter therefore always fell back to its own
|
|
7
|
+
* multiplicative decrease — correct in direction, but blind to a number the vendor had already
|
|
8
|
+
* supplied in the response.
|
|
9
|
+
*
|
|
10
|
+
* `Retry-After` is defined by RFC 9110 §10.2.3 and is the header a 429 (RFC 6585) and a 503 carry.
|
|
11
|
+
* Parsing it is not a heuristic and not vendor-specific, which is exactly why it belongs in the
|
|
12
|
+
* base class rather than in each connector: there is one correct reading of it, and every HTTP
|
|
13
|
+
* connector benefits from having it read.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately NOT a message-text parser. Guessing a duration out of prose ("try again in a bit")
|
|
16
|
+
* risks inventing a number, and a wrong Retry-After is worse than none — it would freeze the bucket
|
|
17
|
+
* for a made-up interval. Text-shaped signals stay the connector's job (see PheedLoop, whose vendor
|
|
18
|
+
* puts its delay in the body rather than a header); this reads the standard header only.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Upper bound on an honored `Retry-After`, in milliseconds (5 minutes).
|
|
22
|
+
*
|
|
23
|
+
* A vendor occasionally returns an enormous or malformed value — a Unix timestamp mistaken for
|
|
24
|
+
* delay-seconds, a date years out. Freezing a sync's token bucket for hours on the strength of one
|
|
25
|
+
* response is a worse failure than backing off by the limiter's own decrease, so anything beyond
|
|
26
|
+
* this is treated as unusable and the limiter's default applies.
|
|
27
|
+
*/
|
|
28
|
+
export declare const MAX_HONORED_RETRY_AFTER_MS: number;
|
|
29
|
+
/**
|
|
30
|
+
* Parses a `Retry-After` value into milliseconds. RFC 9110 permits two forms:
|
|
31
|
+
* - delay-seconds: a non-negative integer, e.g. `120`
|
|
32
|
+
* - HTTP-date: e.g. `Wed, 21 Oct 2015 07:28:00 GMT`
|
|
33
|
+
*
|
|
34
|
+
* @param value the raw header value
|
|
35
|
+
* @param nowMs clock reading used to convert an HTTP-date into a delay; injectable for tests
|
|
36
|
+
* @returns milliseconds to wait, or undefined when the value is unusable
|
|
37
|
+
*/
|
|
38
|
+
export declare function ParseRetryAfterValue(value: string | undefined, nowMs?: number): number | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Extracts a `Retry-After` delay, in milliseconds, from a thrown error or a failed response.
|
|
41
|
+
*
|
|
42
|
+
* Walks the shapes HTTP clients actually throw: the error itself carrying `headers`, an axios-style
|
|
43
|
+
* `error.response.headers`, and one level of `error.cause` (how a wrapper preserves the original).
|
|
44
|
+
*
|
|
45
|
+
* @param error the thrown value
|
|
46
|
+
* @param nowMs clock reading for HTTP-date conversion; injectable for tests
|
|
47
|
+
* @returns milliseconds to wait, or undefined when no usable header is present
|
|
48
|
+
*/
|
|
49
|
+
export declare function ExtractRetryAfterFromError(error: unknown, nowMs?: number): number | undefined;
|
|
50
|
+
//# sourceMappingURL=RetryAfter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RetryAfter.d.ts","sourceRoot":"","sources":["../src/RetryAfter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,QAAa,CAAC;AAwCrD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM,GAAG,SAAS,CA2B9G;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM,GAAG,SAAS,CAgBzG"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Standard `Retry-After` extraction, so a connector that writes no rate-limit code
|
|
3
|
+
* still backs off by the amount the vendor actually asked for.
|
|
4
|
+
*
|
|
5
|
+
* `BaseIntegrationConnector.ExtractRetryAfterMs` returned `undefined` unconditionally and no
|
|
6
|
+
* connector in this repo overrode it. The engine's limiter therefore always fell back to its own
|
|
7
|
+
* multiplicative decrease — correct in direction, but blind to a number the vendor had already
|
|
8
|
+
* supplied in the response.
|
|
9
|
+
*
|
|
10
|
+
* `Retry-After` is defined by RFC 9110 §10.2.3 and is the header a 429 (RFC 6585) and a 503 carry.
|
|
11
|
+
* Parsing it is not a heuristic and not vendor-specific, which is exactly why it belongs in the
|
|
12
|
+
* base class rather than in each connector: there is one correct reading of it, and every HTTP
|
|
13
|
+
* connector benefits from having it read.
|
|
14
|
+
*
|
|
15
|
+
* Deliberately NOT a message-text parser. Guessing a duration out of prose ("try again in a bit")
|
|
16
|
+
* risks inventing a number, and a wrong Retry-After is worse than none — it would freeze the bucket
|
|
17
|
+
* for a made-up interval. Text-shaped signals stay the connector's job (see PheedLoop, whose vendor
|
|
18
|
+
* puts its delay in the body rather than a header); this reads the standard header only.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Upper bound on an honored `Retry-After`, in milliseconds (5 minutes).
|
|
22
|
+
*
|
|
23
|
+
* A vendor occasionally returns an enormous or malformed value — a Unix timestamp mistaken for
|
|
24
|
+
* delay-seconds, a date years out. Freezing a sync's token bucket for hours on the strength of one
|
|
25
|
+
* response is a worse failure than backing off by the limiter's own decrease, so anything beyond
|
|
26
|
+
* this is treated as unusable and the limiter's default applies.
|
|
27
|
+
*/
|
|
28
|
+
export const MAX_HONORED_RETRY_AFTER_MS = 5 * 60_000;
|
|
29
|
+
/**
|
|
30
|
+
* Reads one header by name from a `Headers` instance, a `Map`, or a plain object, case-insensitively.
|
|
31
|
+
* Returns undefined when the container is not one of those or the header is absent.
|
|
32
|
+
*/
|
|
33
|
+
function readHeader(container, name) {
|
|
34
|
+
if (!container || typeof container !== 'object')
|
|
35
|
+
return undefined;
|
|
36
|
+
// fetch's Headers (and anything else exposing a case-insensitive get)
|
|
37
|
+
const getter = container.get;
|
|
38
|
+
if (typeof getter === 'function') {
|
|
39
|
+
try {
|
|
40
|
+
const v = container.get(name);
|
|
41
|
+
if (typeof v === 'string' && v.length > 0)
|
|
42
|
+
return v;
|
|
43
|
+
}
|
|
44
|
+
catch { /* not a Headers-like after all */ }
|
|
45
|
+
}
|
|
46
|
+
// Plain object / axios-style header bag. Node lower-cases response header names, but a hand-built
|
|
47
|
+
// object may not, so compare case-insensitively rather than trusting the spelling.
|
|
48
|
+
const target = name.toLowerCase();
|
|
49
|
+
for (const [k, v] of Object.entries(container)) {
|
|
50
|
+
if (k.toLowerCase() !== target)
|
|
51
|
+
continue;
|
|
52
|
+
// Node can hand back string[] for a repeated header; the first value is the one that counts.
|
|
53
|
+
const raw = Array.isArray(v) ? v[0] : v;
|
|
54
|
+
if (typeof raw === 'string' && raw.length > 0)
|
|
55
|
+
return raw;
|
|
56
|
+
if (typeof raw === 'number' && Number.isFinite(raw))
|
|
57
|
+
return String(raw);
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Parses a `Retry-After` value into milliseconds. RFC 9110 permits two forms:
|
|
63
|
+
* - delay-seconds: a non-negative integer, e.g. `120`
|
|
64
|
+
* - HTTP-date: e.g. `Wed, 21 Oct 2015 07:28:00 GMT`
|
|
65
|
+
*
|
|
66
|
+
* @param value the raw header value
|
|
67
|
+
* @param nowMs clock reading used to convert an HTTP-date into a delay; injectable for tests
|
|
68
|
+
* @returns milliseconds to wait, or undefined when the value is unusable
|
|
69
|
+
*/
|
|
70
|
+
export function ParseRetryAfterValue(value, nowMs = Date.now()) {
|
|
71
|
+
if (!value)
|
|
72
|
+
return undefined;
|
|
73
|
+
const trimmed = value.trim();
|
|
74
|
+
if (trimmed.length === 0)
|
|
75
|
+
return undefined;
|
|
76
|
+
// delay-seconds. Accept only a bare integer: a decimal or anything with trailing junk is not
|
|
77
|
+
// what the spec defines, and Number() would happily coerce forms that mean something else.
|
|
78
|
+
if (/^\d+$/.test(trimmed)) {
|
|
79
|
+
const ms = Number(trimmed) * 1000;
|
|
80
|
+
return ms > 0 && ms <= MAX_HONORED_RETRY_AFTER_MS ? ms : undefined;
|
|
81
|
+
}
|
|
82
|
+
// HTTP-date. `Date.parse` is extremely permissive — it happily reads '1.5' as a date and
|
|
83
|
+
// returns a real timestamp — so gate it on the string actually LOOKING like one first.
|
|
84
|
+
// Every form RFC 9110 permits (IMF-fixdate, obsolete RFC 850, asctime) carries a three-letter
|
|
85
|
+
// day or month name AND a digit; the junk that reaches here ('1.5', '30s', '1e3', 'soon')
|
|
86
|
+
// carries at most one of the two. Falling through to a misparsed date would invent a delay,
|
|
87
|
+
// which is the one outcome worse than having none.
|
|
88
|
+
if (!/[A-Za-z]{3}/.test(trimmed) || !/\d/.test(trimmed))
|
|
89
|
+
return undefined;
|
|
90
|
+
// A date already in the past means "retry now" — no wait, but also not a parse failure, so it
|
|
91
|
+
// must not fall through to the limiter's default as though nothing was said.
|
|
92
|
+
const at = Date.parse(trimmed);
|
|
93
|
+
if (Number.isNaN(at))
|
|
94
|
+
return undefined;
|
|
95
|
+
const ms = at - nowMs;
|
|
96
|
+
if (ms <= 0)
|
|
97
|
+
return 0;
|
|
98
|
+
return ms <= MAX_HONORED_RETRY_AFTER_MS ? ms : undefined;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extracts a `Retry-After` delay, in milliseconds, from a thrown error or a failed response.
|
|
102
|
+
*
|
|
103
|
+
* Walks the shapes HTTP clients actually throw: the error itself carrying `headers`, an axios-style
|
|
104
|
+
* `error.response.headers`, and one level of `error.cause` (how a wrapper preserves the original).
|
|
105
|
+
*
|
|
106
|
+
* @param error the thrown value
|
|
107
|
+
* @param nowMs clock reading for HTTP-date conversion; injectable for tests
|
|
108
|
+
* @returns milliseconds to wait, or undefined when no usable header is present
|
|
109
|
+
*/
|
|
110
|
+
export function ExtractRetryAfterFromError(error, nowMs = Date.now()) {
|
|
111
|
+
if (!error || typeof error !== 'object')
|
|
112
|
+
return undefined;
|
|
113
|
+
const e = error;
|
|
114
|
+
const candidates = [
|
|
115
|
+
e.headers,
|
|
116
|
+
e.response?.headers,
|
|
117
|
+
e.cause?.headers,
|
|
118
|
+
e.cause?.response?.headers,
|
|
119
|
+
];
|
|
120
|
+
for (const container of candidates) {
|
|
121
|
+
const parsed = ParseRetryAfterValue(readHeader(container, 'retry-after'), nowMs);
|
|
122
|
+
if (parsed !== undefined)
|
|
123
|
+
return parsed;
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=RetryAfter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RetryAfter.js","sourceRoot":"","sources":["../src/RetryAfter.ts"],"names":[],"mappings":"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"}
|
package/dist/RetryRunner.d.ts
CHANGED
|
@@ -13,15 +13,39 @@ export interface RetryConfig {
|
|
|
13
13
|
}
|
|
14
14
|
/** Default retry configuration */
|
|
15
15
|
export declare const DEFAULT_RETRY_CONFIG: RetryConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Optional hooks that let a caller make the wait between attempts smarter than blind backoff.
|
|
18
|
+
*
|
|
19
|
+
* Both exist for rate limiting. Exponential backoff is the right default for a network blip, but it
|
|
20
|
+
* is the WRONG answer to a 429: the source has usually told us exactly how long to wait, and
|
|
21
|
+
* retrying sooner is what turns a soft throttle into a hard one.
|
|
22
|
+
*/
|
|
23
|
+
export interface RetryHooks {
|
|
24
|
+
/**
|
|
25
|
+
* Derive the wait from the error itself — e.g. a `Retry-After` header. Return `null`/`undefined`
|
|
26
|
+
* to keep the computed exponential backoff. The larger of the two is NOT taken automatically;
|
|
27
|
+
* returning a value replaces the backoff, so a caller can honour a source that asks for a
|
|
28
|
+
* SHORTER wait as well as a longer one.
|
|
29
|
+
*/
|
|
30
|
+
DelayForError?: (error: unknown, attempt: number, backoffMs: number) => number | null | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Awaited after the delay and before the next attempt — e.g. re-acquiring a rate-limit token, so
|
|
33
|
+
* a retry passes through the same gate the first attempt did instead of bypassing it.
|
|
34
|
+
*/
|
|
35
|
+
BeforeRetry?: (attempt: number, error: unknown) => Promise<void> | void;
|
|
36
|
+
}
|
|
16
37
|
/**
|
|
17
38
|
* Executes an operation with retry logic using exponential backoff.
|
|
18
39
|
*
|
|
19
40
|
* @param operation - The async operation to execute
|
|
20
41
|
* @param config - Retry configuration (uses defaults if not provided)
|
|
21
42
|
* @param isRetryable - Predicate to determine if a caught error should trigger a retry
|
|
22
|
-
* @param onRetry - Optional callback invoked before each retry with attempt number, error, and delay
|
|
43
|
+
* @param onRetry - Optional callback invoked before each retry with attempt number, error, and delay.
|
|
44
|
+
* Runs BEFORE the wait, so it is the right place to report the failure onward (e.g.
|
|
45
|
+
* backing off a shared limiter) rather than after the retries are spent.
|
|
46
|
+
* @param hooks - Optional {@link RetryHooks} for source-directed delays and pre-attempt gating
|
|
23
47
|
* @returns The result of the operation
|
|
24
48
|
* @throws The last error encountered if all attempts fail
|
|
25
49
|
*/
|
|
26
|
-
export declare function WithRetry<T>(operation: () => Promise<T>, config?: RetryConfig, isRetryable?: (error: unknown) => boolean, onRetry?: (attempt: number, error: unknown, delayMs: number) => void): Promise<T>;
|
|
50
|
+
export declare function WithRetry<T>(operation: () => Promise<T>, config?: RetryConfig, isRetryable?: (error: unknown) => boolean, onRetry?: (attempt: number, error: unknown, delayMs: number) => void, hooks?: RetryHooks): Promise<T>;
|
|
27
51
|
//# sourceMappingURL=RetryRunner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RetryRunner.d.ts","sourceRoot":"","sources":["../src/RetryRunner.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,kCAAkC;AAClC,eAAO,MAAM,oBAAoB,EAAE,WAKlC,CAAC;AAeF
|
|
1
|
+
{"version":3,"file":"RetryRunner.d.ts","sourceRoot":"","sources":["../src/RetryRunner.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,kCAAkC;AAClC,eAAO,MAAM,oBAAoB,EAAE,WAKlC,CAAC;AAeF;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClG;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC7B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,MAAM,GAAE,WAAkC,EAC1C,WAAW,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAoB,EACrD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,EACpE,KAAK,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,CAAC,CAAC,CA+BZ"}
|
package/dist/RetryRunner.js
CHANGED
|
@@ -23,11 +23,14 @@ function computeDelay(attempt, config) {
|
|
|
23
23
|
* @param operation - The async operation to execute
|
|
24
24
|
* @param config - Retry configuration (uses defaults if not provided)
|
|
25
25
|
* @param isRetryable - Predicate to determine if a caught error should trigger a retry
|
|
26
|
-
* @param onRetry - Optional callback invoked before each retry with attempt number, error, and delay
|
|
26
|
+
* @param onRetry - Optional callback invoked before each retry with attempt number, error, and delay.
|
|
27
|
+
* Runs BEFORE the wait, so it is the right place to report the failure onward (e.g.
|
|
28
|
+
* backing off a shared limiter) rather than after the retries are spent.
|
|
29
|
+
* @param hooks - Optional {@link RetryHooks} for source-directed delays and pre-attempt gating
|
|
27
30
|
* @returns The result of the operation
|
|
28
31
|
* @throws The last error encountered if all attempts fail
|
|
29
32
|
*/
|
|
30
|
-
export async function WithRetry(operation, config = DEFAULT_RETRY_CONFIG, isRetryable = () => true, onRetry) {
|
|
33
|
+
export async function WithRetry(operation, config = DEFAULT_RETRY_CONFIG, isRetryable = () => true, onRetry, hooks) {
|
|
31
34
|
let lastError;
|
|
32
35
|
for (let attempt = 1; attempt <= config.MaxAttempts; attempt++) {
|
|
33
36
|
try {
|
|
@@ -39,11 +42,16 @@ export async function WithRetry(operation, config = DEFAULT_RETRY_CONFIG, isRetr
|
|
|
39
42
|
if (isLastAttempt || !isRetryable(err)) {
|
|
40
43
|
throw err;
|
|
41
44
|
}
|
|
42
|
-
const
|
|
45
|
+
const backoffMs = computeDelay(attempt, config);
|
|
46
|
+
const directed = hooks?.DelayForError?.(err, attempt, backoffMs);
|
|
47
|
+
const delayMs = typeof directed === 'number' && Number.isFinite(directed) && directed >= 0
|
|
48
|
+
? directed
|
|
49
|
+
: backoffMs;
|
|
43
50
|
if (onRetry) {
|
|
44
51
|
onRetry(attempt, err, delayMs);
|
|
45
52
|
}
|
|
46
53
|
await sleep(delayMs);
|
|
54
|
+
await hooks?.BeforeRetry?.(attempt, err);
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
// Should not reach here, but TypeScript needs this
|
package/dist/RetryRunner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RetryRunner.js","sourceRoot":"","sources":["../src/RetryRunner.ts"],"names":[],"mappings":"AAcA,kCAAkC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC7C,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,GAAG;CACtB,CAAC;AAEF;;;;;GAKG;AACH,SAAS,YAAY,CAAC,OAAe,EAAE,MAAmB;IACtD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC9D,OAAO,MAAM,GAAG,MAAM,CAAC;AAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"RetryRunner.js","sourceRoot":"","sources":["../src/RetryRunner.ts"],"names":[],"mappings":"AAcA,kCAAkC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC7C,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,GAAG;CACtB,CAAC;AAEF;;;;;GAKG;AACH,SAAS,YAAY,CAAC,OAAe,EAAE,MAAmB;IACtD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC9D,OAAO,MAAM,GAAG,MAAM,CAAC;AAC3B,CAAC;AAwBD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,SAA2B,EAC3B,SAAsB,oBAAoB,EAC1C,cAA2C,GAAG,EAAE,CAAC,IAAI,EACrD,OAAoE,EACpE,KAAkB;IAElB,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7D,IAAI,CAAC;YACD,OAAO,MAAM,SAAS,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,SAAS,GAAG,GAAG,CAAC;YAEhB,MAAM,aAAa,GAAG,OAAO,KAAK,MAAM,CAAC,WAAW,CAAC;YACrD,IAAI,aAAa,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,GAAG,CAAC;YACd,CAAC;YAED,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,KAAK,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;gBACtF,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,SAAS,CAAC;YAEhB,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,KAAK,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IAED,mDAAmD;IACnD,MAAM,SAAS,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -102,6 +102,17 @@ export interface PkStatVerdict {
|
|
|
102
102
|
AmbiguousForLLM: boolean;
|
|
103
103
|
Reason: string;
|
|
104
104
|
}
|
|
105
|
+
/** Minimum distinct/non-null ratio for a convention-named column to qualify as a SOFT key. */
|
|
106
|
+
/**
|
|
107
|
+
* Rows a value-statistic verdict needs before it counts as significant.
|
|
108
|
+
*
|
|
109
|
+
* Below this the classifier abstains (all-distinct over a handful of rows is chance, not a key);
|
|
110
|
+
* above it more rows change no verdict. Exported because callers must SIZE THEIR SAMPLE to it —
|
|
111
|
+
* a caller that buffers fewer rows than this gets abstention, and one that buffers more pays for
|
|
112
|
+
* confidence the classifier will not use. It was written inline three times here and duplicated a
|
|
113
|
+
* fourth time in the REST parent sampler, where the copy could drift out of step silently.
|
|
114
|
+
*/
|
|
115
|
+
export declare const PK_STAT_MIN_ROWS_FOR_SIGNIFICANCE = 50;
|
|
105
116
|
/**
|
|
106
117
|
* Statistics-first PK pick from streamed evidence. A column is a candidate ONLY if it is, over a
|
|
107
118
|
* statistically meaningful number of rows, **non-null on every row** AND **all-distinct** (and its
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamingDiscovery.d.ts","sourceRoot":"","sources":["../src/StreamingDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE/F,MAAM,WAAW,sBAAsB;IACnC,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAED,oDAAoD;AACpD,MAAM,WAAW,oBAAoB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,eAAe,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,cAAc,EAAE,OAAO,CAAC;IACxB,8DAA8D;IAC9D,YAAY,EAAE,OAAO,EAAE,CAAC;IACxB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yGAAyG;IACzG,QAAQ,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,6GAA6G;IAC7G,aAAa,EAAE,WAAW,GAAG,aAAa,CAAC;IAC3C;;;;OAIG;IACH,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C;AAyBD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACnF,IAAI,GAAE,sBAA2B,GAClC,OAAO,CAAC,qBAAqB,CAAC,CA4ChC;AA4BD,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC1B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,uDAAuD;AACvD,MAAM,WAAW,aAAa;IAC1B,mEAAmE;IACnE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,4FAA4F;IAC5F,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iHAAiH;IACjH,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"StreamingDiscovery.d.ts","sourceRoot":"","sources":["../src/StreamingDiscovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,6 +110,16 @@ function isConventionPkName(name) {
|
|
|
110
110
|
return /^(id|uuid|guid|pk)$|(^|_)(id|uuid|guid|key|code)$/i.test(name);
|
|
111
111
|
}
|
|
112
112
|
/** Minimum distinct/non-null ratio for a convention-named column to qualify as a SOFT key. */
|
|
113
|
+
/**
|
|
114
|
+
* Rows a value-statistic verdict needs before it counts as significant.
|
|
115
|
+
*
|
|
116
|
+
* Below this the classifier abstains (all-distinct over a handful of rows is chance, not a key);
|
|
117
|
+
* above it more rows change no verdict. Exported because callers must SIZE THEIR SAMPLE to it —
|
|
118
|
+
* a caller that buffers fewer rows than this gets abstention, and one that buffers more pays for
|
|
119
|
+
* confidence the classifier will not use. It was written inline three times here and duplicated a
|
|
120
|
+
* fourth time in the REST parent sampler, where the copy could drift out of step silently.
|
|
121
|
+
*/
|
|
122
|
+
export const PK_STAT_MIN_ROWS_FOR_SIGNIFICANCE = 50;
|
|
113
123
|
const SOFT_NEAR_UNIQUE_RATIO = 0.9;
|
|
114
124
|
/**
|
|
115
125
|
* Statistics-first PK pick from streamed evidence. A column is a candidate ONLY if it is, over a
|
|
@@ -119,7 +129,7 @@ const SOFT_NEAR_UNIQUE_RATIO = 0.9;
|
|
|
119
129
|
* otherwise it's flagged ambiguous for the LLM tiebreaker. Zero candidates → no PK (no fabrication).
|
|
120
130
|
*/
|
|
121
131
|
export function pickPrimaryKeyFromStats(columns, opts = {}) {
|
|
122
|
-
const minRows = opts.MinRowsForSignificance ??
|
|
132
|
+
const minRows = opts.MinRowsForSignificance ?? PK_STAT_MIN_ROWS_FOR_SIGNIFICANCE;
|
|
123
133
|
const candidates = columns.filter(c => c.TotalRows >= minRows &&
|
|
124
134
|
c.Occurrences === c.TotalRows && // non-null on EVERY row
|
|
125
135
|
!c.DistinctCapped && // uniqueness was provable from the scan
|
|
@@ -178,7 +188,7 @@ export function pickPrimaryKeyFromStats(columns, opts = {}) {
|
|
|
178
188
|
* gate (MinRowsForSignificance) keeps a small-sample "uniqueness" from being a fluke.
|
|
179
189
|
*/
|
|
180
190
|
export function pickCompositeKeyFromStats(columns, rowSamples, opts = {}) {
|
|
181
|
-
const minRows = opts.MinRowsForSignificance ??
|
|
191
|
+
const minRows = opts.MinRowsForSignificance ?? PK_STAT_MIN_ROWS_FOR_SIGNIFICANCE;
|
|
182
192
|
const n = rowSamples.length;
|
|
183
193
|
if (n < minRows) {
|
|
184
194
|
return { Fields: null, Reason: `Composite key not attempted — only ${n} sampled rows (< ${minRows} for significance).` };
|
|
@@ -259,7 +269,7 @@ function subsetKeyness(rowSamples, cols, minRows) {
|
|
|
259
269
|
* size yields a provable key, returns null (the object is honestly keyless — never a fabricated key).
|
|
260
270
|
*/
|
|
261
271
|
export function pickKeyFromStats(columns, rowSamples, opts = {}) {
|
|
262
|
-
const minRows = opts.MinRowsForSignificance ??
|
|
272
|
+
const minRows = opts.MinRowsForSignificance ?? PK_STAT_MIN_ROWS_FOR_SIGNIFICANCE;
|
|
263
273
|
const maxK = opts.MaxKeyColumns ?? 3;
|
|
264
274
|
const maxCandidates = opts.MaxCandidates ?? 15;
|
|
265
275
|
if (rowSamples.length < minRows) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamingDiscovery.js","sourceRoot":"","sources":["../src/StreamingDiscovery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StreamingDiscovery.js","sourceRoot":"","sources":["../src/StreamingDiscovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field-level sync directives.
|
|
3
|
+
*
|
|
4
|
+
* A connector can now declare that a source field should not be synced at all
|
|
5
|
+
* (`SourceFieldInfo.SyncDirective: 'Exclude'`). The directive is persisted into
|
|
6
|
+
* `IntegrationObjectField.Configuration` (a JSON column that already exists, so no
|
|
7
|
+
* migration is required) and honoured by the mapping stage, which strips excluded
|
|
8
|
+
* keys from the record BEFORE field mapping runs.
|
|
9
|
+
*
|
|
10
|
+
* Why stripping must happen there and not by deactivating a field map: an unmapped
|
|
11
|
+
* source key does not disappear — `computeUnmappedFields` captures it and the writer
|
|
12
|
+
* parks it in `__mj_integration_CustomOverflow`. Deactivating the map therefore
|
|
13
|
+
* REROUTES the value instead of excluding it, and the custom-column promoter will
|
|
14
|
+
* happily resurrect it as a real column later. Stripping before mapping keeps the
|
|
15
|
+
* key out of MappedFields, out of the overflow, and out of the content hash (whose
|
|
16
|
+
* basis is MappedFields), so an excluded field stops influencing change detection
|
|
17
|
+
* entirely.
|
|
18
|
+
*
|
|
19
|
+
* What this is for, concretely (measured on a live tenant, 2026-08-19):
|
|
20
|
+
* - `preferences` on Totara Users / Enrolled_Users: Moodle UI widget state
|
|
21
|
+
* (file-picker recents, user-selector toggles), identical nine keys on 100% of
|
|
22
|
+
* rows — ~2.5M expanded values of nothing.
|
|
23
|
+
* - `courseformatoptions` on Courses: course theming (header colours, tile icons).
|
|
24
|
+
* - `enrolledcourses` on Enrolled_Users: re-derives the Enrolled_Users table
|
|
25
|
+
* itself — ~7.6M expanded values that duplicate an object already synced.
|
|
26
|
+
*
|
|
27
|
+
* The directive lives in Configuration rather than a new column so that existing
|
|
28
|
+
* installs pick it up on their next schema sync with no DDL. Absence of a directive
|
|
29
|
+
* means Sync — connectors that never heard of this feature behave exactly as before.
|
|
30
|
+
*/
|
|
31
|
+
/** The Configuration key under which a field's sync directive is stored. */
|
|
32
|
+
export declare const SYNC_DIRECTIVE_CONFIG_KEY = "syncDirective";
|
|
33
|
+
/** Recognised directive values. Anything unrecognised is treated as 'Sync'. */
|
|
34
|
+
export type FieldSyncDirective = 'Sync' | 'Exclude';
|
|
35
|
+
/** Minimal shape of an IntegrationObjectField row this module needs. */
|
|
36
|
+
export interface FieldWithConfiguration {
|
|
37
|
+
Name: string;
|
|
38
|
+
Configuration: string | null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Reads the sync directive out of an IntegrationObjectField.Configuration JSON blob.
|
|
42
|
+
* Malformed JSON, a missing key, or an unrecognised value all mean 'Sync' — the
|
|
43
|
+
* directive can only ever narrow what is synced, never break a sync by its absence.
|
|
44
|
+
*/
|
|
45
|
+
export declare function ReadFieldSyncDirective(configuration: string | null | undefined): FieldSyncDirective;
|
|
46
|
+
/**
|
|
47
|
+
* Merges a directive into an existing Configuration JSON string, preserving every
|
|
48
|
+
* other key. Returns the new JSON, or the original string when nothing changes
|
|
49
|
+
* (so callers can cheaply detect no-op writes). Setting 'Sync' REMOVES the key
|
|
50
|
+
* rather than storing the default.
|
|
51
|
+
*/
|
|
52
|
+
export declare function WriteFieldSyncDirective(configuration: string | null | undefined, directive: FieldSyncDirective): string | null;
|
|
53
|
+
/**
|
|
54
|
+
* The set of source field names to strip for one integration object, derived from
|
|
55
|
+
* its IntegrationObjectField rows. Empty set when nothing is excluded — the
|
|
56
|
+
* mapping engine's fast path.
|
|
57
|
+
*/
|
|
58
|
+
export declare function ComputeExcludedSourceNames(fields: ReadonlyArray<FieldWithConfiguration>): Set<string>;
|
|
59
|
+
/**
|
|
60
|
+
* Returns a copy of `fields` without the excluded keys, or the ORIGINAL object when
|
|
61
|
+
* no key matches (so the no-exclusions path allocates nothing). Matching is exact:
|
|
62
|
+
* source field names are the connector's own spelling, already used verbatim as
|
|
63
|
+
* field-map SourceFieldName and overflow keys.
|
|
64
|
+
*/
|
|
65
|
+
export declare function StripExcludedFields(fields: Record<string, unknown>, excluded: ReadonlySet<string>): Record<string, unknown>;
|
|
66
|
+
//# sourceMappingURL=SyncDirectives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncDirectives.d.ts","sourceRoot":"","sources":["../src/SyncDirectives.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD,+EAA+E;AAC/E,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpD,wEAAwE;AACxE,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,kBAAkB,CAYnG;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACnC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,SAAS,EAAE,kBAAkB,GAC9B,MAAM,GAAG,IAAI,CAqBf;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAQrG;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB"}
|