@agent-cards/sdk 0.23.25 → 0.23.26
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 +8 -0
- package/README.md +29 -1
- package/dist/agent-amount.generated.js +1 -1
- package/dist/capabilities.generated.js +1 -1
- package/dist/card-fields.generated.js +207 -117
- package/dist/client.d.ts +35 -0
- package/dist/client.js +38 -1
- package/dist/primer.generated.js +222 -132
- package/dist/stripe-checkout.generated.js +74 -44
- package/dist/tap-payments.generated.d.ts +10 -9
- package/dist/tap-payments.generated.js +28 -43
- 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: c278e78b910411f826f9313f7dde769c3c0eb483df9bcd4f6280eec186ce4c98
|
|
4
4
|
// src/card-number-key.js
|
|
5
5
|
var CARD_NUMBER_KEY = /^(number|card_number|cardnumber|cardNum|card_num|pan)$/i;
|
|
6
6
|
// src/json-path.js
|
|
@@ -101,8 +101,8 @@ function parseConvergeBody(body) {
|
|
|
101
101
|
return parsed;
|
|
102
102
|
}
|
|
103
103
|
function convergeAmountCents(value) {
|
|
104
|
-
const
|
|
105
|
-
const m = typeof
|
|
104
|
+
const text9 = typeof value === "number" && Number.isFinite(value) ? String(value) : value;
|
|
105
|
+
const m = typeof text9 === "string" ? AMOUNT.exec(text9) : null;
|
|
106
106
|
if (!m)
|
|
107
107
|
return null;
|
|
108
108
|
const cents2 = Number(m[1]) * 100 + Number(((m[2] ?? "") + "00").slice(0, 2));
|
|
@@ -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 own13 = Object.keys(value);
|
|
361
|
+
return own13.length === keys.length && own13.every((key, at) => key === keys[at]);
|
|
362
362
|
};
|
|
363
363
|
var refuse4 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
364
364
|
var CARD4 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -582,9 +582,9 @@ var K = /* @__PURE__ */ new Uint32Array([
|
|
|
582
582
|
3329325298
|
|
583
583
|
]);
|
|
584
584
|
var rotr = (x, n) => x >>> n | x << 32 - n;
|
|
585
|
-
function utf8(
|
|
585
|
+
function utf8(text9) {
|
|
586
586
|
const out = [];
|
|
587
|
-
for (const char of
|
|
587
|
+
for (const char of text9) {
|
|
588
588
|
let cp = char.codePointAt(0);
|
|
589
589
|
if (cp >= 55296 && cp <= 57343)
|
|
590
590
|
cp = 65533;
|
|
@@ -663,13 +663,13 @@ var TYPED_ARRAY = Object.getPrototypeOf(Uint8Array.prototype);
|
|
|
663
663
|
var typedArrayName = Object.getOwnPropertyDescriptor(TYPED_ARRAY, Symbol.toStringTag).get;
|
|
664
664
|
function parseRsaPublicKey(key) {
|
|
665
665
|
const spki = key && typeof key === "object" ? key.spki : void 0;
|
|
666
|
-
const
|
|
666
|
+
const pin10 = key && typeof key === "object" ? key.sha256 : void 0;
|
|
667
667
|
const named = key && typeof key === "object" && Object.prototype.hasOwnProperty.call(key, "exponent") ? key.exponent : void 0;
|
|
668
668
|
if (named !== void 0 && named !== 17)
|
|
669
669
|
throw refuse6("key");
|
|
670
670
|
if (typeof spki !== "string" || spki.length > 1024 || spki.length % 4 !== 0 || !BASE64.test(spki))
|
|
671
671
|
throw refuse6("key");
|
|
672
|
-
if (typeof
|
|
672
|
+
if (typeof pin10 !== "string" || !SHA256_HEX.test(pin10))
|
|
673
673
|
throw refuse6("key");
|
|
674
674
|
let binary;
|
|
675
675
|
try {
|
|
@@ -681,7 +681,7 @@ function parseRsaPublicKey(key) {
|
|
|
681
681
|
if (btoa(binary) !== spki)
|
|
682
682
|
throw refuse6("key");
|
|
683
683
|
const der = Uint8Array.from(binary, (c) => c.charCodeAt(0));
|
|
684
|
-
if (sha256Hex(der) !==
|
|
684
|
+
if (sha256Hex(der) !== pin10)
|
|
685
685
|
throw refuse6("key");
|
|
686
686
|
const outer = readElement(der, 0, 48);
|
|
687
687
|
if (outer.end !== der.length || outer.start + RSA_ALGORITHM.length > der.length)
|
|
@@ -771,8 +771,8 @@ var PADDLE_TOKENEX_PSP = "paddle_tokenex";
|
|
|
771
771
|
var PADDLE_TOKENEX_FACT_KEYS = /* @__PURE__ */ Object.freeze(["card_first_six", "card_last_four", "expiry_month", "expiry_year", "card_brand"]);
|
|
772
772
|
var record4 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
773
773
|
var sameKeys2 = (value, keys) => {
|
|
774
|
-
const
|
|
775
|
-
return
|
|
774
|
+
const own13 = Object.keys(value);
|
|
775
|
+
return own13.length === keys.length && own13.every((key, at) => key === keys[at]);
|
|
776
776
|
};
|
|
777
777
|
var refuse7 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
778
778
|
var CARD6 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -1261,8 +1261,8 @@ var TEXT_LIMIT = 256;
|
|
|
1261
1261
|
var CONTROL4 = /[\u0000-\u001f\u007f]/;
|
|
1262
1262
|
var record6 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1263
1263
|
var sameKeys3 = (value, keys) => {
|
|
1264
|
-
const
|
|
1265
|
-
return
|
|
1264
|
+
const own13 = Object.keys(value);
|
|
1265
|
+
return own13.length === keys.length && own13.every((key, at) => key === keys[at]);
|
|
1266
1266
|
};
|
|
1267
1267
|
var plainText = (value) => typeof value === "string" && value.length <= TEXT_LIMIT && !CONTROL4.test(value) && (value.match(/[0-9]/g) ?? []).length < 12;
|
|
1268
1268
|
var refuse9 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
@@ -1464,8 +1464,8 @@ var EXPIRATION = /^[0-9]{2}(?:0[1-9]|1[0-2])$/;
|
|
|
1464
1464
|
var CARD_PAYMENT = "PAYMENT_CARD";
|
|
1465
1465
|
var record8 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1466
1466
|
var sameKeys4 = (value, keys) => {
|
|
1467
|
-
const
|
|
1468
|
-
return
|
|
1467
|
+
const own13 = Object.keys(value);
|
|
1468
|
+
return own13.length === keys.length && own13.every((key, at) => key === keys[at]);
|
|
1469
1469
|
};
|
|
1470
1470
|
var refuse11 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1471
1471
|
var CARD10 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -1695,8 +1695,8 @@ var LOCALE = /^[a-z]{2}(?:-[A-Za-z]{2,4})?$/;
|
|
|
1695
1695
|
var PAN_LIKE3 = /(?:[0-9][ _.:-]*){12,}/;
|
|
1696
1696
|
var record9 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
1697
1697
|
var sameKeys5 = (value, keys) => {
|
|
1698
|
-
const
|
|
1699
|
-
return
|
|
1698
|
+
const own13 = Object.keys(value);
|
|
1699
|
+
return own13.length === keys.length && own13.every((key, at) => key === keys[at]);
|
|
1700
1700
|
};
|
|
1701
1701
|
var refuse13 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
1702
1702
|
var CARD12 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -2112,7 +2112,7 @@ var luhn2 = (digits3) => {
|
|
|
2112
2112
|
return sum % 10 === 0;
|
|
2113
2113
|
};
|
|
2114
2114
|
var ANY_NETWORK = /^[2-6][0-9]{12,18}$/;
|
|
2115
|
-
var holdsCardShape = (
|
|
2115
|
+
var holdsCardShape = (text9, shape = NETWORK) => (text9.match(/[0-9]{13,}/g) ?? []).some((run) => run.length > 19 || shape.test(run) && luhn2(run));
|
|
2116
2116
|
var phone = (value) => typeof value === "string" && PHONE.test(value) && (value.match(/[0-9]/g) ?? []).length >= 6 && (value.match(/[0-9]/g) ?? []).length <= 15;
|
|
2117
2117
|
var refuse16 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
2118
2118
|
var CARD15 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -2340,13 +2340,13 @@ var printable = (value) => [...value].every((ch) => ch.charCodeAt(0) >= 32 && ch
|
|
|
2340
2340
|
function typed(value, limit = 256) {
|
|
2341
2341
|
return typeof value === "string" && value.length >= 1 && value.length <= limit && !PAN_LIKE4.test(value) && printable(value);
|
|
2342
2342
|
}
|
|
2343
|
-
function decodeBase64(
|
|
2344
|
-
if (typeof
|
|
2343
|
+
function decodeBase64(text9) {
|
|
2344
|
+
if (typeof text9 !== "string" || !BASE643.test(text9) || text9.length % 4 !== 0)
|
|
2345
2345
|
return null;
|
|
2346
2346
|
let bits = 0;
|
|
2347
2347
|
let value = 0;
|
|
2348
2348
|
let out = "";
|
|
2349
|
-
for (const ch of
|
|
2349
|
+
for (const ch of text9.replace(/=+$/, "")) {
|
|
2350
2350
|
value = (value << 6 | BASE64_ALPHABET.indexOf(ch)) & 16777215;
|
|
2351
2351
|
bits += 6;
|
|
2352
2352
|
if (bits >= 8) {
|
|
@@ -2356,8 +2356,8 @@ function decodeBase64(text8) {
|
|
|
2356
2356
|
}
|
|
2357
2357
|
return out;
|
|
2358
2358
|
}
|
|
2359
|
-
function soundDevice(
|
|
2360
|
-
const json = decodeBase64(
|
|
2359
|
+
function soundDevice(text9) {
|
|
2360
|
+
const json = decodeBase64(text9);
|
|
2361
2361
|
if (json === null)
|
|
2362
2362
|
return false;
|
|
2363
2363
|
let value;
|
|
@@ -2475,17 +2475,17 @@ function sumupBodyVerdict(body, url) {
|
|
|
2475
2475
|
var SALTED = /* @__PURE__ */ Object.freeze([83, 97, 108, 116, 101, 100, 95, 95]);
|
|
2476
2476
|
var B64 = /^[A-Za-z0-9+/]+={0,2}$/;
|
|
2477
2477
|
var FIELD_LIMIT = 1024;
|
|
2478
|
-
function decodeCanonical(
|
|
2479
|
-
if (typeof
|
|
2478
|
+
function decodeCanonical(text9) {
|
|
2479
|
+
if (typeof text9 !== "string" || text9.length === 0 || text9.length % 4 !== 0 || !B64.test(text9))
|
|
2480
2480
|
return null;
|
|
2481
2481
|
let binary;
|
|
2482
2482
|
try {
|
|
2483
|
-
binary = atob(
|
|
2483
|
+
binary = atob(text9);
|
|
2484
2484
|
}
|
|
2485
2485
|
catch {
|
|
2486
2486
|
return null;
|
|
2487
2487
|
}
|
|
2488
|
-
if (btoa(binary) !==
|
|
2488
|
+
if (btoa(binary) !== text9)
|
|
2489
2489
|
return null;
|
|
2490
2490
|
return Uint8Array.from(binary, (char) => char.charCodeAt(0));
|
|
2491
2491
|
}
|
|
@@ -2727,8 +2727,8 @@ var TEXT_LIMIT3 = 256;
|
|
|
2727
2727
|
var CONTROL7 = /[\u0000-\u001f\u007f]/;
|
|
2728
2728
|
var record13 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
2729
2729
|
var sameKeys7 = (value, keys) => {
|
|
2730
|
-
const
|
|
2731
|
-
return
|
|
2730
|
+
const own13 = Object.keys(value);
|
|
2731
|
+
return own13.length === keys.length && own13.every((key, at) => key === keys[at]);
|
|
2732
2732
|
};
|
|
2733
2733
|
var plainText3 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT3 && !CONTROL7.test(value) && (value.match(/[0-9]/g) ?? []).length < 12;
|
|
2734
2734
|
var refuse19 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
@@ -3178,31 +3178,6 @@ var record16 = (value) => value !== null && typeof value === "object" && !Array.
|
|
|
3178
3178
|
function isTapPaymentsTokenUrl(url) {
|
|
3179
3179
|
return url === TAP_PAYMENTS_TOKEN_URL;
|
|
3180
3180
|
}
|
|
3181
|
-
var pin7 = (fields) => Object.freeze({
|
|
3182
|
-
...fields,
|
|
3183
|
-
origins: Object.freeze([...fields.origins]),
|
|
3184
|
-
sessions: Object.freeze({ ...fields.sessions }),
|
|
3185
|
-
key: Object.freeze({ ...fields.key })
|
|
3186
|
-
});
|
|
3187
|
-
var TAP_PAYMENTS_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
3188
|
-
pin7({
|
|
3189
|
-
id: "casefilegame",
|
|
3190
|
-
merchant: "Casefilegame",
|
|
3191
|
-
tapMerchantId: "67977048",
|
|
3192
|
-
publishableKey: "pk_live_ydlRjrWcLXaVvpsSBQKOie86",
|
|
3193
|
-
environment: "production",
|
|
3194
|
-
origins: ["https://checkout.tap.company"],
|
|
3195
|
-
// The WooCommerce plugin's redirect (Plugin-WooCommerce-All-in-one tap.php 567-586, read 2026-10-17)
|
|
3196
|
-
// creates the src_all charge with save_card false and names no agreement, subscription or destinations.
|
|
3197
|
-
sessions: { saveCard: false, agreement: false, subscription: false, destinations: false },
|
|
3198
|
-
key: {
|
|
3199
|
-
spki: "MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAzja2vB+Iyafj2Mm3pFg65z7Yvj9ZeoFLdMBgWFyyjF020r5HSPKVhuZ39uJkjs0U/kWgEpKDzHZAKdtGv36dS33NjMAzYpgFkD8j+9/YWqpvAGRj5nv1b/q7NaiZk3b1wm7aXHJOx5L6rPQf2qDQxhcSNHocU+Uy8wGmGxRRu6QRKN3khaz4o4jJDzqxns4h/ShzHjdZeWIVfpCAyVoED0IESBYrvGEhJeyKnga5XdHdBU2yP8P1huO4RbSKcZv00ZgxVHAQQ9CqArW3TE8SyLLnJPkSpSHHBnIPSQS1z3ld1mImy/zqTd4ltkV6XHpYqVvoPmys2EuZX3pMvCcPGwIBEQ==",
|
|
3200
|
-
sha256: "6eb4e89a1e05a06a39d631f6fb450c052a9cad9935edc1921e84e80207470552",
|
|
3201
|
-
// The shared parser takes exponent 17 only under a pin that names it (rsa-pkcs1v15.js).
|
|
3202
|
-
exponent: 17
|
|
3203
|
-
}
|
|
3204
|
-
})
|
|
3205
|
-
]);
|
|
3206
3181
|
var BODY_LIMIT19 = 16384;
|
|
3207
3182
|
var ROOT_KEYS7 = /* @__PURE__ */ Object.freeze([
|
|
3208
3183
|
"encryptedData",
|
|
@@ -3449,7 +3424,7 @@ var YEAR11 = /^[0-9]{2}$/;
|
|
|
3449
3424
|
var CODE4 = /^[0-9]{3}$/;
|
|
3450
3425
|
var NAME_LIMIT3 = 100;
|
|
3451
3426
|
var NAME_WORD = /[a-z]+/gi;
|
|
3452
|
-
var printable2 = (
|
|
3427
|
+
var printable2 = (text9) => [...text9].every((character) => {
|
|
3453
3428
|
const point = character.codePointAt(0);
|
|
3454
3429
|
return point >= 32 && !(point >= 127 && point <= 159) && point !== 8232 && point !== 8233;
|
|
3455
3430
|
});
|
|
@@ -3458,8 +3433,8 @@ var HOSTNAME = /^(?=.{1,253}$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](
|
|
|
3458
3433
|
var PUBLISHABLE_KEY = /^[A-Za-z0-9]{16,64}$/;
|
|
3459
3434
|
var record18 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
3460
3435
|
var sameKeys8 = (value, keys) => {
|
|
3461
|
-
const
|
|
3462
|
-
return
|
|
3436
|
+
const own13 = Object.keys(value);
|
|
3437
|
+
return own13.length === keys.length && own13.every((key, at) => key === keys[at]);
|
|
3463
3438
|
};
|
|
3464
3439
|
var refuse24 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
3465
3440
|
var CARD23 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
@@ -3795,9 +3770,9 @@ function openpayBodyVerdict(body, url) {
|
|
|
3795
3770
|
}
|
|
3796
3771
|
return CARD24;
|
|
3797
3772
|
}
|
|
3798
|
-
var
|
|
3773
|
+
var pin7 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), publicKeys: Object.freeze([...fields.publicKeys]) });
|
|
3799
3774
|
var OPENPAY_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
3800
|
-
|
|
3775
|
+
pin7({
|
|
3801
3776
|
id: "diario_de_yucatan",
|
|
3802
3777
|
merchant: "Diario de Yucatán",
|
|
3803
3778
|
origins: ["https://www.yucatan.com.mx"],
|
|
@@ -3829,7 +3804,7 @@ var POSTAL_CODE3 = /^[A-Za-z0-9_]{0,16}$/;
|
|
|
3829
3804
|
var COUNTRY4 = /^[A-Z]{2}$/;
|
|
3830
3805
|
var TEXT_LIMIT7 = 256;
|
|
3831
3806
|
var CONTROL10 = /[\u0000-\u001f\u007f]/;
|
|
3832
|
-
var cardLike2 = (
|
|
3807
|
+
var cardLike2 = (text9) => (text9.match(/[0-9]/g) ?? []).length >= 12;
|
|
3833
3808
|
var text5 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT7 && !CONTROL10.test(value) && !cardLike2(value);
|
|
3834
3809
|
var record21 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
3835
3810
|
var own5 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
@@ -3887,15 +3862,15 @@ function poyntBodyVerdict(body) {
|
|
|
3887
3862
|
return refuse26("poynt_body_unsupported");
|
|
3888
3863
|
return CARD25;
|
|
3889
3864
|
}
|
|
3890
|
-
var
|
|
3865
|
+
var pin8 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), storeIds: Object.freeze([...fields.storeIds]) });
|
|
3891
3866
|
var POYNT_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
3892
|
-
|
|
3867
|
+
pin8({
|
|
3893
3868
|
id: "yearning_for_learning",
|
|
3894
3869
|
merchant: "Yearning for Learning Publishing & Coaching",
|
|
3895
3870
|
origins: ["https://ff305485-ba6c-423a-87b0-cebe3f83ffe9.mysimplestore.com"],
|
|
3896
3871
|
storeIds: ["71ac12ed-e61f-4318-95db-db0e7c649d6f"]
|
|
3897
3872
|
}),
|
|
3898
|
-
|
|
3873
|
+
pin8({
|
|
3899
3874
|
id: "timber_ridge_bookkeeping",
|
|
3900
3875
|
merchant: "Timber Ridge Bookkeeping",
|
|
3901
3876
|
origins: ["https://d7d64ac3-0352-4e53-af9a-f6d8e7b5fb71.mysimplestore.com"],
|
|
@@ -4150,11 +4125,11 @@ var LONG_TEXT_LIMIT = BODY_LIMIT25;
|
|
|
4150
4125
|
var record22 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4151
4126
|
var owns6 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
4152
4127
|
var sameKeys9 = (value, keys) => {
|
|
4153
|
-
const
|
|
4154
|
-
return
|
|
4128
|
+
const own13 = Object.keys(value);
|
|
4129
|
+
return own13.length === keys.length && own13.every((key, at) => key === keys[at]);
|
|
4155
4130
|
};
|
|
4156
4131
|
var exact3 = (pattern, value) => typeof value === "string" && pattern.test(value);
|
|
4157
|
-
var printable3 = (
|
|
4132
|
+
var printable3 = (text9) => [...text9].every((character) => {
|
|
4158
4133
|
const point = character.codePointAt(0);
|
|
4159
4134
|
return point >= 32 && !(point >= 127 && point <= 159) && point !== 8232 && point !== 8233;
|
|
4160
4135
|
});
|
|
@@ -4227,7 +4202,7 @@ function companyStore(value) {
|
|
|
4227
4202
|
return record22(value) && sameKeys9(value, COMPANY_KEYS) && whole(value.CompanyNumber, 1) && COMPANY_KEYS.slice(1).every((key) => key.startsWith("Show") ? flag(value[key]) : pageText(value[key]));
|
|
4228
4203
|
}
|
|
4229
4204
|
var SUM_TEXT = /^(?:0*[1-9][0-9]*(?:\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$/;
|
|
4230
|
-
var sumText = (
|
|
4205
|
+
var sumText = (text9, sum) => text9 === null || typeof text9 === "string" && SUM_TEXT.test(text9) && Number.parseFloat(text9) === sum;
|
|
4231
4206
|
function chosenProduct(value) {
|
|
4232
4207
|
return record22(value) && sameKeys9(value, PRODUCT_KEYS) && whole(value.MinQuantity) && whole(value.MaxQuantity) && whole(value.JumpsInQuantity) && value.SelectedBuyQuantity === 1 && Array.isArray(value.QuantityOptions) && value.QuantityOptions.length === 0 && pageText(value.Comments) && flag(value.IsManualSum) && Array.isArray(value.PaymentsOptions) && flag(value.IsCouponActive) && typeof value.ManualPrice === "number" && sumText(value.ManualPriceTxt, value.ManualPrice) && flag(value.IsVatFree) && Array.isArray(value.SpecialPrices) && (value.PreConfiguredPrice === null || typeof value.PreConfiguredPrice === "number") && flag(value.IsPreSelected) && typeof value.CurrentInventory === "number" && flag(value.CheckInventory) && exact3(PRODUCT_ID, value.uid) && pageText(value.imageUrl) && typeof value.name === "string" && pageText(value.name) && pageText(value.description) && typeof value.BasePrice === "number" && typeof value.PriceBeforeDiscount === "number" && whole(value.BaseISOCurrency) && typeof value.PriceToShow === "number" && typeof value.PriceBeforeDiscountToShow === "number" && flag(value.IsCurrent);
|
|
4233
4208
|
}
|
|
@@ -4458,7 +4433,7 @@ var sameKeys10 = (value, keys) => {
|
|
|
4458
4433
|
};
|
|
4459
4434
|
var refuse28 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
4460
4435
|
var CARD27 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
4461
|
-
var printable4 = (
|
|
4436
|
+
var printable4 = (text9) => [...text9].every((character) => {
|
|
4462
4437
|
const point = character.codePointAt(0);
|
|
4463
4438
|
return point >= 32 && !(point >= 127 && point <= 159) && point !== 8232 && point !== 8233;
|
|
4464
4439
|
});
|
|
@@ -4550,8 +4525,8 @@ var POSTAL_CODE4 = /^[A-Za-z0-9 -]{0,16}$/;
|
|
|
4550
4525
|
var CIPHERTEXT_B64 = /^[A-Za-z0-9+/]{341}[AQgw]==$/;
|
|
4551
4526
|
var record24 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4552
4527
|
var sameKeys11 = (value, keys) => {
|
|
4553
|
-
const
|
|
4554
|
-
return
|
|
4528
|
+
const own13 = Object.keys(value);
|
|
4529
|
+
return own13.length === keys.length && own13.every((key, at) => key === keys[at]);
|
|
4555
4530
|
};
|
|
4556
4531
|
var refuse29 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
4557
4532
|
var failed = (code) => (
|
|
@@ -4924,11 +4899,11 @@ function omiseBodyVerdict(body) {
|
|
|
4924
4899
|
return refuse31("omise_body_unsupported");
|
|
4925
4900
|
return CARD30;
|
|
4926
4901
|
}
|
|
4927
|
-
var
|
|
4902
|
+
var pin9 = (fields) => Object.freeze({ ...fields, origins: Object.freeze([...fields.origins]), keys: Object.freeze([...fields.keys]) });
|
|
4928
4903
|
var OMISE_MERCHANT_PINS = /* @__PURE__ */ Object.freeze([
|
|
4929
|
-
|
|
4930
|
-
|
|
4931
|
-
|
|
4904
|
+
pin9({ id: "taejai", merchant: "Taejai", origins: ["https://taejai.com"], keys: ["pkey_53q6mm66esjr563ob0h"] }),
|
|
4905
|
+
pin9({ id: "socialgiver", merchant: "Socialgiver", origins: ["https://www.socialgiver.com"], keys: ["pkey_5d5o2iahksmyrkybemg"] }),
|
|
4906
|
+
pin9({ id: "thireq_pecko_links", merchant: "Thireq Pecko", origins: ["https://linksplus.omise.co"], keys: ["pkey_65w70xniwsinf0gm680"] })
|
|
4932
4907
|
]);
|
|
4933
4908
|
// src/xendit.js
|
|
4934
4909
|
var XENDIT_PSP = "xendit";
|
|
@@ -5020,10 +4995,10 @@ function readBody18(body) {
|
|
|
5020
4995
|
function amountValue(value) {
|
|
5021
4996
|
if (typeof value === "number" && !Number.isFinite(value))
|
|
5022
4997
|
return false;
|
|
5023
|
-
const
|
|
5024
|
-
if (typeof
|
|
4998
|
+
const text9 = typeof value === "number" ? String(value) : value;
|
|
4999
|
+
if (typeof text9 !== "string" || !AMOUNT_TEXT.test(text9))
|
|
5025
5000
|
return false;
|
|
5026
|
-
const amount2 = Number(
|
|
5001
|
+
const amount2 = Number(text9);
|
|
5027
5002
|
return amount2 > 0 && amount2 <= AMOUNT_LIMIT3;
|
|
5028
5003
|
}
|
|
5029
5004
|
function billingDetails(value) {
|
|
@@ -5221,10 +5196,10 @@ function isPaymobPayUrl(url) {
|
|
|
5221
5196
|
var BASE645 = /^[A-Za-z0-9+/]+={0,2}$/;
|
|
5222
5197
|
var BASE64URL = /^[A-Za-z0-9_-]+$/;
|
|
5223
5198
|
var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
5224
|
-
function decodeBase642(
|
|
5225
|
-
if (typeof
|
|
5199
|
+
function decodeBase642(text9, url) {
|
|
5200
|
+
if (typeof text9 !== "string" || text9 === "")
|
|
5226
5201
|
return null;
|
|
5227
|
-
let body =
|
|
5202
|
+
let body = text9;
|
|
5228
5203
|
if (url) {
|
|
5229
5204
|
if (!BASE64URL.test(body) || body.length % 4 === 1)
|
|
5230
5205
|
return null;
|
|
@@ -5257,15 +5232,15 @@ function decodeBase642(text8, url) {
|
|
|
5257
5232
|
function jsonOf(bytes) {
|
|
5258
5233
|
if (!bytes)
|
|
5259
5234
|
return null;
|
|
5260
|
-
let
|
|
5235
|
+
let text9;
|
|
5261
5236
|
try {
|
|
5262
|
-
|
|
5237
|
+
text9 = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
5263
5238
|
}
|
|
5264
5239
|
catch {
|
|
5265
5240
|
return null;
|
|
5266
5241
|
}
|
|
5267
5242
|
try {
|
|
5268
|
-
const value = JSON.parse(
|
|
5243
|
+
const value = JSON.parse(text9);
|
|
5269
5244
|
return record29(value) ? value : null;
|
|
5270
5245
|
}
|
|
5271
5246
|
catch {
|
|
@@ -5366,7 +5341,7 @@ function namesCardValue3(parsed) {
|
|
|
5366
5341
|
return false;
|
|
5367
5342
|
}
|
|
5368
5343
|
function addressBlock(value) {
|
|
5369
|
-
return record29(value) && Object.keys(value).length <= 32 && Object.entries(value).every(([key,
|
|
5344
|
+
return record29(value) && Object.keys(value).length <= 32 && Object.entries(value).every(([key, text9]) => FIELD.test(key) && !CARD_MEMBER4.test(key) && (text9 === null || typeof text9 === "string" && TEXT3.test(text9)));
|
|
5370
5345
|
}
|
|
5371
5346
|
function judgeCardPayment(parsed) {
|
|
5372
5347
|
const source = parsed.source;
|
|
@@ -5864,8 +5839,8 @@ function cardNamed2(key) {
|
|
|
5864
5839
|
const phrase = words.join(" ");
|
|
5865
5840
|
return words.some((word) => CARD_WORDS.includes(word)) || ["security code", "codigo seguridad", "codigo verificacion"].some((said) => phrase.includes(said));
|
|
5866
5841
|
}
|
|
5867
|
-
function carriesCardNumber(
|
|
5868
|
-
for (const [run] of
|
|
5842
|
+
function carriesCardNumber(text9) {
|
|
5843
|
+
for (const [run] of text9.matchAll(/[0-9]+(?:[ ._/,-][0-9]+)*/g)) {
|
|
5869
5844
|
const groups = run.split(/[ ._/,-]/);
|
|
5870
5845
|
for (let first = 0; first < groups.length; first += 1) {
|
|
5871
5846
|
let digits3 = "";
|
|
@@ -5878,17 +5853,17 @@ function carriesCardNumber(text8) {
|
|
|
5878
5853
|
}
|
|
5879
5854
|
return false;
|
|
5880
5855
|
}
|
|
5881
|
-
var wholeCardNumber = (
|
|
5856
|
+
var wholeCardNumber = (text9) => /^[2-6][0-9]{12,18}$/.test(text9) && luhn7(text9);
|
|
5882
5857
|
function membersRefusal(root) {
|
|
5883
5858
|
const pending = [[root, ""]];
|
|
5884
5859
|
while (pending.length > 0) {
|
|
5885
5860
|
const [node, path] = pending.pop();
|
|
5886
|
-
const
|
|
5861
|
+
const own13 = path === "" ? TRANSACTION_MEMBERS : owns7(RECORD_MEMBERS, path) ? RECORD_MEMBERS[path] : null;
|
|
5887
5862
|
for (const [key, child] of Object.entries(node)) {
|
|
5888
5863
|
const at = Array.isArray(node) ? path : path === "" ? key : `${path}.${key}`;
|
|
5889
5864
|
if (at === "checkoutCreditCard")
|
|
5890
5865
|
continue;
|
|
5891
|
-
if (
|
|
5866
|
+
if (own13 !== null && !own13.includes(key))
|
|
5892
5867
|
return true;
|
|
5893
5868
|
if (TEXT_RECORDS.includes(path) && child !== null && typeof child !== "string")
|
|
5894
5869
|
return true;
|
|
@@ -5995,6 +5970,119 @@ function payuLatamBodyVerdict(body, url) {
|
|
|
5995
5970
|
const { code } = judgeBody5(body, target);
|
|
5996
5971
|
return code === null ? CARD34 : refuse35(code);
|
|
5997
5972
|
}
|
|
5973
|
+
// src/pin-payments.js
|
|
5974
|
+
var PIN_PAYMENTS_PSP = "pin_payments";
|
|
5975
|
+
var PIN_PAYMENTS_CARD_HOSTS = /* @__PURE__ */ Object.freeze({ "api.pinpayments.com": "production", "test-api.pinpayments.com": "test" });
|
|
5976
|
+
var PIN_PAYMENTS_CARD_PATH = "/1/cards";
|
|
5977
|
+
var BODY_LIMIT34 = 4096;
|
|
5978
|
+
var CARD_KEYS15 = /* @__PURE__ */ Object.freeze(["name", "number", "cvc", "expiry_month", "expiry_year"]);
|
|
5979
|
+
var ADDRESS_KEYS6 = /* @__PURE__ */ Object.freeze([
|
|
5980
|
+
"address_line1",
|
|
5981
|
+
"address_line2",
|
|
5982
|
+
"address_city",
|
|
5983
|
+
"address_postcode",
|
|
5984
|
+
"address_state",
|
|
5985
|
+
"address_country"
|
|
5986
|
+
]);
|
|
5987
|
+
var KEY2 = "publishable_api_key";
|
|
5988
|
+
var METHOD = "_method";
|
|
5989
|
+
var DOCUMENTED = /* @__PURE__ */ new Set([KEY2, METHOD, ...CARD_KEYS15, ...ADDRESS_KEYS6]);
|
|
5990
|
+
var PUBLISHABLE_KEY2 = /^pk_[A-Za-z0-9_-]{8,64}$/;
|
|
5991
|
+
var CARD_NUMBER17 = /^[0-9]{12,19}$/;
|
|
5992
|
+
var CODE7 = /^[0-9]{3,4}$/;
|
|
5993
|
+
var MONTH18 = /^(?:0?[1-9]|1[0-2])$/;
|
|
5994
|
+
var YEAR19 = /^(?:[0-9]{2}|[0-9]{4})$/;
|
|
5995
|
+
var TEXT_LIMIT13 = 256;
|
|
5996
|
+
var record31 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
5997
|
+
var own11 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
5998
|
+
var refuse36 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
5999
|
+
var CARD35 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
6000
|
+
function luhn8(digits3) {
|
|
6001
|
+
let sum = 0;
|
|
6002
|
+
for (let at = 0; at < digits3.length; at += 1) {
|
|
6003
|
+
let digit = Number(digits3[digits3.length - 1 - at]);
|
|
6004
|
+
if (at % 2 === 1) {
|
|
6005
|
+
digit *= 2;
|
|
6006
|
+
if (digit > 9)
|
|
6007
|
+
digit -= 9;
|
|
6008
|
+
}
|
|
6009
|
+
sum += digit;
|
|
6010
|
+
}
|
|
6011
|
+
return sum % 10 === 0;
|
|
6012
|
+
}
|
|
6013
|
+
function pinPaymentsCardUrl(url) {
|
|
6014
|
+
if (typeof url !== "string" || url.length > 256 || url.includes("?") || url.includes("#"))
|
|
6015
|
+
return null;
|
|
6016
|
+
let parsed;
|
|
6017
|
+
try {
|
|
6018
|
+
parsed = new URL(url);
|
|
6019
|
+
}
|
|
6020
|
+
catch {
|
|
6021
|
+
return null;
|
|
6022
|
+
}
|
|
6023
|
+
if (parsed.href !== url || parsed.protocol !== "https:" || parsed.port || parsed.username || parsed.password)
|
|
6024
|
+
return null;
|
|
6025
|
+
if (!own11(PIN_PAYMENTS_CARD_HOSTS, parsed.hostname) || parsed.pathname !== PIN_PAYMENTS_CARD_PATH)
|
|
6026
|
+
return null;
|
|
6027
|
+
return Object.freeze({ host: parsed.hostname, environment: PIN_PAYMENTS_CARD_HOSTS[parsed.hostname] });
|
|
6028
|
+
}
|
|
6029
|
+
function readBody20(body) {
|
|
6030
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT34)
|
|
6031
|
+
return null;
|
|
6032
|
+
let value;
|
|
6033
|
+
try {
|
|
6034
|
+
value = JSON.parse(body);
|
|
6035
|
+
if (!record31(value) || JSON.stringify(value) !== body)
|
|
6036
|
+
return null;
|
|
6037
|
+
}
|
|
6038
|
+
catch {
|
|
6039
|
+
return null;
|
|
6040
|
+
}
|
|
6041
|
+
return value;
|
|
6042
|
+
}
|
|
6043
|
+
var text8 = (value) => typeof value === "string" && value.length <= TEXT_LIMIT13;
|
|
6044
|
+
var dateValue = (value, shape) => typeof value === "string" && shape.test(value) || Number.isSafeInteger(value) && shape.test(String(value));
|
|
6045
|
+
function isCardBody(value) {
|
|
6046
|
+
if (!Object.keys(value).every((key) => DOCUMENTED.has(key)))
|
|
6047
|
+
return false;
|
|
6048
|
+
if (!CARD_KEYS15.every((key) => own11(value, key)) || !own11(value, KEY2))
|
|
6049
|
+
return false;
|
|
6050
|
+
if (typeof value[KEY2] !== "string" || !PUBLISHABLE_KEY2.test(value[KEY2]))
|
|
6051
|
+
return false;
|
|
6052
|
+
if (own11(value, METHOD) && value[METHOD] !== "POST")
|
|
6053
|
+
return false;
|
|
6054
|
+
if (!text8(value.name) || value.name.trim() === "")
|
|
6055
|
+
return false;
|
|
6056
|
+
if (typeof value.number !== "string" || !CARD_NUMBER17.test(value.number) || !luhn8(value.number))
|
|
6057
|
+
return false;
|
|
6058
|
+
if (typeof value.cvc !== "string" || !CODE7.test(value.cvc))
|
|
6059
|
+
return false;
|
|
6060
|
+
if (!dateValue(value.expiry_month, MONTH18) || !dateValue(value.expiry_year, YEAR19))
|
|
6061
|
+
return false;
|
|
6062
|
+
return ADDRESS_KEYS6.every((key) => !own11(value, key) || value[key] === null || text8(value[key]));
|
|
6063
|
+
}
|
|
6064
|
+
function pinPaymentsBodyVerdict(body, url) {
|
|
6065
|
+
if (url !== void 0 && pinPaymentsCardUrl(url) === null)
|
|
6066
|
+
return refuse36("pin_payments_url_refused");
|
|
6067
|
+
const value = readBody20(body);
|
|
6068
|
+
if (value === null || !isCardBody(value))
|
|
6069
|
+
return refuse36("pin_payments_body_unsupported");
|
|
6070
|
+
return CARD35;
|
|
6071
|
+
}
|
|
6072
|
+
var TOKEN_FACTS = /* @__PURE__ */ Object.freeze([
|
|
6073
|
+
"token",
|
|
6074
|
+
"scheme",
|
|
6075
|
+
"display_number",
|
|
6076
|
+
"issuing_country",
|
|
6077
|
+
"expiry_month",
|
|
6078
|
+
"expiry_year",
|
|
6079
|
+
"name",
|
|
6080
|
+
...ADDRESS_KEYS6,
|
|
6081
|
+
"network_type",
|
|
6082
|
+
"network_format",
|
|
6083
|
+
"customer_token",
|
|
6084
|
+
"primary"
|
|
6085
|
+
]);
|
|
5998
6086
|
// src/registration.js
|
|
5999
6087
|
var PARTS = { psp: "id", definitions: "list", refusedOperations: "list", settlementReadback: "any", exactUrl: "rule", bodyGate: "rule", amount: "rule" };
|
|
6000
6088
|
var PSP_ID = /^[a-z][a-z0-9_]*$/;
|
|
@@ -6043,14 +6131,14 @@ var MIDTRANS_OPERATION = "midtrans.card_request";
|
|
|
6043
6131
|
var MIDTRANS_TOKEN_URL = "https://api.midtrans.com/v2/token";
|
|
6044
6132
|
var MIDTRANS_SANDBOX_TOKEN_URL = "https://api.sandbox.midtrans.com/v2/token";
|
|
6045
6133
|
var MIDTRANS_TOKEN_KEYS = /* @__PURE__ */ Object.freeze(["card_cvv", "card_number", "card_exp_month", "card_exp_year", "installment_term"]);
|
|
6046
|
-
var
|
|
6047
|
-
var
|
|
6134
|
+
var BODY_LIMIT35 = 4096;
|
|
6135
|
+
var CARD_NUMBER18 = /^[0-9]{12,19}$/;
|
|
6048
6136
|
var SECURITY_CODE22 = /^[0-9]{3,4}$/;
|
|
6049
|
-
var
|
|
6050
|
-
var
|
|
6137
|
+
var MONTH19 = /^(?:0[1-9]|1[0-2])$/;
|
|
6138
|
+
var YEAR20 = /^20[0-9]{2}$/;
|
|
6051
6139
|
var TERM = /^[0-9]{1,3}$/;
|
|
6052
|
-
var
|
|
6053
|
-
var
|
|
6140
|
+
var record32 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
6141
|
+
var own12 = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
6054
6142
|
var inOrder6 = (value, keys) => {
|
|
6055
6143
|
let at = 0;
|
|
6056
6144
|
for (const name of Object.keys(value)) {
|
|
@@ -6062,18 +6150,18 @@ var inOrder6 = (value, keys) => {
|
|
|
6062
6150
|
}
|
|
6063
6151
|
return true;
|
|
6064
6152
|
};
|
|
6065
|
-
var
|
|
6066
|
-
var
|
|
6153
|
+
var refuse37 = (code) => Object.freeze({ verdict: "refuse", code });
|
|
6154
|
+
var CARD36 = /* @__PURE__ */ Object.freeze({ verdict: "card" });
|
|
6067
6155
|
function isMidtransTokenUrl(url) {
|
|
6068
6156
|
return url === MIDTRANS_TOKEN_URL || url === MIDTRANS_SANDBOX_TOKEN_URL;
|
|
6069
6157
|
}
|
|
6070
|
-
function
|
|
6071
|
-
if (typeof body !== "string" || body === "" || body.length >
|
|
6158
|
+
function readBody21(body) {
|
|
6159
|
+
if (typeof body !== "string" || body === "" || body.length > BODY_LIMIT35)
|
|
6072
6160
|
return null;
|
|
6073
6161
|
let value;
|
|
6074
6162
|
try {
|
|
6075
6163
|
value = JSON.parse(body);
|
|
6076
|
-
if (!
|
|
6164
|
+
if (!record32(value) || JSON.stringify(value) !== body)
|
|
6077
6165
|
return null;
|
|
6078
6166
|
}
|
|
6079
6167
|
catch {
|
|
@@ -6082,20 +6170,20 @@ function readBody20(body) {
|
|
|
6082
6170
|
return value;
|
|
6083
6171
|
}
|
|
6084
6172
|
function midtransBodyVerdict(body) {
|
|
6085
|
-
const value =
|
|
6173
|
+
const value = readBody21(body);
|
|
6086
6174
|
if (value === null || !inOrder6(value, MIDTRANS_TOKEN_KEYS)) {
|
|
6087
|
-
if (
|
|
6088
|
-
return
|
|
6089
|
-
return
|
|
6175
|
+
if (record32(value) && (own12(value, "token_id") || own12(value, "two_click")) && !own12(value, "card_number"))
|
|
6176
|
+
return refuse37("midtrans_saved_card");
|
|
6177
|
+
return refuse37("midtrans_body_unsupported");
|
|
6090
6178
|
}
|
|
6091
|
-
if (!
|
|
6092
|
-
return
|
|
6179
|
+
if (!own12(value, "card_cvv") || !own12(value, "card_number") || !own12(value, "card_exp_month") || !own12(value, "card_exp_year")) {
|
|
6180
|
+
return refuse37("midtrans_body_unsupported");
|
|
6093
6181
|
}
|
|
6094
|
-
if (typeof value.card_cvv !== "string" || !SECURITY_CODE22.test(value.card_cvv) || typeof value.card_number !== "string" || !
|
|
6095
|
-
return
|
|
6096
|
-
if (
|
|
6097
|
-
return
|
|
6098
|
-
return
|
|
6182
|
+
if (typeof value.card_cvv !== "string" || !SECURITY_CODE22.test(value.card_cvv) || typeof value.card_number !== "string" || !CARD_NUMBER18.test(value.card_number) || typeof value.card_exp_month !== "string" || !MONTH19.test(value.card_exp_month) || typeof value.card_exp_year !== "string" || !YEAR20.test(value.card_exp_year))
|
|
6183
|
+
return refuse37("midtrans_body_unsupported");
|
|
6184
|
+
if (own12(value, "installment_term") && (typeof value.installment_term !== "string" || !TERM.test(value.installment_term)))
|
|
6185
|
+
return refuse37("midtrans_body_unsupported");
|
|
6186
|
+
return CARD36;
|
|
6099
6187
|
}
|
|
6100
6188
|
var midtrans_default = /* @__PURE__ */ registerProcessor({
|
|
6101
6189
|
psp: MIDTRANS_PSP,
|
|
@@ -6277,6 +6365,8 @@ function processorGate(recognizer, url, body) {
|
|
|
6277
6365
|
return { verdict: "refuse", code: "paymob_url_refused" };
|
|
6278
6366
|
return paymobBodyVerdict(body);
|
|
6279
6367
|
}
|
|
6368
|
+
if (recognizer && recognizer.psp === PIN_PAYMENTS_PSP)
|
|
6369
|
+
return pinPaymentsBodyVerdict(body, url);
|
|
6280
6370
|
if (recognizer && recognizer.psp === GRAVY_PSP)
|
|
6281
6371
|
return gravyBodyVerdict(body);
|
|
6282
6372
|
if (recognizer && recognizer.psp === MONERIS_PSP) {
|
|
@@ -6402,7 +6492,7 @@ function splitCardLeg(recognizer, body) {
|
|
|
6402
6492
|
const absorb = list(split.absorb);
|
|
6403
6493
|
const pass = list(split.pass);
|
|
6404
6494
|
const sibling = list(split.siblingKeys);
|
|
6405
|
-
const
|
|
6495
|
+
const own13 = [];
|
|
6406
6496
|
const seen = /* @__PURE__ */ new Set();
|
|
6407
6497
|
for (const chunk of body.split("&")) {
|
|
6408
6498
|
const eq = chunk.indexOf("=");
|
|
@@ -6419,13 +6509,13 @@ function splitCardLeg(recognizer, body) {
|
|
|
6419
6509
|
return null;
|
|
6420
6510
|
seen.add(key);
|
|
6421
6511
|
if (!sibling.includes(key))
|
|
6422
|
-
|
|
6512
|
+
own13.push(key);
|
|
6423
6513
|
}
|
|
6424
|
-
if (
|
|
6514
|
+
if (own13.length === 0)
|
|
6425
6515
|
return null;
|
|
6426
|
-
if (
|
|
6516
|
+
if (own13.every((key) => absorb.includes(key)))
|
|
6427
6517
|
return "absorb";
|
|
6428
|
-
if (
|
|
6518
|
+
if (own13.every((key) => pass.includes(key)))
|
|
6429
6519
|
return "pass";
|
|
6430
6520
|
return null;
|
|
6431
6521
|
}
|