@p2pdotme/sdk 1.0.1 → 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.
- package/README.md +1 -0
- package/dist/country.cjs +611 -0
- package/dist/country.cjs.map +1 -0
- package/dist/country.d.cts +106 -0
- package/dist/country.d.ts +106 -0
- package/dist/country.mjs +571 -0
- package/dist/country.mjs.map +1 -0
- package/dist/fraud-engine.cjs +19 -14
- package/dist/fraud-engine.cjs.map +1 -1
- package/dist/fraud-engine.mjs +19 -14
- package/dist/fraud-engine.mjs.map +1 -1
- package/dist/index.cjs +24 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +32 -26
- package/dist/index.d.ts +32 -26
- package/dist/index.mjs +23 -17
- package/dist/index.mjs.map +1 -1
- package/dist/order-routing.cjs +19 -14
- package/dist/order-routing.cjs.map +1 -1
- package/dist/order-routing.mjs +19 -14
- package/dist/order-routing.mjs.map +1 -1
- package/dist/payload.cjs +18 -15
- package/dist/payload.cjs.map +1 -1
- package/dist/payload.d.cts +5 -22
- package/dist/payload.d.ts +5 -22
- package/dist/payload.mjs +18 -15
- package/dist/payload.mjs.map +1 -1
- package/dist/profile.cjs +19 -14
- package/dist/profile.cjs.map +1 -1
- package/dist/profile.d.cts +3 -30
- package/dist/profile.d.ts +3 -30
- package/dist/profile.mjs +19 -14
- package/dist/profile.mjs.map +1 -1
- package/dist/qr-parsers.cjs +260 -5
- package/dist/qr-parsers.cjs.map +1 -1
- package/dist/qr-parsers.d.cts +10 -1
- package/dist/qr-parsers.d.ts +10 -1
- package/dist/qr-parsers.mjs +260 -5
- package/dist/qr-parsers.mjs.map +1 -1
- package/dist/react.cjs +26 -21
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +8 -52
- package/dist/react.d.ts +8 -52
- package/dist/react.mjs +26 -21
- package/dist/react.mjs.map +1 -1
- package/dist/zkkyc.cjs +19 -14
- package/dist/zkkyc.cjs.map +1 -1
- package/dist/zkkyc.mjs +19 -14
- package/dist/zkkyc.mjs.map +1 -1
- 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
|
package/dist/country.cjs
ADDED
|
@@ -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
|