@p2pdotme/sdk 1.2.23 → 1.2.25
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/README.md +1 -1
- package/dist/country.cjs +164 -4
- package/dist/country.cjs.map +1 -1
- package/dist/country.d.cts +135 -7
- package/dist/country.d.ts +135 -7
- package/dist/country.mjs +152 -4
- package/dist/country.mjs.map +1 -1
- package/dist/fraud-engine.cjs +2 -1
- package/dist/fraud-engine.cjs.map +1 -1
- package/dist/fraud-engine.mjs +2 -1
- package/dist/fraud-engine.mjs.map +1 -1
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/dist/orders.cjs +2 -1
- package/dist/orders.cjs.map +1 -1
- package/dist/orders.d.cts +2 -0
- package/dist/orders.d.ts +2 -0
- package/dist/orders.mjs +2 -1
- package/dist/orders.mjs.map +1 -1
- package/dist/prices.cjs +2 -1
- package/dist/prices.cjs.map +1 -1
- package/dist/prices.d.cts +1 -0
- package/dist/prices.d.ts +1 -0
- package/dist/prices.mjs +2 -1
- package/dist/prices.mjs.map +1 -1
- package/dist/profile.cjs +2 -1
- package/dist/profile.cjs.map +1 -1
- package/dist/profile.d.cts +2 -0
- package/dist/profile.d.ts +2 -0
- package/dist/profile.mjs +2 -1
- package/dist/profile.mjs.map +1 -1
- package/dist/qr-parsers.cjs +26 -2
- package/dist/qr-parsers.cjs.map +1 -1
- package/dist/qr-parsers.d.cts +1 -0
- package/dist/qr-parsers.d.ts +1 -0
- package/dist/qr-parsers.mjs +26 -2
- package/dist/qr-parsers.mjs.map +1 -1
- package/dist/react.cjs +2 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +6 -0
- package/dist/react.d.ts +6 -0
- package/dist/react.mjs +2 -1
- package/dist/react.mjs.map +1 -1
- package/dist/stake.cjs +2 -1
- package/dist/stake.cjs.map +1 -1
- package/dist/stake.d.cts +1 -0
- package/dist/stake.d.ts +1 -0
- package/dist/stake.mjs +2 -1
- package/dist/stake.mjs.map +1 -1
- package/dist/zkkyc.cjs +2 -1
- package/dist/zkkyc.cjs.map +1 -1
- package/dist/zkkyc.mjs +2 -1
- package/dist/zkkyc.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -162,7 +162,7 @@ All hooks read from the nearest `<SdkProvider>`:
|
|
|
162
162
|
|
|
163
163
|
## Supported currencies
|
|
164
164
|
|
|
165
|
-
`INR` · `IDR` · `BRL` · `ARS` · `MEX` · `VEN` · `BOB` · `EUR` · `NGN` · `USD` · `COP` · `ECU`
|
|
165
|
+
`INR` · `IDR` · `BRL` · `ARS` · `MEX` · `VEN` · `BOB` · `EUR` · `NGN` · `USD` · `COP` · `ECU` · `PEN` · `PHP` · `CUP` · `KES`
|
|
166
166
|
|
|
167
167
|
## Development
|
|
168
168
|
|
package/dist/country.cjs
CHANGED
|
@@ -23,6 +23,10 @@ __export(country_exports, {
|
|
|
23
23
|
COUNTRY_OPTIONS: () => COUNTRY_OPTIONS,
|
|
24
24
|
CURRENCY: () => CURRENCY,
|
|
25
25
|
CURRENCY_CODES: () => CURRENCY_CODES,
|
|
26
|
+
IDR_BANK_ACCOUNT_PLACEHOLDER: () => IDR_BANK_ACCOUNT_PLACEHOLDER,
|
|
27
|
+
IDR_BANK_ACCOUNT_VALIDATION_ERROR: () => IDR_BANK_ACCOUNT_VALIDATION_ERROR,
|
|
28
|
+
IDR_PAYMENT_PROVIDERS: () => IDR_PAYMENT_PROVIDERS,
|
|
29
|
+
IDR_PLACEHOLDER: () => IDR_PLACEHOLDER,
|
|
26
30
|
PACKED_PAYMENT_ID_SEP: () => PACKED_PAYMENT_ID_SEP,
|
|
27
31
|
PAYMENT_ID_FIELDS: () => PAYMENT_ID_FIELDS,
|
|
28
32
|
assignPaymentIdToFieldValues: () => assignPaymentIdToFieldValues,
|
|
@@ -31,11 +35,14 @@ __export(country_exports, {
|
|
|
31
35
|
formatCompoundPaymentIdForDisplay: () => formatCompoundPaymentIdForDisplay,
|
|
32
36
|
formatStoredPaymentIdForDisplay: () => formatStoredPaymentIdForDisplay,
|
|
33
37
|
getCountryOption: () => getCountryOption,
|
|
38
|
+
getIndonesianPaymentProviderType: () => getIndonesianPaymentProviderType,
|
|
34
39
|
getPayQrPayload: () => getPayQrPayload,
|
|
35
40
|
getStoredQrPayload: () => getStoredQrPayload,
|
|
36
41
|
getTransferWarning: () => getTransferWarning,
|
|
37
42
|
isNepalFonepayQr: () => isNepalFonepayQr,
|
|
38
43
|
packStoredPaymentId: () => packStoredPaymentId,
|
|
44
|
+
parseIndonesianPaymentId: () => parseIndonesianPaymentId,
|
|
45
|
+
resolveIndonesianStoredPaymentIdDisplay: () => resolveIndonesianStoredPaymentIdDisplay,
|
|
39
46
|
serializeCompoundPaymentId: () => serializeCompoundPaymentId,
|
|
40
47
|
unpackPackedPaymentId: () => unpackPackedPaymentId,
|
|
41
48
|
uploadsPaymentQR: () => uploadsPaymentQR,
|
|
@@ -51,7 +58,12 @@ __export(country_exports, {
|
|
|
51
58
|
validateEcuadorianAccountName: () => validateEcuadorianAccountName,
|
|
52
59
|
validateEcuadorianAccountNumber: () => validateEcuadorianAccountNumber,
|
|
53
60
|
validateEcuadorianCedula: () => validateEcuadorianCedula,
|
|
61
|
+
validateIndonesianBankAccount: () => validateIndonesianBankAccount,
|
|
62
|
+
validateIndonesianPaymentId: () => validateIndonesianPaymentId,
|
|
54
63
|
validateIndonesianPhoneNumber: () => validateIndonesianPhoneNumber,
|
|
64
|
+
validateIndonesianStoredPaymentId: () => validateIndonesianStoredPaymentId,
|
|
65
|
+
validateKenyanPhone: () => validateKenyanPhone,
|
|
66
|
+
validateKenyanTill: () => validateKenyanTill,
|
|
55
67
|
validateMexicanPaymentId: () => validateMexicanPaymentId,
|
|
56
68
|
validateNigerianAccountName: () => validateNigerianAccountName,
|
|
57
69
|
validateNigerianAccountNumber: () => validateNigerianAccountNumber,
|
|
@@ -89,7 +101,8 @@ var CURRENCY = {
|
|
|
89
101
|
CUP: "CUP",
|
|
90
102
|
ECU: "ECU",
|
|
91
103
|
PEN: "PEN",
|
|
92
|
-
PHP: "PHP"
|
|
104
|
+
PHP: "PHP",
|
|
105
|
+
KES: "KES"
|
|
93
106
|
};
|
|
94
107
|
var CURRENCY_CODES = Object.values(CURRENCY);
|
|
95
108
|
|
|
@@ -642,12 +655,82 @@ var EUR_COUNTRY_OPTION = {
|
|
|
642
655
|
// src/country/currencies/idr.ts
|
|
643
656
|
var IDR_PLACEHOLDER = "8123456789";
|
|
644
657
|
var IDR_VALIDATION_ERROR = "Please enter a valid Indonesian phone number (e.g., 8123456789)";
|
|
658
|
+
var IDR_BANK_ACCOUNT_PLACEHOLDER = "1234567890";
|
|
659
|
+
var IDR_BANK_ACCOUNT_VALIDATION_ERROR = "Please enter a valid Indonesian bank account number (8-18 digits)";
|
|
645
660
|
function validateIndonesianPhoneNumber(phoneNumber) {
|
|
646
661
|
if (!phoneNumber || phoneNumber.trim().length === 0) return false;
|
|
647
662
|
if (/[a-zA-Z]/.test(phoneNumber)) return false;
|
|
648
663
|
const cleaned = phoneNumber.replace(/\D/g, "");
|
|
649
664
|
return /^\d{9,12}$/.test(cleaned);
|
|
650
665
|
}
|
|
666
|
+
function validateIndonesianBankAccount(accountNumber) {
|
|
667
|
+
if (!accountNumber || accountNumber.trim().length === 0) return false;
|
|
668
|
+
if (/[a-zA-Z]/.test(accountNumber)) return false;
|
|
669
|
+
const cleaned = accountNumber.replace(/[\s-]/g, "");
|
|
670
|
+
return /^\d{8,18}$/.test(cleaned);
|
|
671
|
+
}
|
|
672
|
+
var IDR_PAYMENT_PROVIDERS = [
|
|
673
|
+
{ name: "GoPay", type: "e-wallet" },
|
|
674
|
+
{ name: "DANA", type: "e-wallet" },
|
|
675
|
+
{ name: "ShopeePay", type: "e-wallet" },
|
|
676
|
+
{ name: "OVO", type: "e-wallet" },
|
|
677
|
+
{ name: "LinkAja", type: "e-wallet" },
|
|
678
|
+
{ name: "iSaku", type: "e-wallet" },
|
|
679
|
+
{ name: "Sakuku", type: "e-wallet" },
|
|
680
|
+
{ name: "AstraPay", type: "e-wallet" },
|
|
681
|
+
{ name: "Bank Jago", type: "bank" },
|
|
682
|
+
{ name: "BCA", type: "bank" },
|
|
683
|
+
{ name: "Mandiri", type: "bank" },
|
|
684
|
+
{ name: "BRI", type: "bank" },
|
|
685
|
+
{ name: "BNI", type: "bank" },
|
|
686
|
+
{ name: "CIMB Niaga", type: "bank" },
|
|
687
|
+
{ name: "Permata Bank", type: "bank" },
|
|
688
|
+
{ name: "SeaBank", type: "bank" }
|
|
689
|
+
];
|
|
690
|
+
function getIndonesianPaymentProviderType(name) {
|
|
691
|
+
const normalized = name.trim().toLowerCase();
|
|
692
|
+
if (!normalized) return null;
|
|
693
|
+
const match = IDR_PAYMENT_PROVIDERS.find((option) => option.name.toLowerCase() === normalized);
|
|
694
|
+
return match?.type ?? null;
|
|
695
|
+
}
|
|
696
|
+
function parseIndonesianPaymentId(paymentId) {
|
|
697
|
+
const sepIndex = paymentId.indexOf("|");
|
|
698
|
+
if (sepIndex < 0) return null;
|
|
699
|
+
const provider = paymentId.slice(0, sepIndex).trim();
|
|
700
|
+
const value = paymentId.slice(sepIndex + 1).trim();
|
|
701
|
+
const type = getIndonesianPaymentProviderType(provider);
|
|
702
|
+
if (!type || !value) return null;
|
|
703
|
+
return { provider, type, value };
|
|
704
|
+
}
|
|
705
|
+
function resolveIndonesianStoredPaymentIdDisplay(currency, paymentId) {
|
|
706
|
+
if (currency !== CURRENCY.IDR) return null;
|
|
707
|
+
const parsed = parseIndonesianPaymentId(paymentId);
|
|
708
|
+
if (!parsed) return null;
|
|
709
|
+
const isBank = parsed.type === "bank";
|
|
710
|
+
const paymentAddressName = isBank ? "ACCOUNT_NUMBER" : "PHONE_NUMBER";
|
|
711
|
+
return {
|
|
712
|
+
paymentAddressName,
|
|
713
|
+
parts: [
|
|
714
|
+
{ key: "provider", label: "Payment Method", labelKey: "PAYMENT_METHOD", value: parsed.provider },
|
|
715
|
+
{
|
|
716
|
+
key: "account",
|
|
717
|
+
label: isBank ? "Account Number" : "Phone Number",
|
|
718
|
+
labelKey: paymentAddressName,
|
|
719
|
+
value: parsed.value
|
|
720
|
+
}
|
|
721
|
+
],
|
|
722
|
+
display: `${parsed.provider} \xB7 ${parsed.value}`,
|
|
723
|
+
copyValue: parsed.value
|
|
724
|
+
};
|
|
725
|
+
}
|
|
726
|
+
function validateIndonesianPaymentId(providerName, value) {
|
|
727
|
+
return getIndonesianPaymentProviderType(providerName) === "bank" ? validateIndonesianBankAccount(value) : validateIndonesianPhoneNumber(value);
|
|
728
|
+
}
|
|
729
|
+
function validateIndonesianStoredPaymentId(paymentId) {
|
|
730
|
+
const parsed = parseIndonesianPaymentId(paymentId);
|
|
731
|
+
if (!parsed) return false;
|
|
732
|
+
return validateIndonesianPaymentId(parsed.provider, parsed.value);
|
|
733
|
+
}
|
|
651
734
|
var IDR_PAYMENT_FIELDS = [
|
|
652
735
|
{
|
|
653
736
|
key: "phone",
|
|
@@ -722,6 +805,62 @@ var INR_COUNTRY_OPTION = {
|
|
|
722
805
|
}
|
|
723
806
|
};
|
|
724
807
|
|
|
808
|
+
// src/country/currencies/kes.ts
|
|
809
|
+
var KES_PHONE_PLACEHOLDER = "0712345678";
|
|
810
|
+
var KES_TILL_PLACEHOLDER = "123456";
|
|
811
|
+
var KES_PHONE_VALIDATION_ERROR = "Please enter a valid M-Pesa phone number";
|
|
812
|
+
var KES_TILL_VALIDATION_ERROR = "Please enter a valid M-Pesa till number";
|
|
813
|
+
function validateKenyanPhone(phone) {
|
|
814
|
+
if (!phone || phone.trim().length === 0) return false;
|
|
815
|
+
const cleaned = phone.trim().replace(/\D/g, "");
|
|
816
|
+
return /^254[17]\d{8}$/.test(cleaned) || /^0[17]\d{8}$/.test(cleaned) || /^[17]\d{8}$/.test(cleaned);
|
|
817
|
+
}
|
|
818
|
+
function validateKenyanTill(till) {
|
|
819
|
+
if (!till || till.trim().length === 0) return false;
|
|
820
|
+
const cleaned = till.trim().replace(/\D/g, "");
|
|
821
|
+
return /^\d{5,7}$/.test(cleaned);
|
|
822
|
+
}
|
|
823
|
+
var KES_PAYMENT_FIELDS = [
|
|
824
|
+
{
|
|
825
|
+
key: "phone",
|
|
826
|
+
label: "PHONE_NUMBER",
|
|
827
|
+
placeholder: KES_PHONE_PLACEHOLDER,
|
|
828
|
+
displayLabel: "Phone Number",
|
|
829
|
+
validate: validateKenyanPhone,
|
|
830
|
+
validationErrorMessage: KES_PHONE_VALIDATION_ERROR,
|
|
831
|
+
optional: true
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
key: "till",
|
|
835
|
+
label: "TILL_NUMBER",
|
|
836
|
+
placeholder: KES_TILL_PLACEHOLDER,
|
|
837
|
+
displayLabel: "Till Number",
|
|
838
|
+
validate: validateKenyanTill,
|
|
839
|
+
validationErrorMessage: KES_TILL_VALIDATION_ERROR,
|
|
840
|
+
optional: true
|
|
841
|
+
}
|
|
842
|
+
];
|
|
843
|
+
var KES_COUNTRY_OPTION = {
|
|
844
|
+
country: "Kenya",
|
|
845
|
+
currency: CURRENCY.KES,
|
|
846
|
+
symbolNative: "KSh",
|
|
847
|
+
locale: "en-KE",
|
|
848
|
+
paymentMethod: "MPESA",
|
|
849
|
+
paymentAddressName: "MPESA_DETAILS",
|
|
850
|
+
timezone: "Africa/Nairobi",
|
|
851
|
+
timezone_name: "EAT",
|
|
852
|
+
flag: "\u{1F1F0}\u{1F1EA}",
|
|
853
|
+
flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1f0-1f1ea.png",
|
|
854
|
+
phoneCode: "+254",
|
|
855
|
+
telegramSupportChannel: "https://t.me/p2pmekenya",
|
|
856
|
+
twitterUsername: "p2pmekenya",
|
|
857
|
+
smsCountryCodes: ["KE"],
|
|
858
|
+
precision: 2,
|
|
859
|
+
isAlpha: true,
|
|
860
|
+
disabled: false,
|
|
861
|
+
disabledPaymentTypes: ["PAY"]
|
|
862
|
+
};
|
|
863
|
+
|
|
725
864
|
// src/country/currencies/mex.ts
|
|
726
865
|
var MEX_PLACEHOLDER = "012345678901234567";
|
|
727
866
|
var MEX_VALIDATION_ERROR = "Please enter a valid CLABE (18 digits), card number, or phone number";
|
|
@@ -1174,7 +1313,8 @@ var PAYMENT_ID_FIELDS = {
|
|
|
1174
1313
|
CUP: CUP_PAYMENT_FIELDS,
|
|
1175
1314
|
ECU: ECU_PAYMENT_FIELDS,
|
|
1176
1315
|
PEN: PEN_PAYMENT_FIELDS,
|
|
1177
|
-
PHP: PHP_PAYMENT_FIELDS
|
|
1316
|
+
PHP: PHP_PAYMENT_FIELDS,
|
|
1317
|
+
KES: KES_PAYMENT_FIELDS
|
|
1178
1318
|
};
|
|
1179
1319
|
|
|
1180
1320
|
// src/country/countries.ts
|
|
@@ -1193,7 +1333,8 @@ var COUNTRY_OPTIONS = [
|
|
|
1193
1333
|
PEN_COUNTRY_OPTION,
|
|
1194
1334
|
PHP_COUNTRY_OPTION,
|
|
1195
1335
|
EUR_COUNTRY_OPTION,
|
|
1196
|
-
USD_COUNTRY_OPTION
|
|
1336
|
+
USD_COUNTRY_OPTION,
|
|
1337
|
+
KES_COUNTRY_OPTION
|
|
1197
1338
|
];
|
|
1198
1339
|
function getCountryOption(currency) {
|
|
1199
1340
|
if (!currency) return void 0;
|
|
@@ -1253,7 +1394,14 @@ function assignPaymentIdToFieldValues(fields, paymentId) {
|
|
|
1253
1394
|
if (!paymentId) return result;
|
|
1254
1395
|
const { rest } = unpackPackedPaymentId(paymentId);
|
|
1255
1396
|
if (!rest) return result;
|
|
1256
|
-
const
|
|
1397
|
+
const rawParts = deserializeCompoundPaymentId(rest).map((part) => part.trim());
|
|
1398
|
+
if (rawParts.length === fields.length) {
|
|
1399
|
+
fields.forEach((field, i) => {
|
|
1400
|
+
result[field.key] = rawParts[i] ?? "";
|
|
1401
|
+
});
|
|
1402
|
+
return result;
|
|
1403
|
+
}
|
|
1404
|
+
const tokens = rawParts.filter((part) => part.length > 0);
|
|
1257
1405
|
const claimed = /* @__PURE__ */ new Set();
|
|
1258
1406
|
for (const token of tokens) {
|
|
1259
1407
|
const field = fields.find((item) => !claimed.has(item.key) && item.validate(token));
|
|
@@ -1386,6 +1534,10 @@ function formatStoredPaymentIdForDisplay(currency, paymentId) {
|
|
|
1386
1534
|
COUNTRY_OPTIONS,
|
|
1387
1535
|
CURRENCY,
|
|
1388
1536
|
CURRENCY_CODES,
|
|
1537
|
+
IDR_BANK_ACCOUNT_PLACEHOLDER,
|
|
1538
|
+
IDR_BANK_ACCOUNT_VALIDATION_ERROR,
|
|
1539
|
+
IDR_PAYMENT_PROVIDERS,
|
|
1540
|
+
IDR_PLACEHOLDER,
|
|
1389
1541
|
PACKED_PAYMENT_ID_SEP,
|
|
1390
1542
|
PAYMENT_ID_FIELDS,
|
|
1391
1543
|
assignPaymentIdToFieldValues,
|
|
@@ -1394,11 +1546,14 @@ function formatStoredPaymentIdForDisplay(currency, paymentId) {
|
|
|
1394
1546
|
formatCompoundPaymentIdForDisplay,
|
|
1395
1547
|
formatStoredPaymentIdForDisplay,
|
|
1396
1548
|
getCountryOption,
|
|
1549
|
+
getIndonesianPaymentProviderType,
|
|
1397
1550
|
getPayQrPayload,
|
|
1398
1551
|
getStoredQrPayload,
|
|
1399
1552
|
getTransferWarning,
|
|
1400
1553
|
isNepalFonepayQr,
|
|
1401
1554
|
packStoredPaymentId,
|
|
1555
|
+
parseIndonesianPaymentId,
|
|
1556
|
+
resolveIndonesianStoredPaymentIdDisplay,
|
|
1402
1557
|
serializeCompoundPaymentId,
|
|
1403
1558
|
unpackPackedPaymentId,
|
|
1404
1559
|
uploadsPaymentQR,
|
|
@@ -1414,7 +1569,12 @@ function formatStoredPaymentIdForDisplay(currency, paymentId) {
|
|
|
1414
1569
|
validateEcuadorianAccountName,
|
|
1415
1570
|
validateEcuadorianAccountNumber,
|
|
1416
1571
|
validateEcuadorianCedula,
|
|
1572
|
+
validateIndonesianBankAccount,
|
|
1573
|
+
validateIndonesianPaymentId,
|
|
1417
1574
|
validateIndonesianPhoneNumber,
|
|
1575
|
+
validateIndonesianStoredPaymentId,
|
|
1576
|
+
validateKenyanPhone,
|
|
1577
|
+
validateKenyanTill,
|
|
1418
1578
|
validateMexicanPaymentId,
|
|
1419
1579
|
validateNigerianAccountName,
|
|
1420
1580
|
validateNigerianAccountNumber,
|