@agent-cards/sdk 0.23.25 → 0.23.26
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 +8 -0
- package/README.md +29 -1
- package/dist/agent-amount.generated.js +1 -1
- package/dist/capabilities.generated.js +1 -1
- package/dist/card-fields.generated.js +207 -117
- package/dist/client.d.ts +35 -0
- package/dist/client.js +38 -1
- package/dist/primer.generated.js +222 -132
- package/dist/stripe-checkout.generated.js +74 -44
- package/dist/tap-payments.generated.d.ts +10 -9
- package/dist/tap-payments.generated.js +28 -43
- package/package.json +2 -2
|
@@ -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: e87510bfa2a9dbf91e4d234b93c0500d2ac2cc3c1bcdf0e21461346f24f5d25e
|
|
4
4
|
// src/deep-freeze.js
|
|
5
5
|
function deepFreeze(value) {
|
|
6
6
|
if (value && typeof value === "object" && !Object.isFrozen(value)) {
|
|
@@ -2743,8 +2743,8 @@ var PROCESSOR_DEFINITIONS = deepFreeze([
|
|
|
2743
2743
|
// by name. The endpoint answers no browser origin, so the card leaves the cardholder's device only through the
|
|
2744
2744
|
// checkout relay, and only the frame's four session headers ride beside the card. test.checkout.dibspayment.eu is
|
|
2745
2745
|
// Nexi's test environment: pinned (S7) to test rows, which send only Nexi's published test cards.
|
|
2746
|
-
// Ships dark: served only to a client that declares `nexi_checkout_pay`,
|
|
2747
|
-
//
|
|
2746
|
+
// Ships dark: served only to a client that declares `nexi_checkout_pay`, and only for the one company the API's gate
|
|
2747
|
+
// names in its code (backend config.ts NEXI_CHECKOUT_PROOF_ORG), and autopilot never sends this request (autopilot.js
|
|
2748
2748
|
// DEVICE_REPLAY_REFUSED_OPERATIONS). `(?![\w/.%-])` ends the path for a consumer that tests `match` unanchored.
|
|
2749
2749
|
capability: "nexi_checkout_pay",
|
|
2750
2750
|
match: "(?:test\\.)?checkout\\.dibspayment\\.eu/api/v1/pay(?![\\w/.%-])",
|
|
@@ -3027,6 +3027,35 @@ var PROCESSOR_DEFINITIONS = deepFreeze([
|
|
|
3027
3027
|
passthroughHeaders: ["^accept$"],
|
|
3028
3028
|
jsonCardFields: [["checkoutCreditCard", "number"]]
|
|
3029
3029
|
},
|
|
3030
|
+
{
|
|
3031
|
+
psp: "pin_payments",
|
|
3032
|
+
// Pin Payments (Australia and New Zealand, a Fat Zebra company). Both of Pin's browser libraries send the card
|
|
3033
|
+
// to Pin's cards API, which answers with a card token the merchant's server charges afterwards: Hosted Fields
|
|
3034
|
+
// from its control frame on cdn.pinpayments.com, Pin.js from the merchant's page. One JSON POST to exactly
|
|
3035
|
+
// https://api.pinpayments.com/1/cards (test-api.pinpayments.com on Pin's test API): the merchant's publishable
|
|
3036
|
+
// key, any billing address, and the card at the root as name, number, cvc, expiry_month and expiry_year,
|
|
3037
|
+
// unencrypted. pin-payments.js holds the request rule the pause decision, the API's create and the device all
|
|
3038
|
+
// read: exactly that URL, a JSON Content-Type, and the card fields' body with nothing the cards API does not
|
|
3039
|
+
// document beside the card. The body names the merchant's Pin account, by its publishable key, but no amount, so a
|
|
3040
|
+
// live request is taken only under a key a reviewed pin names. The cards API answers any origin, so the
|
|
3041
|
+
// cardholder's device sends the card itself, with no relay. The hosted Payment Page (pay.pinpayments.com) and the
|
|
3042
|
+
// JSONP form (/1/cards.json) are other requests, which `match` leaves out. test-api.pinpayments.com is Pin's test
|
|
3043
|
+
// API: pinned (S7) to test rows, which send only Pin's test cards.
|
|
3044
|
+
// Ships dark: served only to a client that declares `pin_payments_card_token`, gated off for every org until an
|
|
3045
|
+
// operator lists one (`pin_payments:<org>`), and autopilot never sends this request (autopilot.js
|
|
3046
|
+
// DEVICE_REPLAY_REFUSED_OPERATIONS). `(?![\w/.%-])` keeps the JSONP form and a card's own record (/1/cards/<token>)
|
|
3047
|
+
// out of `match`; every consumer anchors it, and recognition.js takes only the exact URL (isPinPaymentsCardUrl).
|
|
3048
|
+
capability: "pin_payments_card_token",
|
|
3049
|
+
match: "(?:test-)?api\\.pinpayments\\.com/1/cards(?![\\w/.%-])",
|
|
3050
|
+
hosts: ["^api\\.pinpayments\\.com$", "^test-api\\.pinpayments\\.com$"],
|
|
3051
|
+
sandboxHosts: ["^test-api\\.pinpayments\\.com$"],
|
|
3052
|
+
hostEnvironmentPinned: true,
|
|
3053
|
+
encoding: "json",
|
|
3054
|
+
// Pin's own attribution header and the JSON Accept ride as the card fields sent them; origin, referer and
|
|
3055
|
+
// cookies never do.
|
|
3056
|
+
passthroughHeaders: ["^x-pin-origin$", "^accept$"],
|
|
3057
|
+
jsonCardFields: [["number"]]
|
|
3058
|
+
},
|
|
3030
3059
|
// Every processor registered since this list froze, in id order (registry.js).
|
|
3031
3060
|
...REGISTERED_DEFINITIONS
|
|
3032
3061
|
]);
|
|
@@ -3274,32 +3303,6 @@ var ANSWER_LIMIT = 64 * 1024;
|
|
|
3274
3303
|
var REQUIRED_KEYS = /* @__PURE__ */ Object.freeze(["encrypted_pan", "exp_month", "exp_year", "cvv", "first6", "last4", "brand"]);
|
|
3275
3304
|
var OPTIONAL_KEYS = /* @__PURE__ */ Object.freeze(["address_line1", "phone_numbers", "email_address", "name", "address_zip"]);
|
|
3276
3305
|
var CARD_ORDER = /* @__PURE__ */ Object.freeze([...REQUIRED_KEYS, ...OPTIONAL_KEYS]);
|
|
3277
|
-
// src/tap-payments.js
|
|
3278
|
-
var pin7 = (fields) => Object.freeze({
|
|
3279
|
-
...fields,
|
|
3280
|
-
origins: Object.freeze([...fields.origins]),
|
|
3281
|
-
sessions: Object.freeze({ ...fields.sessions }),
|
|
3282
|
-
key: Object.freeze({ ...fields.key })
|
|
3283
|
-
});
|
|
3284
|
-
var TAP_PAYMENTS_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
3285
|
-
pin7({
|
|
3286
|
-
id: "casefilegame",
|
|
3287
|
-
merchant: "Casefilegame",
|
|
3288
|
-
tapMerchantId: "67977048",
|
|
3289
|
-
publishableKey: "pk_live_ydlRjrWcLXaVvpsSBQKOie86",
|
|
3290
|
-
environment: "production",
|
|
3291
|
-
origins: ["https://checkout.tap.company"],
|
|
3292
|
-
// The WooCommerce plugin's redirect (Plugin-WooCommerce-All-in-one tap.php 567-586, read 2026-10-17)
|
|
3293
|
-
// creates the src_all charge with save_card false and names no agreement, subscription or destinations.
|
|
3294
|
-
sessions: { saveCard: false, agreement: false, subscription: false, destinations: false },
|
|
3295
|
-
key: {
|
|
3296
|
-
spki: "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAzja2vB+Iyafj2Mm3pFg65z7Yvj9ZeoFLdMBgWFyyjF020r5HSPKVhuZ39uJkjs0U/kWgEpKDzHZAKdtGv36dS33NjMAzYpgFkD8j+9/YWqpvAGRj5nv1b/q7NaiZk3b1wm7aXHJOx5L6rPQf2qDQxhcSNHocU+Uy8wGmGxRRu6QRKN3khaz4o4jJDzqxns4h/ShzHjdZeWIVfpCAyVoED0IESBYrvGEhJeyKnga5XdHdBU2yP8P1huO4RbSKcZv00ZgxVHAQQ9CqArW3TE8SyLLnJPkSpSHHBnIPSQS1z3ld1mImy/zqTd4ltkV6XHpYqVvoPmys2EuZX3pMvCcPGwIBEQ==",
|
|
3297
|
-
sha256: "6eb4e89a1e05a06a39d631f6fb450c052a9cad9935edc1921e84e80207470552",
|
|
3298
|
-
// The shared parser takes exponent 17 only under a pin that names it (rsa-pkcs1v15.js).
|
|
3299
|
-
exponent: 17
|
|
3300
|
-
}
|
|
3301
|
-
})
|
|
3302
|
-
]);
|
|
3303
3306
|
// src/conekta.js
|
|
3304
3307
|
var LETTERS = "A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u017F";
|
|
3305
3308
|
var PAGE_NAME = new RegExp(`^[${LETTERS} .'-]{1,64}$`);
|
|
@@ -3431,9 +3434,9 @@ var PAGE_NAME2 = new RegExp(`^[${LETTERS2} .'-]{1,64}$`);
|
|
|
3431
3434
|
var HAS_LETTER2 = new RegExp(`[${LETTERS2}]`);
|
|
3432
3435
|
var ADDRESS_VALUE2 = new RegExp(`^[\\x20-\\x7e\\u00a0-\\u017f]{0,128}$`);
|
|
3433
3436
|
var PAN_LIKE2 = new RegExp(`(?:[0-9][^0-9${LETTERS2}]*){12,}`);
|
|
3434
|
-
var
|
|
3437
|
+
var pin7 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), publicKeys: Object.freeze([...fields.publicKeys]) });
|
|
3435
3438
|
var OPENPAY_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
3436
|
-
|
|
3439
|
+
pin7({
|
|
3437
3440
|
id: "diario_de_yucatan",
|
|
3438
3441
|
merchant: "Diario de Yucatán",
|
|
3439
3442
|
origins: ["https://www.yucatan.com.mx"],
|
|
@@ -3447,15 +3450,15 @@ var UUID = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
|
|
|
3447
3450
|
var NONCE_URL = new RegExp(`^https://services\\.poynt\\.net/v1/commerce/stores/(${UUID})/payment-tokens/generate-nonce$`);
|
|
3448
3451
|
var STORE_ID = new RegExp(`^${UUID}$`);
|
|
3449
3452
|
var APPLICATION_ID = new RegExp(`^urn:aid:${UUID}$`);
|
|
3450
|
-
var
|
|
3453
|
+
var pin8 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), storeIds: Object.freeze([...fields.storeIds]) });
|
|
3451
3454
|
var POYNT_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
3452
|
-
|
|
3455
|
+
pin8({
|
|
3453
3456
|
id: "yearning_for_learning",
|
|
3454
3457
|
merchant: "Yearning for Learning Publishing & Coaching",
|
|
3455
3458
|
origins: ["https://ff305485-ba6c-423a-87b0-cebe3f83ffe9.mysimplestore.com"],
|
|
3456
3459
|
storeIds: ["71ac12ed-e61f-4318-95db-db0e7c649d6f"]
|
|
3457
3460
|
}),
|
|
3458
|
-
|
|
3461
|
+
pin8({
|
|
3459
3462
|
id: "timber_ridge_bookkeeping",
|
|
3460
3463
|
merchant: "Timber Ridge Bookkeeping",
|
|
3461
3464
|
origins: ["https://d7d64ac3-0352-4e53-af9a-f6d8e7b5fb71.mysimplestore.com"],
|
|
@@ -3486,11 +3489,11 @@ var FASTSPRING_STORE_PINS = /* @__PURE__ */ Object.freeze([
|
|
|
3486
3489
|
var STORE = "[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?";
|
|
3487
3490
|
var CARD_URL = new RegExp(`^https://(${STORE})(\\.test)?\\.onfastspring\\.com((?:/(?:popup|embedded)-[A-Za-z0-9_-]{1,64})?)/session/([A-Za-z0-9_-]{16,64})/payment$`);
|
|
3488
3491
|
// src/omise.js
|
|
3489
|
-
var
|
|
3492
|
+
var pin9 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), keys: Object.freeze([...fields.keys]) });
|
|
3490
3493
|
var OMISE_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
+
pin9({ id: "taejai", merchant: "Taejai", origins: ["https://taejai.com"], keys: ["pkey_53q6mm66esjr563ob0h"] }),
|
|
3495
|
+
pin9({ id: "socialgiver", merchant: "Socialgiver", origins: ["https://www.socialgiver.com"], keys: ["pkey_5d5o2iahksmyrkybemg"] }),
|
|
3496
|
+
pin9({ id: "thireq_pecko_links", merchant: "Thireq Pecko", origins: ["https://linksplus.omise.co"], keys: ["pkey_65w70xniwsinf0gm680"] })
|
|
3494
3497
|
]);
|
|
3495
3498
|
// src/payu-latam.js
|
|
3496
3499
|
var PAYU_LATAM_HOSTS = /* @__PURE__ */ Object.freeze({
|
|
@@ -3645,6 +3648,33 @@ var RECORD_MEMBERS = /* @__PURE__ */ Object.freeze({
|
|
|
3645
3648
|
"EXTRA4"
|
|
3646
3649
|
]
|
|
3647
3650
|
});
|
|
3651
|
+
// src/pin-payments.js
|
|
3652
|
+
var CARD_KEYS = /* @__PURE__ */ Object.freeze(["name", "number", "cvc", "expiry_month", "expiry_year"]);
|
|
3653
|
+
var ADDRESS_KEYS = /* @__PURE__ */ Object.freeze([
|
|
3654
|
+
"address_line1",
|
|
3655
|
+
"address_line2",
|
|
3656
|
+
"address_city",
|
|
3657
|
+
"address_postcode",
|
|
3658
|
+
"address_state",
|
|
3659
|
+
"address_country"
|
|
3660
|
+
]);
|
|
3661
|
+
var KEY = "publishable_api_key";
|
|
3662
|
+
var METHOD = "_method";
|
|
3663
|
+
var DOCUMENTED = /* @__PURE__ */ new Set([KEY, METHOD, ...CARD_KEYS, ...ADDRESS_KEYS]);
|
|
3664
|
+
var TOKEN_FACTS = /* @__PURE__ */ Object.freeze([
|
|
3665
|
+
"token",
|
|
3666
|
+
"scheme",
|
|
3667
|
+
"display_number",
|
|
3668
|
+
"issuing_country",
|
|
3669
|
+
"expiry_month",
|
|
3670
|
+
"expiry_year",
|
|
3671
|
+
"name",
|
|
3672
|
+
...ADDRESS_KEYS,
|
|
3673
|
+
"network_type",
|
|
3674
|
+
"network_format",
|
|
3675
|
+
"customer_token",
|
|
3676
|
+
"primary"
|
|
3677
|
+
]);
|
|
3648
3678
|
// src/cybersource-secure-acceptance.js
|
|
3649
3679
|
var SA_BODY_LIMIT = 32 * 1024;
|
|
3650
3680
|
var SA_REPLY_LIMIT = 64 * 1024;
|
|
@@ -3787,7 +3817,7 @@ var REQUIRED = Object.freeze([
|
|
|
3787
3817
|
"ekashu_failure_url",
|
|
3788
3818
|
"ekashu_callback_success_url"
|
|
3789
3819
|
]);
|
|
3790
|
-
var
|
|
3820
|
+
var CARD_KEYS2 = Object.freeze([
|
|
3791
3821
|
"ekashu_card_number",
|
|
3792
3822
|
"ekashu_expires_end_month",
|
|
3793
3823
|
"ekashu_expires_end_year",
|
|
@@ -4107,13 +4137,13 @@ var DECLINE_CODES = Object.freeze([
|
|
|
4107
4137
|
]);
|
|
4108
4138
|
var FRICTIONLESS_STATUSES = Object.freeze([0, 5, 7]);
|
|
4109
4139
|
// src/sbps.js
|
|
4110
|
-
var
|
|
4140
|
+
var pin10 = (fields) => /* @__PURE__ */ Object.freeze({
|
|
4111
4141
|
...fields,
|
|
4112
4142
|
origins: Object.freeze([...fields.origins]),
|
|
4113
4143
|
accounts: Object.freeze(fields.accounts.map((account) => Object.freeze({ ...account })))
|
|
4114
4144
|
});
|
|
4115
4145
|
var SBPS_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
4116
|
-
/* @__PURE__ */
|
|
4146
|
+
/* @__PURE__ */ pin10({
|
|
4117
4147
|
id: "boss_ezo_fukuoka",
|
|
4118
4148
|
merchant: `BOSS E${ /* @__PURE__ */String.fromCharCode(12539)}ZO FUKUOKA`,
|
|
4119
4149
|
origins: ["https://ticket.e-zofukuoka.com"],
|
|
@@ -4205,7 +4235,7 @@ var replayPolicy = Object.freeze({ contentTypeFor, HEADER_NEVER_FORWARD });
|
|
|
4205
4235
|
var STRIPE_CHECKOUT_OPERATION = "stripe.device_checkout_confirm.v1";
|
|
4206
4236
|
var STRIPE_CHECKOUT_CONTEXT_HEADER = "x-agentcard-stripe-checkout-context";
|
|
4207
4237
|
var SESSION = /^cs_(?:test|live)_[A-Za-z0-9]{1,200}(?![\s\S])/;
|
|
4208
|
-
var
|
|
4238
|
+
var KEY2 = /^pk_(?:test|live)_[A-Za-z0-9_]{1,256}(?![\s\S])/;
|
|
4209
4239
|
var SYNTHETIC = /^pm_agentcard_checkout_[A-Za-z0-9_-]{16,80}(?![\s\S])/;
|
|
4210
4240
|
var STRIPE_CHECKOUT_VALIDATION_CODES = Object.freeze({
|
|
4211
4241
|
unclassified: "unclassified",
|
|
@@ -4248,7 +4278,7 @@ function validateStripeCheckoutIdentity(value) {
|
|
|
4248
4278
|
reject("mode_binding");
|
|
4249
4279
|
const environment = value.environment ?? "test", livemode = environment === "production";
|
|
4250
4280
|
const mode = livemode ? "live" : "test";
|
|
4251
|
-
if (Object.hasOwn(value, "sessionId") && (typeof value.sessionId !== "string" || !SESSION.test(value.sessionId) || !value.sessionId.startsWith(`cs_${mode}_`)) || Object.hasOwn(value, "publishableKey") && (typeof value.publishableKey !== "string" || !
|
|
4281
|
+
if (Object.hasOwn(value, "sessionId") && (typeof value.sessionId !== "string" || !SESSION.test(value.sessionId) || !value.sessionId.startsWith(`cs_${mode}_`)) || Object.hasOwn(value, "publishableKey") && (typeof value.publishableKey !== "string" || !KEY2.test(value.publishableKey) || !value.publishableKey.startsWith(`pk_${mode}_`)) || Object.hasOwn(value, "livemode") && value.livemode !== livemode)
|
|
4252
4282
|
reject("mode_binding");
|
|
4253
4283
|
return Object.freeze({ environment, livemode });
|
|
4254
4284
|
}
|
|
@@ -4452,7 +4482,7 @@ function keyFor(request, values, expected) {
|
|
|
4452
4482
|
headerKey = match[1];
|
|
4453
4483
|
}
|
|
4454
4484
|
const key = values.get("key") || headerKey;
|
|
4455
|
-
if (!
|
|
4485
|
+
if (!KEY2.test(key) || headerKey && headerKey !== key || expected !== void 0 && expected !== key)
|
|
4456
4486
|
reject("publishable_key");
|
|
4457
4487
|
return key;
|
|
4458
4488
|
}
|
|
@@ -18,9 +18,9 @@ declare var TapPaymentsError: {
|
|
|
18
18
|
};
|
|
19
19
|
declare function isTapPaymentsTokenUrl(url: any): boolean;
|
|
20
20
|
declare function tapPaymentsKeyEnvironment(publishableKey: any): "production" | "sandbox" | null;
|
|
21
|
-
declare var TAP_PAYMENTS_MERCHANT_PINS: readonly
|
|
22
|
-
declare function tapPaymentsMerchantPin(publishableKey: any, pins?: readonly
|
|
23
|
-
declare function tapPaymentsMerchantRefusal(environment: any, publishableKey: any, merchantOrigin: any, pins?: readonly
|
|
21
|
+
declare var TAP_PAYMENTS_MERCHANT_PINS: readonly never[];
|
|
22
|
+
declare function tapPaymentsMerchantPin(publishableKey: any, pins?: readonly never[]): null;
|
|
23
|
+
declare function tapPaymentsMerchantRefusal(environment: any, publishableKey: any, merchantOrigin: any, pins?: readonly never[]): "tap_payments_merchant_unreviewed" | null;
|
|
24
24
|
declare function isTapPaymentsCiphertext(value: any): boolean;
|
|
25
25
|
declare function tapPaymentsBodyVerdict(body: any): Readonly<{
|
|
26
26
|
verdict: "refuse";
|
|
@@ -33,18 +33,19 @@ declare function tapPaymentsOrderAmount(body: any): Readonly<{
|
|
|
33
33
|
currency: any;
|
|
34
34
|
}> | null;
|
|
35
35
|
declare function tapPaymentsRequestKey(request: any): any;
|
|
36
|
-
declare function tapPaymentsRequestRefusal(request: any): any;
|
|
36
|
+
declare function tapPaymentsRequestRefusal(request: any, pins?: readonly never[]): any;
|
|
37
37
|
declare function tapPaymentsPlaintext(card: any): string;
|
|
38
|
-
declare function encryptTapPaymentsCard(card: any, publishableKey: any, facilities?: {}): Readonly<{
|
|
38
|
+
declare function encryptTapPaymentsCard(card: any, publishableKey: any, facilities?: {}, pins?: readonly never[]): Readonly<{
|
|
39
39
|
encryptedData: string;
|
|
40
40
|
}>;
|
|
41
41
|
declare function isTapPaymentsCiphertextUnderPin(value: any, merchantPin: any): boolean;
|
|
42
|
-
declare function substituteTapPayments(request: any, substitution: any): string;
|
|
43
|
-
declare function tapPaymentsSubstitutionsRefusal(template: any, substitution: any): {
|
|
42
|
+
declare function substituteTapPayments(request: any, substitution: any, pins?: readonly never[]): string;
|
|
43
|
+
declare function tapPaymentsSubstitutionsRefusal(template: any, substitution: any, pins?: readonly never[]): {
|
|
44
44
|
code: string;
|
|
45
45
|
message: any;
|
|
46
46
|
} | null;
|
|
47
|
-
declare function tapPaymentsKeyUsable(authorization: any): boolean;
|
|
47
|
+
declare function tapPaymentsKeyUsable(authorization: any, pins?: readonly never[]): boolean;
|
|
48
|
+
declare function tapPaymentsRowUsable(authorization: any, pins?: readonly never[]): boolean;
|
|
48
49
|
declare function tapPaymentsRefusalCode(text: any): string | null;
|
|
49
50
|
declare function tapPaymentsAnswerOutcome(status: any, text: any, card: any): {
|
|
50
51
|
outcome: string;
|
|
@@ -56,4 +57,4 @@ declare function tapPaymentsAnswerOutcome(status: any, text: any, card: any): {
|
|
|
56
57
|
outcome: string;
|
|
57
58
|
code?: undefined;
|
|
58
59
|
};
|
|
59
|
-
export { TAP_PAYMENTS_CAPABILITY, TAP_PAYMENTS_FIELD, TAP_PAYMENTS_HOST, TAP_PAYMENTS_MERCHANT_PINS, TAP_PAYMENTS_OPERATION, TAP_PAYMENTS_PSP, TAP_PAYMENTS_PURPOSES, TAP_PAYMENTS_REFUSAL_CODES, TAP_PAYMENTS_SCHEME, TAP_PAYMENTS_TOKEN_URL, TapPaymentsError, encryptTapPaymentsCard, isTapPaymentsCiphertext, isTapPaymentsCiphertextUnderPin, isTapPaymentsTokenUrl, substituteTapPayments, tapPaymentsAnswerOutcome, tapPaymentsBodyVerdict, tapPaymentsKeyEnvironment, tapPaymentsKeyUsable, tapPaymentsMerchantPin, tapPaymentsMerchantRefusal, tapPaymentsOrderAmount, tapPaymentsPlaintext, tapPaymentsRefusalCode, tapPaymentsRefusalMessage, tapPaymentsRequestKey, tapPaymentsRequestRefusal, tapPaymentsSubstitutionsRefusal };
|
|
60
|
+
export { TAP_PAYMENTS_CAPABILITY, TAP_PAYMENTS_FIELD, TAP_PAYMENTS_HOST, TAP_PAYMENTS_MERCHANT_PINS, TAP_PAYMENTS_OPERATION, TAP_PAYMENTS_PSP, TAP_PAYMENTS_PURPOSES, TAP_PAYMENTS_REFUSAL_CODES, TAP_PAYMENTS_SCHEME, TAP_PAYMENTS_TOKEN_URL, TapPaymentsError, encryptTapPaymentsCard, isTapPaymentsCiphertext, isTapPaymentsCiphertextUnderPin, isTapPaymentsTokenUrl, substituteTapPayments, tapPaymentsAnswerOutcome, tapPaymentsBodyVerdict, tapPaymentsKeyEnvironment, tapPaymentsKeyUsable, tapPaymentsMerchantPin, tapPaymentsMerchantRefusal, tapPaymentsOrderAmount, tapPaymentsPlaintext, tapPaymentsRefusalCode, tapPaymentsRefusalMessage, tapPaymentsRequestKey, tapPaymentsRequestRefusal, tapPaymentsRowUsable, tapPaymentsSubstitutionsRefusal };
|
|
@@ -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: 06fe191e76a7d298c2cb35a4b370760894dc5a48bd8d1c920db8510b73f2e62b
|
|
4
4
|
// src/sha256.js
|
|
5
5
|
var K = /* @__PURE__ */ new Uint32Array([
|
|
6
6
|
1116352408,
|
|
@@ -152,13 +152,13 @@ var TYPED_ARRAY = Object.getPrototypeOf(Uint8Array.prototype);
|
|
|
152
152
|
var typedArrayName = Object.getOwnPropertyDescriptor(TYPED_ARRAY, Symbol.toStringTag).get;
|
|
153
153
|
function parseRsaPublicKey(key) {
|
|
154
154
|
const spki = key && typeof key === "object" ? key.spki : void 0;
|
|
155
|
-
const
|
|
155
|
+
const pin = key && typeof key === "object" ? key.sha256 : void 0;
|
|
156
156
|
const named = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "exponent") ? key.exponent : void 0;
|
|
157
157
|
if (named !== void 0 && named !== 17)
|
|
158
158
|
throw refuse("key");
|
|
159
159
|
if (typeof spki !== "string" || spki.length > 1024 || spki.length % 4 !== 0 || !BASE64.test(spki))
|
|
160
160
|
throw refuse("key");
|
|
161
|
-
if (typeof
|
|
161
|
+
if (typeof pin !== "string" || !SHA256_HEX.test(pin))
|
|
162
162
|
throw refuse("key");
|
|
163
163
|
let binary;
|
|
164
164
|
try {
|
|
@@ -170,7 +170,7 @@ function parseRsaPublicKey(key) {
|
|
|
170
170
|
if (btoa(binary) !== spki)
|
|
171
171
|
throw refuse("key");
|
|
172
172
|
const der = Uint8Array.from(binary, (c) => c.charCodeAt(0));
|
|
173
|
-
if (sha256Hex(der) !==
|
|
173
|
+
if (sha256Hex(der) !== pin)
|
|
174
174
|
throw refuse("key");
|
|
175
175
|
const outer = readElement(der, 0, 48);
|
|
176
176
|
if (outer.end !== der.length || outer.start + RSA_ALGORITHM.length > der.length)
|
|
@@ -570,31 +570,7 @@ function tapPaymentsKeyEnvironment(publishableKey) {
|
|
|
570
570
|
return null;
|
|
571
571
|
return match[1] === "live" ? "production" : "sandbox";
|
|
572
572
|
}
|
|
573
|
-
var
|
|
574
|
-
...fields,
|
|
575
|
-
origins: Object.freeze([...fields.origins]),
|
|
576
|
-
sessions: Object.freeze({ ...fields.sessions }),
|
|
577
|
-
key: Object.freeze({ ...fields.key })
|
|
578
|
-
});
|
|
579
|
-
var TAP_PAYMENTS_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
580
|
-
pin({
|
|
581
|
-
id: "casefilegame",
|
|
582
|
-
merchant: "Casefilegame",
|
|
583
|
-
tapMerchantId: "67977048",
|
|
584
|
-
publishableKey: "pk_live_ydlRjrWcLXaVvpsSBQKOie86",
|
|
585
|
-
environment: "production",
|
|
586
|
-
origins: ["https://checkout.tap.company"],
|
|
587
|
-
// The WooCommerce plugin's redirect (Plugin-WooCommerce-All-in-one tap.php 567-586, read 2026-10-17)
|
|
588
|
-
// creates the src_all charge with save_card false and names no agreement, subscription or destinations.
|
|
589
|
-
sessions: { saveCard: false, agreement: false, subscription: false, destinations: false },
|
|
590
|
-
key: {
|
|
591
|
-
spki: "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAzja2vB+Iyafj2Mm3pFg65z7Yvj9ZeoFLdMBgWFyyjF020r5HSPKVhuZ39uJkjs0U/kWgEpKDzHZAKdtGv36dS33NjMAzYpgFkD8j+9/YWqpvAGRj5nv1b/q7NaiZk3b1wm7aXHJOx5L6rPQf2qDQxhcSNHocU+Uy8wGmGxRRu6QRKN3khaz4o4jJDzqxns4h/ShzHjdZeWIVfpCAyVoED0IESBYrvGEhJeyKnga5XdHdBU2yP8P1huO4RbSKcZv00ZgxVHAQQ9CqArW3TE8SyLLnJPkSpSHHBnIPSQS1z3ld1mImy/zqTd4ltkV6XHpYqVvoPmys2EuZX3pMvCcPGwIBEQ==",
|
|
592
|
-
sha256: "6eb4e89a1e05a06a39d631f6fb450c052a9cad9935edc1921e84e80207470552",
|
|
593
|
-
// The shared parser takes exponent 17 only under a pin that names it (rsa-pkcs1v15.js).
|
|
594
|
-
exponent: 17
|
|
595
|
-
}
|
|
596
|
-
})
|
|
597
|
-
]);
|
|
573
|
+
var TAP_PAYMENTS_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([]);
|
|
598
574
|
var SESSION_REVIEW = /* @__PURE__ */ Object.freeze(["saveCard", "agreement", "subscription", "destinations"]);
|
|
599
575
|
var keepsNoCard = (entry) => record(entry.sessions) && SESSION_REVIEW.every((key) => entry.sessions[key] === false);
|
|
600
576
|
function tapPaymentsMerchantPin(publishableKey, pins = TAP_PAYMENTS_MERCHANT_PINS) {
|
|
@@ -605,7 +581,7 @@ function tapPaymentsMerchantPin(publishableKey, pins = TAP_PAYMENTS_MERCHANT_PIN
|
|
|
605
581
|
}
|
|
606
582
|
function tapPaymentsMerchantRefusal(environment, publishableKey, merchantOrigin, pins = TAP_PAYMENTS_MERCHANT_PINS) {
|
|
607
583
|
const found = tapPaymentsMerchantPin(publishableKey, pins);
|
|
608
|
-
if (!found || found.environment !== environment || typeof merchantOrigin !== "string" || !found.origins.includes(merchantOrigin)) {
|
|
584
|
+
if (!found || found.environment !== environment || typeof merchantOrigin !== "string" || !Array.isArray(found.origins) || !found.origins.includes(merchantOrigin)) {
|
|
609
585
|
return "tap_payments_merchant_unreviewed";
|
|
610
586
|
}
|
|
611
587
|
return null;
|
|
@@ -770,7 +746,7 @@ function namesPinnedMerchant(body, merchantPin) {
|
|
|
770
746
|
const id = body.merchant.id;
|
|
771
747
|
return (typeof id === "number" && Number.isSafeInteger(id) ? String(id) : id) === merchantPin.tapMerchantId;
|
|
772
748
|
}
|
|
773
|
-
function tapPaymentsRequestRefusal(request) {
|
|
749
|
+
function tapPaymentsRequestRefusal(request, pins = TAP_PAYMENTS_MERCHANT_PINS) {
|
|
774
750
|
if (!record(request) || typeof request.method !== "string" || request.method.toUpperCase() !== "POST")
|
|
775
751
|
return "tap_payments_url_refused";
|
|
776
752
|
if (!isTapPaymentsTokenUrl(request.url))
|
|
@@ -783,7 +759,7 @@ function tapPaymentsRequestRefusal(request) {
|
|
|
783
759
|
const verdict = tapPaymentsBodyVerdict(request.body);
|
|
784
760
|
if (verdict.verdict !== "card")
|
|
785
761
|
return verdict.code;
|
|
786
|
-
const merchantPin = tapPaymentsMerchantPin(publishableKey);
|
|
762
|
+
const merchantPin = tapPaymentsMerchantPin(publishableKey, pins);
|
|
787
763
|
return merchantPin && namesPinnedMerchant(JSON.parse(request.body), merchantPin) ? null : "tap_payments_merchant_unreviewed";
|
|
788
764
|
}
|
|
789
765
|
var NAME_LIMIT = 24;
|
|
@@ -818,8 +794,8 @@ function base64(bytes) {
|
|
|
818
794
|
binary += String.fromCharCode(bytes[i]);
|
|
819
795
|
return btoa(binary);
|
|
820
796
|
}
|
|
821
|
-
function encryptTapPaymentsCard(card, publishableKey, facilities = {}) {
|
|
822
|
-
const merchantPin = tapPaymentsMerchantPin(publishableKey);
|
|
797
|
+
function encryptTapPaymentsCard(card, publishableKey, facilities = {}, pins = TAP_PAYMENTS_MERCHANT_PINS) {
|
|
798
|
+
const merchantPin = tapPaymentsMerchantPin(publishableKey, pins);
|
|
823
799
|
if (!merchantPin)
|
|
824
800
|
throw new TapPaymentsError("tap_payments_merchant_unreviewed");
|
|
825
801
|
const message = new TextEncoder().encode(tapPaymentsPlaintext(card));
|
|
@@ -859,14 +835,14 @@ function substitutionOf(substitution) {
|
|
|
859
835
|
const keys = Object.keys(substitution);
|
|
860
836
|
return keys.length === 1 && keys[0] === TAP_PAYMENTS_FIELD && typeof substitution.encryptedData === "string" ? substitution.encryptedData : null;
|
|
861
837
|
}
|
|
862
|
-
function substituteTapPayments(request, substitution) {
|
|
863
|
-
const refusal = tapPaymentsRequestRefusal(request);
|
|
838
|
+
function substituteTapPayments(request, substitution, pins = TAP_PAYMENTS_MERCHANT_PINS) {
|
|
839
|
+
const refusal = tapPaymentsRequestRefusal(request, pins);
|
|
864
840
|
if (refusal)
|
|
865
841
|
throw new SubstitutionError(tapPaymentsRefusalMessage(refusal));
|
|
866
842
|
const value = substitutionOf(substitution);
|
|
867
843
|
if (value === null)
|
|
868
844
|
throw new SubstitutionError("the substitution must carry exactly encryptedData");
|
|
869
|
-
const merchantPin = tapPaymentsMerchantPin(tapPaymentsRequestKey(request));
|
|
845
|
+
const merchantPin = tapPaymentsMerchantPin(tapPaymentsRequestKey(request), pins);
|
|
870
846
|
if (!isTapPaymentsCiphertextUnderPin(value, merchantPin)) {
|
|
871
847
|
throw new SubstitutionError("substitution for encryptedData does not have the size and range of the merchant's pinned key");
|
|
872
848
|
}
|
|
@@ -894,14 +870,14 @@ function swappedBody(body, value) {
|
|
|
894
870
|
}
|
|
895
871
|
return out;
|
|
896
872
|
}
|
|
897
|
-
function tapPaymentsSubstitutionsRefusal(template, substitution) {
|
|
873
|
+
function tapPaymentsSubstitutionsRefusal(template, substitution, pins = TAP_PAYMENTS_MERCHANT_PINS) {
|
|
898
874
|
const refuseWith = (message) => ({ code: "invalid_substitutions", message });
|
|
899
|
-
if (tapPaymentsRequestRefusal(template) !== null)
|
|
875
|
+
if (tapPaymentsRequestRefusal(template, pins) !== null)
|
|
900
876
|
return refuseWith("This authorization is not the card request of a reviewed Tap merchant.");
|
|
901
877
|
const value = substitutionOf(substitution);
|
|
902
878
|
if (value === null)
|
|
903
879
|
return refuseWith("substitutions must carry exactly this field: encryptedData.");
|
|
904
|
-
if (!isTapPaymentsCiphertextUnderPin(value, tapPaymentsMerchantPin(tapPaymentsRequestKey(template)))) {
|
|
880
|
+
if (!isTapPaymentsCiphertextUnderPin(value, tapPaymentsMerchantPin(tapPaymentsRequestKey(template), pins))) {
|
|
905
881
|
return refuseWith("substitutions.encryptedData does not have the size and range of the merchant's pinned key.");
|
|
906
882
|
}
|
|
907
883
|
if (value === JSON.parse(template.body).encryptedData)
|
|
@@ -910,7 +886,7 @@ function tapPaymentsSubstitutionsRefusal(template, substitution) {
|
|
|
910
886
|
return refuseWith("substitutions.encryptedData cannot be written at encryptedData alone in the paused request.");
|
|
911
887
|
return null;
|
|
912
888
|
}
|
|
913
|
-
function tapPaymentsKeyUsable(authorization) {
|
|
889
|
+
function tapPaymentsKeyUsable(authorization, pins = TAP_PAYMENTS_MERCHANT_PINS) {
|
|
914
890
|
if (!record(authorization) || !record(authorization.cse))
|
|
915
891
|
return false;
|
|
916
892
|
const cse = authorization.cse;
|
|
@@ -920,7 +896,7 @@ function tapPaymentsKeyUsable(authorization) {
|
|
|
920
896
|
return false;
|
|
921
897
|
if (!isTapPaymentsTokenUrl(authorization.url))
|
|
922
898
|
return false;
|
|
923
|
-
const merchantPin = tapPaymentsMerchantPin(cse.publishable_key);
|
|
899
|
+
const merchantPin = tapPaymentsMerchantPin(cse.publishable_key, pins);
|
|
924
900
|
if (!merchantPin || cse.environment !== merchantPin.environment || authorization.sandbox !== (merchantPin.environment === "sandbox"))
|
|
925
901
|
return false;
|
|
926
902
|
try {
|
|
@@ -930,6 +906,15 @@ function tapPaymentsKeyUsable(authorization) {
|
|
|
930
906
|
return false;
|
|
931
907
|
}
|
|
932
908
|
}
|
|
909
|
+
function tapPaymentsRowUsable(authorization, pins = TAP_PAYMENTS_MERCHANT_PINS) {
|
|
910
|
+
if (!tapPaymentsKeyUsable(authorization, pins))
|
|
911
|
+
return false;
|
|
912
|
+
const cse = authorization.cse;
|
|
913
|
+
if (tapPaymentsMerchantRefusal(cse.environment, cse.publishable_key, authorization.checkout_origin, pins) !== null)
|
|
914
|
+
return false;
|
|
915
|
+
const paused = { url: authorization.url, method: "POST", headers: authorization.headers, body: authorization.postData };
|
|
916
|
+
return tapPaymentsRequestRefusal(paused, pins) === null && tapPaymentsRequestKey(paused) === cse.publishable_key;
|
|
917
|
+
}
|
|
933
918
|
var ANSWER_LIMIT = 65536;
|
|
934
919
|
var TOKEN_ID = /^tok_[A-Za-z0-9]{8,64}$/;
|
|
935
920
|
var REFUSAL_CODE = /^[A-Za-z0-9_.:-]{1,64}$/;
|
|
@@ -987,4 +972,4 @@ function tapPaymentsAnswerOutcome(status, text, card) {
|
|
|
987
972
|
}
|
|
988
973
|
return { outcome: "approved" };
|
|
989
974
|
}
|
|
990
|
-
export { TAP_PAYMENTS_CAPABILITY, TAP_PAYMENTS_FIELD, TAP_PAYMENTS_HOST, TAP_PAYMENTS_MERCHANT_PINS, TAP_PAYMENTS_OPERATION, TAP_PAYMENTS_PSP, TAP_PAYMENTS_PURPOSES, TAP_PAYMENTS_REFUSAL_CODES, TAP_PAYMENTS_SCHEME, TAP_PAYMENTS_TOKEN_URL, TapPaymentsError, encryptTapPaymentsCard, isTapPaymentsCiphertext, isTapPaymentsCiphertextUnderPin, isTapPaymentsTokenUrl, substituteTapPayments, tapPaymentsAnswerOutcome, tapPaymentsBodyVerdict, tapPaymentsKeyEnvironment, tapPaymentsKeyUsable, tapPaymentsMerchantPin, tapPaymentsMerchantRefusal, tapPaymentsOrderAmount, tapPaymentsPlaintext, tapPaymentsRefusalCode, tapPaymentsRefusalMessage, tapPaymentsRequestKey, tapPaymentsRequestRefusal, tapPaymentsSubstitutionsRefusal };
|
|
975
|
+
export { TAP_PAYMENTS_CAPABILITY, TAP_PAYMENTS_FIELD, TAP_PAYMENTS_HOST, TAP_PAYMENTS_MERCHANT_PINS, TAP_PAYMENTS_OPERATION, TAP_PAYMENTS_PSP, TAP_PAYMENTS_PURPOSES, TAP_PAYMENTS_REFUSAL_CODES, TAP_PAYMENTS_SCHEME, TAP_PAYMENTS_TOKEN_URL, TapPaymentsError, encryptTapPaymentsCard, isTapPaymentsCiphertext, isTapPaymentsCiphertextUnderPin, isTapPaymentsTokenUrl, substituteTapPayments, tapPaymentsAnswerOutcome, tapPaymentsBodyVerdict, tapPaymentsKeyEnvironment, tapPaymentsKeyUsable, tapPaymentsMerchantPin, tapPaymentsMerchantRefusal, tapPaymentsOrderAmount, tapPaymentsPlaintext, tapPaymentsRefusalCode, tapPaymentsRefusalMessage, tapPaymentsRequestKey, tapPaymentsRequestRefusal, tapPaymentsRowUsable, tapPaymentsSubstitutionsRefusal };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-cards/sdk",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.26",
|
|
4
4
|
"description": "Agentcard's SDK: one client, Agentcard, with two modules. checkout pauses a browser purchase and pays it with the person's own card; voice connects a person to your product once and approves a purchase by voice inside it. Card data never enters your process.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"_comment_test": "check:built runs first and names the command when a file the build generates (the copies in src/, the preflight contracts in dist/, the Kernel inventory) is missing or stale; verify:pack runs last, on the same dist.",
|
|
31
31
|
"check:built": "node scripts/generate-payment-core.mjs --check && node scripts/generate-voice-stream.mjs --check && node scripts/generate-url-masks.mjs --check && node scripts/generate-capabilities.mjs --check && node scripts/generate-agent-amount.mjs --check && node scripts/generate-preflight-contract.mjs --check && node scripts/generate-kernel-native-inventory.mjs --check",
|
|
32
32
|
"verify:pack": "node scripts/verify-pack.mjs",
|
|
33
|
-
"test": "npm run check:built && node test.mjs && node --test lifecycle.test.mjs merchant-abort.test.mjs preparation.test.mjs braintree.test.mjs pre-claim.test.mjs ekashu.test.mjs redsys.test.mjs quickpay.test.mjs paytrail.test.mjs paypal-hosted-fields.test.mjs paypal-card-forms.test.mjs cybersource-secure-acceptance.test.mjs ebanx.test.mjs payrexx.test.mjs payrexx-follow-ups.test.mjs payrexx-adapters.test.mjs autopilot.test.mjs stripe-checkout.test.mjs stripe-setup.test.mjs stripe-legacy-checkout.test.mjs payment-core.test.mjs prepared-processor.test.mjs merchant-hosted.test.mjs merchant-total.test.mjs sandbox-declaration.test.mjs minimum-delay.test.mjs paysafe.test.mjs wix-payments.test.mjs hipay.test.mjs openpay.test.mjs payu.test.mjs attachment.test.mjs worker-targets.test.mjs mercado-checkout.test.mjs mercado-polling.test.mjs amadeus.test.mjs pelecard.test.mjs aci.test.mjs primer.test.mjs payrails.test.mjs elavon-converge.test.mjs voice.test.mjs agentcard.test.mjs buy.test.mjs readme.test.mjs gmo.test.mjs cybersource-flex.test.mjs juspay-gate.test.mjs card-endpoint.test.mjs card-endpoint-fastspring.test.mjs card-endpoint-navigation.test.mjs merchant-session-probe.test.mjs datatrans.test.mjs authorize-net-dpm.test.mjs creditguard.test.mjs eprotect.test.mjs wspay.test.mjs shiji-sts.test.mjs worldline-mycheckout.test.mjs verifone.test.mjs gravy.test.mjs paddle-vgs.test.mjs sbps.test.mjs hold.test.mjs paddle-tokenex.test.mjs lyra.test.mjs gopay.test.mjs paygent.test.mjs twoc2p.test.mjs tap-payments.test.mjs pay-nl.test.mjs toast.test.mjs redact-url.test.mjs hosted-entry.test.mjs comgate.test.mjs przelewy24.test.mjs tokenex-iframe.test.mjs transbank.test.mjs sumup.test.mjs clover.test.mjs eximbay.test.mjs xendit.test.mjs omise.test.mjs fastspring.test.mjs amazon-payment-services.test.mjs barion.test.mjs && node --test preflight-package.test.mjs preflight-collector.test.mjs browser-tests.test.mjs && node --test kernel-native-qualification.test.mjs && node --test ../vault/scripts/recurly-validation/watch-duty-sdk-result.test.mjs && node scripts/verify-pack.mjs",
|
|
33
|
+
"test": "npm run check:built && node test.mjs && node --test lifecycle.test.mjs merchant-abort.test.mjs preparation.test.mjs braintree.test.mjs pre-claim.test.mjs ekashu.test.mjs redsys.test.mjs quickpay.test.mjs paytrail.test.mjs paypal-hosted-fields.test.mjs paypal-card-forms.test.mjs cybersource-secure-acceptance.test.mjs ebanx.test.mjs payrexx.test.mjs payrexx-follow-ups.test.mjs payrexx-adapters.test.mjs autopilot.test.mjs stripe-checkout.test.mjs stripe-setup.test.mjs stripe-legacy-checkout.test.mjs payment-core.test.mjs prepared-processor.test.mjs merchant-hosted.test.mjs merchant-total.test.mjs sandbox-declaration.test.mjs minimum-delay.test.mjs paysafe.test.mjs wix-payments.test.mjs hipay.test.mjs openpay.test.mjs payu.test.mjs attachment.test.mjs worker-targets.test.mjs mercado-checkout.test.mjs mercado-polling.test.mjs amadeus.test.mjs pelecard.test.mjs aci.test.mjs primer.test.mjs payrails.test.mjs elavon-converge.test.mjs voice.test.mjs agentcard.test.mjs buy.test.mjs readme.test.mjs gmo.test.mjs cybersource-flex.test.mjs juspay-gate.test.mjs card-endpoint.test.mjs card-endpoint-fastspring.test.mjs card-endpoint-navigation.test.mjs merchant-session-probe.test.mjs datatrans.test.mjs authorize-net-dpm.test.mjs creditguard.test.mjs eprotect.test.mjs wspay.test.mjs shiji-sts.test.mjs worldline-mycheckout.test.mjs verifone.test.mjs gravy.test.mjs paddle-vgs.test.mjs sbps.test.mjs hold.test.mjs paddle-tokenex.test.mjs lyra.test.mjs gopay.test.mjs paygent.test.mjs twoc2p.test.mjs tap-payments.test.mjs pay-nl.test.mjs toast.test.mjs redact-url.test.mjs hosted-entry.test.mjs comgate.test.mjs przelewy24.test.mjs tokenex-iframe.test.mjs transbank.test.mjs sumup.test.mjs clover.test.mjs eximbay.test.mjs xendit.test.mjs omise.test.mjs fastspring.test.mjs amazon-payment-services.test.mjs barion.test.mjs paymob.test.mjs payu-latam.test.mjs nexi-checkout.test.mjs && node --test preflight-package.test.mjs preflight-collector.test.mjs browser-tests.test.mjs && node --test kernel-native-qualification.test.mjs && node --test ../vault/scripts/recurly-validation/watch-duty-sdk-result.test.mjs && node scripts/verify-pack.mjs",
|
|
34
34
|
"test:browser": "node browser-tests.mjs",
|
|
35
35
|
"check:payment-core": "node scripts/generate-payment-core.mjs --check",
|
|
36
36
|
"check:voice-stream": "node scripts/generate-voice-stream.mjs --check",
|