@p2pdotme/sdk 1.0.2 → 1.0.3

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 (50) hide show
  1. package/README.md +2 -1
  2. package/dist/country.cjs +611 -0
  3. package/dist/country.cjs.map +1 -0
  4. package/dist/country.d.cts +106 -0
  5. package/dist/country.d.ts +106 -0
  6. package/dist/country.mjs +571 -0
  7. package/dist/country.mjs.map +1 -0
  8. package/dist/fraud-engine.cjs +19 -13
  9. package/dist/fraud-engine.cjs.map +1 -1
  10. package/dist/fraud-engine.mjs +19 -13
  11. package/dist/fraud-engine.mjs.map +1 -1
  12. package/dist/index.cjs +24 -16
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +32 -25
  15. package/dist/index.d.ts +32 -25
  16. package/dist/index.mjs +23 -16
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/order-routing.cjs +19 -13
  19. package/dist/order-routing.cjs.map +1 -1
  20. package/dist/order-routing.mjs +19 -13
  21. package/dist/order-routing.mjs.map +1 -1
  22. package/dist/payload.cjs +18 -14
  23. package/dist/payload.cjs.map +1 -1
  24. package/dist/payload.d.cts +5 -20
  25. package/dist/payload.d.ts +5 -20
  26. package/dist/payload.mjs +18 -14
  27. package/dist/payload.mjs.map +1 -1
  28. package/dist/profile.cjs +19 -13
  29. package/dist/profile.cjs.map +1 -1
  30. package/dist/profile.d.cts +3 -27
  31. package/dist/profile.d.ts +3 -27
  32. package/dist/profile.mjs +19 -13
  33. package/dist/profile.mjs.map +1 -1
  34. package/dist/qr-parsers.cjs +260 -5
  35. package/dist/qr-parsers.cjs.map +1 -1
  36. package/dist/qr-parsers.d.cts +10 -1
  37. package/dist/qr-parsers.d.ts +10 -1
  38. package/dist/qr-parsers.mjs +260 -5
  39. package/dist/qr-parsers.mjs.map +1 -1
  40. package/dist/react.cjs +26 -20
  41. package/dist/react.cjs.map +1 -1
  42. package/dist/react.d.cts +8 -47
  43. package/dist/react.d.ts +8 -47
  44. package/dist/react.mjs +26 -20
  45. package/dist/react.mjs.map +1 -1
  46. package/dist/zkkyc.cjs +19 -13
  47. package/dist/zkkyc.cjs.map +1 -1
  48. package/dist/zkkyc.mjs +19 -13
  49. package/dist/zkkyc.mjs.map +1 -1
  50. package/package.json +7 -1
package/README.md CHANGED
@@ -29,6 +29,7 @@ bun add react
29
29
  | `@p2pdotme/sdk/qr-parsers` | [QR code parsers](./src/qr-parsers/README.md) for UPI, QRIS, PIX, MercadoPago, Pago Movil |
30
30
  | `@p2pdotme/sdk/fraud-engine` | [Fraud detection](./src/fraud-engine/README.md), device fingerprinting, SEON integration |
31
31
  | `@p2pdotme/sdk/zkkyc` | [ZK KYC verification](./src/zkkyc/README.md) — Reclaim, Anon Aadhaar, ZK Passport |
32
+ | `@p2pdotme/sdk/country` | [Country & currency config](./src/country/README.md) — payment methods, validators, field configs |
32
33
  | `@p2pdotme/sdk/react` | Unified React provider (`SdkProvider`) + hooks |
33
34
 
34
35
  ## Quick Start
@@ -105,7 +106,7 @@ All hooks read from the nearest `<SdkProvider>`:
105
106
 
106
107
  ## Supported Currencies
107
108
 
108
- `INR` | `IDR` | `BRL` | `ARS` | `MEX` | `VEN` | `EUR` | `NGN` | `USD`
109
+ `INR` | `IDR` | `BRL` | `ARS` | `MEX` | `VEN` | `EUR` | `NGN` | `USD` | `COP`
109
110
 
110
111
  ## Development
111
112
 
@@ -0,0 +1,611 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/country/index.ts
21
+ var country_exports = {};
22
+ __export(country_exports, {
23
+ COUNTRY_OPTIONS: () => COUNTRY_OPTIONS,
24
+ PAYMENT_ID_FIELDS: () => PAYMENT_ID_FIELDS,
25
+ deserializeCompoundPaymentId: () => deserializeCompoundPaymentId,
26
+ formatCompoundPaymentIdForDisplay: () => formatCompoundPaymentIdForDisplay,
27
+ serializeCompoundPaymentId: () => serializeCompoundPaymentId,
28
+ validateArgentinePaymentId: () => validateArgentinePaymentId,
29
+ validateIndonesianPhoneNumber: () => validateIndonesianPhoneNumber,
30
+ validateMexicanPaymentId: () => validateMexicanPaymentId,
31
+ validateNigerianAccountNumber: () => validateNigerianAccountNumber,
32
+ validatePIXId: () => validatePIXId,
33
+ validateRevolutId: () => validateRevolutId,
34
+ validateUPIId: () => validateUPIId,
35
+ validateVenezuelanPhoneNumber: () => validateVenezuelanPhoneNumber,
36
+ validateVenezuelanRif: () => validateVenezuelanRif
37
+ });
38
+ module.exports = __toCommonJS(country_exports);
39
+
40
+ // src/constants/currencies.constant.ts
41
+ var CURRENCY = {
42
+ IDR: "IDR",
43
+ INR: "INR",
44
+ BRL: "BRL",
45
+ ARS: "ARS",
46
+ MEX: "MEX",
47
+ VEN: "VEN",
48
+ EUR: "EUR",
49
+ NGN: "NGN",
50
+ USD: "USD",
51
+ COP: "COP"
52
+ };
53
+
54
+ // src/country/currencies/ars.ts
55
+ var ARS_PLACEHOLDER = "juan.perez";
56
+ var ARS_VALIDATION_ERROR = "Please enter a valid CBU/CVU (22 digits) or Alias (6-20 characters)";
57
+ function validateCBU(cbu) {
58
+ if (cbu.length !== 22) return false;
59
+ if (/^(\d)\1{21}$/.test(cbu)) return false;
60
+ const bankCode = cbu.substring(0, 7);
61
+ const bankCheckDigit = parseInt(cbu[7], 10);
62
+ let sum = 0;
63
+ const weights = [7, 1, 3, 9, 7, 1, 3];
64
+ for (let i = 0; i < 7; i++) {
65
+ sum += parseInt(bankCode[i], 10) * weights[i];
66
+ }
67
+ const calculatedBankCheck = (10 - sum % 10) % 10;
68
+ if (bankCheckDigit !== calculatedBankCheck) return false;
69
+ const accountNumber = cbu.substring(8, 21);
70
+ const accountCheckDigit = parseInt(cbu[21], 10);
71
+ sum = 0;
72
+ const accountWeights = [3, 9, 7, 1, 3, 9, 7, 1, 3, 9, 7, 1, 3];
73
+ for (let i = 0; i < 13; i++) {
74
+ sum += parseInt(accountNumber[i], 10) * accountWeights[i];
75
+ }
76
+ const calculatedAccountCheck = (10 - sum % 10) % 10;
77
+ if (accountCheckDigit !== calculatedAccountCheck) return false;
78
+ return true;
79
+ }
80
+ function validateArgentinePaymentId(paymentId) {
81
+ if (!paymentId || paymentId.trim().length === 0) return false;
82
+ const trimmedPaymentId = paymentId.trim();
83
+ if (/^\d{22}$/.test(trimmedPaymentId)) return validateCBU(trimmedPaymentId);
84
+ if (/^[a-zA-Z0-9.\-_]{6,20}$/.test(trimmedPaymentId)) return true;
85
+ return false;
86
+ }
87
+ var ARS_PAYMENT_FIELDS = [
88
+ {
89
+ key: "alias",
90
+ label: "ALIAS_ID",
91
+ placeholder: ARS_PLACEHOLDER,
92
+ displayLabel: "Alias",
93
+ validate: validateArgentinePaymentId,
94
+ validationErrorMessage: ARS_VALIDATION_ERROR
95
+ }
96
+ ];
97
+ var ARS_COUNTRY_OPTION = {
98
+ country: "Argentina",
99
+ currency: CURRENCY.ARS,
100
+ symbolNative: "$",
101
+ locale: "es-AR",
102
+ paymentMethod: "ALIAS",
103
+ paymentAddressName: "ALIAS_ID",
104
+ timezone: "America/Argentina/Buenos_Aires",
105
+ timezone_name: "ART",
106
+ flag: "\u{1F1E6}\u{1F1F7}",
107
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1e6-1f1f7.png",
108
+ phoneCode: "+54",
109
+ telegramSupportChannel: "https://t.me/p2pmeargentina",
110
+ twitterUsername: "p2pmeargentina",
111
+ smsCountryCodes: ["AR"],
112
+ precision: 2,
113
+ isAlpha: false,
114
+ disabled: false,
115
+ disabledPaymentTypes: []
116
+ };
117
+
118
+ // src/country/currencies/brl.ts
119
+ var BRL_PLACEHOLDER = "Chave pix ou pix copia e cola";
120
+ var BRL_VALIDATION_ERROR = "Please enter a valid PIX ID";
121
+ function validateCPF(cpf) {
122
+ if (cpf.length !== 11) return false;
123
+ if (/^(\d)\1{10}$/.test(cpf)) return false;
124
+ let sum = 0;
125
+ for (let i = 0; i < 9; i++) {
126
+ sum += parseInt(cpf[i], 10) * (10 - i);
127
+ }
128
+ let remainder = sum % 11;
129
+ const firstDigit = remainder < 2 ? 0 : 11 - remainder;
130
+ if (parseInt(cpf[9], 10) !== firstDigit) return false;
131
+ sum = 0;
132
+ for (let i = 0; i < 10; i++) {
133
+ sum += parseInt(cpf[i], 10) * (11 - i);
134
+ }
135
+ remainder = sum % 11;
136
+ const secondDigit = remainder < 2 ? 0 : 11 - remainder;
137
+ return parseInt(cpf[10], 10) === secondDigit;
138
+ }
139
+ function validateCNPJ(cnpj) {
140
+ if (cnpj.length !== 14) return false;
141
+ if (/^(\d)\1{13}$/.test(cnpj)) return false;
142
+ let sum = 0;
143
+ const weights1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
144
+ for (let i = 0; i < 12; i++) {
145
+ sum += parseInt(cnpj[i], 10) * weights1[i];
146
+ }
147
+ let remainder = sum % 11;
148
+ const firstDigit = remainder < 2 ? 0 : 11 - remainder;
149
+ if (parseInt(cnpj[12], 10) !== firstDigit) return false;
150
+ sum = 0;
151
+ const weights2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
152
+ for (let i = 0; i < 13; i++) {
153
+ sum += parseInt(cnpj[i], 10) * weights2[i];
154
+ }
155
+ remainder = sum % 11;
156
+ const secondDigit = remainder < 2 ? 0 : 11 - remainder;
157
+ return parseInt(cnpj[13], 10) === secondDigit;
158
+ }
159
+ function validatePIXId(pixId) {
160
+ if (!pixId || pixId.trim().length === 0) return false;
161
+ const trimmedPixId = pixId.trim();
162
+ if (/^\d{11}$/.test(trimmedPixId)) return validateCPF(trimmedPixId);
163
+ if (/^\d{14}$/.test(trimmedPixId)) return validateCNPJ(trimmedPixId);
164
+ if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmedPixId)) return true;
165
+ if (/^\d{10,11}$/.test(trimmedPixId)) return true;
166
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(trimmedPixId))
167
+ return true;
168
+ return false;
169
+ }
170
+ var BRL_PAYMENT_FIELDS = [
171
+ {
172
+ key: "pix",
173
+ label: "PIX_ID",
174
+ placeholder: BRL_PLACEHOLDER,
175
+ displayLabel: "PIX ID",
176
+ validate: validatePIXId,
177
+ validationErrorMessage: BRL_VALIDATION_ERROR
178
+ }
179
+ ];
180
+ var BRL_COUNTRY_OPTION = {
181
+ country: "Brazil",
182
+ currency: CURRENCY.BRL,
183
+ symbolNative: "R$",
184
+ locale: "pt-BR",
185
+ paymentMethod: "PIX",
186
+ paymentAddressName: "PIX_ID",
187
+ timezone: "America/Sao_Paulo",
188
+ timezone_name: "BRT",
189
+ flag: "\u{1F1E7}\u{1F1F7}",
190
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1e7-1f1f7.png",
191
+ phoneCode: "+55",
192
+ telegramSupportChannel: "https://t.me/p2pmebrasil",
193
+ twitterUsername: "p2pmebrasil",
194
+ smsCountryCodes: ["BR"],
195
+ precision: 2,
196
+ isAlpha: false,
197
+ disabled: false,
198
+ disabledPaymentTypes: []
199
+ };
200
+
201
+ // src/country/currencies/cop.ts
202
+ var COP_PLACEHOLDER = "juan.perez@nequi.com.co";
203
+ var COP_VALIDATION_ERROR = "Please enter a valid Nequi or Daviplata ID (e.g., 3001234567 or email)";
204
+ function validateColombianPaymentId(paymentId) {
205
+ if (!paymentId || paymentId.trim().length === 0) return false;
206
+ const trimmed = paymentId.trim();
207
+ if (/^3\d{9}$/.test(trimmed)) return true;
208
+ if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) return true;
209
+ return false;
210
+ }
211
+ var COP_PAYMENT_FIELDS = [
212
+ {
213
+ key: "alias",
214
+ label: "ALIAS_TRANSFERENCIA",
215
+ placeholder: COP_PLACEHOLDER,
216
+ displayLabel: "Nequi / Daviplata",
217
+ validate: validateColombianPaymentId,
218
+ validationErrorMessage: COP_VALIDATION_ERROR
219
+ }
220
+ ];
221
+ var COP_COUNTRY_OPTION = {
222
+ country: "Colombia",
223
+ currency: CURRENCY.COP,
224
+ symbolNative: "$",
225
+ locale: "es-CO",
226
+ paymentMethod: "TRANSFERENCIA",
227
+ paymentAddressName: "ALIAS_TRANSFERENCIA",
228
+ timezone: "America/Bogota",
229
+ timezone_name: "COT",
230
+ flag: "\u{1F1E8}\u{1F1F4}",
231
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1e8-1f1f4.png",
232
+ phoneCode: "+57",
233
+ telegramSupportChannel: "https://t.me/p2pmeColombia",
234
+ twitterUsername: "p2pmeColombia",
235
+ smsCountryCodes: ["CO"],
236
+ precision: 2,
237
+ isAlpha: true,
238
+ disabled: true,
239
+ disabledPaymentTypes: ["PAY"]
240
+ };
241
+
242
+ // src/country/currencies/eur.ts
243
+ var EUR_PLACEHOLDER = "@username or email";
244
+ var EUR_VALIDATION_ERROR = "Please enter a valid Revolut ID (username, email, or phone)";
245
+ function validateRevolutId(revolutId) {
246
+ if (!revolutId || revolutId.trim().length === 0) return false;
247
+ const trimmed = revolutId.trim();
248
+ if (/^@?[a-zA-Z0-9._-]{3,30}$/.test(trimmed)) return true;
249
+ if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) return true;
250
+ if (/^\+?\d{7,15}$/.test(trimmed)) return true;
251
+ return false;
252
+ }
253
+ var EUR_PAYMENT_FIELDS = [
254
+ {
255
+ key: "revolut",
256
+ label: "REVOLUT_ID",
257
+ placeholder: EUR_PLACEHOLDER,
258
+ displayLabel: "Revolut ID",
259
+ validate: validateRevolutId,
260
+ validationErrorMessage: EUR_VALIDATION_ERROR
261
+ }
262
+ ];
263
+ var EUR_COUNTRY_OPTION = {
264
+ country: "Revolut EUR",
265
+ currency: CURRENCY.EUR,
266
+ symbolNative: "\u20AC",
267
+ locale: "de-DE",
268
+ paymentMethod: "REVOLUT",
269
+ paymentAddressName: "REVOLUT_ID",
270
+ timezone: "Europe/Berlin",
271
+ timezone_name: "CET",
272
+ flag: "",
273
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f310.png",
274
+ phoneCode: "",
275
+ telegramSupportChannel: "https://t.me/P2Pdotme",
276
+ twitterUsername: "P2Pdotme",
277
+ smsCountryCodes: [],
278
+ precision: 2,
279
+ isAlpha: true,
280
+ disabled: false,
281
+ disabledPaymentTypes: ["PAY"]
282
+ };
283
+
284
+ // src/country/currencies/idr.ts
285
+ var IDR_PLACEHOLDER = "8123456789";
286
+ var IDR_VALIDATION_ERROR = "Please enter a valid Indonesian phone number (e.g., 8123456789)";
287
+ function validateIndonesianPhoneNumber(phoneNumber) {
288
+ if (!phoneNumber || phoneNumber.trim().length === 0) return false;
289
+ if (/[a-zA-Z]/.test(phoneNumber)) return false;
290
+ const cleaned = phoneNumber.replace(/\D/g, "");
291
+ return /^\d{9,12}$/.test(cleaned);
292
+ }
293
+ var IDR_PAYMENT_FIELDS = [
294
+ {
295
+ key: "phone",
296
+ label: "PHONE_NUMBER",
297
+ placeholder: IDR_PLACEHOLDER,
298
+ displayLabel: "Phone Number",
299
+ validate: validateIndonesianPhoneNumber,
300
+ validationErrorMessage: IDR_VALIDATION_ERROR
301
+ }
302
+ ];
303
+ var IDR_COUNTRY_OPTION = {
304
+ country: "Indonesia",
305
+ currency: CURRENCY.IDR,
306
+ symbolNative: "Rp",
307
+ locale: "id-ID",
308
+ paymentMethod: "QRIS",
309
+ paymentAddressName: "PHONE_NUMBER",
310
+ timezone: "Asia/Jakarta",
311
+ timezone_name: "WIB",
312
+ flag: "\u{1F1EE}\u{1F1E9}",
313
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1ee-1f1e9.png",
314
+ phoneCode: "+62",
315
+ telegramSupportChannel: "https://t.me/p2pmeindonesia",
316
+ twitterUsername: "p2pdotmeID",
317
+ smsCountryCodes: [],
318
+ precision: 0,
319
+ isAlpha: false,
320
+ disabled: false,
321
+ disabledPaymentTypes: []
322
+ };
323
+
324
+ // src/country/currencies/inr.ts
325
+ var INR_PLACEHOLDER = "merchant@upi";
326
+ var INR_VALIDATION_ERROR = "Please enter a valid UPI ID (e.g., username@bankname)";
327
+ function validateUPIId(upiId) {
328
+ if (!upiId || upiId.trim().length === 0) return false;
329
+ const upiRegex = /^[a-zA-Z0-9.\-_]{2,256}@[a-zA-Z0-9]{2,64}$/;
330
+ return upiRegex.test(upiId.trim());
331
+ }
332
+ var INR_PAYMENT_FIELDS = [
333
+ {
334
+ key: "upi",
335
+ label: "UPI_ID",
336
+ placeholder: INR_PLACEHOLDER,
337
+ displayLabel: "UPI ID",
338
+ validate: validateUPIId,
339
+ validationErrorMessage: INR_VALIDATION_ERROR
340
+ }
341
+ ];
342
+ var INR_COUNTRY_OPTION = {
343
+ country: "India",
344
+ currency: CURRENCY.INR,
345
+ symbolNative: "\u20B9",
346
+ locale: "en-IN",
347
+ paymentMethod: "UPI",
348
+ paymentAddressName: "UPI_ID",
349
+ timezone: "Asia/Kolkata",
350
+ timezone_name: "IST",
351
+ flag: "\u{1F1EE}\u{1F1F3}",
352
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1ee-1f1f3.png",
353
+ phoneCode: "+91",
354
+ telegramSupportChannel: "https://t.me/P2Pdotme",
355
+ twitterUsername: "P2Pdotme",
356
+ smsCountryCodes: ["IN"],
357
+ precision: 2,
358
+ isAlpha: false,
359
+ disabled: false,
360
+ disabledPaymentTypes: []
361
+ };
362
+
363
+ // src/country/currencies/mex.ts
364
+ var MEX_PLACEHOLDER = "012345678901234567";
365
+ var MEX_VALIDATION_ERROR = "Please enter a valid CLABE (18 digits), card number, or phone number";
366
+ function validateMexicanPaymentId(paymentId) {
367
+ if (!paymentId || paymentId.trim().length === 0) return false;
368
+ const trimmed = paymentId.trim().replace(/\D/g, "");
369
+ if (/^\d{18}$/.test(trimmed)) return true;
370
+ if (/^\d{16}$/.test(trimmed)) return true;
371
+ if (/^\d{10}$/.test(trimmed)) return true;
372
+ return false;
373
+ }
374
+ var MEX_PAYMENT_FIELDS = [
375
+ {
376
+ key: "clabe",
377
+ label: "CLABE_ID",
378
+ placeholder: MEX_PLACEHOLDER,
379
+ displayLabel: "CLABE",
380
+ validate: validateMexicanPaymentId,
381
+ validationErrorMessage: MEX_VALIDATION_ERROR
382
+ }
383
+ ];
384
+ var MEX_COUNTRY_OPTION = {
385
+ country: "Mexico",
386
+ currency: CURRENCY.MEX,
387
+ internationalFormat: "MXN",
388
+ symbolNative: "Mx",
389
+ locale: "es-MX",
390
+ paymentMethod: "SPEI",
391
+ paymentAddressName: "CLABE_ID",
392
+ timezone: "America/Mexico_City",
393
+ timezone_name: "CST",
394
+ flag: "\u{1F1F2}\u{1F1FD}",
395
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1f2-1f1fd.png",
396
+ phoneCode: "+52",
397
+ telegramSupportChannel: "https://t.me/p2pmemexico",
398
+ twitterUsername: "p2pmemexico",
399
+ smsCountryCodes: ["MX"],
400
+ precision: 2,
401
+ isAlpha: true,
402
+ disabled: false,
403
+ disabledPaymentTypes: ["PAY"]
404
+ };
405
+
406
+ // src/country/currencies/ngn.ts
407
+ var NGN_PLACEHOLDER = "0123456789";
408
+ var NGN_PLACEHOLDER_BANK = "Bank Name";
409
+ var NGN_VALIDATION_ERROR = "Please enter a valid 10-digit account number";
410
+ function validateNigerianAccountNumber(accountNumber) {
411
+ if (!accountNumber || accountNumber.trim().length === 0) return false;
412
+ const cleaned = accountNumber.trim().replace(/\D/g, "");
413
+ return /^\d{10}$/.test(cleaned);
414
+ }
415
+ var NGN_PAYMENT_FIELDS = [
416
+ {
417
+ key: "account",
418
+ label: "ACCOUNT_NUMBER",
419
+ placeholder: NGN_PLACEHOLDER,
420
+ displayLabel: "Account Number",
421
+ validate: validateNigerianAccountNumber,
422
+ validationErrorMessage: NGN_VALIDATION_ERROR
423
+ },
424
+ {
425
+ key: "bank-name",
426
+ label: "BANK_NAME",
427
+ placeholder: NGN_PLACEHOLDER_BANK,
428
+ displayLabel: "Bank Name",
429
+ validate: (v) => v.trim().length > 0,
430
+ validationErrorMessage: NGN_VALIDATION_ERROR
431
+ }
432
+ ];
433
+ var NGN_COUNTRY_OPTION = {
434
+ country: "Nigeria",
435
+ currency: CURRENCY.NGN,
436
+ symbolNative: "\u20A6",
437
+ locale: "en-NG",
438
+ paymentMethod: "NIP",
439
+ paymentAddressName: "ACCOUNT_NUMBER",
440
+ timezone: "Africa/Lagos",
441
+ timezone_name: "WAT",
442
+ flag: "\u{1F1F3}\u{1F1EC}",
443
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1f3-1f1ec.png",
444
+ phoneCode: "+234",
445
+ telegramSupportChannel: "https://t.me/p2pmeNigeria",
446
+ twitterUsername: "p2pmeNigeria",
447
+ smsCountryCodes: ["NG"],
448
+ precision: 2,
449
+ isAlpha: true,
450
+ disabled: false,
451
+ disabledPaymentTypes: ["PAY"]
452
+ };
453
+
454
+ // src/country/currencies/usd.ts
455
+ var USD_PLACEHOLDER = EUR_PLACEHOLDER;
456
+ var USD_VALIDATION_ERROR = EUR_VALIDATION_ERROR;
457
+ var USD_PAYMENT_FIELDS = [
458
+ {
459
+ key: "revolut",
460
+ label: "REVOLUT_ID",
461
+ placeholder: USD_PLACEHOLDER,
462
+ displayLabel: "Revolut ID",
463
+ validate: validateRevolutId,
464
+ validationErrorMessage: USD_VALIDATION_ERROR
465
+ }
466
+ ];
467
+ var USD_COUNTRY_OPTION = {
468
+ country: "Revolut USD",
469
+ currency: CURRENCY.USD,
470
+ symbolNative: "$",
471
+ locale: "en-US",
472
+ paymentMethod: "REVOLUT",
473
+ paymentAddressName: "REVOLUT_ID",
474
+ timezone: "America/New_York",
475
+ timezone_name: "EST",
476
+ flag: "",
477
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f310.png",
478
+ phoneCode: "+1",
479
+ telegramSupportChannel: "https://t.me/P2Pdotme",
480
+ twitterUsername: "P2Pdotme",
481
+ smsCountryCodes: ["US"],
482
+ precision: 2,
483
+ isAlpha: true,
484
+ disabled: false,
485
+ disabledPaymentTypes: ["PAY"]
486
+ };
487
+
488
+ // src/country/currencies/ven.ts
489
+ var VEN_PLACEHOLDER = "04121234567";
490
+ var VEN_PLACEHOLDER_RIF = "V12345678";
491
+ var VEN_PLACEHOLDER_BANK = "Banesco";
492
+ var VEN_VALIDATION_ERROR = "Please enter a valid phone number (e.g., 04121234567)";
493
+ var VEN_VALIDATION_ERROR_RIF = "Please enter a valid RIF (e.g., V12345678)";
494
+ var VEN_VALIDATION_ERROR_BANK = "Please enter a bank name";
495
+ function validateVenezuelanPhoneNumber(phoneNumber) {
496
+ if (!phoneNumber || phoneNumber.trim().length === 0) return false;
497
+ const cleaned = phoneNumber.trim().replace(/\D/g, "");
498
+ if (/^04\d{9}$/.test(cleaned)) return true;
499
+ if (/^4\d{9}$/.test(cleaned)) return true;
500
+ return false;
501
+ }
502
+ function validateVenezuelanRif(rif) {
503
+ if (!rif || rif.trim().length === 0) return false;
504
+ const trimmed = rif.trim().toUpperCase();
505
+ return /^[JVEGC]\d{7,9}$/.test(trimmed);
506
+ }
507
+ var VEN_PAYMENT_FIELDS = [
508
+ {
509
+ key: "phone",
510
+ label: "PHONE_NUMBER",
511
+ placeholder: VEN_PLACEHOLDER,
512
+ displayLabel: "Phone",
513
+ validate: validateVenezuelanPhoneNumber,
514
+ validationErrorMessage: VEN_VALIDATION_ERROR
515
+ },
516
+ {
517
+ key: "rif",
518
+ label: "RIF_LABEL",
519
+ placeholder: VEN_PLACEHOLDER_RIF,
520
+ displayLabel: "RIF",
521
+ validate: validateVenezuelanRif,
522
+ validationErrorMessage: VEN_VALIDATION_ERROR_RIF
523
+ },
524
+ {
525
+ key: "bank",
526
+ label: "BANK_LABEL",
527
+ placeholder: VEN_PLACEHOLDER_BANK,
528
+ displayLabel: "Banco",
529
+ validate: (v) => v.trim().length > 0,
530
+ validationErrorMessage: VEN_VALIDATION_ERROR_BANK
531
+ }
532
+ ];
533
+ var VEN_COUNTRY_OPTION = {
534
+ country: "Venezuela",
535
+ currency: CURRENCY.VEN,
536
+ internationalFormat: "VES",
537
+ symbolNative: "Bs",
538
+ locale: "es-VE",
539
+ paymentMethod: "PAGO_MOVIL",
540
+ paymentAddressName: "PAGO_MOVIL_DETAILS",
541
+ timezone: "America/Caracas",
542
+ timezone_name: "VET",
543
+ flag: "\u{1F1FB}\u{1F1EA}",
544
+ flagUrl: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f1fb-1f1ea.png",
545
+ phoneCode: "+58",
546
+ telegramSupportChannel: "https://t.me/p2pmevenezuela",
547
+ twitterUsername: "p2pmevenezuela",
548
+ smsCountryCodes: ["VE"],
549
+ precision: 2,
550
+ isAlpha: true,
551
+ disabled: false,
552
+ disabledPaymentTypes: []
553
+ };
554
+
555
+ // src/country/countries.ts
556
+ var COUNTRY_OPTIONS = [
557
+ INR_COUNTRY_OPTION,
558
+ IDR_COUNTRY_OPTION,
559
+ BRL_COUNTRY_OPTION,
560
+ ARS_COUNTRY_OPTION,
561
+ MEX_COUNTRY_OPTION,
562
+ VEN_COUNTRY_OPTION,
563
+ NGN_COUNTRY_OPTION,
564
+ COP_COUNTRY_OPTION,
565
+ EUR_COUNTRY_OPTION,
566
+ USD_COUNTRY_OPTION
567
+ ];
568
+
569
+ // src/country/payment-fields.ts
570
+ var PAYMENT_ID_FIELDS = {
571
+ INR: INR_PAYMENT_FIELDS,
572
+ IDR: IDR_PAYMENT_FIELDS,
573
+ BRL: BRL_PAYMENT_FIELDS,
574
+ ARS: ARS_PAYMENT_FIELDS,
575
+ MEX: MEX_PAYMENT_FIELDS,
576
+ VEN: VEN_PAYMENT_FIELDS,
577
+ NGN: NGN_PAYMENT_FIELDS,
578
+ EUR: EUR_PAYMENT_FIELDS,
579
+ USD: USD_PAYMENT_FIELDS,
580
+ COP: COP_PAYMENT_FIELDS
581
+ };
582
+
583
+ // src/country/validators.ts
584
+ function serializeCompoundPaymentId(...fields) {
585
+ return fields.join("|");
586
+ }
587
+ function deserializeCompoundPaymentId(paymentId) {
588
+ return paymentId.split("|");
589
+ }
590
+ function formatCompoundPaymentIdForDisplay(paymentId, labels) {
591
+ const parts = deserializeCompoundPaymentId(paymentId);
592
+ return parts.map((part, i) => labels[i] ? `${labels[i]}: ${part}` : part).join(" | ");
593
+ }
594
+ // Annotate the CommonJS export names for ESM import in node:
595
+ 0 && (module.exports = {
596
+ COUNTRY_OPTIONS,
597
+ PAYMENT_ID_FIELDS,
598
+ deserializeCompoundPaymentId,
599
+ formatCompoundPaymentIdForDisplay,
600
+ serializeCompoundPaymentId,
601
+ validateArgentinePaymentId,
602
+ validateIndonesianPhoneNumber,
603
+ validateMexicanPaymentId,
604
+ validateNigerianAccountNumber,
605
+ validatePIXId,
606
+ validateRevolutId,
607
+ validateUPIId,
608
+ validateVenezuelanPhoneNumber,
609
+ validateVenezuelanRif
610
+ });
611
+ //# sourceMappingURL=country.cjs.map