@agent-cards/sdk 0.23.21 → 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.
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  // Generated from @agent-cards/payment-core. Do not edit.
3
- // artifact-sha256: f313f792b559132984a5fefb5678f9f2416a3f93adbf526b8345bc29649581df
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 text6 = typeof value === "number" && Number.isFinite(value) ? String(value) : value;
105
- const m = typeof text6 === "string" ? AMOUNT.exec(text6) : 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 own6 = Object.keys(value);
361
- return own6.length === keys.length && own6.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(text6) {
585
+ function utf8(text8) {
586
586
  const out = [];
587
- for (const char of text6) {
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,13 +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 pin8 = key && typeof key === "object" ? key.sha256 : void 0;
666
+ const pin11 = key && typeof key === "object" ? key.sha256 : void 0;
667
667
  const named = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "exponent") ? key.exponent : void 0;
668
668
  if (named !== void 0 && named !== 17)
669
669
  throw refuse6("key");
670
670
  if (typeof spki !== "string" || spki.length > 1024 || spki.length % 4 !== 0 || !BASE64.test(spki))
671
671
  throw refuse6("key");
672
- if (typeof pin8 !== "string" || !SHA256_HEX.test(pin8))
672
+ if (typeof pin11 !== "string" || !SHA256_HEX.test(pin11))
673
673
  throw refuse6("key");
674
674
  let binary;
675
675
  try {
@@ -681,7 +681,7 @@ function parseRsaPublicKey(key) {
681
681
  if (btoa(binary) !== spki)
682
682
  throw refuse6("key");
683
683
  const der = Uint8Array.from(binary, (c) => c.charCodeAt(0));
684
- if (sha256Hex(der) !== pin8)
684
+ if (sha256Hex(der) !== pin11)
685
685
  throw refuse6("key");
686
686
  const outer = readElement(der, 0, 48);
687
687
  if (outer.end !== der.length || outer.start + RSA_ALGORITHM.length > der.length)
@@ -771,8 +771,8 @@ var PADDLE_TOKENEX_PSP = "paddle_tokenex";
771
771
  var PADDLE_TOKENEX_FACT_KEYS = /* @__PURE__ */ Object.freeze(["card_first_six", "card_last_four", "expiry_month", "expiry_year", "card_brand"]);
772
772
  var record4 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
773
773
  var sameKeys2 = (value, keys) => {
774
- const own6 = Object.keys(value);
775
- return own6.length === keys.length && own6.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]);
776
776
  };
777
777
  var refuse7 = (code) => Object.freeze({ verdict: "refuse", code });
778
778
  var CARD6 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
@@ -1261,8 +1261,8 @@ var TEXT_LIMIT = 256;
1261
1261
  var CONTROL4 = /[\u0000-\u001f\u007f]/;
1262
1262
  var record6 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
1263
1263
  var sameKeys3 = (value, keys) => {
1264
- const own6 = Object.keys(value);
1265
- return own6.length === keys.length && own6.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]);
1266
1266
  };
1267
1267
  var plainText = (value) => typeof value === "string" && value.length <= TEXT_LIMIT && !CONTROL4.test(value) && (value.match(/[0-9]/g) ?? []).length < 12;
1268
1268
  var refuse9 = (code) => Object.freeze({ verdict: "refuse", code });
@@ -1292,13 +1292,13 @@ function billingFields(value) {
1292
1292
  if (names.length > MAX_FIELDS)
1293
1293
  return false;
1294
1294
  return names.every((name) => {
1295
- const field = value[name];
1295
+ const field2 = value[name];
1296
1296
  if (!FIELD_NAME.test(name))
1297
1297
  return false;
1298
- if (!record6(field))
1299
- return billingText(field);
1300
- const nested = Object.keys(field);
1301
- 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]));
1302
1302
  });
1303
1303
  }
1304
1304
  function wixPaymentsBodyVerdict(body) {
@@ -1372,14 +1372,14 @@ function readJson2(body) {
1372
1372
  catch {
1373
1373
  return { parsed: null, exact: false };
1374
1374
  }
1375
- let exact3 = false;
1375
+ let exact4 = false;
1376
1376
  try {
1377
- exact3 = body.length <= BODY_LIMIT6 && JSON.stringify(parsed) === body;
1377
+ exact4 = body.length <= BODY_LIMIT6 && JSON.stringify(parsed) === body;
1378
1378
  }
1379
1379
  catch {
1380
- exact3 = false;
1380
+ exact4 = false;
1381
1381
  }
1382
- return { parsed, exact: exact3 };
1382
+ return { parsed, exact: exact4 };
1383
1383
  }
1384
1384
  function billingValue(value) {
1385
1385
  if (value === UNDEFINED)
@@ -1434,14 +1434,14 @@ function attachType(parsed) {
1434
1434
  return typeof type === "string" ? type : null;
1435
1435
  }
1436
1436
  function paymongoBodyVerdict(body, session) {
1437
- const { parsed, exact: exact3 } = readJson2(body);
1437
+ const { parsed, exact: exact4 } = readJson2(body);
1438
1438
  const type = parsed === null ? null : attachType(parsed);
1439
1439
  if (type !== "card") {
1440
1440
  if (parsed === null)
1441
1441
  return body === void 0 || body === null || body === "" ? CONTINUE4 : refuse10("paymongo_body_unsupported");
1442
1442
  return namesCardValue(parsed) ? refuse10("paymongo_body_unsupported") : CONTINUE4;
1443
1443
  }
1444
- if (!exact3)
1444
+ if (!exact4)
1445
1445
  return refuse10("paymongo_body_unsupported");
1446
1446
  const code = judgeCardAttach(parsed, session);
1447
1447
  return code === null ? CARD9 : refuse10(code);
@@ -1464,15 +1464,15 @@ var EXPIRATION = /^[0-9]{2}(?:0[1-9]|1[0-2])$/;
1464
1464
  var CARD_PAYMENT = "PAYMENT_CARD";
1465
1465
  var record8 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
1466
1466
  var sameKeys4 = (value, keys) => {
1467
- const own6 = Object.keys(value);
1468
- return own6.length === keys.length && own6.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]);
1469
1469
  };
1470
1470
  var refuse11 = (code) => Object.freeze({ verdict: "refuse", code });
1471
1471
  var CARD10 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
1472
- function luhn(digits2) {
1472
+ function luhn(digits3) {
1473
1473
  let sum = 0;
1474
- for (let at = 0; at < digits2.length; at += 1) {
1475
- let digit = Number(digits2[digits2.length - 1 - at]);
1474
+ for (let at = 0; at < digits3.length; at += 1) {
1475
+ let digit = Number(digits3[digits3.length - 1 - at]);
1476
1476
  if (at % 2 === 1) {
1477
1477
  digit *= 2;
1478
1478
  if (digit > 9)
@@ -1619,10 +1619,10 @@ function readForm2(body) {
1619
1619
  return null;
1620
1620
  }
1621
1621
  }
1622
- function cardNetwork2(digits2) {
1623
- if (VISA2.test(digits2))
1622
+ function cardNetwork2(digits3) {
1623
+ if (VISA2.test(digits3))
1624
1624
  return "visa";
1625
- return MASTERCARD2.test(digits2) ? "mastercard" : null;
1625
+ return MASTERCARD2.test(digits3) ? "mastercard" : null;
1626
1626
  }
1627
1627
  function judgeBody2(body) {
1628
1628
  const pairs = readForm2(body);
@@ -1646,7 +1646,7 @@ function judgeBody2(body) {
1646
1646
  }
1647
1647
  const number = value["card[number]"];
1648
1648
  const network = GROUPED.test(number) ? cardNetwork2(number.replace(/ /g, "")) : null;
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((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")) {
1650
1650
  return { verdict: refuse12("payrexx_body_unsupported"), pairs: null };
1651
1651
  }
1652
1652
  if (value.isTokenization === "true" || value.isSubscription === "true")
@@ -1695,8 +1695,8 @@ var LOCALE = /^[a-z]{2}(?:-[A-Za-z]{2,4})?$/;
1695
1695
  var PAN_LIKE3 = /(?:[0-9][ _.:-]*){12,}/;
1696
1696
  var record9 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
1697
1697
  var sameKeys5 = (value, keys) => {
1698
- const own6 = Object.keys(value);
1699
- return own6.length === keys.length && own6.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]);
1700
1700
  };
1701
1701
  var refuse13 = (code) => Object.freeze({ verdict: "refuse", code });
1702
1702
  var CARD12 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
@@ -1862,6 +1862,17 @@ function paygentRequestVerdict(url, body) {
1862
1862
  const key = pairs[1][1];
1863
1863
  return (environment2 === "production" ? LIVE_KEY : SANDBOX_KEY).test(key) ? CARD13 : refuse14("paygent_key_environment");
1864
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
+ ]);
1865
1876
  // src/multipart-form.js
1866
1877
  var BODY_LIMIT11 = 65536;
1867
1878
  var CRLF = "\r\n";
@@ -1969,9 +1980,9 @@ var PAY_NL_CARD_PARTS = /* @__PURE__ */ Object.freeze([
1969
1980
  "payment[card][expire_month]",
1970
1981
  "payment[card][expire_year]"
1971
1982
  ]);
1972
- 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]) });
1973
1984
  var PAY_NL_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
1974
- 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"] })
1975
1986
  ]);
1976
1987
  var RULE = /* @__PURE__ */ Object.freeze({ parts: PAY_NL_PARTS, card: PAY_NL_CARD_PARTS });
1977
1988
  var SERVICE_ID = /^SL-\d{4}-\d{4}$/;
@@ -2087,10 +2098,10 @@ var wellFormed = (value) => {
2087
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);
2088
2099
  var between = (value, min, max) => Number.isSafeInteger(value) && value >= min && value <= max;
2089
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})$/;
2090
- var luhn2 = (digits2) => {
2101
+ var luhn2 = (digits3) => {
2091
2102
  let sum = 0;
2092
- for (let at = 0; at < digits2.length; at += 1) {
2093
- let d = digits2.charCodeAt(digits2.length - 1 - at) - 48;
2103
+ for (let at = 0; at < digits3.length; at += 1) {
2104
+ let d = digits3.charCodeAt(digits3.length - 1 - at) - 48;
2094
2105
  if (at % 2 === 1) {
2095
2106
  d *= 2;
2096
2107
  if (d > 9)
@@ -2101,7 +2112,7 @@ var luhn2 = (digits2) => {
2101
2112
  return sum % 10 === 0;
2102
2113
  };
2103
2114
  var ANY_NETWORK = /^[2-6][0-9]{12,18}$/;
2104
- var holdsCardShape = (text6, shape = NETWORK) => (text6.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));
2105
2116
  var phone = (value) => typeof value === "string" && PHONE.test(value) && (value.match(/[0-9]/g) ?? []).length >= 6 && (value.match(/[0-9]/g) ?? []).length <= 15;
2106
2117
  var refuse16 = (code) => Object.freeze({ verdict: "refuse", code });
2107
2118
  var CARD15 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
@@ -2312,10 +2323,10 @@ function orderedSubset(value, keys) {
2312
2323
  }
2313
2324
  return true;
2314
2325
  }
2315
- function luhn3(digits2) {
2326
+ function luhn3(digits3) {
2316
2327
  let sum = 0;
2317
- for (let at = 0; at < digits2.length; at += 1) {
2318
- let digit = Number(digits2[digits2.length - 1 - at]);
2328
+ for (let at = 0; at < digits3.length; at += 1) {
2329
+ let digit = Number(digits3[digits3.length - 1 - at]);
2319
2330
  if (at % 2 === 1) {
2320
2331
  digit *= 2;
2321
2332
  if (digit > 9)
@@ -2329,13 +2340,13 @@ var printable = (value) => [...value].every((ch) => ch.charCodeAt(0) >= 32 && ch
2329
2340
  function typed(value, limit = 256) {
2330
2341
  return typeof value === "string" && value.length >= 1 && value.length <= limit && !PAN_LIKE4.test(value) && printable(value);
2331
2342
  }
2332
- function decodeBase64(text6) {
2333
- if (typeof text6 !== "string" || !BASE643.test(text6) || text6.length % 4 !== 0)
2343
+ function decodeBase64(text8) {
2344
+ if (typeof text8 !== "string" || !BASE643.test(text8) || text8.length % 4 !== 0)
2334
2345
  return null;
2335
2346
  let bits = 0;
2336
2347
  let value = 0;
2337
2348
  let out = "";
2338
- for (const ch of text6.replace(/=+$/, "")) {
2349
+ for (const ch of text8.replace(/=+$/, "")) {
2339
2350
  value = (value << 6 | BASE64_ALPHABET.indexOf(ch)) & 16777215;
2340
2351
  bits += 6;
2341
2352
  if (bits >= 8) {
@@ -2345,8 +2356,8 @@ function decodeBase64(text6) {
2345
2356
  }
2346
2357
  return out;
2347
2358
  }
2348
- function soundDevice(text6) {
2349
- const json = decodeBase64(text6);
2359
+ function soundDevice(text8) {
2360
+ const json = decodeBase64(text8);
2350
2361
  if (json === null)
2351
2362
  return false;
2352
2363
  let value;
@@ -2464,17 +2475,17 @@ function sumupBodyVerdict(body, url) {
2464
2475
  var SALTED = /* @__PURE__ */ Object.freeze([83, 97, 108, 116, 101, 100, 95, 95]);
2465
2476
  var B64 = /^[A-Za-z0-9+/]+={0,2}$/;
2466
2477
  var FIELD_LIMIT = 1024;
2467
- function decodeCanonical(text6) {
2468
- if (typeof text6 !== "string" || text6.length === 0 || text6.length % 4 !== 0 || !B64.test(text6))
2478
+ function decodeCanonical(text8) {
2479
+ if (typeof text8 !== "string" || text8.length === 0 || text8.length % 4 !== 0 || !B64.test(text8))
2469
2480
  return null;
2470
2481
  let binary;
2471
2482
  try {
2472
- binary = atob(text6);
2483
+ binary = atob(text8);
2473
2484
  }
2474
2485
  catch {
2475
2486
  return null;
2476
2487
  }
2477
- if (btoa(binary) !== text6)
2488
+ if (btoa(binary) !== text8)
2478
2489
  return null;
2479
2490
  return Uint8Array.from(binary, (char) => char.charCodeAt(0));
2480
2491
  }
@@ -2716,8 +2727,8 @@ var TEXT_LIMIT3 = 256;
2716
2727
  var CONTROL7 = /[\u0000-\u001f\u007f]/;
2717
2728
  var record13 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
2718
2729
  var sameKeys7 = (value, keys) => {
2719
- const own6 = Object.keys(value);
2720
- return own6.length === keys.length && own6.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]);
2721
2732
  };
2722
2733
  var plainText3 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT3 && !CONTROL7.test(value) && (value.match(/[0-9]/g) ?? []).length < 12;
2723
2734
  var refuse19 = (code) => Object.freeze({ verdict: "refuse", code });
@@ -2761,9 +2772,9 @@ function hipayBodyVerdict(body) {
2761
2772
  return refuse19("hipay_keeps_card");
2762
2773
  return value.multi_use === 0 ? CARD18 : refuse19("hipay_body_unsupported");
2763
2774
  }
2764
- var pin5 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), usernames: Object.freeze([...fields.usernames]) });
2775
+ var pin6 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), usernames: Object.freeze([...fields.usernames]) });
2765
2776
  var HIPAY_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
2766
- pin5({ id: "happybulle", merchant: "HappyBulle", origins: ["https://www.happybulle.com"], usernames: ["94683309.secure-gateway.hipay-tpp.com"] })
2777
+ pin6({ id: "happybulle", merchant: "HappyBulle", origins: ["https://www.happybulle.com"], usernames: ["94683309.secure-gateway.hipay-tpp.com"] })
2767
2778
  ]);
2768
2779
  // src/amazon-payment-services.js
2769
2780
  var APS_PSP = "amazon_payment_services";
@@ -3049,14 +3060,14 @@ function cloverTokenUrl(url) {
3049
3060
  return null;
3050
3061
  return Object.freeze({ host: parsed.hostname, environment: CLOVER_TOKEN_HOSTS[parsed.hostname] });
3051
3062
  }
3052
- function cloverBrand(digits2) {
3053
- if (typeof digits2 !== "string" || !/^[0-9]{6,19}$/.test(digits2))
3063
+ function cloverBrand(digits3) {
3064
+ if (typeof digits3 !== "string" || !/^[0-9]{6,19}$/.test(digits3))
3054
3065
  return null;
3055
- const two = Number(digits2.slice(0, 2));
3056
- const three = Number(digits2.slice(0, 3));
3057
- const four = Number(digits2.slice(0, 4));
3058
- const six = Number(digits2.slice(0, 6));
3059
- if (digits2.startsWith("4"))
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"))
3060
3071
  return "VISA";
3061
3072
  if (two === 34 || two === 37)
3062
3073
  return "AMEX";
@@ -3158,14 +3169,14 @@ var record16 = (value) => value !== null && typeof value === "object" && !Array.
3158
3169
  function isTapPaymentsTokenUrl(url) {
3159
3170
  return url === TAP_PAYMENTS_TOKEN_URL;
3160
3171
  }
3161
- var pin6 = (fields) => Object.freeze({
3172
+ var pin7 = (fields) => Object.freeze({
3162
3173
  ...fields,
3163
3174
  origins: Object.freeze([...fields.origins]),
3164
3175
  sessions: Object.freeze({ ...fields.sessions }),
3165
3176
  key: Object.freeze({ ...fields.key })
3166
3177
  });
3167
3178
  var TAP_PAYMENTS_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
3168
- pin6({
3179
+ pin7({
3169
3180
  id: "casefilegame",
3170
3181
  merchant: "Casefilegame",
3171
3182
  tapMerchantId: "67977048",
@@ -3429,7 +3440,7 @@ var YEAR11 = /^[0-9]{2}$/;
3429
3440
  var CODE4 = /^[0-9]{3}$/;
3430
3441
  var NAME_LIMIT3 = 100;
3431
3442
  var NAME_WORD = /[a-z]+/gi;
3432
- var printable2 = (text6) => [...text6].every((character) => {
3443
+ var printable2 = (text8) => [...text8].every((character) => {
3433
3444
  const point = character.codePointAt(0);
3434
3445
  return point >= 32 && !(point >= 127 && point <= 159) && point !== 8232 && point !== 8233;
3435
3446
  });
@@ -3438,15 +3449,15 @@ var HOSTNAME = /^(?=.{1,253}$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](
3438
3449
  var PUBLISHABLE_KEY = /^[A-Za-z0-9]{16,64}$/;
3439
3450
  var record18 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3440
3451
  var sameKeys8 = (value, keys) => {
3441
- const own6 = Object.keys(value);
3442
- return own6.length === keys.length && own6.every((key, at) => key === keys[at]);
3452
+ const own10 = Object.keys(value);
3453
+ return own10.length === keys.length && own10.every((key, at) => key === keys[at]);
3443
3454
  };
3444
3455
  var refuse24 = (code) => Object.freeze({ verdict: "refuse", code });
3445
3456
  var CARD23 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
3446
- function luhn4(digits2) {
3457
+ function luhn4(digits3) {
3447
3458
  let sum = 0;
3448
- for (let at = 0; at < digits2.length; at += 1) {
3449
- let digit = Number(digits2[digits2.length - 1 - at]);
3459
+ for (let at = 0; at < digits3.length; at += 1) {
3460
+ let digit = Number(digits3[digits3.length - 1 - at]);
3450
3461
  if (at % 2 === 1) {
3451
3462
  digit *= 2;
3452
3463
  if (digit > 9)
@@ -3705,12 +3716,93 @@ var SUCCESS_RULES = {
3705
3716
  cvvIncluded: (value) => typeof value === "boolean"
3706
3717
  };
3707
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
+ ]);
3708
3800
  // src/poynt.js
3709
3801
  var POYNT_PSP = "poynt";
3710
3802
  var UUID4 = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
3711
3803
  var NONCE_URL = new RegExp(`^https://services\\.poynt\\.net/v1/commerce/stores/(${UUID4})/payment-tokens/generate-nonce$`);
3712
3804
  var STORE_ID = new RegExp(`^${UUID4}$`);
3713
- var BODY_LIMIT23 = 8192;
3805
+ var BODY_LIMIT24 = 8192;
3714
3806
  var ROOT_KEYS8 = /* @__PURE__ */ Object.freeze(["applicationId", "channelId", "card", "verificationData"]);
3715
3807
  var CARD_KEYS10 = /* @__PURE__ */ Object.freeze(["number", "expirationMonth", "expirationYear", "type", "cardHolderFirstName", "cardHolderLastName", "cardHolderFullName"]);
3716
3808
  var ADDRESS_KEYS4 = /* @__PURE__ */ Object.freeze(["postalCode", "line1", "line2", "city", "territory", "countryCode", "postalCodeExtension"]);
@@ -3720,17 +3812,17 @@ var CARD_ON_FILE_KEYS = /* @__PURE__ */ Object.freeze(["saveFinancialInstrumentO
3720
3812
  var CARD_TYPES = /* @__PURE__ */ Object.freeze(["VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DINERS_CLUB", "DISCOVER", "JCB", "UNIONPAY", "MAESTRO", "ELO", "HIPERCARD", "TROY", ""]);
3721
3813
  var CARD_NUMBER12 = /^[0-9]{12,19}$/;
3722
3814
  var MONTH12 = /^(?:0[1-9]|1[0-2])$/;
3723
- var YEAR12 = /^20[0-9]{2}$/;
3724
- var SECURITY_CODE14 = /^[0-9]{3,4}$/;
3815
+ var YEAR13 = /^20[0-9]{2}$/;
3816
+ var SECURITY_CODE15 = /^[0-9]{3,4}$/;
3725
3817
  var IDENTIFIER = /^[A-Za-z0-9:._-]{1,128}$/;
3726
3818
  var APPLICATION_ID = new RegExp(`^urn:aid:${UUID4}$`);
3727
3819
  var POSTAL_CODE3 = /^[A-Za-z0-9_]{0,16}$/;
3728
- var COUNTRY3 = /^[A-Z]{2}$/;
3820
+ var COUNTRY4 = /^[A-Z]{2}$/;
3729
3821
  var TEXT_LIMIT7 = 256;
3730
3822
  var CONTROL10 = /[\u0000-\u001f\u007f]/;
3731
- var cardLike2 = (text6) => (text6.match(/[0-9]/g) ?? []).length >= 12;
3823
+ var cardLike2 = (text8) => (text8.match(/[0-9]/g) ?? []).length >= 12;
3732
3824
  var text5 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT7 && !CONTROL10.test(value) && !cardLike2(value);
3733
- var record20 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3825
+ var record21 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
3734
3826
  var own5 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
3735
3827
  var inOrder4 = (value, order, required) => {
3736
3828
  const keys = Object.keys(value);
@@ -3743,8 +3835,8 @@ var inOrder4 = (value, order, required) => {
3743
3835
  }
3744
3836
  return required.every((key) => keys.includes(key));
3745
3837
  };
3746
- var refuse25 = (code) => Object.freeze({ verdict: "refuse", code });
3747
- var CARD24 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
3838
+ var refuse26 = (code) => Object.freeze({ verdict: "refuse", code });
3839
+ var CARD25 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
3748
3840
  function poyntStoreId(url) {
3749
3841
  const match = typeof url === "string" ? NONCE_URL.exec(url) : null;
3750
3842
  return match ? match[1] : null;
@@ -3753,12 +3845,12 @@ function isPoyntNonceUrl(url) {
3753
3845
  return poyntStoreId(url) !== null;
3754
3846
  }
3755
3847
  function readBody14(body) {
3756
- if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT23)
3848
+ if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT24)
3757
3849
  return null;
3758
3850
  let value;
3759
3851
  try {
3760
3852
  value = JSON.parse(body);
3761
- if (!record20(value) || JSON.stringify(value) !== body)
3853
+ if (!record21(value) || JSON.stringify(value) !== body)
3762
3854
  return null;
3763
3855
  }
3764
3856
  catch {
@@ -3769,32 +3861,32 @@ function readBody14(body) {
3769
3861
  function poyntBodyVerdict(body) {
3770
3862
  const value = readBody14(body);
3771
3863
  if (value === null)
3772
- return refuse25("poynt_body_unsupported");
3864
+ return refuse26("poynt_body_unsupported");
3773
3865
  if (CARD_ON_FILE_KEYS.some((key) => own5(value, key)))
3774
- return refuse25("poynt_card_on_file");
3866
+ return refuse26("poynt_card_on_file");
3775
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))) {
3776
- return refuse25("poynt_body_unsupported");
3868
+ return refuse26("poynt_body_unsupported");
3777
3869
  }
3778
3870
  const { card, verificationData: verification } = value;
3779
- if (!record20(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" || !YEAR12.test(card.expirationYear) || !CARD_TYPES.includes(card.type) || !["cardHolderFirstName", "cardHolderLastName", "cardHolderFullName"].every((key) => !own5(card, key) || text5(card[key]))) {
3780
- return refuse25("poynt_body_unsupported");
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");
3781
3873
  }
3782
- if (!record20(verification) || Object.keys(verification).join() !== "cardHolderBillingAddress,cvData" || typeof verification.cvData !== "string" || !SECURITY_CODE14.test(verification.cvData))
3783
- return refuse25("poynt_body_unsupported");
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");
3784
3876
  const address2 = verification.cardHolderBillingAddress;
3785
- if (!record20(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") && !COUNTRY3.test(address2.countryCode))
3786
- return refuse25("poynt_body_unsupported");
3787
- return CARD24;
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;
3788
3880
  }
3789
- var pin7 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), storeIds: Object.freeze([...fields.storeIds]) });
3881
+ var pin9 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), storeIds: Object.freeze([...fields.storeIds]) });
3790
3882
  var POYNT_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
3791
- pin7({
3883
+ pin9({
3792
3884
  id: "yearning_for_learning",
3793
3885
  merchant: "Yearning for Learning Publishing & Coaching",
3794
3886
  origins: ["https://ff305485-ba6c-423a-87b0-cebe3f83ffe9.mysimplestore.com"],
3795
3887
  storeIds: ["71ac12ed-e61f-4318-95db-db0e7c649d6f"]
3796
3888
  }),
3797
- pin7({
3889
+ pin9({
3798
3890
  id: "timber_ridge_bookkeeping",
3799
3891
  merchant: "Timber Ridge Bookkeeping",
3800
3892
  origins: ["https://d7d64ac3-0352-4e53-af9a-f6d8e7b5fb71.mysimplestore.com"],
@@ -3802,6 +3894,1175 @@ var POYNT_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
3802
3894
  })
3803
3895
  ]);
3804
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
+ }
3805
5066
  // src/card-fields.js
3806
5067
  function processorGate(recognizer, url, body) {
3807
5068
  if (recognizer && recognizer.psp === LYRA_PSP)
@@ -3825,11 +5086,20 @@ function processorGate(recognizer, url, body) {
3825
5086
  }
3826
5087
  if (recognizer && recognizer.psp === MAKECOMMERCE_PSP)
3827
5088
  return makecommerceBodyVerdict(body, url);
5089
+ if (recognizer && recognizer.psp === OPENPAY_PSP)
5090
+ return openpayBodyVerdict(body, url);
3828
5091
  if (recognizer && recognizer.psp === POYNT_PSP) {
3829
5092
  if (url !== void 0 && !isPoyntNonceUrl(url))
3830
5093
  return { verdict: "refuse", code: "poynt_url_refused" };
3831
5094
  return poyntBodyVerdict(body);
3832
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
+ }
3833
5103
  if (recognizer && recognizer.psp === PADDLE_VGS_PSP) {
3834
5104
  if (url !== void 0 && !isPaddleVgsCardsUrl(url))
3835
5105
  return { verdict: "refuse", code: "paddle_vgs_url_refused" };
@@ -3896,6 +5166,23 @@ function processorGate(recognizer, url, body) {
3896
5166
  }
3897
5167
  if (recognizer && recognizer.psp === TOKENEX_IFRAME_PSP)
3898
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);
5185
+ }
3899
5186
  if (recognizer && recognizer.psp === GRAVY_PSP)
3900
5187
  return gravyBodyVerdict(body);
3901
5188
  if (recognizer && recognizer.psp === MONERIS_PSP) {
@@ -3925,7 +5212,7 @@ function carriesCardFields(recognizer, body) {
3925
5212
  if (typeof body !== "string" || body === "")
3926
5213
  return false;
3927
5214
  const anyCase = recognizer.caseInsensitiveFormKeys === true;
3928
- const wanted = anyCase ? fields.map((field) => String(field).toLowerCase()) : fields;
5215
+ const wanted = anyCase ? fields.map((field2) => String(field2).toLowerCase()) : fields;
3929
5216
  for (const chunk of body.split("&")) {
3930
5217
  const eq = chunk.indexOf("=");
3931
5218
  if (eq <= 0 || eq === chunk.length - 1)
@@ -4013,7 +5300,7 @@ function splitCardLeg(recognizer, body) {
4013
5300
  const absorb = list(split.absorb);
4014
5301
  const pass = list(split.pass);
4015
5302
  const sibling = list(split.siblingKeys);
4016
- const own6 = [];
5303
+ const own10 = [];
4017
5304
  const seen = /* @__PURE__ */ new Set();
4018
5305
  for (const chunk of body.split("&")) {
4019
5306
  const eq = chunk.indexOf("=");
@@ -4030,13 +5317,13 @@ function splitCardLeg(recognizer, body) {
4030
5317
  return null;
4031
5318
  seen.add(key);
4032
5319
  if (!sibling.includes(key))
4033
- own6.push(key);
5320
+ own10.push(key);
4034
5321
  }
4035
- if (own6.length === 0)
5322
+ if (own10.length === 0)
4036
5323
  return null;
4037
- if (own6.every((key) => absorb.includes(key)))
5324
+ if (own10.every((key) => absorb.includes(key)))
4038
5325
  return "absorb";
4039
- if (own6.every((key) => pass.includes(key)))
5326
+ if (own10.every((key) => pass.includes(key)))
4040
5327
  return "pass";
4041
5328
  return null;
4042
5329
  }