@agent-cards/sdk 0.23.24 → 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.
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  // Generated from @agent-cards/payment-core. Do not edit.
3
- // artifact-sha256: 4c352f016f43f7758a725419b405e045be30972b855e6400ae2dd3823c5265ab
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`, gated off for every org until an operator
2747
- // lists one (`nexi_checkout:<org>`), and autopilot never sends this request (autopilot.js
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}$`);
@@ -3344,11 +3347,11 @@ var TOKENEX_IFRAME_BODY_KEYS = Object.freeze([
3344
3347
  ]);
3345
3348
  var TOKENEX_IFRAME_TOKEN_SCHEMES = Object.freeze(["sixTOKENfour"]);
3346
3349
  var TOKENEX_IFRAME_REVIEWED_ACCOUNTS = Object.freeze({
3347
- "htp.tokenex.com": Object.freeze({}),
3350
+ "htp.tokenex.com": Object.freeze({ "9014311640612780": "https://www.jetblue.com" }),
3348
3351
  "test-htp.tokenex.com": Object.freeze({})
3349
3352
  });
3350
3353
  var TOKENEX_IFRAME_ACCOUNT_NAMES = Object.freeze({
3351
- "htp.tokenex.com": Object.freeze({}),
3354
+ "htp.tokenex.com": Object.freeze({ "9014311640612780": "JetBlue" }),
3352
3355
  "test-htp.tokenex.com": Object.freeze({})
3353
3356
  });
3354
3357
  var exact = (pattern, value) => typeof value === "string" && pattern.exec(value)?.[0] === value;
@@ -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 pin8 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), publicKeys: Object.freeze([...fields.publicKeys]) });
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
- pin8({
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 pin9 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), storeIds: Object.freeze([...fields.storeIds]) });
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
- pin9({
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
- pin9({
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 pin10 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), keys: Object.freeze([...fields.keys]) });
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
- pin10({ id: "taejai", merchant: "Taejai", origins: ["https://taejai.com"], keys: ["pkey_53q6mm66esjr563ob0h"] }),
3492
- pin10({ id: "socialgiver", merchant: "Socialgiver", origins: ["https://www.socialgiver.com"], keys: ["pkey_5d5o2iahksmyrkybemg"] }),
3493
- pin10({ id: "thireq_pecko_links", merchant: "Thireq Pecko", origins: ["https://linksplus.omise.co"], keys: ["pkey_65w70xniwsinf0gm680"] })
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 CARD_KEYS = Object.freeze([
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 pin11 = (fields) => /* @__PURE__ */ Object.freeze({
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__ */ pin11({
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 KEY = /^pk_(?:test|live)_[A-Za-z0-9_]{1,256}(?![\s\S])/;
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" || !KEY.test(value.publishableKey) || !value.publishableKey.startsWith(`pk_${mode}_`)) || Object.hasOwn(value, "livemode") && value.livemode !== livemode)
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 (!KEY.test(key) || headerKey && headerKey !== key || expected !== void 0 && expected !== key)
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 any[];
22
- declare function tapPaymentsMerchantPin(publishableKey: any, pins?: readonly any[]): any;
23
- declare function tapPaymentsMerchantRefusal(environment: any, publishableKey: any, merchantOrigin: any, pins?: readonly any[]): "tap_payments_merchant_unreviewed" | null;
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: 25bf499d00df8220a58e6f28f22522db1f7a4048dcdbd95ad321614df5b68b6d
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 pin2 = key && typeof key === "object" ? key.sha256 : void 0;
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 pin2 !== "string" || !SHA256_HEX.test(pin2))
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) !== pin2)
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 pin = (fields) => Object.freeze({
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 };
@@ -7,11 +7,15 @@ declare var TOKENEX_IFRAME_REFUSAL_REASONS: readonly string[];
7
7
  declare var TOKENEX_IFRAME_BODY_KEYS: readonly string[];
8
8
  declare var TOKENEX_IFRAME_TOKEN_SCHEMES: readonly string[];
9
9
  declare var TOKENEX_IFRAME_REVIEWED_ACCOUNTS: Readonly<{
10
- "htp.tokenex.com": Readonly<{}>;
10
+ "htp.tokenex.com": Readonly<{
11
+ "9014311640612780": "https://www.jetblue.com";
12
+ }>;
11
13
  "test-htp.tokenex.com": Readonly<{}>;
12
14
  }>;
13
15
  declare var TOKENEX_IFRAME_ACCOUNT_NAMES: Readonly<{
14
- "htp.tokenex.com": Readonly<{}>;
16
+ "htp.tokenex.com": Readonly<{
17
+ "9014311640612780": "JetBlue";
18
+ }>;
15
19
  "test-htp.tokenex.com": Readonly<{}>;
16
20
  }>;
17
21
  declare function tokenexIframeTarget(url: any): {
@@ -37,20 +41,28 @@ declare function tokenexIframeAccount(request: any): {
37
41
  origin: any;
38
42
  } | null;
39
43
  declare function tokenexIframeAccountRefusal(request: any, accounts?: Readonly<{
40
- "htp.tokenex.com": Readonly<{}>;
44
+ "htp.tokenex.com": Readonly<{
45
+ "9014311640612780": "https://www.jetblue.com";
46
+ }>;
41
47
  "test-htp.tokenex.com": Readonly<{}>;
42
48
  }>): "unreviewed_account" | null;
43
49
  declare function tokenexIframeAccountName(request: any, accounts?: Readonly<{
44
- "htp.tokenex.com": Readonly<{}>;
50
+ "htp.tokenex.com": Readonly<{
51
+ "9014311640612780": "https://www.jetblue.com";
52
+ }>;
45
53
  "test-htp.tokenex.com": Readonly<{}>;
46
54
  }>, names?: Readonly<{
47
- "htp.tokenex.com": Readonly<{}>;
55
+ "htp.tokenex.com": Readonly<{
56
+ "9014311640612780": "JetBlue";
57
+ }>;
48
58
  "test-htp.tokenex.com": Readonly<{}>;
49
59
  }>): string | null;
50
60
  declare function tokenexIframeCardType(number: any): string | RegExp | null;
51
61
  declare function tokenexIframeBrandRefusal(body: any, card: any): "unsupported" | "brand_mismatch" | null;
52
62
  declare function tokenexIframeDeviceRefusal(request: any, card: any, accounts?: Readonly<{
53
- "htp.tokenex.com": Readonly<{}>;
63
+ "htp.tokenex.com": Readonly<{
64
+ "9014311640612780": "https://www.jetblue.com";
65
+ }>;
54
66
  "test-htp.tokenex.com": Readonly<{}>;
55
67
  }>): "unsupported" | "brand_mismatch" | "unreviewed_account" | null;
56
68
  declare function tokenexIframeRefusalMessage(reason: any): string;
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  // Generated from @agent-cards/payment-core. Do not edit.
3
- // artifact-sha256: 79eec39d9ea40ae7687f24e640623f854bc1c0754a2553663c0662bd6cb86218
3
+ // artifact-sha256: 01596d96a2321c72cafdda7f9e60136ce5b46747178151f0878190aff8159ea2
4
4
  // src/tokenex-iframe.js
5
5
  var TOKENEX_IFRAME_PSP = "tokenex_iframe";
6
6
  var TOKENEX_IFRAME_CAPABILITY = "tokenex_iframe_tokenize";
@@ -32,11 +32,11 @@ var TOKENEX_IFRAME_BODY_KEYS = Object.freeze([
32
32
  ]);
33
33
  var TOKENEX_IFRAME_TOKEN_SCHEMES = Object.freeze(["sixTOKENfour"]);
34
34
  var TOKENEX_IFRAME_REVIEWED_ACCOUNTS = Object.freeze({
35
- "htp.tokenex.com": Object.freeze({}),
35
+ "htp.tokenex.com": Object.freeze({ "9014311640612780": "https://www.jetblue.com" }),
36
36
  "test-htp.tokenex.com": Object.freeze({})
37
37
  });
38
38
  var TOKENEX_IFRAME_ACCOUNT_NAMES = Object.freeze({
39
- "htp.tokenex.com": Object.freeze({}),
39
+ "htp.tokenex.com": Object.freeze({ "9014311640612780": "JetBlue" }),
40
40
  "test-htp.tokenex.com": Object.freeze({})
41
41
  });
42
42
  var UNSUPPORTED_REFUSAL = "Refusing to pay: unsupported TokenEx card request.";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-cards/sdk",
3
- "version": "0.23.24",
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 && 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",