@agent-cards/sdk 0.24.1 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/approvals.d.ts +44 -0
- package/dist/approvals.js +10 -0
- package/dist/capabilities.generated.js +1 -1
- package/dist/card-fields.generated.js +357 -263
- package/dist/cdp.js +34 -13
- package/dist/client.d.ts +9 -0
- package/dist/client.js +9 -0
- package/dist/datatrans.generated.js +3 -1
- package/dist/index.d.ts +1 -1
- package/dist/lifecycle.d.ts +23 -5
- package/dist/lifecycle.js +45 -22
- package/dist/merchant-card-endpoints.generated.js +30 -3
- package/dist/payrails.generated.js +3 -1
- package/dist/pre-claim.d.ts +3 -0
- package/dist/pre-claim.js +45 -1
- package/dist/preflight-catalog.json +25 -0
- package/dist/preflight-schemas.json +2 -0
- package/dist/preflight.generated.js +10 -1
- package/dist/primer.generated.js +366 -273
- package/dist/stripe-checkout.generated.js +336 -242
- package/dist/stripe-continuation.d.ts +45 -0
- package/dist/stripe-continuation.js +106 -0
- package/dist/stripe-setup.d.ts +5 -10
- package/dist/stripe-setup.js +11 -39
- package/dist/token-repeats.d.ts +32 -0
- package/dist/token-repeats.js +64 -0
- package/examples/preflight/kernel-native/inventory.json +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
// Generated from @agent-cards/payment-core. Do not edit.
|
|
3
|
-
// artifact-sha256:
|
|
3
|
+
// artifact-sha256: 59a78202e498531ace1ce3391b9ac8b385f55a86e332aca4ac7abdb807d506e7
|
|
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
|
|
@@ -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
|
|
361
|
-
return
|
|
360
|
+
const own24 = Object.keys(value);
|
|
361
|
+
return own24.length === keys.length && own24.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" });
|
|
@@ -776,8 +776,8 @@ var PADDLE_TOKENEX_PSP = "paddle_tokenex";
|
|
|
776
776
|
var PADDLE_TOKENEX_FACT_KEYS = /* @__PURE__ */ Object.freeze(["card_first_six", "card_last_four", "expiry_month", "expiry_year", "card_brand"]);
|
|
777
777
|
var record4 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
778
778
|
var sameKeys2 = (value, keys) => {
|
|
779
|
-
const
|
|
780
|
-
return
|
|
779
|
+
const own24 = Object.keys(value);
|
|
780
|
+
return own24.length === keys.length && own24.every((key, at) => key === keys[at]);
|
|
781
781
|
};
|
|
782
782
|
var refuse7 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
783
783
|
var CARD6 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -1266,8 +1266,8 @@ var TEXT_LIMIT = 256;
|
|
|
1266
1266
|
var CONTROL4 = /[\u0000-\u001f\u007f]/;
|
|
1267
1267
|
var record6 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1268
1268
|
var sameKeys3 = (value, keys) => {
|
|
1269
|
-
const
|
|
1270
|
-
return
|
|
1269
|
+
const own24 = Object.keys(value);
|
|
1270
|
+
return own24.length === keys.length && own24.every((key, at) => key === keys[at]);
|
|
1271
1271
|
};
|
|
1272
1272
|
var plainText = (value) => typeof value === "string" && value.length <= TEXT_LIMIT && !CONTROL4.test(value) && (value.match(/[0-9]/g) ?? []).length < 12;
|
|
1273
1273
|
var refuse9 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
@@ -1469,8 +1469,8 @@ var EXPIRATION = /^[0-9]{2}(?:0[1-9]|1[0-2])$/;
|
|
|
1469
1469
|
var CARD_PAYMENT = "PAYMENT_CARD";
|
|
1470
1470
|
var record8 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1471
1471
|
var sameKeys4 = (value, keys) => {
|
|
1472
|
-
const
|
|
1473
|
-
return
|
|
1472
|
+
const own24 = Object.keys(value);
|
|
1473
|
+
return own24.length === keys.length && own24.every((key, at) => key === keys[at]);
|
|
1474
1474
|
};
|
|
1475
1475
|
var refuse11 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1476
1476
|
var CARD10 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -1700,8 +1700,8 @@ var LOCALE = /^[a-z]{2}(?:-[A-Za-z]{2,4})?$/;
|
|
|
1700
1700
|
var PAN_LIKE3 = /(?:[0-9][ _.:-]*){12,}/;
|
|
1701
1701
|
var record9 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1702
1702
|
var sameKeys5 = (value, keys) => {
|
|
1703
|
-
const
|
|
1704
|
-
return
|
|
1703
|
+
const own24 = Object.keys(value);
|
|
1704
|
+
return own24.length === keys.length && own24.every((key, at) => key === keys[at]);
|
|
1705
1705
|
};
|
|
1706
1706
|
var refuse13 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1707
1707
|
var CARD12 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -1965,6 +1965,9 @@ function multipartFormRefusal(body, contentType, rule) {
|
|
|
1965
1965
|
const read = judge(body, contentType, rule);
|
|
1966
1966
|
return read.refusal ?? null;
|
|
1967
1967
|
}
|
|
1968
|
+
// src/answer-card-leak.js
|
|
1969
|
+
var UTF8_SEQUENCE = "[\\x00-\\x7f]|[\\xc2-\\xdf][\\x80-\\xbf]|\\xe0[\\xa0-\\xbf][\\x80-\\xbf]|[\\xe1-\\xec\\xee\\xef][\\x80-\\xbf]{2}|\\xed[\\x80-\\x9f][\\x80-\\xbf]|\\xf0[\\x90-\\xbf][\\x80-\\xbf]{2}|[\\xf1-\\xf3][\\x80-\\xbf]{3}|\\xf4[\\x80-\\x8f][\\x80-\\xbf]{2}";
|
|
1970
|
+
var UTF8_WHOLE = /* @__PURE__ */ new RegExp(`^(?:${UTF8_SEQUENCE})*$`);
|
|
1968
1971
|
// src/pay-nl.js
|
|
1969
1972
|
var PAY_NL_PSP = "pay_nl";
|
|
1970
1973
|
var PAY_NL_TOKEN_URL = "https://payment.pay.nl/v1/Payment/getCardToken/json";
|
|
@@ -2732,8 +2735,8 @@ var TEXT_LIMIT3 = 256;
|
|
|
2732
2735
|
var CONTROL7 = /[\u0000-\u001f\u007f]/;
|
|
2733
2736
|
var record13 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
2734
2737
|
var sameKeys7 = (value, keys) => {
|
|
2735
|
-
const
|
|
2736
|
-
return
|
|
2738
|
+
const own24 = Object.keys(value);
|
|
2739
|
+
return own24.length === keys.length && own24.every((key, at) => key === keys[at]);
|
|
2737
2740
|
};
|
|
2738
2741
|
var plainText3 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT3 && !CONTROL7.test(value) && (value.match(/[0-9]/g) ?? []).length < 12;
|
|
2739
2742
|
var refuse19 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
@@ -3438,8 +3441,8 @@ var HOSTNAME = /^(?=.{1,253}$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](
|
|
|
3438
3441
|
var PUBLISHABLE_KEY = /^[A-Za-z0-9]{16,64}$/;
|
|
3439
3442
|
var record18 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
3440
3443
|
var sameKeys8 = (value, keys) => {
|
|
3441
|
-
const
|
|
3442
|
-
return
|
|
3444
|
+
const own24 = Object.keys(value);
|
|
3445
|
+
return own24.length === keys.length && own24.every((key, at) => key === keys[at]);
|
|
3443
3446
|
};
|
|
3444
3447
|
var refuse24 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
3445
3448
|
var CARD23 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -4130,8 +4133,8 @@ var LONG_TEXT_LIMIT = BODY_LIMIT25;
|
|
|
4130
4133
|
var record22 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4131
4134
|
var owns6 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
4132
4135
|
var sameKeys9 = (value, keys) => {
|
|
4133
|
-
const
|
|
4134
|
-
return
|
|
4136
|
+
const own24 = Object.keys(value);
|
|
4137
|
+
return own24.length === keys.length && own24.every((key, at) => key === keys[at]);
|
|
4135
4138
|
};
|
|
4136
4139
|
var exact3 = (pattern, value) => typeof value === "string" && pattern.test(value);
|
|
4137
4140
|
var printable3 = (text10) => [...text10].every((character) => {
|
|
@@ -4530,8 +4533,8 @@ var POSTAL_CODE4 = /^[A-Za-z0-9 -]{0,16}$/;
|
|
|
4530
4533
|
var CIPHERTEXT_B64 = /^[A-Za-z0-9+/]{341}[AQgw]==$/;
|
|
4531
4534
|
var record24 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4532
4535
|
var sameKeys11 = (value, keys) => {
|
|
4533
|
-
const
|
|
4534
|
-
return
|
|
4536
|
+
const own24 = Object.keys(value);
|
|
4537
|
+
return own24.length === keys.length && own24.every((key, at) => key === keys[at]);
|
|
4535
4538
|
};
|
|
4536
4539
|
var refuse29 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
4537
4540
|
var failed = (code) => (
|
|
@@ -5863,12 +5866,12 @@ function membersRefusal(root) {
|
|
|
5863
5866
|
const pending = [[root, ""]];
|
|
5864
5867
|
while (pending.length > 0) {
|
|
5865
5868
|
const [node, path] = pending.pop();
|
|
5866
|
-
const
|
|
5869
|
+
const own24 = path === "" ? TRANSACTION_MEMBERS : owns7(RECORD_MEMBERS, path) ? RECORD_MEMBERS[path] : null;
|
|
5867
5870
|
for (const [key, child] of Object.entries(node)) {
|
|
5868
5871
|
const at = Array.isArray(node) ? path : path === "" ? key : `${path}.${key}`;
|
|
5869
5872
|
if (at === "checkoutCreditCard")
|
|
5870
5873
|
continue;
|
|
5871
|
-
if (
|
|
5874
|
+
if (own24 !== null && !own24.includes(key))
|
|
5872
5875
|
return true;
|
|
5873
5876
|
if (TEXT_RECORDS.includes(path) && child !== null && typeof child !== "string")
|
|
5874
5877
|
return true;
|
|
@@ -6235,6 +6238,96 @@ var aurus_default = /* @__PURE__ */ registerProcessor({
|
|
|
6235
6238
|
bodyGate: (url, body) => url !== void 0 && !isAurusTokenUrl(url) ? refuse37("aurus_url_refused") : aurusBodyVerdict(body),
|
|
6236
6239
|
limitations: ["The card frame seals the card in the page under a public key its own script carries; the cardholder's device does not seal for Aurus yet, so a held request opens no approval that pays."]
|
|
6237
6240
|
});
|
|
6241
|
+
// src/processors/bigcommerce.js
|
|
6242
|
+
var BIGCOMMERCE_PSP = "bigcommerce";
|
|
6243
|
+
var BIGCOMMERCE_OPERATION = "bigcommerce.card_request";
|
|
6244
|
+
var BIGCOMMERCE_PAYMENTS_URL = "https://payments.bigcommerce.com/api/public/v1/orders/payments";
|
|
6245
|
+
var BODY_LIMIT36 = 65536;
|
|
6246
|
+
var CARD_KEYS16 = /* @__PURE__ */ new Set([
|
|
6247
|
+
"account_name",
|
|
6248
|
+
"month",
|
|
6249
|
+
"number",
|
|
6250
|
+
"verification_value",
|
|
6251
|
+
"year",
|
|
6252
|
+
"customer_code",
|
|
6253
|
+
"three_d_secure",
|
|
6254
|
+
"hosted_form_nonce"
|
|
6255
|
+
]);
|
|
6256
|
+
var OTHER_INSTRUMENTS = /* @__PURE__ */ Object.freeze(["bigpay_token", "credit_card_token", "credit_card_cryptogram"]);
|
|
6257
|
+
var NUMBER8 = /^[0-9]{12,19}$/;
|
|
6258
|
+
var CURRENCY6 = /^[A-Z]{3}$/;
|
|
6259
|
+
var record32 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
6260
|
+
var own12 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
6261
|
+
var refuse38 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
6262
|
+
var CARD37 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
6263
|
+
var CONTINUE13 = /* @__PURE__ */ Object.freeze({ verdict: "continue" });
|
|
6264
|
+
function isBigcommercePaymentsUrl(url) {
|
|
6265
|
+
return url === BIGCOMMERCE_PAYMENTS_URL;
|
|
6266
|
+
}
|
|
6267
|
+
function readBody22(body) {
|
|
6268
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT36)
|
|
6269
|
+
return null;
|
|
6270
|
+
try {
|
|
6271
|
+
const parsed = JSON.parse(body);
|
|
6272
|
+
return record32(parsed) && record32(parsed.payment) ? parsed : null;
|
|
6273
|
+
}
|
|
6274
|
+
catch {
|
|
6275
|
+
return null;
|
|
6276
|
+
}
|
|
6277
|
+
}
|
|
6278
|
+
function bigcommerceBodyVerdict(body, url) {
|
|
6279
|
+
if (url !== void 0 && !isBigcommercePaymentsUrl(url))
|
|
6280
|
+
return refuse38("bigcommerce_url_refused");
|
|
6281
|
+
const parsed = readBody22(body);
|
|
6282
|
+
if (!parsed)
|
|
6283
|
+
return refuse38("bigcommerce_body_unsupported");
|
|
6284
|
+
const { payment } = parsed;
|
|
6285
|
+
if (!own12(payment, "credit_card"))
|
|
6286
|
+
return CONTINUE13;
|
|
6287
|
+
const card = payment.credit_card;
|
|
6288
|
+
if (!record32(card) || OTHER_INSTRUMENTS.some((key) => own12(payment, key)) || Object.keys(card).some((key) => !CARD_KEYS16.has(key)) || typeof card.number !== "string" || !NUMBER8.test(card.number)) {
|
|
6289
|
+
return refuse38("bigcommerce_body_unsupported");
|
|
6290
|
+
}
|
|
6291
|
+
if (payment.vault_payment_instrument === true)
|
|
6292
|
+
return refuse38("bigcommerce_keep_on_file");
|
|
6293
|
+
return CARD37;
|
|
6294
|
+
}
|
|
6295
|
+
function bigcommerceAmount(template) {
|
|
6296
|
+
const parsed = record32(template) ? readBody22(template.body) : null;
|
|
6297
|
+
const order = parsed && record32(parsed.order) ? parsed.order : null;
|
|
6298
|
+
const total = order && record32(order.totals) ? order.totals.grand_total : void 0;
|
|
6299
|
+
if (!Number.isSafeInteger(total) || total <= 0 || typeof order.currency !== "string" || !CURRENCY6.test(order.currency))
|
|
6300
|
+
return null;
|
|
6301
|
+
return { amountCents: total, currency: order.currency.toLowerCase() };
|
|
6302
|
+
}
|
|
6303
|
+
var bigcommerce_default = /* @__PURE__ */ registerProcessor({
|
|
6304
|
+
psp: BIGCOMMERCE_PSP,
|
|
6305
|
+
definitions: [
|
|
6306
|
+
{
|
|
6307
|
+
psp: "bigcommerce",
|
|
6308
|
+
// The card request above. One host serves every BigCommerce store, test and live alike, so no sandbox host is
|
|
6309
|
+
// marked. Ships dark: served only to a client that declares `bigcommerce_card_form`, for a company the backend's
|
|
6310
|
+
// processor gate turns BigCommerce on for. `(?![\w/.%-])` ends the path for a consumer that tests `match`
|
|
6311
|
+
// unanchored; the exact-URL rule holds the rest.
|
|
6312
|
+
capability: "bigcommerce_card_form",
|
|
6313
|
+
match: "payments\\.bigcommerce\\.com/api/public/v1/orders/payments(?![\\w/.%-])",
|
|
6314
|
+
hosts: ["^payments\\.bigcommerce\\.com$"],
|
|
6315
|
+
encoding: "json",
|
|
6316
|
+
// The order's payment token and the JSON Accept. Origin, Referer and cookies never ride.
|
|
6317
|
+
passthroughHeaders: ["^authorization$", "^accept$"],
|
|
6318
|
+
jsonCardFields: [["payment", "credit_card", "number"]],
|
|
6319
|
+
// A payment with no new card on the same URL continues untouched (bigcommerceBodyVerdict says which).
|
|
6320
|
+
passWithoutCard: "payments\\.bigcommerce\\.com/api/public/v1/orders/payments"
|
|
6321
|
+
}
|
|
6322
|
+
],
|
|
6323
|
+
// The request charges the store's gateway at once, so only the cardholder's device sends it, after a person approves.
|
|
6324
|
+
refusedOperations: [BIGCOMMERCE_OPERATION],
|
|
6325
|
+
// Not surveyed: reading a BigCommerce payment back takes the store's own API credentials, which Agentcard never holds.
|
|
6326
|
+
settlementReadback: "not_surveyed",
|
|
6327
|
+
exactUrl: isBigcommercePaymentsUrl,
|
|
6328
|
+
bodyGate: (url, body) => bigcommerceBodyVerdict(body, url),
|
|
6329
|
+
amount: bigcommerceAmount
|
|
6330
|
+
});
|
|
6238
6331
|
// src/processors/bluesnap.js
|
|
6239
6332
|
var BLUESNAP_PSP = "bluesnap";
|
|
6240
6333
|
var BLUESNAP_OPERATION = "bluesnap.card_request";
|
|
@@ -6242,16 +6335,16 @@ var BLUESNAP_HOSTS = /* @__PURE__ */ Object.freeze({ 1: "ws1.bluesnap.com", 2: "
|
|
|
6242
6335
|
var BLUESNAP_SANDBOX_HOST = "sandpay.bluesnap.com";
|
|
6243
6336
|
var BLUESNAP_CARD_KEYS = /* @__PURE__ */ Object.freeze(["cvv", "ccNumber", "expDate"]);
|
|
6244
6337
|
var BLUESNAP_LEG_KEYS = /* @__PURE__ */ Object.freeze(["cvv", "expDate"]);
|
|
6245
|
-
var
|
|
6338
|
+
var BODY_LIMIT37 = 1024;
|
|
6246
6339
|
var TOKEN_URL2 = /^https:\/\/(ws1|ws2|sandpay)\.bluesnap\.com\/services\/2\/payment-fields-tokens\/([0-9a-f]{64}_[12]?)$/;
|
|
6247
6340
|
var CARD_NUMBER18 = /^[0-9]{12,19}$/;
|
|
6248
6341
|
var SECURITY_CODE22 = /^[0-9]{3,4}$/;
|
|
6249
6342
|
var EXPIRY3 = /^(?:0[1-9]|1[0-2])\/20[0-9]{2}$/;
|
|
6250
6343
|
var SAVED_CARD_KEYS2 = ["last4Digits", "lastFourDigits", "ccType"];
|
|
6251
|
-
var
|
|
6252
|
-
var
|
|
6253
|
-
var
|
|
6254
|
-
var
|
|
6344
|
+
var record33 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
6345
|
+
var own13 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
6346
|
+
var refuse39 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
6347
|
+
var CARD38 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
6255
6348
|
var LEG = /* @__PURE__ */ Object.freeze({ verdict: "continue" });
|
|
6256
6349
|
function bluesnapTokenUrl(url) {
|
|
6257
6350
|
const match = typeof url === "string" ? TOKEN_URL2.exec(url) : null;
|
|
@@ -6263,30 +6356,30 @@ function bluesnapTokenUrl(url) {
|
|
|
6263
6356
|
function isBluesnapTokenUrl(url) {
|
|
6264
6357
|
return bluesnapTokenUrl(url) !== null;
|
|
6265
6358
|
}
|
|
6266
|
-
function
|
|
6267
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
6359
|
+
function readBody23(body) {
|
|
6360
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT37)
|
|
6268
6361
|
return null;
|
|
6269
6362
|
try {
|
|
6270
6363
|
const value = JSON.parse(body);
|
|
6271
|
-
return
|
|
6364
|
+
return record33(value) && JSON.stringify(value) === body ? value : null;
|
|
6272
6365
|
}
|
|
6273
6366
|
catch {
|
|
6274
6367
|
return null;
|
|
6275
6368
|
}
|
|
6276
6369
|
}
|
|
6277
6370
|
function bluesnapBodyVerdict(body) {
|
|
6278
|
-
const value =
|
|
6371
|
+
const value = readBody23(body);
|
|
6279
6372
|
if (value === null)
|
|
6280
|
-
return
|
|
6373
|
+
return refuse39("bluesnap_body_unsupported");
|
|
6281
6374
|
const keys = Object.keys(value);
|
|
6282
6375
|
if (keys.some((key) => SAVED_CARD_KEYS2.includes(key)))
|
|
6283
|
-
return
|
|
6376
|
+
return refuse39(own13(value, "ccNumber") ? "bluesnap_body_unsupported" : "bluesnap_saved_card");
|
|
6284
6377
|
if (keys.length === 0 || keys.some((key, i) => !BLUESNAP_CARD_KEYS.includes(key) || i > 0 && BLUESNAP_CARD_KEYS.indexOf(keys[i - 1]) >= BLUESNAP_CARD_KEYS.indexOf(key))) {
|
|
6285
|
-
return
|
|
6378
|
+
return refuse39("bluesnap_body_unsupported");
|
|
6286
6379
|
}
|
|
6287
|
-
if (
|
|
6288
|
-
return
|
|
6289
|
-
return
|
|
6380
|
+
if (own13(value, "ccNumber") && !(typeof value.ccNumber === "string" && CARD_NUMBER18.test(value.ccNumber)) || own13(value, "cvv") && !(typeof value.cvv === "string" && SECURITY_CODE22.test(value.cvv)) || own13(value, "expDate") && !(typeof value.expDate === "string" && EXPIRY3.test(value.expDate)))
|
|
6381
|
+
return refuse39("bluesnap_body_unsupported");
|
|
6382
|
+
return own13(value, "ccNumber") ? CARD38 : LEG;
|
|
6290
6383
|
}
|
|
6291
6384
|
var bluesnap_default = /* @__PURE__ */ registerProcessor({
|
|
6292
6385
|
psp: BLUESNAP_PSP,
|
|
@@ -6390,7 +6483,7 @@ var REQUIRED = Object.freeze([
|
|
|
6390
6483
|
"ekashu_failure_url",
|
|
6391
6484
|
"ekashu_callback_success_url"
|
|
6392
6485
|
]);
|
|
6393
|
-
var
|
|
6486
|
+
var CARD_KEYS17 = Object.freeze([
|
|
6394
6487
|
"ekashu_card_number",
|
|
6395
6488
|
"ekashu_expires_end_month",
|
|
6396
6489
|
"ekashu_expires_end_year",
|
|
@@ -6592,7 +6685,7 @@ var CURRENCIES2 = Object.freeze({ EUR: "eur" });
|
|
|
6592
6685
|
var MAX_URL = 512;
|
|
6593
6686
|
var MAX_ENTRY3 = 8 * 1024;
|
|
6594
6687
|
var MAX_VALUE = 256;
|
|
6595
|
-
var
|
|
6688
|
+
var own14 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
6596
6689
|
var field2 = (name, reason) => ({ ok: false, code: "hosted_form_field_refused", field: name, reason });
|
|
6597
6690
|
function cardlinkVposEntryHost(raw) {
|
|
6598
6691
|
if (typeof raw !== "string" || raw.length > MAX_URL || raw.includes("?") || raw.includes("#"))
|
|
@@ -6604,7 +6697,7 @@ function cardlinkVposEntryHost(raw) {
|
|
|
6604
6697
|
catch {
|
|
6605
6698
|
return null;
|
|
6606
6699
|
}
|
|
6607
|
-
if (url.href !== raw || url.protocol !== "https:" || url.port || url.username || url.password || !
|
|
6700
|
+
if (url.href !== raw || url.protocol !== "https:" || url.port || url.username || url.password || !own14(CARDLINK_VPOS_HOSTS, url.hostname) || url.pathname !== CARDLINK_VPOS_ENTRY_PATH)
|
|
6608
6701
|
return null;
|
|
6609
6702
|
return url.hostname;
|
|
6610
6703
|
}
|
|
@@ -6647,7 +6740,7 @@ function cardlinkVposMerchant(mid, vposHost, merchants = CARDLINK_VPOS_MERCHANTS
|
|
|
6647
6740
|
function entryAmount(values) {
|
|
6648
6741
|
const amount2 = values.get("orderAmount");
|
|
6649
6742
|
const code = values.get("currency");
|
|
6650
|
-
const currency = typeof code === "string" &&
|
|
6743
|
+
const currency = typeof code === "string" && own14(CURRENCIES2, code) ? CURRENCIES2[code] : null;
|
|
6651
6744
|
if (!currency || typeof amount2 !== "string" || !/^(?:0|[1-9]\d{0,11})(?:\.\d{1,2})?$/.test(amount2))
|
|
6652
6745
|
return null;
|
|
6653
6746
|
const [whole2, fraction = ""] = amount2.split(".");
|
|
@@ -6702,7 +6795,7 @@ function checkCardlinkVposEntry(body, { url = null, merchants = CARDLINK_VPOS_ME
|
|
|
6702
6795
|
return field2("payMethod", /^iris$/i.test(method) ? "not_a_card_payment" : "special_flow");
|
|
6703
6796
|
const amount2 = entryAmount(values);
|
|
6704
6797
|
if (!amount2)
|
|
6705
|
-
return field2(
|
|
6798
|
+
return field2(own14(CURRENCIES2, values.get("currency")) ? "orderAmount" : "currency", "malformed");
|
|
6706
6799
|
if (!/^\d{1,30}$/.test(values.get("mid")))
|
|
6707
6800
|
return field2("mid", "malformed");
|
|
6708
6801
|
if (!/^[A-Za-z0-9]{1,50}$/.test(values.get("orderid")))
|
|
@@ -6739,16 +6832,16 @@ var CARDLINK_VPOS_TDS2_FIELDS = Object.freeze([
|
|
|
6739
6832
|
]);
|
|
6740
6833
|
var PAGE_FIELDS = Object.freeze(["trid", "st", "payStep", "cmd", "startbonus", "bonusdata"]);
|
|
6741
6834
|
var WALLET_FIELDS2 = Object.freeze(["walletId", "applePayResponse"]);
|
|
6742
|
-
var
|
|
6743
|
-
var TEXT_CONTROLS = /* @__PURE__ */ new Set([
|
|
6744
|
-
var SELECT_CONTROLS = /* @__PURE__ */ new Set([
|
|
6835
|
+
var CARD39 = Object.freeze({ number: "card.pan", holder: "card.holderName", month: "card.expiryMonth", year: "card.expiryYear", cvc: "card.cvv" });
|
|
6836
|
+
var TEXT_CONTROLS = /* @__PURE__ */ new Set([CARD39.number, CARD39.holder, CARD39.cvc]);
|
|
6837
|
+
var SELECT_CONTROLS = /* @__PURE__ */ new Set([CARD39.month, CARD39.year]);
|
|
6745
6838
|
var MAX_PAGE3 = 256 * 1024;
|
|
6746
6839
|
var COOKIE_DOMAINS = Object.freeze({
|
|
6747
6840
|
"vpos.eurocommerce.gr": "eurocommerce.gr",
|
|
6748
6841
|
"ecommerce.cardlink.gr": "cardlink.gr",
|
|
6749
6842
|
"www.alphaecommerce.gr": "alphaecommerce.gr"
|
|
6750
6843
|
});
|
|
6751
|
-
var POST_REQUIRED = Object.freeze(["trid", "st", "cmd",
|
|
6844
|
+
var POST_REQUIRED = Object.freeze(["trid", "st", "cmd", CARD39.number, CARD39.holder, CARD39.month, CARD39.year, CARD39.cvc, "makepayment"]);
|
|
6752
6845
|
var POST_EMPTY = Object.freeze(["payStep", "startbonus", "bonusdata", ...WALLET_FIELDS2]);
|
|
6753
6846
|
var POST_ALLOWED = /* @__PURE__ */ new Set([...POST_REQUIRED, ...POST_EMPTY, "paymentMethod", ...CARDLINK_VPOS_TDS2_FIELDS]);
|
|
6754
6847
|
var CARDLINK_VPOS_REFUSALS = Object.freeze([
|
|
@@ -6878,7 +6971,7 @@ var REQUIRED4 = Object.freeze([
|
|
|
6878
6971
|
"CurrencyCode",
|
|
6879
6972
|
"HashValue"
|
|
6880
6973
|
]);
|
|
6881
|
-
var
|
|
6974
|
+
var CARD_KEYS18 = /* @__PURE__ */ new Set(["cardno", "cardexp", "cardcvv2", "cardholder", "param2", "param4", "cvv2", "epmonth2", "epyear2", "custocp"]);
|
|
6882
6975
|
var SECRET_KEYS = /* @__PURE__ */ new Set(["password"]);
|
|
6883
6976
|
var STORED_KEYS2 = /* @__PURE__ */ new Set([
|
|
6884
6977
|
"tokentype",
|
|
@@ -6935,7 +7028,7 @@ function checkEghlEntry(body, { url = null, merchants = EGHL_MERCHANTS } = {}) {
|
|
|
6935
7028
|
if (value === "")
|
|
6936
7029
|
continue;
|
|
6937
7030
|
const folded = key.toLowerCase();
|
|
6938
|
-
if (
|
|
7031
|
+
if (CARD_KEYS18.has(folded))
|
|
6939
7032
|
return field3(key, "card_in_entry");
|
|
6940
7033
|
if (SECRET_KEYS.has(folded))
|
|
6941
7034
|
return field3(key, "not_an_entry");
|
|
@@ -7067,7 +7160,7 @@ var FRISBII_REFUSED_PATHS = /* @__PURE__ */ Object.freeze({
|
|
|
7067
7160
|
"/v1/token/cof/": "frisbii_stored_card_unsupported",
|
|
7068
7161
|
"/v1/token/create_click_to_pay": "frisbii_click_to_pay_unsupported"
|
|
7069
7162
|
});
|
|
7070
|
-
var
|
|
7163
|
+
var BODY_LIMIT38 = 8192;
|
|
7071
7164
|
var URL_LIMIT15 = 256;
|
|
7072
7165
|
var CARD_NUMBER19 = /^[0-9]{12,19}$/;
|
|
7073
7166
|
var MONTH19 = /^(?:0[1-9]|1[0-2])$/;
|
|
@@ -7111,13 +7204,13 @@ var BROWSER_ORDER = /* @__PURE__ */ Object.freeze([
|
|
|
7111
7204
|
"tz"
|
|
7112
7205
|
]);
|
|
7113
7206
|
var LABEL = /^[A-Za-z0-9_-]{1,64}$/;
|
|
7114
|
-
var
|
|
7115
|
-
var
|
|
7116
|
-
var
|
|
7117
|
-
var
|
|
7207
|
+
var record34 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
7208
|
+
var own15 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
7209
|
+
var refuse40 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
7210
|
+
var CARD40 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
7118
7211
|
var text9 = (value, max) => typeof value === "string" && value.length <= max;
|
|
7119
7212
|
var absentOrNull = (value) => value === void 0 || value === null;
|
|
7120
|
-
var inOrder6 = (value, order) => Object.keys(value).every((key) => order.includes(key)) && Object.keys(value).join() === order.filter((key) =>
|
|
7213
|
+
var inOrder6 = (value, order) => Object.keys(value).every((key) => order.includes(key)) && Object.keys(value).join() === order.filter((key) => own15(value, key)).join();
|
|
7121
7214
|
function frisbiiTokenUrl(url) {
|
|
7122
7215
|
if (typeof url !== "string" || url.length > URL_LIMIT15 || url.includes("#"))
|
|
7123
7216
|
return null;
|
|
@@ -7128,7 +7221,7 @@ function frisbiiTokenUrl(url) {
|
|
|
7128
7221
|
catch {
|
|
7129
7222
|
return null;
|
|
7130
7223
|
}
|
|
7131
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
7224
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own15(FRISBII_HOSTS, parsed.hostname) || parsed.pathname !== FRISBII_TOKEN_PATH)
|
|
7132
7225
|
return null;
|
|
7133
7226
|
const match = /^\?session=([A-Za-z0-9_-]{8,128})$/.exec(parsed.search);
|
|
7134
7227
|
return match ? Object.freeze({ host: parsed.hostname, brand: FRISBII_HOSTS[parsed.hostname], session: match[1] }) : null;
|
|
@@ -7144,7 +7237,7 @@ function frisbiiRefusedFlowUrl(url) {
|
|
|
7144
7237
|
catch {
|
|
7145
7238
|
return null;
|
|
7146
7239
|
}
|
|
7147
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
7240
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own15(FRISBII_HOSTS, parsed.hostname) || !own15(FRISBII_REFUSED_PATHS, parsed.pathname))
|
|
7148
7241
|
return null;
|
|
7149
7242
|
return FRISBII_REFUSED_PATHS[parsed.pathname];
|
|
7150
7243
|
}
|
|
@@ -7158,28 +7251,28 @@ function luhn9(digits3) {
|
|
|
7158
7251
|
}
|
|
7159
7252
|
return sum % 10 === 0;
|
|
7160
7253
|
}
|
|
7161
|
-
function
|
|
7162
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
7254
|
+
function readBody24(body) {
|
|
7255
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT38)
|
|
7163
7256
|
return null;
|
|
7164
7257
|
try {
|
|
7165
7258
|
const value = JSON.parse(body);
|
|
7166
|
-
return
|
|
7259
|
+
return record34(value) && JSON.stringify(value) === body ? value : null;
|
|
7167
7260
|
}
|
|
7168
7261
|
catch {
|
|
7169
7262
|
return null;
|
|
7170
7263
|
}
|
|
7171
7264
|
}
|
|
7172
7265
|
function browserInfo(info) {
|
|
7173
|
-
return
|
|
7266
|
+
return record34(info) && Object.keys(info).join() === BROWSER_ORDER.join() && info.javascriptEnabled === true && typeof info.javaEnabled === "boolean" && /^size_[0-9]{3}x[0-9]{3}$/.test(info.challengeWindowSize) && [info.colorDepth, info.screenHeight, info.screenWidth].every((n) => Number.isSafeInteger(n) && n >= 0 && n <= 1e5) && Number.isSafeInteger(info.tz) && Math.abs(info.tz) <= 1440;
|
|
7174
7267
|
}
|
|
7175
7268
|
function scaBlock(block, target) {
|
|
7176
|
-
if (!
|
|
7269
|
+
if (!record34(block) || !inOrder6(block, SCA_ORDER) || !own15(block, "returnUrl") || !own15(block, "tokenBrowserInfo"))
|
|
7177
7270
|
return false;
|
|
7178
7271
|
if (!Number.isSafeInteger(block.amount) || block.amount < 0 || typeof block.currency !== "string" || !/^[A-Z]{3}$/.test(block.currency))
|
|
7179
7272
|
return false;
|
|
7180
7273
|
if (!(absentOrNull(block.orderId) || text9(block.orderId, 128)) || !(absentOrNull(block.orderText) || text9(block.orderText, 512)))
|
|
7181
7274
|
return false;
|
|
7182
|
-
if (!(absentOrNull(block.merchantScaData) ||
|
|
7275
|
+
if (!(absentOrNull(block.merchantScaData) || record34(block.merchantScaData)))
|
|
7183
7276
|
return false;
|
|
7184
7277
|
if (!text9(block.returnUrl, 2048) || !browserInfo(block.tokenBrowserInfo))
|
|
7185
7278
|
return false;
|
|
@@ -7187,16 +7280,16 @@ function scaBlock(block, target) {
|
|
|
7187
7280
|
return back !== null && (target === null || back[1] === target.brand && back[2] === target.session);
|
|
7188
7281
|
}
|
|
7189
7282
|
function frisbiiBodyVerdict(body, url) {
|
|
7190
|
-
const value =
|
|
7191
|
-
if (value === null || !inOrder6(value, BODY_ORDER) || !BODY_REQUIRED.every((key) =>
|
|
7192
|
-
return
|
|
7283
|
+
const value = readBody24(body);
|
|
7284
|
+
if (value === null || !inOrder6(value, BODY_ORDER) || !BODY_REQUIRED.every((key) => own15(value, key)) || BODY_REFUSED.some((key) => own15(value, key)))
|
|
7285
|
+
return refuse40("frisbii_body_unsupported");
|
|
7193
7286
|
if (value.recurring === true || value.intent === "CHARGE_AND_STORE")
|
|
7194
|
-
return
|
|
7287
|
+
return refuse40("frisbii_card_on_file");
|
|
7195
7288
|
const target = url === void 0 ? null : frisbiiTokenUrl(url);
|
|
7196
7289
|
if (url !== void 0 && target === null)
|
|
7197
|
-
return
|
|
7290
|
+
return refuse40("frisbii_body_unsupported");
|
|
7198
7291
|
const sound = typeof value.number === "string" && CARD_NUMBER19.test(value.number) && luhn9(value.number) && typeof value.month === "string" && MONTH19.test(value.month) && typeof value.year === "string" && YEAR20.test(value.year) && typeof value.cvv === "string" && SECURITY_CODE23.test(value.cvv) && typeof value.pkey === "string" && IDENTIFIER2.test(value.pkey) && value.recurring === false && (value.cardholder_name === void 0 || text9(value.cardholder_name, 64)) && (value.intent === void 0 || value.intent === "CHARGE") && (absentOrNull(value.recurringAverageAmount) || Number.isSafeInteger(value.recurringAverageAmount) && value.recurringAverageAmount >= 0) && (absentOrNull(value.agreementFilter) || typeof value.agreementFilter === "string" && LABEL.test(value.agreementFilter) || Array.isArray(value.agreementFilter) && value.agreementFilter.length <= 16 && value.agreementFilter.every((entry) => typeof entry === "string" && LABEL.test(entry))) && SCA_RULES.includes(value.strongAuthenticationRule) && (value.tokenStrongAuthenticationRequest === void 0 || scaBlock(value.tokenStrongAuthenticationRequest, target));
|
|
7199
|
-
return sound ?
|
|
7292
|
+
return sound ? CARD40 : refuse40("frisbii_body_unsupported");
|
|
7200
7293
|
}
|
|
7201
7294
|
var frisbii_default = /* @__PURE__ */ registerProcessor({
|
|
7202
7295
|
psp: FRISBII_PSP,
|
|
@@ -7231,8 +7324,8 @@ var frisbii_default = /* @__PURE__ */ registerProcessor({
|
|
|
7231
7324
|
return frisbiiBodyVerdict(body);
|
|
7232
7325
|
const flow = frisbiiRefusedFlowUrl(url);
|
|
7233
7326
|
if (flow !== null)
|
|
7234
|
-
return
|
|
7235
|
-
return isFrisbiiTokenUrl(url) ? frisbiiBodyVerdict(body, url) :
|
|
7327
|
+
return refuse40(flow);
|
|
7328
|
+
return isFrisbiiTokenUrl(url) ? frisbiiBodyVerdict(body, url) : refuse40("frisbii_url_refused");
|
|
7236
7329
|
},
|
|
7237
7330
|
limitations: ["A live Frisbii card goes only to a merchant account a reviewed pin lists, and none is pinned yet."]
|
|
7238
7331
|
});
|
|
@@ -7261,7 +7354,7 @@ var IYZICO_CARD_KEYS = /* @__PURE__ */ Object.freeze([
|
|
|
7261
7354
|
"registerConsumerCard",
|
|
7262
7355
|
"registerCard"
|
|
7263
7356
|
]);
|
|
7264
|
-
var
|
|
7357
|
+
var BODY_LIMIT39 = 4096;
|
|
7265
7358
|
var CARD_NUMBER20 = /^[0-9]{12,19}$/;
|
|
7266
7359
|
var SECURITY_CODE24 = /^[0-9]{3,4}$/;
|
|
7267
7360
|
var MONTH20 = /^(?:0?[1-9]|1[0-2])$/;
|
|
@@ -7271,8 +7364,8 @@ var CHANNELS = /* @__PURE__ */ Object.freeze(["WEB", "MOBILE_WEB", "MOBILE_IOS",
|
|
|
7271
7364
|
var METADATA_KEYS3 = /* @__PURE__ */ Object.freeze(["lightRedesign", "pwiGrowthActionDisabled"]);
|
|
7272
7365
|
var FLAG = /^[A-Za-z_]{1,16}$/;
|
|
7273
7366
|
var HOLDER5 = /^[^\x00-\x1f\x7f0-9]{3,100}$/u;
|
|
7274
|
-
var
|
|
7275
|
-
var
|
|
7367
|
+
var record35 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
7368
|
+
var own16 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
7276
7369
|
var inOrder7 = (value, keys) => {
|
|
7277
7370
|
let at = 0;
|
|
7278
7371
|
for (const name of Object.keys(value)) {
|
|
@@ -7284,17 +7377,17 @@ var inOrder7 = (value, keys) => {
|
|
|
7284
7377
|
}
|
|
7285
7378
|
return true;
|
|
7286
7379
|
};
|
|
7287
|
-
var
|
|
7288
|
-
var
|
|
7380
|
+
var refuse41 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
7381
|
+
var CARD41 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
7289
7382
|
function isIyzicoCardUrl(url) {
|
|
7290
7383
|
return typeof url === "string" && IYZICO_CARD_URLS.includes(url);
|
|
7291
7384
|
}
|
|
7292
|
-
function
|
|
7293
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
7385
|
+
function readBody25(body) {
|
|
7386
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT39)
|
|
7294
7387
|
return null;
|
|
7295
7388
|
try {
|
|
7296
7389
|
const value = JSON.parse(body);
|
|
7297
|
-
return
|
|
7390
|
+
return record35(value) && JSON.stringify(value) === body ? value : null;
|
|
7298
7391
|
}
|
|
7299
7392
|
catch {
|
|
7300
7393
|
return null;
|
|
@@ -7306,26 +7399,26 @@ function hundredths(price) {
|
|
|
7306
7399
|
return value > 0 ? value : null;
|
|
7307
7400
|
}
|
|
7308
7401
|
var holderName2 = (name) => typeof name === "string" && HOLDER5.test(name) && name.trim().split(/\s+/).filter((word) => word.length > 1).length > 1;
|
|
7309
|
-
var metadata = (value) =>
|
|
7402
|
+
var metadata = (value) => record35(value) && inOrder7(value, METADATA_KEYS3) && Object.values(value).every((flag3) => Array.isArray(flag3) && flag3.length === 1 && typeof flag3[0] === "string" && FLAG.test(flag3[0]));
|
|
7310
7403
|
function iyzicoBodyVerdict(body) {
|
|
7311
|
-
const value =
|
|
7404
|
+
const value = readBody25(body);
|
|
7312
7405
|
if (value === null)
|
|
7313
|
-
return
|
|
7406
|
+
return refuse41("iyzico_body_unsupported");
|
|
7314
7407
|
const card = value.paymentCard;
|
|
7315
|
-
if (
|
|
7316
|
-
return
|
|
7317
|
-
if (
|
|
7318
|
-
return
|
|
7319
|
-
if (
|
|
7320
|
-
return
|
|
7408
|
+
if (record35(card) && (own16(card, "cardToken") || own16(card, "ucsToken") || own16(card, "consumerToken")) && !own16(card, "cardNumber"))
|
|
7409
|
+
return refuse41("iyzico_saved_card");
|
|
7410
|
+
if (own16(value, "dccPayment") || own16(value, "dccQueryRrn"))
|
|
7411
|
+
return refuse41("iyzico_dcc_refused");
|
|
7412
|
+
if (own16(value, "gsmNumber") || own16(value, "buyerProtected") && value.buyerProtected !== false || record35(card) && (own16(card, "registerCard") && card.registerCard !== 0 || own16(card, "registerConsumerCard") && card.registerConsumerCard !== false)) {
|
|
7413
|
+
return refuse41("iyzico_keeps_card");
|
|
7321
7414
|
}
|
|
7322
7415
|
if (Number.isSafeInteger(value.installment) && value.installment > 1)
|
|
7323
|
-
return
|
|
7324
|
-
if (!inOrder7(value, IYZICO_BODY_KEYS) || !["installment", "paidPrice", "paymentChannel", "paymentCard"].every((key) =>
|
|
7325
|
-
return
|
|
7326
|
-
if (!
|
|
7327
|
-
return
|
|
7328
|
-
return
|
|
7416
|
+
return refuse41("iyzico_installments_refused");
|
|
7417
|
+
if (!inOrder7(value, IYZICO_BODY_KEYS) || !["installment", "paidPrice", "paymentChannel", "paymentCard"].every((key) => own16(value, key)) || value.installment !== 1 || hundredths(value.paidPrice) === null || !CHANNELS.includes(value.paymentChannel) || own16(value, "pwiMetadata") && !metadata(value.pwiMetadata))
|
|
7418
|
+
return refuse41("iyzico_body_unsupported");
|
|
7419
|
+
if (!record35(card) || Object.keys(card).join() !== IYZICO_CARD_KEYS.join() || typeof card.cardNumber !== "string" || !CARD_NUMBER20.test(card.cardNumber) || !holderName2(card.cardHolderName) || typeof card.expireYear !== "string" || !YEAR21.test(card.expireYear) || typeof card.expireMonth !== "string" || !MONTH20.test(card.expireMonth) || typeof card.cvc !== "string" || !SECURITY_CODE24.test(card.cvc))
|
|
7420
|
+
return refuse41("iyzico_body_unsupported");
|
|
7421
|
+
return CARD41;
|
|
7329
7422
|
}
|
|
7330
7423
|
var iyzico_default = /* @__PURE__ */ registerProcessor({
|
|
7331
7424
|
psp: IYZICO_PSP,
|
|
@@ -7358,7 +7451,7 @@ var iyzico_default = /* @__PURE__ */ registerProcessor({
|
|
|
7358
7451
|
source: "https://docs.iyzico.com/en/payment-methods/checkoutform/cf-implementation/cf-retrieve"
|
|
7359
7452
|
},
|
|
7360
7453
|
exactUrl: isIyzicoCardUrl,
|
|
7361
|
-
bodyGate: (url, body) => url !== void 0 && !isIyzicoCardUrl(url) ?
|
|
7454
|
+
bodyGate: (url, body) => url !== void 0 && !isIyzicoCardUrl(url) ? refuse41("iyzico_url_refused") : iyzicoBodyVerdict(body)
|
|
7362
7455
|
});
|
|
7363
7456
|
// src/processors/midtrans.js
|
|
7364
7457
|
var MIDTRANS_PSP = "midtrans";
|
|
@@ -7366,14 +7459,14 @@ var MIDTRANS_OPERATION = "midtrans.card_request";
|
|
|
7366
7459
|
var MIDTRANS_TOKEN_URL = "https://api.midtrans.com/v2/token";
|
|
7367
7460
|
var MIDTRANS_SANDBOX_TOKEN_URL = "https://api.sandbox.midtrans.com/v2/token";
|
|
7368
7461
|
var MIDTRANS_TOKEN_KEYS = /* @__PURE__ */ Object.freeze(["card_cvv", "card_number", "card_exp_month", "card_exp_year", "installment_term"]);
|
|
7369
|
-
var
|
|
7462
|
+
var BODY_LIMIT40 = 4096;
|
|
7370
7463
|
var CARD_NUMBER21 = /^[0-9]{12,19}$/;
|
|
7371
7464
|
var SECURITY_CODE25 = /^[0-9]{3,4}$/;
|
|
7372
7465
|
var MONTH21 = /^(?:0[1-9]|1[0-2])$/;
|
|
7373
7466
|
var YEAR22 = /^20[0-9]{2}$/;
|
|
7374
7467
|
var TERM = /^[0-9]{1,3}$/;
|
|
7375
|
-
var
|
|
7376
|
-
var
|
|
7468
|
+
var record36 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
7469
|
+
var own17 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
7377
7470
|
var inOrder8 = (value, keys) => {
|
|
7378
7471
|
let at = 0;
|
|
7379
7472
|
for (const name of Object.keys(value)) {
|
|
@@ -7385,18 +7478,18 @@ var inOrder8 = (value, keys) => {
|
|
|
7385
7478
|
}
|
|
7386
7479
|
return true;
|
|
7387
7480
|
};
|
|
7388
|
-
var
|
|
7389
|
-
var
|
|
7481
|
+
var refuse42 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
7482
|
+
var CARD42 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
7390
7483
|
function isMidtransTokenUrl(url) {
|
|
7391
7484
|
return url === MIDTRANS_TOKEN_URL || url === MIDTRANS_SANDBOX_TOKEN_URL;
|
|
7392
7485
|
}
|
|
7393
|
-
function
|
|
7394
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
7486
|
+
function readBody26(body) {
|
|
7487
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT40)
|
|
7395
7488
|
return null;
|
|
7396
7489
|
let value;
|
|
7397
7490
|
try {
|
|
7398
7491
|
value = JSON.parse(body);
|
|
7399
|
-
if (!
|
|
7492
|
+
if (!record36(value) || JSON.stringify(value) !== body)
|
|
7400
7493
|
return null;
|
|
7401
7494
|
}
|
|
7402
7495
|
catch {
|
|
@@ -7405,20 +7498,20 @@ function readBody25(body) {
|
|
|
7405
7498
|
return value;
|
|
7406
7499
|
}
|
|
7407
7500
|
function midtransBodyVerdict(body) {
|
|
7408
|
-
const value =
|
|
7501
|
+
const value = readBody26(body);
|
|
7409
7502
|
if (value === null || !inOrder8(value, MIDTRANS_TOKEN_KEYS)) {
|
|
7410
|
-
if (
|
|
7411
|
-
return
|
|
7412
|
-
return
|
|
7503
|
+
if (record36(value) && (own17(value, "token_id") || own17(value, "two_click")) && !own17(value, "card_number"))
|
|
7504
|
+
return refuse42("midtrans_saved_card");
|
|
7505
|
+
return refuse42("midtrans_body_unsupported");
|
|
7413
7506
|
}
|
|
7414
|
-
if (!
|
|
7415
|
-
return
|
|
7507
|
+
if (!own17(value, "card_cvv") || !own17(value, "card_number") || !own17(value, "card_exp_month") || !own17(value, "card_exp_year")) {
|
|
7508
|
+
return refuse42("midtrans_body_unsupported");
|
|
7416
7509
|
}
|
|
7417
7510
|
if (typeof value.card_cvv !== "string" || !SECURITY_CODE25.test(value.card_cvv) || typeof value.card_number !== "string" || !CARD_NUMBER21.test(value.card_number) || typeof value.card_exp_month !== "string" || !MONTH21.test(value.card_exp_month) || typeof value.card_exp_year !== "string" || !YEAR22.test(value.card_exp_year))
|
|
7418
|
-
return
|
|
7419
|
-
if (
|
|
7420
|
-
return
|
|
7421
|
-
return
|
|
7511
|
+
return refuse42("midtrans_body_unsupported");
|
|
7512
|
+
if (own17(value, "installment_term") && (typeof value.installment_term !== "string" || !TERM.test(value.installment_term)))
|
|
7513
|
+
return refuse42("midtrans_body_unsupported");
|
|
7514
|
+
return CARD42;
|
|
7422
7515
|
}
|
|
7423
7516
|
var midtrans_default = /* @__PURE__ */ registerProcessor({
|
|
7424
7517
|
psp: MIDTRANS_PSP,
|
|
@@ -7453,20 +7546,20 @@ var midtrans_default = /* @__PURE__ */ registerProcessor({
|
|
|
7453
7546
|
var MONEI_PSP = "monei";
|
|
7454
7547
|
var MONEI_OPERATION = "monei.card_request";
|
|
7455
7548
|
var MONEI_TOKENS_URL = "https://api.monei.com/v1/tokens";
|
|
7456
|
-
var
|
|
7549
|
+
var BODY_LIMIT41 = 1024;
|
|
7457
7550
|
var PAYMENT_ID = /^(?:[0-9a-f]{32}|[0-9a-f]{40})$/;
|
|
7458
7551
|
var MONEI_CARD_KEYS = /* @__PURE__ */ Object.freeze(["number", "expMonth", "expYear", "cvc"]);
|
|
7459
|
-
var
|
|
7552
|
+
var NUMBER9 = /^[0-9]{12,19}$/;
|
|
7460
7553
|
var MONTH22 = /^(?:0[1-9]|1[0-2])$/;
|
|
7461
7554
|
var YEAR23 = /^[0-9]{2}$/;
|
|
7462
7555
|
var CODE8 = /^[0-9]{3,4}$/;
|
|
7463
|
-
var
|
|
7556
|
+
var record37 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
7464
7557
|
var keysAre2 = (value, keys) => {
|
|
7465
7558
|
const found = Object.keys(value);
|
|
7466
7559
|
return found.length === keys.length && found.every((key, at) => key === keys[at]);
|
|
7467
7560
|
};
|
|
7468
|
-
var
|
|
7469
|
-
var
|
|
7561
|
+
var refuse43 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
7562
|
+
var CARD43 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
7470
7563
|
function luhn10(digits3) {
|
|
7471
7564
|
let sum = 0;
|
|
7472
7565
|
for (let at = 0; at < digits3.length; at += 1) {
|
|
@@ -7483,12 +7576,12 @@ function luhn10(digits3) {
|
|
|
7483
7576
|
function isMoneiTokensUrl(url) {
|
|
7484
7577
|
return url === MONEI_TOKENS_URL;
|
|
7485
7578
|
}
|
|
7486
|
-
function
|
|
7487
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
7579
|
+
function readBody27(body) {
|
|
7580
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT41)
|
|
7488
7581
|
return null;
|
|
7489
7582
|
try {
|
|
7490
7583
|
const value = JSON.parse(body);
|
|
7491
|
-
return
|
|
7584
|
+
return record37(value) && JSON.stringify(value) === body ? value : null;
|
|
7492
7585
|
}
|
|
7493
7586
|
catch {
|
|
7494
7587
|
return null;
|
|
@@ -7496,19 +7589,19 @@ function readBody26(body) {
|
|
|
7496
7589
|
}
|
|
7497
7590
|
function moneiBodyVerdict(body, url) {
|
|
7498
7591
|
if (url !== void 0 && !isMoneiTokensUrl(url))
|
|
7499
|
-
return
|
|
7500
|
-
const value =
|
|
7592
|
+
return refuse43("monei_url_refused");
|
|
7593
|
+
const value = readBody27(body);
|
|
7501
7594
|
if (value === null || !keysAre2(value, ["paymentId", "paymentMethod"]) || typeof value.paymentId !== "string" || !PAYMENT_ID.test(value.paymentId))
|
|
7502
|
-
return
|
|
7595
|
+
return refuse43("monei_body_unsupported");
|
|
7503
7596
|
const method = value.paymentMethod;
|
|
7504
|
-
if (!
|
|
7505
|
-
return
|
|
7597
|
+
if (!record37(method) || !keysAre2(method, ["card"]) || !record37(method.card) || !keysAre2(method.card, MONEI_CARD_KEYS))
|
|
7598
|
+
return refuse43("monei_body_unsupported");
|
|
7506
7599
|
const { number, expMonth, expYear, cvc } = method.card;
|
|
7507
7600
|
if (![number, expMonth, expYear, cvc].every((part) => typeof part === "string"))
|
|
7508
|
-
return
|
|
7509
|
-
if (!
|
|
7510
|
-
return
|
|
7511
|
-
return
|
|
7601
|
+
return refuse43("monei_body_unsupported");
|
|
7602
|
+
if (!NUMBER9.test(number) || !luhn10(number) || !MONTH22.test(expMonth) || !YEAR23.test(expYear) || !CODE8.test(cvc))
|
|
7603
|
+
return refuse43("monei_body_unsupported");
|
|
7604
|
+
return CARD43;
|
|
7512
7605
|
}
|
|
7513
7606
|
var MONEI_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
7514
7607
|
Object.freeze({ merchant: "Genuins", accountIds: Object.freeze(["8d58ab4c-4ad0-4053-b18f-79d80e9ee158"]), merchantUrls: Object.freeze(["https://genuins.com/"]) })
|
|
@@ -7572,9 +7665,9 @@ var OCEANPAYMENT_FORM_FIELDS = /* @__PURE__ */ Object.freeze([
|
|
|
7572
7665
|
"reference"
|
|
7573
7666
|
]);
|
|
7574
7667
|
var URL_LIMIT16 = 2048;
|
|
7575
|
-
var
|
|
7668
|
+
var BODY_LIMIT42 = 8192;
|
|
7576
7669
|
var SEND_PAY = /^\/gateway\/sendPay;jsessionid=[A-Za-z0-9._!-]{16,128}$/;
|
|
7577
|
-
var
|
|
7670
|
+
var own18 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
7578
7671
|
var exact4 = (pattern, value) => typeof value === "string" && pattern.test(value);
|
|
7579
7672
|
var CARD_RUN = /[0-9]{12}/;
|
|
7580
7673
|
var printable5 = (max) => (value) => typeof value === "string" && value.length <= max && /^[\x20-\x7e]*$/.test(value) && !CARD_RUN.test(value);
|
|
@@ -7621,7 +7714,7 @@ function oceanpaymentSendPayUrl(url) {
|
|
|
7621
7714
|
catch {
|
|
7622
7715
|
return null;
|
|
7623
7716
|
}
|
|
7624
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
7717
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own18(OCEANPAYMENT_HOSTS, parsed.hostname) || !SEND_PAY.test(parsed.pathname))
|
|
7625
7718
|
return null;
|
|
7626
7719
|
return Object.freeze({ host: parsed.hostname, environment: OCEANPAYMENT_HOSTS[parsed.hostname] });
|
|
7627
7720
|
}
|
|
@@ -7649,7 +7742,7 @@ function formDecode2(raw) {
|
|
|
7649
7742
|
return formEncode3(value) === raw ? value : null;
|
|
7650
7743
|
}
|
|
7651
7744
|
function readPairs2(body) {
|
|
7652
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
7745
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT42)
|
|
7653
7746
|
return null;
|
|
7654
7747
|
const pairs = [];
|
|
7655
7748
|
for (const chunk of body.split("&")) {
|
|
@@ -7734,7 +7827,7 @@ var PAYMENTWALL_PSP = "paymentwall";
|
|
|
7734
7827
|
var PAYMENTWALL_OPERATION = "paymentwall.card_request";
|
|
7735
7828
|
var PAYMENTWALL_TOKEN_URL = "https://pwgateway.com/api/token";
|
|
7736
7829
|
var PAYMENTWALL_SANDBOX_TOKEN_URL = "https://api.paymentwall.com/api/brick/token";
|
|
7737
|
-
var
|
|
7830
|
+
var BODY_LIMIT43 = 2048;
|
|
7738
7831
|
var KEY3 = "public_key";
|
|
7739
7832
|
var PUBLIC_KEY2 = /^(?:t_)?[A-Za-z0-9]{16,64}$/;
|
|
7740
7833
|
var SHAPES3 = /* @__PURE__ */ Object.freeze({
|
|
@@ -7744,8 +7837,8 @@ var SHAPES3 = /* @__PURE__ */ Object.freeze({
|
|
|
7744
7837
|
"card[exp_year]": /^(?:[0-9]{2}|20[0-9]{2})$/,
|
|
7745
7838
|
"card[cvv]": /^[0-9]{3,4}$/
|
|
7746
7839
|
});
|
|
7747
|
-
var
|
|
7748
|
-
var
|
|
7840
|
+
var refuse44 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
7841
|
+
var CARD44 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
7749
7842
|
function luhn11(digits3) {
|
|
7750
7843
|
let sum = 0;
|
|
7751
7844
|
for (let at = 0; at < digits3.length; at += 1) {
|
|
@@ -7773,7 +7866,7 @@ function paymentwallKeyEnvironment(publicKey) {
|
|
|
7773
7866
|
return publicKey.startsWith("t_") ? "sandbox" : "production";
|
|
7774
7867
|
}
|
|
7775
7868
|
function readPairs3(body) {
|
|
7776
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
7869
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT43 || !/^[A-Za-z0-9_[\]=&]+$/.test(body))
|
|
7777
7870
|
return null;
|
|
7778
7871
|
const pairs = /* @__PURE__ */ new Map();
|
|
7779
7872
|
for (const chunk of body.split("&")) {
|
|
@@ -7789,21 +7882,21 @@ function readPairs3(body) {
|
|
|
7789
7882
|
}
|
|
7790
7883
|
function paymentwallBodyVerdict(body, url) {
|
|
7791
7884
|
if (url !== void 0 && !isPaymentwallTokenUrl(url))
|
|
7792
|
-
return
|
|
7885
|
+
return refuse44("paymentwall_url_refused");
|
|
7793
7886
|
const pairs = readPairs3(body);
|
|
7794
7887
|
if (pairs === null)
|
|
7795
|
-
return
|
|
7888
|
+
return refuse44("paymentwall_body_unsupported");
|
|
7796
7889
|
if (pairs.has("card[token]") && !pairs.has("card[number]"))
|
|
7797
|
-
return
|
|
7890
|
+
return refuse44("paymentwall_saved_card");
|
|
7798
7891
|
const keys = Object.keys(SHAPES3);
|
|
7799
7892
|
if (pairs.size !== keys.length || !keys.every((key) => pairs.has(key) && SHAPES3[key].test(pairs.get(key)))) {
|
|
7800
|
-
return
|
|
7893
|
+
return refuse44("paymentwall_body_unsupported");
|
|
7801
7894
|
}
|
|
7802
7895
|
if (!luhn11(pairs.get("card[number]")))
|
|
7803
|
-
return
|
|
7896
|
+
return refuse44("paymentwall_body_unsupported");
|
|
7804
7897
|
if (url !== void 0 && paymentwallKeyEnvironment(pairs.get(KEY3)) !== paymentwallUrlEnvironment(url))
|
|
7805
|
-
return
|
|
7806
|
-
return
|
|
7898
|
+
return refuse44("paymentwall_key_refused");
|
|
7899
|
+
return CARD44;
|
|
7807
7900
|
}
|
|
7808
7901
|
var paymentwall_default = /* @__PURE__ */ registerProcessor({
|
|
7809
7902
|
psp: PAYMENTWALL_PSP,
|
|
@@ -7953,7 +8046,7 @@ var PAYSTACK_BODY_KEYS = /* @__PURE__ */ Object.freeze([
|
|
|
7953
8046
|
"transaction_type"
|
|
7954
8047
|
]);
|
|
7955
8048
|
var OPTIONAL = /* @__PURE__ */ new Set(["access_code", "card_holder_name", "transaction_type"]);
|
|
7956
|
-
var
|
|
8049
|
+
var BODY_LIMIT44 = 4096;
|
|
7957
8050
|
var CIPHERTEXT_BYTES2 = [62, 63, 64];
|
|
7958
8051
|
var BASE646 = /^[A-Za-z0-9+/]+={0,2}$/;
|
|
7959
8052
|
var SHAPES4 = /* @__PURE__ */ Object.freeze({
|
|
@@ -7967,8 +8060,8 @@ var SHAPES4 = /* @__PURE__ */ Object.freeze({
|
|
|
7967
8060
|
card_holder_name: /^[^\x00-\x1f\x7f0-9]{1,128}$/u,
|
|
7968
8061
|
transaction_type: /^[a-z_]{1,32}$/
|
|
7969
8062
|
});
|
|
7970
|
-
var
|
|
7971
|
-
var
|
|
8063
|
+
var own19 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
8064
|
+
var refuse45 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
7972
8065
|
function paystackFormValue(value) {
|
|
7973
8066
|
return encodeURIComponent(String(value)).replace(/%20/g, "+").replace(/[!'()*~]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
7974
8067
|
}
|
|
@@ -7991,7 +8084,7 @@ function isCiphertext2(value) {
|
|
|
7991
8084
|
return btoa(binary) === value && CIPHERTEXT_BYTES2.includes(binary.length);
|
|
7992
8085
|
}
|
|
7993
8086
|
function readForm3(body) {
|
|
7994
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
8087
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT44)
|
|
7995
8088
|
return null;
|
|
7996
8089
|
const entries = [];
|
|
7997
8090
|
for (const part of body.split("&")) {
|
|
@@ -8010,21 +8103,21 @@ function readForm3(body) {
|
|
|
8010
8103
|
function paystackBodyVerdict(body) {
|
|
8011
8104
|
const entries = readForm3(body);
|
|
8012
8105
|
if (entries === null)
|
|
8013
|
-
return
|
|
8106
|
+
return refuse45("paystack_body_unsupported");
|
|
8014
8107
|
const keys = entries.map(([key]) => key);
|
|
8015
8108
|
if (keys.includes("subscription"))
|
|
8016
|
-
return
|
|
8109
|
+
return refuse45("paystack_subscription");
|
|
8017
8110
|
if (keys.includes("remember_card") && entries.find(([key]) => key === "remember_card")[1] !== "false")
|
|
8018
|
-
return
|
|
8111
|
+
return refuse45("paystack_saved_card");
|
|
8019
8112
|
const expected = PAYSTACK_BODY_KEYS.filter((key) => !OPTIONAL.has(key) || keys.includes(key));
|
|
8020
8113
|
if (keys.length !== expected.length || keys.some((key, i) => key !== expected[i]))
|
|
8021
|
-
return
|
|
8114
|
+
return refuse45("paystack_body_unsupported");
|
|
8022
8115
|
const fields = Object.fromEntries(entries);
|
|
8023
8116
|
if (!isCiphertext2(fields.clientdata))
|
|
8024
|
-
return
|
|
8117
|
+
return refuse45("paystack_body_unsupported");
|
|
8025
8118
|
for (const [key, shape] of Object.entries(SHAPES4)) {
|
|
8026
|
-
if (
|
|
8027
|
-
return
|
|
8119
|
+
if (own19(fields, key) && !shape.test(fields[key]))
|
|
8120
|
+
return refuse45("paystack_body_unsupported");
|
|
8028
8121
|
}
|
|
8029
8122
|
return Object.freeze({ verdict: "card", fields: Object.freeze(fields) });
|
|
8030
8123
|
}
|
|
@@ -8051,7 +8144,7 @@ var paystack_default = /* @__PURE__ */ registerProcessor({
|
|
|
8051
8144
|
// Not surveyed: reading a charge back takes the merchant's secret key, which Agentcard never holds.
|
|
8052
8145
|
settlementReadback: "not_surveyed",
|
|
8053
8146
|
exactUrl: isPaystackChargeUrl,
|
|
8054
|
-
bodyGate: (url, body) => url !== void 0 && !isPaystackChargeUrl(url) ?
|
|
8147
|
+
bodyGate: (url, body) => url !== void 0 && !isPaystackChargeUrl(url) ? refuse45("paystack_url_refused") : paystackBodyVerdict(body),
|
|
8055
8148
|
// No amount reader: the charge names none, so the agent's pair is the figure the cardholder approves.
|
|
8056
8149
|
limitations: ["The charge names no merchant and no amount: Paystack's transaction binds both, so the cardholder approves the agent's figure for whichever Paystack merchant opened the checkout."]
|
|
8057
8150
|
});
|
|
@@ -8059,7 +8152,7 @@ var paystack_default = /* @__PURE__ */ registerProcessor({
|
|
|
8059
8152
|
var PROCESSOUT_PSP = "processout";
|
|
8060
8153
|
var PROCESSOUT_OPERATION = "processout.card_request";
|
|
8061
8154
|
var URL_LIMIT17 = 512;
|
|
8062
|
-
var
|
|
8155
|
+
var BODY_LIMIT45 = 4096;
|
|
8063
8156
|
var CARD_URL2 = /^https:\/\/api\.processout\.com\/cards\?legacyrequest=true&project_id=((?:test-)?proj_[A-Za-z0-9]{16,64})&x-Content-Type=application\/json&x-API-Version=1\.3\.0\.0&x-Authorization=Basic%20([A-Za-z0-9+/]{4,256}={0,2})$/;
|
|
8064
8157
|
var PAGE_KEYS2 = /* @__PURE__ */ Object.freeze(["name", "contact", "preferred_scheme"]);
|
|
8065
8158
|
var CONTACT_KEYS = /* @__PURE__ */ Object.freeze(["address1", "address2", "city", "state", "country_code", "zip"]);
|
|
@@ -8074,7 +8167,7 @@ var DEVICE_KEYS4 = /* @__PURE__ */ Object.freeze([
|
|
|
8074
8167
|
]);
|
|
8075
8168
|
var PROCESSOUT_CARD_KEYS = /* @__PURE__ */ Object.freeze(["number", "exp_month", "exp_year", "cvc2"]);
|
|
8076
8169
|
var BODY_KEYS3 = /* @__PURE__ */ new Set([...PAGE_KEYS2, "device", ...DEVICE_KEYS4, ...PROCESSOUT_CARD_KEYS]);
|
|
8077
|
-
var
|
|
8170
|
+
var NUMBER10 = /^[0-9]{12,19}$/;
|
|
8078
8171
|
var MONTH23 = /^(?:[1-9]|1[0-2])$/;
|
|
8079
8172
|
var YEAR24 = /^20[0-9]{2}$/;
|
|
8080
8173
|
var CODE9 = /^[0-9]{3,4}$/;
|
|
@@ -8082,10 +8175,10 @@ var TEXT_LIMIT14 = 256;
|
|
|
8082
8175
|
var SCHEME = /^[A-Za-z][A-Za-z0-9 _-]{0,31}$/;
|
|
8083
8176
|
var LANGUAGE5 = /^[A-Za-z]{1,8}(?:-[A-Za-z0-9]{1,8}){0,4}$/;
|
|
8084
8177
|
var PAN_LIKE7 = /(?:[0-9][^0-9A-Za-z]*){12,}/;
|
|
8085
|
-
var
|
|
8086
|
-
var
|
|
8087
|
-
var
|
|
8088
|
-
var
|
|
8178
|
+
var record38 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
8179
|
+
var own20 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
8180
|
+
var refuse46 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
8181
|
+
var CARD45 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
8089
8182
|
var BASE647 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
8090
8183
|
function base64Of(text10) {
|
|
8091
8184
|
let out = "";
|
|
@@ -8122,12 +8215,12 @@ function processoutCardTarget(url) {
|
|
|
8122
8215
|
function isProcessoutCardUrl(url) {
|
|
8123
8216
|
return processoutCardTarget(url) !== null;
|
|
8124
8217
|
}
|
|
8125
|
-
function
|
|
8126
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
8218
|
+
function readBody28(body) {
|
|
8219
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT45)
|
|
8127
8220
|
return null;
|
|
8128
8221
|
try {
|
|
8129
8222
|
const value = JSON.parse(body);
|
|
8130
|
-
return
|
|
8223
|
+
return record38(value) && JSON.stringify(value) === body ? value : null;
|
|
8131
8224
|
}
|
|
8132
8225
|
catch {
|
|
8133
8226
|
return null;
|
|
@@ -8145,31 +8238,31 @@ var DEVICE_RULES = /* @__PURE__ */ Object.freeze({
|
|
|
8145
8238
|
});
|
|
8146
8239
|
function soundDevice3(value) {
|
|
8147
8240
|
const device = value.device;
|
|
8148
|
-
if (!
|
|
8241
|
+
if (!record38(device) || !own20(device, "request_origin") || !own20(device, "app_timezone_offset"))
|
|
8149
8242
|
return false;
|
|
8150
|
-
return DEVICE_KEYS4.every((key) =>
|
|
8243
|
+
return DEVICE_KEYS4.every((key) => own20(device, key) ? DEVICE_RULES[key](device[key]) && own20(value, key) && value[key] === device[key] : !own20(value, key)) && Object.keys(device).every((key) => DEVICE_KEYS4.includes(key));
|
|
8151
8244
|
}
|
|
8152
8245
|
function soundPageData(value) {
|
|
8153
|
-
if (
|
|
8246
|
+
if (own20(value, "name") && !pageText2(value.name))
|
|
8154
8247
|
return false;
|
|
8155
|
-
if (
|
|
8248
|
+
if (own20(value, "preferred_scheme") && !(value.preferred_scheme === null || typeof value.preferred_scheme === "string" && SCHEME.test(value.preferred_scheme)))
|
|
8156
8249
|
return false;
|
|
8157
8250
|
const contact = value.contact;
|
|
8158
|
-
return
|
|
8251
|
+
return record38(contact) && Object.keys(contact).every((key) => CONTACT_KEYS.includes(key) && pageText2(contact[key]));
|
|
8159
8252
|
}
|
|
8160
8253
|
function processoutBodyVerdict(body, url) {
|
|
8161
8254
|
if (url !== void 0 && processoutCardTarget(url) === null)
|
|
8162
|
-
return
|
|
8163
|
-
const value =
|
|
8255
|
+
return refuse46("processout_url_refused");
|
|
8256
|
+
const value = readBody28(body);
|
|
8164
8257
|
if (value === null || !Object.keys(value).every((key) => BODY_KEYS3.has(key)))
|
|
8165
|
-
return
|
|
8258
|
+
return refuse46("processout_body_unsupported");
|
|
8166
8259
|
if (!PROCESSOUT_CARD_KEYS.every((key) => typeof value[key] === "string"))
|
|
8167
|
-
return
|
|
8168
|
-
if (!
|
|
8169
|
-
return
|
|
8260
|
+
return refuse46("processout_body_unsupported");
|
|
8261
|
+
if (!NUMBER10.test(value.number) || !luhn12(value.number) || !MONTH23.test(value.exp_month) || !YEAR24.test(value.exp_year) || !CODE9.test(value.cvc2))
|
|
8262
|
+
return refuse46("processout_body_unsupported");
|
|
8170
8263
|
if (!soundPageData(value) || !soundDevice3(value))
|
|
8171
|
-
return
|
|
8172
|
-
return
|
|
8264
|
+
return refuse46("processout_body_unsupported");
|
|
8265
|
+
return CARD45;
|
|
8173
8266
|
}
|
|
8174
8267
|
var processout_default = /* @__PURE__ */ registerProcessor({
|
|
8175
8268
|
psp: PROCESSOUT_PSP,
|
|
@@ -8212,15 +8305,15 @@ var USAEPAY_HOSTS = /* @__PURE__ */ Object.freeze({
|
|
|
8212
8305
|
"sandbox.usaepay.com": "sandbox"
|
|
8213
8306
|
});
|
|
8214
8307
|
var USAEPAY_PAYMENT_KEYS_PATH = "/api/v2/pub/payment_keys";
|
|
8215
|
-
var
|
|
8308
|
+
var BODY_LIMIT46 = 512;
|
|
8216
8309
|
var URL_LIMIT18 = 256;
|
|
8217
8310
|
var CARD_NUMBER22 = /^[0-9]{13,19}$/;
|
|
8218
8311
|
var EXPIRATION2 = /^(?:0[1-9]|1[0-2])[0-9]{2}$/;
|
|
8219
8312
|
var SECURITY_CODE26 = /^(?:[0-9]{3,4})?$/;
|
|
8220
|
-
var
|
|
8221
|
-
var
|
|
8222
|
-
var
|
|
8223
|
-
var
|
|
8313
|
+
var record39 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
8314
|
+
var own21 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
8315
|
+
var refuse47 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
8316
|
+
var CARD46 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
8224
8317
|
function usaepayPaymentKeysUrl(url) {
|
|
8225
8318
|
if (typeof url !== "string" || url.length > URL_LIMIT18 || url.includes("?") || url.includes("#"))
|
|
8226
8319
|
return null;
|
|
@@ -8231,7 +8324,7 @@ function usaepayPaymentKeysUrl(url) {
|
|
|
8231
8324
|
catch {
|
|
8232
8325
|
return null;
|
|
8233
8326
|
}
|
|
8234
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
8327
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own21(USAEPAY_HOSTS, parsed.hostname) || parsed.pathname !== USAEPAY_PAYMENT_KEYS_PATH)
|
|
8235
8328
|
return null;
|
|
8236
8329
|
return Object.freeze({ host: parsed.hostname, environment: USAEPAY_HOSTS[parsed.hostname] });
|
|
8237
8330
|
}
|
|
@@ -8246,23 +8339,23 @@ function luhn13(digits3) {
|
|
|
8246
8339
|
}
|
|
8247
8340
|
return sum % 10 === 0;
|
|
8248
8341
|
}
|
|
8249
|
-
function
|
|
8250
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
8342
|
+
function readBody29(body) {
|
|
8343
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT46)
|
|
8251
8344
|
return null;
|
|
8252
8345
|
try {
|
|
8253
8346
|
const value = JSON.parse(body);
|
|
8254
|
-
return
|
|
8347
|
+
return record39(value) && JSON.stringify(value) === body ? value : null;
|
|
8255
8348
|
}
|
|
8256
8349
|
catch {
|
|
8257
8350
|
return null;
|
|
8258
8351
|
}
|
|
8259
8352
|
}
|
|
8260
8353
|
function usaepayBodyVerdict(body) {
|
|
8261
|
-
const value =
|
|
8354
|
+
const value = readBody29(body);
|
|
8262
8355
|
const card = value === null ? null : value.creditcard;
|
|
8263
|
-
if (value === null || Object.keys(value).join() !== "creditcard" || !
|
|
8264
|
-
return
|
|
8265
|
-
return
|
|
8356
|
+
if (value === null || Object.keys(value).join() !== "creditcard" || !record39(card) || Object.keys(card).join() !== "number,expiration,cvc" || typeof card.number !== "string" || !CARD_NUMBER22.test(card.number) || !luhn13(card.number) || typeof card.expiration !== "string" || !EXPIRATION2.test(card.expiration) || typeof card.cvc !== "string" || !SECURITY_CODE26.test(card.cvc))
|
|
8357
|
+
return refuse47("usaepay_body_unsupported");
|
|
8358
|
+
return CARD46;
|
|
8266
8359
|
}
|
|
8267
8360
|
var usaepay_default = /* @__PURE__ */ registerProcessor({
|
|
8268
8361
|
psp: USAEPAY_PSP,
|
|
@@ -8294,7 +8387,7 @@ var usaepay_default = /* @__PURE__ */ registerProcessor({
|
|
|
8294
8387
|
source: "https://help.usaepay.info/developer/payjs-v2/ , https://help.usaepay.info/api/rest/"
|
|
8295
8388
|
},
|
|
8296
8389
|
exactUrl: isUsaepayPaymentKeysUrl,
|
|
8297
|
-
bodyGate: (url, body) => url !== void 0 && !isUsaepayPaymentKeysUrl(url) ?
|
|
8390
|
+
bodyGate: (url, body) => url !== void 0 && !isUsaepayPaymentKeysUrl(url) ? refuse47("usaepay_url_refused") : usaepayBodyVerdict(body)
|
|
8298
8391
|
// No amount reader: the request names none, so the agent's pair is the figure the cardholder approves.
|
|
8299
8392
|
});
|
|
8300
8393
|
// src/processors/viva_wallet.js
|
|
@@ -8330,7 +8423,7 @@ var VIVA_WALLET_BODY_KEYS = /* @__PURE__ */ Object.freeze([
|
|
|
8330
8423
|
"merchantTrns",
|
|
8331
8424
|
"captchaToken"
|
|
8332
8425
|
]);
|
|
8333
|
-
var
|
|
8426
|
+
var BODY_LIMIT47 = 16384;
|
|
8334
8427
|
var URL_LIMIT19 = 256;
|
|
8335
8428
|
var ORDER_CODE = /^[0-9]{16}$/;
|
|
8336
8429
|
var CARD_NUMBER23 = /^[0-9]{13,19}$/;
|
|
@@ -8342,10 +8435,10 @@ var MEMBER_NAME = /^[A-Za-z][A-Za-z0-9]{0,31}$/;
|
|
|
8342
8435
|
var SHORT_ID = /^[A-Za-z0-9_-]{1,64}$/;
|
|
8343
8436
|
var TEXT4 = /^[^\u0000-\u001f\u007f]{0,200}$/;
|
|
8344
8437
|
var CARD_DIGITS2 = /[0-9]{12,}/;
|
|
8345
|
-
var
|
|
8346
|
-
var
|
|
8347
|
-
var
|
|
8348
|
-
var
|
|
8438
|
+
var record40 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
8439
|
+
var own22 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
8440
|
+
var refuse48 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
8441
|
+
var CARD47 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
8349
8442
|
var inOrder9 = (value, keys) => {
|
|
8350
8443
|
let at = 0;
|
|
8351
8444
|
for (const name of Object.keys(value)) {
|
|
@@ -8360,7 +8453,7 @@ var inOrder9 = (value, keys) => {
|
|
|
8360
8453
|
var cardDigits2 = (text10) => CARD_DIGITS2.test(text10.replace(/[^0-9A-Za-z]/g, ""));
|
|
8361
8454
|
var plainText8 = (value) => typeof value === "string" && TEXT4.test(value) && !cardDigits2(value);
|
|
8362
8455
|
var scalar = (value) => value === null || typeof value === "boolean" || Number.isSafeInteger(value) && Math.abs(value) < 1e9 || plainText8(value);
|
|
8363
|
-
var flatRecord = (value, limit) =>
|
|
8456
|
+
var flatRecord = (value, limit) => record40(value) && Object.keys(value).length <= limit && Object.entries(value).every(([key, item]) => MEMBER_NAME.test(key) && scalar(item));
|
|
8364
8457
|
function vivaWalletChargeTokensUrl(url) {
|
|
8365
8458
|
if (typeof url !== "string" || url.length > URL_LIMIT19 || url.includes("?") || url.includes("#"))
|
|
8366
8459
|
return null;
|
|
@@ -8371,7 +8464,7 @@ function vivaWalletChargeTokensUrl(url) {
|
|
|
8371
8464
|
catch {
|
|
8372
8465
|
return null;
|
|
8373
8466
|
}
|
|
8374
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
8467
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own22(VIVA_WALLET_HOSTS, parsed.hostname) || parsed.pathname !== VIVA_WALLET_CHARGE_TOKENS_PATH)
|
|
8375
8468
|
return null;
|
|
8376
8469
|
return Object.freeze({ host: parsed.hostname, environment: VIVA_WALLET_HOSTS[parsed.hostname] });
|
|
8377
8470
|
}
|
|
@@ -8389,12 +8482,12 @@ function luhn14(digits3) {
|
|
|
8389
8482
|
function vivaWalletMaskedNumber(number) {
|
|
8390
8483
|
return `${number.slice(0, 6)}${"X".repeat(Math.max(0, number.length - 10))}${number.slice(-4)}`;
|
|
8391
8484
|
}
|
|
8392
|
-
function
|
|
8393
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
8485
|
+
function readBody30(body) {
|
|
8486
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT47)
|
|
8394
8487
|
return null;
|
|
8395
8488
|
try {
|
|
8396
8489
|
const value = JSON.parse(body);
|
|
8397
|
-
return
|
|
8490
|
+
return record40(value) && JSON.stringify(value) === body ? value : null;
|
|
8398
8491
|
}
|
|
8399
8492
|
catch {
|
|
8400
8493
|
return null;
|
|
@@ -8406,26 +8499,26 @@ function currencyNumber(value) {
|
|
|
8406
8499
|
return typeof value === "string" && /^[0-9]{3}$/.test(value) ? Number(value) : null;
|
|
8407
8500
|
}
|
|
8408
8501
|
function vivaWalletBodyVerdict(body) {
|
|
8409
|
-
const value =
|
|
8502
|
+
const value = readBody30(body);
|
|
8410
8503
|
if (value === null || !Object.keys(value).every((key) => VIVA_WALLET_BODY_KEYS.includes(key))) {
|
|
8411
|
-
return value !== null && (
|
|
8504
|
+
return value !== null && (own22(value, "creditCardId") || own22(value, "token")) ? refuse48("viva_wallet_stored_card") : refuse48("viva_wallet_body_unsupported");
|
|
8412
8505
|
}
|
|
8413
8506
|
if (value.rememberCard !== false)
|
|
8414
|
-
return
|
|
8507
|
+
return refuse48(value.rememberCard === true ? "viva_wallet_keep_on_file" : "viva_wallet_body_unsupported");
|
|
8415
8508
|
if (value.dccAccepted === true)
|
|
8416
|
-
return
|
|
8417
|
-
if (
|
|
8418
|
-
return
|
|
8419
|
-
if (
|
|
8420
|
-
return
|
|
8509
|
+
return refuse48("viva_wallet_currency_conversion");
|
|
8510
|
+
if (own22(value, "dccAccepted") && value.dccAccepted !== false)
|
|
8511
|
+
return refuse48("viva_wallet_body_unsupported");
|
|
8512
|
+
if (own22(value, "scaRequestedTransactionId"))
|
|
8513
|
+
return refuse48("viva_wallet_retry_refused");
|
|
8421
8514
|
if (!(value.installments === 0 || value.installments === 1)) {
|
|
8422
|
-
return
|
|
8515
|
+
return refuse48(Number.isSafeInteger(value.installments) && value.installments > 1 ? "viva_wallet_installments" : "viva_wallet_body_unsupported");
|
|
8423
8516
|
}
|
|
8424
|
-
if (!inOrder9(value, VIVA_WALLET_BODY_KEYS) || ["offerCodes", "loyaltySupported", "redeemedAmount", "retrievalReferenceNumber", "merchantTrns"].some((key) =>
|
|
8425
|
-
return
|
|
8517
|
+
if (!inOrder9(value, VIVA_WALLET_BODY_KEYS) || ["offerCodes", "loyaltySupported", "redeemedAmount", "retrievalReferenceNumber", "merchantTrns"].some((key) => own22(value, key)))
|
|
8518
|
+
return refuse48("viva_wallet_body_unsupported");
|
|
8426
8519
|
const number = value.number;
|
|
8427
|
-
const sound = typeof value.orderCode === "string" && ORDER_CODE.test(value.orderCode) && Number.isSafeInteger(value.amount) && value.amount > 0 && currencyNumber(value.currencyCode) !== null && plainText8(value.holderName) && value.holderName.trim() !== "" && plainText8(value.holderMail) && (value.cvc === null || typeof value.cvc === "string" && SECURITY_CODE27.test(value.cvc)) && typeof number === "string" && CARD_NUMBER23.test(number) && luhn14(number) && typeof value.expirationMonth === "string" && MONTH24.test(value.expirationMonth) && typeof value.expirationYear === "string" && YEAR25.test(value.expirationYear) && flatRecord(value.customer, 12) && (!
|
|
8428
|
-
return sound ?
|
|
8520
|
+
const sound = typeof value.orderCode === "string" && ORDER_CODE.test(value.orderCode) && Number.isSafeInteger(value.amount) && value.amount > 0 && currencyNumber(value.currencyCode) !== null && plainText8(value.holderName) && value.holderName.trim() !== "" && plainText8(value.holderMail) && (value.cvc === null || typeof value.cvc === "string" && SECURITY_CODE27.test(value.cvc)) && typeof number === "string" && CARD_NUMBER23.test(number) && luhn14(number) && typeof value.expirationMonth === "string" && MONTH24.test(value.expirationMonth) && typeof value.expirationYear === "string" && YEAR25.test(value.expirationYear) && flatRecord(value.customer, 12) && (!own22(value, "friendlyName") || plainText8(value.friendlyName)) && value.maskedNumber === vivaWalletMaskedNumber(number) && (!own22(value, "bankId") || typeof value.bankId === "string" && SHORT_ID.test(value.bankId) || Number.isSafeInteger(value.bankId) && value.bankId >= 0) && (!own22(value, "selectedBrand") || value.selectedBrand === null || flatRecord(value.selectedBrand, 16)) && (!own22(value, "cardholderBrandSelection") || typeof value.cardholderBrandSelection === "boolean") && (!own22(value, "dccOptions") || flatRecord(value.dccOptions, 16)) && (!own22(value, "captchaToken") || typeof value.captchaToken === "string" && CAPTCHA_TOKEN.test(value.captchaToken));
|
|
8521
|
+
return sound ? CARD47 : refuse48("viva_wallet_body_unsupported");
|
|
8429
8522
|
}
|
|
8430
8523
|
var VIVA_WALLET_CURRENCIES = /* @__PURE__ */ Object.freeze({
|
|
8431
8524
|
978: "eur",
|
|
@@ -8488,9 +8581,9 @@ var viva_wallet_default = /* @__PURE__ */ registerProcessor({
|
|
|
8488
8581
|
refusedOperations: [VIVA_WALLET_OPERATION],
|
|
8489
8582
|
settlementReadback: "not_surveyed",
|
|
8490
8583
|
exactUrl: isVivaWalletChargeTokensUrl,
|
|
8491
|
-
bodyGate: (url, body) => url !== void 0 && !isVivaWalletChargeTokensUrl(url) ?
|
|
8584
|
+
bodyGate: (url, body) => url !== void 0 && !isVivaWalletChargeTokensUrl(url) ? refuse48("viva_wallet_url_refused") : vivaWalletBodyVerdict(body),
|
|
8492
8585
|
// The body names the order's amount in cents and its numeric currency, which the page's card-free charge repeats.
|
|
8493
|
-
amount: (template) =>
|
|
8586
|
+
amount: (template) => record40(template) && isVivaWalletChargeTokensUrl(template.url) ? vivaWalletAmount(template.body) : null
|
|
8494
8587
|
});
|
|
8495
8588
|
// src/processors/vtex_payments.js
|
|
8496
8589
|
var VTEX_PAYMENTS_PSP = "vtex_payments";
|
|
@@ -8540,7 +8633,7 @@ var VTEX_PAYMENTS_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
|
8540
8633
|
Object.freeze({ account: "alssports", origin: "https://www.als.com", merchant: "Al's Sporting Goods", currency: "USD" }),
|
|
8541
8634
|
Object.freeze({ account: "roadrunnersports", origin: "https://www.roadrunnersports.com", merchant: "Road Runner Sports", currency: "USD" })
|
|
8542
8635
|
]);
|
|
8543
|
-
var
|
|
8636
|
+
var BODY_LIMIT48 = 16384;
|
|
8544
8637
|
var ACCOUNT_HOST = /^([a-z0-9]{1,63})\.vtexvault\.com$/;
|
|
8545
8638
|
var PATH = /^\/api\/payments\/transactions\/([0-9A-Fa-f]{32})\/payments$/;
|
|
8546
8639
|
var ORDER_GROUP = /^[0-9]{6,24}$/;
|
|
@@ -8548,7 +8641,7 @@ var BASE648 = /^[A-Za-z0-9+/]{4,1020}={0,2}$/;
|
|
|
8548
8641
|
var CARD_NUMBER24 = /^[0-9]{12,19}$/;
|
|
8549
8642
|
var SECURITY_CODE28 = /^[0-9]{3,4}$/;
|
|
8550
8643
|
var DUE_DATE = /^(?:0[1-9]|1[0-2])\/[0-9]{2}$/;
|
|
8551
|
-
var
|
|
8644
|
+
var CURRENCY7 = /^[A-Z]{3}$/;
|
|
8552
8645
|
var TRANSACTION_ID = /^[0-9A-Fa-f]{32}$/;
|
|
8553
8646
|
var MERCHANT_NAME = /^[A-Za-z0-9_.-]{1,64}$/;
|
|
8554
8647
|
var SHORT_ID2 = /^[A-Za-z0-9_-]{1,64}$/;
|
|
@@ -8556,10 +8649,10 @@ var FINGERPRINT4 = /^[A-Za-z0-9_.:=+/-]{1,256}$/;
|
|
|
8556
8649
|
var TEXT5 = /^[^\u0000-\u001f\u007f]{1,200}$/;
|
|
8557
8650
|
var CARD_DIGITS3 = /[0-9]{12,}/;
|
|
8558
8651
|
var DEVICE_INFO_KEYS = Object.freeze(["sw", "sh", "cd", "tz", "lang", "java", "sourceApplication"]);
|
|
8559
|
-
var
|
|
8560
|
-
var
|
|
8561
|
-
var
|
|
8562
|
-
var
|
|
8652
|
+
var record41 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
8653
|
+
var own23 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
8654
|
+
var refuse49 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
8655
|
+
var CARD48 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
8563
8656
|
var inOrder10 = (value, keys) => {
|
|
8564
8657
|
let at = 0;
|
|
8565
8658
|
for (const name of Object.keys(value)) {
|
|
@@ -8609,18 +8702,18 @@ function deviceInfoSound(text10) {
|
|
|
8609
8702
|
catch {
|
|
8610
8703
|
return false;
|
|
8611
8704
|
}
|
|
8612
|
-
if (!
|
|
8705
|
+
if (!record41(info) || !Object.keys(info).every((key) => DEVICE_INFO_KEYS.includes(key)))
|
|
8613
8706
|
return false;
|
|
8614
8707
|
for (const key of ["sw", "sh", "cd"])
|
|
8615
|
-
if (
|
|
8708
|
+
if (own23(info, key) && !(count(info[key]) && info[key] <= 1e5))
|
|
8616
8709
|
return false;
|
|
8617
|
-
if (
|
|
8710
|
+
if (own23(info, "tz") && !(Number.isSafeInteger(info.tz) && Math.abs(info.tz) <= 1440))
|
|
8618
8711
|
return false;
|
|
8619
|
-
if (
|
|
8712
|
+
if (own23(info, "lang") && !(typeof info.lang === "string" && /^[A-Za-z]{0,8}$/.test(info.lang)))
|
|
8620
8713
|
return false;
|
|
8621
|
-
if (
|
|
8714
|
+
if (own23(info, "java") && typeof info.java !== "boolean")
|
|
8622
8715
|
return false;
|
|
8623
|
-
return !
|
|
8716
|
+
return !own23(info, "sourceApplication") || typeof info.sourceApplication === "string" && /^[A-Za-z0-9_.-]{1,32}$/.test(info.sourceApplication);
|
|
8624
8717
|
}
|
|
8625
8718
|
function vtexPaymentsCardTarget(url) {
|
|
8626
8719
|
if (typeof url !== "string" || url.length > 8192)
|
|
@@ -8666,8 +8759,8 @@ function isVtexPaymentsCardUrl(url) {
|
|
|
8666
8759
|
const target = vtexPaymentsCardTarget(url);
|
|
8667
8760
|
return target !== null && !target.fallback;
|
|
8668
8761
|
}
|
|
8669
|
-
function
|
|
8670
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
8762
|
+
function readBody31(body) {
|
|
8763
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT48)
|
|
8671
8764
|
return null;
|
|
8672
8765
|
let value;
|
|
8673
8766
|
try {
|
|
@@ -8681,13 +8774,13 @@ function readBody30(body) {
|
|
|
8681
8774
|
return value;
|
|
8682
8775
|
}
|
|
8683
8776
|
function cardLine(line) {
|
|
8684
|
-
if (!
|
|
8777
|
+
if (!record41(line))
|
|
8685
8778
|
return false;
|
|
8686
|
-
const fields =
|
|
8687
|
-
return line.groupName === "creditCardPaymentGroup" || line.groupName === "debitCardPaymentGroup" ||
|
|
8779
|
+
const fields = record41(line.fields) ? line.fields : {};
|
|
8780
|
+
return line.groupName === "creditCardPaymentGroup" || line.groupName === "debitCardPaymentGroup" || own23(line, "accountId") || own23(fields, "accountId") || own23(fields, "cardNumber") || own23(fields, "validationCode") || own23(fields, "dueDate");
|
|
8688
8781
|
}
|
|
8689
8782
|
function addressSound(address2) {
|
|
8690
|
-
if (!
|
|
8783
|
+
if (!record41(address2) || !inOrder10(address2, VTEX_PAYMENTS_ADDRESS_KEYS))
|
|
8691
8784
|
return false;
|
|
8692
8785
|
for (const [key, value] of Object.entries(address2)) {
|
|
8693
8786
|
if (key === "addressType") {
|
|
@@ -8708,7 +8801,7 @@ function addressSound(address2) {
|
|
|
8708
8801
|
return true;
|
|
8709
8802
|
}
|
|
8710
8803
|
function fieldsSound(fields) {
|
|
8711
|
-
if (!
|
|
8804
|
+
if (!record41(fields) || !inOrder10(fields, VTEX_PAYMENTS_FIELD_KEYS) || own23(fields, "metadata"))
|
|
8712
8805
|
return false;
|
|
8713
8806
|
if (!(typeof fields.cardNumber === "string" && CARD_NUMBER24.test(fields.cardNumber)))
|
|
8714
8807
|
return false;
|
|
@@ -8718,38 +8811,38 @@ function fieldsSound(fields) {
|
|
|
8718
8811
|
return false;
|
|
8719
8812
|
if (!plainText9(fields.holderName))
|
|
8720
8813
|
return false;
|
|
8721
|
-
if (
|
|
8814
|
+
if (own23(fields, "document") && !(fields.document === "" || plainText9(fields.document) && fields.document.length <= 32))
|
|
8722
8815
|
return false;
|
|
8723
|
-
if (
|
|
8816
|
+
if (own23(fields, "address") && !addressSound(fields.address))
|
|
8724
8817
|
return false;
|
|
8725
|
-
if (
|
|
8818
|
+
if (own23(fields, "deviceFingerprint") && !(typeof fields.deviceFingerprint === "string" && FINGERPRINT4.test(fields.deviceFingerprint)))
|
|
8726
8819
|
return false;
|
|
8727
|
-
return !
|
|
8820
|
+
return !own23(fields, "addressId") || typeof fields.addressId === "string" && SHORT_ID2.test(fields.addressId);
|
|
8728
8821
|
}
|
|
8729
8822
|
function vtexPaymentsBodyVerdict(body, target) {
|
|
8730
|
-
const lines =
|
|
8731
|
-
if (lines === null || lines.length === 0 || !lines.every(
|
|
8732
|
-
return
|
|
8823
|
+
const lines = readBody31(body);
|
|
8824
|
+
if (lines === null || lines.length === 0 || !lines.every(record41))
|
|
8825
|
+
return refuse49("vtex_payments_body_unsupported");
|
|
8733
8826
|
const cards = lines.filter(cardLine);
|
|
8734
|
-
if (cards.some((line2) =>
|
|
8735
|
-
return
|
|
8827
|
+
if (cards.some((line2) => own23(line2, "accountId") || own23(line2.fields ?? {}, "accountId")))
|
|
8828
|
+
return refuse49("vtex_payments_saved_card");
|
|
8736
8829
|
if (cards.length === 0)
|
|
8737
|
-
return
|
|
8738
|
-
if (lines.length !== 1 ||
|
|
8739
|
-
return
|
|
8830
|
+
return refuse49("vtex_payments_body_unsupported");
|
|
8831
|
+
if (lines.length !== 1 || own23(lines[0], "id"))
|
|
8832
|
+
return refuse49("vtex_payments_split_payment");
|
|
8740
8833
|
const line = lines[0];
|
|
8741
8834
|
if (!inOrder10(line, VTEX_PAYMENTS_LINE_KEYS) || line.groupName !== "creditCardPaymentGroup")
|
|
8742
|
-
return
|
|
8743
|
-
if (!(typeof line.currencyCode === "string" &&
|
|
8744
|
-
return
|
|
8745
|
-
if (line.installments !== 1 || line.referenceValue !== line.value ||
|
|
8746
|
-
return
|
|
8835
|
+
return refuse49("vtex_payments_body_unsupported");
|
|
8836
|
+
if (!(typeof line.currencyCode === "string" && CURRENCY7.test(line.currencyCode)) || !own23(VTEX_PAYMENTS_NETWORKS, line.paymentSystem) || !Number.isSafeInteger(line.paymentSystem) || !(count(line.value) && line.value > 0))
|
|
8837
|
+
return refuse49("vtex_payments_body_unsupported");
|
|
8838
|
+
if (line.installments !== 1 || line.referenceValue !== line.value || own23(line, "installmentsInterestRate") && line.installmentsInterestRate !== 0 || own23(line, "installmentsValue") && line.installmentsValue !== line.value)
|
|
8839
|
+
return refuse49("vtex_payments_installments");
|
|
8747
8840
|
const transaction = line.transaction;
|
|
8748
|
-
if (!
|
|
8749
|
-
return
|
|
8841
|
+
if (!record41(transaction) || Object.keys(transaction).join() !== "id,merchantName" || !(typeof transaction.id === "string" && TRANSACTION_ID.test(transaction.id)) || !(typeof transaction.merchantName === "string" && MERCHANT_NAME.test(transaction.merchantName)))
|
|
8842
|
+
return refuse49("vtex_payments_body_unsupported");
|
|
8750
8843
|
if (target && transaction.id.toUpperCase() !== target.transactionId.toUpperCase())
|
|
8751
|
-
return
|
|
8752
|
-
return fieldsSound(line.fields) ?
|
|
8844
|
+
return refuse49("vtex_payments_split_payment");
|
|
8845
|
+
return fieldsSound(line.fields) ? CARD48 : refuse49("vtex_payments_body_unsupported");
|
|
8753
8846
|
}
|
|
8754
8847
|
function vtexPaymentsAmount(body) {
|
|
8755
8848
|
if (vtexPaymentsBodyVerdict(body).verdict !== "card")
|
|
@@ -8794,14 +8887,15 @@ var vtex_payments_default = /* @__PURE__ */ registerProcessor({
|
|
|
8794
8887
|
return vtexPaymentsBodyVerdict(body);
|
|
8795
8888
|
const target = vtexPaymentsCardTarget(url);
|
|
8796
8889
|
if (target === null)
|
|
8797
|
-
return
|
|
8798
|
-
return target.fallback ?
|
|
8890
|
+
return refuse49("vtex_payments_url_refused");
|
|
8891
|
+
return target.fallback ? refuse49("vtex_payments_fallback_refused") : vtexPaymentsBodyVerdict(body, target);
|
|
8799
8892
|
},
|
|
8800
|
-
amount: (template) =>
|
|
8893
|
+
amount: (template) => record41(template) && isVtexPaymentsCardUrl(template.url) ? vtexPaymentsAmount(template.body) : null
|
|
8801
8894
|
});
|
|
8802
8895
|
// src/processors/index.generated.js
|
|
8803
8896
|
var REGISTERED_MODULES = Object.freeze({
|
|
8804
8897
|
aurus: aurus_default,
|
|
8898
|
+
bigcommerce: bigcommerce_default,
|
|
8805
8899
|
bluesnap: bluesnap_default,
|
|
8806
8900
|
cardlink_vpos: cardlink_vpos_default,
|
|
8807
8901
|
eghl: eghl_default,
|
|
@@ -9096,12 +9190,12 @@ function splitCardLeg(recognizer, body) {
|
|
|
9096
9190
|
const absorb = list(split.absorb);
|
|
9097
9191
|
const pass = list(split.pass);
|
|
9098
9192
|
const sibling = list(split.siblingKeys);
|
|
9099
|
-
const
|
|
9100
|
-
if (
|
|
9193
|
+
const own24 = keys.filter((key) => !sibling.includes(key));
|
|
9194
|
+
if (own24.length === 0)
|
|
9101
9195
|
return null;
|
|
9102
|
-
if (
|
|
9196
|
+
if (own24.every((key) => absorb.includes(key)))
|
|
9103
9197
|
return "absorb";
|
|
9104
|
-
if (
|
|
9198
|
+
if (own24.every((key) => pass.includes(key)))
|
|
9105
9199
|
return "pass";
|
|
9106
9200
|
return null;
|
|
9107
9201
|
}
|