@enricai/barnacle 1.12.20 → 1.12.21
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/scripts/recon-generate-multicall-fixture.d.ts +129 -0
- package/dist/scripts/recon-generate-multicall-fixture.d.ts.map +1 -1
- package/dist/scripts/recon-generate-multicall-fixture.js +353 -2
- package/dist/scripts/recon-generate-multicall-fixture.js.map +1 -1
- package/dist/scripts/recon-generate.d.ts +31 -27
- package/dist/scripts/recon-generate.d.ts.map +1 -1
- package/dist/scripts/recon-generate.js +326 -44
- package/dist/scripts/recon-generate.js.map +1 -1
- package/package.json +1 -1
|
@@ -17,6 +17,8 @@ export declare function buildCapture(overrides: {
|
|
|
17
17
|
responseBody: unknown;
|
|
18
18
|
timestamp: string;
|
|
19
19
|
requestHeaders?: Record<string, string>;
|
|
20
|
+
responseHeaders?: Record<string, string>;
|
|
21
|
+
method?: string;
|
|
20
22
|
}): Capture;
|
|
21
23
|
export declare function buildStep(varName: string, overrides: {
|
|
22
24
|
url: string;
|
|
@@ -24,6 +26,8 @@ export declare function buildStep(varName: string, overrides: {
|
|
|
24
26
|
responseBody: unknown;
|
|
25
27
|
timestamp: string;
|
|
26
28
|
requestHeaders?: Record<string, string>;
|
|
29
|
+
responseHeaders?: Record<string, string>;
|
|
30
|
+
method?: string;
|
|
27
31
|
}): MulticallFixtureStep;
|
|
28
32
|
/**
|
|
29
33
|
* Reproduces a listings-fixture G1/G2 recon capture set: a
|
|
@@ -399,6 +403,30 @@ export declare function buildMulticallSingleShotSearchDrillDownChainedDependentM
|
|
|
399
403
|
* chain's TERMINAL (history) response, not the drill step's own `prices[]`.
|
|
400
404
|
*/
|
|
401
405
|
export declare function buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps(): MulticallFixtureStep[];
|
|
406
|
+
/**
|
|
407
|
+
* A response-header sibling of {@link buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps}:
|
|
408
|
+
* the drill step's (`r1`) response mints its join token (`tok-a1`) ONLY in a
|
|
409
|
+
* custom response HEADER (`X-Price-Token`) — its body is empty, unlike the
|
|
410
|
+
* sibling's `priceToken` body field. A third step (`r2`) threads that header
|
|
411
|
+
* value into its own request body and carries the real per-item `history[]`
|
|
412
|
+
* array. `computeFoldChain`'s `dependsOnChain` check must walk `r1`'s
|
|
413
|
+
* response headers (not just its body) to see the shared value, extending
|
|
414
|
+
* the chain to `[drillStepIndex, historyStepIndex]` rather than stopping at
|
|
415
|
+
* `r1`.
|
|
416
|
+
*/
|
|
417
|
+
export declare function buildMulticallSingleShotSearchDrillDownHeaderMintedChainedResponseValueActionSteps(): MulticallFixtureStep[];
|
|
418
|
+
/**
|
|
419
|
+
* A boolean-threading sibling of {@link buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps}:
|
|
420
|
+
* the drill step's (`r1`) response mints ONLY a boolean value
|
|
421
|
+
* (`{ verified: true }`) and carries no array of its own — unlike the
|
|
422
|
+
* `priceToken`/`prices[]` sibling, this drill step is NOT foldable in
|
|
423
|
+
* isolation. A third step (`r2`) threads that boolean (rendered as the
|
|
424
|
+
* string `"true"`) into its request and carries the real per-item
|
|
425
|
+
* `history[]` array in its response. `computeFoldChain` must recognize the
|
|
426
|
+
* boolean leaf as a genuine chain-dependency source and extend the chain to
|
|
427
|
+
* `[drillStepIndex, historyStepIndex]` rather than stopping at `r1`.
|
|
428
|
+
*/
|
|
429
|
+
export declare function buildMulticallSingleShotSearchDrillDownBooleanChainedResponseValueActionSteps(): MulticallFixtureStep[];
|
|
402
430
|
/**
|
|
403
431
|
* A nested-join-key sibling of {@link buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps}:
|
|
404
432
|
* each primary `results[]` item carries its join key under a nested
|
|
@@ -538,6 +566,39 @@ export declare function buildMulticallSingleShotSearchDrillDownArrayWrappedChain
|
|
|
538
566
|
* reproduces identically whether or not the terminal body is array-wrapped.
|
|
539
567
|
*/
|
|
540
568
|
export declare function buildMulticallSingleShotSearchDrillDownArrayWrappedNumericChainedJoinFieldActionSteps(): MulticallFixtureStep[];
|
|
569
|
+
/**
|
|
570
|
+
* A sibling of
|
|
571
|
+
* {@link buildMulticallSingleShotSearchDrillDownArrayWrappedNumericChainedJoinFieldActionSteps}
|
|
572
|
+
* isolating a DIFFERENT gap in the numeric chain-produced join field family:
|
|
573
|
+
* `r1`'s produced token is a bare (non-array-wrapped) JSON number, and — the
|
|
574
|
+
* shape that matters here — it is SHORT (`42`/`43`, two digits) rather than
|
|
575
|
+
* an 8-digit token. `indexStateValues` gates every candidate state value on
|
|
576
|
+
* `MIN_STATE_VALUE_LENGTH` (8 chars), a threshold sized to keep an unrelated
|
|
577
|
+
* short STRING (an enum code, a page number) from colliding with arbitrary
|
|
578
|
+
* substrings elsewhere; applied uniformly to a bare NUMBER's stringified
|
|
579
|
+
* length, it also silently excludes a short numeric id/token — exactly the
|
|
580
|
+
* common shape for an order/account/status id — from ever being indexed as
|
|
581
|
+
* producible state. Without that index entry, `compileActionSteps` never
|
|
582
|
+
* emits a `produces[]` accessor for `r1`'s response, so `r2`'s templated
|
|
583
|
+
* body has nothing to substitute and falls back to treating `{"token":...}`
|
|
584
|
+
* as an opaque caller-supplied payload field (`payload.token`) instead of
|
|
585
|
+
* the per-item threaded value — every iteration would send whatever (or
|
|
586
|
+
* nothing) the caller passed, not each primary item's own token.
|
|
587
|
+
*/
|
|
588
|
+
export declare function buildMulticallSingleShotSearchDrillDownShortNumericChainedJoinFieldActionSteps(): MulticallFixtureStep[];
|
|
589
|
+
/**
|
|
590
|
+
* Cookie-origin sibling of
|
|
591
|
+
* {@link buildMulticallSingleShotSearchDrillDownShortNumericChainedJoinFieldActionSteps}:
|
|
592
|
+
* here `r1` mints the short chain-produced token (`tok1`, under
|
|
593
|
+
* `MIN_STATE_VALUE_LENGTH`) via `Set-Cookie` rather than the response body,
|
|
594
|
+
* AND echoes the same value in its response body (the "body-level echo" that
|
|
595
|
+
* lets {@link collectDependentDrillDownChainValues} confirm the cookie value
|
|
596
|
+
* is chain-produced, exactly as a body-sourced token would be). `r2` threads
|
|
597
|
+
* `tok1` back via its request body. Exercises `indexStateValues`' Set-Cookie
|
|
598
|
+
* branch's `chainForceIncludeValues`/`forceIncludeValues` exemption, mirroring
|
|
599
|
+
* the body-value floor exemption.
|
|
600
|
+
*/
|
|
601
|
+
export declare function buildMulticallSingleShotSearchDrillDownShortCookieChainedJoinFieldActionSteps(): MulticallFixtureStep[];
|
|
541
602
|
/**
|
|
542
603
|
* A different sibling of the same array-wrapped-join-field failure family:
|
|
543
604
|
* here it's the IMMEDIATE drill step (`r1`), not a later chain hop, whose
|
|
@@ -564,4 +625,72 @@ export declare function buildMulticallSingleShotSearchDrillDownArrayWrappedImmed
|
|
|
564
625
|
* for the fold-loop's later per-item `parameterize` pass.
|
|
565
626
|
*/
|
|
566
627
|
export declare function buildMulticallSingleShotSearchDrillDownArrayWrappedNumericImmediateJoinFieldActionSteps(): MulticallFixtureStep[];
|
|
628
|
+
/**
|
|
629
|
+
* Same array-wrapped-immediate-join-field shape as
|
|
630
|
+
* {@link buildMulticallSingleShotSearchDrillDownArrayWrappedNumericImmediateJoinFieldActionSteps},
|
|
631
|
+
* but the primary item's join field is a bare JSON BOOLEAN (`flag: true`)
|
|
632
|
+
* rather than a number or string. `walkStringLeaves` (used by the spare
|
|
633
|
+
* check in `applyStructuredValuePayloadSubstitutions`) silently skips
|
|
634
|
+
* boolean leaves the same way it skips number leaves, so a boolean join
|
|
635
|
+
* value wrapped in `{"flags":[true]}` was frozen into an opaque
|
|
636
|
+
* `${JSON.stringify(payload.flags)}` blob instead of being spared for the
|
|
637
|
+
* fold-loop's later per-item `parameterize` pass.
|
|
638
|
+
*/
|
|
639
|
+
export declare function buildMulticallSingleShotSearchDrillDownArrayWrappedBooleanImmediateJoinFieldActionSteps(): MulticallFixtureStep[];
|
|
640
|
+
/**
|
|
641
|
+
* A dependent (chained) drill-down whose join key is threaded ONLY through a
|
|
642
|
+
* request HEADER (`API-Token`) on the chain's ENTRY hop (`r1`) — invisible to
|
|
643
|
+
* `detectDrillDownFoldPlan`'s structural heuristic exactly like
|
|
644
|
+
* {@link buildMulticallSingleShotSearchDrillDownHeaderThreadedJoinActionSteps}
|
|
645
|
+
* — so only a flow-declared `foldReturn` can resolve this fold at all. Unlike
|
|
646
|
+
* every existing header-threaded-join fixture, though, a site author writing
|
|
647
|
+
* that `foldReturn` naturally points `endpointPattern` at `r2`
|
|
648
|
+
* (`/accounts/transactions`) — the call whose OWN response actually carries
|
|
649
|
+
* the per-item data (`transactions[]`) they want folded — not at `r1`
|
|
650
|
+
* (`/accounts/status`), the opaque intermediate hop that merely carries the
|
|
651
|
+
* `accountId`→`API-Token` header thread onward as a `statusToken`. `r2`'s own
|
|
652
|
+
* request only ever carries that threaded `statusToken`, never `accountId`
|
|
653
|
+
* in any form (body, URL, or header) — the join key is resolvable only by
|
|
654
|
+
* walking back to `r1`, exactly the way `computeFoldChain` already walks
|
|
655
|
+
* FORWARD from a resolved entry hop to a richer terminal. `resultsPath`
|
|
656
|
+
* anchors on `accounts`, `joinFields` on `accountId`.
|
|
657
|
+
*/
|
|
658
|
+
export declare function buildMulticallSingleShotSearchDrillDownHeaderThreadedJoinChainedDependentActionSteps(): MulticallFixtureStep[];
|
|
659
|
+
/**
|
|
660
|
+
* A dependent (chained) drill-down whose ENTRY hop (`r1`) is a `GET`
|
|
661
|
+
* request — not the `POST` every other chained-dependent fixture in this
|
|
662
|
+
* file uses — and whose response produces the chain's join value
|
|
663
|
+
* (`statusToken`) as a non-UUID string. `indexStateValues` indexes a `GET`
|
|
664
|
+
* capture's response leaves ONLY when they are UUID-shaped
|
|
665
|
+
* (`isGet && !UUID_REGEX.test(value)` skips everything else, a filter aimed
|
|
666
|
+
* at excluding noisy short non-UUID strings a GET-only telemetry/schema
|
|
667
|
+
* fetch surfaces); that filter runs unconditionally, with no exemption for a
|
|
668
|
+
* value `collectDependentDrillDownChainValues` has already confirmed is
|
|
669
|
+
* threaded from this exact hop into a later chain hop's own request — unlike
|
|
670
|
+
* the `MIN_STATE_VALUE_LENGTH` floor a few lines above it, which DOES carry
|
|
671
|
+
* that exemption. So a chain-produced token minted by a GET response is
|
|
672
|
+
* never indexed as producible state at all, `compileActionSteps` never
|
|
673
|
+
* emits a `produces[]` accessor for it, and `r2`'s templated body has
|
|
674
|
+
* nothing to substitute — every iteration renders the literal string
|
|
675
|
+
* `"undefined"` instead of threading each primary item's own token.
|
|
676
|
+
*/
|
|
677
|
+
export declare function buildMulticallSingleShotSearchDrillDownGetEntryHopChainedDependentActionSteps(): MulticallFixtureStep[];
|
|
678
|
+
/**
|
|
679
|
+
* A response-header sibling of {@link buildMulticallSingleShotSearchDrillDownGetEntryHopChainedDependentActionSteps}:
|
|
680
|
+
* the chain's drill hop (`r1`) mints its join token (`tok-a1`) ONLY in a
|
|
681
|
+
* custom response HEADER (`X-Price-Token`) — its body is empty ({}), unlike
|
|
682
|
+
* {@link buildMulticallSingleShotSearchDrillDownHeaderMintedChainedResponseValueActionSteps}'s
|
|
683
|
+
* body-echo-free sibling, which threads the header value forward via the
|
|
684
|
+
* request BODY. Here the terminal hop (`r2`) instead threads that value back
|
|
685
|
+
* as a REQUEST HEADER of its own (also named `X-Price-Token`) — the only
|
|
686
|
+
* shape `createHttpClient`'s `bind` option can actually thread a
|
|
687
|
+
* header-origin value into, since the emitted response variable never
|
|
688
|
+
* exposes response headers to the rest of the generated code. Exercises
|
|
689
|
+
* `compileActionSteps`' non-cookie response-header produce block: without it,
|
|
690
|
+
* `tok-a1` is never captured into a `produces[]`/`bind` entry at all, and
|
|
691
|
+
* `r2`'s per-item call goes out with no `X-Price-Token` header, so the
|
|
692
|
+
* terminal `history[]` fold silently collapses to whichever primary item the
|
|
693
|
+
* stub happens to answer first instead of each item's own token.
|
|
694
|
+
*/
|
|
695
|
+
export declare function buildMulticallSingleShotSearchDrillDownResponseHeaderThreadedJoinChainedDependentActionSteps(): MulticallFixtureStep[];
|
|
567
696
|
//# sourceMappingURL=recon-generate-multicall-fixture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recon-generate-multicall-fixture.d.ts","sourceRoot":"","sources":["../../src/scripts/recon-generate-multicall-fixture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;;;qEAIqE;AACrE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"recon-generate-multicall-fixture.d.ts","sourceRoot":"","sources":["../../src/scripts/recon-generate-multicall-fixture.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,8 @@ exports.buildMulticallSingleShotSearchDrillDownMultiMatchActionSteps = buildMult
|
|
|
32
32
|
exports.buildMulticallSingleShotSearchDrillDownTypeMismatchJoinActionSteps = buildMulticallSingleShotSearchDrillDownTypeMismatchJoinActionSteps;
|
|
33
33
|
exports.buildMulticallSingleShotSearchDrillDownChainedDependentMultipartChainStepActionSteps = buildMulticallSingleShotSearchDrillDownChainedDependentMultipartChainStepActionSteps;
|
|
34
34
|
exports.buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps = buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps;
|
|
35
|
+
exports.buildMulticallSingleShotSearchDrillDownHeaderMintedChainedResponseValueActionSteps = buildMulticallSingleShotSearchDrillDownHeaderMintedChainedResponseValueActionSteps;
|
|
36
|
+
exports.buildMulticallSingleShotSearchDrillDownBooleanChainedResponseValueActionSteps = buildMulticallSingleShotSearchDrillDownBooleanChainedResponseValueActionSteps;
|
|
35
37
|
exports.buildMulticallSingleShotSearchDrillDownNestedJoinFieldChainedDependentActionSteps = buildMulticallSingleShotSearchDrillDownNestedJoinFieldChainedDependentActionSteps;
|
|
36
38
|
exports.buildMulticallSingleShotSearchDrillDownRequeriedPrimaryOverlapActionSteps = buildMulticallSingleShotSearchDrillDownRequeriedPrimaryOverlapActionSteps;
|
|
37
39
|
exports.buildMulticallSingleShotSearchTwoIndependentArraysActionSteps = buildMulticallSingleShotSearchTwoIndependentArraysActionSteps;
|
|
@@ -41,18 +43,24 @@ exports.buildMulticallSingleShotSearchDrillDownOpaqueIntermediateChainedDependen
|
|
|
41
43
|
exports.buildMulticallSingleShotSearchDrillDownRichnessTiedConfirmationHopChainedDependentActionSteps = buildMulticallSingleShotSearchDrillDownRichnessTiedConfirmationHopChainedDependentActionSteps;
|
|
42
44
|
exports.buildMulticallSingleShotSearchDrillDownArrayWrappedChainedDependentActionSteps = buildMulticallSingleShotSearchDrillDownArrayWrappedChainedDependentActionSteps;
|
|
43
45
|
exports.buildMulticallSingleShotSearchDrillDownArrayWrappedNumericChainedJoinFieldActionSteps = buildMulticallSingleShotSearchDrillDownArrayWrappedNumericChainedJoinFieldActionSteps;
|
|
46
|
+
exports.buildMulticallSingleShotSearchDrillDownShortNumericChainedJoinFieldActionSteps = buildMulticallSingleShotSearchDrillDownShortNumericChainedJoinFieldActionSteps;
|
|
47
|
+
exports.buildMulticallSingleShotSearchDrillDownShortCookieChainedJoinFieldActionSteps = buildMulticallSingleShotSearchDrillDownShortCookieChainedJoinFieldActionSteps;
|
|
44
48
|
exports.buildMulticallSingleShotSearchDrillDownArrayWrappedImmediateJoinFieldActionSteps = buildMulticallSingleShotSearchDrillDownArrayWrappedImmediateJoinFieldActionSteps;
|
|
45
49
|
exports.buildMulticallSingleShotSearchDrillDownArrayWrappedNumericImmediateJoinFieldActionSteps = buildMulticallSingleShotSearchDrillDownArrayWrappedNumericImmediateJoinFieldActionSteps;
|
|
50
|
+
exports.buildMulticallSingleShotSearchDrillDownArrayWrappedBooleanImmediateJoinFieldActionSteps = buildMulticallSingleShotSearchDrillDownArrayWrappedBooleanImmediateJoinFieldActionSteps;
|
|
51
|
+
exports.buildMulticallSingleShotSearchDrillDownHeaderThreadedJoinChainedDependentActionSteps = buildMulticallSingleShotSearchDrillDownHeaderThreadedJoinChainedDependentActionSteps;
|
|
52
|
+
exports.buildMulticallSingleShotSearchDrillDownGetEntryHopChainedDependentActionSteps = buildMulticallSingleShotSearchDrillDownGetEntryHopChainedDependentActionSteps;
|
|
53
|
+
exports.buildMulticallSingleShotSearchDrillDownResponseHeaderThreadedJoinChainedDependentActionSteps = buildMulticallSingleShotSearchDrillDownResponseHeaderThreadedJoinChainedDependentActionSteps;
|
|
46
54
|
function buildCapture(overrides) {
|
|
47
55
|
return {
|
|
48
56
|
timestamp: overrides.timestamp,
|
|
49
57
|
phase: "action",
|
|
50
|
-
method: "POST",
|
|
58
|
+
method: overrides.method ?? "POST",
|
|
51
59
|
url: overrides.url,
|
|
52
60
|
status: 200,
|
|
53
61
|
requestHeaders: overrides.requestHeaders ?? { "Content-Type": "application/json" },
|
|
54
62
|
requestPostData: overrides.requestPostData,
|
|
55
|
-
responseHeaders: { "content-type": "application/json" },
|
|
63
|
+
responseHeaders: overrides.responseHeaders ?? { "content-type": "application/json" },
|
|
56
64
|
responseBody: overrides.responseBody,
|
|
57
65
|
operationName: null,
|
|
58
66
|
query: null,
|
|
@@ -1102,6 +1110,84 @@ function buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps() {
|
|
|
1102
1110
|
}),
|
|
1103
1111
|
];
|
|
1104
1112
|
}
|
|
1113
|
+
/**
|
|
1114
|
+
* A response-header sibling of {@link buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps}:
|
|
1115
|
+
* the drill step's (`r1`) response mints its join token (`tok-a1`) ONLY in a
|
|
1116
|
+
* custom response HEADER (`X-Price-Token`) — its body is empty, unlike the
|
|
1117
|
+
* sibling's `priceToken` body field. A third step (`r2`) threads that header
|
|
1118
|
+
* value into its own request body and carries the real per-item `history[]`
|
|
1119
|
+
* array. `computeFoldChain`'s `dependsOnChain` check must walk `r1`'s
|
|
1120
|
+
* response headers (not just its body) to see the shared value, extending
|
|
1121
|
+
* the chain to `[drillStepIndex, historyStepIndex]` rather than stopping at
|
|
1122
|
+
* `r1`.
|
|
1123
|
+
*/
|
|
1124
|
+
function buildMulticallSingleShotSearchDrillDownHeaderMintedChainedResponseValueActionSteps() {
|
|
1125
|
+
return [
|
|
1126
|
+
buildStep("r0", {
|
|
1127
|
+
url: CATALOG_SEARCH_URL,
|
|
1128
|
+
requestPostData: '{"page":1}',
|
|
1129
|
+
responseBody: {
|
|
1130
|
+
results: [{ sku: "sku-a" }, { sku: "sku-b" }],
|
|
1131
|
+
},
|
|
1132
|
+
timestamp: "2024-11-16T00:00:00Z",
|
|
1133
|
+
}),
|
|
1134
|
+
buildStep("r1", {
|
|
1135
|
+
url: CATALOG_PRICING_URL,
|
|
1136
|
+
requestPostData: '{"sku":"sku-a"}',
|
|
1137
|
+
responseBody: {},
|
|
1138
|
+
responseHeaders: { "content-type": "application/json", "X-Price-Token": "tok-a1" },
|
|
1139
|
+
timestamp: "2024-11-16T00:00:01Z",
|
|
1140
|
+
}),
|
|
1141
|
+
buildStep("r2", {
|
|
1142
|
+
url: CATALOG_PRICE_HISTORY_URL,
|
|
1143
|
+
requestPostData: '{"priceToken":"tok-a1"}',
|
|
1144
|
+
responseBody: {
|
|
1145
|
+
history: [{ sku: "sku-a", amount: 18.5, asOf: "2024-11-01" }],
|
|
1146
|
+
},
|
|
1147
|
+
timestamp: "2024-11-16T00:00:02Z",
|
|
1148
|
+
}),
|
|
1149
|
+
];
|
|
1150
|
+
}
|
|
1151
|
+
const CATALOG_VERIFICATION_STATUS_URL = "https://api.example.com/catalog/verification-status";
|
|
1152
|
+
/**
|
|
1153
|
+
* A boolean-threading sibling of {@link buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps}:
|
|
1154
|
+
* the drill step's (`r1`) response mints ONLY a boolean value
|
|
1155
|
+
* (`{ verified: true }`) and carries no array of its own — unlike the
|
|
1156
|
+
* `priceToken`/`prices[]` sibling, this drill step is NOT foldable in
|
|
1157
|
+
* isolation. A third step (`r2`) threads that boolean (rendered as the
|
|
1158
|
+
* string `"true"`) into its request and carries the real per-item
|
|
1159
|
+
* `history[]` array in its response. `computeFoldChain` must recognize the
|
|
1160
|
+
* boolean leaf as a genuine chain-dependency source and extend the chain to
|
|
1161
|
+
* `[drillStepIndex, historyStepIndex]` rather than stopping at `r1`.
|
|
1162
|
+
*/
|
|
1163
|
+
function buildMulticallSingleShotSearchDrillDownBooleanChainedResponseValueActionSteps() {
|
|
1164
|
+
return [
|
|
1165
|
+
buildStep("r0", {
|
|
1166
|
+
url: CATALOG_SEARCH_URL,
|
|
1167
|
+
requestPostData: '{"page":1}',
|
|
1168
|
+
responseBody: {
|
|
1169
|
+
results: [{ sku: "sku-a" }, { sku: "sku-b" }],
|
|
1170
|
+
},
|
|
1171
|
+
timestamp: "2024-12-01T00:00:00Z",
|
|
1172
|
+
}),
|
|
1173
|
+
buildStep("r1", {
|
|
1174
|
+
url: CATALOG_PRICING_URL,
|
|
1175
|
+
requestPostData: '{"sku":"sku-a"}',
|
|
1176
|
+
responseBody: {
|
|
1177
|
+
verified: true,
|
|
1178
|
+
},
|
|
1179
|
+
timestamp: "2024-12-01T00:00:01Z",
|
|
1180
|
+
}),
|
|
1181
|
+
buildStep("r2", {
|
|
1182
|
+
url: CATALOG_VERIFICATION_STATUS_URL,
|
|
1183
|
+
requestPostData: '{"verified":"true"}',
|
|
1184
|
+
responseBody: {
|
|
1185
|
+
history: [{ sku: "sku-a", amount: 18.5, asOf: "2024-11-01" }],
|
|
1186
|
+
},
|
|
1187
|
+
timestamp: "2024-12-01T00:00:02Z",
|
|
1188
|
+
}),
|
|
1189
|
+
];
|
|
1190
|
+
}
|
|
1105
1191
|
/**
|
|
1106
1192
|
* A nested-join-key sibling of {@link buildMulticallSingleShotSearchDrillDownChainedDependentActionSteps}:
|
|
1107
1193
|
* each primary `results[]` item carries its join key under a nested
|
|
@@ -1505,6 +1591,90 @@ function buildMulticallSingleShotSearchDrillDownArrayWrappedNumericChainedJoinFi
|
|
|
1505
1591
|
}),
|
|
1506
1592
|
];
|
|
1507
1593
|
}
|
|
1594
|
+
/**
|
|
1595
|
+
* A sibling of
|
|
1596
|
+
* {@link buildMulticallSingleShotSearchDrillDownArrayWrappedNumericChainedJoinFieldActionSteps}
|
|
1597
|
+
* isolating a DIFFERENT gap in the numeric chain-produced join field family:
|
|
1598
|
+
* `r1`'s produced token is a bare (non-array-wrapped) JSON number, and — the
|
|
1599
|
+
* shape that matters here — it is SHORT (`42`/`43`, two digits) rather than
|
|
1600
|
+
* an 8-digit token. `indexStateValues` gates every candidate state value on
|
|
1601
|
+
* `MIN_STATE_VALUE_LENGTH` (8 chars), a threshold sized to keep an unrelated
|
|
1602
|
+
* short STRING (an enum code, a page number) from colliding with arbitrary
|
|
1603
|
+
* substrings elsewhere; applied uniformly to a bare NUMBER's stringified
|
|
1604
|
+
* length, it also silently excludes a short numeric id/token — exactly the
|
|
1605
|
+
* common shape for an order/account/status id — from ever being indexed as
|
|
1606
|
+
* producible state. Without that index entry, `compileActionSteps` never
|
|
1607
|
+
* emits a `produces[]` accessor for `r1`'s response, so `r2`'s templated
|
|
1608
|
+
* body has nothing to substitute and falls back to treating `{"token":...}`
|
|
1609
|
+
* as an opaque caller-supplied payload field (`payload.token`) instead of
|
|
1610
|
+
* the per-item threaded value — every iteration would send whatever (or
|
|
1611
|
+
* nothing) the caller passed, not each primary item's own token.
|
|
1612
|
+
*/
|
|
1613
|
+
function buildMulticallSingleShotSearchDrillDownShortNumericChainedJoinFieldActionSteps() {
|
|
1614
|
+
return [
|
|
1615
|
+
buildStep("r0", {
|
|
1616
|
+
url: CATALOG_SEARCH_URL,
|
|
1617
|
+
requestPostData: '{"page":1}',
|
|
1618
|
+
responseBody: {
|
|
1619
|
+
results: [{ orderId: "order-a" }, { orderId: "order-b" }],
|
|
1620
|
+
},
|
|
1621
|
+
timestamp: "2024-10-04T00:00:00Z",
|
|
1622
|
+
}),
|
|
1623
|
+
buildStep("r1", {
|
|
1624
|
+
url: CATALOG_ORDER_STATUS_URL,
|
|
1625
|
+
requestPostData: '{"orderId":"order-a"}',
|
|
1626
|
+
responseBody: [42],
|
|
1627
|
+
timestamp: "2024-10-04T00:00:01Z",
|
|
1628
|
+
}),
|
|
1629
|
+
buildStep("r2", {
|
|
1630
|
+
url: ORDER_HISTORY_URL,
|
|
1631
|
+
requestPostData: '{"token":42}',
|
|
1632
|
+
responseBody: {
|
|
1633
|
+
entries: [{ token: 42, ts: "2024-10-04T00:00:02Z", event: "shipped" }],
|
|
1634
|
+
},
|
|
1635
|
+
timestamp: "2024-10-04T00:00:02Z",
|
|
1636
|
+
}),
|
|
1637
|
+
];
|
|
1638
|
+
}
|
|
1639
|
+
/**
|
|
1640
|
+
* Cookie-origin sibling of
|
|
1641
|
+
* {@link buildMulticallSingleShotSearchDrillDownShortNumericChainedJoinFieldActionSteps}:
|
|
1642
|
+
* here `r1` mints the short chain-produced token (`tok1`, under
|
|
1643
|
+
* `MIN_STATE_VALUE_LENGTH`) via `Set-Cookie` rather than the response body,
|
|
1644
|
+
* AND echoes the same value in its response body (the "body-level echo" that
|
|
1645
|
+
* lets {@link collectDependentDrillDownChainValues} confirm the cookie value
|
|
1646
|
+
* is chain-produced, exactly as a body-sourced token would be). `r2` threads
|
|
1647
|
+
* `tok1` back via its request body. Exercises `indexStateValues`' Set-Cookie
|
|
1648
|
+
* branch's `chainForceIncludeValues`/`forceIncludeValues` exemption, mirroring
|
|
1649
|
+
* the body-value floor exemption.
|
|
1650
|
+
*/
|
|
1651
|
+
function buildMulticallSingleShotSearchDrillDownShortCookieChainedJoinFieldActionSteps() {
|
|
1652
|
+
return [
|
|
1653
|
+
buildStep("r0", {
|
|
1654
|
+
url: CATALOG_SEARCH_URL,
|
|
1655
|
+
requestPostData: '{"page":1}',
|
|
1656
|
+
responseBody: {
|
|
1657
|
+
results: [{ orderId: "order-a" }, { orderId: "order-b" }],
|
|
1658
|
+
},
|
|
1659
|
+
timestamp: "2024-10-05T00:00:00Z",
|
|
1660
|
+
}),
|
|
1661
|
+
buildStep("r1", {
|
|
1662
|
+
url: CATALOG_ORDER_STATUS_URL,
|
|
1663
|
+
requestPostData: '{"orderId":"order-a"}',
|
|
1664
|
+
responseHeaders: { "set-cookie": "sess=tok1; Path=/; HttpOnly" },
|
|
1665
|
+
responseBody: { echoedToken: "tok1" },
|
|
1666
|
+
timestamp: "2024-10-05T00:00:01Z",
|
|
1667
|
+
}),
|
|
1668
|
+
buildStep("r2", {
|
|
1669
|
+
url: ORDER_HISTORY_URL,
|
|
1670
|
+
requestPostData: '{"token":"tok1"}',
|
|
1671
|
+
responseBody: {
|
|
1672
|
+
entries: [{ token: "tok1", ts: "2024-10-05T00:00:02Z", event: "shipped" }],
|
|
1673
|
+
},
|
|
1674
|
+
timestamp: "2024-10-05T00:00:02Z",
|
|
1675
|
+
}),
|
|
1676
|
+
];
|
|
1677
|
+
}
|
|
1508
1678
|
/**
|
|
1509
1679
|
* A different sibling of the same array-wrapped-join-field failure family:
|
|
1510
1680
|
* here it's the IMMEDIATE drill step (`r1`), not a later chain hop, whose
|
|
@@ -1585,4 +1755,185 @@ function buildMulticallSingleShotSearchDrillDownArrayWrappedNumericImmediateJoin
|
|
|
1585
1755
|
}),
|
|
1586
1756
|
];
|
|
1587
1757
|
}
|
|
1758
|
+
/**
|
|
1759
|
+
* Same array-wrapped-immediate-join-field shape as
|
|
1760
|
+
* {@link buildMulticallSingleShotSearchDrillDownArrayWrappedNumericImmediateJoinFieldActionSteps},
|
|
1761
|
+
* but the primary item's join field is a bare JSON BOOLEAN (`flag: true`)
|
|
1762
|
+
* rather than a number or string. `walkStringLeaves` (used by the spare
|
|
1763
|
+
* check in `applyStructuredValuePayloadSubstitutions`) silently skips
|
|
1764
|
+
* boolean leaves the same way it skips number leaves, so a boolean join
|
|
1765
|
+
* value wrapped in `{"flags":[true]}` was frozen into an opaque
|
|
1766
|
+
* `${JSON.stringify(payload.flags)}` blob instead of being spared for the
|
|
1767
|
+
* fold-loop's later per-item `parameterize` pass.
|
|
1768
|
+
*/
|
|
1769
|
+
function buildMulticallSingleShotSearchDrillDownArrayWrappedBooleanImmediateJoinFieldActionSteps() {
|
|
1770
|
+
return [
|
|
1771
|
+
buildStep("r0", {
|
|
1772
|
+
url: CATALOG_SEARCH_URL,
|
|
1773
|
+
requestPostData: '{"page":1}',
|
|
1774
|
+
responseBody: {
|
|
1775
|
+
results: [{ flag: true }, { flag: false }],
|
|
1776
|
+
},
|
|
1777
|
+
timestamp: "2024-10-03T00:00:00Z",
|
|
1778
|
+
}),
|
|
1779
|
+
buildStep("r1", {
|
|
1780
|
+
url: CATALOG_ORDER_STATUS_URL,
|
|
1781
|
+
requestPostData: '{"flags":[true]}',
|
|
1782
|
+
responseBody: ["status-token-true"],
|
|
1783
|
+
timestamp: "2024-10-03T00:00:01Z",
|
|
1784
|
+
}),
|
|
1785
|
+
buildStep("r2", {
|
|
1786
|
+
url: ORDER_HISTORY_BULK_URL,
|
|
1787
|
+
requestPostData: '{"tokens":["status-token-true"]}',
|
|
1788
|
+
responseBody: {
|
|
1789
|
+
entries: [
|
|
1790
|
+
{ statusToken: "status-token-true", ts: "2024-10-03T00:00:02Z", event: "shipped" },
|
|
1791
|
+
],
|
|
1792
|
+
},
|
|
1793
|
+
timestamp: "2024-10-03T00:00:02Z",
|
|
1794
|
+
}),
|
|
1795
|
+
];
|
|
1796
|
+
}
|
|
1797
|
+
const ACCOUNT_STATUS_URL = "https://api.example.com/accounts/status";
|
|
1798
|
+
const ACCOUNT_TRANSACTIONS_URL = "https://api.example.com/accounts/transactions";
|
|
1799
|
+
/**
|
|
1800
|
+
* A dependent (chained) drill-down whose join key is threaded ONLY through a
|
|
1801
|
+
* request HEADER (`API-Token`) on the chain's ENTRY hop (`r1`) — invisible to
|
|
1802
|
+
* `detectDrillDownFoldPlan`'s structural heuristic exactly like
|
|
1803
|
+
* {@link buildMulticallSingleShotSearchDrillDownHeaderThreadedJoinActionSteps}
|
|
1804
|
+
* — so only a flow-declared `foldReturn` can resolve this fold at all. Unlike
|
|
1805
|
+
* every existing header-threaded-join fixture, though, a site author writing
|
|
1806
|
+
* that `foldReturn` naturally points `endpointPattern` at `r2`
|
|
1807
|
+
* (`/accounts/transactions`) — the call whose OWN response actually carries
|
|
1808
|
+
* the per-item data (`transactions[]`) they want folded — not at `r1`
|
|
1809
|
+
* (`/accounts/status`), the opaque intermediate hop that merely carries the
|
|
1810
|
+
* `accountId`→`API-Token` header thread onward as a `statusToken`. `r2`'s own
|
|
1811
|
+
* request only ever carries that threaded `statusToken`, never `accountId`
|
|
1812
|
+
* in any form (body, URL, or header) — the join key is resolvable only by
|
|
1813
|
+
* walking back to `r1`, exactly the way `computeFoldChain` already walks
|
|
1814
|
+
* FORWARD from a resolved entry hop to a richer terminal. `resultsPath`
|
|
1815
|
+
* anchors on `accounts`, `joinFields` on `accountId`.
|
|
1816
|
+
*/
|
|
1817
|
+
function buildMulticallSingleShotSearchDrillDownHeaderThreadedJoinChainedDependentActionSteps() {
|
|
1818
|
+
return [
|
|
1819
|
+
buildStep("r0", {
|
|
1820
|
+
url: ACCOUNT_SEARCH_URL,
|
|
1821
|
+
requestPostData: JSON.stringify({ page: 1 }),
|
|
1822
|
+
responseBody: {
|
|
1823
|
+
accounts: [
|
|
1824
|
+
{ accountId: 42, name: "Acme" },
|
|
1825
|
+
{ accountId: 43, name: "Globex" },
|
|
1826
|
+
],
|
|
1827
|
+
},
|
|
1828
|
+
timestamp: "2024-08-01T00:00:00Z",
|
|
1829
|
+
}),
|
|
1830
|
+
buildStep("r1", {
|
|
1831
|
+
url: ACCOUNT_STATUS_URL,
|
|
1832
|
+
requestPostData: null,
|
|
1833
|
+
requestHeaders: { "Content-Type": "application/json", "API-Token": "42" },
|
|
1834
|
+
responseBody: { statusToken: "status-token-42" },
|
|
1835
|
+
timestamp: "2024-08-01T00:00:01Z",
|
|
1836
|
+
}),
|
|
1837
|
+
buildStep("r2", {
|
|
1838
|
+
url: ACCOUNT_TRANSACTIONS_URL,
|
|
1839
|
+
requestPostData: JSON.stringify({ statusToken: "status-token-42" }),
|
|
1840
|
+
responseBody: {
|
|
1841
|
+
transactions: [{ statusToken: "status-token-42", transactionId: "t-42", amount: 19.99 }],
|
|
1842
|
+
},
|
|
1843
|
+
timestamp: "2024-08-01T00:00:02Z",
|
|
1844
|
+
}),
|
|
1845
|
+
];
|
|
1846
|
+
}
|
|
1847
|
+
const ORDER_STATUS_LOOKUP_URL = "https://api.example.com/orders/status-lookup";
|
|
1848
|
+
const ORDER_EVENTS_URL = "https://api.example.com/orders/events";
|
|
1849
|
+
/**
|
|
1850
|
+
* A dependent (chained) drill-down whose ENTRY hop (`r1`) is a `GET`
|
|
1851
|
+
* request — not the `POST` every other chained-dependent fixture in this
|
|
1852
|
+
* file uses — and whose response produces the chain's join value
|
|
1853
|
+
* (`statusToken`) as a non-UUID string. `indexStateValues` indexes a `GET`
|
|
1854
|
+
* capture's response leaves ONLY when they are UUID-shaped
|
|
1855
|
+
* (`isGet && !UUID_REGEX.test(value)` skips everything else, a filter aimed
|
|
1856
|
+
* at excluding noisy short non-UUID strings a GET-only telemetry/schema
|
|
1857
|
+
* fetch surfaces); that filter runs unconditionally, with no exemption for a
|
|
1858
|
+
* value `collectDependentDrillDownChainValues` has already confirmed is
|
|
1859
|
+
* threaded from this exact hop into a later chain hop's own request — unlike
|
|
1860
|
+
* the `MIN_STATE_VALUE_LENGTH` floor a few lines above it, which DOES carry
|
|
1861
|
+
* that exemption. So a chain-produced token minted by a GET response is
|
|
1862
|
+
* never indexed as producible state at all, `compileActionSteps` never
|
|
1863
|
+
* emits a `produces[]` accessor for it, and `r2`'s templated body has
|
|
1864
|
+
* nothing to substitute — every iteration renders the literal string
|
|
1865
|
+
* `"undefined"` instead of threading each primary item's own token.
|
|
1866
|
+
*/
|
|
1867
|
+
function buildMulticallSingleShotSearchDrillDownGetEntryHopChainedDependentActionSteps() {
|
|
1868
|
+
return [
|
|
1869
|
+
buildStep("r0", {
|
|
1870
|
+
url: CATALOG_SEARCH_URL,
|
|
1871
|
+
requestPostData: '{"page":1}',
|
|
1872
|
+
responseBody: {
|
|
1873
|
+
results: [{ orderId: "order-a" }, { orderId: "order-b" }],
|
|
1874
|
+
},
|
|
1875
|
+
timestamp: "2024-10-05T00:00:00Z",
|
|
1876
|
+
}),
|
|
1877
|
+
buildStep("r1", {
|
|
1878
|
+
method: "GET",
|
|
1879
|
+
url: `${ORDER_STATUS_LOOKUP_URL}?orderId=order-a`,
|
|
1880
|
+
requestPostData: null,
|
|
1881
|
+
responseBody: { statusToken: "status-token-order-a" },
|
|
1882
|
+
timestamp: "2024-10-05T00:00:01Z",
|
|
1883
|
+
}),
|
|
1884
|
+
buildStep("r2", {
|
|
1885
|
+
url: ORDER_EVENTS_URL,
|
|
1886
|
+
requestPostData: '{"token":"status-token-order-a"}',
|
|
1887
|
+
responseBody: {
|
|
1888
|
+
entries: [{ token: "status-token-order-a", ts: "2024-10-05T00:00:02Z", event: "shipped" }],
|
|
1889
|
+
},
|
|
1890
|
+
timestamp: "2024-10-05T00:00:02Z",
|
|
1891
|
+
}),
|
|
1892
|
+
];
|
|
1893
|
+
}
|
|
1894
|
+
/**
|
|
1895
|
+
* A response-header sibling of {@link buildMulticallSingleShotSearchDrillDownGetEntryHopChainedDependentActionSteps}:
|
|
1896
|
+
* the chain's drill hop (`r1`) mints its join token (`tok-a1`) ONLY in a
|
|
1897
|
+
* custom response HEADER (`X-Price-Token`) — its body is empty ({}), unlike
|
|
1898
|
+
* {@link buildMulticallSingleShotSearchDrillDownHeaderMintedChainedResponseValueActionSteps}'s
|
|
1899
|
+
* body-echo-free sibling, which threads the header value forward via the
|
|
1900
|
+
* request BODY. Here the terminal hop (`r2`) instead threads that value back
|
|
1901
|
+
* as a REQUEST HEADER of its own (also named `X-Price-Token`) — the only
|
|
1902
|
+
* shape `createHttpClient`'s `bind` option can actually thread a
|
|
1903
|
+
* header-origin value into, since the emitted response variable never
|
|
1904
|
+
* exposes response headers to the rest of the generated code. Exercises
|
|
1905
|
+
* `compileActionSteps`' non-cookie response-header produce block: without it,
|
|
1906
|
+
* `tok-a1` is never captured into a `produces[]`/`bind` entry at all, and
|
|
1907
|
+
* `r2`'s per-item call goes out with no `X-Price-Token` header, so the
|
|
1908
|
+
* terminal `history[]` fold silently collapses to whichever primary item the
|
|
1909
|
+
* stub happens to answer first instead of each item's own token.
|
|
1910
|
+
*/
|
|
1911
|
+
function buildMulticallSingleShotSearchDrillDownResponseHeaderThreadedJoinChainedDependentActionSteps() {
|
|
1912
|
+
return [
|
|
1913
|
+
buildStep("r0", {
|
|
1914
|
+
url: CATALOG_SEARCH_URL,
|
|
1915
|
+
requestPostData: '{"page":1}',
|
|
1916
|
+
responseBody: {
|
|
1917
|
+
results: [{ sku: "sku-a" }, { sku: "sku-b" }],
|
|
1918
|
+
},
|
|
1919
|
+
timestamp: "2024-12-10T00:00:00Z",
|
|
1920
|
+
}),
|
|
1921
|
+
buildStep("r1", {
|
|
1922
|
+
url: CATALOG_PRICING_URL,
|
|
1923
|
+
requestPostData: '{"sku":"sku-a"}',
|
|
1924
|
+
responseBody: {},
|
|
1925
|
+
responseHeaders: { "content-type": "application/json", "X-Price-Token": "tok-a1" },
|
|
1926
|
+
timestamp: "2024-12-10T00:00:01Z",
|
|
1927
|
+
}),
|
|
1928
|
+
buildStep("r2", {
|
|
1929
|
+
url: CATALOG_PRICE_HISTORY_URL,
|
|
1930
|
+
requestPostData: "{}",
|
|
1931
|
+
requestHeaders: { "Content-Type": "application/json", "X-Price-Token": "tok-a1" },
|
|
1932
|
+
responseBody: {
|
|
1933
|
+
history: [{ sku: "sku-a", amount: 18.5, asOf: "2024-11-01" }],
|
|
1934
|
+
},
|
|
1935
|
+
timestamp: "2024-12-10T00:00:02Z",
|
|
1936
|
+
}),
|
|
1937
|
+
];
|
|
1938
|
+
}
|
|
1588
1939
|
//# sourceMappingURL=recon-generate-multicall-fixture.js.map
|