@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
@@ -21,6 +21,7 @@ declare const CURRENCY: {
21
21
  readonly ECU: "ECU";
22
22
  readonly PEN: "PEN";
23
23
  readonly PHP: "PHP";
24
+ readonly KES: "KES";
24
25
  };
25
26
  /** Union of supported currency codes. */
26
27
  type CurrencyCode = (typeof CURRENCY)[keyof typeof CURRENCY];
@@ -150,6 +151,128 @@ declare function validateVenezuelanQr(payload: string): boolean;
150
151
  */
151
152
  declare function isNepalFonepayQr(payload: string): boolean;
152
153
 
154
+ declare const IDR_PLACEHOLDER = "8123456789";
155
+ declare const IDR_BANK_ACCOUNT_PLACEHOLDER = "1234567890";
156
+ declare const IDR_BANK_ACCOUNT_VALIDATION_ERROR = "Please enter a valid Indonesian bank account number (8-18 digits)";
157
+ /**
158
+ * Validates Indonesian phone number.
159
+ * Validates just the number part (9-12 digits).
160
+ */
161
+ declare function validateIndonesianPhoneNumber(phoneNumber: string): boolean;
162
+ /**
163
+ * Validates Indonesian bank account number.
164
+ * Digits only (spaces/dashes tolerated), 8-18 digits to cover BCA (10), Mandiri (13),
165
+ * BRI (15), BNI (10), CIMB Niaga (13-14), Permata (16), SeaBank (10-12), Bank Jago (10).
166
+ */
167
+ declare function validateIndonesianBankAccount(accountNumber: string): boolean;
168
+ type IndonesianPaymentProviderType = "bank" | "e-wallet";
169
+ interface IndonesianPaymentProviderOption {
170
+ /** Display name for the consumer-rendered provider list. */
171
+ readonly name: string;
172
+ readonly type: IndonesianPaymentProviderType;
173
+ }
174
+ /** E-wallets and banks a seller can be paid through in Indonesia. */
175
+ declare const IDR_PAYMENT_PROVIDERS: readonly [{
176
+ readonly name: "GoPay";
177
+ readonly type: "e-wallet";
178
+ }, {
179
+ readonly name: "DANA";
180
+ readonly type: "e-wallet";
181
+ }, {
182
+ readonly name: "ShopeePay";
183
+ readonly type: "e-wallet";
184
+ }, {
185
+ readonly name: "OVO";
186
+ readonly type: "e-wallet";
187
+ }, {
188
+ readonly name: "LinkAja";
189
+ readonly type: "e-wallet";
190
+ }, {
191
+ readonly name: "iSaku";
192
+ readonly type: "e-wallet";
193
+ }, {
194
+ readonly name: "Sakuku";
195
+ readonly type: "e-wallet";
196
+ }, {
197
+ readonly name: "AstraPay";
198
+ readonly type: "e-wallet";
199
+ }, {
200
+ readonly name: "Bank Jago";
201
+ readonly type: "bank";
202
+ }, {
203
+ readonly name: "BCA";
204
+ readonly type: "bank";
205
+ }, {
206
+ readonly name: "Mandiri";
207
+ readonly type: "bank";
208
+ }, {
209
+ readonly name: "BRI";
210
+ readonly type: "bank";
211
+ }, {
212
+ readonly name: "BNI";
213
+ readonly type: "bank";
214
+ }, {
215
+ readonly name: "CIMB Niaga";
216
+ readonly type: "bank";
217
+ }, {
218
+ readonly name: "Permata Bank";
219
+ readonly type: "bank";
220
+ }, {
221
+ readonly name: "SeaBank";
222
+ readonly type: "bank";
223
+ }];
224
+ /**
225
+ * Resolves whether a provider name is a bank or an e-wallet (case-insensitive).
226
+ * Returns `null` when the name is not in `IDR_PAYMENT_PROVIDERS`.
227
+ */
228
+ declare function getIndonesianPaymentProviderType(name: string): IndonesianPaymentProviderType | null;
229
+ interface IndonesianPaymentIdParts {
230
+ readonly provider: string;
231
+ readonly type: IndonesianPaymentProviderType;
232
+ /** Bank account number or e-wallet phone number. */
233
+ readonly value: string;
234
+ }
235
+ /**
236
+ * Parses a stored Indonesian payment ID packed as `Provider|number`.
237
+ * Returns `null` when the value is not packed or the provider is unknown.
238
+ */
239
+ declare function parseIndonesianPaymentId(paymentId: string): IndonesianPaymentIdParts | null;
240
+ interface IndonesianPaymentIdDisplayPart {
241
+ readonly key: string;
242
+ /** Raw English label (mirrors `PaymentIdFieldConfig.displayLabel`). */
243
+ readonly label: string;
244
+ /** i18n key (mirrors `PaymentIdFieldConfig.label`). */
245
+ readonly labelKey: string;
246
+ readonly value: string;
247
+ }
248
+ interface IndonesianStoredPaymentIdDisplay {
249
+ /** i18n key for the number label (bank → ACCOUNT_NUMBER, e-wallet → PHONE_NUMBER). */
250
+ readonly paymentAddressName: string;
251
+ /** Row parts: payment method, then the number. */
252
+ readonly parts: readonly IndonesianPaymentIdDisplayPart[];
253
+ /** Single-line preview, e.g. `OVO · 8123456789`. */
254
+ readonly display: string;
255
+ /** Bare number for copy actions. */
256
+ readonly copyValue: string;
257
+ }
258
+ /**
259
+ * Display details for a stored IDR payment ID packed as `Provider|number`.
260
+ * Returns `null` for other currencies and unpacked values, so callers fall back
261
+ * to the generic catalog formatting.
262
+ */
263
+ declare function resolveIndonesianStoredPaymentIdDisplay(currency: string, paymentId: string): IndonesianStoredPaymentIdDisplay | null;
264
+ /**
265
+ * Validates a payment ID for the given Indonesian provider:
266
+ * bank providers require a bank account number, e-wallets require a phone number.
267
+ * Unknown providers fall back to phone number validation.
268
+ */
269
+ declare function validateIndonesianPaymentId(providerName: string, value: string): boolean;
270
+ /**
271
+ * Validates a stored Indonesian payment ID packed as `Provider|number`
272
+ * against the provider type. Anything else is invalid.
273
+ */
274
+ declare function validateIndonesianStoredPaymentId(paymentId: string): boolean;
275
+
153
276
  /** Validates a 20-digit Peruvian CCI (spaces ignored). */
154
277
  declare function validatePeruvianCci(value: string): boolean;
155
278
  /**
@@ -245,18 +368,23 @@ declare function validateEcuadorianAccountName(value: string): boolean;
245
368
  */
246
369
  declare function validateRevolutId(revolutId: string): boolean;
247
370
 
248
- /**
249
- * Validates Indonesian phone number.
250
- * Validates just the number part (9-12 digits).
251
- */
252
- declare function validateIndonesianPhoneNumber(phoneNumber: string): boolean;
253
-
254
371
  /**
255
372
  * Validates UPI ID format.
256
373
  * UPI ID format: username@bankname (e.g., john@paytm, user@ybl, 8658404239@kotak811)
257
374
  */
258
375
  declare function validateUPIId(upiId: string): boolean;
259
376
 
377
+ /**
378
+ * Validates a Kenyan M-Pesa phone number (Send Money). Accepts the
379
+ * `07XXXXXXXX`, `01XXXXXXXX`, `2547XXXXXXXX`, `2541XXXXXXXX`, or bare
380
+ * `7XXXXXXXX`/`1XXXXXXXX` forms.
381
+ */
382
+ declare function validateKenyanPhone(phone: string): boolean;
383
+ /**
384
+ * Validates a Kenyan M-Pesa Buy Goods till number (5–7 digits).
385
+ */
386
+ declare function validateKenyanTill(till: string): boolean;
387
+
260
388
  /**
261
389
  * Validates Mexican payment IDs (CLABE, card number, or phone number).
262
390
  * CLABE: 18 digits. Card: 16 digits. Phone: 10 digits.
@@ -338,4 +466,4 @@ declare function assignStoredPaymentIdToFieldValues(currency: CurrencyCode, paym
338
466
  */
339
467
  declare function formatStoredPaymentIdForDisplay(currency: CurrencyCode, paymentId: string): string;
340
468
 
341
- export { COUNTRY_OPTIONS, CURRENCY, CURRENCY_CODES, type CountryOption, type CurrencyCode, PACKED_PAYMENT_ID_SEP, PAYMENT_ID_FIELDS, type PaymentIdFieldConfig, type PeruvianPaymentIdParts, type VenezuelanPaymentIdParts, assignPaymentIdToFieldValues, assignStoredPaymentIdToFieldValues, deserializeCompoundPaymentId, formatCompoundPaymentIdForDisplay, formatStoredPaymentIdForDisplay, getCountryOption, getPayQrPayload, getStoredQrPayload, getTransferWarning, isNepalFonepayQr, packStoredPaymentId, serializeCompoundPaymentId, unpackPackedPaymentId, uploadsPaymentQR, usesCatalogPaymentForm, usesPackedPaymentId, validateArgentinePaymentId, validateBolivianAccount, validateBolivianQr, validateCatalogPaymentDraft, validateColombianPaymentId, validateCubanCardNumber, validateCubanPhoneNumber, validateEcuadorianAccountName, validateEcuadorianAccountNumber, validateEcuadorianCedula, validateIndonesianPhoneNumber, validateMexicanPaymentId, validateNigerianAccountName, validateNigerianAccountNumber, validatePIXId, validatePaymentIdFields, validatePeruvianCci, validatePeruvianPaymentId, validatePeruvianPaymentKey, validatePeruvianPhone, validatePeruvianQr, validatePhilippinePhoneNumber, validateRevolutId, validateStoredPaymentId, validateUPIId, validateVenezuelanPaymentId, validateVenezuelanPhoneNumber, validateVenezuelanQr, validateVenezuelanRif };
469
+ export { COUNTRY_OPTIONS, CURRENCY, CURRENCY_CODES, type CountryOption, type CurrencyCode, IDR_BANK_ACCOUNT_PLACEHOLDER, IDR_BANK_ACCOUNT_VALIDATION_ERROR, IDR_PAYMENT_PROVIDERS, IDR_PLACEHOLDER, type IndonesianPaymentIdDisplayPart, type IndonesianPaymentIdParts, type IndonesianPaymentProviderOption, type IndonesianPaymentProviderType, type IndonesianStoredPaymentIdDisplay, PACKED_PAYMENT_ID_SEP, PAYMENT_ID_FIELDS, type PaymentIdFieldConfig, type PeruvianPaymentIdParts, type VenezuelanPaymentIdParts, assignPaymentIdToFieldValues, assignStoredPaymentIdToFieldValues, deserializeCompoundPaymentId, formatCompoundPaymentIdForDisplay, formatStoredPaymentIdForDisplay, getCountryOption, getIndonesianPaymentProviderType, getPayQrPayload, getStoredQrPayload, getTransferWarning, isNepalFonepayQr, packStoredPaymentId, parseIndonesianPaymentId, resolveIndonesianStoredPaymentIdDisplay, serializeCompoundPaymentId, unpackPackedPaymentId, uploadsPaymentQR, usesCatalogPaymentForm, usesPackedPaymentId, validateArgentinePaymentId, validateBolivianAccount, validateBolivianQr, validateCatalogPaymentDraft, validateColombianPaymentId, validateCubanCardNumber, validateCubanPhoneNumber, validateEcuadorianAccountName, validateEcuadorianAccountNumber, validateEcuadorianCedula, validateIndonesianBankAccount, validateIndonesianPaymentId, validateIndonesianPhoneNumber, validateIndonesianStoredPaymentId, validateKenyanPhone, validateKenyanTill, validateMexicanPaymentId, validateNigerianAccountName, validateNigerianAccountNumber, validatePIXId, validatePaymentIdFields, validatePeruvianCci, validatePeruvianPaymentId, validatePeruvianPaymentKey, validatePeruvianPhone, validatePeruvianQr, validatePhilippinePhoneNumber, validateRevolutId, validateStoredPaymentId, validateUPIId, validateVenezuelanPaymentId, validateVenezuelanPhoneNumber, validateVenezuelanQr, validateVenezuelanRif };
package/dist/country.d.ts CHANGED
@@ -21,6 +21,7 @@ declare const CURRENCY: {
21
21
  readonly ECU: "ECU";
22
22
  readonly PEN: "PEN";
23
23
  readonly PHP: "PHP";
24
+ readonly KES: "KES";
24
25
  };
25
26
  /** Union of supported currency codes. */
26
27
  type CurrencyCode = (typeof CURRENCY)[keyof typeof CURRENCY];
@@ -150,6 +151,128 @@ declare function validateVenezuelanQr(payload: string): boolean;
150
151
  */
151
152
  declare function isNepalFonepayQr(payload: string): boolean;
152
153
 
154
+ declare const IDR_PLACEHOLDER = "8123456789";
155
+ declare const IDR_BANK_ACCOUNT_PLACEHOLDER = "1234567890";
156
+ declare const IDR_BANK_ACCOUNT_VALIDATION_ERROR = "Please enter a valid Indonesian bank account number (8-18 digits)";
157
+ /**
158
+ * Validates Indonesian phone number.
159
+ * Validates just the number part (9-12 digits).
160
+ */
161
+ declare function validateIndonesianPhoneNumber(phoneNumber: string): boolean;
162
+ /**
163
+ * Validates Indonesian bank account number.
164
+ * Digits only (spaces/dashes tolerated), 8-18 digits to cover BCA (10), Mandiri (13),
165
+ * BRI (15), BNI (10), CIMB Niaga (13-14), Permata (16), SeaBank (10-12), Bank Jago (10).
166
+ */
167
+ declare function validateIndonesianBankAccount(accountNumber: string): boolean;
168
+ type IndonesianPaymentProviderType = "bank" | "e-wallet";
169
+ interface IndonesianPaymentProviderOption {
170
+ /** Display name for the consumer-rendered provider list. */
171
+ readonly name: string;
172
+ readonly type: IndonesianPaymentProviderType;
173
+ }
174
+ /** E-wallets and banks a seller can be paid through in Indonesia. */
175
+ declare const IDR_PAYMENT_PROVIDERS: readonly [{
176
+ readonly name: "GoPay";
177
+ readonly type: "e-wallet";
178
+ }, {
179
+ readonly name: "DANA";
180
+ readonly type: "e-wallet";
181
+ }, {
182
+ readonly name: "ShopeePay";
183
+ readonly type: "e-wallet";
184
+ }, {
185
+ readonly name: "OVO";
186
+ readonly type: "e-wallet";
187
+ }, {
188
+ readonly name: "LinkAja";
189
+ readonly type: "e-wallet";
190
+ }, {
191
+ readonly name: "iSaku";
192
+ readonly type: "e-wallet";
193
+ }, {
194
+ readonly name: "Sakuku";
195
+ readonly type: "e-wallet";
196
+ }, {
197
+ readonly name: "AstraPay";
198
+ readonly type: "e-wallet";
199
+ }, {
200
+ readonly name: "Bank Jago";
201
+ readonly type: "bank";
202
+ }, {
203
+ readonly name: "BCA";
204
+ readonly type: "bank";
205
+ }, {
206
+ readonly name: "Mandiri";
207
+ readonly type: "bank";
208
+ }, {
209
+ readonly name: "BRI";
210
+ readonly type: "bank";
211
+ }, {
212
+ readonly name: "BNI";
213
+ readonly type: "bank";
214
+ }, {
215
+ readonly name: "CIMB Niaga";
216
+ readonly type: "bank";
217
+ }, {
218
+ readonly name: "Permata Bank";
219
+ readonly type: "bank";
220
+ }, {
221
+ readonly name: "SeaBank";
222
+ readonly type: "bank";
223
+ }];
224
+ /**
225
+ * Resolves whether a provider name is a bank or an e-wallet (case-insensitive).
226
+ * Returns `null` when the name is not in `IDR_PAYMENT_PROVIDERS`.
227
+ */
228
+ declare function getIndonesianPaymentProviderType(name: string): IndonesianPaymentProviderType | null;
229
+ interface IndonesianPaymentIdParts {
230
+ readonly provider: string;
231
+ readonly type: IndonesianPaymentProviderType;
232
+ /** Bank account number or e-wallet phone number. */
233
+ readonly value: string;
234
+ }
235
+ /**
236
+ * Parses a stored Indonesian payment ID packed as `Provider|number`.
237
+ * Returns `null` when the value is not packed or the provider is unknown.
238
+ */
239
+ declare function parseIndonesianPaymentId(paymentId: string): IndonesianPaymentIdParts | null;
240
+ interface IndonesianPaymentIdDisplayPart {
241
+ readonly key: string;
242
+ /** Raw English label (mirrors `PaymentIdFieldConfig.displayLabel`). */
243
+ readonly label: string;
244
+ /** i18n key (mirrors `PaymentIdFieldConfig.label`). */
245
+ readonly labelKey: string;
246
+ readonly value: string;
247
+ }
248
+ interface IndonesianStoredPaymentIdDisplay {
249
+ /** i18n key for the number label (bank → ACCOUNT_NUMBER, e-wallet → PHONE_NUMBER). */
250
+ readonly paymentAddressName: string;
251
+ /** Row parts: payment method, then the number. */
252
+ readonly parts: readonly IndonesianPaymentIdDisplayPart[];
253
+ /** Single-line preview, e.g. `OVO · 8123456789`. */
254
+ readonly display: string;
255
+ /** Bare number for copy actions. */
256
+ readonly copyValue: string;
257
+ }
258
+ /**
259
+ * Display details for a stored IDR payment ID packed as `Provider|number`.
260
+ * Returns `null` for other currencies and unpacked values, so callers fall back
261
+ * to the generic catalog formatting.
262
+ */
263
+ declare function resolveIndonesianStoredPaymentIdDisplay(currency: string, paymentId: string): IndonesianStoredPaymentIdDisplay | null;
264
+ /**
265
+ * Validates a payment ID for the given Indonesian provider:
266
+ * bank providers require a bank account number, e-wallets require a phone number.
267
+ * Unknown providers fall back to phone number validation.
268
+ */
269
+ declare function validateIndonesianPaymentId(providerName: string, value: string): boolean;
270
+ /**
271
+ * Validates a stored Indonesian payment ID packed as `Provider|number`
272
+ * against the provider type. Anything else is invalid.
273
+ */
274
+ declare function validateIndonesianStoredPaymentId(paymentId: string): boolean;
275
+
153
276
  /** Validates a 20-digit Peruvian CCI (spaces ignored). */
154
277
  declare function validatePeruvianCci(value: string): boolean;
155
278
  /**
@@ -245,18 +368,23 @@ declare function validateEcuadorianAccountName(value: string): boolean;
245
368
  */
246
369
  declare function validateRevolutId(revolutId: string): boolean;
247
370
 
248
- /**
249
- * Validates Indonesian phone number.
250
- * Validates just the number part (9-12 digits).
251
- */
252
- declare function validateIndonesianPhoneNumber(phoneNumber: string): boolean;
253
-
254
371
  /**
255
372
  * Validates UPI ID format.
256
373
  * UPI ID format: username@bankname (e.g., john@paytm, user@ybl, 8658404239@kotak811)
257
374
  */
258
375
  declare function validateUPIId(upiId: string): boolean;
259
376
 
377
+ /**
378
+ * Validates a Kenyan M-Pesa phone number (Send Money). Accepts the
379
+ * `07XXXXXXXX`, `01XXXXXXXX`, `2547XXXXXXXX`, `2541XXXXXXXX`, or bare
380
+ * `7XXXXXXXX`/`1XXXXXXXX` forms.
381
+ */
382
+ declare function validateKenyanPhone(phone: string): boolean;
383
+ /**
384
+ * Validates a Kenyan M-Pesa Buy Goods till number (5–7 digits).
385
+ */
386
+ declare function validateKenyanTill(till: string): boolean;
387
+
260
388
  /**
261
389
  * Validates Mexican payment IDs (CLABE, card number, or phone number).
262
390
  * CLABE: 18 digits. Card: 16 digits. Phone: 10 digits.
@@ -338,4 +466,4 @@ declare function assignStoredPaymentIdToFieldValues(currency: CurrencyCode, paym
338
466
  */
339
467
  declare function formatStoredPaymentIdForDisplay(currency: CurrencyCode, paymentId: string): string;
340
468
 
341
- export { COUNTRY_OPTIONS, CURRENCY, CURRENCY_CODES, type CountryOption, type CurrencyCode, PACKED_PAYMENT_ID_SEP, PAYMENT_ID_FIELDS, type PaymentIdFieldConfig, type PeruvianPaymentIdParts, type VenezuelanPaymentIdParts, assignPaymentIdToFieldValues, assignStoredPaymentIdToFieldValues, deserializeCompoundPaymentId, formatCompoundPaymentIdForDisplay, formatStoredPaymentIdForDisplay, getCountryOption, getPayQrPayload, getStoredQrPayload, getTransferWarning, isNepalFonepayQr, packStoredPaymentId, serializeCompoundPaymentId, unpackPackedPaymentId, uploadsPaymentQR, usesCatalogPaymentForm, usesPackedPaymentId, validateArgentinePaymentId, validateBolivianAccount, validateBolivianQr, validateCatalogPaymentDraft, validateColombianPaymentId, validateCubanCardNumber, validateCubanPhoneNumber, validateEcuadorianAccountName, validateEcuadorianAccountNumber, validateEcuadorianCedula, validateIndonesianPhoneNumber, validateMexicanPaymentId, validateNigerianAccountName, validateNigerianAccountNumber, validatePIXId, validatePaymentIdFields, validatePeruvianCci, validatePeruvianPaymentId, validatePeruvianPaymentKey, validatePeruvianPhone, validatePeruvianQr, validatePhilippinePhoneNumber, validateRevolutId, validateStoredPaymentId, validateUPIId, validateVenezuelanPaymentId, validateVenezuelanPhoneNumber, validateVenezuelanQr, validateVenezuelanRif };
469
+ export { COUNTRY_OPTIONS, CURRENCY, CURRENCY_CODES, type CountryOption, type CurrencyCode, IDR_BANK_ACCOUNT_PLACEHOLDER, IDR_BANK_ACCOUNT_VALIDATION_ERROR, IDR_PAYMENT_PROVIDERS, IDR_PLACEHOLDER, type IndonesianPaymentIdDisplayPart, type IndonesianPaymentIdParts, type IndonesianPaymentProviderOption, type IndonesianPaymentProviderType, type IndonesianStoredPaymentIdDisplay, PACKED_PAYMENT_ID_SEP, PAYMENT_ID_FIELDS, type PaymentIdFieldConfig, type PeruvianPaymentIdParts, type VenezuelanPaymentIdParts, assignPaymentIdToFieldValues, assignStoredPaymentIdToFieldValues, deserializeCompoundPaymentId, formatCompoundPaymentIdForDisplay, formatStoredPaymentIdForDisplay, getCountryOption, getIndonesianPaymentProviderType, getPayQrPayload, getStoredQrPayload, getTransferWarning, isNepalFonepayQr, packStoredPaymentId, parseIndonesianPaymentId, resolveIndonesianStoredPaymentIdDisplay, serializeCompoundPaymentId, unpackPackedPaymentId, uploadsPaymentQR, usesCatalogPaymentForm, usesPackedPaymentId, validateArgentinePaymentId, validateBolivianAccount, validateBolivianQr, validateCatalogPaymentDraft, validateColombianPaymentId, validateCubanCardNumber, validateCubanPhoneNumber, validateEcuadorianAccountName, validateEcuadorianAccountNumber, validateEcuadorianCedula, validateIndonesianBankAccount, validateIndonesianPaymentId, validateIndonesianPhoneNumber, validateIndonesianStoredPaymentId, validateKenyanPhone, validateKenyanTill, validateMexicanPaymentId, validateNigerianAccountName, validateNigerianAccountNumber, validatePIXId, validatePaymentIdFields, validatePeruvianCci, validatePeruvianPaymentId, validatePeruvianPaymentKey, validatePeruvianPhone, validatePeruvianQr, validatePhilippinePhoneNumber, validateRevolutId, validateStoredPaymentId, validateUPIId, validateVenezuelanPaymentId, validateVenezuelanPhoneNumber, validateVenezuelanQr, validateVenezuelanRif };
package/dist/country.mjs CHANGED
@@ -14,7 +14,8 @@ var CURRENCY = {
14
14
  CUP: "CUP",
15
15
  ECU: "ECU",
16
16
  PEN: "PEN",
17
- PHP: "PHP"
17
+ PHP: "PHP",
18
+ KES: "KES"
18
19
  };
19
20
  var CURRENCY_CODES = Object.values(CURRENCY);
20
21
 
@@ -567,12 +568,82 @@ var EUR_COUNTRY_OPTION = {
567
568
  // src/country/currencies/idr.ts
568
569
  var IDR_PLACEHOLDER = "8123456789";
569
570
  var IDR_VALIDATION_ERROR = "Please enter a valid Indonesian phone number (e.g., 8123456789)";
571
+ var IDR_BANK_ACCOUNT_PLACEHOLDER = "1234567890";
572
+ var IDR_BANK_ACCOUNT_VALIDATION_ERROR = "Please enter a valid Indonesian bank account number (8-18 digits)";
570
573
  function validateIndonesianPhoneNumber(phoneNumber) {
571
574
  if (!phoneNumber || phoneNumber.trim().length === 0) return false;
572
575
  if (/[a-zA-Z]/.test(phoneNumber)) return false;
573
576
  const cleaned = phoneNumber.replace(/\D/g, "");
574
577
  return /^\d{9,12}$/.test(cleaned);
575
578
  }
579
+ function validateIndonesianBankAccount(accountNumber) {
580
+ if (!accountNumber || accountNumber.trim().length === 0) return false;
581
+ if (/[a-zA-Z]/.test(accountNumber)) return false;
582
+ const cleaned = accountNumber.replace(/[\s-]/g, "");
583
+ return /^\d{8,18}$/.test(cleaned);
584
+ }
585
+ var IDR_PAYMENT_PROVIDERS = [
586
+ { name: "GoPay", type: "e-wallet" },
587
+ { name: "DANA", type: "e-wallet" },
588
+ { name: "ShopeePay", type: "e-wallet" },
589
+ { name: "OVO", type: "e-wallet" },
590
+ { name: "LinkAja", type: "e-wallet" },
591
+ { name: "iSaku", type: "e-wallet" },
592
+ { name: "Sakuku", type: "e-wallet" },
593
+ { name: "AstraPay", type: "e-wallet" },
594
+ { name: "Bank Jago", type: "bank" },
595
+ { name: "BCA", type: "bank" },
596
+ { name: "Mandiri", type: "bank" },
597
+ { name: "BRI", type: "bank" },
598
+ { name: "BNI", type: "bank" },
599
+ { name: "CIMB Niaga", type: "bank" },
600
+ { name: "Permata Bank", type: "bank" },
601
+ { name: "SeaBank", type: "bank" }
602
+ ];
603
+ function getIndonesianPaymentProviderType(name) {
604
+ const normalized = name.trim().toLowerCase();
605
+ if (!normalized) return null;
606
+ const match = IDR_PAYMENT_PROVIDERS.find((option) => option.name.toLowerCase() === normalized);
607
+ return match?.type ?? null;
608
+ }
609
+ function parseIndonesianPaymentId(paymentId) {
610
+ const sepIndex = paymentId.indexOf("|");
611
+ if (sepIndex < 0) return null;
612
+ const provider = paymentId.slice(0, sepIndex).trim();
613
+ const value = paymentId.slice(sepIndex + 1).trim();
614
+ const type = getIndonesianPaymentProviderType(provider);
615
+ if (!type || !value) return null;
616
+ return { provider, type, value };
617
+ }
618
+ function resolveIndonesianStoredPaymentIdDisplay(currency, paymentId) {
619
+ if (currency !== CURRENCY.IDR) return null;
620
+ const parsed = parseIndonesianPaymentId(paymentId);
621
+ if (!parsed) return null;
622
+ const isBank = parsed.type === "bank";
623
+ const paymentAddressName = isBank ? "ACCOUNT_NUMBER" : "PHONE_NUMBER";
624
+ return {
625
+ paymentAddressName,
626
+ parts: [
627
+ { key: "provider", label: "Payment Method", labelKey: "PAYMENT_METHOD", value: parsed.provider },
628
+ {
629
+ key: "account",
630
+ label: isBank ? "Account Number" : "Phone Number",
631
+ labelKey: paymentAddressName,
632
+ value: parsed.value
633
+ }
634
+ ],
635
+ display: `${parsed.provider} \xB7 ${parsed.value}`,
636
+ copyValue: parsed.value
637
+ };
638
+ }
639
+ function validateIndonesianPaymentId(providerName, value) {
640
+ return getIndonesianPaymentProviderType(providerName) === "bank" ? validateIndonesianBankAccount(value) : validateIndonesianPhoneNumber(value);
641
+ }
642
+ function validateIndonesianStoredPaymentId(paymentId) {
643
+ const parsed = parseIndonesianPaymentId(paymentId);
644
+ if (!parsed) return false;
645
+ return validateIndonesianPaymentId(parsed.provider, parsed.value);
646
+ }
576
647
  var IDR_PAYMENT_FIELDS = [
577
648
  {
578
649
  key: "phone",
@@ -647,6 +718,62 @@ var INR_COUNTRY_OPTION = {
647
718
  }
648
719
  };
649
720
 
721
+ // src/country/currencies/kes.ts
722
+ var KES_PHONE_PLACEHOLDER = "0712345678";
723
+ var KES_TILL_PLACEHOLDER = "123456";
724
+ var KES_PHONE_VALIDATION_ERROR = "Please enter a valid M-Pesa phone number";
725
+ var KES_TILL_VALIDATION_ERROR = "Please enter a valid M-Pesa till number";
726
+ function validateKenyanPhone(phone) {
727
+ if (!phone || phone.trim().length === 0) return false;
728
+ const cleaned = phone.trim().replace(/\D/g, "");
729
+ return /^254[17]\d{8}$/.test(cleaned) || /^0[17]\d{8}$/.test(cleaned) || /^[17]\d{8}$/.test(cleaned);
730
+ }
731
+ function validateKenyanTill(till) {
732
+ if (!till || till.trim().length === 0) return false;
733
+ const cleaned = till.trim().replace(/\D/g, "");
734
+ return /^\d{5,7}$/.test(cleaned);
735
+ }
736
+ var KES_PAYMENT_FIELDS = [
737
+ {
738
+ key: "phone",
739
+ label: "PHONE_NUMBER",
740
+ placeholder: KES_PHONE_PLACEHOLDER,
741
+ displayLabel: "Phone Number",
742
+ validate: validateKenyanPhone,
743
+ validationErrorMessage: KES_PHONE_VALIDATION_ERROR,
744
+ optional: true
745
+ },
746
+ {
747
+ key: "till",
748
+ label: "TILL_NUMBER",
749
+ placeholder: KES_TILL_PLACEHOLDER,
750
+ displayLabel: "Till Number",
751
+ validate: validateKenyanTill,
752
+ validationErrorMessage: KES_TILL_VALIDATION_ERROR,
753
+ optional: true
754
+ }
755
+ ];
756
+ var KES_COUNTRY_OPTION = {
757
+ country: "Kenya",
758
+ currency: CURRENCY.KES,
759
+ symbolNative: "KSh",
760
+ locale: "en-KE",
761
+ paymentMethod: "MPESA",
762
+ paymentAddressName: "MPESA_DETAILS",
763
+ timezone: "Africa/Nairobi",
764
+ timezone_name: "EAT",
765
+ flag: "\u{1F1F0}\u{1F1EA}",
766
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1f0-1f1ea.png",
767
+ phoneCode: "+254",
768
+ telegramSupportChannel: "https://t.me/p2pmekenya",
769
+ twitterUsername: "p2pmekenya",
770
+ smsCountryCodes: ["KE"],
771
+ precision: 2,
772
+ isAlpha: true,
773
+ disabled: false,
774
+ disabledPaymentTypes: ["PAY"]
775
+ };
776
+
650
777
  // src/country/currencies/mex.ts
651
778
  var MEX_PLACEHOLDER = "012345678901234567";
652
779
  var MEX_VALIDATION_ERROR = "Please enter a valid CLABE (18 digits), card number, or phone number";
@@ -1099,7 +1226,8 @@ var PAYMENT_ID_FIELDS = {
1099
1226
  CUP: CUP_PAYMENT_FIELDS,
1100
1227
  ECU: ECU_PAYMENT_FIELDS,
1101
1228
  PEN: PEN_PAYMENT_FIELDS,
1102
- PHP: PHP_PAYMENT_FIELDS
1229
+ PHP: PHP_PAYMENT_FIELDS,
1230
+ KES: KES_PAYMENT_FIELDS
1103
1231
  };
1104
1232
 
1105
1233
  // src/country/countries.ts
@@ -1118,7 +1246,8 @@ var COUNTRY_OPTIONS = [
1118
1246
  PEN_COUNTRY_OPTION,
1119
1247
  PHP_COUNTRY_OPTION,
1120
1248
  EUR_COUNTRY_OPTION,
1121
- USD_COUNTRY_OPTION
1249
+ USD_COUNTRY_OPTION,
1250
+ KES_COUNTRY_OPTION
1122
1251
  ];
1123
1252
  function getCountryOption(currency) {
1124
1253
  if (!currency) return void 0;
@@ -1178,7 +1307,14 @@ function assignPaymentIdToFieldValues(fields, paymentId) {
1178
1307
  if (!paymentId) return result;
1179
1308
  const { rest } = unpackPackedPaymentId(paymentId);
1180
1309
  if (!rest) return result;
1181
- const tokens = deserializeCompoundPaymentId(rest).map((part) => part.trim()).filter((part) => part.length > 0);
1310
+ const rawParts = deserializeCompoundPaymentId(rest).map((part) => part.trim());
1311
+ if (rawParts.length === fields.length) {
1312
+ fields.forEach((field, i) => {
1313
+ result[field.key] = rawParts[i] ?? "";
1314
+ });
1315
+ return result;
1316
+ }
1317
+ const tokens = rawParts.filter((part) => part.length > 0);
1182
1318
  const claimed = /* @__PURE__ */ new Set();
1183
1319
  for (const token of tokens) {
1184
1320
  const field = fields.find((item) => !claimed.has(item.key) && item.validate(token));
@@ -1310,6 +1446,10 @@ export {
1310
1446
  COUNTRY_OPTIONS,
1311
1447
  CURRENCY,
1312
1448
  CURRENCY_CODES,
1449
+ IDR_BANK_ACCOUNT_PLACEHOLDER,
1450
+ IDR_BANK_ACCOUNT_VALIDATION_ERROR,
1451
+ IDR_PAYMENT_PROVIDERS,
1452
+ IDR_PLACEHOLDER,
1313
1453
  PACKED_PAYMENT_ID_SEP,
1314
1454
  PAYMENT_ID_FIELDS,
1315
1455
  assignPaymentIdToFieldValues,
@@ -1318,11 +1458,14 @@ export {
1318
1458
  formatCompoundPaymentIdForDisplay,
1319
1459
  formatStoredPaymentIdForDisplay,
1320
1460
  getCountryOption,
1461
+ getIndonesianPaymentProviderType,
1321
1462
  getPayQrPayload,
1322
1463
  getStoredQrPayload,
1323
1464
  getTransferWarning,
1324
1465
  isNepalFonepayQr,
1325
1466
  packStoredPaymentId,
1467
+ parseIndonesianPaymentId,
1468
+ resolveIndonesianStoredPaymentIdDisplay,
1326
1469
  serializeCompoundPaymentId,
1327
1470
  unpackPackedPaymentId,
1328
1471
  uploadsPaymentQR,
@@ -1338,7 +1481,12 @@ export {
1338
1481
  validateEcuadorianAccountName,
1339
1482
  validateEcuadorianAccountNumber,
1340
1483
  validateEcuadorianCedula,
1484
+ validateIndonesianBankAccount,
1485
+ validateIndonesianPaymentId,
1341
1486
  validateIndonesianPhoneNumber,
1487
+ validateIndonesianStoredPaymentId,
1488
+ validateKenyanPhone,
1489
+ validateKenyanTill,
1342
1490
  validateMexicanPaymentId,
1343
1491
  validateNigerianAccountName,
1344
1492
  validateNigerianAccountNumber,