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