@agent-cards/sdk 0.23.20 → 0.23.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +55 -2
  2. package/PREFLIGHT.md +6 -0
  3. package/README.md +169 -5
  4. package/dist/amadeus-checkout.generated.d.ts +6 -1
  5. package/dist/amadeus-checkout.generated.js +26 -2
  6. package/dist/card-fields.generated.js +2341 -127
  7. package/dist/cdp.js +199 -28
  8. package/dist/client.d.ts +177 -9
  9. package/dist/client.js +387 -37
  10. package/dist/comgate.d.ts +50 -0
  11. package/dist/comgate.js +80 -0
  12. package/dist/creditguard.generated.js +4 -2
  13. package/dist/cse-body.js +11 -0
  14. package/dist/cybersource-secure-acceptance.generated.d.ts +1 -1
  15. package/dist/ebanx.d.ts +1 -1
  16. package/dist/ebanx.js +1 -1
  17. package/dist/eprotect.generated.d.ts +1 -1
  18. package/dist/eximbay.d.ts +46 -0
  19. package/dist/eximbay.js +69 -0
  20. package/dist/gmo.generated.js +7 -3
  21. package/dist/hipay.generated.d.ts +5 -5
  22. package/dist/hipay.generated.js +5 -2
  23. package/dist/hold.d.ts +1 -1
  24. package/dist/hold.js +10 -4
  25. package/dist/hosted-entry.d.ts +4 -0
  26. package/dist/hosted-entry.js +32 -0
  27. package/dist/index.d.ts +1 -0
  28. package/dist/lifecycle.d.ts +9 -4
  29. package/dist/lifecycle.js +16 -4
  30. package/dist/paddle-tokenex.generated.js +7 -3
  31. package/dist/paygent.generated.d.ts +60 -0
  32. package/dist/paygent.generated.js +425 -0
  33. package/dist/payrails.generated.js +7 -3
  34. package/dist/payrexx.d.ts +91 -0
  35. package/dist/payrexx.generated.d.ts +91 -0
  36. package/dist/payrexx.generated.js +536 -0
  37. package/dist/payrexx.js +141 -0
  38. package/dist/pre-claim.d.ts +30 -1
  39. package/dist/pre-claim.js +257 -39
  40. package/dist/preflight-catalog.json +58 -0
  41. package/dist/preflight-schemas.json +4 -0
  42. package/dist/preflight.generated.js +26 -2
  43. package/dist/prepared-processor.d.ts +7 -2
  44. package/dist/prepared-processor.js +16 -2
  45. package/dist/primer.generated.js +2469 -255
  46. package/dist/przelewy24.d.ts +47 -0
  47. package/dist/przelewy24.js +88 -0
  48. package/dist/registry.d.ts +6 -5
  49. package/dist/registry.js +27 -7
  50. package/dist/shiji-sts.generated.js +7 -3
  51. package/dist/stripe-checkout.generated.js +896 -19
  52. package/dist/toast-seal.generated.d.ts +37 -0
  53. package/dist/toast-seal.generated.js +625 -0
  54. package/dist/toast.generated.d.ts +41 -0
  55. package/dist/toast.generated.js +113 -0
  56. package/dist/tokenex-iframe.d.ts +93 -0
  57. package/dist/tokenex-iframe.generated.d.ts +81 -0
  58. package/dist/tokenex-iframe.generated.js +403 -0
  59. package/dist/tokenex-iframe.js +195 -0
  60. package/dist/transbank.d.ts +45 -0
  61. package/dist/transbank.js +73 -0
  62. package/dist/twoc2p.generated.js +7 -3
  63. package/examples/preflight/kernel-native/inventory.json +1 -1
  64. package/package.json +3 -3
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  // Generated from @agent-cards/payment-core. Do not edit.
3
- // artifact-sha256: 7e485110ac882bd8e19be7369be8487a532ae7dc93bde3bf660fecb1851f500e
3
+ // artifact-sha256: 5079a0d54849efcb72153c66e2e73268acb14d5e1da10c04c10a9497b3ac884d
4
4
  // src/card-number-key.js
5
5
  var CARD_NUMBER_KEY = /^(number|card_number|cardnumber|cardNum|card_num|pan)$/i;
6
6
  // src/json-path.js
@@ -101,12 +101,12 @@ function parseConvergeBody(body) {
101
101
  return parsed;
102
102
  }
103
103
  function convergeAmountCents(value) {
104
- const text3 = typeof value === "number" && Number.isFinite(value) ? String(value) : value;
105
- const m = typeof text3 === "string" ? AMOUNT.exec(text3) : null;
104
+ const text8 = typeof value === "number" && Number.isFinite(value) ? String(value) : value;
105
+ const m = typeof text8 === "string" ? AMOUNT.exec(text8) : null;
106
106
  if (!m)
107
107
  return null;
108
- const cents = Number(m[1]) * 100 + Number(((m[2] ?? "") + "00").slice(0, 2));
109
- return Number.isSafeInteger(cents) && cents > 0 ? cents : null;
108
+ const cents2 = Number(m[1]) * 100 + Number(((m[2] ?? "") + "00").slice(0, 2));
109
+ return Number.isSafeInteger(cents2) && cents2 > 0 ? cents2 : null;
110
110
  }
111
111
  function convergeBodyVerdict(body) {
112
112
  const parsed = parseConvergeBody(body);
@@ -357,8 +357,8 @@ var CONTROL = /[\u0000-\u001f\u007f]/;
357
357
  var cardLikeName = (name) => (name.match(/[0-9]/g) ?? []).length >= 12;
358
358
  var record3 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
359
359
  var sameKeys = (value, keys) => {
360
- const own3 = Object.keys(value);
361
- return own3.length === keys.length && own3.every((key, at) => key === keys[at]);
360
+ const own10 = Object.keys(value);
361
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
362
362
  };
363
363
  var refuse4 = (code) => Object.freeze({ verdict: "refuse", code });
364
364
  var CARD4 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
@@ -582,9 +582,9 @@ var K = /* @__PURE__ */ new Uint32Array([
582
582
  3329325298
583
583
  ]);
584
584
  var rotr = (x, n) => x >>> n | x << 32 - n;
585
- function utf8(text3) {
585
+ function utf8(text8) {
586
586
  const out = [];
587
- for (const char of text3) {
587
+ for (const char of text8) {
588
588
  let cp = char.codePointAt(0);
589
589
  if (cp >= 55296 && cp <= 57343)
590
590
  cp = 65533;
@@ -663,10 +663,13 @@ var TYPED_ARRAY = Object.getPrototypeOf(Uint8Array.prototype);
663
663
  var typedArrayName = Object.getOwnPropertyDescriptor(TYPED_ARRAY, Symbol.toStringTag).get;
664
664
  function parseRsaPublicKey(key) {
665
665
  const spki = key && typeof key === "object" ? key.spki : void 0;
666
- const pin5 = key && typeof key === "object" ? key.sha256 : void 0;
666
+ const pin11 = key && typeof key === "object" ? key.sha256 : void 0;
667
+ const named = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "exponent") ? key.exponent : void 0;
668
+ if (named !== void 0 && named !== 17)
669
+ throw refuse6("key");
667
670
  if (typeof spki !== "string" || spki.length > 1024 || spki.length % 4 !== 0 || !BASE64.test(spki))
668
671
  throw refuse6("key");
669
- if (typeof pin5 !== "string" || !SHA256_HEX.test(pin5))
672
+ if (typeof pin11 !== "string" || !SHA256_HEX.test(pin11))
670
673
  throw refuse6("key");
671
674
  let binary;
672
675
  try {
@@ -678,7 +681,7 @@ function parseRsaPublicKey(key) {
678
681
  if (btoa(binary) !== spki)
679
682
  throw refuse6("key");
680
683
  const der = Uint8Array.from(binary, (c) => c.charCodeAt(0));
681
- if (sha256Hex(der) !== pin5)
684
+ if (sha256Hex(der) !== pin11)
682
685
  throw refuse6("key");
683
686
  const outer = readElement(der, 0, 48);
684
687
  if (outer.end !== der.length || outer.start + RSA_ALGORITHM.length > der.length)
@@ -699,9 +702,10 @@ function parseRsaPublicKey(key) {
699
702
  if (!MODULUS_BYTES.includes(n.length) || !(n[0] & 128) || !(n[n.length - 1] & 1))
700
703
  throw refuse6("key");
701
704
  const e = exponent.bytes;
702
- if (e.length !== 3 || e[0] !== 1 || e[1] !== 0 || e[2] !== 1)
705
+ const expected = named === 17 ? [17] : [1, 0, 1];
706
+ if (e.length !== expected.length || !expected.every((byte, i) => e[i] === byte))
703
707
  throw refuse6("key");
704
- return Object.freeze({ n: toBigInt(n), e: 65537n, size: n.length });
708
+ return Object.freeze({ n: toBigInt(n), e: named === 17 ? 17n : 65537n, size: n.length });
705
709
  }
706
710
  function readElement(der, at, tag) {
707
711
  if (at + 2 > der.length || der[at] !== tag)
@@ -767,8 +771,8 @@ var PADDLE_TOKENEX_PSP = "paddle_tokenex";
767
771
  var PADDLE_TOKENEX_FACT_KEYS = /* @__PURE__ */ Object.freeze(["card_first_six", "card_last_four", "expiry_month", "expiry_year", "card_brand"]);
768
772
  var record4 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
769
773
  var sameKeys2 = (value, keys) => {
770
- const own3 = Object.keys(value);
771
- return own3.length === keys.length && own3.every((key, at) => key === keys[at]);
774
+ const own10 = Object.keys(value);
775
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
772
776
  };
773
777
  var refuse7 = (code) => Object.freeze({ verdict: "refuse", code });
774
778
  var CARD6 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
@@ -1257,8 +1261,8 @@ var TEXT_LIMIT = 256;
1257
1261
  var CONTROL4 = /[\u0000-\u001f\u007f]/;
1258
1262
  var record6 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
1259
1263
  var sameKeys3 = (value, keys) => {
1260
- const own3 = Object.keys(value);
1261
- return own3.length === keys.length && own3.every((key, at) => key === keys[at]);
1264
+ const own10 = Object.keys(value);
1265
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
1262
1266
  };
1263
1267
  var plainText = (value) => typeof value === "string" && value.length <= TEXT_LIMIT && !CONTROL4.test(value) && (value.match(/[0-9]/g) ?? []).length < 12;
1264
1268
  var refuse9 = (code) => Object.freeze({ verdict: "refuse", code });
@@ -1288,13 +1292,13 @@ function billingFields(value) {
1288
1292
  if (names.length > MAX_FIELDS)
1289
1293
  return false;
1290
1294
  return names.every((name) => {
1291
- const field = value[name];
1295
+ const field2 = value[name];
1292
1296
  if (!FIELD_NAME.test(name))
1293
1297
  return false;
1294
- if (!record6(field))
1295
- return billingText(field);
1296
- const nested = Object.keys(field);
1297
- return nested.length <= MAX_NESTED_FIELDS && nested.every((key) => FIELD_NAME.test(key) && billingText(field[key]));
1298
+ if (!record6(field2))
1299
+ return billingText(field2);
1300
+ const nested = Object.keys(field2);
1301
+ return nested.length <= MAX_NESTED_FIELDS && nested.every((key) => FIELD_NAME.test(key) && billingText(field2[key]));
1298
1302
  });
1299
1303
  }
1300
1304
  function wixPaymentsBodyVerdict(body) {
@@ -1368,14 +1372,14 @@ function readJson2(body) {
1368
1372
  catch {
1369
1373
  return { parsed: null, exact: false };
1370
1374
  }
1371
- let exact2 = false;
1375
+ let exact4 = false;
1372
1376
  try {
1373
- exact2 = body.length <= BODY_LIMIT6 && JSON.stringify(parsed) === body;
1377
+ exact4 = body.length <= BODY_LIMIT6 && JSON.stringify(parsed) === body;
1374
1378
  }
1375
1379
  catch {
1376
- exact2 = false;
1380
+ exact4 = false;
1377
1381
  }
1378
- return { parsed, exact: exact2 };
1382
+ return { parsed, exact: exact4 };
1379
1383
  }
1380
1384
  function billingValue(value) {
1381
1385
  if (value === UNDEFINED)
@@ -1430,14 +1434,14 @@ function attachType(parsed) {
1430
1434
  return typeof type === "string" ? type : null;
1431
1435
  }
1432
1436
  function paymongoBodyVerdict(body, session) {
1433
- const { parsed, exact: exact2 } = readJson2(body);
1437
+ const { parsed, exact: exact4 } = readJson2(body);
1434
1438
  const type = parsed === null ? null : attachType(parsed);
1435
1439
  if (type !== "card") {
1436
1440
  if (parsed === null)
1437
1441
  return body === void 0 || body === null || body === "" ? CONTINUE4 : refuse10("paymongo_body_unsupported");
1438
1442
  return namesCardValue(parsed) ? refuse10("paymongo_body_unsupported") : CONTINUE4;
1439
1443
  }
1440
- if (!exact2)
1444
+ if (!exact4)
1441
1445
  return refuse10("paymongo_body_unsupported");
1442
1446
  const code = judgeCardAttach(parsed, session);
1443
1447
  return code === null ? CARD9 : refuse10(code);
@@ -1460,15 +1464,15 @@ var EXPIRATION = /^[0-9]{2}(?:0[1-9]|1[0-2])$/;
1460
1464
  var CARD_PAYMENT = "PAYMENT_CARD";
1461
1465
  var record8 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
1462
1466
  var sameKeys4 = (value, keys) => {
1463
- const own3 = Object.keys(value);
1464
- return own3.length === keys.length && own3.every((key, at) => key === keys[at]);
1467
+ const own10 = Object.keys(value);
1468
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
1465
1469
  };
1466
1470
  var refuse11 = (code) => Object.freeze({ verdict: "refuse", code });
1467
1471
  var CARD10 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
1468
- function luhn(digits) {
1472
+ function luhn(digits3) {
1469
1473
  let sum = 0;
1470
- for (let at = 0; at < digits.length; at += 1) {
1471
- let digit = Number(digits[digits.length - 1 - at]);
1474
+ for (let at = 0; at < digits3.length; at += 1) {
1475
+ let digit = Number(digits3[digits3.length - 1 - at]);
1472
1476
  if (at % 2 === 1) {
1473
1477
  digit *= 2;
1474
1478
  if (digit > 9)
@@ -1476,7 +1480,7 @@ function luhn(digits) {
1476
1480
  }
1477
1481
  sum += digit;
1478
1482
  }
1479
- return sum % 10 === 0;
1483
+ return sum > 0 && sum % 10 === 0;
1480
1484
  }
1481
1485
  function gopayCardFormUrl(url) {
1482
1486
  if (typeof url !== "string" || url.length > 2048 || url.includes("#"))
@@ -1540,6 +1544,9 @@ function gopayBodyVerdict(body, url) {
1540
1544
  return refuse11("gopay_signature_mismatch");
1541
1545
  return CARD10;
1542
1546
  }
1547
+ var GOPAY_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
1548
+ Object.freeze({ id: "caramilla", merchant: "Caramilla.cz", origins: Object.freeze(["https://www.caramilla.cz"]) })
1549
+ ]);
1543
1550
  // src/payrexx.js
1544
1551
  var PAYREXX_PSP = "payrexx";
1545
1552
  var PAYREXX_FRAME_HOST = "checkout.payrexx.com";
@@ -1612,10 +1619,10 @@ function readForm2(body) {
1612
1619
  return null;
1613
1620
  }
1614
1621
  }
1615
- function cardNetwork2(digits) {
1616
- if (VISA2.test(digits))
1622
+ function cardNetwork2(digits3) {
1623
+ if (VISA2.test(digits3))
1617
1624
  return "visa";
1618
- return MASTERCARD2.test(digits) ? "mastercard" : null;
1625
+ return MASTERCARD2.test(digits3) ? "mastercard" : null;
1619
1626
  }
1620
1627
  function judgeBody2(body) {
1621
1628
  const pairs = readForm2(body);
@@ -1639,7 +1646,7 @@ function judgeBody2(body) {
1639
1646
  }
1640
1647
  const number = value["card[number]"];
1641
1648
  const network = GROUPED.test(number) ? cardNetwork2(number.replace(/ /g, "")) : null;
1642
- if (network === null || value["card[brand]"] !== network || !SECURITY_CODE7.test(value["card[cvc]"]) || !MONTH3.test(value["card[exp_month]"]) || !YEAR3.test(value["card[exp_year]"]) || !HOLDER2.test(value["card[cardholder]"]) || !INSTANCE.test(value.instance) || !AMOUNT2.test(value.amount) || !CURRENCY.test(value.currency) || !(value.email === "" || value.email.length <= 254 && EMAIL.test(value.email)) || !FLAGS.every((flag) => value[flag] === "true" || value[flag] === "false")) {
1649
+ if (network === null || value["card[brand]"] !== network || !SECURITY_CODE7.test(value["card[cvc]"]) || !MONTH3.test(value["card[exp_month]"]) || !YEAR3.test(value["card[exp_year]"]) || !HOLDER2.test(value["card[cardholder]"]) || !INSTANCE.test(value.instance) || !AMOUNT2.test(value.amount) || !CURRENCY.test(value.currency) || !(value.email === "" || value.email.length <= 254 && EMAIL.test(value.email)) || !FLAGS.every((flag3) => value[flag3] === "true" || value[flag3] === "false")) {
1643
1650
  return { verdict: refuse12("payrexx_body_unsupported"), pairs: null };
1644
1651
  }
1645
1652
  if (value.isTokenization === "true" || value.isSubscription === "true")
@@ -1688,8 +1695,8 @@ var LOCALE = /^[a-z]{2}(?:-[A-Za-z]{2,4})?$/;
1688
1695
  var PAN_LIKE3 = /(?:[0-9][ _.:-]*){12,}/;
1689
1696
  var record9 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
1690
1697
  var sameKeys5 = (value, keys) => {
1691
- const own3 = Object.keys(value);
1692
- return own3.length === keys.length && own3.every((key, at) => key === keys[at]);
1698
+ const own10 = Object.keys(value);
1699
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
1693
1700
  };
1694
1701
  var refuse13 = (code) => Object.freeze({ verdict: "refuse", code });
1695
1702
  var CARD12 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
@@ -1855,6 +1862,17 @@ function paygentRequestVerdict(url, body) {
1855
1862
  const key = pairs[1][1];
1856
1863
  return (environment2 === "production" ? LIVE_KEY : SANDBOX_KEY).test(key) ? CARD13 : refuse14("paygent_key_environment");
1857
1864
  }
1865
+ var pin4 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]) });
1866
+ var PAYGENT_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
1867
+ pin4({
1868
+ id: "fundex_tcs_eng",
1869
+ merchant: "Tokyo Chinese School",
1870
+ merchantId: "60362",
1871
+ keySha256: "6073dee112b1e4089025d1c1f3c4cfad818c314a81943ffa55b839cb2df51018",
1872
+ origins: ["https://fundexapp.jp"],
1873
+ currency: "jpy"
1874
+ })
1875
+ ]);
1858
1876
  // src/multipart-form.js
1859
1877
  var BODY_LIMIT11 = 65536;
1860
1878
  var CRLF = "\r\n";
@@ -1962,9 +1980,9 @@ var PAY_NL_CARD_PARTS = /* @__PURE__ */ Object.freeze([
1962
1980
  "payment[card][expire_month]",
1963
1981
  "payment[card][expire_year]"
1964
1982
  ]);
1965
- var pin4 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), serviceIds: Object.freeze([...fields.serviceIds]) });
1983
+ var pin5 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), serviceIds: Object.freeze([...fields.serviceIds]) });
1966
1984
  var PAY_NL_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
1967
- pin4({ id: "weeztix", merchant: "Weeztix", origins: ["https://shop.weeztix.com"], serviceIds: ["SL-6399-2740"] })
1985
+ pin5({ id: "weeztix", merchant: "Weeztix", origins: ["https://shop.weeztix.com"], serviceIds: ["SL-6399-2740"] })
1968
1986
  ]);
1969
1987
  var RULE = /* @__PURE__ */ Object.freeze({ parts: PAY_NL_PARTS, card: PAY_NL_CARD_PARTS });
1970
1988
  var SERVICE_ID = /^SL-\d{4}-\d{4}$/;
@@ -1974,7 +1992,7 @@ var HOLDER3 = /^\p{L}+(?: \p{L}+)*$/u;
1974
1992
  var HOLDER_LIMIT2 = 256;
1975
1993
  var SECURITY_CODE10 = /^[0-9]{3,4}$/;
1976
1994
  var MONTH6 = /^(?:0[1-9]|1[0-2])$/;
1977
- var YEAR6 = /^[0-9]{2}$/;
1995
+ var YEAR6 = /^(?:[0-9]{2}|20[0-9]{2})$/;
1978
1996
  var refuse15 = (code) => Object.freeze({ verdict: "refuse", code });
1979
1997
  var CARD14 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
1980
1998
  function isPayNlTokenUrl(url) {
@@ -2080,10 +2098,10 @@ var wellFormed = (value) => {
2080
2098
  var plainText2 = (value) => typeof value === "string" && value.length >= 1 && value.length <= TEXT_LIMIT2 && !CONTROL5.test(value) && (value.match(/[0-9]/g) ?? []).length < 12 && wellFormed(value);
2081
2099
  var between = (value, min, max) => Number.isSafeInteger(value) && value >= min && value <= max;
2082
2100
  var NETWORK = /^(?:4[0-9]{15}|4[0-9]{12}|5[1-5][0-9]{14}|2(?:2(?:2[1-9]|[3-9][0-9])|[3-6][0-9]{2}|7(?:[01][0-9]|20))[0-9]{12}|3[47][0-9]{13})$/;
2083
- var luhn2 = (digits) => {
2101
+ var luhn2 = (digits3) => {
2084
2102
  let sum = 0;
2085
- for (let at = 0; at < digits.length; at += 1) {
2086
- let d = digits.charCodeAt(digits.length - 1 - at) - 48;
2103
+ for (let at = 0; at < digits3.length; at += 1) {
2104
+ let d = digits3.charCodeAt(digits3.length - 1 - at) - 48;
2087
2105
  if (at % 2 === 1) {
2088
2106
  d *= 2;
2089
2107
  if (d > 9)
@@ -2094,7 +2112,7 @@ var luhn2 = (digits) => {
2094
2112
  return sum % 10 === 0;
2095
2113
  };
2096
2114
  var ANY_NETWORK = /^[2-6][0-9]{12,18}$/;
2097
- var holdsCardShape = (text3, shape = NETWORK) => (text3.match(/[0-9]{13,}/g) ?? []).some((run) => run.length > 19 || shape.test(run) && luhn2(run));
2115
+ var holdsCardShape = (text8, shape = NETWORK) => (text8.match(/[0-9]{13,}/g) ?? []).some((run) => run.length > 19 || shape.test(run) && luhn2(run));
2098
2116
  var phone = (value) => typeof value === "string" && PHONE.test(value) && (value.match(/[0-9]/g) ?? []).length >= 6 && (value.match(/[0-9]/g) ?? []).length <= 15;
2099
2117
  var refuse16 = (code) => Object.freeze({ verdict: "refuse", code });
2100
2118
  var CARD15 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
@@ -2305,10 +2323,10 @@ function orderedSubset(value, keys) {
2305
2323
  }
2306
2324
  return true;
2307
2325
  }
2308
- function luhn3(digits) {
2326
+ function luhn3(digits3) {
2309
2327
  let sum = 0;
2310
- for (let at = 0; at < digits.length; at += 1) {
2311
- let digit = Number(digits[digits.length - 1 - at]);
2328
+ for (let at = 0; at < digits3.length; at += 1) {
2329
+ let digit = Number(digits3[digits3.length - 1 - at]);
2312
2330
  if (at % 2 === 1) {
2313
2331
  digit *= 2;
2314
2332
  if (digit > 9)
@@ -2322,13 +2340,13 @@ var printable = (value) => [...value].every((ch) => ch.charCodeAt(0) >= 32 && ch
2322
2340
  function typed(value, limit = 256) {
2323
2341
  return typeof value === "string" && value.length >= 1 && value.length <= limit && !PAN_LIKE4.test(value) && printable(value);
2324
2342
  }
2325
- function decodeBase64(text3) {
2326
- if (typeof text3 !== "string" || !BASE643.test(text3) || text3.length % 4 !== 0)
2343
+ function decodeBase64(text8) {
2344
+ if (typeof text8 !== "string" || !BASE643.test(text8) || text8.length % 4 !== 0)
2327
2345
  return null;
2328
2346
  let bits = 0;
2329
2347
  let value = 0;
2330
2348
  let out = "";
2331
- for (const ch of text3.replace(/=+$/, "")) {
2349
+ for (const ch of text8.replace(/=+$/, "")) {
2332
2350
  value = (value << 6 | BASE64_ALPHABET.indexOf(ch)) & 16777215;
2333
2351
  bits += 6;
2334
2352
  if (bits >= 8) {
@@ -2338,8 +2356,8 @@ function decodeBase64(text3) {
2338
2356
  }
2339
2357
  return out;
2340
2358
  }
2341
- function soundDevice(text3) {
2342
- const json = decodeBase64(text3);
2359
+ function soundDevice(text8) {
2360
+ const json = decodeBase64(text8);
2343
2361
  if (json === null)
2344
2362
  return false;
2345
2363
  let value;
@@ -2457,17 +2475,17 @@ function sumupBodyVerdict(body, url) {
2457
2475
  var SALTED = /* @__PURE__ */ Object.freeze([83, 97, 108, 116, 101, 100, 95, 95]);
2458
2476
  var B64 = /^[A-Za-z0-9+/]+={0,2}$/;
2459
2477
  var FIELD_LIMIT = 1024;
2460
- function decodeCanonical(text3) {
2461
- if (typeof text3 !== "string" || text3.length === 0 || text3.length % 4 !== 0 || !B64.test(text3))
2478
+ function decodeCanonical(text8) {
2479
+ if (typeof text8 !== "string" || text8.length === 0 || text8.length % 4 !== 0 || !B64.test(text8))
2462
2480
  return null;
2463
2481
  let binary;
2464
2482
  try {
2465
- binary = atob(text3);
2483
+ binary = atob(text8);
2466
2484
  }
2467
2485
  catch {
2468
2486
  return null;
2469
2487
  }
2470
- if (btoa(binary) !== text3)
2488
+ if (btoa(binary) !== text8)
2471
2489
  return null;
2472
2490
  return Uint8Array.from(binary, (char) => char.charCodeAt(0));
2473
2491
  }
@@ -2709,8 +2727,8 @@ var TEXT_LIMIT3 = 256;
2709
2727
  var CONTROL7 = /[\u0000-\u001f\u007f]/;
2710
2728
  var record13 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
2711
2729
  var sameKeys7 = (value, keys) => {
2712
- const own3 = Object.keys(value);
2713
- return own3.length === keys.length && own3.every((key, at) => key === keys[at]);
2730
+ const own10 = Object.keys(value);
2731
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
2714
2732
  };
2715
2733
  var plainText3 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT3 && !CONTROL7.test(value) && (value.match(/[0-9]/g) ?? []).length < 12;
2716
2734
  var refuse19 = (code) => Object.freeze({ verdict: "refuse", code });
@@ -2754,6 +2772,10 @@ function hipayBodyVerdict(body) {
2754
2772
  return refuse19("hipay_keeps_card");
2755
2773
  return value.multi_use === 0 ? CARD18 : refuse19("hipay_body_unsupported");
2756
2774
  }
2775
+ var pin6 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), usernames: Object.freeze([...fields.usernames]) });
2776
+ var HIPAY_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
2777
+ pin6({ id: "happybulle", merchant: "HappyBulle", origins: ["https://www.happybulle.com"], usernames: ["94683309.secure-gateway.hipay-tpp.com"] })
2778
+ ]);
2757
2779
  // src/amazon-payment-services.js
2758
2780
  var APS_PSP = "amazon_payment_services";
2759
2781
  var APS_HOSTS = /* @__PURE__ */ Object.freeze({ "checkout.payfort.com": "production", "sbcheckout.payfort.com": "sandbox" });
@@ -2898,77 +2920,2269 @@ function apsBodyVerdict(body, url) {
2898
2920
  return code ? { verdict: "refuse", code } : { verdict: "card" };
2899
2921
  }
2900
2922
  var ANSWER_LIMIT = 64 * 1024;
2901
- // src/card-fields.js
2902
- function processorGate(recognizer, url, body) {
2903
- if (recognizer && recognizer.psp === LYRA_PSP)
2904
- return lyraBodyVerdict(body, url);
2905
- if (recognizer && recognizer.psp === WIX_PAYMENTS_PSP) {
2906
- if (url !== void 0 && !isWixPaymentsTokenizeUrl(url))
2907
- return { verdict: "refuse", code: "wix_payments_url_refused" };
2908
- return wixPaymentsBodyVerdict(body);
2923
+ // src/paypal.js
2924
+ var PAYPAL_PSP = "paypal";
2925
+ var PAYPAL_CONFIRM_HOSTS = /* @__PURE__ */ Object.freeze(["www.paypal.com", "www.sandbox.paypal.com", "api-m.paypal.com", "api-m.sandbox.paypal.com"]);
2926
+ var CONFIRM_PATH = /^\/v2\/checkout\/orders\/([A-Z0-9]{1,36})\/confirm-payment-source$/;
2927
+ var BODY_LIMIT17 = 8192;
2928
+ var CARD_KEYS8 = /* @__PURE__ */ Object.freeze(["number", "expiry", "security_code", "name", "billing_address", "attributes", "brand_preference"]);
2929
+ var ADDRESS_KEYS3 = /* @__PURE__ */ Object.freeze([
2930
+ "address_line_1",
2931
+ "address_line_2",
2932
+ "address_line_3",
2933
+ "admin_area_1",
2934
+ "admin_area_2",
2935
+ "admin_area_3",
2936
+ "admin_area_4",
2937
+ "postal_code",
2938
+ "country_code"
2939
+ ]);
2940
+ var CONTROL8 = /[\u0000-\u001f\u007f]/;
2941
+ var TEXT_LIMIT4 = 300;
2942
+ var cardLike = (value) => (value.match(/[0-9]/g) ?? []).length >= 12;
2943
+ var text3 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT4 && !CONTROL8.test(value) && !cardLike(value);
2944
+ var record14 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
2945
+ var own3 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
2946
+ var keysWithin2 = (value, allowed) => record14(value) && Object.keys(value).every((key) => allowed.includes(key));
2947
+ var refuse20 = (code) => Object.freeze({ verdict: "refuse", code });
2948
+ var CARD19 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
2949
+ var CONTINUE9 = /* @__PURE__ */ Object.freeze({ verdict: "continue" });
2950
+ function paypalConfirmOrderId(url) {
2951
+ if (typeof url !== "string" || url.length > 256 || url.includes("?") || url.includes("#"))
2952
+ return null;
2953
+ let parsed;
2954
+ try {
2955
+ parsed = new URL(url);
2909
2956
  }
2910
- if (recognizer && recognizer.psp === KOMOJU_PSP)
2911
- return komojuBodyVerdict(body, url);
2912
- if (recognizer && recognizer.psp === HIPAY_PSP) {
2913
- if (url !== void 0 && !isHipayTokenUrl(url))
2914
- return { verdict: "refuse", code: "hipay_url_refused" };
2915
- return hipayBodyVerdict(body);
2957
+ catch {
2958
+ return null;
2916
2959
  }
2917
- if (recognizer && recognizer.psp === PADDLE_VGS_PSP) {
2918
- if (url !== void 0 && !isPaddleVgsCardsUrl(url))
2919
- return { verdict: "refuse", code: "paddle_vgs_url_refused" };
2920
- return paddleVgsBodyVerdict(body);
2960
+ if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !PAYPAL_CONFIRM_HOSTS.includes(parsed.hostname))
2961
+ return null;
2962
+ return CONFIRM_PATH.exec(parsed.pathname)?.[1] ?? null;
2963
+ }
2964
+ function isPaypalConfirmUrl(url) {
2965
+ return paypalConfirmOrderId(url) !== null;
2966
+ }
2967
+ function readBody10(body) {
2968
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT17)
2969
+ return null;
2970
+ let value;
2971
+ try {
2972
+ value = JSON.parse(body);
2973
+ if (!record14(value) || JSON.stringify(value) !== body)
2974
+ return null;
2921
2975
  }
2922
- if (recognizer && recognizer.psp === PAYFAST_PSP) {
2923
- if (url !== void 0 && !isPayfastPayUrl(url))
2924
- return { verdict: "refuse", code: "payfast_url_refused" };
2925
- return payfastBodyVerdict(body);
2976
+ catch {
2977
+ return null;
2926
2978
  }
2927
- if (recognizer && recognizer.psp === PAYREXX_PSP) {
2928
- return url !== void 0 ? payrexxGateVerdict(url, body) : payrexxBodyVerdict(body);
2979
+ return value;
2980
+ }
2981
+ var typedNumber = (value) => typeof value === "string" && value.length <= 23 && /^[0-9]+(?: [0-9]+)*$/.test(value) && value.replace(/ /g, "").length >= 12 && value.replace(/ /g, "").length <= 19;
2982
+ function installmentsOk(value) {
2983
+ if (!keysWithin2(value, ["term", "interval_duration"]) || Object.keys(value).length === 0)
2984
+ return false;
2985
+ if (own3(value, "term") && !(Number.isSafeInteger(value.term) && value.term >= 1 && value.term <= 99))
2986
+ return false;
2987
+ return !own3(value, "interval_duration") || typeof value.interval_duration === "string" && /^P[0-9]{1,3}[DWMY]$/.test(value.interval_duration);
2988
+ }
2989
+ function paypalBodyVerdict(body) {
2990
+ const value = readBody10(body);
2991
+ if (value === null)
2992
+ return refuse20("paypal_body_unsupported");
2993
+ const source = value.payment_source;
2994
+ const card = record14(source) ? source.card : void 0;
2995
+ const number = record14(card) ? card.number : void 0;
2996
+ if (number === void 0 || number === null || number === "")
2997
+ return CONTINUE9;
2998
+ const context = value.application_context;
2999
+ const attributes = record14(card.attributes) ? card.attributes : null;
3000
+ if (record14(context) && context.vault === true || own3(card, "stored_credential") || attributes && (own3(attributes, "vault") || own3(attributes, "customer")))
3001
+ return refuse20("paypal_card_on_file");
3002
+ if (attributes && record14(attributes.verification) && attributes.verification.method === "SCA_ALWAYS")
3003
+ return refuse20("paypal_three_ds");
3004
+ if (!keysWithin2(value, ["payment_source"]) || !keysWithin2(source, ["card"]) || !keysWithin2(card, CARD_KEYS8) || !typedNumber(card.number) || typeof card.expiry !== "string" || !/^[0-9]{4}-(?:0[1-9]|1[0-2])$/.test(card.expiry))
3005
+ return refuse20("paypal_body_unsupported");
3006
+ if (own3(card, "security_code") && !(typeof card.security_code === "string" && /^[0-9]{3,4}$/.test(card.security_code)))
3007
+ return refuse20("paypal_body_unsupported");
3008
+ if (own3(card, "name") && !(text3(card.name) && card.name.trim() !== ""))
3009
+ return refuse20("paypal_body_unsupported");
3010
+ if (own3(card, "brand_preference") && !(typeof card.brand_preference === "string" && /^[A-Z][A-Z_]{1,31}$/.test(card.brand_preference))) {
3011
+ return refuse20("paypal_body_unsupported");
3012
+ }
3013
+ if (own3(card, "billing_address") && !(keysWithin2(card.billing_address, ADDRESS_KEYS3) && Object.values(card.billing_address).every(text3))) {
3014
+ return refuse20("paypal_body_unsupported");
3015
+ }
3016
+ if (own3(card, "attributes") && !(keysWithin2(attributes, ["installments"]) && installmentsOk(attributes.installments))) {
3017
+ return refuse20("paypal_body_unsupported");
3018
+ }
3019
+ return CARD19;
3020
+ }
3021
+ // src/clover.js
3022
+ var CLOVER_PSP = "clover";
3023
+ var CLOVER_TOKEN_HOSTS = /* @__PURE__ */ Object.freeze({ "token.clover.com": "production", "token-sandbox.dev.clover.com": "test" });
3024
+ var CLOVER_TOKEN_PATH = "/v1/tokens";
3025
+ var BODY_LIMIT18 = 4096;
3026
+ var REQUIRED_KEYS = /* @__PURE__ */ Object.freeze(["encrypted_pan", "exp_month", "exp_year", "cvv", "first6", "last4", "brand"]);
3027
+ var OPTIONAL_KEYS = /* @__PURE__ */ Object.freeze(["address_line1", "phone_numbers", "email_address", "name", "address_zip"]);
3028
+ var CARD_ORDER = /* @__PURE__ */ Object.freeze([...REQUIRED_KEYS, ...OPTIONAL_KEYS]);
3029
+ var ENCRYPTED_PAN = /^[A-Za-z0-9+/]{341}[AQgw]==$/;
3030
+ var MONTH9 = /^(?:[1-9]|1[0-2])$/;
3031
+ var YEAR9 = /^(?:[0-9]|[1-9][0-9])$/;
3032
+ var CODE3 = /^[0-9]{3,4}$/;
3033
+ var FIRST6 = /^[0-9]{6}$/;
3034
+ var LAST4 = /^[0-9]{4}$/;
3035
+ var BRANDS = /* @__PURE__ */ new Set(["VISA", "MC", "AMEX", "DISCOVER", "DINERS_CLUB", "JCB"]);
3036
+ var PHONE_TYPES = /* @__PURE__ */ new Set(["home_number", "mobile_number", "work_number"]);
3037
+ var COUNTRY_CODE2 = /^[0-9]{1,4}$/;
3038
+ var SUBSCRIBER = /^[0-9]{1,11}$/;
3039
+ var POSTAL_CODE2 = /^[A-Za-z0-9]{1,10}$/;
3040
+ var TEXT_LIMIT5 = 256;
3041
+ var EMAIL_LIMIT = 254;
3042
+ var CARD_LIKE_RUN = /[0-9]{12,}/;
3043
+ var record15 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3044
+ var own4 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
3045
+ var refuse21 = (code) => Object.freeze({ verdict: "refuse", code });
3046
+ var CARD20 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
3047
+ function cloverTokenUrl(url) {
3048
+ if (typeof url !== "string" || url.length > 256 || url.includes("?") || url.includes("#"))
3049
+ return null;
3050
+ let parsed;
3051
+ try {
3052
+ parsed = new URL(url);
2929
3053
  }
2930
- if (recognizer && recognizer.psp === PAYGENT_PSP) {
2931
- return url !== void 0 ? paygentRequestVerdict(url, body) : paygentBodyVerdict(body);
3054
+ catch {
3055
+ return null;
2932
3056
  }
2933
- if (recognizer && recognizer.psp === PAY_NL_PSP) {
2934
- if (url !== void 0 && !isPayNlTokenUrl(url))
2935
- return { verdict: "refuse", code: "pay_nl_url_refused" };
2936
- return payNlBodyVerdict(body);
3057
+ if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password)
3058
+ return null;
3059
+ if (!own4(CLOVER_TOKEN_HOSTS, parsed.hostname) || parsed.pathname !== CLOVER_TOKEN_PATH)
3060
+ return null;
3061
+ return Object.freeze({ host: parsed.hostname, environment: CLOVER_TOKEN_HOSTS[parsed.hostname] });
3062
+ }
3063
+ function cloverBrand(digits3) {
3064
+ if (typeof digits3 !== "string" || !/^[0-9]{6,19}$/.test(digits3))
3065
+ return null;
3066
+ const two = Number(digits3.slice(0, 2));
3067
+ const three = Number(digits3.slice(0, 3));
3068
+ const four = Number(digits3.slice(0, 4));
3069
+ const six = Number(digits3.slice(0, 6));
3070
+ if (digits3.startsWith("4"))
3071
+ return "VISA";
3072
+ if (two === 34 || two === 37)
3073
+ return "AMEX";
3074
+ if (two >= 51 && two <= 55 || four >= 2221 && four < 2721)
3075
+ return "MC";
3076
+ if (four >= 3528 && four <= 3589)
3077
+ return "JCB";
3078
+ if (two === 64 || three >= 644 && three <= 659 || four === 6011 || six >= 622129 && six <= 622925)
3079
+ return "DISCOVER";
3080
+ if (two === 36 || two === 38 || two === 39 || three === 309 || three >= 300 && three <= 305)
3081
+ return "DINERS_CLUB";
3082
+ if ([5018, 5020, 5038, 5893, 6e3, 6304, 6759, 6761, 6762, 6763, 6799].includes(four))
3083
+ return "MAESTRO";
3084
+ return "UNKNOWN";
3085
+ }
3086
+ var isCiphertext = (value) => typeof value === "string" && ENCRYPTED_PAN.test(value);
3087
+ function readBody11(body) {
3088
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT18)
3089
+ return null;
3090
+ let value;
3091
+ try {
3092
+ value = JSON.parse(body);
3093
+ if (!record15(value) || JSON.stringify(value) !== body)
3094
+ return null;
2937
3095
  }
2938
- if (recognizer && recognizer.psp === TWOC2P_PSP) {
2939
- if (url === void 0)
2940
- return twoC2pBodyVerdict(body);
2941
- const target = twoC2pPaymentTarget(url);
3096
+ catch {
3097
+ return null;
3098
+ }
3099
+ return value;
3100
+ }
3101
+ function inFrameOrder(keys) {
3102
+ let last = -1;
3103
+ for (const key of keys) {
3104
+ const at = CARD_ORDER.indexOf(key);
3105
+ if (at <= last)
3106
+ return false;
3107
+ last = at;
3108
+ }
3109
+ return REQUIRED_KEYS.every((key) => keys.includes(key));
3110
+ }
3111
+ var sideText = (value, limit = TEXT_LIMIT5) => typeof value === "string" && value.length <= limit && !CARD_LIKE_RUN.test(value);
3112
+ function isPhoneNumbers(value) {
3113
+ if (!record15(value))
3114
+ return false;
3115
+ const types = Object.keys(value);
3116
+ if (types.length !== 1 || !PHONE_TYPES.has(types[0]))
3117
+ return false;
3118
+ const phone2 = value[types[0]];
3119
+ if (!record15(phone2))
3120
+ return false;
3121
+ const keys = Object.keys(phone2);
3122
+ return keys.length === 2 && keys[0] === "country_code" && keys[1] === "subscriber" && typeof phone2.country_code === "string" && COUNTRY_CODE2.test(phone2.country_code) && typeof phone2.subscriber === "string" && SUBSCRIBER.test(phone2.subscriber);
3123
+ }
3124
+ function isCardMember(card) {
3125
+ if (!record15(card) || !inFrameOrder(Object.keys(card)))
3126
+ return false;
3127
+ if (!isCiphertext(card.encrypted_pan))
3128
+ return false;
3129
+ if (typeof card.exp_month !== "string" || !MONTH9.test(card.exp_month))
3130
+ return false;
3131
+ if (typeof card.exp_year !== "string" || !YEAR9.test(card.exp_year))
3132
+ return false;
3133
+ if (typeof card.cvv !== "string" || !CODE3.test(card.cvv))
3134
+ return false;
3135
+ if (typeof card.first6 !== "string" || !FIRST6.test(card.first6))
3136
+ return false;
3137
+ if (typeof card.last4 !== "string" || !LAST4.test(card.last4))
3138
+ return false;
3139
+ if (typeof card.brand !== "string" || !BRANDS.has(card.brand) || cloverBrand(card.first6) !== card.brand)
3140
+ return false;
3141
+ if (own4(card, "address_line1") && !sideText(card.address_line1))
3142
+ return false;
3143
+ if (own4(card, "phone_numbers") && !isPhoneNumbers(card.phone_numbers))
3144
+ return false;
3145
+ if (own4(card, "email_address") && !(sideText(card.email_address, EMAIL_LIMIT) && /^[^\s@]+@[^\s@]+$/.test(card.email_address)))
3146
+ return false;
3147
+ if (own4(card, "name") && !(sideText(card.name) && card.name !== "" && card.name === card.name.trim()))
3148
+ return false;
3149
+ if (own4(card, "address_zip") && !(typeof card.address_zip === "string" && POSTAL_CODE2.test(card.address_zip)))
3150
+ return false;
3151
+ return true;
3152
+ }
3153
+ function cloverBodyVerdict(body, url) {
3154
+ if (url !== void 0 && cloverTokenUrl(url) === null)
3155
+ return refuse21("clover_url_refused");
3156
+ const value = readBody11(body);
3157
+ if (value === null)
3158
+ return refuse21("clover_body_unsupported");
3159
+ const keys = Object.keys(value);
3160
+ if (keys.length !== 1 || keys[0] !== "card" || !isCardMember(value.card))
3161
+ return refuse21("clover_body_unsupported");
3162
+ return CARD20;
3163
+ }
3164
+ // src/tap-payments.js
3165
+ var TAP_PAYMENTS_PSP = "tap_payments";
3166
+ var TAP_PAYMENTS_TOKEN_URL = "https://sdk.tap.company/v2/card/token";
3167
+ var TAP_PAYMENTS_PURPOSES = /* @__PURE__ */ Object.freeze(["CHARGE", "AUTHORIZE"]);
3168
+ var record16 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3169
+ function isTapPaymentsTokenUrl(url) {
3170
+ return url === TAP_PAYMENTS_TOKEN_URL;
3171
+ }
3172
+ var pin7 = (fields) => Object.freeze({
3173
+ ...fields,
3174
+ origins: Object.freeze([...fields.origins]),
3175
+ sessions: Object.freeze({ ...fields.sessions }),
3176
+ key: Object.freeze({ ...fields.key })
3177
+ });
3178
+ var TAP_PAYMENTS_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
3179
+ pin7({
3180
+ id: "casefilegame",
3181
+ merchant: "Casefilegame",
3182
+ tapMerchantId: "67977048",
3183
+ publishableKey: "pk_live_ydlRjrWcLXaVvpsSBQKOie86",
3184
+ environment: "production",
3185
+ origins: ["https://checkout.tap.company"],
3186
+ // The WooCommerce plugin's redirect (Plugin-WooCommerce-All-in-one tap.php 567-586, read 2026-10-17)
3187
+ // creates the src_all charge with save_card false and names no agreement, subscription or destinations.
3188
+ sessions: { saveCard: false, agreement: false, subscription: false, destinations: false },
3189
+ key: {
3190
+ spki: "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAzja2vB+Iyafj2Mm3pFg65z7Yvj9ZeoFLdMBgWFyyjF020r5HSPKVhuZ39uJkjs0U/kWgEpKDzHZAKdtGv36dS33NjMAzYpgFkD8j+9/YWqpvAGRj5nv1b/q7NaiZk3b1wm7aXHJOx5L6rPQf2qDQxhcSNHocU+Uy8wGmGxRRu6QRKN3khaz4o4jJDzqxns4h/ShzHjdZeWIVfpCAyVoED0IESBYrvGEhJeyKnga5XdHdBU2yP8P1huO4RbSKcZv00ZgxVHAQQ9CqArW3TE8SyLLnJPkSpSHHBnIPSQS1z3ld1mImy/zqTd4ltkV6XHpYqVvoPmys2EuZX3pMvCcPGwIBEQ==",
3191
+ sha256: "6eb4e89a1e05a06a39d631f6fb450c052a9cad9935edc1921e84e80207470552",
3192
+ // The shared parser takes exponent 17 only under a pin that names it (rsa-pkcs1v15.js).
3193
+ exponent: 17
3194
+ }
3195
+ })
3196
+ ]);
3197
+ var BODY_LIMIT19 = 16384;
3198
+ var ROOT_KEYS7 = /* @__PURE__ */ Object.freeze([
3199
+ "encryptedData",
3200
+ "purpose",
3201
+ "customer",
3202
+ "consent",
3203
+ "merchant",
3204
+ "order",
3205
+ "payment_agreement",
3206
+ "client_ip",
3207
+ "device",
3208
+ "browser",
3209
+ "app"
3210
+ ]);
3211
+ var REQUIRED_KEYS2 = /* @__PURE__ */ Object.freeze(["encryptedData", "purpose", "order", "device", "browser", "app"]);
3212
+ var SAVE_PURPOSES = /* @__PURE__ */ Object.freeze(["SAVE_TOKEN", "SAVE_AUTHENTICATED_TOKEN"]);
3213
+ var ORDER_KEYS = /* @__PURE__ */ Object.freeze(["amount", "currency", "id", "description", "metadata", "reference"]);
3214
+ var DEVICE_KEYS3 = /* @__PURE__ */ Object.freeze(["source", "ip"]);
3215
+ var BROWSER_KEYS = /* @__PURE__ */ Object.freeze(["name", "id"]);
3216
+ var APP_KEYS = /* @__PURE__ */ Object.freeze(["identifier", "name", "version", "iframe_version", "sdk_version"]);
3217
+ var CIPHERTEXT_BYTES = /* @__PURE__ */ Object.freeze([128, 256, 384, 512]);
3218
+ var BASE644 = /^[A-Za-z0-9+/]+={0,2}$/;
3219
+ var CURRENCY3 = /^[A-Z]{3}$/;
3220
+ var TEXT_LIMIT6 = 512;
3221
+ var CONTROL9 = /[\u0000-\u001f\u007f]/;
3222
+ var CARD_LONG_DIGITS = /(?:\p{Nd}[\s-]?){12}\p{Nd}/u;
3223
+ var NESTING_LIMIT = 4;
3224
+ var MEMBERS_LIMIT = 64;
3225
+ var refuse22 = (code) => Object.freeze({ verdict: "refuse", code });
3226
+ var CARD21 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
3227
+ function decodedBytes(value) {
3228
+ if (typeof value !== "string" || value.length % 4 !== 0 || !BASE644.test(value))
3229
+ return -1;
3230
+ try {
3231
+ if (btoa(atob(value)) !== value)
3232
+ return -1;
3233
+ }
3234
+ catch {
3235
+ return -1;
3236
+ }
3237
+ const pad = value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0;
3238
+ return value.length / 4 * 3 - pad;
3239
+ }
3240
+ function isTapPaymentsCiphertext(value) {
3241
+ return CIPHERTEXT_BYTES.includes(decodedBytes(value));
3242
+ }
3243
+ function readBody12(body) {
3244
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT19)
3245
+ return null;
3246
+ try {
3247
+ const value = JSON.parse(body);
3248
+ return record16(value) && JSON.stringify(value) === body ? value : null;
3249
+ }
3250
+ catch {
3251
+ return null;
3252
+ }
3253
+ }
3254
+ var inOrder3 = (keys, order) => {
3255
+ let at = -1;
3256
+ for (const key of keys) {
3257
+ const next = order.indexOf(key);
3258
+ if (next <= at)
3259
+ return false;
3260
+ at = next;
3261
+ }
3262
+ return true;
3263
+ };
3264
+ var onlyKeys = (value, allowed) => record16(value) && Object.keys(value).every((key) => allowed.includes(key));
3265
+ var plainText4 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT6 && !CONTROL9.test(value) && !CARD_LONG_DIGITS.test(value);
3266
+ var plainScalar = (value) => value === null || typeof value === "boolean" || typeof value === "number" && Number.isFinite(value) && !CARD_LONG_DIGITS.test(String(value)) || plainText4(value);
3267
+ function plainJson(value, depth = 0, budget = { members: 0 }) {
3268
+ if (depth > NESTING_LIMIT)
3269
+ return false;
3270
+ if (Array.isArray(value)) {
3271
+ budget.members += value.length;
3272
+ return budget.members <= MEMBERS_LIMIT && value.every((item) => plainJson(item, depth + 1, budget));
3273
+ }
3274
+ if (record16(value)) {
3275
+ const keys = Object.keys(value);
3276
+ budget.members += keys.length;
3277
+ return budget.members <= MEMBERS_LIMIT && keys.every((key) => plainText4(key) && plainJson(value[key], depth + 1, budget));
3278
+ }
3279
+ return plainScalar(value);
3280
+ }
3281
+ function soundOrder(order) {
3282
+ if (!onlyKeys(order, ORDER_KEYS) || !inOrder3(Object.keys(order), ORDER_KEYS))
3283
+ return false;
3284
+ if ("amount" in order && !(typeof order.amount === "number" && Number.isFinite(order.amount) && order.amount >= 0 && !CARD_LONG_DIGITS.test(String(order.amount))))
3285
+ return false;
3286
+ if ("currency" in order && !(typeof order.currency === "string" && CURRENCY3.test(order.currency)))
3287
+ return false;
3288
+ if ("id" in order && !plainText4(order.id))
3289
+ return false;
3290
+ if ("description" in order && !plainText4(order.description))
3291
+ return false;
3292
+ if ("metadata" in order && !plainJson(order.metadata))
3293
+ return false;
3294
+ return !("reference" in order) || plainJson(order.reference);
3295
+ }
3296
+ var soundDevice2 = (device) => onlyKeys(device, DEVICE_KEYS3) && inOrder3(Object.keys(device), DEVICE_KEYS3) && (device.source === "web" || device.source === "app") && (!("ip" in device) || plainText4(device.ip));
3297
+ var soundBrowser = (browser) => onlyKeys(browser, BROWSER_KEYS) && inOrder3(Object.keys(browser), BROWSER_KEYS) && (!("name" in browser) || plainText4(browser.name)) && plainText4(browser.id);
3298
+ var versionValue = (value) => plainText4(value) || typeof value === "number" && Number.isFinite(value) && !CARD_LONG_DIGITS.test(String(value));
3299
+ var soundApp = (app) => onlyKeys(app, APP_KEYS) && inOrder3(Object.keys(app), APP_KEYS) && app.identifier === "card_sdk" && app.name === "card_sdk" && ["version", "iframe_version", "sdk_version"].every((key) => !(key in app) || versionValue(app[key]));
3300
+ function tapPaymentsBodyVerdict(body) {
3301
+ const value = readBody12(body);
3302
+ if (value === null)
3303
+ return refuse22("tap_payments_body_unsupported");
3304
+ const keys = Object.keys(value);
3305
+ if (!keys.every((key) => ROOT_KEYS7.includes(key)) || !inOrder3(keys, ROOT_KEYS7) || !REQUIRED_KEYS2.every((key) => keys.includes(key))) {
3306
+ return refuse22("tap_payments_body_unsupported");
3307
+ }
3308
+ if (!isTapPaymentsCiphertext(value.encryptedData))
3309
+ return refuse22("tap_payments_body_unsupported");
3310
+ if (typeof value.purpose !== "string")
3311
+ return refuse22("tap_payments_body_unsupported");
3312
+ if (SAVE_PURPOSES.includes(value.purpose))
3313
+ return refuse22("tap_payments_keep_on_file");
3314
+ if (!TAP_PAYMENTS_PURPOSES.includes(value.purpose))
3315
+ return refuse22("tap_payments_body_unsupported");
3316
+ if ("payment_agreement" in value && value.payment_agreement !== null)
3317
+ return refuse22("tap_payments_keep_on_file");
3318
+ if ("consent" in value) {
3319
+ const consent = value.consent;
3320
+ if (!record16(consent) || Object.keys(consent).length !== 1 || typeof consent.acknowledge !== "boolean")
3321
+ return refuse22("tap_payments_body_unsupported");
3322
+ if (consent.acknowledge)
3323
+ return refuse22("tap_payments_keep_on_file");
3324
+ }
3325
+ if ("customer" in value && !(record16(value.customer) && plainJson(value.customer)) || "merchant" in value && !(record16(value.merchant) && plainJson(value.merchant)) || "client_ip" in value && value.client_ip !== null && !plainText4(value.client_ip) || !soundOrder(value.order) || !soundDevice2(value.device) || !soundBrowser(value.browser) || !soundApp(value.app)) {
3326
+ return refuse22("tap_payments_body_unsupported");
3327
+ }
3328
+ return CARD21;
3329
+ }
3330
+ // src/conekta.js
3331
+ var CONEKTA_PSP = "conekta";
3332
+ var CONEKTA_TOKENS_URL = "https://api.conekta.io/tokens";
3333
+ var CONEKTA_COMPONENT_TOKEN_URLS = /* @__PURE__ */ Object.freeze(["https://pay.conekta.com/api/tokens", "https://pay.conekta.com/api/tokens/"]);
3334
+ var CONEKTA_CARD_KEYS = /* @__PURE__ */ Object.freeze(["number", "name", "cvc", "exp_month", "exp_year", "exp", "address", "device_fingerprint"]);
3335
+ var CONEKTA_ADDRESS_KEYS = /* @__PURE__ */ Object.freeze(["street1", "street2", "street3", "city", "state", "zip", "country"]);
3336
+ var BODY_LIMIT20 = 4096;
3337
+ var URL_LIMIT8 = 64;
3338
+ var NUMBER5 = /^[0-9]{12,19}$/;
3339
+ var SECURITY_CODE13 = /^[0-9]{3,4}$/;
3340
+ var MONTH10 = /^(?:0?[1-9]|1[0-2])$/;
3341
+ var YEAR10 = /^(?:[0-9]{2}|20[0-9]{2})$/;
3342
+ var EXPIRY2 = /^(?:0[1-9]|1[0-2])\/(?:[0-9]{2}|20[0-9]{2})$/;
3343
+ var FINGERPRINT = /^(?:[a-z0-9]{31,32})?$/;
3344
+ var LETTERS = "A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u017F";
3345
+ var PAGE_NAME2 = new RegExp(`^[${LETTERS} .'-]{1,64}$`);
3346
+ var HAS_LETTER = new RegExp(`[${LETTERS}]`);
3347
+ var ADDRESS_VALUE = new RegExp(`^[\\x20-\\x7e\\u00a0-\\u017f]{0,128}$`);
3348
+ var PAN_LIKE5 = new RegExp(`(?:[0-9][^0-9${LETTERS}]*){12,}`);
3349
+ var record17 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3350
+ var refuse23 = (code) => Object.freeze({ verdict: "refuse", code });
3351
+ var CARD22 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
3352
+ function conektaTarget(url) {
3353
+ if (typeof url !== "string" || url.length > URL_LIMIT8)
3354
+ return null;
3355
+ if (url === CONEKTA_TOKENS_URL)
3356
+ return Object.freeze({ kind: "tokens" });
3357
+ return CONEKTA_COMPONENT_TOKEN_URLS.includes(url) ? Object.freeze({ kind: "component" }) : null;
3358
+ }
3359
+ function readJson4(body) {
3360
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT20)
3361
+ return null;
3362
+ try {
3363
+ const value = JSON.parse(body);
3364
+ return record17(value) && JSON.stringify(value) === body ? value : null;
3365
+ }
3366
+ catch {
3367
+ return null;
3368
+ }
3369
+ }
3370
+ function componentBody(value) {
3371
+ const keys = Object.keys(value);
3372
+ return keys.length === 2 && keys[0] === "data" && keys[1] === "key" && typeof value.data === "string" && typeof value.key === "string";
3373
+ }
3374
+ function soundAddress(address2) {
3375
+ if (!record17(address2))
3376
+ return false;
3377
+ const keys = Object.keys(address2);
3378
+ return keys.length > 0 && keys.every((key) => CONEKTA_ADDRESS_KEYS.includes(key) && typeof address2[key] === "string" && ADDRESS_VALUE.test(address2[key]) && !PAN_LIKE5.test(address2[key])) && keys.some((key) => address2[key] !== "");
3379
+ }
3380
+ function judgeCard(card) {
3381
+ if (!record17(card))
3382
+ return "conekta_body_unsupported";
3383
+ const keys = Object.keys(card);
3384
+ if (!keys.every((key) => CONEKTA_CARD_KEYS.includes(key)) || keys[keys.length - 1] !== "device_fingerprint" || !["number", "name", "cvc", "exp_month", "exp_year"].every((key) => keys.includes(key)))
3385
+ return "conekta_body_unsupported";
3386
+ if (typeof card.number !== "string" || !NUMBER5.test(card.number) || typeof card.cvc !== "string" || !SECURITY_CODE13.test(card.cvc) || typeof card.exp_month !== "string" || !MONTH10.test(card.exp_month) || typeof card.exp_year !== "string" || !YEAR10.test(card.exp_year) || typeof card.name !== "string" || !PAGE_NAME2.test(card.name) || !HAS_LETTER.test(card.name) || typeof card.device_fingerprint !== "string" || !FINGERPRINT.test(card.device_fingerprint))
3387
+ return "conekta_body_unsupported";
3388
+ if (keys.includes("exp") && (typeof card.exp !== "string" || !EXPIRY2.test(card.exp) || card.exp !== `${card.exp_month}/${card.exp_year}`)) {
3389
+ return "conekta_body_unsupported";
3390
+ }
3391
+ if (keys.includes("address") && !soundAddress(card.address))
3392
+ return "conekta_body_unsupported";
3393
+ return null;
3394
+ }
3395
+ function conektaBodyVerdict(body, url) {
3396
+ if (url !== void 0) {
3397
+ const target = conektaTarget(url);
2942
3398
  if (target === null)
2943
- return { verdict: "refuse", code: "twoc2p_url_refused" };
2944
- if (!target.reviewed)
2945
- return twoC2pPaymentCarriesCard(body) ? { verdict: "refuse", code: "twoc2p_build_unreviewed" } : { verdict: "continue" };
2946
- const keyBytes = twoC2pKeyBytes(target.environment);
2947
- return keyBytes === null ? { verdict: "refuse", code: "twoc2p_field_unreviewed" } : twoC2pBodyVerdict(body, keyBytes, target.environment);
3399
+ return refuse23("conekta_url_refused");
3400
+ if (target.kind === "component")
3401
+ return refuse23("conekta_component_unsupported");
2948
3402
  }
2949
- if (recognizer && recognizer.psp === APS_PSP)
2950
- return apsBodyVerdict(body, url);
2951
- if (recognizer && recognizer.psp === PADDLE_TOKENEX_PSP) {
2952
- const target = url !== void 0 ? paddleTokenexPayTarget(url) : null;
2953
- if (url !== void 0 && target === null)
2954
- return { verdict: "refuse", code: "paddle_tokenex_pay_unsupported" };
2955
- return paddleTokenexBodyVerdict(body, target ? target.line : void 0);
3403
+ const value = readJson4(body);
3404
+ if (value === null)
3405
+ return refuse23("conekta_body_unsupported");
3406
+ if (componentBody(value))
3407
+ return refuse23("conekta_component_unsupported");
3408
+ const keys = Object.keys(value);
3409
+ if (keys.length !== 1 || keys[0] !== "card")
3410
+ return refuse23("conekta_body_unsupported");
3411
+ const code = judgeCard(value.card);
3412
+ return code === null ? CARD22 : refuse23(code);
3413
+ }
3414
+ var HOLDER4 = new RegExp(`^[${LETTERS}](?:[${LETTERS} .'-]{0,62}[${LETTERS}.])?$`);
3415
+ var ERROR_TYPE_STATUS = /* @__PURE__ */ Object.freeze({
3416
+ malformed_request_error: 400,
3417
+ authentication_error: 401,
3418
+ processing_error: 402,
3419
+ resource_not_found_error: 404,
3420
+ conflict_error: 409,
3421
+ precondition_required_error: 412,
3422
+ parameter_validation_error: 422
3423
+ });
3424
+ var CONEKTA_ANSWER_ERROR_TYPES = /* @__PURE__ */ Object.freeze(Object.keys(ERROR_TYPE_STATUS));
3425
+ // src/makecommerce.js
3426
+ var MAKECOMMERCE_PSP = "makecommerce";
3427
+ var MAKECOMMERCE_CARD_HOSTS = /* @__PURE__ */ Object.freeze({ "cc.maksekeskus.ee": "production", "cc-test.maksekeskus.ee": "test" });
3428
+ var MAKECOMMERCE_CARD_PATH = "/card-payment";
3429
+ var MAKECOMMERCE_FRAME_VERSIONS = /* @__PURE__ */ Object.freeze(["cde.31", "cde.35"]);
3430
+ var BODY_LIMIT21 = 4096;
3431
+ var HEAD_KEYS = /* @__PURE__ */ Object.freeze(["transaction", "customer", "ocp", "checkout"]);
3432
+ var TAIL_KEYS = /* @__PURE__ */ Object.freeze(["card", "tokenizer", "shop_id", "client_data", "hostname", "public_key"]);
3433
+ var CARD_KEYS9 = /* @__PURE__ */ Object.freeze(["name", "number", "exp_month", "exp_year", "cvc"]);
3434
+ var CLIENT_KEYS = /* @__PURE__ */ Object.freeze(["client_fingerprint", "client_tz_offset", "client_time"]);
3435
+ var UUID3 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
3436
+ var EMAIL4 = /^(?!.*\.\.)(?!.*-$)(?!^-)[A-Za-z0-9._%+-]+@[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*(?:\.[A-Za-z]{2,})+$/;
3437
+ var CARD_NUMBER11 = /^[0-9]{13,19}$/;
3438
+ var MONTH11 = /^(?:0[1-9]|1[0-2])$/;
3439
+ var YEAR11 = /^[0-9]{2}$/;
3440
+ var CODE4 = /^[0-9]{3}$/;
3441
+ var NAME_LIMIT3 = 100;
3442
+ var NAME_WORD = /[a-z]+/gi;
3443
+ var printable2 = (text8) => [...text8].every((character) => {
3444
+ const point = character.codePointAt(0);
3445
+ return point >= 32 && !(point >= 127 && point <= 159) && point !== 8232 && point !== 8233;
3446
+ });
3447
+ var FINGERPRINT2 = /^[0-9a-f]{40}$/i;
3448
+ var HOSTNAME = /^(?=.{1,253}$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/;
3449
+ var PUBLISHABLE_KEY = /^[A-Za-z0-9]{16,64}$/;
3450
+ var record18 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3451
+ var sameKeys8 = (value, keys) => {
3452
+ const own10 = Object.keys(value);
3453
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
3454
+ };
3455
+ var refuse24 = (code) => Object.freeze({ verdict: "refuse", code });
3456
+ var CARD23 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
3457
+ function luhn4(digits3) {
3458
+ let sum = 0;
3459
+ for (let at = 0; at < digits3.length; at += 1) {
3460
+ let digit = Number(digits3[digits3.length - 1 - at]);
3461
+ if (at % 2 === 1) {
3462
+ digit *= 2;
3463
+ if (digit > 9)
3464
+ digit -= 9;
3465
+ }
3466
+ sum += digit;
2956
3467
  }
2957
- if (recognizer && recognizer.psp === PAYMONGO_PSP) {
2958
- const session = url !== void 0 ? paymongoCheckoutSession(url) : void 0;
2959
- if (url !== void 0 && session === null)
2960
- return { verdict: "refuse", code: "paymongo_url_refused" };
2961
- return paymongoBodyVerdict(body, session);
3468
+ return sum % 10 === 0;
3469
+ }
3470
+ function makecommerceCardUrl(url) {
3471
+ if (typeof url !== "string" || url.length > 256 || url.includes("?") || url.includes("#"))
3472
+ return null;
3473
+ let parsed;
3474
+ try {
3475
+ parsed = new URL(url);
2962
3476
  }
2963
- if (recognizer && recognizer.psp === GOPAY_PSP)
2964
- return gopayBodyVerdict(body, url);
2965
- if (recognizer && recognizer.psp === REVOLUT_PSP) {
2966
- if (url !== void 0 && !isRevolutPaymentsUrl(url))
2967
- return { verdict: "refuse", code: "revolut_url_refused" };
2968
- return revolutBodyVerdict(body);
3477
+ catch {
3478
+ return null;
3479
+ }
3480
+ if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || parsed.search || parsed.hash || parsed.pathname !== MAKECOMMERCE_CARD_PATH)
3481
+ return null;
3482
+ if (!Object.prototype.hasOwnProperty.call(MAKECOMMERCE_CARD_HOSTS, parsed.hostname))
3483
+ return null;
3484
+ return Object.freeze({ host: parsed.hostname, environment: MAKECOMMERCE_CARD_HOSTS[parsed.hostname] });
3485
+ }
3486
+ function isMakecommerceCardUrl(url) {
3487
+ return makecommerceCardUrl(url) !== null;
3488
+ }
3489
+ function readBody13(body) {
3490
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT21)
3491
+ return null;
3492
+ let value;
3493
+ try {
3494
+ value = JSON.parse(body);
3495
+ if (!record18(value) || JSON.stringify(value) !== body)
3496
+ return null;
3497
+ }
3498
+ catch {
3499
+ return null;
3500
+ }
3501
+ return value;
3502
+ }
3503
+ var box = (value) => record18(value) && sameKeys8(value, ["requested"]) && typeof value.requested === "boolean";
3504
+ var holderName = (name) => typeof name === "string" && name.length <= NAME_LIMIT3 && printable2(name) && (name.match(NAME_WORD) ?? []).length > 1;
3505
+ function frameCardValues(card) {
3506
+ return record18(card) && sameKeys8(card, CARD_KEYS9) && holderName(card.name) && typeof card.number === "string" && CARD_NUMBER11.test(card.number) && luhn4(card.number) && typeof card.exp_month === "string" && MONTH11.test(card.exp_month) && typeof card.exp_year === "string" && YEAR11.test(card.exp_year) && typeof card.cvc === "string" && CODE4.test(card.cvc);
3507
+ }
3508
+ function clientData(value) {
3509
+ return record18(value) && sameKeys8(value, CLIENT_KEYS) && typeof value.client_fingerprint === "string" && FINGERPRINT2.test(value.client_fingerprint) && Number.isFinite(value.client_tz_offset) && Math.abs(value.client_tz_offset) <= 14 && Number.isSafeInteger(value.client_time) && value.client_time > 0;
3510
+ }
3511
+ function makecommerceBodyVerdict(body, url) {
3512
+ if (url !== void 0 && !isMakecommerceCardUrl(url))
3513
+ return refuse24("makecommerce_url_refused");
3514
+ const value = readBody13(body);
3515
+ if (value === null)
3516
+ return refuse24("makecommerce_body_unsupported");
3517
+ const recurring = Object.prototype.hasOwnProperty.call(value, "recurring");
3518
+ if (!sameKeys8(value, [...HEAD_KEYS, ...recurring ? ["recurring"] : [], ...TAIL_KEYS]))
3519
+ return refuse24("makecommerce_body_unsupported");
3520
+ if (!record18(value.transaction) || !sameKeys8(value.transaction, ["id"]) || typeof value.transaction.id !== "string" || !UUID3.test(value.transaction.id) || !record18(value.customer) || !sameKeys8(value.customer, ["email"]) || typeof value.customer.email !== "string" || value.customer.email.length > 254 || !EMAIL4.test(value.customer.email) || !box(value.ocp) || recurring && !box(value.recurring) || !MAKECOMMERCE_FRAME_VERSIONS.includes(value.checkout) || value.tokenizer !== value.checkout || !frameCardValues(value.card) || typeof value.shop_id !== "string" || !UUID3.test(value.shop_id) || !clientData(value.client_data) || typeof value.hostname !== "string" || !HOSTNAME.test(value.hostname) || typeof value.public_key !== "string" || !PUBLISHABLE_KEY.test(value.public_key))
3521
+ return refuse24("makecommerce_body_unsupported");
3522
+ if (value.ocp.requested || recurring && value.recurring.requested)
3523
+ return refuse24("makecommerce_card_saving_refused");
3524
+ return CARD23;
3525
+ }
3526
+ // src/tokenex-iframe.js
3527
+ var TOKENEX_IFRAME_PSP = "tokenex_iframe";
3528
+ var TOKENEX_IFRAME_HOSTS = Object.freeze(["htp.tokenex.com", "test-htp.tokenex.com"]);
3529
+ var TOKENEX_IFRAME_PATH = "/iframe/v3";
3530
+ var TOKENEX_IFRAME_REFUSAL_REASONS = Object.freeze(["unsupported", "brand_mismatch", "unreviewed_account"]);
3531
+ var TOKENEX_IFRAME_BODY_KEYS = Object.freeze([
3532
+ "TokenExID",
3533
+ "Origin",
3534
+ "AuthenticationKey",
3535
+ "Timestamp",
3536
+ "Data",
3537
+ "CvvValue",
3538
+ "TokenScheme",
3539
+ "CvvOnly",
3540
+ "PCI",
3541
+ "ReturnHash",
3542
+ "use3DS",
3543
+ "ThreeDSMethodNotificationUrl",
3544
+ "kountSessionId",
3545
+ "fraudMerchantId",
3546
+ "UseKount",
3547
+ "kountMode",
3548
+ "kountAnId",
3549
+ "FraudServicesRiskRequestModel",
3550
+ "EnforceLuhnCompliance",
3551
+ "CustomDataLuhnCheck"
3552
+ ]);
3553
+ var TOKENEX_IFRAME_TOKEN_SCHEMES = Object.freeze(["sixTOKENfour"]);
3554
+ var TOKENEX_IFRAME_REVIEWED_ACCOUNTS = Object.freeze({
3555
+ "htp.tokenex.com": Object.freeze({}),
3556
+ "test-htp.tokenex.com": Object.freeze({})
3557
+ });
3558
+ var TOKENEX_IFRAME_ACCOUNT_NAMES = Object.freeze({
3559
+ "htp.tokenex.com": Object.freeze({}),
3560
+ "test-htp.tokenex.com": Object.freeze({})
3561
+ });
3562
+ var BODY_LIMIT22 = 8192;
3563
+ var URL_LIMIT9 = 2048;
3564
+ var record19 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3565
+ var owns5 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
3566
+ var exact2 = (pattern, value) => typeof value === "string" && pattern.exec(value)?.[0] === value;
3567
+ var text4 = (value, max) => typeof value === "string" && value.length <= max && !/[\u0000-\u001f\u007f]/.test(value);
3568
+ var digits = (value, min, max) => typeof value === "string" && value.length >= min && value.length <= max && !/[^0-9]/.test(value);
3569
+ var panLike = (value) => (value.match(/\p{Nd}/gu) ?? []).length >= 12;
3570
+ var plain = (value, max) => text4(value, max) && !panLike(value);
3571
+ var TOKENEX_ID = /^[0-9]{16}$/;
3572
+ var AUTHENTICATION_KEY = /^[A-Za-z0-9+/]{43}=$/;
3573
+ var TIMESTAMP = /^20[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12][0-9]|3[01])(?:[01][0-9]|2[0-3])[0-5][0-9][0-5][0-9]$/;
3574
+ function isOrigin(value) {
3575
+ if (typeof value !== "string" || value.length > 255 || !value.startsWith("https://"))
3576
+ return false;
3577
+ try {
3578
+ return new URL(value).origin === value;
3579
+ }
3580
+ catch {
3581
+ return false;
3582
+ }
3583
+ }
3584
+ var BOUND = {
3585
+ TokenExID: (value) => exact2(TOKENEX_ID, value),
3586
+ Origin: isOrigin,
3587
+ AuthenticationKey: (value) => exact2(AUTHENTICATION_KEY, value),
3588
+ Timestamp: (value) => exact2(TIMESTAMP, value),
3589
+ TokenScheme: (value) => TOKENEX_IFRAME_TOKEN_SCHEMES.includes(value)
3590
+ };
3591
+ var BOUND_KEYS = Object.keys(BOUND);
3592
+ var BOOLEAN = /^(?:true|false)$/i;
3593
+ var QUERY_RULES = {
3594
+ ...BOUND,
3595
+ Mode: (value) => value === "Data",
3596
+ PCI: (value) => exact2(/^true$/i, value),
3597
+ CVV: (value) => exact2(/^true$/i, value),
3598
+ Container: (value) => exact2(/^[A-Za-z][A-Za-z0-9_-]{0,63}$/, value),
3599
+ CvvContainer: (value) => exact2(/^[A-Za-z][A-Za-z0-9_-]{0,63}$/, value),
3600
+ EnforceLuhnCompliance: (value) => exact2(BOOLEAN, value),
3601
+ CustomDataLabel: (value) => plain(value, 64),
3602
+ CustomCvvDataLabel: (value) => plain(value, 64),
3603
+ ExpiresInSeconds: (value) => exact2(/^[1-9][0-9]{0,3}$/, value),
3604
+ ReturnAutoCompleteValues: (value) => exact2(BOOLEAN, value)
3605
+ };
3606
+ var QUERY_REQUIRED = [...BOUND_KEYS, "Mode", "PCI", "CVV"];
3607
+ function readQuery(search) {
3608
+ if (typeof search !== "string" || !search.startsWith("?") || search.length < 2)
3609
+ return null;
3610
+ const query = /* @__PURE__ */ new Map();
3611
+ for (const chunk of search.slice(1).split("&")) {
3612
+ const eq = chunk.indexOf("=");
3613
+ if (eq < 1)
3614
+ return null;
3615
+ let key, value;
3616
+ try {
3617
+ key = decodeURIComponent(chunk.slice(0, eq));
3618
+ value = decodeURIComponent(chunk.slice(eq + 1));
3619
+ }
3620
+ catch {
3621
+ return null;
3622
+ }
3623
+ if (query.has(key) || !owns5(QUERY_RULES, key) || !QUERY_RULES[key](value))
3624
+ return null;
3625
+ query.set(key, value);
3626
+ }
3627
+ return QUERY_REQUIRED.every((key) => query.has(key)) ? query : null;
3628
+ }
3629
+ function tokenexIframeTarget(url) {
3630
+ if (typeof url !== "string" || url.length > URL_LIMIT9 || url.includes("#"))
3631
+ return null;
3632
+ let parsed;
3633
+ try {
3634
+ parsed = new URL(url);
3635
+ }
3636
+ catch {
3637
+ return null;
3638
+ }
3639
+ if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password)
3640
+ return null;
3641
+ if (!TOKENEX_IFRAME_HOSTS.includes(parsed.hostname) || parsed.pathname !== TOKENEX_IFRAME_PATH)
3642
+ return null;
3643
+ const query = readQuery(parsed.search);
3644
+ return query ? { host: parsed.hostname, query } : null;
3645
+ }
3646
+ var PLACEHOLDER = /^[0-9]{1,19}(?: [0-9]{1,19}){0,5}$/;
3647
+ var placeholderDigits = (value) => exact2(PLACEHOLDER, value) && value.length <= 23 ? value.replace(/ /g, "") : null;
3648
+ var RULES = {
3649
+ ...BOUND,
3650
+ Data: (value) => {
3651
+ const pan = placeholderDigits(value);
3652
+ return pan !== null && pan.length >= 13 && pan.length <= 19;
3653
+ },
3654
+ CvvValue: (value) => digits(value, 3, 4),
3655
+ CvvOnly: (value) => value === "False",
3656
+ PCI: (value) => value === "True",
3657
+ ReturnHash: (value) => value === null,
3658
+ use3DS: (value) => value === "False",
3659
+ ThreeDSMethodNotificationUrl: (value) => value === "",
3660
+ kountSessionId: (value) => value === "",
3661
+ fraudMerchantId: (value) => value === "",
3662
+ UseKount: (value) => value === "False",
3663
+ kountMode: (value) => value === "",
3664
+ kountAnId: (value) => value === "",
3665
+ FraudServicesRiskRequestModel: (value) => value === "",
3666
+ EnforceLuhnCompliance: (value) => value === "true" || value === "false",
3667
+ CustomDataLuhnCheck: (value) => value === true
3668
+ };
3669
+ function readJson5(body, limit) {
3670
+ if (typeof body !== "string" || body === "" || body.length > limit)
3671
+ return null;
3672
+ try {
3673
+ const value = JSON.parse(body);
3674
+ return record19(value) ? value : null;
3675
+ }
3676
+ catch {
3677
+ return null;
3678
+ }
3679
+ }
3680
+ function judgeBody4(body) {
3681
+ const value = readJson5(body, BODY_LIMIT22);
3682
+ if (!value || JSON.stringify(value) !== body)
3683
+ return null;
3684
+ const keys = Object.keys(value);
3685
+ if (keys.length !== TOKENEX_IFRAME_BODY_KEYS.length || keys.some((key, index) => key !== TOKENEX_IFRAME_BODY_KEYS[index]))
3686
+ return null;
3687
+ return keys.every((key) => RULES[key](value[key])) ? value : null;
3688
+ }
3689
+ function carriesCard2(body) {
3690
+ const value = readJson5(body, BODY_LIMIT22 * 4);
3691
+ return value !== null && typeof value.Data === "string" && value.Data !== "";
3692
+ }
3693
+ function bindingRefusal(target, value) {
3694
+ return BOUND_KEYS.every((key) => target.query.get(key) === value[key]) ? null : "unsupported";
3695
+ }
3696
+ var TOKENEX_IFRAME_GATE_CODES = Object.freeze(["tokenex_iframe_url_refused", "tokenex_iframe_body_unsupported", "tokenex_iframe_query_mismatch"]);
3697
+ function tokenexIframeBodyVerdict(body, url) {
3698
+ if (!carriesCard2(body))
3699
+ return { verdict: "continue" };
3700
+ const target = url !== void 0 ? tokenexIframeTarget(url) : null;
3701
+ if (url !== void 0 && !target)
3702
+ return { verdict: "refuse", code: "tokenex_iframe_url_refused" };
3703
+ const value = judgeBody4(body);
3704
+ if (!value)
3705
+ return { verdict: "refuse", code: "tokenex_iframe_body_unsupported" };
3706
+ if (target && bindingRefusal(target, value))
3707
+ return { verdict: "refuse", code: "tokenex_iframe_query_mismatch" };
3708
+ return { verdict: "card" };
3709
+ }
3710
+ var SUCCESS_RULES = {
3711
+ token: (value) => digits(value, 13, 19),
3712
+ firstSix: (value) => digits(value, 6, 6),
3713
+ lastFour: (value) => digits(value, 4, 4),
3714
+ referenceNumber: (value) => exact2(/^[A-Za-z0-9-]{1,64}$/, value),
3715
+ tokenHMAC: (value) => exact2(/^[A-Za-z0-9+/]{1,128}={0,2}$/, value),
3716
+ cvvIncluded: (value) => typeof value === "boolean"
3717
+ };
3718
+ var SUCCESS_KEYS = Object.keys(SUCCESS_RULES);
3719
+ // src/openpay.js
3720
+ var OPENPAY_PSP = "openpay_bbva";
3721
+ var OPENPAY_API_HOSTS = /* @__PURE__ */ Object.freeze({
3722
+ "api.openpay.mx": "production",
3723
+ "api.openpay.co": "production",
3724
+ "api.openpay.pe": "production",
3725
+ "sandbox-api.openpay.mx": "sandbox",
3726
+ "sandbox-api.openpay.co": "sandbox",
3727
+ "sandbox-api.openpay.pe": "sandbox"
3728
+ });
3729
+ var OPENPAY_CARD_KEYS = /* @__PURE__ */ Object.freeze(["card_number", "holder_name", "cvv2", "expiration_month", "expiration_year", "address"]);
3730
+ var OPENPAY_ADDRESS_KEYS = /* @__PURE__ */ Object.freeze(["line1", "line2", "line3", "state", "city", "postal_code", "country_code"]);
3731
+ var BODY_LIMIT23 = 4096;
3732
+ var URL_LIMIT10 = 96;
3733
+ var TOKEN_URL = /^https:\/\/((?:sandbox-)?api\.openpay\.(?:mx|co|pe))\/v1\/([a-z0-9]{10,40})\/tokens$/;
3734
+ var NUMBER6 = /^[0-9]{12,19}$/;
3735
+ var SECURITY_CODE14 = /^[0-9]{3,4}$/;
3736
+ var MONTH_TEXT = /^(?:0?[1-9]|1[0-2])$/;
3737
+ var YEAR12 = /^[0-9]{2}$/;
3738
+ var COUNTRY3 = /^[A-Z]{2}$/;
3739
+ var LETTERS2 = "A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u017F";
3740
+ var PAGE_NAME3 = new RegExp(`^[${LETTERS2} .'-]{1,64}$`);
3741
+ var HAS_LETTER2 = new RegExp(`[${LETTERS2}]`);
3742
+ var ADDRESS_VALUE2 = new RegExp(`^[\\x20-\\x7e\\u00a0-\\u017f]{0,128}$`);
3743
+ var PAN_LIKE6 = new RegExp(`(?:[0-9][^0-9${LETTERS2}]*){12,}`);
3744
+ var record20 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3745
+ var hasOwn = (object, key) => Object.prototype.hasOwnProperty.call(object, key);
3746
+ var refuse25 = (code) => Object.freeze({ verdict: "refuse", code });
3747
+ var CARD24 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
3748
+ function openpayTokenTarget(url) {
3749
+ if (typeof url !== "string" || url.length > URL_LIMIT10)
3750
+ return null;
3751
+ const match = TOKEN_URL.exec(url);
3752
+ if (!match)
3753
+ return null;
3754
+ return Object.freeze({ environment: OPENPAY_API_HOSTS[match[1]], host: match[1], merchantId: match[2] });
3755
+ }
3756
+ function readJson6(body) {
3757
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT23)
3758
+ return null;
3759
+ try {
3760
+ const value = JSON.parse(body);
3761
+ return record20(value) && JSON.stringify(value) === body ? value : null;
3762
+ }
3763
+ catch {
3764
+ return null;
3765
+ }
3766
+ }
3767
+ var soundMonth = (value) => Number.isInteger(value) && value >= 1 && value <= 12 || typeof value === "string" && MONTH_TEXT.test(value);
3768
+ function soundAddress2(address2) {
3769
+ if (!record20(address2))
3770
+ return false;
3771
+ const keys = Object.keys(address2);
3772
+ return keys.length > 0 && keys.every((key) => OPENPAY_ADDRESS_KEYS.includes(key) && typeof address2[key] === "string" && ADDRESS_VALUE2.test(address2[key]) && !PAN_LIKE6.test(address2[key])) && keys.some((key) => address2[key] !== "") && (!hasOwn(address2, "country_code") || COUNTRY3.test(address2.country_code));
3773
+ }
3774
+ function openpayBodyVerdict(body, url) {
3775
+ if (url !== void 0 && openpayTokenTarget(url) === null)
3776
+ return refuse25("openpay_url_refused");
3777
+ const value = readJson6(body);
3778
+ if (value === null)
3779
+ return refuse25("openpay_body_unsupported");
3780
+ const keys = Object.keys(value);
3781
+ if (!keys.every((key) => OPENPAY_CARD_KEYS.includes(key)) || !["card_number", "holder_name", "cvv2", "expiration_month", "expiration_year"].every((key) => keys.includes(key))) {
3782
+ return refuse25("openpay_body_unsupported");
3783
+ }
3784
+ if (typeof value.card_number !== "string" || !NUMBER6.test(value.card_number) || typeof value.cvv2 !== "string" || !SECURITY_CODE14.test(value.cvv2) || !soundMonth(value.expiration_month) || typeof value.expiration_year !== "string" || !YEAR12.test(value.expiration_year) || typeof value.holder_name !== "string" || !PAGE_NAME3.test(value.holder_name) || !HAS_LETTER2.test(value.holder_name) || keys.includes("address") && !soundAddress2(value.address)) {
3785
+ return refuse25("openpay_body_unsupported");
3786
+ }
3787
+ return CARD24;
3788
+ }
3789
+ var pin8 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), publicKeys: Object.freeze([...fields.publicKeys]) });
3790
+ var OPENPAY_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
3791
+ pin8({
3792
+ id: "diario_de_yucatan",
3793
+ merchant: "Diario de Yucatán",
3794
+ origins: ["https://www.yucatan.com.mx"],
3795
+ host: "api.openpay.mx",
3796
+ merchantId: "mqyloyrm8tsvtsgcrj0d",
3797
+ publicKeys: ["pk_260aa43616a445bb98472e6ca51da968"]
3798
+ })
3799
+ ]);
3800
+ // src/poynt.js
3801
+ var POYNT_PSP = "poynt";
3802
+ var UUID4 = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
3803
+ var NONCE_URL = new RegExp(`^https://services\\.poynt\\.net/v1/commerce/stores/(${UUID4})/payment-tokens/generate-nonce$`);
3804
+ var STORE_ID = new RegExp(`^${UUID4}$`);
3805
+ var BODY_LIMIT24 = 8192;
3806
+ var ROOT_KEYS8 = /* @__PURE__ */ Object.freeze(["applicationId", "channelId", "card", "verificationData"]);
3807
+ var CARD_KEYS10 = /* @__PURE__ */ Object.freeze(["number", "expirationMonth", "expirationYear", "type", "cardHolderFirstName", "cardHolderLastName", "cardHolderFullName"]);
3808
+ var ADDRESS_KEYS4 = /* @__PURE__ */ Object.freeze(["postalCode", "line1", "line2", "city", "territory", "countryCode", "postalCodeExtension"]);
3809
+ var REQUIRED_ROOT = /* @__PURE__ */ Object.freeze(["applicationId", "card", "verificationData"]);
3810
+ var REQUIRED_CARD = /* @__PURE__ */ Object.freeze(["number", "expirationMonth", "expirationYear", "type", "cardHolderFullName"]);
3811
+ var CARD_ON_FILE_KEYS = /* @__PURE__ */ Object.freeze(["saveFinancialInstrumentOnFile", "financialInstrumentAgreement"]);
3812
+ var CARD_TYPES = /* @__PURE__ */ Object.freeze(["VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DINERS_CLUB", "DISCOVER", "JCB", "UNIONPAY", "MAESTRO", "ELO", "HIPERCARD", "TROY", ""]);
3813
+ var CARD_NUMBER12 = /^[0-9]{12,19}$/;
3814
+ var MONTH12 = /^(?:0[1-9]|1[0-2])$/;
3815
+ var YEAR13 = /^20[0-9]{2}$/;
3816
+ var SECURITY_CODE15 = /^[0-9]{3,4}$/;
3817
+ var IDENTIFIER = /^[A-Za-z0-9:._-]{1,128}$/;
3818
+ var APPLICATION_ID = new RegExp(`^urn:aid:${UUID4}$`);
3819
+ var POSTAL_CODE3 = /^[A-Za-z0-9_]{0,16}$/;
3820
+ var COUNTRY4 = /^[A-Z]{2}$/;
3821
+ var TEXT_LIMIT7 = 256;
3822
+ var CONTROL10 = /[\u0000-\u001f\u007f]/;
3823
+ var cardLike2 = (text8) => (text8.match(/[0-9]/g) ?? []).length >= 12;
3824
+ var text5 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT7 && !CONTROL10.test(value) && !cardLike2(value);
3825
+ var record21 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3826
+ var own5 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
3827
+ var inOrder4 = (value, order, required) => {
3828
+ const keys = Object.keys(value);
3829
+ let at = -1;
3830
+ for (const key of keys) {
3831
+ const next = order.indexOf(key);
3832
+ if (next <= at)
3833
+ return false;
3834
+ at = next;
3835
+ }
3836
+ return required.every((key) => keys.includes(key));
3837
+ };
3838
+ var refuse26 = (code) => Object.freeze({ verdict: "refuse", code });
3839
+ var CARD25 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
3840
+ function poyntStoreId(url) {
3841
+ const match = typeof url === "string" ? NONCE_URL.exec(url) : null;
3842
+ return match ? match[1] : null;
3843
+ }
3844
+ function isPoyntNonceUrl(url) {
3845
+ return poyntStoreId(url) !== null;
3846
+ }
3847
+ function readBody14(body) {
3848
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT24)
3849
+ return null;
3850
+ let value;
3851
+ try {
3852
+ value = JSON.parse(body);
3853
+ if (!record21(value) || JSON.stringify(value) !== body)
3854
+ return null;
3855
+ }
3856
+ catch {
3857
+ return null;
3858
+ }
3859
+ return value;
3860
+ }
3861
+ function poyntBodyVerdict(body) {
3862
+ const value = readBody14(body);
3863
+ if (value === null)
3864
+ return refuse26("poynt_body_unsupported");
3865
+ if (CARD_ON_FILE_KEYS.some((key) => own5(value, key)))
3866
+ return refuse26("poynt_card_on_file");
3867
+ if (!inOrder4(value, ROOT_KEYS8, REQUIRED_ROOT) || typeof value.applicationId !== "string" || !APPLICATION_ID.test(value.applicationId) || own5(value, "channelId") && (typeof value.channelId !== "string" || !IDENTIFIER.test(value.channelId))) {
3868
+ return refuse26("poynt_body_unsupported");
3869
+ }
3870
+ const { card, verificationData: verification } = value;
3871
+ if (!record21(card) || !inOrder4(card, CARD_KEYS10, REQUIRED_CARD) || typeof card.number !== "string" || !CARD_NUMBER12.test(card.number) || typeof card.expirationMonth !== "string" || !MONTH12.test(card.expirationMonth) || typeof card.expirationYear !== "string" || !YEAR13.test(card.expirationYear) || !CARD_TYPES.includes(card.type) || !["cardHolderFirstName", "cardHolderLastName", "cardHolderFullName"].every((key) => !own5(card, key) || text5(card[key]))) {
3872
+ return refuse26("poynt_body_unsupported");
3873
+ }
3874
+ if (!record21(verification) || Object.keys(verification).join() !== "cardHolderBillingAddress,cvData" || typeof verification.cvData !== "string" || !SECURITY_CODE15.test(verification.cvData))
3875
+ return refuse26("poynt_body_unsupported");
3876
+ const address2 = verification.cardHolderBillingAddress;
3877
+ if (!record21(address2) || !inOrder4(address2, ADDRESS_KEYS4, []) || !Object.values(address2).every(text5) || own5(address2, "postalCode") && !POSTAL_CODE3.test(address2.postalCode) || own5(address2, "postalCodeExtension") && !POSTAL_CODE3.test(address2.postalCodeExtension) || own5(address2, "countryCode") && !COUNTRY4.test(address2.countryCode))
3878
+ return refuse26("poynt_body_unsupported");
3879
+ return CARD25;
3880
+ }
3881
+ var pin9 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), storeIds: Object.freeze([...fields.storeIds]) });
3882
+ var POYNT_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
3883
+ pin9({
3884
+ id: "yearning_for_learning",
3885
+ merchant: "Yearning for Learning Publishing & Coaching",
3886
+ origins: ["https://ff305485-ba6c-423a-87b0-cebe3f83ffe9.mysimplestore.com"],
3887
+ storeIds: ["71ac12ed-e61f-4318-95db-db0e7c649d6f"]
3888
+ }),
3889
+ pin9({
3890
+ id: "timber_ridge_bookkeeping",
3891
+ merchant: "Timber Ridge Bookkeeping",
3892
+ origins: ["https://d7d64ac3-0352-4e53-af9a-f6d8e7b5fb71.mysimplestore.com"],
3893
+ storeIds: ["27be984a-0a03-4a54-8675-e64bbbe1c43e"]
3894
+ })
3895
+ ]);
3896
+ var MAX_ANSWER_CHARS = 16 * 1024;
3897
+ // src/cardcom.js
3898
+ var CARDCOM_PSP = "cardcom";
3899
+ var CARDCOM_HOST = "secure.cardcom.solutions";
3900
+ var CARDCOM_ORIGIN = "https://secure.cardcom.solutions";
3901
+ var CARDCOM_SUBMIT_PATH = "/api/EA5/SubmitPayment";
3902
+ var CARDCOM_CURRENCIES = /* @__PURE__ */ Object.freeze({ 1: "ils", 826: "gbp", 840: "usd", 978: "eur" });
3903
+ var BODY_LIMIT25 = 65536;
3904
+ var TOP_KEYS2 = /* @__PURE__ */ Object.freeze(["GoogleToken", "UserAgent", "NumberOfTries", "GooglePayToken", "Store", "_3DSecureReq", "HooxReference"]);
3905
+ var STORE_KEYS = /* @__PURE__ */ Object.freeze([
3906
+ "CommonStore",
3907
+ "CompanyInfoStore",
3908
+ "ProductsStore",
3909
+ "DeliveryStore",
3910
+ "DocumentStore",
3911
+ "DetailsStore",
3912
+ "PaymentStore"
3913
+ ]);
3914
+ var THREE_DS_KEYS = /* @__PURE__ */ Object.freeze([
3915
+ "TerminalNum",
3916
+ "CoinId",
3917
+ "CardNumber",
3918
+ "CardholderFullName",
3919
+ "CardholderPhone",
3920
+ "CardHolderEmail",
3921
+ "CVV",
3922
+ "CardExpireMonth",
3923
+ "CardExpireYear",
3924
+ "RequestedBillingAmount",
3925
+ "UserAgentHeader",
3926
+ "browserLanguage",
3927
+ "_3ds_browserjavaenabled",
3928
+ "_3ds_browserscreenheight",
3929
+ "_3ds_browserscreenwidth",
3930
+ "_3ds_browsercolordepth",
3931
+ "_3ds_challengewindowsize",
3932
+ "_3ds_channel",
3933
+ "_3ds_category",
3934
+ "_3ds_transtype",
3935
+ "ExternalAisurit4DealPageUID",
3936
+ "DealToSaveJSON",
3937
+ "GooglePayToken",
3938
+ "DirectDebitSplitPaymentsSum",
3939
+ "SapakMutav"
3940
+ ]);
3941
+ var COMMON_KEYS = /* @__PURE__ */ Object.freeze([
3942
+ "Uid",
3943
+ "OldUid",
3944
+ "TerminalNumber",
3945
+ "TerminalType",
3946
+ "StoreInitialized",
3947
+ "SuccessRedirectUrl",
3948
+ "ErrorRedirectUrl",
3949
+ "BackgroundImageUrl",
3950
+ "AdditionalDataJson",
3951
+ "Language",
3952
+ "UniqTempDealID",
3953
+ "IsError",
3954
+ "ErrorCode",
3955
+ "ErrorMessage",
3956
+ "OpeningText",
3957
+ "IsEA5SinglePage",
3958
+ "CurrentCardcomBitIntervalId",
3959
+ "SapakMutav",
3960
+ "ShowCookiesBanner",
3961
+ "HideFooter",
3962
+ "LPVersion"
3963
+ ]);
3964
+ var COMPANY_KEYS = /* @__PURE__ */ Object.freeze([
3965
+ "CompanyNumber",
3966
+ "Name",
3967
+ "Address1",
3968
+ "Address2",
3969
+ "Address3",
3970
+ "Tel",
3971
+ "Email",
3972
+ "LogoURL",
3973
+ "LogoAlt",
3974
+ "YoutubeLink",
3975
+ "InstagramLink",
3976
+ "FacebookLink",
3977
+ "WhatsappLink",
3978
+ "Comments",
3979
+ "ShowGPayLogo",
3980
+ "ShowMasterCardLogo",
3981
+ "ShowVisaLogo",
3982
+ "ShowAmexLogo",
3983
+ "ShowDinersLogo",
3984
+ "ShowIsracardLogo",
3985
+ "MetaTitle",
3986
+ "MetaDescription",
3987
+ "MetaImage"
3988
+ ]);
3989
+ var DELIVERY_KEYS = /* @__PURE__ */ Object.freeze([
3990
+ "ShowDeliveryForm",
3991
+ "DeliveryMethodField",
3992
+ "CityField",
3993
+ "StreetField",
3994
+ "BuildingNumberField",
3995
+ "ApartmentNumberField",
3996
+ "FloorField",
3997
+ "EntranceField",
3998
+ "DeliveryNotesField",
3999
+ "Cities",
4000
+ "Streets"
4001
+ ]);
4002
+ var DOCUMENT_KEYS = /* @__PURE__ */ Object.freeze([
4003
+ "ShowInvoiceForm",
4004
+ "Comments",
4005
+ "Title",
4006
+ "NameField",
4007
+ "IdField",
4008
+ "MobileField",
4009
+ "AdditionalPhoneField",
4010
+ "EmailField",
4011
+ "EmailConfirmField",
4012
+ "CityField",
4013
+ "StreetField",
4014
+ "ZipcodeField",
4015
+ "SendPreBuyDataToServer",
4016
+ "DocTypeToCreate"
4017
+ ]);
4018
+ var DETAILS_KEYS = /* @__PURE__ */ Object.freeze(["ShowDetailsForm", "ShowCancelBtn", "CancelUrl", "Comments", "FormFields"]);
4019
+ var PAYMENT_KEYS = /* @__PURE__ */ Object.freeze([
4020
+ "Comments",
4021
+ "ButtonText",
4022
+ "ButtonTextZeroSum",
4023
+ "HideCreditCardFieldsOnZeroSum",
4024
+ "EmailField",
4025
+ "MobileField",
4026
+ "CardNumberField",
4027
+ "YearsField",
4028
+ "MonthsField",
4029
+ "CvvField",
4030
+ "CardOwnerNameField",
4031
+ "CardTZField",
4032
+ "PaymentsField",
4033
+ "OpenSumField",
4034
+ "CardOwnerCityField",
4035
+ "CardOwnerAddressField",
4036
+ "CardOwnerZipcodeField",
4037
+ "ApprovedTermsAndConditions",
4038
+ "ShowTermsAndConditions",
4039
+ "TermsAndConditionsUrl",
4040
+ "AllowMerchantMessages",
4041
+ "MustAllowMerchantMessages",
4042
+ "ShowMerchantMessages",
4043
+ "ShowPayPal",
4044
+ "ShowUpayBitButton",
4045
+ "ShowPayMeBitButton",
4046
+ "ShowCardcomBitButton",
4047
+ "ShowApplePay",
4048
+ "MerchantApplePayLogoUrl",
4049
+ "ShowGooglePay",
4050
+ "ShowRecaptcha",
4051
+ "RecaptchaVersion",
4052
+ "IsCredit",
4053
+ "NumOfRetriesAllowed",
4054
+ "Commissions",
4055
+ "Is3DSecureEnabled",
4056
+ "Was3DSActiveOnPageLoad",
4057
+ "ThreeDSecureTransactionId",
4058
+ "ShowSuccessPopup",
4059
+ "ShowErrorPopup",
4060
+ "DonationType",
4061
+ "ThreeDSecureCavv",
4062
+ "GoogleCardNumber",
4063
+ "GoogleExpirationYear",
4064
+ "GoogleExpirationMonth",
4065
+ "CanSkipAuthentication",
4066
+ "CartTitle",
4067
+ "IsDirectDebit",
4068
+ "EnableHooxOffers",
4069
+ "HooxID",
4070
+ "SupportedCardBrands",
4071
+ "IsDirectDebitSplitPayments",
4072
+ "ApplePayApplicationData",
4073
+ "ShowPaymentButton",
4074
+ "OrderSummeryTitle",
4075
+ "AllowBitEmptyCardOwnerName",
4076
+ "IsCreateToken",
4077
+ "TurnstileSiteKey",
4078
+ "PrivacyPolicyUrl",
4079
+ "DualCardsBINs",
4080
+ "IsHideCart",
4081
+ "IsJ5"
4082
+ ]);
4083
+ var FIELD_KEYS = /* @__PURE__ */ Object.freeze([
4084
+ "Ref",
4085
+ "Id",
4086
+ "Order",
4087
+ "InputType",
4088
+ "Required",
4089
+ "PreventPaste",
4090
+ "Show",
4091
+ "Data",
4092
+ "Value",
4093
+ "Direction",
4094
+ "Disabled"
4095
+ ]);
4096
+ var PRODUCT_KEYS = /* @__PURE__ */ Object.freeze([
4097
+ "MinQuantity",
4098
+ "MaxQuantity",
4099
+ "JumpsInQuantity",
4100
+ "SelectedBuyQuantity",
4101
+ "QuantityOptions",
4102
+ "Comments",
4103
+ "IsManualSum",
4104
+ "PaymentsOptions",
4105
+ "IsCouponActive",
4106
+ "ManualPrice",
4107
+ "ManualPriceTxt",
4108
+ "IsVatFree",
4109
+ "SpecialPrices",
4110
+ "PreConfiguredPrice",
4111
+ "IsPreSelected",
4112
+ "CurrentInventory",
4113
+ "CheckInventory",
4114
+ "uid",
4115
+ "imageUrl",
4116
+ "name",
4117
+ "description",
4118
+ "BasePrice",
4119
+ "PriceBeforeDiscount",
4120
+ "BaseISOCurrency",
4121
+ "PriceToShow",
4122
+ "PriceBeforeDiscountToShow",
4123
+ "IsCurrent"
4124
+ ]);
4125
+ var CURRENCY_KEYS = /* @__PURE__ */ Object.freeze(["Code", "AlphabeticCode", "ValueToNis", "NameHeb", "NameEn", "CoinSing"]);
4126
+ var NO_COUPON = '{"IsActivatedByUser":false,"IsActive":false,"CouponCode":"","IsValid":false,"DiscountType":0,"DiscountValue":0,"CouponType":1}';
4127
+ var FRESH_MANUAL_SUM = '{"Ref":"","Id":0,"Order":0,"InputType":0,"Required":false,"PreventPaste":false,"Show":true,"Data":{"Label":"","validators":[],"SelectList":[]},"Value":"","Direction":0,"Disabled":false}';
4128
+ var DONATION = /* @__PURE__ */ Object.freeze({ none: 0, monthly: 1, multiple: 2, single: 3 });
4129
+ var PAGE_ID = /^[A-Za-z0-9_-]{16,32}$/;
4130
+ var DEAL_ID = /^[0-9a-z]{6,40}$/;
4131
+ var PRODUCT_ID = /^[A-Za-z0-9_-]{8,64}$/;
4132
+ var TOKEN3 = /^[A-Za-z0-9_.:+/=-]{1,8192}$/;
4133
+ var SCREEN = /^[0-9]{1,5}$/;
4134
+ var LANGUAGE2 = /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{1,8}){0,3}$/;
4135
+ var CARD_NUMBER13 = /^[0-9]{12,19}$/;
4136
+ var MONTH13 = /^(?:[1-9]|1[0-2])$/;
4137
+ var YEAR14 = /^20[0-9]{2}$/;
4138
+ var CODE5 = /^[0-9]{3,4}$/;
4139
+ var TEXT_LIMIT8 = 256;
4140
+ var LONG_TEXT_LIMIT = BODY_LIMIT25;
4141
+ var record22 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
4142
+ var owns6 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
4143
+ var sameKeys9 = (value, keys) => {
4144
+ const own10 = Object.keys(value);
4145
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
4146
+ };
4147
+ var exact3 = (pattern, value) => typeof value === "string" && pattern.test(value);
4148
+ var printable3 = (text8) => [...text8].every((character) => {
4149
+ const point = character.codePointAt(0);
4150
+ return point >= 32 && !(point >= 127 && point <= 159) && point !== 8232 && point !== 8233;
4151
+ });
4152
+ var text6 = (value, limit = TEXT_LIMIT8) => typeof value === "string" && value.length <= limit && printable3(value);
4153
+ var pageText = (value, limit = LONG_TEXT_LIMIT) => value === null || typeof value === "string" && value.length <= limit;
4154
+ var whole = (value, min = 0, max = Number.MAX_SAFE_INTEGER) => Number.isSafeInteger(value) && value >= min && value <= max;
4155
+ var flag = (value) => typeof value === "boolean";
4156
+ var optionalFlag = (value) => value === null || flag(value);
4157
+ var refuse27 = (code) => Object.freeze({ verdict: "refuse", code });
4158
+ var CARD26 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
4159
+ function luhn5(digits3) {
4160
+ let sum = 0;
4161
+ for (let at = 0; at < digits3.length; at += 1) {
4162
+ let digit = Number(digits3[digits3.length - 1 - at]);
4163
+ if (at % 2 === 1) {
4164
+ digit *= 2;
4165
+ if (digit > 9)
4166
+ digit -= 9;
4167
+ }
4168
+ sum += digit;
4169
+ }
4170
+ return sum % 10 === 0;
4171
+ }
4172
+ function cents(value) {
4173
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || value > 1e7)
4174
+ return null;
4175
+ const minor = Math.round(value * 100);
4176
+ return Math.abs(minor - value * 100) < 1e-6 ? minor : null;
4177
+ }
4178
+ function isCardcomSubmitUrl(url) {
4179
+ if (typeof url !== "string" || url.length > 256 || url.includes("?") || url.includes("#"))
4180
+ return false;
4181
+ let parsed;
4182
+ try {
4183
+ parsed = new URL(url);
4184
+ }
4185
+ catch {
4186
+ return false;
4187
+ }
4188
+ return parsed.href === url && parsed.protocol === "https:" && !parsed.port && !parsed.username && !parsed.password && !parsed.search && !parsed.hash && parsed.hostname === CARDCOM_HOST && parsed.pathname === CARDCOM_SUBMIT_PATH;
4189
+ }
4190
+ function readBody15(body) {
4191
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT25)
4192
+ return null;
4193
+ let value;
4194
+ try {
4195
+ value = JSON.parse(body);
4196
+ if (!record22(value) || JSON.stringify(value) !== body)
4197
+ return null;
4198
+ }
4199
+ catch {
4200
+ return null;
4201
+ }
4202
+ return value;
4203
+ }
4204
+ function field(value) {
4205
+ return record22(value) && sameKeys9(value, FIELD_KEYS) && text6(value.Ref, 64) && whole(value.Id) && whole(value.Order) && whole(value.InputType) && flag(value.Required) && flag(value.PreventPaste) && flag(value.Show) && record22(value.Data) && typeof value.Value === "string" && value.Value.length <= 4096 && whole(value.Direction) && flag(value.Disabled);
4206
+ }
4207
+ var optionalField = (value) => value === null || field(value);
4208
+ function selectValues(value) {
4209
+ const list = field(value) ? value.Data.SelectList : null;
4210
+ if (!Array.isArray(list) || list.length === 0)
4211
+ return null;
4212
+ return list.map((option) => record22(option) && typeof option.value === "string" ? option.value : null);
4213
+ }
4214
+ function commonStore(value) {
4215
+ return record22(value) && sameKeys9(value, COMMON_KEYS) && exact3(PAGE_ID, value.Uid) && (value.OldUid === null || value.OldUid === "" || value.OldUid === value.Uid) && whole(value.TerminalNumber, 1, 99999999) && whole(value.TerminalType) && value.StoreInitialized === true && pageText(value.SuccessRedirectUrl) && pageText(value.ErrorRedirectUrl) && pageText(value.BackgroundImageUrl) && pageText(value.AdditionalDataJson) && exact3(LANGUAGE2, value.Language) && exact3(DEAL_ID, value.UniqTempDealID) && value.IsError === false && value.ErrorCode === 0 && value.ErrorMessage === "" && value.OpeningText === "" && flag(value.IsEA5SinglePage) && whole(value.CurrentCardcomBitIntervalId) && value.SapakMutav === "" && flag(value.ShowCookiesBanner) && flag(value.HideFooter) && value.LPVersion === 0;
4216
+ }
4217
+ function companyStore(value) {
4218
+ return record22(value) && sameKeys9(value, COMPANY_KEYS) && whole(value.CompanyNumber, 1) && COMPANY_KEYS.slice(1).every((key) => key.startsWith("Show") ? flag(value[key]) : pageText(value[key]));
4219
+ }
4220
+ var SUM_TEXT = /^(?:0*[1-9][0-9]*(?:\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$/;
4221
+ var sumText = (text8, sum) => text8 === null || typeof text8 === "string" && SUM_TEXT.test(text8) && Number.parseFloat(text8) === sum;
4222
+ function chosenProduct(value) {
4223
+ return record22(value) && sameKeys9(value, PRODUCT_KEYS) && whole(value.MinQuantity) && whole(value.MaxQuantity) && whole(value.JumpsInQuantity) && value.SelectedBuyQuantity === 1 && Array.isArray(value.QuantityOptions) && value.QuantityOptions.length === 0 && pageText(value.Comments) && flag(value.IsManualSum) && Array.isArray(value.PaymentsOptions) && flag(value.IsCouponActive) && typeof value.ManualPrice === "number" && sumText(value.ManualPriceTxt, value.ManualPrice) && flag(value.IsVatFree) && Array.isArray(value.SpecialPrices) && (value.PreConfiguredPrice === null || typeof value.PreConfiguredPrice === "number") && flag(value.IsPreSelected) && typeof value.CurrentInventory === "number" && flag(value.CheckInventory) && exact3(PRODUCT_ID, value.uid) && pageText(value.imageUrl) && typeof value.name === "string" && pageText(value.name) && pageText(value.description) && typeof value.BasePrice === "number" && typeof value.PriceBeforeDiscount === "number" && whole(value.BaseISOCurrency) && typeof value.PriceToShow === "number" && typeof value.PriceBeforeDiscountToShow === "number" && flag(value.IsCurrent);
4224
+ }
4225
+ var DAY_RATES = /* @__PURE__ */ Object.freeze({ 1: 1, 826: 4.1194, 840: 3.089, 978: 3.4769 });
4226
+ var dayRate = (code, rate) => typeof rate === "number" && Number.isFinite(rate) && (code === 1 ? rate === 1 : rate >= DAY_RATES[code] * 0.75 && rate <= DAY_RATES[code] * 1.25);
4227
+ function chargedCurrency(value) {
4228
+ return record22(value) && sameKeys9(value, CURRENCY_KEYS) && whole(value.Code) && owns6(CARDCOM_CURRENCIES, value.Code) && value.AlphabeticCode === CARDCOM_CURRENCIES[value.Code].toUpperCase() && dayRate(value.Code, value.ValueToNis) && pageText(value.NameHeb) && pageText(value.NameEn) && pageText(value.CoinSing);
4229
+ }
4230
+ function freshProductsStore(products) {
4231
+ return {
4232
+ Title: "",
4233
+ isDonation: false,
4234
+ showCurrencyConvert: false,
4235
+ currencies: [],
4236
+ selectedCurrency: products.selectedCurrency,
4237
+ coupon: products.coupon,
4238
+ couponCalculatedDiscount: 0,
4239
+ CurrentCouponCode: "",
4240
+ products: products.products,
4241
+ deliveryMethods: products.deliveryMethods,
4242
+ haveImages: false,
4243
+ isCouponActive: false,
4244
+ ShowProductPrice: false,
4245
+ ShowTotalPrice: false,
4246
+ ItemsDisplayType: 0,
4247
+ ManualSumField: JSON.parse(FRESH_MANUAL_SUM),
4248
+ ShowVatInfo: false,
4249
+ Vat: 0,
4250
+ TotalPriceNotRequireVat: 0,
4251
+ TotalPriceRequireVat: 0,
4252
+ TotalVat: 0,
4253
+ DiscountSum: 0,
4254
+ ShowDonationAmountsButtons: false,
4255
+ DonationDescription: ""
4256
+ };
4257
+ }
4258
+ function productsStore(value) {
4259
+ if (!record22(value) || !Array.isArray(value.products) || value.products.length !== 1 || !chosenProduct(value.products[0]) || !chargedCurrency(value.selectedCurrency) || !Array.isArray(value.deliveryMethods) || !value.deliveryMethods.every((method) => record22(method) && method.IsCurrent === false && typeof method.PriceToShow === "number") || JSON.stringify(value.coupon) !== NO_COUPON)
4260
+ return false;
4261
+ return JSON.stringify(freshProductsStore(value)) === JSON.stringify(value);
4262
+ }
4263
+ function deliveryStore(value) {
4264
+ return record22(value) && sameKeys9(value, DELIVERY_KEYS) && flag(value.ShowDeliveryForm) && DELIVERY_KEYS.slice(1, 9).every((key) => optionalField(value[key])) && Array.isArray(value.Cities) && value.Cities.length === 0 && Array.isArray(value.Streets) && value.Streets.length === 0;
4265
+ }
4266
+ function documentStore(value) {
4267
+ return record22(value) && sameKeys9(value, DOCUMENT_KEYS) && flag(value.ShowInvoiceForm) && pageText(value.Comments) && pageText(value.Title) && DOCUMENT_KEYS.slice(3, 12).every((key) => optionalField(value[key])) && flag(value.SendPreBuyDataToServer) && whole(value.DocTypeToCreate);
4268
+ }
4269
+ function detailsStore(value) {
4270
+ return record22(value) && sameKeys9(value, DETAILS_KEYS) && flag(value.ShowDetailsForm) && value.ShowCancelBtn === false && value.CancelUrl === "" && pageText(value.Comments) && Array.isArray(value.FormFields) && value.FormFields.every(field);
4271
+ }
4272
+ function pageCard(payment) {
4273
+ const number = payment.CardNumberField.Value;
4274
+ const years = selectValues(payment.YearsField);
4275
+ return CARD_NUMBER13.test(number) && luhn5(number) && MONTH13.test(payment.MonthsField.Value) && YEAR14.test(payment.YearsField.Value) && (years === null || years.includes(payment.YearsField.Value)) && CODE5.test(payment.CvvField.Value) && payment.CardOwnerNameField.Value.length >= 2 && text6(payment.CardOwnerNameField.Value, 100);
4276
+ }
4277
+ function paymentStore(value) {
4278
+ if (!record22(value) || !sameKeys9(value, PAYMENT_KEYS))
4279
+ return false;
4280
+ const fields = [
4281
+ "EmailField",
4282
+ "MobileField",
4283
+ "CardNumberField",
4284
+ "YearsField",
4285
+ "MonthsField",
4286
+ "CvvField",
4287
+ "CardOwnerNameField",
4288
+ "CardTZField",
4289
+ "PaymentsField",
4290
+ "OpenSumField"
4291
+ ];
4292
+ const untouched = ["CardOwnerCityField", "CardOwnerAddressField", "CardOwnerZipcodeField"];
4293
+ const flags = [
4294
+ "HideCreditCardFieldsOnZeroSum",
4295
+ "ApprovedTermsAndConditions",
4296
+ "ShowTermsAndConditions",
4297
+ "AllowMerchantMessages",
4298
+ "MustAllowMerchantMessages",
4299
+ "ShowMerchantMessages",
4300
+ "ShowPayPal",
4301
+ "ShowUpayBitButton",
4302
+ "ShowPayMeBitButton",
4303
+ "ShowCardcomBitButton",
4304
+ "ShowApplePay",
4305
+ "ShowGooglePay",
4306
+ "ShowRecaptcha",
4307
+ "IsCredit",
4308
+ "Is3DSecureEnabled",
4309
+ "ShowSuccessPopup",
4310
+ "ShowErrorPopup",
4311
+ "CanSkipAuthentication",
4312
+ "IsDirectDebit",
4313
+ "EnableHooxOffers",
4314
+ "IsDirectDebitSplitPayments",
4315
+ "ShowPaymentButton",
4316
+ "AllowBitEmptyCardOwnerName",
4317
+ "IsCreateToken",
4318
+ "IsHideCart",
4319
+ "IsJ5"
4320
+ ];
4321
+ const texts = [
4322
+ "Comments",
4323
+ "ButtonText",
4324
+ "ButtonTextZeroSum",
4325
+ "TermsAndConditionsUrl",
4326
+ "MerchantApplePayLogoUrl",
4327
+ "RecaptchaVersion",
4328
+ "CartTitle",
4329
+ "HooxID",
4330
+ "ApplePayApplicationData",
4331
+ "OrderSummeryTitle",
4332
+ "TurnstileSiteKey",
4333
+ "PrivacyPolicyUrl"
4334
+ ];
4335
+ return fields.every((key) => field(value[key])) && untouched.every((key) => JSON.stringify(value[key]) === "{}") && flags.every((key) => flag(value[key])) && texts.every((key) => pageText(value[key])) && whole(value.NumOfRetriesAllowed, 0, 99) && Array.isArray(value.Commissions) && value.Commissions.every(record22) && optionalFlag(value.Was3DSActiveOnPageLoad) && pageText(value.ThreeDSecureTransactionId) && pageText(value.ThreeDSecureCavv) && Object.values(DONATION).includes(value.DonationType) && value.GoogleCardNumber === "" && value.GoogleExpirationYear === "0" && value.GoogleExpirationMonth === "0" && Array.isArray(value.SupportedCardBrands) && value.SupportedCardBrands.every((brand) => text6(brand, 32)) && Array.isArray(value.DualCardsBINs) && value.DualCardsBINs.every(record22) && pageCard(value);
4336
+ }
4337
+ function threeDsBlock(value, block) {
4338
+ const { CommonStore: common, ProductsStore: products, PaymentStore: payment } = value.Store;
4339
+ if (!record22(block) || !sameKeys9(block, THREE_DS_KEYS) || typeof block.RequestedBillingAmount !== "number" || !exact3(LANGUAGE2, block.browserLanguage) || !exact3(SCREEN, block._3ds_browserscreenheight) || !exact3(SCREEN, block._3ds_browserscreenwidth) || !exact3(SCREEN, block._3ds_browsercolordepth))
4340
+ return false;
4341
+ const rebuilt = {
4342
+ TerminalNum: common.TerminalNumber,
4343
+ CoinId: products.selectedCurrency.Code,
4344
+ CardNumber: payment.CardNumberField.Value,
4345
+ CardholderFullName: payment.CardOwnerNameField.Value,
4346
+ CardholderPhone: payment.MobileField.Value,
4347
+ CardHolderEmail: payment.EmailField.Value,
4348
+ CVV: payment.CvvField.Value,
4349
+ CardExpireMonth: payment.MonthsField.Value,
4350
+ CardExpireYear: payment.YearsField.Value.substr(2, 2),
4351
+ RequestedBillingAmount: block.RequestedBillingAmount,
4352
+ UserAgentHeader: value.UserAgent,
4353
+ browserLanguage: block.browserLanguage,
4354
+ _3ds_browserjavaenabled: "true",
4355
+ _3ds_browserscreenheight: block._3ds_browserscreenheight,
4356
+ _3ds_browserscreenwidth: block._3ds_browserscreenwidth,
4357
+ _3ds_browsercolordepth: block._3ds_browsercolordepth,
4358
+ _3ds_challengewindowsize: "05",
4359
+ _3ds_channel: "02",
4360
+ _3ds_category: "01",
4361
+ _3ds_transtype: "01",
4362
+ ExternalAisurit4DealPageUID: common.Uid,
4363
+ DealToSaveJSON: "",
4364
+ GooglePayToken: "",
4365
+ DirectDebitSplitPaymentsSum: 0,
4366
+ SapakMutav: ""
4367
+ };
4368
+ return JSON.stringify(rebuilt) === JSON.stringify(block);
4369
+ }
4370
+ var hooxReference = (value) => value === null || value === "" || whole(value) || typeof value === "string" && /^[\x21-\x7e]{1,256}$/.test(value);
4371
+ function pageBody(body) {
4372
+ const value = readBody15(body);
4373
+ if (value === null || !sameKeys9(value, TOP_KEYS2) || typeof value.GoogleToken !== "string" || value.GoogleToken !== "" && !TOKEN3.test(value.GoogleToken) || value.UserAgent === "" || !text6(value.UserAgent, 1024) || !whole(value.NumberOfTries, 1, 10) || value.GooglePayToken !== "" || !hooxReference(value.HooxReference) || !record22(value.Store) || !sameKeys9(value.Store, STORE_KEYS))
4374
+ return null;
4375
+ const store = value.Store;
4376
+ if (!commonStore(store.CommonStore) || !companyStore(store.CompanyInfoStore) || !productsStore(store.ProductsStore) || !deliveryStore(store.DeliveryStore) || !documentStore(store.DocumentStore) || !detailsStore(store.DetailsStore) || !paymentStore(store.PaymentStore) || !threeDsBlock(value, value._3DSecureReq))
4377
+ return null;
4378
+ const product = store.ProductsStore.products[0];
4379
+ const price = cents(product.PriceToShow);
4380
+ if (price === null || cents(value._3DSecureReq.RequestedBillingAmount) !== price || product.BaseISOCurrency !== store.ProductsStore.selectedCurrency.Code || product.IsManualSum && product.ManualPrice !== product.PriceToShow)
4381
+ return null;
4382
+ if (store.PaymentStore.ShowRecaptcha !== (value.GoogleToken !== ""))
4383
+ return null;
4384
+ return value;
4385
+ }
4386
+ function cardcomBodyVerdict(body, url) {
4387
+ if (url !== void 0 && !isCardcomSubmitUrl(url))
4388
+ return refuse27("cardcom_url_refused");
4389
+ const value = pageBody(body);
4390
+ if (value === null)
4391
+ return refuse27("cardcom_body_unsupported");
4392
+ const payment = value.Store.PaymentStore;
4393
+ const receiptId = value.Store.DocumentStore.IdField;
4394
+ if (payment.Is3DSecureEnabled || payment.Was3DSActiveOnPageLoad === true || payment.ThreeDSecureTransactionId || payment.ThreeDSecureCavv) {
4395
+ return refuse27("cardcom_three_d_secure_refused");
4396
+ }
4397
+ if (payment.IsCreateToken || payment.IsJ5)
4398
+ return refuse27("cardcom_card_saving_refused");
4399
+ if (payment.IsDirectDebitSplitPayments || payment.PaymentsField.Value !== "1" || payment.DonationType === DONATION.monthly || payment.DonationType === DONATION.multiple || payment.IsDirectDebit && payment.DonationType !== DONATION.single) {
4400
+ return refuse27("cardcom_recurring_refused");
4401
+ }
4402
+ if (payment.CardTZField.Value !== "" || payment.CardTZField.Show && payment.CardTZField.Required || receiptId !== null && (receiptId.Value !== "" || receiptId.Show && receiptId.Required))
4403
+ return refuse27("cardcom_id_required");
4404
+ if (payment.ShowRecaptcha && payment.RecaptchaVersion !== "v3")
4405
+ return refuse27("cardcom_captcha_unsupported");
4406
+ return CARD26;
4407
+ }
4408
+ var CARDCOM_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
4409
+ Object.freeze({
4410
+ id: "machon_alte_usd",
4411
+ merchant: "Machon Alte",
4412
+ origins: Object.freeze([CARDCOM_ORIGIN]),
4413
+ page: "kzR5pTyr0kC3oqjpGbCMiQ",
4414
+ terminal: 162226,
4415
+ products: Object.freeze([Object.freeze({ uid: "JoQrlcuGCUWYM4I66eX7pw", currency: "usd", price: null })]),
4416
+ settings: "e38d7c7abce83a3a994a707e345595cf6ec2a15d77794a8eea70c0d5ce4773ab"
4417
+ })
4418
+ ]);
4419
+ // src/nexi-checkout.js
4420
+ var NEXI_CHECKOUT_PSP = "nexi_checkout";
4421
+ var NEXI_CHECKOUT_PAY_HOSTS = /* @__PURE__ */ Object.freeze({ "checkout.dibspayment.eu": "production", "test.checkout.dibspayment.eu": "test" });
4422
+ var NEXI_CHECKOUT_PAY_PATH = "/api/v1/pay";
4423
+ var BODY_LIMIT26 = 4096;
4424
+ var BODY_KEYS = /* @__PURE__ */ Object.freeze([
4425
+ "type",
4426
+ "paymentType",
4427
+ "acceptedTermsAndConditions",
4428
+ "amountConfirmedByConsumer",
4429
+ "surchargeAmount",
4430
+ "consumerCheckedSaveNewPaymentMethod",
4431
+ "consumerHasConsentedToRememberingNewDevice",
4432
+ "consumerWantsToBeAnonymous",
4433
+ "language"
4434
+ ]);
4435
+ var CARD_KEYS11 = /* @__PURE__ */ Object.freeze(["cardNumber", "cardVerificationCode", "cardholderName", "expiryMonth", "expiryYear"]);
4436
+ var CARD_NUMBER14 = /^[0-9]{13,19}$/;
4437
+ var MONTH14 = /^(?:0[1-9]|1[0-2])$/;
4438
+ var YEAR15 = /^[0-9]{2}$/;
4439
+ var CODE6 = /^[0-9]{3,4}$/;
4440
+ var TEXT_LIMIT9 = 128;
4441
+ var EMAIL_LIMIT2 = 254;
4442
+ var LANGUAGE3 = /^[a-z]{2}-[a-z]{2}$/i;
4443
+ var AMOUNT_LIMIT2 = 2147483647;
4444
+ var record23 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
4445
+ var own6 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
4446
+ var sameKeys10 = (value, keys) => {
4447
+ const found = Object.keys(value);
4448
+ return found.length === keys.length && found.every((key, at) => key === keys[at]);
4449
+ };
4450
+ var refuse28 = (code) => Object.freeze({ verdict: "refuse", code });
4451
+ var CARD27 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
4452
+ var printable4 = (text8) => [...text8].every((character) => {
4453
+ const point = character.codePointAt(0);
4454
+ return point >= 32 && !(point >= 127 && point <= 159) && point !== 8232 && point !== 8233;
4455
+ });
4456
+ var text7 = (value, limit) => typeof value === "string" && value.length <= limit && printable4(value);
4457
+ function luhn6(digits3) {
4458
+ let sum = 0;
4459
+ for (let at = 0; at < digits3.length; at += 1) {
4460
+ let digit = Number(digits3[digits3.length - 1 - at]);
4461
+ if (at % 2 === 1) {
4462
+ digit *= 2;
4463
+ if (digit > 9)
4464
+ digit -= 9;
4465
+ }
4466
+ sum += digit;
4467
+ }
4468
+ return sum % 10 === 0;
4469
+ }
4470
+ function nexiCheckoutPayUrl(url) {
4471
+ if (typeof url !== "string" || url.length > 256 || url.includes("?") || url.includes("#"))
4472
+ return null;
4473
+ let parsed;
4474
+ try {
4475
+ parsed = new URL(url);
4476
+ }
4477
+ catch {
4478
+ return null;
4479
+ }
4480
+ if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || parsed.search || parsed.hash || parsed.pathname !== NEXI_CHECKOUT_PAY_PATH)
4481
+ return null;
4482
+ if (!own6(NEXI_CHECKOUT_PAY_HOSTS, parsed.hostname))
4483
+ return null;
4484
+ return Object.freeze({ host: parsed.hostname, environment: NEXI_CHECKOUT_PAY_HOSTS[parsed.hostname] });
4485
+ }
4486
+ function isNexiCheckoutPayUrl(url) {
4487
+ return nexiCheckoutPayUrl(url) !== null;
4488
+ }
4489
+ function readBody16(body) {
4490
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT26)
4491
+ return null;
4492
+ let value;
4493
+ try {
4494
+ value = JSON.parse(body);
4495
+ if (!record23(value) || JSON.stringify(value) !== body)
4496
+ return null;
4497
+ }
4498
+ catch {
4499
+ return null;
4500
+ }
4501
+ return value;
4502
+ }
4503
+ function cardFormValues(card) {
4504
+ if (!record23(card))
4505
+ return false;
4506
+ const keys = Object.keys(card);
4507
+ const expected = own6(card, "email") ? CARD_KEYS11.length + 1 : CARD_KEYS11.length;
4508
+ if (keys.length !== expected || !CARD_KEYS11.every((key) => own6(card, key)))
4509
+ return false;
4510
+ if (own6(card, "email") && !text7(card.email, EMAIL_LIMIT2))
4511
+ return false;
4512
+ return typeof card.cardNumber === "string" && CARD_NUMBER14.test(card.cardNumber) && luhn6(card.cardNumber) && typeof card.cardVerificationCode === "string" && CODE6.test(card.cardVerificationCode) && text7(card.cardholderName, TEXT_LIMIT9) && card.cardholderName.trim() !== "" && typeof card.expiryMonth === "string" && MONTH14.test(card.expiryMonth) && typeof card.expiryYear === "string" && YEAR15.test(card.expiryYear);
4513
+ }
4514
+ var amount = (value, least) => Number.isSafeInteger(value) && value >= least && value <= AMOUNT_LIMIT2;
4515
+ var flag2 = (value) => typeof value === "boolean";
4516
+ function nexiCheckoutBodyVerdict(body, url) {
4517
+ if (url !== void 0 && !isNexiCheckoutPayUrl(url))
4518
+ return refuse28("nexi_checkout_url_refused");
4519
+ const value = readBody16(body);
4520
+ if (value === null || !sameKeys10(value, BODY_KEYS))
4521
+ return refuse28("nexi_checkout_body_unsupported");
4522
+ if (value.type !== "card" || !record23(value.paymentType) || !sameKeys10(value.paymentType, ["card"]) || !cardFormValues(value.paymentType.card) || !flag2(value.acceptedTermsAndConditions) || !amount(value.amountConfirmedByConsumer, 1) || !amount(value.surchargeAmount, 0) || !flag2(value.consumerCheckedSaveNewPaymentMethod) || !flag2(value.consumerHasConsentedToRememberingNewDevice) || !flag2(value.consumerWantsToBeAnonymous) || typeof value.language !== "string" || value.language !== "" && !LANGUAGE3.test(value.language))
4523
+ return refuse28("nexi_checkout_body_unsupported");
4524
+ if (value.consumerCheckedSaveNewPaymentMethod || value.consumerHasConsentedToRememberingNewDevice)
4525
+ return refuse28("nexi_checkout_card_saving_refused");
4526
+ if (value.surchargeAmount !== 0)
4527
+ return refuse28("nexi_checkout_surcharge_refused");
4528
+ return CARD27;
4529
+ }
4530
+ // src/toast.js
4531
+ var TOAST_PSP = "toast";
4532
+ var TOAST_PAYMENT_METHODS_URL = "https://payments.toasttab.com/v1/payment-methods";
4533
+ var TOAST_KEY_ID = "RSA-OAEP-SHA1::bacb4887-8314-4c23-98fc-d5ef7bc99e94_oo-legacy-browsers";
4534
+ var TOAST_SUBSTITUTION = /* @__PURE__ */ Object.freeze({ at: "card", fields: Object.freeze(["cardData"]) });
4535
+ var BODY_LIMIT27 = 8192;
4536
+ var ROOT_KEYS9 = /* @__PURE__ */ Object.freeze(["type", "card", "sessionSecret", "usage", "setupFutureUsage", "billingDetails"]);
4537
+ var CARD_KEYS12 = /* @__PURE__ */ Object.freeze(["keyId", "cardData"]);
4538
+ var WALLETS = /* @__PURE__ */ Object.freeze(["APPLE_PAY", "GOOGLE_PAY"]);
4539
+ var SESSION_SECRET = /^[\x21-\x7e]{1,1024}$/;
4540
+ var POSTAL_CODE4 = /^[A-Za-z0-9 -]{0,16}$/;
4541
+ var CIPHERTEXT_B64 = /^[A-Za-z0-9+/]{341}[AQgw]==$/;
4542
+ var record24 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
4543
+ var sameKeys11 = (value, keys) => {
4544
+ const own10 = Object.keys(value);
4545
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
4546
+ };
4547
+ var refuse29 = (code) => Object.freeze({ verdict: "refuse", code });
4548
+ var failed = (code) => (
4549
+ /** @type {ToastBodyReadJs} */
4550
+ Object.freeze({ ok: false, code }));
4551
+ var CARD28 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
4552
+ var CONTINUE10 = /* @__PURE__ */ Object.freeze({ verdict: "continue" });
4553
+ function isWalletBody(parsed) {
4554
+ const card = parsed.card;
4555
+ const rootOk = sameKeys11(parsed, ["type", "card", "sessionSecret"]) || sameKeys11(parsed, ["type", "card", "sessionSecret", "billingDetails"]) && record24(parsed.billingDetails);
4556
+ return rootOk && WALLETS.includes(parsed.type) && record24(card) && sameKeys11(card, ["keyId", "cardData", "wallet"]) && card.keyId === null && typeof card.cardData === "string" && record24(card.wallet) && sameKeys11(card.wallet, ["type"]) && card.wallet.type === parsed.type && typeof parsed.sessionSecret === "string";
4557
+ }
4558
+ function isToastPaymentMethodsUrl(url) {
4559
+ return url === TOAST_PAYMENT_METHODS_URL;
4560
+ }
4561
+ function isToastCiphertext(value) {
4562
+ return typeof value === "string" && CIPHERTEXT_B64.test(value);
4563
+ }
4564
+ function readToastBody(body) {
4565
+ const malformed = failed("toast_body_malformed");
4566
+ if (typeof body !== "string" || body.length > BODY_LIMIT27)
4567
+ return malformed;
4568
+ let parsed;
4569
+ try {
4570
+ parsed = JSON.parse(body);
4571
+ }
4572
+ catch {
4573
+ return malformed;
4574
+ }
4575
+ if (!record24(parsed) || JSON.stringify(parsed) !== body)
4576
+ return malformed;
4577
+ if (isWalletBody(parsed))
4578
+ return (
4579
+ /** @type {ToastBodyReadJs} */
4580
+ Object.freeze({ ok: false, wallet: true }));
4581
+ const card = parsed.card;
4582
+ if (!sameKeys11(parsed, ROOT_KEYS9) || parsed.type !== "CARD" || !record24(card) || !sameKeys11(card, CARD_KEYS12))
4583
+ return malformed;
4584
+ if (typeof card.keyId !== "string")
4585
+ return malformed;
4586
+ if (card.keyId !== TOAST_KEY_ID)
4587
+ return failed("toast_foreign_key");
4588
+ if (!isToastCiphertext(card.cardData))
4589
+ return malformed;
4590
+ if (typeof parsed.sessionSecret !== "string" || !SESSION_SECRET.test(parsed.sessionSecret))
4591
+ return malformed;
4592
+ if (parsed.usage !== null || parsed.setupFutureUsage !== null)
4593
+ return failed("toast_keeps_card");
4594
+ const billing = parsed.billingDetails;
4595
+ if (!record24(billing) || !sameKeys11(billing, ["postalCode"]) || typeof billing.postalCode !== "string" || !POSTAL_CODE4.test(billing.postalCode))
4596
+ return malformed;
4597
+ const read = { ok: true, sessionSecret: parsed.sessionSecret, postalCode: billing.postalCode, cardData: card.cardData };
4598
+ return Object.freeze(read);
4599
+ }
4600
+ function toastBodyVerdict(body) {
4601
+ const read = readToastBody(body);
4602
+ if (read.ok)
4603
+ return CARD28;
4604
+ return read.wallet ? CONTINUE10 : refuse29(read.code);
4605
+ }
4606
+ // src/fastspring.js
4607
+ var FASTSPRING_PSP = "fastspring";
4608
+ var FASTSPRING_STORE_PINS = /* @__PURE__ */ Object.freeze([
4609
+ Object.freeze({ environment: "production", store: "daisydisk", storefront: "", merchant: "DaisyDisk" })
4610
+ ]);
4611
+ var URL_LIMIT11 = 256;
4612
+ var BODY_LIMIT28 = 32768;
4613
+ var STORE = "[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?";
4614
+ 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$`);
4615
+ var DIGITS = /^[0-9]{12,19}$/;
4616
+ var MONTH15 = /^(?:0?[1-9]|1[0-2])$/;
4617
+ var YEAR16 = /^(?:[0-9]{2}|[0-9]{4})$/;
4618
+ var SECURITY_CODE16 = /^[0-9]{3,4}$/;
4619
+ var CARD_KEYS13 = /* @__PURE__ */ Object.freeze(["year", "month", "number", "security"]);
4620
+ var SAVED_CARD_KEYS = /* @__PURE__ */ Object.freeze(["savedCardId", "savedCardEnding", "savedCardBin", "variantType"]);
4621
+ var BODY_KEYS2 = /* @__PURE__ */ new Set([
4622
+ "contact",
4623
+ "card",
4624
+ "sepa",
4625
+ "ach",
4626
+ "pad",
4627
+ "bacs",
4628
+ "upi",
4629
+ "mercadopago",
4630
+ "cpfNumber",
4631
+ "dniNumber",
4632
+ "googlepay",
4633
+ "applepay",
4634
+ "paymentKlarna",
4635
+ "paymentType",
4636
+ "subscribe",
4637
+ "captcha",
4638
+ "recipientSelected",
4639
+ "recipient",
4640
+ "customerReference",
4641
+ "autoRenew",
4642
+ "fingerprint",
4643
+ "savedPaypalId",
4644
+ "savedVenmoId",
4645
+ "cashapp"
4646
+ ]);
4647
+ var METHOD_KEYS = /* @__PURE__ */ Object.freeze(["sepa", "ach", "pad", "bacs", "upi", "mercadopago", "googlepay", "applepay", "paymentKlarna"]);
4648
+ var SAVED_METHOD_KEYS = /* @__PURE__ */ Object.freeze(["savedPaypalId", "savedVenmoId", "cashapp"]);
4649
+ var TEXT2 = /^[^\x00-\x1f\x7f]{0,256}$/;
4650
+ var IP_ADDRESS = /^[0-9A-Fa-f.:]{2,45}$/;
4651
+ var FINGERPRINT_KEYS = /* @__PURE__ */ Object.freeze(["uniqueId", "fingerprintHash"]);
4652
+ var CARD_MEMBER3 = /^(?:card_?number|cc_?number|pan|cvc2?|cvv2?|security_?code)$/i;
4653
+ var record25 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
4654
+ var own7 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
4655
+ var nothing = (value) => value === void 0 || value === null || value === "" || value === false;
4656
+ var refuse30 = (code) => Object.freeze({ verdict: "refuse", code });
4657
+ var CARD29 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
4658
+ var CONTINUE11 = /* @__PURE__ */ Object.freeze({ verdict: "continue" });
4659
+ function fastspringCardUrl(url) {
4660
+ if (typeof url !== "string" || url.length > URL_LIMIT11 || url.includes("?") || url.includes("#"))
4661
+ return null;
4662
+ let parsed;
4663
+ try {
4664
+ parsed = new URL(url);
4665
+ }
4666
+ catch {
4667
+ return null;
4668
+ }
4669
+ if (parsed.href !== url || parsed.port || parsed.username || parsed.password)
4670
+ return null;
4671
+ const match = CARD_URL.exec(url);
4672
+ if (!match)
4673
+ return null;
4674
+ return Object.freeze({
4675
+ environment: match[2] ? "sandbox" : "production",
4676
+ store: match[1],
4677
+ storefront: match[3],
4678
+ session: match[4],
4679
+ sessionUrl: url.slice(0, -"/payment".length)
4680
+ });
4681
+ }
4682
+ function isFastspringCardUrl(url) {
4683
+ return fastspringCardUrl(url) !== null;
4684
+ }
4685
+ function readJson7(body) {
4686
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT28)
4687
+ return { parsed: null, exact: false };
4688
+ let parsed;
4689
+ try {
4690
+ parsed = JSON.parse(body);
4691
+ }
4692
+ catch {
4693
+ return { parsed: null, exact: false };
4694
+ }
4695
+ let exact4 = false;
4696
+ try {
4697
+ exact4 = JSON.stringify(parsed) === body;
4698
+ }
4699
+ catch {
4700
+ exact4 = false;
4701
+ }
4702
+ return { parsed, exact: exact4 };
4703
+ }
4704
+ function numberDigits(number) {
4705
+ if (typeof number !== "string")
4706
+ return null;
4707
+ const digits3 = number.replace(/ /g, "");
4708
+ if (!DIGITS.test(digits3))
4709
+ return null;
4710
+ return number === digits3 || number === digits3.replace(/(.{4})/g, "$1 ").trim() ? digits3 : null;
4711
+ }
4712
+ function emptyDetails(key, value) {
4713
+ if (nothing(value))
4714
+ return true;
4715
+ if (!record25(value))
4716
+ return false;
4717
+ return Object.entries(value).every(([name, leaf]) => nothing(leaf) || key === "sepa" && name === "ipAddress" && typeof leaf === "string" && IP_ADDRESS.test(leaf));
4718
+ }
4719
+ function namesCardOutside(parsed) {
4720
+ const pending = Object.entries(parsed).filter(([key]) => key !== "card").map(([, value]) => value).filter((value) => value !== null && typeof value === "object");
4721
+ if (Object.keys(parsed).some((key) => key !== "card" && CARD_MEMBER3.test(key)))
4722
+ return true;
4723
+ while (pending.length > 0) {
4724
+ const node = pending.pop();
4725
+ for (const key of Object.keys(node)) {
4726
+ if (!Array.isArray(node) && CARD_MEMBER3.test(key))
4727
+ return true;
4728
+ const value = node[key];
4729
+ if (value !== null && typeof value === "object")
4730
+ pending.push(value);
4731
+ }
4732
+ }
4733
+ return false;
4734
+ }
4735
+ var cardValues = (card) => record25(card) && (!nothing(card.number) || !nothing(card.security));
4736
+ function judgeCard2(parsed) {
4737
+ const card = parsed.card;
4738
+ if (record25(card) && SAVED_CARD_KEYS.some((key) => own7(card, key)))
4739
+ return "fastspring_saved_card";
4740
+ if (SAVED_METHOD_KEYS.some((key) => own7(parsed, key)))
4741
+ return "fastspring_saved_card";
4742
+ if (!Object.keys(parsed).every((key) => BODY_KEYS2.has(key)) || namesCardOutside(parsed))
4743
+ return "fastspring_body_unsupported";
4744
+ if (!record25(card) || Object.keys(card).length !== CARD_KEYS13.length || !CARD_KEYS13.every((key) => own7(card, key)) || numberDigits(card.number) === null || typeof card.month !== "string" || !MONTH15.test(card.month) || typeof card.year !== "string" || !YEAR16.test(card.year) || typeof card.security !== "string" || !SECURITY_CODE16.test(card.security))
4745
+ return "fastspring_body_unsupported";
4746
+ if (parsed.recipientSelected === true || own7(parsed, "recipient"))
4747
+ return "fastspring_gift";
4748
+ if (typeof parsed.recipientSelected !== "boolean")
4749
+ return "fastspring_body_unsupported";
4750
+ if (parsed.autoRenew === true)
4751
+ return "fastspring_keep_on_file";
4752
+ if (!nothing(parsed.autoRenew))
4753
+ return "fastspring_body_unsupported";
4754
+ for (const key of ["cpfNumber", "dniNumber"]) {
4755
+ if (nothing(parsed[key]))
4756
+ continue;
4757
+ return typeof parsed[key] === "string" ? "fastspring_local_route" : "fastspring_body_unsupported";
4758
+ }
4759
+ const captcha = parsed.captcha;
4760
+ if (!record25(captcha) || Object.keys(captcha).length !== 2 || typeof captcha.token !== "string" || typeof captcha.captchaType !== "string")
4761
+ return "fastspring_body_unsupported";
4762
+ if (captcha.token !== "" || captcha.captchaType !== "")
4763
+ return "fastspring_captcha_unsupported";
4764
+ if (own7(parsed, "customerReference"))
4765
+ return "fastspring_body_unsupported";
4766
+ if (!METHOD_KEYS.every((key) => emptyDetails(key, parsed[key])))
4767
+ return "fastspring_body_unsupported";
4768
+ const contact = parsed.contact;
4769
+ if (!record25(contact) || !Object.values(contact).every((value) => value === null || typeof value === "boolean" || typeof value === "string" && TEXT2.test(value)))
4770
+ return "fastspring_body_unsupported";
4771
+ if (!(parsed.subscribe === void 0 || parsed.subscribe === null || typeof parsed.subscribe === "boolean"))
4772
+ return "fastspring_body_unsupported";
4773
+ const fingerprint = parsed.fingerprint;
4774
+ if (fingerprint !== void 0 && !(record25(fingerprint) && Object.keys(fingerprint).every((key) => FINGERPRINT_KEYS.includes(key)) && Object.values(fingerprint).every((value) => value === null || typeof value === "number" && Number.isFinite(value) || typeof value === "string" && TEXT2.test(value))))
4775
+ return "fastspring_body_unsupported";
4776
+ return null;
4777
+ }
4778
+ function fastspringBodyVerdict(body) {
4779
+ const { parsed, exact: exact4 } = readJson7(body);
4780
+ if (!record25(parsed))
4781
+ return body === void 0 || body === null || body === "" ? CONTINUE11 : refuse30("fastspring_body_unsupported");
4782
+ if (parsed.paymentType !== "card") {
4783
+ if (cardValues(parsed.card) || namesCardOutside(parsed))
4784
+ return refuse30("fastspring_body_unsupported");
4785
+ return typeof parsed.paymentType === "string" && parsed.paymentType !== "" ? CONTINUE11 : refuse30("fastspring_body_unsupported");
4786
+ }
4787
+ if (!exact4)
4788
+ return refuse30("fastspring_body_unsupported");
4789
+ const code = judgeCard2(parsed);
4790
+ return code === null ? CARD29 : refuse30(code);
4791
+ }
4792
+ // src/omise.js
4793
+ var OMISE_PSP = "omise";
4794
+ var OMISE_TOKEN_URL = "https://vault.omise.co/tokens";
4795
+ var OMISE_CARD_KEYS = /* @__PURE__ */ Object.freeze([
4796
+ "number",
4797
+ "name",
4798
+ "expiration_month",
4799
+ "expiration_year",
4800
+ "security_code",
4801
+ "email",
4802
+ "phone_number",
4803
+ "country",
4804
+ "state",
4805
+ "city",
4806
+ "postal_code",
4807
+ "street1",
4808
+ "street2"
4809
+ ]);
4810
+ var BODY_LIMIT29 = 4096;
4811
+ var SECURITY_CODE17 = /^[0-9]{3,4}$/;
4812
+ var MONTH_TEXT2 = /^(?:0?[1-9]|1[0-2])$/;
4813
+ var YEAR_TEXT = /^(?:[0-9]{2}|20[0-9]{2})$/;
4814
+ var COUNTRY5 = /^[A-Za-z]{2}$/;
4815
+ var PHONE3 = /^\+?[0-9 ()-]{6,24}$/;
4816
+ var POSTAL_NUMBER_LIMIT = 99999999999;
4817
+ var TEXT_LIMIT10 = 256;
4818
+ var CONTROL11 = /[\u0000-\u001f\u007f]/;
4819
+ var NUMBER_FIELD = /^[0-9]+(?: [0-9]+){0,6}$/;
4820
+ var record26 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
4821
+ var own8 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
4822
+ var wellFormed2 = (value) => {
4823
+ try {
4824
+ encodeURIComponent(value);
4825
+ return true;
4826
+ }
4827
+ catch {
4828
+ return false;
4829
+ }
4830
+ };
4831
+ var digits2 = (value) => (value.match(/\p{Nd}/gu) ?? []).length;
4832
+ var plainText5 = (value) => typeof value === "string" && value.length >= 1 && value.length <= TEXT_LIMIT10 && !CONTROL11.test(value) && digits2(value) < 12 && wellFormed2(value);
4833
+ var optionalText2 = (value) => value === "" || plainText5(value);
4834
+ function luhnValid(run) {
4835
+ let sum = 0;
4836
+ for (let i = 0; i < run.length; i += 1) {
4837
+ let digit = run.charCodeAt(run.length - 1 - i) - 48;
4838
+ if (i % 2 === 1)
4839
+ digit = digit * 2 > 9 ? digit * 2 - 9 : digit * 2;
4840
+ sum += digit;
4841
+ }
4842
+ return sum % 10 === 0;
4843
+ }
4844
+ function cardShaped(value) {
4845
+ const groups = value.match(/[0-9]+/g) ?? [];
4846
+ for (let first = 0; first < groups.length; first += 1) {
4847
+ let run = "";
4848
+ for (let last = first; last < groups.length && run.length < 19; last += 1) {
4849
+ run += groups[last];
4850
+ if (run.length >= 13 && run.length <= 19 && run[0] >= "2" && run[0] <= "6" && luhnValid(run))
4851
+ return true;
4852
+ }
4853
+ }
4854
+ return false;
4855
+ }
4856
+ var phoneNumber = (value) => typeof value === "string" && PHONE3.test(value) && digits2(value) >= 6 && digits2(value) <= 15 && !cardShaped(value);
4857
+ var numberField = (value) => typeof value === "string" && NUMBER_FIELD.test(value) && digits2(value) >= 12 && digits2(value) <= 19;
4858
+ var refuse31 = (code) => Object.freeze({ verdict: "refuse", code });
4859
+ var CARD30 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
4860
+ function isOmiseTokenUrl(url) {
4861
+ return url === OMISE_TOKEN_URL;
4862
+ }
4863
+ function readBody17(body) {
4864
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT29)
4865
+ return null;
4866
+ let value;
4867
+ try {
4868
+ value = JSON.parse(body);
4869
+ if (!record26(value) || JSON.stringify(value) !== body)
4870
+ return null;
4871
+ }
4872
+ catch {
4873
+ return null;
4874
+ }
4875
+ return value;
4876
+ }
4877
+ function monthValue(value) {
4878
+ if (typeof value === "number")
4879
+ return Number.isSafeInteger(value) && value >= 1 && value <= 12;
4880
+ return typeof value === "string" && MONTH_TEXT2.test(value);
4881
+ }
4882
+ function yearValue(value) {
4883
+ if (typeof value === "number")
4884
+ return Number.isSafeInteger(value) && (value >= 0 && value <= 99 || value >= 2e3 && value <= 2099);
4885
+ return typeof value === "string" && YEAR_TEXT.test(value);
4886
+ }
4887
+ function cardMembers(card) {
4888
+ if (!record26(card) || !Object.keys(card).every((key) => OMISE_CARD_KEYS.includes(key)))
4889
+ return false;
4890
+ if (!numberField(card.number) || !plainText5(card.name) || !monthValue(card.expiration_month) || !yearValue(card.expiration_year) || typeof card.security_code !== "string" || !SECURITY_CODE17.test(card.security_code))
4891
+ return false;
4892
+ for (const key of ["email", "state", "city", "street1", "street2"]) {
4893
+ if (own8(card, key) && !optionalText2(card[key]))
4894
+ return false;
4895
+ }
4896
+ if (own8(card, "country") && (typeof card.country !== "string" || !COUNTRY5.test(card.country)))
4897
+ return false;
4898
+ if (own8(card, "phone_number") && !(card.phone_number === "" || phoneNumber(card.phone_number)))
4899
+ return false;
4900
+ if (own8(card, "postal_code")) {
4901
+ const code = card.postal_code;
4902
+ const sound = typeof code === "number" ? Number.isSafeInteger(code) && code >= 0 && code <= POSTAL_NUMBER_LIMIT : optionalText2(code);
4903
+ if (!sound)
4904
+ return false;
4905
+ }
4906
+ return true;
4907
+ }
4908
+ function omiseBodyVerdict(body) {
4909
+ const value = readBody17(body);
4910
+ if (value === null)
4911
+ return refuse31("omise_body_unsupported");
4912
+ const keys = Object.keys(value);
4913
+ if (keys.length !== 1 || keys[0] !== "card" || !cardMembers(value.card))
4914
+ return refuse31("omise_body_unsupported");
4915
+ return CARD30;
4916
+ }
4917
+ var pin10 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), keys: Object.freeze([...fields.keys]) });
4918
+ var OMISE_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
4919
+ pin10({ id: "taejai", merchant: "Taejai", origins: ["https://taejai.com"], keys: ["pkey_53q6mm66esjr563ob0h"] }),
4920
+ pin10({ id: "socialgiver", merchant: "Socialgiver", origins: ["https://www.socialgiver.com"], keys: ["pkey_5d5o2iahksmyrkybemg"] }),
4921
+ pin10({ id: "thireq_pecko_links", merchant: "Thireq Pecko", origins: ["https://linksplus.omise.co"], keys: ["pkey_65w70xniwsinf0gm680"] })
4922
+ ]);
4923
+ // src/xendit.js
4924
+ var XENDIT_PSP = "xendit";
4925
+ var XENDIT_TOKEN_URL = "https://api.xendit.co/v2/credit_card_tokens";
4926
+ var XENDIT_TOKEN_KEYS = /* @__PURE__ */ Object.freeze([
4927
+ "is_single_use",
4928
+ "card_data",
4929
+ "should_authenticate",
4930
+ "billing_details",
4931
+ "fp_session_id",
4932
+ "metadata",
4933
+ "amount",
4934
+ "card_cvn",
4935
+ "currency",
4936
+ "mid_label",
4937
+ "external_id"
4938
+ ]);
4939
+ var XENDIT_CARD_KEYS = /* @__PURE__ */ Object.freeze([
4940
+ "account_number",
4941
+ "exp_month",
4942
+ "exp_year",
4943
+ "cvn",
4944
+ "card_holder_name",
4945
+ "card_holder_email",
4946
+ "card_holder_first_name",
4947
+ "card_holder_last_name",
4948
+ "card_holder_phone_number"
4949
+ ]);
4950
+ var BODY_LIMIT30 = 8192;
4951
+ var CARD_NUMBER15 = /^[0-9]{12,19}$/;
4952
+ var SECURITY_CODE18 = /^[0-9]{3,4}$/;
4953
+ var MONTH16 = /^(?:0[1-9]|1[0-2])$/;
4954
+ var YEAR17 = /^20[0-9]{2}$/;
4955
+ var CURRENCY4 = /^[A-Z]{3}$/;
4956
+ var AMOUNT_LIMIT3 = 1e12;
4957
+ var FP_SESSION = /^[A-Za-z0-9._:-]{0,256}$/;
4958
+ var FORTER_TOKEN = /^[A-Za-z0-9._~:+/=-]{1,1024}$/;
4959
+ var MID_LABEL = /^[A-Za-z0-9_.-]{1,64}$/;
4960
+ var EXTERNAL_ID = /^[\x21-\x7e]{1,255}$/;
4961
+ var PHONE4 = /^\+?[0-9]{6,15}$/;
4962
+ var TEXT_LIMIT11 = 256;
4963
+ var CONTROL12 = /[\u0000-\u001f\u007f]/;
4964
+ var BILLING_KEYS = /* @__PURE__ */ Object.freeze(["given_names", "surname", "email", "mobile_number", "phone_number", "address"]);
4965
+ var ADDRESS_KEYS5 = /* @__PURE__ */ Object.freeze(["country", "street_line1", "street_line2", "city", "province_state", "postal_code", "category"]);
4966
+ var AMOUNT_TEXT = /^[0-9]{1,13}(?:\.[0-9]{1,2})?$/;
4967
+ var record27 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
4968
+ var own9 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
4969
+ var inOrder5 = (value, keys) => {
4970
+ let at = 0;
4971
+ for (const name of Object.keys(value)) {
4972
+ while (at < keys.length && keys[at] !== name)
4973
+ at += 1;
4974
+ if (at === keys.length)
4975
+ return false;
4976
+ at += 1;
4977
+ }
4978
+ return true;
4979
+ };
4980
+ var wellFormed3 = (value) => {
4981
+ try {
4982
+ encodeURIComponent(value);
4983
+ return true;
4984
+ }
4985
+ catch {
4986
+ return false;
4987
+ }
4988
+ };
4989
+ var plainText6 = (value) => typeof value === "string" && value.length >= 1 && value.length <= TEXT_LIMIT11 && !CONTROL12.test(value) && (value.match(/[0-9]/g) ?? []).length < 12 && wellFormed3(value);
4990
+ var reference = (value) => typeof value === "string" && EXTERNAL_ID.test(value) && (value.match(/[0-9]/g) ?? []).length < 12;
4991
+ var refuse32 = (code) => Object.freeze({ verdict: "refuse", code });
4992
+ var CARD31 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
4993
+ function isXenditTokenUrl(url) {
4994
+ return url === XENDIT_TOKEN_URL;
4995
+ }
4996
+ function readBody18(body) {
4997
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT30)
4998
+ return null;
4999
+ let value;
5000
+ try {
5001
+ value = JSON.parse(body);
5002
+ if (!record27(value) || JSON.stringify(value) !== body)
5003
+ return null;
5004
+ }
5005
+ catch {
5006
+ return null;
5007
+ }
5008
+ return value;
5009
+ }
5010
+ function amountValue(value) {
5011
+ if (typeof value === "number" && !Number.isFinite(value))
5012
+ return false;
5013
+ const text8 = typeof value === "number" ? String(value) : value;
5014
+ if (typeof text8 !== "string" || !AMOUNT_TEXT.test(text8))
5015
+ return false;
5016
+ const amount2 = Number(text8);
5017
+ return amount2 > 0 && amount2 <= AMOUNT_LIMIT3;
5018
+ }
5019
+ function billingDetails(value) {
5020
+ if (!record27(value) || !inOrder5(value, BILLING_KEYS))
5021
+ return false;
5022
+ return Object.keys(value).every((key) => {
5023
+ const field2 = value[key];
5024
+ if (key !== "address")
5025
+ return key === "mobile_number" || key === "phone_number" ? typeof field2 === "string" && PHONE4.test(field2) : plainText6(field2);
5026
+ return record27(field2) && inOrder5(field2, ADDRESS_KEYS5) && Object.keys(field2).every((name) => plainText6(field2[name]));
5027
+ });
5028
+ }
5029
+ function cardData(value) {
5030
+ if (!record27(value) || !inOrder5(value, XENDIT_CARD_KEYS))
5031
+ return false;
5032
+ if (typeof value.account_number !== "string" || !CARD_NUMBER15.test(value.account_number) || typeof value.exp_month !== "string" || !MONTH16.test(value.exp_month) || typeof value.exp_year !== "string" || !YEAR17.test(value.exp_year) || typeof value.cvn !== "string" || !SECURITY_CODE18.test(value.cvn))
5033
+ return false;
5034
+ for (const key of ["card_holder_name", "card_holder_email", "card_holder_first_name", "card_holder_last_name"]) {
5035
+ if (own9(value, key) && !plainText6(value[key]))
5036
+ return false;
5037
+ }
5038
+ return !own9(value, "card_holder_phone_number") || typeof value.card_holder_phone_number === "string" && PHONE4.test(value.card_holder_phone_number);
5039
+ }
5040
+ function xenditBodyVerdict(body) {
5041
+ const value = readBody18(body);
5042
+ if (value === null || !inOrder5(value, XENDIT_TOKEN_KEYS) || !own9(value, "is_single_use") || !own9(value, "card_data")) {
5043
+ return refuse32("xendit_body_unsupported");
5044
+ }
5045
+ if (value.is_single_use !== true)
5046
+ return value.is_single_use === false ? refuse32("xendit_multiple_use") : refuse32("xendit_body_unsupported");
5047
+ if (!cardData(value.card_data) || value.should_authenticate !== true || !amountValue(value.amount) || typeof value.currency !== "string" || !CURRENCY4.test(value.currency))
5048
+ return refuse32("xendit_body_unsupported");
5049
+ if (own9(value, "card_cvn") && value.card_cvn !== value.card_data.cvn)
5050
+ return refuse32("xendit_body_unsupported");
5051
+ if (own9(value, "billing_details") && !billingDetails(value.billing_details))
5052
+ return refuse32("xendit_body_unsupported");
5053
+ if (own9(value, "fp_session_id") && (typeof value.fp_session_id !== "string" || !FP_SESSION.test(value.fp_session_id)))
5054
+ return refuse32("xendit_body_unsupported");
5055
+ if (own9(value, "metadata")) {
5056
+ const metadata = value.metadata;
5057
+ if (!record27(metadata) || Object.keys(metadata).length !== 1 || !record27(metadata._forter) || Object.keys(metadata._forter).length !== 1 || typeof metadata._forter.token !== "string" || !FORTER_TOKEN.test(metadata._forter.token))
5058
+ return refuse32("xendit_body_unsupported");
5059
+ }
5060
+ if (own9(value, "mid_label") && (typeof value.mid_label !== "string" || !MID_LABEL.test(value.mid_label)))
5061
+ return refuse32("xendit_body_unsupported");
5062
+ if (own9(value, "external_id") && !reference(value.external_id))
5063
+ return refuse32("xendit_body_unsupported");
5064
+ return CARD31;
5065
+ }
5066
+ // src/card-fields.js
5067
+ function processorGate(recognizer, url, body) {
5068
+ if (recognizer && recognizer.psp === LYRA_PSP)
5069
+ return lyraBodyVerdict(body, url);
5070
+ if (recognizer && recognizer.psp === WIX_PAYMENTS_PSP) {
5071
+ if (url !== void 0 && !isWixPaymentsTokenizeUrl(url))
5072
+ return { verdict: "refuse", code: "wix_payments_url_refused" };
5073
+ return wixPaymentsBodyVerdict(body);
5074
+ }
5075
+ if (recognizer && recognizer.psp === KOMOJU_PSP)
5076
+ return komojuBodyVerdict(body, url);
5077
+ if (recognizer && recognizer.psp === HIPAY_PSP) {
5078
+ if (url !== void 0 && !isHipayTokenUrl(url))
5079
+ return { verdict: "refuse", code: "hipay_url_refused" };
5080
+ return hipayBodyVerdict(body);
5081
+ }
5082
+ if (recognizer && recognizer.psp === PAYPAL_PSP) {
5083
+ if (url !== void 0 && !isPaypalConfirmUrl(url))
5084
+ return { verdict: "refuse", code: "paypal_url_refused" };
5085
+ return paypalBodyVerdict(body);
5086
+ }
5087
+ if (recognizer && recognizer.psp === MAKECOMMERCE_PSP)
5088
+ return makecommerceBodyVerdict(body, url);
5089
+ if (recognizer && recognizer.psp === OPENPAY_PSP)
5090
+ return openpayBodyVerdict(body, url);
5091
+ if (recognizer && recognizer.psp === POYNT_PSP) {
5092
+ if (url !== void 0 && !isPoyntNonceUrl(url))
5093
+ return { verdict: "refuse", code: "poynt_url_refused" };
5094
+ return poyntBodyVerdict(body);
5095
+ }
5096
+ if (recognizer && recognizer.psp === CARDCOM_PSP)
5097
+ return cardcomBodyVerdict(body, url);
5098
+ if (recognizer && recognizer.psp === TOAST_PSP) {
5099
+ if (url !== void 0 && !isToastPaymentMethodsUrl(url))
5100
+ return { verdict: "refuse", code: "toast_url_refused" };
5101
+ return toastBodyVerdict(body);
5102
+ }
5103
+ if (recognizer && recognizer.psp === PADDLE_VGS_PSP) {
5104
+ if (url !== void 0 && !isPaddleVgsCardsUrl(url))
5105
+ return { verdict: "refuse", code: "paddle_vgs_url_refused" };
5106
+ return paddleVgsBodyVerdict(body);
5107
+ }
5108
+ if (recognizer && recognizer.psp === PAYFAST_PSP) {
5109
+ if (url !== void 0 && !isPayfastPayUrl(url))
5110
+ return { verdict: "refuse", code: "payfast_url_refused" };
5111
+ return payfastBodyVerdict(body);
5112
+ }
5113
+ if (recognizer && recognizer.psp === PAYREXX_PSP) {
5114
+ return url !== void 0 ? payrexxGateVerdict(url, body) : payrexxBodyVerdict(body);
5115
+ }
5116
+ if (recognizer && recognizer.psp === PAYGENT_PSP) {
5117
+ return url !== void 0 ? paygentRequestVerdict(url, body) : paygentBodyVerdict(body);
5118
+ }
5119
+ if (recognizer && recognizer.psp === PAY_NL_PSP) {
5120
+ if (url !== void 0 && !isPayNlTokenUrl(url))
5121
+ return { verdict: "refuse", code: "pay_nl_url_refused" };
5122
+ return payNlBodyVerdict(body);
5123
+ }
5124
+ if (recognizer && recognizer.psp === TWOC2P_PSP) {
5125
+ if (url === void 0)
5126
+ return twoC2pBodyVerdict(body);
5127
+ const target = twoC2pPaymentTarget(url);
5128
+ if (target === null)
5129
+ return { verdict: "refuse", code: "twoc2p_url_refused" };
5130
+ if (!target.reviewed)
5131
+ return twoC2pPaymentCarriesCard(body) ? { verdict: "refuse", code: "twoc2p_build_unreviewed" } : { verdict: "continue" };
5132
+ const keyBytes = twoC2pKeyBytes(target.environment);
5133
+ return keyBytes === null ? { verdict: "refuse", code: "twoc2p_field_unreviewed" } : twoC2pBodyVerdict(body, keyBytes, target.environment);
5134
+ }
5135
+ if (recognizer && recognizer.psp === APS_PSP)
5136
+ return apsBodyVerdict(body, url);
5137
+ if (recognizer && recognizer.psp === CONEKTA_PSP)
5138
+ return conektaBodyVerdict(body, url);
5139
+ if (recognizer && recognizer.psp === PADDLE_TOKENEX_PSP) {
5140
+ const target = url !== void 0 ? paddleTokenexPayTarget(url) : null;
5141
+ if (url !== void 0 && target === null)
5142
+ return { verdict: "refuse", code: "paddle_tokenex_pay_unsupported" };
5143
+ return paddleTokenexBodyVerdict(body, target ? target.line : void 0);
5144
+ }
5145
+ if (recognizer && recognizer.psp === PAYMONGO_PSP) {
5146
+ const session = url !== void 0 ? paymongoCheckoutSession(url) : void 0;
5147
+ if (url !== void 0 && session === null)
5148
+ return { verdict: "refuse", code: "paymongo_url_refused" };
5149
+ return paymongoBodyVerdict(body, session);
5150
+ }
5151
+ if (recognizer && recognizer.psp === GOPAY_PSP)
5152
+ return gopayBodyVerdict(body, url);
5153
+ if (recognizer && recognizer.psp === REVOLUT_PSP) {
5154
+ if (url !== void 0 && !isRevolutPaymentsUrl(url))
5155
+ return { verdict: "refuse", code: "revolut_url_refused" };
5156
+ return revolutBodyVerdict(body);
5157
+ }
5158
+ if (recognizer && recognizer.psp === SUMUP_PSP)
5159
+ return sumupBodyVerdict(body, url);
5160
+ if (recognizer && recognizer.psp === CLOVER_PSP)
5161
+ return cloverBodyVerdict(body, url);
5162
+ if (recognizer && recognizer.psp === TAP_PAYMENTS_PSP) {
5163
+ if (url !== void 0 && !isTapPaymentsTokenUrl(url))
5164
+ return { verdict: "refuse", code: "tap_payments_url_refused" };
5165
+ return tapPaymentsBodyVerdict(body);
5166
+ }
5167
+ if (recognizer && recognizer.psp === TOKENEX_IFRAME_PSP)
5168
+ return tokenexIframeBodyVerdict(body, url);
5169
+ if (recognizer && recognizer.psp === NEXI_CHECKOUT_PSP)
5170
+ return nexiCheckoutBodyVerdict(body, url);
5171
+ if (recognizer && recognizer.psp === FASTSPRING_PSP) {
5172
+ if (url !== void 0 && !isFastspringCardUrl(url))
5173
+ return { verdict: "refuse", code: "fastspring_url_refused" };
5174
+ return fastspringBodyVerdict(body);
5175
+ }
5176
+ if (recognizer && recognizer.psp === OMISE_PSP) {
5177
+ if (url !== void 0 && !isOmiseTokenUrl(url))
5178
+ return { verdict: "refuse", code: "omise_url_refused" };
5179
+ return omiseBodyVerdict(body);
5180
+ }
5181
+ if (recognizer && recognizer.psp === XENDIT_PSP) {
5182
+ if (url !== void 0 && !isXenditTokenUrl(url))
5183
+ return { verdict: "refuse", code: "xendit_url_refused" };
5184
+ return xenditBodyVerdict(body);
2969
5185
  }
2970
- if (recognizer && recognizer.psp === SUMUP_PSP)
2971
- return sumupBodyVerdict(body, url);
2972
5186
  if (recognizer && recognizer.psp === GRAVY_PSP)
2973
5187
  return gravyBodyVerdict(body);
2974
5188
  if (recognizer && recognizer.psp === MONERIS_PSP) {
@@ -2998,7 +5212,7 @@ function carriesCardFields(recognizer, body) {
2998
5212
  if (typeof body !== "string" || body === "")
2999
5213
  return false;
3000
5214
  const anyCase = recognizer.caseInsensitiveFormKeys === true;
3001
- const wanted = anyCase ? fields.map((field) => String(field).toLowerCase()) : fields;
5215
+ const wanted = anyCase ? fields.map((field2) => String(field2).toLowerCase()) : fields;
3002
5216
  for (const chunk of body.split("&")) {
3003
5217
  const eq = chunk.indexOf("=");
3004
5218
  if (eq <= 0 || eq === chunk.length - 1)
@@ -3086,7 +5300,7 @@ function splitCardLeg(recognizer, body) {
3086
5300
  const absorb = list(split.absorb);
3087
5301
  const pass = list(split.pass);
3088
5302
  const sibling = list(split.siblingKeys);
3089
- const own3 = [];
5303
+ const own10 = [];
3090
5304
  const seen = /* @__PURE__ */ new Set();
3091
5305
  for (const chunk of body.split("&")) {
3092
5306
  const eq = chunk.indexOf("=");
@@ -3103,13 +5317,13 @@ function splitCardLeg(recognizer, body) {
3103
5317
  return null;
3104
5318
  seen.add(key);
3105
5319
  if (!sibling.includes(key))
3106
- own3.push(key);
5320
+ own10.push(key);
3107
5321
  }
3108
- if (own3.length === 0)
5322
+ if (own10.length === 0)
3109
5323
  return null;
3110
- if (own3.every((key) => absorb.includes(key)))
5324
+ if (own10.every((key) => absorb.includes(key)))
3111
5325
  return "absorb";
3112
- if (own3.every((key) => pass.includes(key)))
5326
+ if (own10.every((key) => pass.includes(key)))
3113
5327
  return "pass";
3114
5328
  return null;
3115
5329
  }