@p2pdotme/sdk 1.2.24 → 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.
@@ -151,6 +151,128 @@ declare function validateVenezuelanQr(payload: string): boolean;
151
151
  */
152
152
  declare function isNepalFonepayQr(payload: string): boolean;
153
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
+
154
276
  /** Validates a 20-digit Peruvian CCI (spaces ignored). */
155
277
  declare function validatePeruvianCci(value: string): boolean;
156
278
  /**
@@ -246,12 +368,6 @@ declare function validateEcuadorianAccountName(value: string): boolean;
246
368
  */
247
369
  declare function validateRevolutId(revolutId: string): boolean;
248
370
 
249
- /**
250
- * Validates Indonesian phone number.
251
- * Validates just the number part (9-12 digits).
252
- */
253
- declare function validateIndonesianPhoneNumber(phoneNumber: string): boolean;
254
-
255
371
  /**
256
372
  * Validates UPI ID format.
257
373
  * UPI ID format: username@bankname (e.g., john@paytm, user@ybl, 8658404239@kotak811)
@@ -350,4 +466,4 @@ declare function assignStoredPaymentIdToFieldValues(currency: CurrencyCode, paym
350
466
  */
351
467
  declare function formatStoredPaymentIdForDisplay(currency: CurrencyCode, paymentId: string): string;
352
468
 
353
- 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, validateKenyanPhone, validateKenyanTill, 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
@@ -151,6 +151,128 @@ declare function validateVenezuelanQr(payload: string): boolean;
151
151
  */
152
152
  declare function isNepalFonepayQr(payload: string): boolean;
153
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
+
154
276
  /** Validates a 20-digit Peruvian CCI (spaces ignored). */
155
277
  declare function validatePeruvianCci(value: string): boolean;
156
278
  /**
@@ -246,12 +368,6 @@ declare function validateEcuadorianAccountName(value: string): boolean;
246
368
  */
247
369
  declare function validateRevolutId(revolutId: string): boolean;
248
370
 
249
- /**
250
- * Validates Indonesian phone number.
251
- * Validates just the number part (9-12 digits).
252
- */
253
- declare function validateIndonesianPhoneNumber(phoneNumber: string): boolean;
254
-
255
371
  /**
256
372
  * Validates UPI ID format.
257
373
  * UPI ID format: username@bankname (e.g., john@paytm, user@ybl, 8658404239@kotak811)
@@ -350,4 +466,4 @@ declare function assignStoredPaymentIdToFieldValues(currency: CurrencyCode, paym
350
466
  */
351
467
  declare function formatStoredPaymentIdForDisplay(currency: CurrencyCode, paymentId: string): string;
352
468
 
353
- 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, validateKenyanPhone, validateKenyanTill, 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
@@ -568,12 +568,82 @@ var EUR_COUNTRY_OPTION = {
568
568
  // src/country/currencies/idr.ts
569
569
  var IDR_PLACEHOLDER = "8123456789";
570
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)";
571
573
  function validateIndonesianPhoneNumber(phoneNumber) {
572
574
  if (!phoneNumber || phoneNumber.trim().length === 0) return false;
573
575
  if (/[a-zA-Z]/.test(phoneNumber)) return false;
574
576
  const cleaned = phoneNumber.replace(/\D/g, "");
575
577
  return /^\d{9,12}$/.test(cleaned);
576
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
+ }
577
647
  var IDR_PAYMENT_FIELDS = [
578
648
  {
579
649
  key: "phone",
@@ -1376,6 +1446,10 @@ export {
1376
1446
  COUNTRY_OPTIONS,
1377
1447
  CURRENCY,
1378
1448
  CURRENCY_CODES,
1449
+ IDR_BANK_ACCOUNT_PLACEHOLDER,
1450
+ IDR_BANK_ACCOUNT_VALIDATION_ERROR,
1451
+ IDR_PAYMENT_PROVIDERS,
1452
+ IDR_PLACEHOLDER,
1379
1453
  PACKED_PAYMENT_ID_SEP,
1380
1454
  PAYMENT_ID_FIELDS,
1381
1455
  assignPaymentIdToFieldValues,
@@ -1384,11 +1458,14 @@ export {
1384
1458
  formatCompoundPaymentIdForDisplay,
1385
1459
  formatStoredPaymentIdForDisplay,
1386
1460
  getCountryOption,
1461
+ getIndonesianPaymentProviderType,
1387
1462
  getPayQrPayload,
1388
1463
  getStoredQrPayload,
1389
1464
  getTransferWarning,
1390
1465
  isNepalFonepayQr,
1391
1466
  packStoredPaymentId,
1467
+ parseIndonesianPaymentId,
1468
+ resolveIndonesianStoredPaymentIdDisplay,
1392
1469
  serializeCompoundPaymentId,
1393
1470
  unpackPackedPaymentId,
1394
1471
  uploadsPaymentQR,
@@ -1404,7 +1481,10 @@ export {
1404
1481
  validateEcuadorianAccountName,
1405
1482
  validateEcuadorianAccountNumber,
1406
1483
  validateEcuadorianCedula,
1484
+ validateIndonesianBankAccount,
1485
+ validateIndonesianPaymentId,
1407
1486
  validateIndonesianPhoneNumber,
1487
+ validateIndonesianStoredPaymentId,
1408
1488
  validateKenyanPhone,
1409
1489
  validateKenyanTill,
1410
1490
  validateMexicanPaymentId,