@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: b2ba367a9b8d1758f1deea226abb2ca6637b40a88aa0c5ee7f359e074f4c017e
|
|
4
4
|
// src/deep-freeze.js
|
|
5
5
|
function deepFreeze(value) {
|
|
6
6
|
if (value && typeof value === "object" && !Object.isFrozen(value)) {
|
|
@@ -157,6 +157,96 @@ var aurus_default = /* @__PURE__ */ registerProcessor({
|
|
|
157
157
|
bodyGate: (url, body) => url !== void 0 && !isAurusTokenUrl(url) ? refuse("aurus_url_refused") : aurusBodyVerdict(body),
|
|
158
158
|
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."]
|
|
159
159
|
});
|
|
160
|
+
// src/processors/bigcommerce.js
|
|
161
|
+
var BIGCOMMERCE_PSP = "bigcommerce";
|
|
162
|
+
var BIGCOMMERCE_OPERATION = "bigcommerce.card_request";
|
|
163
|
+
var BIGCOMMERCE_PAYMENTS_URL = "https://payments.bigcommerce.com/api/public/v1/orders/payments";
|
|
164
|
+
var BODY_LIMIT2 = 65536;
|
|
165
|
+
var CARD_KEYS = /* @__PURE__ */ new Set([
|
|
166
|
+
"account_name",
|
|
167
|
+
"month",
|
|
168
|
+
"number",
|
|
169
|
+
"verification_value",
|
|
170
|
+
"year",
|
|
171
|
+
"customer_code",
|
|
172
|
+
"three_d_secure",
|
|
173
|
+
"hosted_form_nonce"
|
|
174
|
+
]);
|
|
175
|
+
var OTHER_INSTRUMENTS = /* @__PURE__ */ Object.freeze(["bigpay_token", "credit_card_token", "credit_card_cryptogram"]);
|
|
176
|
+
var NUMBER = /^[0-9]{12,19}$/;
|
|
177
|
+
var CURRENCY = /^[A-Z]{3}$/;
|
|
178
|
+
var record = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
179
|
+
var own = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
180
|
+
var refuse2 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
181
|
+
var CARD2 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
182
|
+
var CONTINUE = /* @__PURE__ */ Object.freeze({ verdict: "continue" });
|
|
183
|
+
function isBigcommercePaymentsUrl(url) {
|
|
184
|
+
return url === BIGCOMMERCE_PAYMENTS_URL;
|
|
185
|
+
}
|
|
186
|
+
function readBody2(body) {
|
|
187
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT2)
|
|
188
|
+
return null;
|
|
189
|
+
try {
|
|
190
|
+
const parsed = JSON.parse(body);
|
|
191
|
+
return record(parsed) && record(parsed.payment) ? parsed : null;
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function bigcommerceBodyVerdict(body, url) {
|
|
198
|
+
if (url !== void 0 && !isBigcommercePaymentsUrl(url))
|
|
199
|
+
return refuse2("bigcommerce_url_refused");
|
|
200
|
+
const parsed = readBody2(body);
|
|
201
|
+
if (!parsed)
|
|
202
|
+
return refuse2("bigcommerce_body_unsupported");
|
|
203
|
+
const { payment } = parsed;
|
|
204
|
+
if (!own(payment, "credit_card"))
|
|
205
|
+
return CONTINUE;
|
|
206
|
+
const card = payment.credit_card;
|
|
207
|
+
if (!record(card) || OTHER_INSTRUMENTS.some((key) => own(payment, key)) || Object.keys(card).some((key) => !CARD_KEYS.has(key)) || typeof card.number !== "string" || !NUMBER.test(card.number)) {
|
|
208
|
+
return refuse2("bigcommerce_body_unsupported");
|
|
209
|
+
}
|
|
210
|
+
if (payment.vault_payment_instrument === true)
|
|
211
|
+
return refuse2("bigcommerce_keep_on_file");
|
|
212
|
+
return CARD2;
|
|
213
|
+
}
|
|
214
|
+
function bigcommerceAmount(template) {
|
|
215
|
+
const parsed = record(template) ? readBody2(template.body) : null;
|
|
216
|
+
const order = parsed && record(parsed.order) ? parsed.order : null;
|
|
217
|
+
const total = order && record(order.totals) ? order.totals.grand_total : void 0;
|
|
218
|
+
if (!Number.isSafeInteger(total) || total <= 0 || typeof order.currency !== "string" || !CURRENCY.test(order.currency))
|
|
219
|
+
return null;
|
|
220
|
+
return { amountCents: total, currency: order.currency.toLowerCase() };
|
|
221
|
+
}
|
|
222
|
+
var bigcommerce_default = /* @__PURE__ */ registerProcessor({
|
|
223
|
+
psp: BIGCOMMERCE_PSP,
|
|
224
|
+
definitions: [
|
|
225
|
+
{
|
|
226
|
+
psp: "bigcommerce",
|
|
227
|
+
// The card request above. One host serves every BigCommerce store, test and live alike, so no sandbox host is
|
|
228
|
+
// marked. Ships dark: served only to a client that declares `bigcommerce_card_form`, for a company the backend's
|
|
229
|
+
// processor gate turns BigCommerce on for. `(?![\w/.%-])` ends the path for a consumer that tests `match`
|
|
230
|
+
// unanchored; the exact-URL rule holds the rest.
|
|
231
|
+
capability: "bigcommerce_card_form",
|
|
232
|
+
match: "payments\\.bigcommerce\\.com/api/public/v1/orders/payments(?![\\w/.%-])",
|
|
233
|
+
hosts: ["^payments\\.bigcommerce\\.com$"],
|
|
234
|
+
encoding: "json",
|
|
235
|
+
// The order's payment token and the JSON Accept. Origin, Referer and cookies never ride.
|
|
236
|
+
passthroughHeaders: ["^authorization$", "^accept$"],
|
|
237
|
+
jsonCardFields: [["payment", "credit_card", "number"]],
|
|
238
|
+
// A payment with no new card on the same URL continues untouched (bigcommerceBodyVerdict says which).
|
|
239
|
+
passWithoutCard: "payments\\.bigcommerce\\.com/api/public/v1/orders/payments"
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
// The request charges the store's gateway at once, so only the cardholder's device sends it, after a person approves.
|
|
243
|
+
refusedOperations: [BIGCOMMERCE_OPERATION],
|
|
244
|
+
// Not surveyed: reading a BigCommerce payment back takes the store's own API credentials, which Agentcard never holds.
|
|
245
|
+
settlementReadback: "not_surveyed",
|
|
246
|
+
exactUrl: isBigcommercePaymentsUrl,
|
|
247
|
+
bodyGate: (url, body) => bigcommerceBodyVerdict(body, url),
|
|
248
|
+
amount: bigcommerceAmount
|
|
249
|
+
});
|
|
160
250
|
// src/processors/bluesnap.js
|
|
161
251
|
var BLUESNAP_PSP = "bluesnap";
|
|
162
252
|
var BLUESNAP_OPERATION = "bluesnap.card_request";
|
|
@@ -164,16 +254,16 @@ var BLUESNAP_HOSTS = /* @__PURE__ */ Object.freeze({ 1: "ws1.bluesnap.com", 2: "
|
|
|
164
254
|
var BLUESNAP_SANDBOX_HOST = "sandpay.bluesnap.com";
|
|
165
255
|
var BLUESNAP_CARD_KEYS = /* @__PURE__ */ Object.freeze(["cvv", "ccNumber", "expDate"]);
|
|
166
256
|
var BLUESNAP_LEG_KEYS = /* @__PURE__ */ Object.freeze(["cvv", "expDate"]);
|
|
167
|
-
var
|
|
257
|
+
var BODY_LIMIT3 = 1024;
|
|
168
258
|
var TOKEN_URL = /^https:\/\/(ws1|ws2|sandpay)\.bluesnap\.com\/services\/2\/payment-fields-tokens\/([0-9a-f]{64}_[12]?)$/;
|
|
169
259
|
var CARD_NUMBER = /^[0-9]{12,19}$/;
|
|
170
260
|
var SECURITY_CODE = /^[0-9]{3,4}$/;
|
|
171
261
|
var EXPIRY = /^(?:0[1-9]|1[0-2])\/20[0-9]{2}$/;
|
|
172
262
|
var SAVED_CARD_KEYS = ["last4Digits", "lastFourDigits", "ccType"];
|
|
173
|
-
var
|
|
174
|
-
var
|
|
175
|
-
var
|
|
176
|
-
var
|
|
263
|
+
var record2 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
264
|
+
var own2 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
265
|
+
var refuse3 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
266
|
+
var CARD3 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
177
267
|
var LEG = /* @__PURE__ */ Object.freeze({ verdict: "continue" });
|
|
178
268
|
function bluesnapTokenUrl(url) {
|
|
179
269
|
const match = typeof url === "string" ? TOKEN_URL.exec(url) : null;
|
|
@@ -185,30 +275,30 @@ function bluesnapTokenUrl(url) {
|
|
|
185
275
|
function isBluesnapTokenUrl(url) {
|
|
186
276
|
return bluesnapTokenUrl(url) !== null;
|
|
187
277
|
}
|
|
188
|
-
function
|
|
189
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
278
|
+
function readBody3(body) {
|
|
279
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT3)
|
|
190
280
|
return null;
|
|
191
281
|
try {
|
|
192
282
|
const value = JSON.parse(body);
|
|
193
|
-
return
|
|
283
|
+
return record2(value) && JSON.stringify(value) === body ? value : null;
|
|
194
284
|
}
|
|
195
285
|
catch {
|
|
196
286
|
return null;
|
|
197
287
|
}
|
|
198
288
|
}
|
|
199
289
|
function bluesnapBodyVerdict(body) {
|
|
200
|
-
const value =
|
|
290
|
+
const value = readBody3(body);
|
|
201
291
|
if (value === null)
|
|
202
|
-
return
|
|
292
|
+
return refuse3("bluesnap_body_unsupported");
|
|
203
293
|
const keys = Object.keys(value);
|
|
204
294
|
if (keys.some((key) => SAVED_CARD_KEYS.includes(key)))
|
|
205
|
-
return
|
|
295
|
+
return refuse3(own2(value, "ccNumber") ? "bluesnap_body_unsupported" : "bluesnap_saved_card");
|
|
206
296
|
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))) {
|
|
207
|
-
return
|
|
297
|
+
return refuse3("bluesnap_body_unsupported");
|
|
208
298
|
}
|
|
209
|
-
if (
|
|
210
|
-
return
|
|
211
|
-
return
|
|
299
|
+
if (own2(value, "ccNumber") && !(typeof value.ccNumber === "string" && CARD_NUMBER.test(value.ccNumber)) || own2(value, "cvv") && !(typeof value.cvv === "string" && SECURITY_CODE.test(value.cvv)) || own2(value, "expDate") && !(typeof value.expDate === "string" && EXPIRY.test(value.expDate)))
|
|
300
|
+
return refuse3("bluesnap_body_unsupported");
|
|
301
|
+
return own2(value, "ccNumber") ? CARD3 : LEG;
|
|
212
302
|
}
|
|
213
303
|
var bluesnap_default = /* @__PURE__ */ registerProcessor({
|
|
214
304
|
psp: BLUESNAP_PSP,
|
|
@@ -312,7 +402,7 @@ var REQUIRED = Object.freeze([
|
|
|
312
402
|
"ekashu_failure_url",
|
|
313
403
|
"ekashu_callback_success_url"
|
|
314
404
|
]);
|
|
315
|
-
var
|
|
405
|
+
var CARD_KEYS2 = Object.freeze([
|
|
316
406
|
"ekashu_card_number",
|
|
317
407
|
"ekashu_expires_end_month",
|
|
318
408
|
"ekashu_expires_end_year",
|
|
@@ -514,7 +604,7 @@ var CURRENCIES2 = Object.freeze({ EUR: "eur" });
|
|
|
514
604
|
var MAX_URL = 512;
|
|
515
605
|
var MAX_ENTRY3 = 8 * 1024;
|
|
516
606
|
var MAX_VALUE = 256;
|
|
517
|
-
var
|
|
607
|
+
var own3 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
518
608
|
var field = (name, reason) => ({ ok: false, code: "hosted_form_field_refused", field: name, reason });
|
|
519
609
|
function cardlinkVposEntryHost(raw) {
|
|
520
610
|
if (typeof raw !== "string" || raw.length > MAX_URL || raw.includes("?") || raw.includes("#"))
|
|
@@ -526,7 +616,7 @@ function cardlinkVposEntryHost(raw) {
|
|
|
526
616
|
catch {
|
|
527
617
|
return null;
|
|
528
618
|
}
|
|
529
|
-
if (url.href !== raw || url.protocol !== "https:" || url.port || url.username || url.password || !
|
|
619
|
+
if (url.href !== raw || url.protocol !== "https:" || url.port || url.username || url.password || !own3(CARDLINK_VPOS_HOSTS, url.hostname) || url.pathname !== CARDLINK_VPOS_ENTRY_PATH)
|
|
530
620
|
return null;
|
|
531
621
|
return url.hostname;
|
|
532
622
|
}
|
|
@@ -569,7 +659,7 @@ function cardlinkVposMerchant(mid, vposHost, merchants = CARDLINK_VPOS_MERCHANTS
|
|
|
569
659
|
function entryAmount(values) {
|
|
570
660
|
const amount = values.get("orderAmount");
|
|
571
661
|
const code = values.get("currency");
|
|
572
|
-
const currency = typeof code === "string" &&
|
|
662
|
+
const currency = typeof code === "string" && own3(CURRENCIES2, code) ? CURRENCIES2[code] : null;
|
|
573
663
|
if (!currency || typeof amount !== "string" || !/^(?:0|[1-9]\d{0,11})(?:\.\d{1,2})?$/.test(amount))
|
|
574
664
|
return null;
|
|
575
665
|
const [whole, fraction = ""] = amount.split(".");
|
|
@@ -624,7 +714,7 @@ function checkCardlinkVposEntry(body, { url = null, merchants = CARDLINK_VPOS_ME
|
|
|
624
714
|
return field("payMethod", /^iris$/i.test(method) ? "not_a_card_payment" : "special_flow");
|
|
625
715
|
const amount = entryAmount(values);
|
|
626
716
|
if (!amount)
|
|
627
|
-
return field(
|
|
717
|
+
return field(own3(CURRENCIES2, values.get("currency")) ? "orderAmount" : "currency", "malformed");
|
|
628
718
|
if (!/^\d{1,30}$/.test(values.get("mid")))
|
|
629
719
|
return field("mid", "malformed");
|
|
630
720
|
if (!/^[A-Za-z0-9]{1,50}$/.test(values.get("orderid")))
|
|
@@ -661,16 +751,16 @@ var CARDLINK_VPOS_TDS2_FIELDS = Object.freeze([
|
|
|
661
751
|
]);
|
|
662
752
|
var PAGE_FIELDS = Object.freeze(["trid", "st", "payStep", "cmd", "startbonus", "bonusdata"]);
|
|
663
753
|
var WALLET_FIELDS = Object.freeze(["walletId", "applePayResponse"]);
|
|
664
|
-
var
|
|
665
|
-
var TEXT_CONTROLS = /* @__PURE__ */ new Set([
|
|
666
|
-
var SELECT_CONTROLS = /* @__PURE__ */ new Set([
|
|
754
|
+
var CARD4 = Object.freeze({ number: "card.pan", holder: "card.holderName", month: "card.expiryMonth", year: "card.expiryYear", cvc: "card.cvv" });
|
|
755
|
+
var TEXT_CONTROLS = /* @__PURE__ */ new Set([CARD4.number, CARD4.holder, CARD4.cvc]);
|
|
756
|
+
var SELECT_CONTROLS = /* @__PURE__ */ new Set([CARD4.month, CARD4.year]);
|
|
667
757
|
var MAX_PAGE3 = 256 * 1024;
|
|
668
758
|
var COOKIE_DOMAINS = Object.freeze({
|
|
669
759
|
"vpos.eurocommerce.gr": "eurocommerce.gr",
|
|
670
760
|
"ecommerce.cardlink.gr": "cardlink.gr",
|
|
671
761
|
"www.alphaecommerce.gr": "alphaecommerce.gr"
|
|
672
762
|
});
|
|
673
|
-
var POST_REQUIRED = Object.freeze(["trid", "st", "cmd",
|
|
763
|
+
var POST_REQUIRED = Object.freeze(["trid", "st", "cmd", CARD4.number, CARD4.holder, CARD4.month, CARD4.year, CARD4.cvc, "makepayment"]);
|
|
674
764
|
var POST_EMPTY = Object.freeze(["payStep", "startbonus", "bonusdata", ...WALLET_FIELDS]);
|
|
675
765
|
var POST_ALLOWED = /* @__PURE__ */ new Set([...POST_REQUIRED, ...POST_EMPTY, "paymentMethod", ...CARDLINK_VPOS_TDS2_FIELDS]);
|
|
676
766
|
var CARDLINK_VPOS_REFUSALS = Object.freeze([
|
|
@@ -800,7 +890,7 @@ var REQUIRED4 = Object.freeze([
|
|
|
800
890
|
"CurrencyCode",
|
|
801
891
|
"HashValue"
|
|
802
892
|
]);
|
|
803
|
-
var
|
|
893
|
+
var CARD_KEYS3 = /* @__PURE__ */ new Set(["cardno", "cardexp", "cardcvv2", "cardholder", "param2", "param4", "cvv2", "epmonth2", "epyear2", "custocp"]);
|
|
804
894
|
var SECRET_KEYS = /* @__PURE__ */ new Set(["password"]);
|
|
805
895
|
var STORED_KEYS2 = /* @__PURE__ */ new Set([
|
|
806
896
|
"tokentype",
|
|
@@ -857,7 +947,7 @@ function checkEghlEntry(body, { url = null, merchants = EGHL_MERCHANTS } = {}) {
|
|
|
857
947
|
if (value === "")
|
|
858
948
|
continue;
|
|
859
949
|
const folded = key.toLowerCase();
|
|
860
|
-
if (
|
|
950
|
+
if (CARD_KEYS3.has(folded))
|
|
861
951
|
return field2(key, "card_in_entry");
|
|
862
952
|
if (SECRET_KEYS.has(folded))
|
|
863
953
|
return field2(key, "not_an_entry");
|
|
@@ -989,7 +1079,7 @@ var FRISBII_REFUSED_PATHS = /* @__PURE__ */ Object.freeze({
|
|
|
989
1079
|
"/v1/token/cof/": "frisbii_stored_card_unsupported",
|
|
990
1080
|
"/v1/token/create_click_to_pay": "frisbii_click_to_pay_unsupported"
|
|
991
1081
|
});
|
|
992
|
-
var
|
|
1082
|
+
var BODY_LIMIT4 = 8192;
|
|
993
1083
|
var URL_LIMIT2 = 256;
|
|
994
1084
|
var CARD_NUMBER2 = /^[0-9]{12,19}$/;
|
|
995
1085
|
var MONTH = /^(?:0[1-9]|1[0-2])$/;
|
|
@@ -1033,13 +1123,13 @@ var BROWSER_ORDER = /* @__PURE__ */ Object.freeze([
|
|
|
1033
1123
|
"tz"
|
|
1034
1124
|
]);
|
|
1035
1125
|
var LABEL = /^[A-Za-z0-9_-]{1,64}$/;
|
|
1036
|
-
var
|
|
1037
|
-
var
|
|
1038
|
-
var
|
|
1039
|
-
var
|
|
1126
|
+
var record3 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1127
|
+
var own4 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
1128
|
+
var refuse4 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1129
|
+
var CARD5 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
1040
1130
|
var text = (value, max) => typeof value === "string" && value.length <= max;
|
|
1041
1131
|
var absentOrNull = (value) => value === void 0 || value === null;
|
|
1042
|
-
var inOrder = (value, order) => Object.keys(value).every((key) => order.includes(key)) && Object.keys(value).join() === order.filter((key) =>
|
|
1132
|
+
var inOrder = (value, order) => Object.keys(value).every((key) => order.includes(key)) && Object.keys(value).join() === order.filter((key) => own4(value, key)).join();
|
|
1043
1133
|
function frisbiiTokenUrl(url) {
|
|
1044
1134
|
if (typeof url !== "string" || url.length > URL_LIMIT2 || url.includes("#"))
|
|
1045
1135
|
return null;
|
|
@@ -1050,7 +1140,7 @@ function frisbiiTokenUrl(url) {
|
|
|
1050
1140
|
catch {
|
|
1051
1141
|
return null;
|
|
1052
1142
|
}
|
|
1053
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
1143
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own4(FRISBII_HOSTS, parsed.hostname) || parsed.pathname !== FRISBII_TOKEN_PATH)
|
|
1054
1144
|
return null;
|
|
1055
1145
|
const match = /^\?session=([A-Za-z0-9_-]{8,128})$/.exec(parsed.search);
|
|
1056
1146
|
return match ? Object.freeze({ host: parsed.hostname, brand: FRISBII_HOSTS[parsed.hostname], session: match[1] }) : null;
|
|
@@ -1066,7 +1156,7 @@ function frisbiiRefusedFlowUrl(url) {
|
|
|
1066
1156
|
catch {
|
|
1067
1157
|
return null;
|
|
1068
1158
|
}
|
|
1069
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
1159
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own4(FRISBII_HOSTS, parsed.hostname) || !own4(FRISBII_REFUSED_PATHS, parsed.pathname))
|
|
1070
1160
|
return null;
|
|
1071
1161
|
return FRISBII_REFUSED_PATHS[parsed.pathname];
|
|
1072
1162
|
}
|
|
@@ -1080,28 +1170,28 @@ function luhn(digits2) {
|
|
|
1080
1170
|
}
|
|
1081
1171
|
return sum % 10 === 0;
|
|
1082
1172
|
}
|
|
1083
|
-
function
|
|
1084
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
1173
|
+
function readBody4(body) {
|
|
1174
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT4)
|
|
1085
1175
|
return null;
|
|
1086
1176
|
try {
|
|
1087
1177
|
const value = JSON.parse(body);
|
|
1088
|
-
return
|
|
1178
|
+
return record3(value) && JSON.stringify(value) === body ? value : null;
|
|
1089
1179
|
}
|
|
1090
1180
|
catch {
|
|
1091
1181
|
return null;
|
|
1092
1182
|
}
|
|
1093
1183
|
}
|
|
1094
1184
|
function browserInfo(info) {
|
|
1095
|
-
return
|
|
1185
|
+
return record3(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;
|
|
1096
1186
|
}
|
|
1097
1187
|
function scaBlock(block, target) {
|
|
1098
|
-
if (!
|
|
1188
|
+
if (!record3(block) || !inOrder(block, SCA_ORDER) || !own4(block, "returnUrl") || !own4(block, "tokenBrowserInfo"))
|
|
1099
1189
|
return false;
|
|
1100
1190
|
if (!Number.isSafeInteger(block.amount) || block.amount < 0 || typeof block.currency !== "string" || !/^[A-Z]{3}$/.test(block.currency))
|
|
1101
1191
|
return false;
|
|
1102
1192
|
if (!(absentOrNull(block.orderId) || text(block.orderId, 128)) || !(absentOrNull(block.orderText) || text(block.orderText, 512)))
|
|
1103
1193
|
return false;
|
|
1104
|
-
if (!(absentOrNull(block.merchantScaData) ||
|
|
1194
|
+
if (!(absentOrNull(block.merchantScaData) || record3(block.merchantScaData)))
|
|
1105
1195
|
return false;
|
|
1106
1196
|
if (!text(block.returnUrl, 2048) || !browserInfo(block.tokenBrowserInfo))
|
|
1107
1197
|
return false;
|
|
@@ -1109,16 +1199,16 @@ function scaBlock(block, target) {
|
|
|
1109
1199
|
return back !== null && (target === null || back[1] === target.brand && back[2] === target.session);
|
|
1110
1200
|
}
|
|
1111
1201
|
function frisbiiBodyVerdict(body, url) {
|
|
1112
|
-
const value =
|
|
1113
|
-
if (value === null || !inOrder(value, BODY_ORDER) || !BODY_REQUIRED.every((key) =>
|
|
1114
|
-
return
|
|
1202
|
+
const value = readBody4(body);
|
|
1203
|
+
if (value === null || !inOrder(value, BODY_ORDER) || !BODY_REQUIRED.every((key) => own4(value, key)) || BODY_REFUSED.some((key) => own4(value, key)))
|
|
1204
|
+
return refuse4("frisbii_body_unsupported");
|
|
1115
1205
|
if (value.recurring === true || value.intent === "CHARGE_AND_STORE")
|
|
1116
|
-
return
|
|
1206
|
+
return refuse4("frisbii_card_on_file");
|
|
1117
1207
|
const target = url === void 0 ? null : frisbiiTokenUrl(url);
|
|
1118
1208
|
if (url !== void 0 && target === null)
|
|
1119
|
-
return
|
|
1209
|
+
return refuse4("frisbii_body_unsupported");
|
|
1120
1210
|
const sound = typeof value.number === "string" && CARD_NUMBER2.test(value.number) && luhn(value.number) && typeof value.month === "string" && MONTH.test(value.month) && typeof value.year === "string" && YEAR.test(value.year) && typeof value.cvv === "string" && SECURITY_CODE2.test(value.cvv) && typeof value.pkey === "string" && IDENTIFIER.test(value.pkey) && value.recurring === false && (value.cardholder_name === void 0 || text(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));
|
|
1121
|
-
return sound ?
|
|
1211
|
+
return sound ? CARD5 : refuse4("frisbii_body_unsupported");
|
|
1122
1212
|
}
|
|
1123
1213
|
var frisbii_default = /* @__PURE__ */ registerProcessor({
|
|
1124
1214
|
psp: FRISBII_PSP,
|
|
@@ -1153,8 +1243,8 @@ var frisbii_default = /* @__PURE__ */ registerProcessor({
|
|
|
1153
1243
|
return frisbiiBodyVerdict(body);
|
|
1154
1244
|
const flow = frisbiiRefusedFlowUrl(url);
|
|
1155
1245
|
if (flow !== null)
|
|
1156
|
-
return
|
|
1157
|
-
return isFrisbiiTokenUrl(url) ? frisbiiBodyVerdict(body, url) :
|
|
1246
|
+
return refuse4(flow);
|
|
1247
|
+
return isFrisbiiTokenUrl(url) ? frisbiiBodyVerdict(body, url) : refuse4("frisbii_url_refused");
|
|
1158
1248
|
},
|
|
1159
1249
|
limitations: ["A live Frisbii card goes only to a merchant account a reviewed pin lists, and none is pinned yet."]
|
|
1160
1250
|
});
|
|
@@ -1183,7 +1273,7 @@ var IYZICO_CARD_KEYS = /* @__PURE__ */ Object.freeze([
|
|
|
1183
1273
|
"registerConsumerCard",
|
|
1184
1274
|
"registerCard"
|
|
1185
1275
|
]);
|
|
1186
|
-
var
|
|
1276
|
+
var BODY_LIMIT5 = 4096;
|
|
1187
1277
|
var CARD_NUMBER3 = /^[0-9]{12,19}$/;
|
|
1188
1278
|
var SECURITY_CODE3 = /^[0-9]{3,4}$/;
|
|
1189
1279
|
var MONTH2 = /^(?:0?[1-9]|1[0-2])$/;
|
|
@@ -1193,8 +1283,8 @@ var CHANNELS = /* @__PURE__ */ Object.freeze(["WEB", "MOBILE_WEB", "MOBILE_IOS",
|
|
|
1193
1283
|
var METADATA_KEYS = /* @__PURE__ */ Object.freeze(["lightRedesign", "pwiGrowthActionDisabled"]);
|
|
1194
1284
|
var FLAG = /^[A-Za-z_]{1,16}$/;
|
|
1195
1285
|
var HOLDER = /^[^\x00-\x1f\x7f0-9]{3,100}$/u;
|
|
1196
|
-
var
|
|
1197
|
-
var
|
|
1286
|
+
var record4 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1287
|
+
var own5 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
1198
1288
|
var inOrder2 = (value, keys) => {
|
|
1199
1289
|
let at = 0;
|
|
1200
1290
|
for (const name of Object.keys(value)) {
|
|
@@ -1206,17 +1296,17 @@ var inOrder2 = (value, keys) => {
|
|
|
1206
1296
|
}
|
|
1207
1297
|
return true;
|
|
1208
1298
|
};
|
|
1209
|
-
var
|
|
1210
|
-
var
|
|
1299
|
+
var refuse5 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1300
|
+
var CARD6 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
1211
1301
|
function isIyzicoCardUrl(url) {
|
|
1212
1302
|
return typeof url === "string" && IYZICO_CARD_URLS.includes(url);
|
|
1213
1303
|
}
|
|
1214
|
-
function
|
|
1215
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
1304
|
+
function readBody5(body) {
|
|
1305
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT5)
|
|
1216
1306
|
return null;
|
|
1217
1307
|
try {
|
|
1218
1308
|
const value = JSON.parse(body);
|
|
1219
|
-
return
|
|
1309
|
+
return record4(value) && JSON.stringify(value) === body ? value : null;
|
|
1220
1310
|
}
|
|
1221
1311
|
catch {
|
|
1222
1312
|
return null;
|
|
@@ -1228,26 +1318,26 @@ function hundredths(price) {
|
|
|
1228
1318
|
return value > 0 ? value : null;
|
|
1229
1319
|
}
|
|
1230
1320
|
var holderName = (name) => typeof name === "string" && HOLDER.test(name) && name.trim().split(/\s+/).filter((word) => word.length > 1).length > 1;
|
|
1231
|
-
var metadata = (value) =>
|
|
1321
|
+
var metadata = (value) => record4(value) && inOrder2(value, METADATA_KEYS) && Object.values(value).every((flag) => Array.isArray(flag) && flag.length === 1 && typeof flag[0] === "string" && FLAG.test(flag[0]));
|
|
1232
1322
|
function iyzicoBodyVerdict(body) {
|
|
1233
|
-
const value =
|
|
1323
|
+
const value = readBody5(body);
|
|
1234
1324
|
if (value === null)
|
|
1235
|
-
return
|
|
1325
|
+
return refuse5("iyzico_body_unsupported");
|
|
1236
1326
|
const card = value.paymentCard;
|
|
1237
|
-
if (
|
|
1238
|
-
return
|
|
1239
|
-
if (
|
|
1240
|
-
return
|
|
1241
|
-
if (
|
|
1242
|
-
return
|
|
1327
|
+
if (record4(card) && (own5(card, "cardToken") || own5(card, "ucsToken") || own5(card, "consumerToken")) && !own5(card, "cardNumber"))
|
|
1328
|
+
return refuse5("iyzico_saved_card");
|
|
1329
|
+
if (own5(value, "dccPayment") || own5(value, "dccQueryRrn"))
|
|
1330
|
+
return refuse5("iyzico_dcc_refused");
|
|
1331
|
+
if (own5(value, "gsmNumber") || own5(value, "buyerProtected") && value.buyerProtected !== false || record4(card) && (own5(card, "registerCard") && card.registerCard !== 0 || own5(card, "registerConsumerCard") && card.registerConsumerCard !== false)) {
|
|
1332
|
+
return refuse5("iyzico_keeps_card");
|
|
1243
1333
|
}
|
|
1244
1334
|
if (Number.isSafeInteger(value.installment) && value.installment > 1)
|
|
1245
|
-
return
|
|
1246
|
-
if (!inOrder2(value, IYZICO_BODY_KEYS) || !["installment", "paidPrice", "paymentChannel", "paymentCard"].every((key) =>
|
|
1247
|
-
return
|
|
1248
|
-
if (!
|
|
1249
|
-
return
|
|
1250
|
-
return
|
|
1335
|
+
return refuse5("iyzico_installments_refused");
|
|
1336
|
+
if (!inOrder2(value, IYZICO_BODY_KEYS) || !["installment", "paidPrice", "paymentChannel", "paymentCard"].every((key) => own5(value, key)) || value.installment !== 1 || hundredths(value.paidPrice) === null || !CHANNELS.includes(value.paymentChannel) || own5(value, "pwiMetadata") && !metadata(value.pwiMetadata))
|
|
1337
|
+
return refuse5("iyzico_body_unsupported");
|
|
1338
|
+
if (!record4(card) || Object.keys(card).join() !== IYZICO_CARD_KEYS.join() || typeof card.cardNumber !== "string" || !CARD_NUMBER3.test(card.cardNumber) || !holderName(card.cardHolderName) || typeof card.expireYear !== "string" || !YEAR2.test(card.expireYear) || typeof card.expireMonth !== "string" || !MONTH2.test(card.expireMonth) || typeof card.cvc !== "string" || !SECURITY_CODE3.test(card.cvc))
|
|
1339
|
+
return refuse5("iyzico_body_unsupported");
|
|
1340
|
+
return CARD6;
|
|
1251
1341
|
}
|
|
1252
1342
|
var iyzico_default = /* @__PURE__ */ registerProcessor({
|
|
1253
1343
|
psp: IYZICO_PSP,
|
|
@@ -1280,7 +1370,7 @@ var iyzico_default = /* @__PURE__ */ registerProcessor({
|
|
|
1280
1370
|
source: "https://docs.iyzico.com/en/payment-methods/checkoutform/cf-implementation/cf-retrieve"
|
|
1281
1371
|
},
|
|
1282
1372
|
exactUrl: isIyzicoCardUrl,
|
|
1283
|
-
bodyGate: (url, body) => url !== void 0 && !isIyzicoCardUrl(url) ?
|
|
1373
|
+
bodyGate: (url, body) => url !== void 0 && !isIyzicoCardUrl(url) ? refuse5("iyzico_url_refused") : iyzicoBodyVerdict(body)
|
|
1284
1374
|
});
|
|
1285
1375
|
// src/processors/midtrans.js
|
|
1286
1376
|
var MIDTRANS_PSP = "midtrans";
|
|
@@ -1288,14 +1378,14 @@ var MIDTRANS_OPERATION = "midtrans.card_request";
|
|
|
1288
1378
|
var MIDTRANS_TOKEN_URL = "https://api.midtrans.com/v2/token";
|
|
1289
1379
|
var MIDTRANS_SANDBOX_TOKEN_URL = "https://api.sandbox.midtrans.com/v2/token";
|
|
1290
1380
|
var MIDTRANS_TOKEN_KEYS = /* @__PURE__ */ Object.freeze(["card_cvv", "card_number", "card_exp_month", "card_exp_year", "installment_term"]);
|
|
1291
|
-
var
|
|
1381
|
+
var BODY_LIMIT6 = 4096;
|
|
1292
1382
|
var CARD_NUMBER4 = /^[0-9]{12,19}$/;
|
|
1293
1383
|
var SECURITY_CODE4 = /^[0-9]{3,4}$/;
|
|
1294
1384
|
var MONTH3 = /^(?:0[1-9]|1[0-2])$/;
|
|
1295
1385
|
var YEAR3 = /^20[0-9]{2}$/;
|
|
1296
1386
|
var TERM = /^[0-9]{1,3}$/;
|
|
1297
|
-
var
|
|
1298
|
-
var
|
|
1387
|
+
var record5 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1388
|
+
var own6 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
1299
1389
|
var inOrder3 = (value, keys) => {
|
|
1300
1390
|
let at = 0;
|
|
1301
1391
|
for (const name of Object.keys(value)) {
|
|
@@ -1307,18 +1397,18 @@ var inOrder3 = (value, keys) => {
|
|
|
1307
1397
|
}
|
|
1308
1398
|
return true;
|
|
1309
1399
|
};
|
|
1310
|
-
var
|
|
1311
|
-
var
|
|
1400
|
+
var refuse6 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1401
|
+
var CARD7 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
1312
1402
|
function isMidtransTokenUrl(url) {
|
|
1313
1403
|
return url === MIDTRANS_TOKEN_URL || url === MIDTRANS_SANDBOX_TOKEN_URL;
|
|
1314
1404
|
}
|
|
1315
|
-
function
|
|
1316
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
1405
|
+
function readBody6(body) {
|
|
1406
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT6)
|
|
1317
1407
|
return null;
|
|
1318
1408
|
let value;
|
|
1319
1409
|
try {
|
|
1320
1410
|
value = JSON.parse(body);
|
|
1321
|
-
if (!
|
|
1411
|
+
if (!record5(value) || JSON.stringify(value) !== body)
|
|
1322
1412
|
return null;
|
|
1323
1413
|
}
|
|
1324
1414
|
catch {
|
|
@@ -1327,20 +1417,20 @@ function readBody5(body) {
|
|
|
1327
1417
|
return value;
|
|
1328
1418
|
}
|
|
1329
1419
|
function midtransBodyVerdict(body) {
|
|
1330
|
-
const value =
|
|
1420
|
+
const value = readBody6(body);
|
|
1331
1421
|
if (value === null || !inOrder3(value, MIDTRANS_TOKEN_KEYS)) {
|
|
1332
|
-
if (
|
|
1333
|
-
return
|
|
1334
|
-
return
|
|
1422
|
+
if (record5(value) && (own6(value, "token_id") || own6(value, "two_click")) && !own6(value, "card_number"))
|
|
1423
|
+
return refuse6("midtrans_saved_card");
|
|
1424
|
+
return refuse6("midtrans_body_unsupported");
|
|
1335
1425
|
}
|
|
1336
|
-
if (!
|
|
1337
|
-
return
|
|
1426
|
+
if (!own6(value, "card_cvv") || !own6(value, "card_number") || !own6(value, "card_exp_month") || !own6(value, "card_exp_year")) {
|
|
1427
|
+
return refuse6("midtrans_body_unsupported");
|
|
1338
1428
|
}
|
|
1339
1429
|
if (typeof value.card_cvv !== "string" || !SECURITY_CODE4.test(value.card_cvv) || typeof value.card_number !== "string" || !CARD_NUMBER4.test(value.card_number) || typeof value.card_exp_month !== "string" || !MONTH3.test(value.card_exp_month) || typeof value.card_exp_year !== "string" || !YEAR3.test(value.card_exp_year))
|
|
1340
|
-
return
|
|
1341
|
-
if (
|
|
1342
|
-
return
|
|
1343
|
-
return
|
|
1430
|
+
return refuse6("midtrans_body_unsupported");
|
|
1431
|
+
if (own6(value, "installment_term") && (typeof value.installment_term !== "string" || !TERM.test(value.installment_term)))
|
|
1432
|
+
return refuse6("midtrans_body_unsupported");
|
|
1433
|
+
return CARD7;
|
|
1344
1434
|
}
|
|
1345
1435
|
var midtrans_default = /* @__PURE__ */ registerProcessor({
|
|
1346
1436
|
psp: MIDTRANS_PSP,
|
|
@@ -1375,20 +1465,20 @@ var midtrans_default = /* @__PURE__ */ registerProcessor({
|
|
|
1375
1465
|
var MONEI_PSP = "monei";
|
|
1376
1466
|
var MONEI_OPERATION = "monei.card_request";
|
|
1377
1467
|
var MONEI_TOKENS_URL = "https://api.monei.com/v1/tokens";
|
|
1378
|
-
var
|
|
1468
|
+
var BODY_LIMIT7 = 1024;
|
|
1379
1469
|
var PAYMENT_ID = /^(?:[0-9a-f]{32}|[0-9a-f]{40})$/;
|
|
1380
1470
|
var MONEI_CARD_KEYS = /* @__PURE__ */ Object.freeze(["number", "expMonth", "expYear", "cvc"]);
|
|
1381
|
-
var
|
|
1471
|
+
var NUMBER2 = /^[0-9]{12,19}$/;
|
|
1382
1472
|
var MONTH4 = /^(?:0[1-9]|1[0-2])$/;
|
|
1383
1473
|
var YEAR4 = /^[0-9]{2}$/;
|
|
1384
1474
|
var CODE = /^[0-9]{3,4}$/;
|
|
1385
|
-
var
|
|
1475
|
+
var record6 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1386
1476
|
var keysAre = (value, keys) => {
|
|
1387
1477
|
const found = Object.keys(value);
|
|
1388
1478
|
return found.length === keys.length && found.every((key, at) => key === keys[at]);
|
|
1389
1479
|
};
|
|
1390
|
-
var
|
|
1391
|
-
var
|
|
1480
|
+
var refuse7 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1481
|
+
var CARD8 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
1392
1482
|
function luhn2(digits2) {
|
|
1393
1483
|
let sum = 0;
|
|
1394
1484
|
for (let at = 0; at < digits2.length; at += 1) {
|
|
@@ -1405,12 +1495,12 @@ function luhn2(digits2) {
|
|
|
1405
1495
|
function isMoneiTokensUrl(url) {
|
|
1406
1496
|
return url === MONEI_TOKENS_URL;
|
|
1407
1497
|
}
|
|
1408
|
-
function
|
|
1409
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
1498
|
+
function readBody7(body) {
|
|
1499
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT7)
|
|
1410
1500
|
return null;
|
|
1411
1501
|
try {
|
|
1412
1502
|
const value = JSON.parse(body);
|
|
1413
|
-
return
|
|
1503
|
+
return record6(value) && JSON.stringify(value) === body ? value : null;
|
|
1414
1504
|
}
|
|
1415
1505
|
catch {
|
|
1416
1506
|
return null;
|
|
@@ -1418,19 +1508,19 @@ function readBody6(body) {
|
|
|
1418
1508
|
}
|
|
1419
1509
|
function moneiBodyVerdict(body, url) {
|
|
1420
1510
|
if (url !== void 0 && !isMoneiTokensUrl(url))
|
|
1421
|
-
return
|
|
1422
|
-
const value =
|
|
1511
|
+
return refuse7("monei_url_refused");
|
|
1512
|
+
const value = readBody7(body);
|
|
1423
1513
|
if (value === null || !keysAre(value, ["paymentId", "paymentMethod"]) || typeof value.paymentId !== "string" || !PAYMENT_ID.test(value.paymentId))
|
|
1424
|
-
return
|
|
1514
|
+
return refuse7("monei_body_unsupported");
|
|
1425
1515
|
const method = value.paymentMethod;
|
|
1426
|
-
if (!
|
|
1427
|
-
return
|
|
1516
|
+
if (!record6(method) || !keysAre(method, ["card"]) || !record6(method.card) || !keysAre(method.card, MONEI_CARD_KEYS))
|
|
1517
|
+
return refuse7("monei_body_unsupported");
|
|
1428
1518
|
const { number, expMonth, expYear, cvc } = method.card;
|
|
1429
1519
|
if (![number, expMonth, expYear, cvc].every((part) => typeof part === "string"))
|
|
1430
|
-
return
|
|
1431
|
-
if (!
|
|
1432
|
-
return
|
|
1433
|
-
return
|
|
1520
|
+
return refuse7("monei_body_unsupported");
|
|
1521
|
+
if (!NUMBER2.test(number) || !luhn2(number) || !MONTH4.test(expMonth) || !YEAR4.test(expYear) || !CODE.test(cvc))
|
|
1522
|
+
return refuse7("monei_body_unsupported");
|
|
1523
|
+
return CARD8;
|
|
1434
1524
|
}
|
|
1435
1525
|
var MONEI_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
1436
1526
|
Object.freeze({ merchant: "Genuins", accountIds: Object.freeze(["8d58ab4c-4ad0-4053-b18f-79d80e9ee158"]), merchantUrls: Object.freeze(["https://genuins.com/"]) })
|
|
@@ -1494,9 +1584,9 @@ var OCEANPAYMENT_FORM_FIELDS = /* @__PURE__ */ Object.freeze([
|
|
|
1494
1584
|
"reference"
|
|
1495
1585
|
]);
|
|
1496
1586
|
var URL_LIMIT3 = 2048;
|
|
1497
|
-
var
|
|
1587
|
+
var BODY_LIMIT8 = 8192;
|
|
1498
1588
|
var SEND_PAY = /^\/gateway\/sendPay;jsessionid=[A-Za-z0-9._!-]{16,128}$/;
|
|
1499
|
-
var
|
|
1589
|
+
var own7 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
1500
1590
|
var exact = (pattern, value) => typeof value === "string" && pattern.test(value);
|
|
1501
1591
|
var CARD_RUN = /[0-9]{12}/;
|
|
1502
1592
|
var printable = (max) => (value) => typeof value === "string" && value.length <= max && /^[\x20-\x7e]*$/.test(value) && !CARD_RUN.test(value);
|
|
@@ -1543,7 +1633,7 @@ function oceanpaymentSendPayUrl(url) {
|
|
|
1543
1633
|
catch {
|
|
1544
1634
|
return null;
|
|
1545
1635
|
}
|
|
1546
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
1636
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own7(OCEANPAYMENT_HOSTS, parsed.hostname) || !SEND_PAY.test(parsed.pathname))
|
|
1547
1637
|
return null;
|
|
1548
1638
|
return Object.freeze({ host: parsed.hostname, environment: OCEANPAYMENT_HOSTS[parsed.hostname] });
|
|
1549
1639
|
}
|
|
@@ -1571,7 +1661,7 @@ function formDecode(raw) {
|
|
|
1571
1661
|
return formEncode(value) === raw ? value : null;
|
|
1572
1662
|
}
|
|
1573
1663
|
function readPairs(body) {
|
|
1574
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
1664
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT8)
|
|
1575
1665
|
return null;
|
|
1576
1666
|
const pairs = [];
|
|
1577
1667
|
for (const chunk of body.split("&")) {
|
|
@@ -1656,7 +1746,7 @@ var PAYMENTWALL_PSP = "paymentwall";
|
|
|
1656
1746
|
var PAYMENTWALL_OPERATION = "paymentwall.card_request";
|
|
1657
1747
|
var PAYMENTWALL_TOKEN_URL = "https://pwgateway.com/api/token";
|
|
1658
1748
|
var PAYMENTWALL_SANDBOX_TOKEN_URL = "https://api.paymentwall.com/api/brick/token";
|
|
1659
|
-
var
|
|
1749
|
+
var BODY_LIMIT9 = 2048;
|
|
1660
1750
|
var KEY = "public_key";
|
|
1661
1751
|
var PUBLIC_KEY = /^(?:t_)?[A-Za-z0-9]{16,64}$/;
|
|
1662
1752
|
var SHAPES2 = /* @__PURE__ */ Object.freeze({
|
|
@@ -1666,8 +1756,8 @@ var SHAPES2 = /* @__PURE__ */ Object.freeze({
|
|
|
1666
1756
|
"card[exp_year]": /^(?:[0-9]{2}|20[0-9]{2})$/,
|
|
1667
1757
|
"card[cvv]": /^[0-9]{3,4}$/
|
|
1668
1758
|
});
|
|
1669
|
-
var
|
|
1670
|
-
var
|
|
1759
|
+
var refuse8 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1760
|
+
var CARD9 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
1671
1761
|
function luhn3(digits2) {
|
|
1672
1762
|
let sum = 0;
|
|
1673
1763
|
for (let at = 0; at < digits2.length; at += 1) {
|
|
@@ -1695,7 +1785,7 @@ function paymentwallKeyEnvironment(publicKey) {
|
|
|
1695
1785
|
return publicKey.startsWith("t_") ? "sandbox" : "production";
|
|
1696
1786
|
}
|
|
1697
1787
|
function readPairs2(body) {
|
|
1698
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
1788
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT9 || !/^[A-Za-z0-9_[\]=&]+$/.test(body))
|
|
1699
1789
|
return null;
|
|
1700
1790
|
const pairs = /* @__PURE__ */ new Map();
|
|
1701
1791
|
for (const chunk of body.split("&")) {
|
|
@@ -1711,21 +1801,21 @@ function readPairs2(body) {
|
|
|
1711
1801
|
}
|
|
1712
1802
|
function paymentwallBodyVerdict(body, url) {
|
|
1713
1803
|
if (url !== void 0 && !isPaymentwallTokenUrl(url))
|
|
1714
|
-
return
|
|
1804
|
+
return refuse8("paymentwall_url_refused");
|
|
1715
1805
|
const pairs = readPairs2(body);
|
|
1716
1806
|
if (pairs === null)
|
|
1717
|
-
return
|
|
1807
|
+
return refuse8("paymentwall_body_unsupported");
|
|
1718
1808
|
if (pairs.has("card[token]") && !pairs.has("card[number]"))
|
|
1719
|
-
return
|
|
1809
|
+
return refuse8("paymentwall_saved_card");
|
|
1720
1810
|
const keys = Object.keys(SHAPES2);
|
|
1721
1811
|
if (pairs.size !== keys.length || !keys.every((key) => pairs.has(key) && SHAPES2[key].test(pairs.get(key)))) {
|
|
1722
|
-
return
|
|
1812
|
+
return refuse8("paymentwall_body_unsupported");
|
|
1723
1813
|
}
|
|
1724
1814
|
if (!luhn3(pairs.get("card[number]")))
|
|
1725
|
-
return
|
|
1815
|
+
return refuse8("paymentwall_body_unsupported");
|
|
1726
1816
|
if (url !== void 0 && paymentwallKeyEnvironment(pairs.get(KEY)) !== paymentwallUrlEnvironment(url))
|
|
1727
|
-
return
|
|
1728
|
-
return
|
|
1817
|
+
return refuse8("paymentwall_key_refused");
|
|
1818
|
+
return CARD9;
|
|
1729
1819
|
}
|
|
1730
1820
|
var paymentwall_default = /* @__PURE__ */ registerProcessor({
|
|
1731
1821
|
psp: PAYMENTWALL_PSP,
|
|
@@ -1878,7 +1968,7 @@ var PAYSTACK_BODY_KEYS = /* @__PURE__ */ Object.freeze([
|
|
|
1878
1968
|
"transaction_type"
|
|
1879
1969
|
]);
|
|
1880
1970
|
var OPTIONAL = /* @__PURE__ */ new Set(["access_code", "card_holder_name", "transaction_type"]);
|
|
1881
|
-
var
|
|
1971
|
+
var BODY_LIMIT10 = 4096;
|
|
1882
1972
|
var CIPHERTEXT_BYTES = [62, 63, 64];
|
|
1883
1973
|
var BASE64 = /^[A-Za-z0-9+/]+={0,2}$/;
|
|
1884
1974
|
var SHAPES3 = /* @__PURE__ */ Object.freeze({
|
|
@@ -1892,8 +1982,8 @@ var SHAPES3 = /* @__PURE__ */ Object.freeze({
|
|
|
1892
1982
|
card_holder_name: /^[^\x00-\x1f\x7f0-9]{1,128}$/u,
|
|
1893
1983
|
transaction_type: /^[a-z_]{1,32}$/
|
|
1894
1984
|
});
|
|
1895
|
-
var
|
|
1896
|
-
var
|
|
1985
|
+
var own8 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
1986
|
+
var refuse9 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1897
1987
|
function paystackFormValue(value) {
|
|
1898
1988
|
return encodeURIComponent(String(value)).replace(/%20/g, "+").replace(/[!'()*~]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
1899
1989
|
}
|
|
@@ -1916,7 +2006,7 @@ function isCiphertext(value) {
|
|
|
1916
2006
|
return btoa(binary) === value && CIPHERTEXT_BYTES.includes(binary.length);
|
|
1917
2007
|
}
|
|
1918
2008
|
function readForm(body) {
|
|
1919
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
2009
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT10)
|
|
1920
2010
|
return null;
|
|
1921
2011
|
const entries = [];
|
|
1922
2012
|
for (const part of body.split("&")) {
|
|
@@ -1935,21 +2025,21 @@ function readForm(body) {
|
|
|
1935
2025
|
function paystackBodyVerdict(body) {
|
|
1936
2026
|
const entries = readForm(body);
|
|
1937
2027
|
if (entries === null)
|
|
1938
|
-
return
|
|
2028
|
+
return refuse9("paystack_body_unsupported");
|
|
1939
2029
|
const keys = entries.map(([key]) => key);
|
|
1940
2030
|
if (keys.includes("subscription"))
|
|
1941
|
-
return
|
|
2031
|
+
return refuse9("paystack_subscription");
|
|
1942
2032
|
if (keys.includes("remember_card") && entries.find(([key]) => key === "remember_card")[1] !== "false")
|
|
1943
|
-
return
|
|
2033
|
+
return refuse9("paystack_saved_card");
|
|
1944
2034
|
const expected = PAYSTACK_BODY_KEYS.filter((key) => !OPTIONAL.has(key) || keys.includes(key));
|
|
1945
2035
|
if (keys.length !== expected.length || keys.some((key, i) => key !== expected[i]))
|
|
1946
|
-
return
|
|
2036
|
+
return refuse9("paystack_body_unsupported");
|
|
1947
2037
|
const fields = Object.fromEntries(entries);
|
|
1948
2038
|
if (!isCiphertext(fields.clientdata))
|
|
1949
|
-
return
|
|
2039
|
+
return refuse9("paystack_body_unsupported");
|
|
1950
2040
|
for (const [key, shape] of Object.entries(SHAPES3)) {
|
|
1951
|
-
if (
|
|
1952
|
-
return
|
|
2041
|
+
if (own8(fields, key) && !shape.test(fields[key]))
|
|
2042
|
+
return refuse9("paystack_body_unsupported");
|
|
1953
2043
|
}
|
|
1954
2044
|
return Object.freeze({ verdict: "card", fields: Object.freeze(fields) });
|
|
1955
2045
|
}
|
|
@@ -1976,7 +2066,7 @@ var paystack_default = /* @__PURE__ */ registerProcessor({
|
|
|
1976
2066
|
// Not surveyed: reading a charge back takes the merchant's secret key, which Agentcard never holds.
|
|
1977
2067
|
settlementReadback: "not_surveyed",
|
|
1978
2068
|
exactUrl: isPaystackChargeUrl,
|
|
1979
|
-
bodyGate: (url, body) => url !== void 0 && !isPaystackChargeUrl(url) ?
|
|
2069
|
+
bodyGate: (url, body) => url !== void 0 && !isPaystackChargeUrl(url) ? refuse9("paystack_url_refused") : paystackBodyVerdict(body),
|
|
1980
2070
|
// No amount reader: the charge names none, so the agent's pair is the figure the cardholder approves.
|
|
1981
2071
|
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."]
|
|
1982
2072
|
});
|
|
@@ -1984,7 +2074,7 @@ var paystack_default = /* @__PURE__ */ registerProcessor({
|
|
|
1984
2074
|
var PROCESSOUT_PSP = "processout";
|
|
1985
2075
|
var PROCESSOUT_OPERATION = "processout.card_request";
|
|
1986
2076
|
var URL_LIMIT4 = 512;
|
|
1987
|
-
var
|
|
2077
|
+
var BODY_LIMIT11 = 4096;
|
|
1988
2078
|
var CARD_URL = /^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})$/;
|
|
1989
2079
|
var PAGE_KEYS2 = /* @__PURE__ */ Object.freeze(["name", "contact", "preferred_scheme"]);
|
|
1990
2080
|
var CONTACT_KEYS = /* @__PURE__ */ Object.freeze(["address1", "address2", "city", "state", "country_code", "zip"]);
|
|
@@ -1999,7 +2089,7 @@ var DEVICE_KEYS = /* @__PURE__ */ Object.freeze([
|
|
|
1999
2089
|
]);
|
|
2000
2090
|
var PROCESSOUT_CARD_KEYS = /* @__PURE__ */ Object.freeze(["number", "exp_month", "exp_year", "cvc2"]);
|
|
2001
2091
|
var BODY_KEYS = /* @__PURE__ */ new Set([...PAGE_KEYS2, "device", ...DEVICE_KEYS, ...PROCESSOUT_CARD_KEYS]);
|
|
2002
|
-
var
|
|
2092
|
+
var NUMBER3 = /^[0-9]{12,19}$/;
|
|
2003
2093
|
var MONTH5 = /^(?:[1-9]|1[0-2])$/;
|
|
2004
2094
|
var YEAR5 = /^20[0-9]{2}$/;
|
|
2005
2095
|
var CODE2 = /^[0-9]{3,4}$/;
|
|
@@ -2007,10 +2097,10 @@ var TEXT_LIMIT = 256;
|
|
|
2007
2097
|
var SCHEME = /^[A-Za-z][A-Za-z0-9 _-]{0,31}$/;
|
|
2008
2098
|
var LANGUAGE2 = /^[A-Za-z]{1,8}(?:-[A-Za-z0-9]{1,8}){0,4}$/;
|
|
2009
2099
|
var PAN_LIKE = /(?:[0-9][^0-9A-Za-z]*){12,}/;
|
|
2010
|
-
var
|
|
2011
|
-
var
|
|
2012
|
-
var
|
|
2013
|
-
var
|
|
2100
|
+
var record7 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
2101
|
+
var own9 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
2102
|
+
var refuse10 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
2103
|
+
var CARD10 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
2014
2104
|
var BASE642 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
2015
2105
|
function base64Of(text3) {
|
|
2016
2106
|
let out = "";
|
|
@@ -2047,12 +2137,12 @@ function processoutCardTarget(url) {
|
|
|
2047
2137
|
function isProcessoutCardUrl(url) {
|
|
2048
2138
|
return processoutCardTarget(url) !== null;
|
|
2049
2139
|
}
|
|
2050
|
-
function
|
|
2051
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
2140
|
+
function readBody8(body) {
|
|
2141
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT11)
|
|
2052
2142
|
return null;
|
|
2053
2143
|
try {
|
|
2054
2144
|
const value = JSON.parse(body);
|
|
2055
|
-
return
|
|
2145
|
+
return record7(value) && JSON.stringify(value) === body ? value : null;
|
|
2056
2146
|
}
|
|
2057
2147
|
catch {
|
|
2058
2148
|
return null;
|
|
@@ -2070,31 +2160,31 @@ var DEVICE_RULES = /* @__PURE__ */ Object.freeze({
|
|
|
2070
2160
|
});
|
|
2071
2161
|
function soundDevice(value) {
|
|
2072
2162
|
const device = value.device;
|
|
2073
|
-
if (!
|
|
2163
|
+
if (!record7(device) || !own9(device, "request_origin") || !own9(device, "app_timezone_offset"))
|
|
2074
2164
|
return false;
|
|
2075
|
-
return DEVICE_KEYS.every((key) =>
|
|
2165
|
+
return DEVICE_KEYS.every((key) => own9(device, key) ? DEVICE_RULES[key](device[key]) && own9(value, key) && value[key] === device[key] : !own9(value, key)) && Object.keys(device).every((key) => DEVICE_KEYS.includes(key));
|
|
2076
2166
|
}
|
|
2077
2167
|
function soundPageData(value) {
|
|
2078
|
-
if (
|
|
2168
|
+
if (own9(value, "name") && !pageText(value.name))
|
|
2079
2169
|
return false;
|
|
2080
|
-
if (
|
|
2170
|
+
if (own9(value, "preferred_scheme") && !(value.preferred_scheme === null || typeof value.preferred_scheme === "string" && SCHEME.test(value.preferred_scheme)))
|
|
2081
2171
|
return false;
|
|
2082
2172
|
const contact = value.contact;
|
|
2083
|
-
return
|
|
2173
|
+
return record7(contact) && Object.keys(contact).every((key) => CONTACT_KEYS.includes(key) && pageText(contact[key]));
|
|
2084
2174
|
}
|
|
2085
2175
|
function processoutBodyVerdict(body, url) {
|
|
2086
2176
|
if (url !== void 0 && processoutCardTarget(url) === null)
|
|
2087
|
-
return
|
|
2088
|
-
const value =
|
|
2177
|
+
return refuse10("processout_url_refused");
|
|
2178
|
+
const value = readBody8(body);
|
|
2089
2179
|
if (value === null || !Object.keys(value).every((key) => BODY_KEYS.has(key)))
|
|
2090
|
-
return
|
|
2180
|
+
return refuse10("processout_body_unsupported");
|
|
2091
2181
|
if (!PROCESSOUT_CARD_KEYS.every((key) => typeof value[key] === "string"))
|
|
2092
|
-
return
|
|
2093
|
-
if (!
|
|
2094
|
-
return
|
|
2182
|
+
return refuse10("processout_body_unsupported");
|
|
2183
|
+
if (!NUMBER3.test(value.number) || !luhn4(value.number) || !MONTH5.test(value.exp_month) || !YEAR5.test(value.exp_year) || !CODE2.test(value.cvc2))
|
|
2184
|
+
return refuse10("processout_body_unsupported");
|
|
2095
2185
|
if (!soundPageData(value) || !soundDevice(value))
|
|
2096
|
-
return
|
|
2097
|
-
return
|
|
2186
|
+
return refuse10("processout_body_unsupported");
|
|
2187
|
+
return CARD10;
|
|
2098
2188
|
}
|
|
2099
2189
|
var processout_default = /* @__PURE__ */ registerProcessor({
|
|
2100
2190
|
psp: PROCESSOUT_PSP,
|
|
@@ -2137,15 +2227,15 @@ var USAEPAY_HOSTS = /* @__PURE__ */ Object.freeze({
|
|
|
2137
2227
|
"sandbox.usaepay.com": "sandbox"
|
|
2138
2228
|
});
|
|
2139
2229
|
var USAEPAY_PAYMENT_KEYS_PATH = "/api/v2/pub/payment_keys";
|
|
2140
|
-
var
|
|
2230
|
+
var BODY_LIMIT12 = 512;
|
|
2141
2231
|
var URL_LIMIT5 = 256;
|
|
2142
2232
|
var CARD_NUMBER5 = /^[0-9]{13,19}$/;
|
|
2143
2233
|
var EXPIRATION = /^(?:0[1-9]|1[0-2])[0-9]{2}$/;
|
|
2144
2234
|
var SECURITY_CODE5 = /^(?:[0-9]{3,4})?$/;
|
|
2145
|
-
var
|
|
2146
|
-
var
|
|
2147
|
-
var
|
|
2148
|
-
var
|
|
2235
|
+
var record8 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
2236
|
+
var own10 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
2237
|
+
var refuse11 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
2238
|
+
var CARD11 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
2149
2239
|
function usaepayPaymentKeysUrl(url) {
|
|
2150
2240
|
if (typeof url !== "string" || url.length > URL_LIMIT5 || url.includes("?") || url.includes("#"))
|
|
2151
2241
|
return null;
|
|
@@ -2156,7 +2246,7 @@ function usaepayPaymentKeysUrl(url) {
|
|
|
2156
2246
|
catch {
|
|
2157
2247
|
return null;
|
|
2158
2248
|
}
|
|
2159
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
2249
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own10(USAEPAY_HOSTS, parsed.hostname) || parsed.pathname !== USAEPAY_PAYMENT_KEYS_PATH)
|
|
2160
2250
|
return null;
|
|
2161
2251
|
return Object.freeze({ host: parsed.hostname, environment: USAEPAY_HOSTS[parsed.hostname] });
|
|
2162
2252
|
}
|
|
@@ -2171,23 +2261,23 @@ function luhn5(digits2) {
|
|
|
2171
2261
|
}
|
|
2172
2262
|
return sum % 10 === 0;
|
|
2173
2263
|
}
|
|
2174
|
-
function
|
|
2175
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
2264
|
+
function readBody9(body) {
|
|
2265
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT12)
|
|
2176
2266
|
return null;
|
|
2177
2267
|
try {
|
|
2178
2268
|
const value = JSON.parse(body);
|
|
2179
|
-
return
|
|
2269
|
+
return record8(value) && JSON.stringify(value) === body ? value : null;
|
|
2180
2270
|
}
|
|
2181
2271
|
catch {
|
|
2182
2272
|
return null;
|
|
2183
2273
|
}
|
|
2184
2274
|
}
|
|
2185
2275
|
function usaepayBodyVerdict(body) {
|
|
2186
|
-
const value =
|
|
2276
|
+
const value = readBody9(body);
|
|
2187
2277
|
const card = value === null ? null : value.creditcard;
|
|
2188
|
-
if (value === null || Object.keys(value).join() !== "creditcard" || !
|
|
2189
|
-
return
|
|
2190
|
-
return
|
|
2278
|
+
if (value === null || Object.keys(value).join() !== "creditcard" || !record8(card) || Object.keys(card).join() !== "number,expiration,cvc" || typeof card.number !== "string" || !CARD_NUMBER5.test(card.number) || !luhn5(card.number) || typeof card.expiration !== "string" || !EXPIRATION.test(card.expiration) || typeof card.cvc !== "string" || !SECURITY_CODE5.test(card.cvc))
|
|
2279
|
+
return refuse11("usaepay_body_unsupported");
|
|
2280
|
+
return CARD11;
|
|
2191
2281
|
}
|
|
2192
2282
|
var usaepay_default = /* @__PURE__ */ registerProcessor({
|
|
2193
2283
|
psp: USAEPAY_PSP,
|
|
@@ -2219,7 +2309,7 @@ var usaepay_default = /* @__PURE__ */ registerProcessor({
|
|
|
2219
2309
|
source: "https://help.usaepay.info/developer/payjs-v2/ , https://help.usaepay.info/api/rest/"
|
|
2220
2310
|
},
|
|
2221
2311
|
exactUrl: isUsaepayPaymentKeysUrl,
|
|
2222
|
-
bodyGate: (url, body) => url !== void 0 && !isUsaepayPaymentKeysUrl(url) ?
|
|
2312
|
+
bodyGate: (url, body) => url !== void 0 && !isUsaepayPaymentKeysUrl(url) ? refuse11("usaepay_url_refused") : usaepayBodyVerdict(body)
|
|
2223
2313
|
// No amount reader: the request names none, so the agent's pair is the figure the cardholder approves.
|
|
2224
2314
|
});
|
|
2225
2315
|
// src/processors/viva_wallet.js
|
|
@@ -2255,7 +2345,7 @@ var VIVA_WALLET_BODY_KEYS = /* @__PURE__ */ Object.freeze([
|
|
|
2255
2345
|
"merchantTrns",
|
|
2256
2346
|
"captchaToken"
|
|
2257
2347
|
]);
|
|
2258
|
-
var
|
|
2348
|
+
var BODY_LIMIT13 = 16384;
|
|
2259
2349
|
var URL_LIMIT6 = 256;
|
|
2260
2350
|
var ORDER_CODE = /^[0-9]{16}$/;
|
|
2261
2351
|
var CARD_NUMBER6 = /^[0-9]{13,19}$/;
|
|
@@ -2267,10 +2357,10 @@ var MEMBER_NAME = /^[A-Za-z][A-Za-z0-9]{0,31}$/;
|
|
|
2267
2357
|
var SHORT_ID = /^[A-Za-z0-9_-]{1,64}$/;
|
|
2268
2358
|
var TEXT = /^[^\u0000-\u001f\u007f]{0,200}$/;
|
|
2269
2359
|
var CARD_DIGITS = /[0-9]{12,}/;
|
|
2270
|
-
var
|
|
2271
|
-
var
|
|
2272
|
-
var
|
|
2273
|
-
var
|
|
2360
|
+
var record9 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
2361
|
+
var own11 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
2362
|
+
var refuse12 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
2363
|
+
var CARD12 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
2274
2364
|
var inOrder4 = (value, keys) => {
|
|
2275
2365
|
let at = 0;
|
|
2276
2366
|
for (const name of Object.keys(value)) {
|
|
@@ -2285,7 +2375,7 @@ var inOrder4 = (value, keys) => {
|
|
|
2285
2375
|
var cardDigits = (text3) => CARD_DIGITS.test(text3.replace(/[^0-9A-Za-z]/g, ""));
|
|
2286
2376
|
var plainText = (value) => typeof value === "string" && TEXT.test(value) && !cardDigits(value);
|
|
2287
2377
|
var scalar = (value) => value === null || typeof value === "boolean" || Number.isSafeInteger(value) && Math.abs(value) < 1e9 || plainText(value);
|
|
2288
|
-
var flatRecord = (value, limit) =>
|
|
2378
|
+
var flatRecord = (value, limit) => record9(value) && Object.keys(value).length <= limit && Object.entries(value).every(([key, item]) => MEMBER_NAME.test(key) && scalar(item));
|
|
2289
2379
|
function vivaWalletChargeTokensUrl(url) {
|
|
2290
2380
|
if (typeof url !== "string" || url.length > URL_LIMIT6 || url.includes("?") || url.includes("#"))
|
|
2291
2381
|
return null;
|
|
@@ -2296,7 +2386,7 @@ function vivaWalletChargeTokensUrl(url) {
|
|
|
2296
2386
|
catch {
|
|
2297
2387
|
return null;
|
|
2298
2388
|
}
|
|
2299
|
-
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !
|
|
2389
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password || !own11(VIVA_WALLET_HOSTS, parsed.hostname) || parsed.pathname !== VIVA_WALLET_CHARGE_TOKENS_PATH)
|
|
2300
2390
|
return null;
|
|
2301
2391
|
return Object.freeze({ host: parsed.hostname, environment: VIVA_WALLET_HOSTS[parsed.hostname] });
|
|
2302
2392
|
}
|
|
@@ -2314,12 +2404,12 @@ function luhn6(digits2) {
|
|
|
2314
2404
|
function vivaWalletMaskedNumber(number) {
|
|
2315
2405
|
return `${number.slice(0, 6)}${"X".repeat(Math.max(0, number.length - 10))}${number.slice(-4)}`;
|
|
2316
2406
|
}
|
|
2317
|
-
function
|
|
2318
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
2407
|
+
function readBody10(body) {
|
|
2408
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT13)
|
|
2319
2409
|
return null;
|
|
2320
2410
|
try {
|
|
2321
2411
|
const value = JSON.parse(body);
|
|
2322
|
-
return
|
|
2412
|
+
return record9(value) && JSON.stringify(value) === body ? value : null;
|
|
2323
2413
|
}
|
|
2324
2414
|
catch {
|
|
2325
2415
|
return null;
|
|
@@ -2331,26 +2421,26 @@ function currencyNumber(value) {
|
|
|
2331
2421
|
return typeof value === "string" && /^[0-9]{3}$/.test(value) ? Number(value) : null;
|
|
2332
2422
|
}
|
|
2333
2423
|
function vivaWalletBodyVerdict(body) {
|
|
2334
|
-
const value =
|
|
2424
|
+
const value = readBody10(body);
|
|
2335
2425
|
if (value === null || !Object.keys(value).every((key) => VIVA_WALLET_BODY_KEYS.includes(key))) {
|
|
2336
|
-
return value !== null && (
|
|
2426
|
+
return value !== null && (own11(value, "creditCardId") || own11(value, "token")) ? refuse12("viva_wallet_stored_card") : refuse12("viva_wallet_body_unsupported");
|
|
2337
2427
|
}
|
|
2338
2428
|
if (value.rememberCard !== false)
|
|
2339
|
-
return
|
|
2429
|
+
return refuse12(value.rememberCard === true ? "viva_wallet_keep_on_file" : "viva_wallet_body_unsupported");
|
|
2340
2430
|
if (value.dccAccepted === true)
|
|
2341
|
-
return
|
|
2342
|
-
if (
|
|
2343
|
-
return
|
|
2344
|
-
if (
|
|
2345
|
-
return
|
|
2431
|
+
return refuse12("viva_wallet_currency_conversion");
|
|
2432
|
+
if (own11(value, "dccAccepted") && value.dccAccepted !== false)
|
|
2433
|
+
return refuse12("viva_wallet_body_unsupported");
|
|
2434
|
+
if (own11(value, "scaRequestedTransactionId"))
|
|
2435
|
+
return refuse12("viva_wallet_retry_refused");
|
|
2346
2436
|
if (!(value.installments === 0 || value.installments === 1)) {
|
|
2347
|
-
return
|
|
2437
|
+
return refuse12(Number.isSafeInteger(value.installments) && value.installments > 1 ? "viva_wallet_installments" : "viva_wallet_body_unsupported");
|
|
2348
2438
|
}
|
|
2349
|
-
if (!inOrder4(value, VIVA_WALLET_BODY_KEYS) || ["offerCodes", "loyaltySupported", "redeemedAmount", "retrievalReferenceNumber", "merchantTrns"].some((key) =>
|
|
2350
|
-
return
|
|
2439
|
+
if (!inOrder4(value, VIVA_WALLET_BODY_KEYS) || ["offerCodes", "loyaltySupported", "redeemedAmount", "retrievalReferenceNumber", "merchantTrns"].some((key) => own11(value, key)))
|
|
2440
|
+
return refuse12("viva_wallet_body_unsupported");
|
|
2351
2441
|
const number = value.number;
|
|
2352
|
-
const sound = typeof value.orderCode === "string" && ORDER_CODE.test(value.orderCode) && Number.isSafeInteger(value.amount) && value.amount > 0 && currencyNumber(value.currencyCode) !== null && plainText(value.holderName) && value.holderName.trim() !== "" && plainText(value.holderMail) && (value.cvc === null || typeof value.cvc === "string" && SECURITY_CODE6.test(value.cvc)) && typeof number === "string" && CARD_NUMBER6.test(number) && luhn6(number) && typeof value.expirationMonth === "string" && MONTH6.test(value.expirationMonth) && typeof value.expirationYear === "string" && YEAR6.test(value.expirationYear) && flatRecord(value.customer, 12) && (!
|
|
2353
|
-
return sound ?
|
|
2442
|
+
const sound = typeof value.orderCode === "string" && ORDER_CODE.test(value.orderCode) && Number.isSafeInteger(value.amount) && value.amount > 0 && currencyNumber(value.currencyCode) !== null && plainText(value.holderName) && value.holderName.trim() !== "" && plainText(value.holderMail) && (value.cvc === null || typeof value.cvc === "string" && SECURITY_CODE6.test(value.cvc)) && typeof number === "string" && CARD_NUMBER6.test(number) && luhn6(number) && typeof value.expirationMonth === "string" && MONTH6.test(value.expirationMonth) && typeof value.expirationYear === "string" && YEAR6.test(value.expirationYear) && flatRecord(value.customer, 12) && (!own11(value, "friendlyName") || plainText(value.friendlyName)) && value.maskedNumber === vivaWalletMaskedNumber(number) && (!own11(value, "bankId") || typeof value.bankId === "string" && SHORT_ID.test(value.bankId) || Number.isSafeInteger(value.bankId) && value.bankId >= 0) && (!own11(value, "selectedBrand") || value.selectedBrand === null || flatRecord(value.selectedBrand, 16)) && (!own11(value, "cardholderBrandSelection") || typeof value.cardholderBrandSelection === "boolean") && (!own11(value, "dccOptions") || flatRecord(value.dccOptions, 16)) && (!own11(value, "captchaToken") || typeof value.captchaToken === "string" && CAPTCHA_TOKEN.test(value.captchaToken));
|
|
2443
|
+
return sound ? CARD12 : refuse12("viva_wallet_body_unsupported");
|
|
2354
2444
|
}
|
|
2355
2445
|
var VIVA_WALLET_CURRENCIES = /* @__PURE__ */ Object.freeze({
|
|
2356
2446
|
978: "eur",
|
|
@@ -2413,9 +2503,9 @@ var viva_wallet_default = /* @__PURE__ */ registerProcessor({
|
|
|
2413
2503
|
refusedOperations: [VIVA_WALLET_OPERATION],
|
|
2414
2504
|
settlementReadback: "not_surveyed",
|
|
2415
2505
|
exactUrl: isVivaWalletChargeTokensUrl,
|
|
2416
|
-
bodyGate: (url, body) => url !== void 0 && !isVivaWalletChargeTokensUrl(url) ?
|
|
2506
|
+
bodyGate: (url, body) => url !== void 0 && !isVivaWalletChargeTokensUrl(url) ? refuse12("viva_wallet_url_refused") : vivaWalletBodyVerdict(body),
|
|
2417
2507
|
// The body names the order's amount in cents and its numeric currency, which the page's card-free charge repeats.
|
|
2418
|
-
amount: (template) =>
|
|
2508
|
+
amount: (template) => record9(template) && isVivaWalletChargeTokensUrl(template.url) ? vivaWalletAmount(template.body) : null
|
|
2419
2509
|
});
|
|
2420
2510
|
// src/processors/vtex_payments.js
|
|
2421
2511
|
var VTEX_PAYMENTS_PSP = "vtex_payments";
|
|
@@ -2465,7 +2555,7 @@ var VTEX_PAYMENTS_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
|
2465
2555
|
Object.freeze({ account: "alssports", origin: "https://www.als.com", merchant: "Al's Sporting Goods", currency: "USD" }),
|
|
2466
2556
|
Object.freeze({ account: "roadrunnersports", origin: "https://www.roadrunnersports.com", merchant: "Road Runner Sports", currency: "USD" })
|
|
2467
2557
|
]);
|
|
2468
|
-
var
|
|
2558
|
+
var BODY_LIMIT14 = 16384;
|
|
2469
2559
|
var ACCOUNT_HOST = /^([a-z0-9]{1,63})\.vtexvault\.com$/;
|
|
2470
2560
|
var PATH = /^\/api\/payments\/transactions\/([0-9A-Fa-f]{32})\/payments$/;
|
|
2471
2561
|
var ORDER_GROUP = /^[0-9]{6,24}$/;
|
|
@@ -2473,7 +2563,7 @@ var BASE643 = /^[A-Za-z0-9+/]{4,1020}={0,2}$/;
|
|
|
2473
2563
|
var CARD_NUMBER7 = /^[0-9]{12,19}$/;
|
|
2474
2564
|
var SECURITY_CODE7 = /^[0-9]{3,4}$/;
|
|
2475
2565
|
var DUE_DATE = /^(?:0[1-9]|1[0-2])\/[0-9]{2}$/;
|
|
2476
|
-
var
|
|
2566
|
+
var CURRENCY2 = /^[A-Z]{3}$/;
|
|
2477
2567
|
var TRANSACTION_ID = /^[0-9A-Fa-f]{32}$/;
|
|
2478
2568
|
var MERCHANT_NAME = /^[A-Za-z0-9_.-]{1,64}$/;
|
|
2479
2569
|
var SHORT_ID2 = /^[A-Za-z0-9_-]{1,64}$/;
|
|
@@ -2481,10 +2571,10 @@ var FINGERPRINT = /^[A-Za-z0-9_.:=+/-]{1,256}$/;
|
|
|
2481
2571
|
var TEXT2 = /^[^\u0000-\u001f\u007f]{1,200}$/;
|
|
2482
2572
|
var CARD_DIGITS2 = /[0-9]{12,}/;
|
|
2483
2573
|
var DEVICE_INFO_KEYS = Object.freeze(["sw", "sh", "cd", "tz", "lang", "java", "sourceApplication"]);
|
|
2484
|
-
var
|
|
2485
|
-
var
|
|
2486
|
-
var
|
|
2487
|
-
var
|
|
2574
|
+
var record10 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
2575
|
+
var own12 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
2576
|
+
var refuse13 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
2577
|
+
var CARD13 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
2488
2578
|
var inOrder5 = (value, keys) => {
|
|
2489
2579
|
let at = 0;
|
|
2490
2580
|
for (const name of Object.keys(value)) {
|
|
@@ -2534,18 +2624,18 @@ function deviceInfoSound(text3) {
|
|
|
2534
2624
|
catch {
|
|
2535
2625
|
return false;
|
|
2536
2626
|
}
|
|
2537
|
-
if (!
|
|
2627
|
+
if (!record10(info) || !Object.keys(info).every((key) => DEVICE_INFO_KEYS.includes(key)))
|
|
2538
2628
|
return false;
|
|
2539
2629
|
for (const key of ["sw", "sh", "cd"])
|
|
2540
|
-
if (
|
|
2630
|
+
if (own12(info, key) && !(count(info[key]) && info[key] <= 1e5))
|
|
2541
2631
|
return false;
|
|
2542
|
-
if (
|
|
2632
|
+
if (own12(info, "tz") && !(Number.isSafeInteger(info.tz) && Math.abs(info.tz) <= 1440))
|
|
2543
2633
|
return false;
|
|
2544
|
-
if (
|
|
2634
|
+
if (own12(info, "lang") && !(typeof info.lang === "string" && /^[A-Za-z]{0,8}$/.test(info.lang)))
|
|
2545
2635
|
return false;
|
|
2546
|
-
if (
|
|
2636
|
+
if (own12(info, "java") && typeof info.java !== "boolean")
|
|
2547
2637
|
return false;
|
|
2548
|
-
return !
|
|
2638
|
+
return !own12(info, "sourceApplication") || typeof info.sourceApplication === "string" && /^[A-Za-z0-9_.-]{1,32}$/.test(info.sourceApplication);
|
|
2549
2639
|
}
|
|
2550
2640
|
function vtexPaymentsCardTarget(url) {
|
|
2551
2641
|
if (typeof url !== "string" || url.length > 8192)
|
|
@@ -2591,8 +2681,8 @@ function isVtexPaymentsCardUrl(url) {
|
|
|
2591
2681
|
const target = vtexPaymentsCardTarget(url);
|
|
2592
2682
|
return target !== null && !target.fallback;
|
|
2593
2683
|
}
|
|
2594
|
-
function
|
|
2595
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
2684
|
+
function readBody11(body) {
|
|
2685
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT14)
|
|
2596
2686
|
return null;
|
|
2597
2687
|
let value;
|
|
2598
2688
|
try {
|
|
@@ -2606,13 +2696,13 @@ function readBody10(body) {
|
|
|
2606
2696
|
return value;
|
|
2607
2697
|
}
|
|
2608
2698
|
function cardLine(line) {
|
|
2609
|
-
if (!
|
|
2699
|
+
if (!record10(line))
|
|
2610
2700
|
return false;
|
|
2611
|
-
const fields =
|
|
2612
|
-
return line.groupName === "creditCardPaymentGroup" || line.groupName === "debitCardPaymentGroup" ||
|
|
2701
|
+
const fields = record10(line.fields) ? line.fields : {};
|
|
2702
|
+
return line.groupName === "creditCardPaymentGroup" || line.groupName === "debitCardPaymentGroup" || own12(line, "accountId") || own12(fields, "accountId") || own12(fields, "cardNumber") || own12(fields, "validationCode") || own12(fields, "dueDate");
|
|
2613
2703
|
}
|
|
2614
2704
|
function addressSound(address) {
|
|
2615
|
-
if (!
|
|
2705
|
+
if (!record10(address) || !inOrder5(address, VTEX_PAYMENTS_ADDRESS_KEYS))
|
|
2616
2706
|
return false;
|
|
2617
2707
|
for (const [key, value] of Object.entries(address)) {
|
|
2618
2708
|
if (key === "addressType") {
|
|
@@ -2633,7 +2723,7 @@ function addressSound(address) {
|
|
|
2633
2723
|
return true;
|
|
2634
2724
|
}
|
|
2635
2725
|
function fieldsSound(fields) {
|
|
2636
|
-
if (!
|
|
2726
|
+
if (!record10(fields) || !inOrder5(fields, VTEX_PAYMENTS_FIELD_KEYS) || own12(fields, "metadata"))
|
|
2637
2727
|
return false;
|
|
2638
2728
|
if (!(typeof fields.cardNumber === "string" && CARD_NUMBER7.test(fields.cardNumber)))
|
|
2639
2729
|
return false;
|
|
@@ -2643,38 +2733,38 @@ function fieldsSound(fields) {
|
|
|
2643
2733
|
return false;
|
|
2644
2734
|
if (!plainText2(fields.holderName))
|
|
2645
2735
|
return false;
|
|
2646
|
-
if (
|
|
2736
|
+
if (own12(fields, "document") && !(fields.document === "" || plainText2(fields.document) && fields.document.length <= 32))
|
|
2647
2737
|
return false;
|
|
2648
|
-
if (
|
|
2738
|
+
if (own12(fields, "address") && !addressSound(fields.address))
|
|
2649
2739
|
return false;
|
|
2650
|
-
if (
|
|
2740
|
+
if (own12(fields, "deviceFingerprint") && !(typeof fields.deviceFingerprint === "string" && FINGERPRINT.test(fields.deviceFingerprint)))
|
|
2651
2741
|
return false;
|
|
2652
|
-
return !
|
|
2742
|
+
return !own12(fields, "addressId") || typeof fields.addressId === "string" && SHORT_ID2.test(fields.addressId);
|
|
2653
2743
|
}
|
|
2654
2744
|
function vtexPaymentsBodyVerdict(body, target) {
|
|
2655
|
-
const lines =
|
|
2656
|
-
if (lines === null || lines.length === 0 || !lines.every(
|
|
2657
|
-
return
|
|
2745
|
+
const lines = readBody11(body);
|
|
2746
|
+
if (lines === null || lines.length === 0 || !lines.every(record10))
|
|
2747
|
+
return refuse13("vtex_payments_body_unsupported");
|
|
2658
2748
|
const cards = lines.filter(cardLine);
|
|
2659
|
-
if (cards.some((line2) =>
|
|
2660
|
-
return
|
|
2749
|
+
if (cards.some((line2) => own12(line2, "accountId") || own12(line2.fields ?? {}, "accountId")))
|
|
2750
|
+
return refuse13("vtex_payments_saved_card");
|
|
2661
2751
|
if (cards.length === 0)
|
|
2662
|
-
return
|
|
2663
|
-
if (lines.length !== 1 ||
|
|
2664
|
-
return
|
|
2752
|
+
return refuse13("vtex_payments_body_unsupported");
|
|
2753
|
+
if (lines.length !== 1 || own12(lines[0], "id"))
|
|
2754
|
+
return refuse13("vtex_payments_split_payment");
|
|
2665
2755
|
const line = lines[0];
|
|
2666
2756
|
if (!inOrder5(line, VTEX_PAYMENTS_LINE_KEYS) || line.groupName !== "creditCardPaymentGroup")
|
|
2667
|
-
return
|
|
2668
|
-
if (!(typeof line.currencyCode === "string" &&
|
|
2669
|
-
return
|
|
2670
|
-
if (line.installments !== 1 || line.referenceValue !== line.value ||
|
|
2671
|
-
return
|
|
2757
|
+
return refuse13("vtex_payments_body_unsupported");
|
|
2758
|
+
if (!(typeof line.currencyCode === "string" && CURRENCY2.test(line.currencyCode)) || !own12(VTEX_PAYMENTS_NETWORKS, line.paymentSystem) || !Number.isSafeInteger(line.paymentSystem) || !(count(line.value) && line.value > 0))
|
|
2759
|
+
return refuse13("vtex_payments_body_unsupported");
|
|
2760
|
+
if (line.installments !== 1 || line.referenceValue !== line.value || own12(line, "installmentsInterestRate") && line.installmentsInterestRate !== 0 || own12(line, "installmentsValue") && line.installmentsValue !== line.value)
|
|
2761
|
+
return refuse13("vtex_payments_installments");
|
|
2672
2762
|
const transaction = line.transaction;
|
|
2673
|
-
if (!
|
|
2674
|
-
return
|
|
2763
|
+
if (!record10(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)))
|
|
2764
|
+
return refuse13("vtex_payments_body_unsupported");
|
|
2675
2765
|
if (target && transaction.id.toUpperCase() !== target.transactionId.toUpperCase())
|
|
2676
|
-
return
|
|
2677
|
-
return fieldsSound(line.fields) ?
|
|
2766
|
+
return refuse13("vtex_payments_split_payment");
|
|
2767
|
+
return fieldsSound(line.fields) ? CARD13 : refuse13("vtex_payments_body_unsupported");
|
|
2678
2768
|
}
|
|
2679
2769
|
function vtexPaymentsAmount(body) {
|
|
2680
2770
|
if (vtexPaymentsBodyVerdict(body).verdict !== "card")
|
|
@@ -2719,14 +2809,15 @@ var vtex_payments_default = /* @__PURE__ */ registerProcessor({
|
|
|
2719
2809
|
return vtexPaymentsBodyVerdict(body);
|
|
2720
2810
|
const target = vtexPaymentsCardTarget(url);
|
|
2721
2811
|
if (target === null)
|
|
2722
|
-
return
|
|
2723
|
-
return target.fallback ?
|
|
2812
|
+
return refuse13("vtex_payments_url_refused");
|
|
2813
|
+
return target.fallback ? refuse13("vtex_payments_fallback_refused") : vtexPaymentsBodyVerdict(body, target);
|
|
2724
2814
|
},
|
|
2725
|
-
amount: (template) =>
|
|
2815
|
+
amount: (template) => record10(template) && isVtexPaymentsCardUrl(template.url) ? vtexPaymentsAmount(template.body) : null
|
|
2726
2816
|
});
|
|
2727
2817
|
// src/processors/index.generated.js
|
|
2728
2818
|
var REGISTERED_MODULES = Object.freeze({
|
|
2729
2819
|
aurus: aurus_default,
|
|
2820
|
+
bigcommerce: bigcommerce_default,
|
|
2730
2821
|
bluesnap: bluesnap_default,
|
|
2731
2822
|
cardlink_vpos: cardlink_vpos_default,
|
|
2732
2823
|
eghl: eghl_default,
|
|
@@ -5706,6 +5797,9 @@ function trustedClientRecognizer(pspOrEntry) {
|
|
|
5706
5797
|
throw new Error("Refusing to pay: unknown payment processor.");
|
|
5707
5798
|
return definition;
|
|
5708
5799
|
}
|
|
5800
|
+
// src/answer-card-leak.js
|
|
5801
|
+
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}";
|
|
5802
|
+
var UTF8_WHOLE = /* @__PURE__ */ new RegExp(`^(?:${UTF8_SEQUENCE})*$`);
|
|
5709
5803
|
// src/datatrans.js
|
|
5710
5804
|
var DATATRANS_HOSTS = Object.freeze(["pay.datatrans.com", "pay.sandbox.datatrans.com"]);
|
|
5711
5805
|
var DATATRANS_REFUSAL_REASONS = Object.freeze(["unsupported", "card_on_file", "brand_mismatch", "unregistered_merchant"]);
|
|
@@ -5895,7 +5989,7 @@ var HIPAY_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
|
5895
5989
|
pin6({ id: "happybulle", merchant: "HappyBulle", origins: ["https://www.happybulle.com"], usernames: ["94683309.secure-gateway.hipay-tpp.com"] })
|
|
5896
5990
|
]);
|
|
5897
5991
|
// src/amazon-payment-services.js
|
|
5898
|
-
var
|
|
5992
|
+
var BODY_LIMIT15 = 32 * 1024;
|
|
5899
5993
|
var ANSWER_LIMIT = 64 * 1024;
|
|
5900
5994
|
// src/clover.js
|
|
5901
5995
|
var REQUIRED_KEYS = /* @__PURE__ */ Object.freeze(["encrypted_pan", "exp_month", "exp_year", "cvv", "first6", "last4", "brand"]);
|
|
@@ -6247,7 +6341,7 @@ var RECORD_MEMBERS = /* @__PURE__ */ Object.freeze({
|
|
|
6247
6341
|
]
|
|
6248
6342
|
});
|
|
6249
6343
|
// src/pin-payments.js
|
|
6250
|
-
var
|
|
6344
|
+
var CARD_KEYS4 = /* @__PURE__ */ Object.freeze(["name", "number", "cvc", "expiry_month", "expiry_year"]);
|
|
6251
6345
|
var ADDRESS_KEYS = /* @__PURE__ */ Object.freeze([
|
|
6252
6346
|
"address_line1",
|
|
6253
6347
|
"address_line2",
|
|
@@ -6258,7 +6352,7 @@ var ADDRESS_KEYS = /* @__PURE__ */ Object.freeze([
|
|
|
6258
6352
|
]);
|
|
6259
6353
|
var KEY2 = "publishable_api_key";
|
|
6260
6354
|
var METHOD = "_method";
|
|
6261
|
-
var DOCUMENTED = /* @__PURE__ */ new Set([KEY2, METHOD, ...
|
|
6355
|
+
var DOCUMENTED = /* @__PURE__ */ new Set([KEY2, METHOD, ...CARD_KEYS4, ...ADDRESS_KEYS]);
|
|
6262
6356
|
var TOKEN_FACTS = /* @__PURE__ */ Object.freeze([
|
|
6263
6357
|
"token",
|
|
6264
6358
|
"scheme",
|