@agent-cards/sdk 0.24.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +61 -4
  3. package/dist/adyen-merchant-hosted.generated.d.ts +1 -1
  4. package/dist/adyen-merchant-hosted.generated.js +128 -35
  5. package/dist/agent-amount.generated.js +1 -1
  6. package/dist/aurus.d.ts +33 -0
  7. package/dist/aurus.js +75 -0
  8. package/dist/builtin-registry.generated.js +1 -1
  9. package/dist/capabilities.generated.js +1 -1
  10. package/dist/card-fields.generated.js +1756 -433
  11. package/dist/cardlink-vpos.d.ts +43 -0
  12. package/dist/cardlink-vpos.js +90 -0
  13. package/dist/cdp.js +13 -0
  14. package/dist/checkout-com.generated.js +5 -1
  15. package/dist/client.d.ts +66 -0
  16. package/dist/client.js +66 -0
  17. package/dist/cybersource-flex.generated.d.ts +39 -1
  18. package/dist/cybersource-flex.generated.js +100 -11
  19. package/dist/eghl.d.ts +40 -0
  20. package/dist/eghl.js +72 -0
  21. package/dist/gmo.generated.js +7 -2
  22. package/dist/hosted-entry.js +2 -0
  23. package/dist/paddle-tokenex.generated.js +7 -2
  24. package/dist/payrails.generated.js +7 -2
  25. package/dist/pre-claim.d.ts +2 -0
  26. package/dist/pre-claim.js +46 -2
  27. package/dist/preflight-catalog.json +154 -1
  28. package/dist/preflight-schemas.json +14 -0
  29. package/dist/preflight.generated.d.ts +5 -0
  30. package/dist/preflight.generated.js +40 -3
  31. package/dist/preparation.d.ts +7 -0
  32. package/dist/preparation.js +21 -0
  33. package/dist/primer.generated.js +1778 -455
  34. package/dist/shiji-sts.generated.js +7 -2
  35. package/dist/stripe-checkout.generated.js +1741 -470
  36. package/dist/substitutions.generated.js +94 -1
  37. package/dist/tap-payments.generated.js +7 -2
  38. package/dist/twoc2p.generated.js +7 -2
  39. package/examples/preflight/kernel-native/inventory.json +1 -1
  40. package/package.json +2 -2
package/dist/eghl.d.ts ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * eGHL's hosted payment page (securepay.e-ghl.com, the Malaysian gateway now sold as ADAPTIS, behind its own Shopify app
3
+ * among others), as this SDK reads it.
4
+ *
5
+ * The merchant's checkout sends the buyer's browser to https://securepay.e-ghl.com/IPG/payment.aspx with the payment in
6
+ * the query: a GET that carries no card, and the one request a build that declares eGHL's capability pauses
7
+ * (hosted-entry.ts). The cardholder's device repeats it over the end-to-end TLS relay and pays on the card page eGHL
8
+ * returns to it (payment-core processors/eghl.js). Every step toward paying on that page is a POST to eGHL's hosts, the
9
+ * card page's card post to the entry's own address among them, so this SDK aborts every POST there once the lane is
10
+ * served, and no placeholder card reaches eGHL.
11
+ *
12
+ * EGHL_HOST is payment-core's EGHL_HOST, and isEghlEntryUrl is payment-core's isEghlEntryUrl; eghl.test.mjs pins both
13
+ * to payment-core.
14
+ */
15
+ export declare const EGHL_PSP = "eghl";
16
+ /** The dark-launch capability the API serves eGHL's recognizer behind (payment-core processors/eghl.js). */
17
+ export declare const EGHL_CAPABILITY = "eghl_hosted_payment_page";
18
+ /** eGHL's live host, and its test platform's. */
19
+ export declare const EGHL_HOST = "securepay.e-ghl.com";
20
+ export declare const EGHL_SANDBOX_HOST = "test2pay.ghl.com";
21
+ /**
22
+ * Whether a URL is an entry as a browser sends it: https, eGHL's live host with its entry path or its test host with its
23
+ * test path, the path in any letter case as IIS reads it, the default port, no credentials, no fragment, and a query
24
+ * that names the payment. Any other request to eGHL's hosts is not the entry.
25
+ */
26
+ export declare function isEghlEntryUrl(raw: unknown): boolean;
27
+ /**
28
+ * Whether a request on eGHL's hosts is a step toward paying there: any POST, the card page's card post and its Click to
29
+ * Pay post among them. The entry, the page's scripts and its images are GETs and are not one.
30
+ */
31
+ export declare function isEghlPayStep(url: string, method: string): boolean;
32
+ /**
33
+ * Whether an adapter must hand this request to the pre-claim gates: it is on eGHL's hosts and this build's registry
34
+ * serves eGHL's entry. The page's posts are not the entry, so the registry's card-request test does not name them; the
35
+ * CDP adapter still pauses them through the recognizer's host patterns, and attachToPlaywright's route predicate asks
36
+ * this, so both adapters show the gates every request to eGHL's hosts once the lane is armed.
37
+ */
38
+ export declare function isArmedEghlUrl(vault: {
39
+ isCardRequest(url: string, method?: string): boolean;
40
+ } | undefined, url: string): boolean;
package/dist/eghl.js ADDED
@@ -0,0 +1,72 @@
1
+ /**
2
+ * eGHL's hosted payment page (securepay.e-ghl.com, the Malaysian gateway now sold as ADAPTIS, behind its own Shopify app
3
+ * among others), as this SDK reads it.
4
+ *
5
+ * The merchant's checkout sends the buyer's browser to https://securepay.e-ghl.com/IPG/payment.aspx with the payment in
6
+ * the query: a GET that carries no card, and the one request a build that declares eGHL's capability pauses
7
+ * (hosted-entry.ts). The cardholder's device repeats it over the end-to-end TLS relay and pays on the card page eGHL
8
+ * returns to it (payment-core processors/eghl.js). Every step toward paying on that page is a POST to eGHL's hosts, the
9
+ * card page's card post to the entry's own address among them, so this SDK aborts every POST there once the lane is
10
+ * served, and no placeholder card reaches eGHL.
11
+ *
12
+ * EGHL_HOST is payment-core's EGHL_HOST, and isEghlEntryUrl is payment-core's isEghlEntryUrl; eghl.test.mjs pins both
13
+ * to payment-core.
14
+ */
15
+ export const EGHL_PSP = 'eghl';
16
+ /** The dark-launch capability the API serves eGHL's recognizer behind (payment-core processors/eghl.js). */
17
+ export const EGHL_CAPABILITY = 'eghl_hosted_payment_page';
18
+ /** eGHL's live host, and its test platform's. */
19
+ export const EGHL_HOST = 'securepay.e-ghl.com';
20
+ export const EGHL_SANDBOX_HOST = 'test2pay.ghl.com';
21
+ const LIVE_PATH = '/ipg/payment.aspx';
22
+ const SANDBOX_PATH = '/ipgsg/payment.aspx';
23
+ // An entry of that shape, for asking whether this build's registry serves the entry.
24
+ const PROBE = 'https://securepay.e-ghl.com/IPG/payment.aspx?TransactionType=SALE';
25
+ /**
26
+ * Whether a URL is an entry as a browser sends it: https, eGHL's live host with its entry path or its test host with its
27
+ * test path, the path in any letter case as IIS reads it, the default port, no credentials, no fragment, and a query
28
+ * that names the payment. Any other request to eGHL's hosts is not the entry.
29
+ */
30
+ export function isEghlEntryUrl(raw) {
31
+ if (typeof raw !== 'string' || raw.length > 8192 || raw.includes('#'))
32
+ return false;
33
+ let url;
34
+ try {
35
+ url = new URL(raw);
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ if (url.href !== raw || url.protocol !== 'https:' || url.port || url.username || url.password || url.search.length < 2)
41
+ return false;
42
+ const path = url.pathname.toLowerCase();
43
+ return (url.hostname === EGHL_HOST && path === LIVE_PATH) || (url.hostname === EGHL_SANDBOX_HOST && path === SANDBOX_PATH);
44
+ }
45
+ /** Whether a URL is on one of eGHL's hosts, live or test: https, no credentials, any port, any case, a trailing dot or not. */
46
+ function onEghlHost(raw) {
47
+ let url;
48
+ try {
49
+ url = new URL(raw);
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ const host = url.hostname.toLowerCase().replace(/\.$/, '');
55
+ return url.protocol === 'https:' && !url.username && !url.password && (host === EGHL_HOST || host === EGHL_SANDBOX_HOST);
56
+ }
57
+ /**
58
+ * Whether a request on eGHL's hosts is a step toward paying there: any POST, the card page's card post and its Click to
59
+ * Pay post among them. The entry, the page's scripts and its images are GETs and are not one.
60
+ */
61
+ export function isEghlPayStep(url, method) {
62
+ return onEghlHost(url) && String(method).toUpperCase() === 'POST';
63
+ }
64
+ /**
65
+ * Whether an adapter must hand this request to the pre-claim gates: it is on eGHL's hosts and this build's registry
66
+ * serves eGHL's entry. The page's posts are not the entry, so the registry's card-request test does not name them; the
67
+ * CDP adapter still pauses them through the recognizer's host patterns, and attachToPlaywright's route predicate asks
68
+ * this, so both adapters show the gates every request to eGHL's hosts once the lane is armed.
69
+ */
70
+ export function isArmedEghlUrl(vault, url) {
71
+ return onEghlHost(url) && typeof vault?.isCardRequest === 'function' && vault.isCardRequest(PROBE, 'GET');
72
+ }
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  // Generated from @agent-cards/payment-core. Do not edit.
3
- // artifact-sha256: a65199bcbf0b67546130fb4f2c12ba72c8f51a2ff5b4e3054e2bfcc29b06f95d
3
+ // artifact-sha256: 192df19d53f4c68d74db3d692397b94f4a1b45ce8bee44a2326e01b56a329adf
4
4
  // src/sha256.js
5
5
  var K = /* @__PURE__ */ new Uint32Array([
6
6
  1116352408,
@@ -146,6 +146,7 @@ var BASE64 = /^[A-Za-z0-9+/]+={0,2}$/;
146
146
  var SHA256_HEX = /^[0-9a-f]{64}$/;
147
147
  var RSA_ALGORITHM = [48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0];
148
148
  var MODULUS_BYTES = [128, 256, 384, 512];
149
+ var SMALL_MODULUS_BYTES = 64;
149
150
  var MIN_PADDING = 8;
150
151
  var MAX_DRAWS = 16;
151
152
  var TYPED_ARRAY = Object.getPrototypeOf(Uint8Array.prototype);
@@ -156,6 +157,9 @@ function parseRsaPublicKey(key) {
156
157
  const named = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "exponent") ? key.exponent : void 0;
157
158
  if (named !== void 0 && named !== 17)
158
159
  throw refuse("key");
160
+ const sized = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "bits") ? key.bits : void 0;
161
+ if (sized !== void 0 && sized !== 512)
162
+ throw refuse("key");
159
163
  if (typeof spki !== "string" || spki.length > 1024 || spki.length % 4 !== 0 || !BASE64.test(spki))
160
164
  throw refuse("key");
161
165
  if (typeof pin !== "string" || !SHA256_HEX.test(pin))
@@ -188,7 +192,8 @@ function parseRsaPublicKey(key) {
188
192
  if (exponent.end !== rsa.end)
189
193
  throw refuse("key");
190
194
  const n = modulus.bytes;
191
- if (!MODULUS_BYTES.includes(n.length) || !(n[0] & 128) || !(n[n.length - 1] & 1))
195
+ const sizes = sized === 512 ? [SMALL_MODULUS_BYTES] : MODULUS_BYTES;
196
+ if (!sizes.includes(n.length) || !(n[0] & 128) || !(n[n.length - 1] & 1))
192
197
  throw refuse("key");
193
198
  const e = exponent.bytes;
194
199
  const expected = named === 17 ? [17] : [1, 0, 1];
@@ -19,12 +19,14 @@ import { COMGATE_PSP, isComgateEntryUrl } from './comgate.js';
19
19
  import { TRANSBANK_PSP, isTransbankEntryUrl } from './transbank.js';
20
20
  import { BARION_PSP, isBarionEntryUrl } from './barion.js';
21
21
  import { PAYPLUG_PSP, isPayplugEntryUrl } from './payplug.js';
22
+ import { EGHL_PSP, isEghlEntryUrl } from './eghl.js';
22
23
  const HOSTED_GET_ENTRIES = new Map([
23
24
  [PRZELEWY24_PSP, isPrzelewy24EntryUrl],
24
25
  [COMGATE_PSP, isComgateEntryUrl],
25
26
  [TRANSBANK_PSP, isTransbankEntryUrl],
26
27
  [BARION_PSP, isBarionEntryUrl],
27
28
  [PAYPLUG_PSP, isPayplugEntryUrl],
29
+ [EGHL_PSP, isEghlEntryUrl],
28
30
  ]);
29
31
  /** Whether this processor's hosted page is entered with a GET this build reads exactly. */
30
32
  export function hasHostedGetEntry(psp) {
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  // Generated from @agent-cards/payment-core. Do not edit.
3
- // artifact-sha256: 4b24c682dbd8cd7bbaa0157f2932021d71f7c6802ce3814c6f3047173df29911
3
+ // artifact-sha256: 0bd60e76821ed0f63235a99cc37dece9f0db8afef89492a0a7930fb49f80eb18
4
4
  // src/sha256.js
5
5
  var K = /* @__PURE__ */ new Uint32Array([
6
6
  1116352408,
@@ -146,6 +146,7 @@ var BASE64 = /^[A-Za-z0-9+/]+={0,2}$/;
146
146
  var SHA256_HEX = /^[0-9a-f]{64}$/;
147
147
  var RSA_ALGORITHM = [48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0];
148
148
  var MODULUS_BYTES = [128, 256, 384, 512];
149
+ var SMALL_MODULUS_BYTES = 64;
149
150
  var MIN_PADDING = 8;
150
151
  var MAX_DRAWS = 16;
151
152
  var TYPED_ARRAY = Object.getPrototypeOf(Uint8Array.prototype);
@@ -156,6 +157,9 @@ function parseRsaPublicKey(key) {
156
157
  const named = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "exponent") ? key.exponent : void 0;
157
158
  if (named !== void 0 && named !== 17)
158
159
  throw refuse("key");
160
+ const sized = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "bits") ? key.bits : void 0;
161
+ if (sized !== void 0 && sized !== 512)
162
+ throw refuse("key");
159
163
  if (typeof spki !== "string" || spki.length > 1024 || spki.length % 4 !== 0 || !BASE64.test(spki))
160
164
  throw refuse("key");
161
165
  if (typeof pin2 !== "string" || !SHA256_HEX.test(pin2))
@@ -188,7 +192,8 @@ function parseRsaPublicKey(key) {
188
192
  if (exponent.end !== rsa.end)
189
193
  throw refuse("key");
190
194
  const n = modulus.bytes;
191
- if (!MODULUS_BYTES.includes(n.length) || !(n[0] & 128) || !(n[n.length - 1] & 1))
195
+ const sizes = sized === 512 ? [SMALL_MODULUS_BYTES] : MODULUS_BYTES;
196
+ if (!sizes.includes(n.length) || !(n[0] & 128) || !(n[n.length - 1] & 1))
192
197
  throw refuse("key");
193
198
  const e = exponent.bytes;
194
199
  const expected = named === 17 ? [17] : [1, 0, 1];
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  // Generated from @agent-cards/payment-core. Do not edit.
3
- // artifact-sha256: 139d0001a168e053ebe3283721905ae95d7c159a25848469965f037b844a44cf
3
+ // artifact-sha256: d6d50b6577a932c3586fcade6b8cbd03c562bd3394e8addcb954d797ea9999b4
4
4
  // src/json-path.js
5
5
  function roundTrips(parsed, body) {
6
6
  try {
@@ -174,6 +174,7 @@ var BASE64 = /^[A-Za-z0-9+/]+={0,2}$/;
174
174
  var SHA256_HEX = /^[0-9a-f]{64}$/;
175
175
  var RSA_ALGORITHM = [48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0];
176
176
  var MODULUS_BYTES = [128, 256, 384, 512];
177
+ var SMALL_MODULUS_BYTES = 64;
177
178
  var TYPED_ARRAY = Object.getPrototypeOf(Uint8Array.prototype);
178
179
  var typedArrayName = Object.getOwnPropertyDescriptor(TYPED_ARRAY, Symbol.toStringTag).get;
179
180
  function parseRsaPublicKey(key) {
@@ -182,6 +183,9 @@ function parseRsaPublicKey(key) {
182
183
  const named = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "exponent") ? key.exponent : void 0;
183
184
  if (named !== void 0 && named !== 17)
184
185
  throw refuse("key");
186
+ const sized = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "bits") ? key.bits : void 0;
187
+ if (sized !== void 0 && sized !== 512)
188
+ throw refuse("key");
185
189
  if (typeof spki !== "string" || spki.length > 1024 || spki.length % 4 !== 0 || !BASE64.test(spki))
186
190
  throw refuse("key");
187
191
  if (typeof pin !== "string" || !SHA256_HEX.test(pin))
@@ -214,7 +218,8 @@ function parseRsaPublicKey(key) {
214
218
  if (exponent.end !== rsa.end)
215
219
  throw refuse("key");
216
220
  const n = modulus.bytes;
217
- if (!MODULUS_BYTES.includes(n.length) || !(n[0] & 128) || !(n[n.length - 1] & 1))
221
+ const sizes = sized === 512 ? [SMALL_MODULUS_BYTES] : MODULUS_BYTES;
222
+ if (!sizes.includes(n.length) || !(n[0] & 128) || !(n[n.length - 1] & 1))
218
223
  throw refuse("key");
219
224
  const e = exponent.bytes;
220
225
  const expected = named === 17 ? [17] : [1, 0, 1];
@@ -288,6 +288,8 @@ export declare function isArmedCreditguardCall(vault: {
288
288
  export declare const przelewy24PreClaim: PreClaimGate;
289
289
  export declare const barionPreClaim: PreClaimGate;
290
290
  export declare const payplugPreClaim: PreClaimGate;
291
+ export declare const eghlPreClaim: PreClaimGate;
292
+ export declare const cardlinkVposPreClaim: PreClaimGate;
291
293
  export declare const ekashuPreClaim: PreClaimGate;
292
294
  export declare const transbankPreClaim: PreClaimGate;
293
295
  export declare const paytrailPreClaim: PreClaimGate;
package/dist/pre-claim.js CHANGED
@@ -88,10 +88,13 @@ import { isRedsysEntry, isRedsysHost, redsysEntryUrl } from './redsys.js';
88
88
  import { isArmedPrzelewy24Url, isPrzelewy24PayStep } from './przelewy24.js';
89
89
  import { isArmedBarionUrl, isBarionPayStep } from './barion.js';
90
90
  import { isArmedPayplugUrl, isPayplugPayStep } from './payplug.js';
91
+ import { isArmedCardlinkVposUrl, isCardlinkVposEntry } from './cardlink-vpos.js';
92
+ import { isArmedEghlUrl, isEghlPayStep } from './eghl.js';
91
93
  import { isQuickpayCardLookup, isQuickpayEntry, quickpayEntryUrl } from './quickpay.js';
92
94
  import { isArmedComgateUrl } from './comgate.js';
93
95
  import { isArmedEximbayUrl, isEximbayEntry } from './eximbay.js';
94
96
  import { isArmedOceanpaymentUrl, isOceanpaymentSendPay } from './oceanpayment.js';
97
+ import { aurusPreClaim } from './aurus.js';
95
98
  import { PAYPAL_HOSTED_FIELDS_REASON, isPaypalHostedFieldsConfirm, paypalHostedFieldsBody } from './paypal-hosted-fields.js';
96
99
  import { PAYPAL_CARD_FIELDS_REASON, PAYPAL_GUEST_CHECKOUT_REASON, isPaypalCardFieldsConfirm, isPaypalGraphql, paypalCardFieldsBody, paypalGraphqlCard, paypalGraphqlNamesCardOperation, } from './paypal-card-forms.js';
97
100
  import { CYBERSOURCE_SECURE_ACCEPTANCE_REASON, CYBERSOURCE_SECURE_ACCEPTANCE_RECIPIENT, cybersourceSecureAcceptanceRequest, isCybersourceSecureAcceptanceUrl, isSecureAcceptanceFramePost, } from './cybersource-secure-acceptance.js';
@@ -1743,6 +1746,47 @@ export const payplugPreClaim = (ctx) => {
1743
1746
  return undefined;
1744
1747
  return processorPageAbort(ctx);
1745
1748
  };
1749
+ // eGHL's payment page (eghl.ts). Once this build's registry serves eGHL's entry (a capability the API serves only to
1750
+ // Agentcard's own company), every request to eGHL's hosts pauses. The merchant's entry, a GET of /IPG/payment.aspx whose
1751
+ // query names the payment, is no step of this gate's: it defers, and the terminal arbiter pauses it for the claim flow
1752
+ // like any card request, so the cardholder's device pays it. Every step toward paying on the page itself aborts as an
1753
+ // unsupported checkout: every POST to eGHL's hosts, the card page's card post to the entry's own address among them. So
1754
+ // eGHL never sees the card the agent typed. The page's own GETs continue. With eGHL not served, the gate defers, and
1755
+ // every request continues as before. Synchronous until it must abort, like every gate. Exported for the gate registry's
1756
+ // tests.
1757
+ export const eghlPreClaim = (ctx) => {
1758
+ const { url, method } = ctx.request;
1759
+ if (!isEghlPayStep(url, method) || !isArmedEghlUrl(ctx.vault, url))
1760
+ return undefined;
1761
+ return processorPageAbort(ctx);
1762
+ };
1763
+ // Cardlink's VPOS (cardlink-vpos.ts). Once this build's registry serves the entry (a capability the API serves only to
1764
+ // Agentcard's own company), every request to the VPOS's hosts pauses, and this gate judges the POSTs:
1765
+ // - the merchant's entry, an entry body posted to /vpos/shophandlermpi on one of the three live hosts, defers, and the
1766
+ // terminal arbiter pauses it for the claim flow like any card request: the cardholder's device pays it;
1767
+ // - every other POST (the card page's post and its card check, which share the entry's URL and carry the page's own
1768
+ // fields, a body the adapter could not read, and anything on Cardlink's test hosts) aborts as an unsupported
1769
+ // checkout, so the VPOS never sees the card the agent typed.
1770
+ // A GET (the card page's script, its status poll) is not this gate's and continues. With the lane not served, the gate
1771
+ // defers, and every request continues as before. Synchronous until it must abort, like every gate. Exported for the gate
1772
+ // registry's tests.
1773
+ export const cardlinkVposPreClaim = (ctx) => {
1774
+ const { url, method } = ctx.request;
1775
+ if (String(method).toUpperCase() !== 'POST' || !isArmedCardlinkVposUrl(ctx.vault, url))
1776
+ return undefined;
1777
+ // The body is a getter an adapter can fail in (Playwright's postData() throws on a body it cannot decode): a body that
1778
+ // cannot be read is no entry this gate can tell from a card post, so it fails closed, aborted and reported like one.
1779
+ let body;
1780
+ try {
1781
+ body = ctx.request.body;
1782
+ }
1783
+ catch {
1784
+ return processorPageAbort(ctx);
1785
+ }
1786
+ if (isCardlinkVposEntry(url, method, body))
1787
+ return undefined;
1788
+ return processorPageAbort(ctx);
1789
+ };
1746
1790
  // NMI's hosted payment page (ekashu.ts). Once this build's registry serves NMI's entry (a
1747
1791
  // capability the API serves only to a company Agentcard turned NMI on for), every request to
1748
1792
  // NMI's two hosts pauses, and this gate judges the POSTs:
@@ -2577,9 +2621,9 @@ async function unsupportedContinue(ctx) {
2577
2621
  * arbiter runs after all of them and is not part of this list. A gate appended
2578
2622
  * after Stripe is never offered a step Stripe claimed: Stripe answers, aborts or
2579
2623
  * pauses each one itself. */
2580
- export const PSP_PRE_CLAIM_GATES = [cardEndpointResendPreClaim, cardEndpointPreClaim, nikeOrderPreClaim, mercadoPreClaim, juspayPreClaim, braintreePreClaim, stripePreClaim, merchantHostedPreClaim, verifonePreClaim, fiservPreClaim, gmoPreClaim, cybersourceFlexPreClaim, datatransPreClaim, tokenexIframePreClaim, pelecardPreClaim, aciPreClaim, creditguardPreClaim, primerPreClaim, payrailsPreClaim, convergePreClaim, eprotectPreClaim, sbpsPreClaim, wspayPreClaim, shijiStsPreClaim, ekashuPreClaim, redsysPreClaim, quickpayPreClaim, comgatePreClaim, przelewy24PreClaim, transbankPreClaim, eximbayPreClaim, barionPreClaim, payplugPreClaim, paypalHostedFieldsPreClaim,
2624
+ export const PSP_PRE_CLAIM_GATES = [cardEndpointResendPreClaim, cardEndpointPreClaim, nikeOrderPreClaim, mercadoPreClaim, juspayPreClaim, braintreePreClaim, stripePreClaim, merchantHostedPreClaim, verifonePreClaim, fiservPreClaim, gmoPreClaim, cybersourceFlexPreClaim, datatransPreClaim, tokenexIframePreClaim, pelecardPreClaim, aciPreClaim, creditguardPreClaim, primerPreClaim, payrailsPreClaim, convergePreClaim, eprotectPreClaim, sbpsPreClaim, wspayPreClaim, shijiStsPreClaim, ekashuPreClaim, redsysPreClaim, quickpayPreClaim, comgatePreClaim, przelewy24PreClaim, transbankPreClaim, eximbayPreClaim, barionPreClaim, payplugPreClaim, cardlinkVposPreClaim, eghlPreClaim, paypalHostedFieldsPreClaim,
2581
2625
  paypalCardFormsPreClaim, cybersourceSecureAcceptancePreClaim, worldlineMyCheckoutPreClaim, paddleVgsPayPreClaim, ebanxPreClaim, payrexxPreClaim, hipayPreClaim, paytrailPreClaim,
2582
- oceanpaymentPreClaim];
2626
+ oceanpaymentPreClaim, aurusPreClaim];
2583
2627
  /** Run each gate in order; the first to return a decision wins. If none does,
2584
2628
  * the terminal arbiter decides between continue, abort (unsupported) and pause.
2585
2629
  * Returns synchronously while every gate defers synchronously (an ordinary card
@@ -211,7 +211,26 @@
211
211
  "origin": "https://js.braintreegateway.com",
212
212
  "path_pattern": "/web/:version/js/*",
213
213
  "hostname_pattern": "^js\\.braintreegateway\\.com$",
214
- "pathname_pattern": "^\\/web\\/(?![^/]*-payments-sdk)[^/]+\\/js\\/",
214
+ "pathname_pattern": "^\\/web\\/(?![^/]*-payments-sdk)[^/]+\\/js\\/(?!(?:client|paypal|paypal-checkout|venmo|apple-pay|google-payment|data-collector|local-payment)(?:\\.min)?\\.js$)",
215
+ "sources": [
216
+ {
217
+ "kind": "official_documentation",
218
+ "reference": "https://developer.paypal.com/braintree/docs/start/hello-client/javascript/v3/",
219
+ "reviewed_on": "2026-09-11"
220
+ }
221
+ ]
222
+ },
223
+ {
224
+ "id": "braintree-web-wallet",
225
+ "psp": "braintree",
226
+ "kinds": [
227
+ "script"
228
+ ],
229
+ "origin": "https://js.braintreegateway.com",
230
+ "path_pattern": "/web/:version/js/{client,paypal,paypal-checkout,venmo,apple-pay,google-payment,data-collector,local-payment}[.min].js",
231
+ "card_free": "braintree-web's client, wallet and fraud components collect no card; Hosted Fields and Drop-in do.",
232
+ "hostname_pattern": "^js\\.braintreegateway\\.com$",
233
+ "pathname_pattern": "^\\/web\\/(?![^/]*-payments-sdk)[^/]+\\/js\\/(?:client|paypal|paypal-checkout|venmo|apple-pay|google-payment|data-collector|local-payment)(?:\\.min)?\\.js$",
215
234
  "sources": [
216
235
  {
217
236
  "kind": "official_documentation",
@@ -2566,6 +2585,92 @@
2566
2585
  "hostname_pattern": "^flex\\.cybersource\\.com$",
2567
2586
  "pathname_pattern": "^\\/microform\\/bundle\\/v2\\.[0-9]+\\.[0-9]+\\/iframe\\.html$"
2568
2587
  },
2588
+ {
2589
+ "id": "cybersource-unified-checkout-script",
2590
+ "psp": "cybersource_flex",
2591
+ "kinds": [
2592
+ "script"
2593
+ ],
2594
+ "origin": "https://up.cybersource.com",
2595
+ "path_pattern": "/uc/v1/assets/:asset/UnifiedCheckout.js",
2596
+ "sources": [
2597
+ {
2598
+ "kind": "saved_observation",
2599
+ "reference": "napaonline-2026-10-31:unified-checkout-v1.8.2-mce-orc-ga-frames",
2600
+ "reviewed_on": "2026-10-31"
2601
+ },
2602
+ {
2603
+ "kind": "official_documentation",
2604
+ "reference": "https://developer.cybersource.com/docs/cybs/en-us/unified-checkout/developer/all/rest/unified-checkout/uc-intro.html",
2605
+ "reviewed_on": "2026-10-31"
2606
+ }
2607
+ ],
2608
+ "hostname_pattern": "^up\\.cybersource\\.com$",
2609
+ "pathname_pattern": "^\\/uc\\/v1\\/assets\\/[A-Za-z0-9_-]{16,1024}\\/UnifiedCheckout\\.js$"
2610
+ },
2611
+ {
2612
+ "id": "cybersource-unified-checkout-frame",
2613
+ "psp": "cybersource_flex",
2614
+ "kinds": [
2615
+ "frame",
2616
+ "iframe",
2617
+ "document"
2618
+ ],
2619
+ "origin": "https://up.cybersource.com",
2620
+ "path_pattern": "/uc/v1/assets/:asset/{mce,orc,ga}/*.html",
2621
+ "sources": [
2622
+ {
2623
+ "kind": "saved_observation",
2624
+ "reference": "napaonline-2026-10-31:unified-checkout-v1.8.2-mce-orc-ga-frames",
2625
+ "reviewed_on": "2026-10-31"
2626
+ },
2627
+ {
2628
+ "kind": "official_documentation",
2629
+ "reference": "https://developer.cybersource.com/docs/cybs/en-us/unified-checkout/developer/all/rest/unified-checkout/uc-intro.html",
2630
+ "reviewed_on": "2026-10-31"
2631
+ }
2632
+ ],
2633
+ "hostname_pattern": "^up\\.cybersource\\.com$",
2634
+ "pathname_pattern": "^\\/uc\\/v1\\/assets\\/[A-Za-z0-9_-]{16,1024}\\/(?:mce\\/mce|orc\\/orc|ga\\/ga)\\.html$"
2635
+ },
2636
+ {
2637
+ "id": "aurus-ecom-iframe",
2638
+ "psp": "aurus",
2639
+ "kinds": [
2640
+ "frame",
2641
+ "iframe",
2642
+ "document"
2643
+ ],
2644
+ "origin": "https://pecst01.aurusepay.com",
2645
+ "path_pattern": "/storeservices/ecom/getiframe",
2646
+ "sources": [
2647
+ {
2648
+ "kind": "saved_observation",
2649
+ "reference": "oreillyauto-2026-10-31:aurus-ecom-getiframe-oneTimeToken",
2650
+ "reviewed_on": "2026-10-31"
2651
+ }
2652
+ ],
2653
+ "hostname_pattern": "^pecst[0-9]{2}\\.aurusepay\\.com$",
2654
+ "pathname_pattern": "^\\/storeservices\\/ecom\\/getiframe$"
2655
+ },
2656
+ {
2657
+ "id": "aurus-ecom-init-script",
2658
+ "psp": "aurus",
2659
+ "kinds": [
2660
+ "script"
2661
+ ],
2662
+ "origin": "https://pecst01.aurusepay.com",
2663
+ "path_pattern": "/storeservices/ecom/ecominitjs",
2664
+ "sources": [
2665
+ {
2666
+ "kind": "saved_observation",
2667
+ "reference": "oreillyauto-2026-10-31:aurus-ecom-getiframe-oneTimeToken",
2668
+ "reviewed_on": "2026-10-31"
2669
+ }
2670
+ ],
2671
+ "hostname_pattern": "^pecst[0-9]{2}\\.aurusepay\\.com$",
2672
+ "pathname_pattern": "^\\/storeservices\\/ecom\\/ecominitjs$"
2673
+ },
2569
2674
  {
2570
2675
  "id": "juspay-hypercheckout-payment-page",
2571
2676
  "psp": "juspay",
@@ -3565,6 +3670,54 @@
3565
3670
  "hostname_pattern": "^testflex\\.cybersource\\.com$",
3566
3671
  "pathname_pattern": "^\\/microform\\/bundle\\/v2\\.[0-9]+\\.[0-9]+\\/iframe\\.html$"
3567
3672
  },
3673
+ {
3674
+ "id": "cybersource-unified-checkout-script-test",
3675
+ "psp": "cybersource_flex",
3676
+ "kinds": [
3677
+ "script"
3678
+ ],
3679
+ "origin": "https://testup.cybersource.com",
3680
+ "path_pattern": "/uc/v1/assets/:asset/UnifiedCheckout.js",
3681
+ "sources": [
3682
+ {
3683
+ "kind": "saved_observation",
3684
+ "reference": "napaonline-2026-10-31:unified-checkout-v1.8.2-mce-orc-ga-frames",
3685
+ "reviewed_on": "2026-10-31"
3686
+ },
3687
+ {
3688
+ "kind": "official_documentation",
3689
+ "reference": "https://developer.cybersource.com/docs/cybs/en-us/unified-checkout/developer/all/rest/unified-checkout/uc-intro.html",
3690
+ "reviewed_on": "2026-10-31"
3691
+ }
3692
+ ],
3693
+ "hostname_pattern": "^testup\\.cybersource\\.com$",
3694
+ "pathname_pattern": "^\\/uc\\/v1\\/assets\\/[A-Za-z0-9_-]{16,1024}\\/UnifiedCheckout\\.js$"
3695
+ },
3696
+ {
3697
+ "id": "cybersource-unified-checkout-frame-test",
3698
+ "psp": "cybersource_flex",
3699
+ "kinds": [
3700
+ "frame",
3701
+ "iframe",
3702
+ "document"
3703
+ ],
3704
+ "origin": "https://testup.cybersource.com",
3705
+ "path_pattern": "/uc/v1/assets/:asset/{mce,orc,ga}/*.html",
3706
+ "sources": [
3707
+ {
3708
+ "kind": "saved_observation",
3709
+ "reference": "napaonline-2026-10-31:unified-checkout-v1.8.2-mce-orc-ga-frames",
3710
+ "reviewed_on": "2026-10-31"
3711
+ },
3712
+ {
3713
+ "kind": "official_documentation",
3714
+ "reference": "https://developer.cybersource.com/docs/cybs/en-us/unified-checkout/developer/all/rest/unified-checkout/uc-intro.html",
3715
+ "reviewed_on": "2026-10-31"
3716
+ }
3717
+ ],
3718
+ "hostname_pattern": "^testup\\.cybersource\\.com$",
3719
+ "pathname_pattern": "^\\/uc\\/v1\\/assets\\/[A-Za-z0-9_-]{16,1024}\\/(?:mce\\/mce|orc\\/orc|ga\\/ga)\\.html$"
3720
+ },
3568
3721
  {
3569
3722
  "id": "cybersource-secure-acceptance-silent-order-post-test",
3570
3723
  "psp": "cybersource_secure_acceptance",
@@ -385,6 +385,7 @@
385
385
  "mollie-components-v1-script",
386
386
  "mollie-hosted-credit-card",
387
387
  "braintree-web-sdk",
388
+ "braintree-web-wallet",
388
389
  "braintree-hosted-fields",
389
390
  "paysafe-js",
390
391
  "worldpay-checkout-sdk",
@@ -483,6 +484,10 @@
483
484
  "gmo-link-hosted-page",
484
485
  "cybersource-flex-microform-script",
485
486
  "cybersource-flex-microform-field",
487
+ "cybersource-unified-checkout-script",
488
+ "cybersource-unified-checkout-frame",
489
+ "aurus-ecom-iframe",
490
+ "aurus-ecom-init-script",
486
491
  "juspay-hypercheckout-payment-page",
487
492
  "pelecard-payment-page",
488
493
  "pelecard-payment-script",
@@ -526,6 +531,8 @@
526
531
  "gmo-link-hosted-page-test",
527
532
  "cybersource-flex-microform-script-test",
528
533
  "cybersource-flex-microform-field-test",
534
+ "cybersource-unified-checkout-script-test",
535
+ "cybersource-unified-checkout-frame-test",
529
536
  "cybersource-secure-acceptance-silent-order-post-test",
530
537
  "cybersource-secure-acceptance-silent-order-post-in",
531
538
  "worldpay-eprotect-js-api-prelive",
@@ -1023,6 +1030,7 @@
1023
1030
  "mollie-components-v1-script",
1024
1031
  "mollie-hosted-credit-card",
1025
1032
  "braintree-web-sdk",
1033
+ "braintree-web-wallet",
1026
1034
  "braintree-hosted-fields",
1027
1035
  "paysafe-js",
1028
1036
  "worldpay-checkout-sdk",
@@ -1121,6 +1129,10 @@
1121
1129
  "gmo-link-hosted-page",
1122
1130
  "cybersource-flex-microform-script",
1123
1131
  "cybersource-flex-microform-field",
1132
+ "cybersource-unified-checkout-script",
1133
+ "cybersource-unified-checkout-frame",
1134
+ "aurus-ecom-iframe",
1135
+ "aurus-ecom-init-script",
1124
1136
  "juspay-hypercheckout-payment-page",
1125
1137
  "pelecard-payment-page",
1126
1138
  "pelecard-payment-script",
@@ -1164,6 +1176,8 @@
1164
1176
  "gmo-link-hosted-page-test",
1165
1177
  "cybersource-flex-microform-script-test",
1166
1178
  "cybersource-flex-microform-field-test",
1179
+ "cybersource-unified-checkout-script-test",
1180
+ "cybersource-unified-checkout-frame-test",
1167
1181
  "cybersource-secure-acceptance-silent-order-post-test",
1168
1182
  "cybersource-secure-acceptance-silent-order-post-in",
1169
1183
  "worldpay-eprotect-js-api-prelive",
@@ -148,6 +148,11 @@ export declare function getCheckoutPreflightCatalog(): {
148
148
  path_pattern: string;
149
149
  flow?: string;
150
150
  variant_unverified?: string;
151
+ /**
152
+ * Why the asset never takes a card: a wallet button, a fraud collector, or the client those load. When no card frame
153
+ * is active and scripts alone name several processors, one whose every asset says this is not the card form's.
154
+ */
155
+ card_free?: string;
151
156
  }[];
152
157
  processors: readonly [{
153
158
  readonly psp: "spreedly";