@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.
- package/CHANGELOG.md +26 -0
- package/README.md +61 -4
- package/dist/adyen-merchant-hosted.generated.d.ts +1 -1
- package/dist/adyen-merchant-hosted.generated.js +128 -35
- package/dist/agent-amount.generated.js +1 -1
- package/dist/aurus.d.ts +33 -0
- package/dist/aurus.js +75 -0
- package/dist/builtin-registry.generated.js +1 -1
- package/dist/capabilities.generated.js +1 -1
- package/dist/card-fields.generated.js +1756 -433
- package/dist/cardlink-vpos.d.ts +43 -0
- package/dist/cardlink-vpos.js +90 -0
- package/dist/cdp.js +13 -0
- package/dist/checkout-com.generated.js +5 -1
- package/dist/client.d.ts +66 -0
- package/dist/client.js +66 -0
- package/dist/cybersource-flex.generated.d.ts +39 -1
- package/dist/cybersource-flex.generated.js +100 -11
- package/dist/eghl.d.ts +40 -0
- package/dist/eghl.js +72 -0
- package/dist/gmo.generated.js +7 -2
- package/dist/hosted-entry.js +2 -0
- package/dist/paddle-tokenex.generated.js +7 -2
- package/dist/payrails.generated.js +7 -2
- package/dist/pre-claim.d.ts +2 -0
- package/dist/pre-claim.js +46 -2
- package/dist/preflight-catalog.json +154 -1
- package/dist/preflight-schemas.json +14 -0
- package/dist/preflight.generated.d.ts +5 -0
- package/dist/preflight.generated.js +40 -3
- package/dist/preparation.d.ts +7 -0
- package/dist/preparation.js +21 -0
- package/dist/primer.generated.js +1778 -455
- package/dist/shiji-sts.generated.js +7 -2
- package/dist/stripe-checkout.generated.js +1741 -470
- package/dist/substitutions.generated.js +94 -1
- package/dist/tap-payments.generated.js +7 -2
- package/dist/twoc2p.generated.js +7 -2
- package/examples/preflight/kernel-native/inventory.json +1 -1
- 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
|
+
}
|
package/dist/gmo.generated.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
// Generated from @agent-cards/payment-core. Do not edit.
|
|
3
|
-
// artifact-sha256:
|
|
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
|
-
|
|
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];
|
package/dist/hosted-entry.js
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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];
|
package/dist/pre-claim.d.ts
CHANGED
|
@@ -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";
|