@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.
Files changed (58) hide show
  1. package/README.md +1 -1
  2. package/dist/country.cjs +164 -4
  3. package/dist/country.cjs.map +1 -1
  4. package/dist/country.d.cts +135 -7
  5. package/dist/country.d.ts +135 -7
  6. package/dist/country.mjs +152 -4
  7. package/dist/country.mjs.map +1 -1
  8. package/dist/fraud-engine.cjs +2 -1
  9. package/dist/fraud-engine.cjs.map +1 -1
  10. package/dist/fraud-engine.mjs +2 -1
  11. package/dist/fraud-engine.mjs.map +1 -1
  12. package/dist/index.cjs +3 -2
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +1 -0
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.mjs +3 -2
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/orders.cjs +2 -1
  19. package/dist/orders.cjs.map +1 -1
  20. package/dist/orders.d.cts +2 -0
  21. package/dist/orders.d.ts +2 -0
  22. package/dist/orders.mjs +2 -1
  23. package/dist/orders.mjs.map +1 -1
  24. package/dist/prices.cjs +2 -1
  25. package/dist/prices.cjs.map +1 -1
  26. package/dist/prices.d.cts +1 -0
  27. package/dist/prices.d.ts +1 -0
  28. package/dist/prices.mjs +2 -1
  29. package/dist/prices.mjs.map +1 -1
  30. package/dist/profile.cjs +2 -1
  31. package/dist/profile.cjs.map +1 -1
  32. package/dist/profile.d.cts +2 -0
  33. package/dist/profile.d.ts +2 -0
  34. package/dist/profile.mjs +2 -1
  35. package/dist/profile.mjs.map +1 -1
  36. package/dist/qr-parsers.cjs +26 -2
  37. package/dist/qr-parsers.cjs.map +1 -1
  38. package/dist/qr-parsers.d.cts +1 -0
  39. package/dist/qr-parsers.d.ts +1 -0
  40. package/dist/qr-parsers.mjs +26 -2
  41. package/dist/qr-parsers.mjs.map +1 -1
  42. package/dist/react.cjs +2 -1
  43. package/dist/react.cjs.map +1 -1
  44. package/dist/react.d.cts +6 -0
  45. package/dist/react.d.ts +6 -0
  46. package/dist/react.mjs +2 -1
  47. package/dist/react.mjs.map +1 -1
  48. package/dist/stake.cjs +2 -1
  49. package/dist/stake.cjs.map +1 -1
  50. package/dist/stake.d.cts +1 -0
  51. package/dist/stake.d.ts +1 -0
  52. package/dist/stake.mjs +2 -1
  53. package/dist/stake.mjs.map +1 -1
  54. package/dist/zkkyc.cjs +2 -1
  55. package/dist/zkkyc.cjs.map +1 -1
  56. package/dist/zkkyc.mjs +2 -1
  57. package/dist/zkkyc.mjs.map +1 -1
  58. 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 tokens = deserializeCompoundPaymentId(rest).map((part) => part.trim()).filter((part) => part.length > 0);
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,