@npmtapi/embed 1.7.0 → 1.8.0

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 CHANGED
@@ -99,7 +99,7 @@ Se requiere `identifier` + **uno de** `organization` o `companyCode`. Si se pasa
99
99
  | `identifier` | `string` | Sí | — | Identificador del cliente |
100
100
  | `externalRequestId` | `string` | No | — | ID de deuda a preseleccionar. Tiene precedencia sobre `selectionStrategy` |
101
101
  | `selectionStrategy` | `"oldestCreated"` | No | más reciente | Estrategia de selección automática de deuda pendiente. `"oldestCreated"`: la más antigua. Por defecto (omitido): la más reciente |
102
- | `view` | `'payments' \| 'autopay'` | No | `'payments'` | Vista a montar. `'autopay'` muestra la gestión de adhesiones (ver domiciliación + desadherirse) |
102
+ | `view` | `'payments' \| 'autopay' \| 'payment-methods'` | No | `'payments'` | Vista a montar. `'autopay'` muestra la gestión de adhesiones (ver domiciliación + desadherirse). `'payment-methods'` muestra el medio de pago del usuario (verlo y quitarlo) |
103
103
  | `environment` | `'production' \| 'homo'` | No | `'production'` | Entorno del SDK |
104
104
  | `onPaymentWindowOpened` | `() => void` | No | — | Callback cuando el popup de Yuno se abre exitosamente |
105
105
  | `onPaymentSubmitted` | `(data) => void` | No | — | Callback cuando el usuario completó el formulario de Yuno y fue redirigido al callback |
@@ -223,7 +223,7 @@ Se requiere `container` + `identifier` + **uno de** `organization` o `companyCod
223
223
  | `identifier` | `string` | Sí | — | Identificador del cliente (DNI, número de cuenta, etc.) |
224
224
  | `externalRequestId` | `string` | No | — | ID externo de una deuda específica a preseleccionar. Tiene precedencia sobre `selectionStrategy` |
225
225
  | `selectionStrategy` | `"oldestCreated"` | No | más reciente | Estrategia de selección automática de deuda pendiente. `"oldestCreated"`: la más antigua. Por defecto (omitido): la más reciente |
226
- | `view` | `'payments' \| 'autopay'` | No | `'payments'` | Vista a montar. `'autopay'` muestra la gestión de adhesiones |
226
+ | `view` | `'payments' \| 'autopay' \| 'payment-methods'` | No | `'payments'` | Vista a montar. `'autopay'` muestra la gestión de adhesiones; `'payment-methods'`, el medio de pago del usuario |
227
227
 
228
228
  ---
229
229
 
@@ -251,6 +251,28 @@ tapipay.on("paymentCancelled", function() {
251
251
  tapipay.off("paymentSubmitted", handler);
252
252
  ```
253
253
 
254
+ ### Vista de medios de pago (`view: "payment-methods"`)
255
+
256
+ ```js
257
+ tapipay.on("paymentMethodsLoaded", function(data) {
258
+ // data.paymentMethod es null cuando el usuario no tiene medio registrado
259
+ console.log("Medio:", data.paymentMethod, "domiciliaciones:", data.activeAdhesionsCount);
260
+ });
261
+
262
+ // Quitar el medio cancela en cascada las domiciliaciones que lo usaban
263
+ tapipay.on("paymentMethodsRemoved", function(data) {
264
+ console.log("Se cancelaron", data.cancelledAdhesionsCount, "domiciliaciones");
265
+ });
266
+
267
+ tapipay.on("paymentMethodsError", function(data) {
268
+ // "unavailable" no es un fallo: la organización no tiene el widget habilitado
269
+ if (data.stage === "unavailable") return;
270
+ console.error("Error:", data.stage);
271
+ });
272
+ ```
273
+
274
+ Privacidad: nunca viajan la CLABE completa, el banco ni el titular. Solo el tipo de medio, los últimos cuatro dígitos y un `id` hasheado.
275
+
254
276
  ### `TapipayPaymentWindowOpenedEvent`
255
277
 
256
278
  ```ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/loader.ts"],"sourcesContent":["export { loadTapipay } from \"./loader\";\nexport type {\n\tLoadTapipayOptions,\n\tTapipayAutopayActivatedEvent,\n\tTapipayAutopayAdhesionSummary,\n\tTapipayAutopayErrorEvent,\n\tTapipayAutopayLoadedEvent,\n\tTapipayAutopayMediaType,\n\tTapipayAutopayRemovedEvent,\n\tTapipayDomiciliationAccountCheckFailedEvent,\n\tTapipayDomiciliationAccountType,\n\tTapipayDomiciliationBankSelectedEvent,\n\tTapipayDomiciliationConfirmedEvent,\n\tTapipayDomiciliationFormCompletedEvent,\n\tTapipayDomiciliationVerificationCompletedEvent,\n\tTapipayDomiciliationVerificationMethod,\n\tTapipayEnvironment,\n\tTapipayInstance,\n\tTapipayOptions,\n\tTapipayPaymentCancelledEvent,\n\tTapipayPaymentSubmittedEvent,\n\tTapipayPaymentWindowOpenedEvent,\n\tTapipayView,\n} from \"./types\";\n","import type {\n\tLoadTapipayOptions,\n\tTapipayEnvironment,\n\tTapipayInstance,\n} from \"./types\";\n\nconst SDK_URLS: Record<TapipayEnvironment, string> = {\n\tproduction: \"https://app.tapipay.la/embed.js\",\n\thomo: \"https://homo.tapipay.la/embed.js\",\n};\n\n// Idempotencia por entorno\nconst loadPromises = new Map<TapipayEnvironment, Promise<TapipayInstance>>();\n\n/**\n * Carga el SDK de TapiPay de forma asíncrona inyectando el script en el DOM.\n *\n * - Idempotente por entorno: múltiples llamadas con el mismo `environment` retornan la misma Promise.\n * - Si window.tapipay ya existe (script cargado sync), resuelve inmediatamente.\n * - Compatible con React Strict Mode (doble mount/unmount).\n *\n * @example\n * // Producción (default)\n * const tapipay = await loadTapipay();\n *\n * // Homologación\n * const tapipay = await loadTapipay({ environment: 'homo' });\n *\n * // Se requiere UNO de { organization, companyCode } (companyCode tiene prioridad).\n * tapipay.initialize({ container: \"#widget\", organization: \"acme\", identifier: \"CLI-001\" });\n * tapipay.initialize({ container: \"#widget\", companyCode: \"acme-mx\", identifier: \"CLI-001\" });\n */\nexport function loadTapipay(\n\toptions?: LoadTapipayOptions,\n): Promise<TapipayInstance> {\n\tconst env: TapipayEnvironment = options?.environment ?? \"production\";\n\tconst SDK_URL = SDK_URLS[env];\n\tconst SCRIPT_ID = `tapipay-embed-sdk-${env}`;\n\n\t// SSR guard\n\tif (typeof window === \"undefined\") {\n\t\treturn Promise.reject(\n\t\t\tnew Error(\"[TapiPay] loadTapipay() requires a browser environment.\"),\n\t\t);\n\t}\n\n\t// Ya cargado de forma síncrona (script tag directo)\n\tif (window.tapipay && !window.tapipay._q) {\n\t\treturn Promise.resolve(window.tapipay);\n\t}\n\n\t// Reutilizar promise existente (idempotencia por entorno)\n\tconst existing = loadPromises.get(env);\n\tif (existing) return existing;\n\n\tconst promise = new Promise<TapipayInstance>((resolve, reject) => {\n\t\t// Si ya hay un script inyectado, esperar a que cargue\n\t\tconst existingScript = document.getElementById(\n\t\t\tSCRIPT_ID,\n\t\t) as HTMLScriptElement | null;\n\n\t\tconst onLoad = () => {\n\t\t\tif (window.tapipay) {\n\t\t\t\tresolve(window.tapipay);\n\t\t\t} else {\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\"[TapiPay] El script cargó pero window.tapipay no está definido.\",\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst onError = () => {\n\t\t\tloadPromises.delete(env);\n\t\t\treject(new Error(`[TapiPay] Error al cargar el SDK desde ${SDK_URL}`));\n\t\t};\n\n\t\tif (existingScript) {\n\t\t\texistingScript.addEventListener(\"load\", onLoad);\n\t\t\texistingScript.addEventListener(\"error\", onError);\n\t\t\treturn;\n\t\t}\n\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.id = SCRIPT_ID;\n\t\tscript.src = SDK_URL;\n\t\tscript.async = true;\n\t\tscript.addEventListener(\"load\", onLoad);\n\t\tscript.addEventListener(\"error\", onError);\n\t\tdocument.head.appendChild(script);\n\t});\n\n\tloadPromises.set(env, promise);\n\treturn promise;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMA,IAAM,WAA+C;AAAA,EACpD,YAAY;AAAA,EACZ,MAAM;AACP;AAGA,IAAM,eAAe,oBAAI,IAAkD;AAoBpE,SAAS,YACf,SAC2B;AAlC5B;AAmCC,QAAM,OAA0B,wCAAS,gBAAT,YAAwB;AACxD,QAAM,UAAU,SAAS,GAAG;AAC5B,QAAM,YAAY,qBAAqB,GAAG;AAG1C,MAAI,OAAO,WAAW,aAAa;AAClC,WAAO,QAAQ;AAAA,MACd,IAAI,MAAM,yDAAyD;AAAA,IACpE;AAAA,EACD;AAGA,MAAI,OAAO,WAAW,CAAC,OAAO,QAAQ,IAAI;AACzC,WAAO,QAAQ,QAAQ,OAAO,OAAO;AAAA,EACtC;AAGA,QAAM,WAAW,aAAa,IAAI,GAAG;AACrC,MAAI,SAAU,QAAO;AAErB,QAAM,UAAU,IAAI,QAAyB,CAAC,SAAS,WAAW;AAEjE,UAAM,iBAAiB,SAAS;AAAA,MAC/B;AAAA,IACD;AAEA,UAAM,SAAS,MAAM;AACpB,UAAI,OAAO,SAAS;AACnB,gBAAQ,OAAO,OAAO;AAAA,MACvB,OAAO;AACN;AAAA,UACC,IAAI;AAAA,YACH;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,UAAU,MAAM;AACrB,mBAAa,OAAO,GAAG;AACvB,aAAO,IAAI,MAAM,0CAA0C,OAAO,EAAE,CAAC;AAAA,IACtE;AAEA,QAAI,gBAAgB;AACnB,qBAAe,iBAAiB,QAAQ,MAAM;AAC9C,qBAAe,iBAAiB,SAAS,OAAO;AAChD;AAAA,IACD;AAEA,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,KAAK;AACZ,WAAO,MAAM;AACb,WAAO,QAAQ;AACf,WAAO,iBAAiB,QAAQ,MAAM;AACtC,WAAO,iBAAiB,SAAS,OAAO;AACxC,aAAS,KAAK,YAAY,MAAM;AAAA,EACjC,CAAC;AAED,eAAa,IAAI,KAAK,OAAO;AAC7B,SAAO;AACR;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/loader.ts"],"sourcesContent":["export { loadTapipay } from \"./loader\";\nexport type {\n\tLoadTapipayOptions,\n\tTapipayAutopayActivatedEvent,\n\tTapipayAutopayAdhesionSummary,\n\tTapipayAutopayErrorEvent,\n\tTapipayAutopayLoadedEvent,\n\tTapipayAutopayMediaType,\n\tTapipayAutopayRemovedEvent,\n\tTapipayDomiciliationAccountCheckFailedEvent,\n\tTapipayDomiciliationAccountType,\n\tTapipayDomiciliationBankSelectedEvent,\n\tTapipayDomiciliationConfirmedEvent,\n\tTapipayDomiciliationFormCompletedEvent,\n\tTapipayDomiciliationVerificationCompletedEvent,\n\tTapipayDomiciliationVerificationMethod,\n\tTapipayEnvironment,\n\tTapipayInstance,\n\tTapipayOptions,\n\tTapipayPaymentCancelledEvent,\n\tTapipayPaymentMethodMediaType,\n\tTapipayPaymentMethodSummary,\n\tTapipayPaymentMethodsErrorEvent,\n\tTapipayPaymentMethodsLoadedEvent,\n\tTapipayPaymentMethodsRemovedEvent,\n\tTapipayPaymentSubmittedEvent,\n\tTapipayPaymentWindowOpenedEvent,\n\tTapipayView,\n} from \"./types\";\n","import type {\n\tLoadTapipayOptions,\n\tTapipayEnvironment,\n\tTapipayInstance,\n} from \"./types\";\n\nconst SDK_URLS: Record<TapipayEnvironment, string> = {\n\tproduction: \"https://app.tapipay.la/embed.js\",\n\thomo: \"https://homo.tapipay.la/embed.js\",\n};\n\n// Idempotencia por entorno\nconst loadPromises = new Map<TapipayEnvironment, Promise<TapipayInstance>>();\n\n/**\n * Carga el SDK de TapiPay de forma asíncrona inyectando el script en el DOM.\n *\n * - Idempotente por entorno: múltiples llamadas con el mismo `environment` retornan la misma Promise.\n * - Si window.tapipay ya existe (script cargado sync), resuelve inmediatamente.\n * - Compatible con React Strict Mode (doble mount/unmount).\n *\n * @example\n * // Producción (default)\n * const tapipay = await loadTapipay();\n *\n * // Homologación\n * const tapipay = await loadTapipay({ environment: 'homo' });\n *\n * // Se requiere UNO de { organization, companyCode } (companyCode tiene prioridad).\n * tapipay.initialize({ container: \"#widget\", organization: \"acme\", identifier: \"CLI-001\" });\n * tapipay.initialize({ container: \"#widget\", companyCode: \"acme-mx\", identifier: \"CLI-001\" });\n */\nexport function loadTapipay(\n\toptions?: LoadTapipayOptions,\n): Promise<TapipayInstance> {\n\tconst env: TapipayEnvironment = options?.environment ?? \"production\";\n\tconst SDK_URL = SDK_URLS[env];\n\tconst SCRIPT_ID = `tapipay-embed-sdk-${env}`;\n\n\t// SSR guard\n\tif (typeof window === \"undefined\") {\n\t\treturn Promise.reject(\n\t\t\tnew Error(\"[TapiPay] loadTapipay() requires a browser environment.\"),\n\t\t);\n\t}\n\n\t// Ya cargado de forma síncrona (script tag directo)\n\tif (window.tapipay && !window.tapipay._q) {\n\t\treturn Promise.resolve(window.tapipay);\n\t}\n\n\t// Reutilizar promise existente (idempotencia por entorno)\n\tconst existing = loadPromises.get(env);\n\tif (existing) return existing;\n\n\tconst promise = new Promise<TapipayInstance>((resolve, reject) => {\n\t\t// Si ya hay un script inyectado, esperar a que cargue\n\t\tconst existingScript = document.getElementById(\n\t\t\tSCRIPT_ID,\n\t\t) as HTMLScriptElement | null;\n\n\t\tconst onLoad = () => {\n\t\t\tif (window.tapipay) {\n\t\t\t\tresolve(window.tapipay);\n\t\t\t} else {\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\"[TapiPay] El script cargó pero window.tapipay no está definido.\",\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst onError = () => {\n\t\t\tloadPromises.delete(env);\n\t\t\treject(new Error(`[TapiPay] Error al cargar el SDK desde ${SDK_URL}`));\n\t\t};\n\n\t\tif (existingScript) {\n\t\t\texistingScript.addEventListener(\"load\", onLoad);\n\t\t\texistingScript.addEventListener(\"error\", onError);\n\t\t\treturn;\n\t\t}\n\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.id = SCRIPT_ID;\n\t\tscript.src = SDK_URL;\n\t\tscript.async = true;\n\t\tscript.addEventListener(\"load\", onLoad);\n\t\tscript.addEventListener(\"error\", onError);\n\t\tdocument.head.appendChild(script);\n\t});\n\n\tloadPromises.set(env, promise);\n\treturn promise;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMA,IAAM,WAA+C;AAAA,EACpD,YAAY;AAAA,EACZ,MAAM;AACP;AAGA,IAAM,eAAe,oBAAI,IAAkD;AAoBpE,SAAS,YACf,SAC2B;AAlC5B;AAmCC,QAAM,OAA0B,wCAAS,gBAAT,YAAwB;AACxD,QAAM,UAAU,SAAS,GAAG;AAC5B,QAAM,YAAY,qBAAqB,GAAG;AAG1C,MAAI,OAAO,WAAW,aAAa;AAClC,WAAO,QAAQ;AAAA,MACd,IAAI,MAAM,yDAAyD;AAAA,IACpE;AAAA,EACD;AAGA,MAAI,OAAO,WAAW,CAAC,OAAO,QAAQ,IAAI;AACzC,WAAO,QAAQ,QAAQ,OAAO,OAAO;AAAA,EACtC;AAGA,QAAM,WAAW,aAAa,IAAI,GAAG;AACrC,MAAI,SAAU,QAAO;AAErB,QAAM,UAAU,IAAI,QAAyB,CAAC,SAAS,WAAW;AAEjE,UAAM,iBAAiB,SAAS;AAAA,MAC/B;AAAA,IACD;AAEA,UAAM,SAAS,MAAM;AACpB,UAAI,OAAO,SAAS;AACnB,gBAAQ,OAAO,OAAO;AAAA,MACvB,OAAO;AACN;AAAA,UACC,IAAI;AAAA,YACH;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,UAAU,MAAM;AACrB,mBAAa,OAAO,GAAG;AACvB,aAAO,IAAI,MAAM,0CAA0C,OAAO,EAAE,CAAC;AAAA,IACtE;AAEA,QAAI,gBAAgB;AACnB,qBAAe,iBAAiB,QAAQ,MAAM;AAC9C,qBAAe,iBAAiB,SAAS,OAAO;AAChD;AAAA,IACD;AAEA,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,KAAK;AACZ,WAAO,MAAM;AACb,WAAO,QAAQ;AACf,WAAO,iBAAiB,QAAQ,MAAM;AACtC,WAAO,iBAAiB,SAAS,OAAO;AACxC,aAAS,KAAK,YAAY,MAAM;AAAA,EACjC,CAAC;AAED,eAAa,IAAI,KAAK,OAAO;AAC7B,SAAO;AACR;","names":[]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { L as LoadTapipayOptions, T as TapipayInstance } from './types-DYWP-adY.cjs';
2
- export { a as TapipayAutopayActivatedEvent, b as TapipayAutopayAdhesionSummary, c as TapipayAutopayErrorEvent, d as TapipayAutopayLoadedEvent, e as TapipayAutopayMediaType, f as TapipayAutopayRemovedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, h as TapipayDomiciliationAccountType, i as TapipayDomiciliationBankSelectedEvent, j as TapipayDomiciliationConfirmedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, m as TapipayDomiciliationVerificationMethod, n as TapipayEnvironment, o as TapipayOptions, p as TapipayPaymentCancelledEvent, q as TapipayPaymentSubmittedEvent, r as TapipayPaymentWindowOpenedEvent, s as TapipayView } from './types-DYWP-adY.cjs';
1
+ import { L as LoadTapipayOptions, T as TapipayInstance } from './types-tK7-Mux0.cjs';
2
+ export { a as TapipayAutopayActivatedEvent, b as TapipayAutopayAdhesionSummary, c as TapipayAutopayErrorEvent, d as TapipayAutopayLoadedEvent, e as TapipayAutopayMediaType, f as TapipayAutopayRemovedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, h as TapipayDomiciliationAccountType, i as TapipayDomiciliationBankSelectedEvent, j as TapipayDomiciliationConfirmedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, m as TapipayDomiciliationVerificationMethod, n as TapipayEnvironment, o as TapipayOptions, p as TapipayPaymentCancelledEvent, q as TapipayPaymentMethodMediaType, r as TapipayPaymentMethodSummary, s as TapipayPaymentMethodsErrorEvent, t as TapipayPaymentMethodsLoadedEvent, u as TapipayPaymentMethodsRemovedEvent, v as TapipayPaymentSubmittedEvent, w as TapipayPaymentWindowOpenedEvent, x as TapipayView } from './types-tK7-Mux0.cjs';
3
3
 
4
4
  /**
5
5
  * Carga el SDK de TapiPay de forma asíncrona inyectando el script en el DOM.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { L as LoadTapipayOptions, T as TapipayInstance } from './types-DYWP-adY.js';
2
- export { a as TapipayAutopayActivatedEvent, b as TapipayAutopayAdhesionSummary, c as TapipayAutopayErrorEvent, d as TapipayAutopayLoadedEvent, e as TapipayAutopayMediaType, f as TapipayAutopayRemovedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, h as TapipayDomiciliationAccountType, i as TapipayDomiciliationBankSelectedEvent, j as TapipayDomiciliationConfirmedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, m as TapipayDomiciliationVerificationMethod, n as TapipayEnvironment, o as TapipayOptions, p as TapipayPaymentCancelledEvent, q as TapipayPaymentSubmittedEvent, r as TapipayPaymentWindowOpenedEvent, s as TapipayView } from './types-DYWP-adY.js';
1
+ import { L as LoadTapipayOptions, T as TapipayInstance } from './types-tK7-Mux0.js';
2
+ export { a as TapipayAutopayActivatedEvent, b as TapipayAutopayAdhesionSummary, c as TapipayAutopayErrorEvent, d as TapipayAutopayLoadedEvent, e as TapipayAutopayMediaType, f as TapipayAutopayRemovedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, h as TapipayDomiciliationAccountType, i as TapipayDomiciliationBankSelectedEvent, j as TapipayDomiciliationConfirmedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, m as TapipayDomiciliationVerificationMethod, n as TapipayEnvironment, o as TapipayOptions, p as TapipayPaymentCancelledEvent, q as TapipayPaymentMethodMediaType, r as TapipayPaymentMethodSummary, s as TapipayPaymentMethodsErrorEvent, t as TapipayPaymentMethodsLoadedEvent, u as TapipayPaymentMethodsRemovedEvent, v as TapipayPaymentSubmittedEvent, w as TapipayPaymentWindowOpenedEvent, x as TapipayView } from './types-tK7-Mux0.js';
3
3
 
4
4
  /**
5
5
  * Carga el SDK de TapiPay de forma asíncrona inyectando el script en el DOM.
package/dist/react.cjs CHANGED
@@ -117,6 +117,9 @@ function TapipayWidget({
117
117
  onAutopayActivated,
118
118
  onAutopayRemoved,
119
119
  onAutopayError,
120
+ onPaymentMethodsLoaded,
121
+ onPaymentMethodsRemoved,
122
+ onPaymentMethodsError,
120
123
  onDomiciliationBankSelected,
121
124
  onDomiciliationFormCompleted,
122
125
  onDomiciliationVerificationCompleted,
@@ -133,6 +136,9 @@ function TapipayWidget({
133
136
  const onAutopayActivatedRef = (0, import_react.useRef)(onAutopayActivated);
134
137
  const onAutopayRemovedRef = (0, import_react.useRef)(onAutopayRemoved);
135
138
  const onAutopayErrorRef = (0, import_react.useRef)(onAutopayError);
139
+ const onPaymentMethodsLoadedRef = (0, import_react.useRef)(onPaymentMethodsLoaded);
140
+ const onPaymentMethodsRemovedRef = (0, import_react.useRef)(onPaymentMethodsRemoved);
141
+ const onPaymentMethodsErrorRef = (0, import_react.useRef)(onPaymentMethodsError);
136
142
  const onDomiciliationBankSelectedRef = (0, import_react.useRef)(onDomiciliationBankSelected);
137
143
  const onDomiciliationFormCompletedRef = (0, import_react.useRef)(onDomiciliationFormCompleted);
138
144
  const onDomiciliationVerificationCompletedRef = (0, import_react.useRef)(
@@ -163,6 +169,15 @@ function TapipayWidget({
163
169
  (0, import_react.useEffect)(() => {
164
170
  onAutopayErrorRef.current = onAutopayError;
165
171
  }, [onAutopayError]);
172
+ (0, import_react.useEffect)(() => {
173
+ onPaymentMethodsLoadedRef.current = onPaymentMethodsLoaded;
174
+ }, [onPaymentMethodsLoaded]);
175
+ (0, import_react.useEffect)(() => {
176
+ onPaymentMethodsRemovedRef.current = onPaymentMethodsRemoved;
177
+ }, [onPaymentMethodsRemoved]);
178
+ (0, import_react.useEffect)(() => {
179
+ onPaymentMethodsErrorRef.current = onPaymentMethodsError;
180
+ }, [onPaymentMethodsError]);
166
181
  (0, import_react.useEffect)(() => {
167
182
  onDomiciliationBankSelectedRef.current = onDomiciliationBankSelected;
168
183
  }, [onDomiciliationBankSelected]);
@@ -231,6 +246,18 @@ function TapipayWidget({
231
246
  var _a;
232
247
  (_a = onDomiciliationAccountCheckFailedRef.current) == null ? void 0 : _a.call(onDomiciliationAccountCheckFailedRef, data);
233
248
  };
249
+ const handlePaymentMethodsLoaded = (data) => {
250
+ var _a;
251
+ (_a = onPaymentMethodsLoadedRef.current) == null ? void 0 : _a.call(onPaymentMethodsLoadedRef, data);
252
+ };
253
+ const handlePaymentMethodsRemoved = (data) => {
254
+ var _a;
255
+ (_a = onPaymentMethodsRemovedRef.current) == null ? void 0 : _a.call(onPaymentMethodsRemovedRef, data);
256
+ };
257
+ const handlePaymentMethodsError = (data) => {
258
+ var _a;
259
+ (_a = onPaymentMethodsErrorRef.current) == null ? void 0 : _a.call(onPaymentMethodsErrorRef, data);
260
+ };
234
261
  loadTapipay({ environment }).then((instance) => {
235
262
  if (cancelled) return;
236
263
  tapipayInstance = instance;
@@ -255,6 +282,9 @@ function TapipayWidget({
255
282
  "domiciliationAccountCheckFailed",
256
283
  handleDomiciliationAccountCheckFailed
257
284
  );
285
+ instance.on("paymentMethodsLoaded", handlePaymentMethodsLoaded);
286
+ instance.on("paymentMethodsRemoved", handlePaymentMethodsRemoved);
287
+ instance.on("paymentMethodsError", handlePaymentMethodsError);
258
288
  instance.initialize({
259
289
  container,
260
290
  organization,
@@ -295,6 +325,12 @@ function TapipayWidget({
295
325
  "domiciliationAccountCheckFailed",
296
326
  handleDomiciliationAccountCheckFailed
297
327
  );
328
+ tapipayInstance.off("paymentMethodsLoaded", handlePaymentMethodsLoaded);
329
+ tapipayInstance.off(
330
+ "paymentMethodsRemoved",
331
+ handlePaymentMethodsRemoved
332
+ );
333
+ tapipayInstance.off("paymentMethodsError", handlePaymentMethodsError);
298
334
  tapipayInstance.destroy(container);
299
335
  }
300
336
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.tsx","../src/loader.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { loadTapipay } from \"./loader\";\nimport type {\n\tLoadTapipayOptions,\n\tTapipayAutopayActivatedEvent,\n\tTapipayAutopayErrorEvent,\n\tTapipayAutopayLoadedEvent,\n\tTapipayAutopayRemovedEvent,\n\tTapipayDomiciliationAccountCheckFailedEvent,\n\tTapipayDomiciliationBankSelectedEvent,\n\tTapipayDomiciliationConfirmedEvent,\n\tTapipayDomiciliationFormCompletedEvent,\n\tTapipayDomiciliationVerificationCompletedEvent,\n\tTapipayEnvironment,\n\tTapipayInstance,\n\tTapipayOptions,\n\tTapipayPaymentCancelledEvent,\n\tTapipayPaymentSubmittedEvent,\n\tTapipayPaymentWindowOpenedEvent,\n} from \"./types\";\n\n// ─── useTapipay hook ──────────────────────────────────────────────────────────\n\n/**\n * Hook de bajo nivel que carga el SDK y retorna la instancia.\n * Útil cuando necesitas control manual sobre initialize/destroy.\n *\n * @example\n * const { tapipay, error } = useTapipay();\n * const { tapipay, error } = useTapipay({ environment: 'homo' });\n */\nexport function useTapipay(options?: LoadTapipayOptions): {\n\ttapipay: TapipayInstance | null;\n\terror: Error | null;\n} {\n\tconst [tapipay, setTapipay] = useState<TapipayInstance | null>(null);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst environment = options?.environment;\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tloadTapipay({ environment })\n\t\t\t.then((instance) => {\n\t\t\t\tif (!cancelled) setTapipay(instance);\n\t\t\t})\n\t\t\t.catch((err: Error) => {\n\t\t\t\tif (!cancelled) setError(err);\n\t\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [environment]);\n\n\treturn { tapipay, error };\n}\n\n// ─── TapipayWidget component ──────────────────────────────────────────────────\n\nexport interface TapipayWidgetProps extends Omit<TapipayOptions, \"container\"> {\n\t/** Entorno del SDK a cargar. Por defecto `'production'`. Usar `'homo'` para homologación. */\n\tenvironment?: TapipayEnvironment;\n\t/** Callback invocado cuando el popup de Yuno se abre exitosamente. */\n\tonPaymentWindowOpened?: (data: TapipayPaymentWindowOpenedEvent) => void;\n\t/** Callback invocado cuando el usuario completó el formulario de Yuno y fue redirigido al callback. */\n\tonPaymentSubmitted?: (data: TapipayPaymentSubmittedEvent) => void;\n\t/** Callback invocado cuando el usuario cierra el popup sin completar el pago. */\n\tonCancelled?: (data: TapipayPaymentCancelledEvent) => void;\n\t/** (Vista autopay) Callback con el conjunto de adhesiones activas; se reinvoca cuando la lista cambia. */\n\tonAutopayLoaded?: (data: TapipayAutopayLoadedEvent) => void;\n\t/** (Vista autopay) Callback cuando una nueva adhesión queda activa (una sola vez por adhesión nueva). */\n\tonAutopayActivated?: (data: TapipayAutopayActivatedEvent) => void;\n\t/** (Vista autopay) Callback cuando el usuario desadhiere un medio con éxito. */\n\tonAutopayRemoved?: (data: TapipayAutopayRemovedEvent) => void;\n\t/** (Vista autopay) Callback ante un error de carga de adhesiones o de desadhesión. */\n\tonAutopayError?: (data: TapipayAutopayErrorEvent) => void;\n\t/** (Vista autopay) El usuario eligió su banco en el alta de domiciliación. Emite en cada cambio de selección. */\n\tonDomiciliationBankSelected?: (\n\t\tdata: TapipayDomiciliationBankSelectedEvent,\n\t) => void;\n\t/** (Vista autopay) Los datos de la cuenta pasaron la validación del backend. Ojo: dispara al confirmar el método de verificación, no al salir del formulario. */\n\tonDomiciliationFormCompleted?: (\n\t\tdata: TapipayDomiciliationFormCompletedEvent,\n\t) => void;\n\t/** (Vista autopay) La verificación llegó a un desenlace. Solo emite al outcome final: un intento fallido con reintentos disponibles NO dispara el evento. */\n\tonDomiciliationVerificationCompleted?: (\n\t\tdata: TapipayDomiciliationVerificationCompletedEvent,\n\t) => void;\n\t/** (Vista autopay) El usuario confirmó la domiciliación. NO significa que quedó registrada — la confirmación real llega por `onAutopayActivated`. */\n\tonDomiciliationConfirmed?: (data: TapipayDomiciliationConfirmedEvent) => void;\n\t/** (Vista autopay) El chequeo en vivo (debounceado) de la CLABE/tarjeta rechazó el valor actual. No es un hito: puede dispararse cero, una o muchas veces. */\n\tonDomiciliationAccountCheckFailed?: (\n\t\tdata: TapipayDomiciliationAccountCheckFailedEvent,\n\t) => void;\n\t/** Clases CSS adicionales para el contenedor del widget. */\n\tclassName?: string;\n\t/** Estilos inline adicionales para el contenedor del widget. */\n\tstyle?: React.CSSProperties;\n}\n\n/**\n * Componente React que encapsula el widget de pago TapiPay.\n *\n * Maneja internamente la carga del SDK, el ciclo de vida del widget\n * y el cleanup al desmontar. Compatible con React Strict Mode.\n *\n * Se requiere `identifier` + UNO de `{ organization, companyCode }`.\n * Si se pasan ambos, `companyCode` tiene prioridad.\n *\n * @example\n * // Vista de pagos (default)\n * <TapipayWidget\n * organization=\"acme\"\n * identifier=\"CLI-001\"\n * externalRequestId=\"FAC-2024-001\"\n * onPaymentSubmitted={(data) => console.log(\"Pago enviado\", data)}\n * onCancelled={() => console.log(\"Pago cancelado por el usuario\")}\n * />\n *\n * @example\n * // Usando companyCode en lugar de organization\n * <TapipayWidget companyCode=\"acme-mx\" identifier=\"CLI-001\" />\n *\n * @example\n * // Vista de gestión de adhesiones de autopay\n * <TapipayWidget\n * organization=\"acme\"\n * identifier=\"CLI-001\"\n * view=\"autopay\"\n * onAutopayLoaded={(data) => console.log(\"Adhesiones\", data.count)}\n * onAutopayActivated={(data) => console.log(\"Adhesión activada\", data.id)}\n * onAutopayRemoved={(data) => console.log(\"Adhesión eliminada\", data.id)}\n * onDomiciliationBankSelected={(data) => console.log(\"Banco\", data.name)}\n * onDomiciliationFormCompleted={(data) => console.log(\"Cuenta ****\" + data.lastFour)}\n * onDomiciliationVerificationCompleted={(data) => console.log(\"Verificación\", data.outcome)}\n * onDomiciliationConfirmed={() => console.log(\"Enviado — esperar onAutopayActivated\")}\n * />\n */\nexport function TapipayWidget({\n\torganization,\n\tcompanyCode,\n\tidentifier,\n\texternalRequestId,\n\tselectionStrategy,\n\tview,\n\tenvironment,\n\tonPaymentWindowOpened,\n\tonPaymentSubmitted,\n\tonCancelled,\n\tonAutopayLoaded,\n\tonAutopayActivated,\n\tonAutopayRemoved,\n\tonAutopayError,\n\tonDomiciliationBankSelected,\n\tonDomiciliationFormCompleted,\n\tonDomiciliationVerificationCompleted,\n\tonDomiciliationConfirmed,\n\tonDomiciliationAccountCheckFailed,\n\tclassName,\n\tstyle,\n}: TapipayWidgetProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\t// Refs para evitar re-renders innecesarios y closures estáticos en useEffect\n\tconst onPaymentWindowOpenedRef = useRef(onPaymentWindowOpened);\n\tconst onPaymentSubmittedRef = useRef(onPaymentSubmitted);\n\tconst onCancelledRef = useRef(onCancelled);\n\tconst onAutopayLoadedRef = useRef(onAutopayLoaded);\n\tconst onAutopayActivatedRef = useRef(onAutopayActivated);\n\tconst onAutopayRemovedRef = useRef(onAutopayRemoved);\n\tconst onAutopayErrorRef = useRef(onAutopayError);\n\tconst onDomiciliationBankSelectedRef = useRef(onDomiciliationBankSelected);\n\tconst onDomiciliationFormCompletedRef = useRef(onDomiciliationFormCompleted);\n\tconst onDomiciliationVerificationCompletedRef = useRef(\n\t\tonDomiciliationVerificationCompleted,\n\t);\n\tconst onDomiciliationConfirmedRef = useRef(onDomiciliationConfirmed);\n\tconst onDomiciliationAccountCheckFailedRef = useRef(\n\t\tonDomiciliationAccountCheckFailed,\n\t);\n\n\tuseEffect(() => {\n\t\tonPaymentWindowOpenedRef.current = onPaymentWindowOpened;\n\t}, [onPaymentWindowOpened]);\n\n\tuseEffect(() => {\n\t\tonPaymentSubmittedRef.current = onPaymentSubmitted;\n\t}, [onPaymentSubmitted]);\n\n\tuseEffect(() => {\n\t\tonCancelledRef.current = onCancelled;\n\t}, [onCancelled]);\n\n\tuseEffect(() => {\n\t\tonAutopayLoadedRef.current = onAutopayLoaded;\n\t}, [onAutopayLoaded]);\n\n\tuseEffect(() => {\n\t\tonAutopayActivatedRef.current = onAutopayActivated;\n\t}, [onAutopayActivated]);\n\n\tuseEffect(() => {\n\t\tonAutopayRemovedRef.current = onAutopayRemoved;\n\t}, [onAutopayRemoved]);\n\n\tuseEffect(() => {\n\t\tonAutopayErrorRef.current = onAutopayError;\n\t}, [onAutopayError]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationBankSelectedRef.current = onDomiciliationBankSelected;\n\t}, [onDomiciliationBankSelected]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationFormCompletedRef.current = onDomiciliationFormCompleted;\n\t}, [onDomiciliationFormCompleted]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationVerificationCompletedRef.current =\n\t\t\tonDomiciliationVerificationCompleted;\n\t}, [onDomiciliationVerificationCompleted]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationConfirmedRef.current = onDomiciliationConfirmed;\n\t}, [onDomiciliationConfirmed]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationAccountCheckFailedRef.current =\n\t\t\tonDomiciliationAccountCheckFailed;\n\t}, [onDomiciliationAccountCheckFailed]);\n\n\tuseEffect(() => {\n\t\tif (!containerRef.current) return;\n\t\tconst container = containerRef.current;\n\n\t\tlet tapipayInstance: TapipayInstance | null = null;\n\t\tlet cancelled = false;\n\n\t\tconst handlePaymentWindowOpened = (\n\t\t\tdata: TapipayPaymentWindowOpenedEvent,\n\t\t) => {\n\t\t\tonPaymentWindowOpenedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentSubmitted = (data: TapipayPaymentSubmittedEvent) => {\n\t\t\tonPaymentSubmittedRef.current?.(data);\n\t\t};\n\t\tconst handleCancelled = (data: TapipayPaymentCancelledEvent) => {\n\t\t\tonCancelledRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayLoaded = (data: TapipayAutopayLoadedEvent) => {\n\t\t\tonAutopayLoadedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayActivated = (data: TapipayAutopayActivatedEvent) => {\n\t\t\tonAutopayActivatedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayRemoved = (data: TapipayAutopayRemovedEvent) => {\n\t\t\tonAutopayRemovedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayError = (data: TapipayAutopayErrorEvent) => {\n\t\t\tonAutopayErrorRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationBankSelected = (\n\t\t\tdata: TapipayDomiciliationBankSelectedEvent,\n\t\t) => {\n\t\t\tonDomiciliationBankSelectedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationFormCompleted = (\n\t\t\tdata: TapipayDomiciliationFormCompletedEvent,\n\t\t) => {\n\t\t\tonDomiciliationFormCompletedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationVerificationCompleted = (\n\t\t\tdata: TapipayDomiciliationVerificationCompletedEvent,\n\t\t) => {\n\t\t\tonDomiciliationVerificationCompletedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationConfirmed = (\n\t\t\tdata: TapipayDomiciliationConfirmedEvent,\n\t\t) => {\n\t\t\tonDomiciliationConfirmedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationAccountCheckFailed = (\n\t\t\tdata: TapipayDomiciliationAccountCheckFailedEvent,\n\t\t) => {\n\t\t\tonDomiciliationAccountCheckFailedRef.current?.(data);\n\t\t};\n\n\t\tloadTapipay({ environment }).then((instance) => {\n\t\t\tif (cancelled) return;\n\t\t\ttapipayInstance = instance;\n\n\t\t\tinstance.on(\"paymentWindowOpened\", handlePaymentWindowOpened);\n\t\t\tinstance.on(\"paymentSubmitted\", handlePaymentSubmitted);\n\t\t\tinstance.on(\"paymentCancelled\", handleCancelled);\n\t\t\tinstance.on(\"autopayLoaded\", handleAutopayLoaded);\n\t\t\tinstance.on(\"autopayActivated\", handleAutopayActivated);\n\t\t\tinstance.on(\"autopayRemoved\", handleAutopayRemoved);\n\t\t\tinstance.on(\"autopayError\", handleAutopayError);\n\t\t\tinstance.on(\"domiciliationBankSelected\", handleDomiciliationBankSelected);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationFormCompleted\",\n\t\t\t\thandleDomiciliationFormCompleted,\n\t\t\t);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationVerificationCompleted\",\n\t\t\t\thandleDomiciliationVerificationCompleted,\n\t\t\t);\n\t\t\tinstance.on(\"domiciliationConfirmed\", handleDomiciliationConfirmed);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationAccountCheckFailed\",\n\t\t\t\thandleDomiciliationAccountCheckFailed,\n\t\t\t);\n\n\t\t\tinstance.initialize({\n\t\t\t\tcontainer,\n\t\t\t\torganization,\n\t\t\t\tcompanyCode,\n\t\t\t\tidentifier,\n\t\t\t\texternalRequestId,\n\t\t\t\tselectionStrategy,\n\t\t\t\tview,\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tif (tapipayInstance) {\n\t\t\t\ttapipayInstance.off(\"paymentWindowOpened\", handlePaymentWindowOpened);\n\t\t\t\ttapipayInstance.off(\"paymentSubmitted\", handlePaymentSubmitted);\n\t\t\t\ttapipayInstance.off(\"paymentCancelled\", handleCancelled);\n\t\t\t\ttapipayInstance.off(\"autopayLoaded\", handleAutopayLoaded);\n\t\t\t\ttapipayInstance.off(\"autopayActivated\", handleAutopayActivated);\n\t\t\t\ttapipayInstance.off(\"autopayRemoved\", handleAutopayRemoved);\n\t\t\t\ttapipayInstance.off(\"autopayError\", handleAutopayError);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationBankSelected\",\n\t\t\t\t\thandleDomiciliationBankSelected,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationFormCompleted\",\n\t\t\t\t\thandleDomiciliationFormCompleted,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationVerificationCompleted\",\n\t\t\t\t\thandleDomiciliationVerificationCompleted,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationConfirmed\",\n\t\t\t\t\thandleDomiciliationConfirmed,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationAccountCheckFailed\",\n\t\t\t\t\thandleDomiciliationAccountCheckFailed,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.destroy(container);\n\t\t\t}\n\t\t};\n\t\t// El widget se re-monta si cambian los parámetros de identificación o entorno\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [\n\t\torganization,\n\t\tcompanyCode,\n\t\tidentifier,\n\t\texternalRequestId,\n\t\tselectionStrategy,\n\t\tview,\n\t\tenvironment,\n\t]);\n\n\treturn <div ref={containerRef} className={className} style={style} />;\n}\n","import type {\n\tLoadTapipayOptions,\n\tTapipayEnvironment,\n\tTapipayInstance,\n} from \"./types\";\n\nconst SDK_URLS: Record<TapipayEnvironment, string> = {\n\tproduction: \"https://app.tapipay.la/embed.js\",\n\thomo: \"https://homo.tapipay.la/embed.js\",\n};\n\n// Idempotencia por entorno\nconst loadPromises = new Map<TapipayEnvironment, Promise<TapipayInstance>>();\n\n/**\n * Carga el SDK de TapiPay de forma asíncrona inyectando el script en el DOM.\n *\n * - Idempotente por entorno: múltiples llamadas con el mismo `environment` retornan la misma Promise.\n * - Si window.tapipay ya existe (script cargado sync), resuelve inmediatamente.\n * - Compatible con React Strict Mode (doble mount/unmount).\n *\n * @example\n * // Producción (default)\n * const tapipay = await loadTapipay();\n *\n * // Homologación\n * const tapipay = await loadTapipay({ environment: 'homo' });\n *\n * // Se requiere UNO de { organization, companyCode } (companyCode tiene prioridad).\n * tapipay.initialize({ container: \"#widget\", organization: \"acme\", identifier: \"CLI-001\" });\n * tapipay.initialize({ container: \"#widget\", companyCode: \"acme-mx\", identifier: \"CLI-001\" });\n */\nexport function loadTapipay(\n\toptions?: LoadTapipayOptions,\n): Promise<TapipayInstance> {\n\tconst env: TapipayEnvironment = options?.environment ?? \"production\";\n\tconst SDK_URL = SDK_URLS[env];\n\tconst SCRIPT_ID = `tapipay-embed-sdk-${env}`;\n\n\t// SSR guard\n\tif (typeof window === \"undefined\") {\n\t\treturn Promise.reject(\n\t\t\tnew Error(\"[TapiPay] loadTapipay() requires a browser environment.\"),\n\t\t);\n\t}\n\n\t// Ya cargado de forma síncrona (script tag directo)\n\tif (window.tapipay && !window.tapipay._q) {\n\t\treturn Promise.resolve(window.tapipay);\n\t}\n\n\t// Reutilizar promise existente (idempotencia por entorno)\n\tconst existing = loadPromises.get(env);\n\tif (existing) return existing;\n\n\tconst promise = new Promise<TapipayInstance>((resolve, reject) => {\n\t\t// Si ya hay un script inyectado, esperar a que cargue\n\t\tconst existingScript = document.getElementById(\n\t\t\tSCRIPT_ID,\n\t\t) as HTMLScriptElement | null;\n\n\t\tconst onLoad = () => {\n\t\t\tif (window.tapipay) {\n\t\t\t\tresolve(window.tapipay);\n\t\t\t} else {\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\"[TapiPay] El script cargó pero window.tapipay no está definido.\",\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst onError = () => {\n\t\t\tloadPromises.delete(env);\n\t\t\treject(new Error(`[TapiPay] Error al cargar el SDK desde ${SDK_URL}`));\n\t\t};\n\n\t\tif (existingScript) {\n\t\t\texistingScript.addEventListener(\"load\", onLoad);\n\t\t\texistingScript.addEventListener(\"error\", onError);\n\t\t\treturn;\n\t\t}\n\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.id = SCRIPT_ID;\n\t\tscript.src = SDK_URL;\n\t\tscript.async = true;\n\t\tscript.addEventListener(\"load\", onLoad);\n\t\tscript.addEventListener(\"error\", onError);\n\t\tdocument.head.appendChild(script);\n\t});\n\n\tloadPromises.set(env, promise);\n\treturn promise;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/react.tsx","../src/loader.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { loadTapipay } from \"./loader\";\nimport type {\n\tLoadTapipayOptions,\n\tTapipayAutopayActivatedEvent,\n\tTapipayAutopayErrorEvent,\n\tTapipayAutopayLoadedEvent,\n\tTapipayAutopayRemovedEvent,\n\tTapipayDomiciliationAccountCheckFailedEvent,\n\tTapipayDomiciliationBankSelectedEvent,\n\tTapipayDomiciliationConfirmedEvent,\n\tTapipayDomiciliationFormCompletedEvent,\n\tTapipayDomiciliationVerificationCompletedEvent,\n\tTapipayEnvironment,\n\tTapipayInstance,\n\tTapipayOptions,\n\tTapipayPaymentCancelledEvent,\n\tTapipayPaymentMethodsErrorEvent,\n\tTapipayPaymentMethodsLoadedEvent,\n\tTapipayPaymentMethodsRemovedEvent,\n\tTapipayPaymentSubmittedEvent,\n\tTapipayPaymentWindowOpenedEvent,\n} from \"./types\";\n\n// ─── useTapipay hook ──────────────────────────────────────────────────────────\n\n/**\n * Hook de bajo nivel que carga el SDK y retorna la instancia.\n * Útil cuando necesitas control manual sobre initialize/destroy.\n *\n * @example\n * const { tapipay, error } = useTapipay();\n * const { tapipay, error } = useTapipay({ environment: 'homo' });\n */\nexport function useTapipay(options?: LoadTapipayOptions): {\n\ttapipay: TapipayInstance | null;\n\terror: Error | null;\n} {\n\tconst [tapipay, setTapipay] = useState<TapipayInstance | null>(null);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst environment = options?.environment;\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tloadTapipay({ environment })\n\t\t\t.then((instance) => {\n\t\t\t\tif (!cancelled) setTapipay(instance);\n\t\t\t})\n\t\t\t.catch((err: Error) => {\n\t\t\t\tif (!cancelled) setError(err);\n\t\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [environment]);\n\n\treturn { tapipay, error };\n}\n\n// ─── TapipayWidget component ──────────────────────────────────────────────────\n\nexport interface TapipayWidgetProps extends Omit<TapipayOptions, \"container\"> {\n\t/** Entorno del SDK a cargar. Por defecto `'production'`. Usar `'homo'` para homologación. */\n\tenvironment?: TapipayEnvironment;\n\t/** Callback invocado cuando el popup de Yuno se abre exitosamente. */\n\tonPaymentWindowOpened?: (data: TapipayPaymentWindowOpenedEvent) => void;\n\t/** Callback invocado cuando el usuario completó el formulario de Yuno y fue redirigido al callback. */\n\tonPaymentSubmitted?: (data: TapipayPaymentSubmittedEvent) => void;\n\t/** Callback invocado cuando el usuario cierra el popup sin completar el pago. */\n\tonCancelled?: (data: TapipayPaymentCancelledEvent) => void;\n\t/** (Vista autopay) Callback con el conjunto de adhesiones activas; se reinvoca cuando la lista cambia. */\n\tonAutopayLoaded?: (data: TapipayAutopayLoadedEvent) => void;\n\t/** (Vista autopay) Callback cuando una nueva adhesión queda activa (una sola vez por adhesión nueva). */\n\tonAutopayActivated?: (data: TapipayAutopayActivatedEvent) => void;\n\t/** (Vista autopay) Callback cuando el usuario desadhiere un medio con éxito. */\n\tonAutopayRemoved?: (data: TapipayAutopayRemovedEvent) => void;\n\t/** (Vista autopay) Callback ante un error de carga de adhesiones o de desadhesión. */\n\tonAutopayError?: (data: TapipayAutopayErrorEvent) => void;\n\t/** (Vista autopay) El usuario eligió su banco en el alta de domiciliación. Emite en cada cambio de selección. */\n\tonDomiciliationBankSelected?: (\n\t\tdata: TapipayDomiciliationBankSelectedEvent,\n\t) => void;\n\t/** (Vista autopay) Los datos de la cuenta pasaron la validación del backend. Ojo: dispara al confirmar el método de verificación, no al salir del formulario. */\n\tonDomiciliationFormCompleted?: (\n\t\tdata: TapipayDomiciliationFormCompletedEvent,\n\t) => void;\n\t/** (Vista autopay) La verificación llegó a un desenlace. Solo emite al outcome final: un intento fallido con reintentos disponibles NO dispara el evento. */\n\tonDomiciliationVerificationCompleted?: (\n\t\tdata: TapipayDomiciliationVerificationCompletedEvent,\n\t) => void;\n\t/** (Vista autopay) El usuario confirmó la domiciliación. NO significa que quedó registrada — la confirmación real llega por `onAutopayActivated`. */\n\tonDomiciliationConfirmed?: (data: TapipayDomiciliationConfirmedEvent) => void;\n\t/** (Vista autopay) El chequeo en vivo (debounceado) de la CLABE/tarjeta rechazó el valor actual. No es un hito: puede dispararse cero, una o muchas veces. */\n\tonDomiciliationAccountCheckFailed?: (\n\t\tdata: TapipayDomiciliationAccountCheckFailedEvent,\n\t) => void;\n\t/** (Vista payment-methods) El medio de pago del usuario cargó. Emite una vez por montaje, incluso si no tiene ninguno. */\n\tonPaymentMethodsLoaded?: (data: TapipayPaymentMethodsLoadedEvent) => void;\n\t/** (Vista payment-methods) El usuario quitó su medio de pago. Trae cuántas domiciliaciones se cancelaron en cascada. */\n\tonPaymentMethodsRemoved?: (data: TapipayPaymentMethodsRemovedEvent) => void;\n\t/** (Vista payment-methods) Error de carga o de baja. `stage: \"unavailable\"` significa que la organización no tiene el widget habilitado. */\n\tonPaymentMethodsError?: (data: TapipayPaymentMethodsErrorEvent) => void;\n\t/** Clases CSS adicionales para el contenedor del widget. */\n\tclassName?: string;\n\t/** Estilos inline adicionales para el contenedor del widget. */\n\tstyle?: React.CSSProperties;\n}\n\n/**\n * Componente React que encapsula el widget de pago TapiPay.\n *\n * Maneja internamente la carga del SDK, el ciclo de vida del widget\n * y el cleanup al desmontar. Compatible con React Strict Mode.\n *\n * Se requiere `identifier` + UNO de `{ organization, companyCode }`.\n * Si se pasan ambos, `companyCode` tiene prioridad.\n *\n * @example\n * // Vista de pagos (default)\n * <TapipayWidget\n * organization=\"acme\"\n * identifier=\"CLI-001\"\n * externalRequestId=\"FAC-2024-001\"\n * onPaymentSubmitted={(data) => console.log(\"Pago enviado\", data)}\n * onCancelled={() => console.log(\"Pago cancelado por el usuario\")}\n * />\n *\n * @example\n * // Usando companyCode en lugar de organization\n * <TapipayWidget companyCode=\"acme-mx\" identifier=\"CLI-001\" />\n *\n * @example\n * // Vista de gestión de adhesiones de autopay\n * <TapipayWidget\n * organization=\"acme\"\n * identifier=\"CLI-001\"\n * view=\"autopay\"\n * onAutopayLoaded={(data) => console.log(\"Adhesiones\", data.count)}\n * onAutopayActivated={(data) => console.log(\"Adhesión activada\", data.id)}\n * onAutopayRemoved={(data) => console.log(\"Adhesión eliminada\", data.id)}\n * onDomiciliationBankSelected={(data) => console.log(\"Banco\", data.name)}\n * onDomiciliationFormCompleted={(data) => console.log(\"Cuenta ****\" + data.lastFour)}\n * onDomiciliationVerificationCompleted={(data) => console.log(\"Verificación\", data.outcome)}\n * onDomiciliationConfirmed={() => console.log(\"Enviado — esperar onAutopayActivated\")}\n * />\n */\nexport function TapipayWidget({\n\torganization,\n\tcompanyCode,\n\tidentifier,\n\texternalRequestId,\n\tselectionStrategy,\n\tview,\n\tenvironment,\n\tonPaymentWindowOpened,\n\tonPaymentSubmitted,\n\tonCancelled,\n\tonAutopayLoaded,\n\tonAutopayActivated,\n\tonAutopayRemoved,\n\tonAutopayError,\n\tonPaymentMethodsLoaded,\n\tonPaymentMethodsRemoved,\n\tonPaymentMethodsError,\n\tonDomiciliationBankSelected,\n\tonDomiciliationFormCompleted,\n\tonDomiciliationVerificationCompleted,\n\tonDomiciliationConfirmed,\n\tonDomiciliationAccountCheckFailed,\n\tclassName,\n\tstyle,\n}: TapipayWidgetProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\t// Refs para evitar re-renders innecesarios y closures estáticos en useEffect\n\tconst onPaymentWindowOpenedRef = useRef(onPaymentWindowOpened);\n\tconst onPaymentSubmittedRef = useRef(onPaymentSubmitted);\n\tconst onCancelledRef = useRef(onCancelled);\n\tconst onAutopayLoadedRef = useRef(onAutopayLoaded);\n\tconst onAutopayActivatedRef = useRef(onAutopayActivated);\n\tconst onAutopayRemovedRef = useRef(onAutopayRemoved);\n\tconst onAutopayErrorRef = useRef(onAutopayError);\n\tconst onPaymentMethodsLoadedRef = useRef(onPaymentMethodsLoaded);\n\tconst onPaymentMethodsRemovedRef = useRef(onPaymentMethodsRemoved);\n\tconst onPaymentMethodsErrorRef = useRef(onPaymentMethodsError);\n\tconst onDomiciliationBankSelectedRef = useRef(onDomiciliationBankSelected);\n\tconst onDomiciliationFormCompletedRef = useRef(onDomiciliationFormCompleted);\n\tconst onDomiciliationVerificationCompletedRef = useRef(\n\t\tonDomiciliationVerificationCompleted,\n\t);\n\tconst onDomiciliationConfirmedRef = useRef(onDomiciliationConfirmed);\n\tconst onDomiciliationAccountCheckFailedRef = useRef(\n\t\tonDomiciliationAccountCheckFailed,\n\t);\n\n\tuseEffect(() => {\n\t\tonPaymentWindowOpenedRef.current = onPaymentWindowOpened;\n\t}, [onPaymentWindowOpened]);\n\n\tuseEffect(() => {\n\t\tonPaymentSubmittedRef.current = onPaymentSubmitted;\n\t}, [onPaymentSubmitted]);\n\n\tuseEffect(() => {\n\t\tonCancelledRef.current = onCancelled;\n\t}, [onCancelled]);\n\n\tuseEffect(() => {\n\t\tonAutopayLoadedRef.current = onAutopayLoaded;\n\t}, [onAutopayLoaded]);\n\n\tuseEffect(() => {\n\t\tonAutopayActivatedRef.current = onAutopayActivated;\n\t}, [onAutopayActivated]);\n\n\tuseEffect(() => {\n\t\tonAutopayRemovedRef.current = onAutopayRemoved;\n\t}, [onAutopayRemoved]);\n\n\tuseEffect(() => {\n\t\tonAutopayErrorRef.current = onAutopayError;\n\t}, [onAutopayError]);\n\n\tuseEffect(() => {\n\t\tonPaymentMethodsLoadedRef.current = onPaymentMethodsLoaded;\n\t}, [onPaymentMethodsLoaded]);\n\n\tuseEffect(() => {\n\t\tonPaymentMethodsRemovedRef.current = onPaymentMethodsRemoved;\n\t}, [onPaymentMethodsRemoved]);\n\n\tuseEffect(() => {\n\t\tonPaymentMethodsErrorRef.current = onPaymentMethodsError;\n\t}, [onPaymentMethodsError]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationBankSelectedRef.current = onDomiciliationBankSelected;\n\t}, [onDomiciliationBankSelected]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationFormCompletedRef.current = onDomiciliationFormCompleted;\n\t}, [onDomiciliationFormCompleted]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationVerificationCompletedRef.current =\n\t\t\tonDomiciliationVerificationCompleted;\n\t}, [onDomiciliationVerificationCompleted]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationConfirmedRef.current = onDomiciliationConfirmed;\n\t}, [onDomiciliationConfirmed]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationAccountCheckFailedRef.current =\n\t\t\tonDomiciliationAccountCheckFailed;\n\t}, [onDomiciliationAccountCheckFailed]);\n\n\tuseEffect(() => {\n\t\tif (!containerRef.current) return;\n\t\tconst container = containerRef.current;\n\n\t\tlet tapipayInstance: TapipayInstance | null = null;\n\t\tlet cancelled = false;\n\n\t\tconst handlePaymentWindowOpened = (\n\t\t\tdata: TapipayPaymentWindowOpenedEvent,\n\t\t) => {\n\t\t\tonPaymentWindowOpenedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentSubmitted = (data: TapipayPaymentSubmittedEvent) => {\n\t\t\tonPaymentSubmittedRef.current?.(data);\n\t\t};\n\t\tconst handleCancelled = (data: TapipayPaymentCancelledEvent) => {\n\t\t\tonCancelledRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayLoaded = (data: TapipayAutopayLoadedEvent) => {\n\t\t\tonAutopayLoadedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayActivated = (data: TapipayAutopayActivatedEvent) => {\n\t\t\tonAutopayActivatedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayRemoved = (data: TapipayAutopayRemovedEvent) => {\n\t\t\tonAutopayRemovedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayError = (data: TapipayAutopayErrorEvent) => {\n\t\t\tonAutopayErrorRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationBankSelected = (\n\t\t\tdata: TapipayDomiciliationBankSelectedEvent,\n\t\t) => {\n\t\t\tonDomiciliationBankSelectedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationFormCompleted = (\n\t\t\tdata: TapipayDomiciliationFormCompletedEvent,\n\t\t) => {\n\t\t\tonDomiciliationFormCompletedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationVerificationCompleted = (\n\t\t\tdata: TapipayDomiciliationVerificationCompletedEvent,\n\t\t) => {\n\t\t\tonDomiciliationVerificationCompletedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationConfirmed = (\n\t\t\tdata: TapipayDomiciliationConfirmedEvent,\n\t\t) => {\n\t\t\tonDomiciliationConfirmedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationAccountCheckFailed = (\n\t\t\tdata: TapipayDomiciliationAccountCheckFailedEvent,\n\t\t) => {\n\t\t\tonDomiciliationAccountCheckFailedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentMethodsLoaded = (\n\t\t\tdata: TapipayPaymentMethodsLoadedEvent,\n\t\t) => {\n\t\t\tonPaymentMethodsLoadedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentMethodsRemoved = (\n\t\t\tdata: TapipayPaymentMethodsRemovedEvent,\n\t\t) => {\n\t\t\tonPaymentMethodsRemovedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentMethodsError = (\n\t\t\tdata: TapipayPaymentMethodsErrorEvent,\n\t\t) => {\n\t\t\tonPaymentMethodsErrorRef.current?.(data);\n\t\t};\n\n\t\tloadTapipay({ environment }).then((instance) => {\n\t\t\tif (cancelled) return;\n\t\t\ttapipayInstance = instance;\n\n\t\t\tinstance.on(\"paymentWindowOpened\", handlePaymentWindowOpened);\n\t\t\tinstance.on(\"paymentSubmitted\", handlePaymentSubmitted);\n\t\t\tinstance.on(\"paymentCancelled\", handleCancelled);\n\t\t\tinstance.on(\"autopayLoaded\", handleAutopayLoaded);\n\t\t\tinstance.on(\"autopayActivated\", handleAutopayActivated);\n\t\t\tinstance.on(\"autopayRemoved\", handleAutopayRemoved);\n\t\t\tinstance.on(\"autopayError\", handleAutopayError);\n\t\t\tinstance.on(\"domiciliationBankSelected\", handleDomiciliationBankSelected);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationFormCompleted\",\n\t\t\t\thandleDomiciliationFormCompleted,\n\t\t\t);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationVerificationCompleted\",\n\t\t\t\thandleDomiciliationVerificationCompleted,\n\t\t\t);\n\t\t\tinstance.on(\"domiciliationConfirmed\", handleDomiciliationConfirmed);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationAccountCheckFailed\",\n\t\t\t\thandleDomiciliationAccountCheckFailed,\n\t\t\t);\n\t\t\tinstance.on(\"paymentMethodsLoaded\", handlePaymentMethodsLoaded);\n\t\t\tinstance.on(\"paymentMethodsRemoved\", handlePaymentMethodsRemoved);\n\t\t\tinstance.on(\"paymentMethodsError\", handlePaymentMethodsError);\n\n\t\t\tinstance.initialize({\n\t\t\t\tcontainer,\n\t\t\t\torganization,\n\t\t\t\tcompanyCode,\n\t\t\t\tidentifier,\n\t\t\t\texternalRequestId,\n\t\t\t\tselectionStrategy,\n\t\t\t\tview,\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tif (tapipayInstance) {\n\t\t\t\ttapipayInstance.off(\"paymentWindowOpened\", handlePaymentWindowOpened);\n\t\t\t\ttapipayInstance.off(\"paymentSubmitted\", handlePaymentSubmitted);\n\t\t\t\ttapipayInstance.off(\"paymentCancelled\", handleCancelled);\n\t\t\t\ttapipayInstance.off(\"autopayLoaded\", handleAutopayLoaded);\n\t\t\t\ttapipayInstance.off(\"autopayActivated\", handleAutopayActivated);\n\t\t\t\ttapipayInstance.off(\"autopayRemoved\", handleAutopayRemoved);\n\t\t\t\ttapipayInstance.off(\"autopayError\", handleAutopayError);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationBankSelected\",\n\t\t\t\t\thandleDomiciliationBankSelected,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationFormCompleted\",\n\t\t\t\t\thandleDomiciliationFormCompleted,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationVerificationCompleted\",\n\t\t\t\t\thandleDomiciliationVerificationCompleted,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationConfirmed\",\n\t\t\t\t\thandleDomiciliationConfirmed,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationAccountCheckFailed\",\n\t\t\t\t\thandleDomiciliationAccountCheckFailed,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\"paymentMethodsLoaded\", handlePaymentMethodsLoaded);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"paymentMethodsRemoved\",\n\t\t\t\t\thandlePaymentMethodsRemoved,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\"paymentMethodsError\", handlePaymentMethodsError);\n\t\t\t\ttapipayInstance.destroy(container);\n\t\t\t}\n\t\t};\n\t\t// El widget se re-monta si cambian los parámetros de identificación o entorno\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [\n\t\torganization,\n\t\tcompanyCode,\n\t\tidentifier,\n\t\texternalRequestId,\n\t\tselectionStrategy,\n\t\tview,\n\t\tenvironment,\n\t]);\n\n\treturn <div ref={containerRef} className={className} style={style} />;\n}\n","import type {\n\tLoadTapipayOptions,\n\tTapipayEnvironment,\n\tTapipayInstance,\n} from \"./types\";\n\nconst SDK_URLS: Record<TapipayEnvironment, string> = {\n\tproduction: \"https://app.tapipay.la/embed.js\",\n\thomo: \"https://homo.tapipay.la/embed.js\",\n};\n\n// Idempotencia por entorno\nconst loadPromises = new Map<TapipayEnvironment, Promise<TapipayInstance>>();\n\n/**\n * Carga el SDK de TapiPay de forma asíncrona inyectando el script en el DOM.\n *\n * - Idempotente por entorno: múltiples llamadas con el mismo `environment` retornan la misma Promise.\n * - Si window.tapipay ya existe (script cargado sync), resuelve inmediatamente.\n * - Compatible con React Strict Mode (doble mount/unmount).\n *\n * @example\n * // Producción (default)\n * const tapipay = await loadTapipay();\n *\n * // Homologación\n * const tapipay = await loadTapipay({ environment: 'homo' });\n *\n * // Se requiere UNO de { organization, companyCode } (companyCode tiene prioridad).\n * tapipay.initialize({ container: \"#widget\", organization: \"acme\", identifier: \"CLI-001\" });\n * tapipay.initialize({ container: \"#widget\", companyCode: \"acme-mx\", identifier: \"CLI-001\" });\n */\nexport function loadTapipay(\n\toptions?: LoadTapipayOptions,\n): Promise<TapipayInstance> {\n\tconst env: TapipayEnvironment = options?.environment ?? \"production\";\n\tconst SDK_URL = SDK_URLS[env];\n\tconst SCRIPT_ID = `tapipay-embed-sdk-${env}`;\n\n\t// SSR guard\n\tif (typeof window === \"undefined\") {\n\t\treturn Promise.reject(\n\t\t\tnew Error(\"[TapiPay] loadTapipay() requires a browser environment.\"),\n\t\t);\n\t}\n\n\t// Ya cargado de forma síncrona (script tag directo)\n\tif (window.tapipay && !window.tapipay._q) {\n\t\treturn Promise.resolve(window.tapipay);\n\t}\n\n\t// Reutilizar promise existente (idempotencia por entorno)\n\tconst existing = loadPromises.get(env);\n\tif (existing) return existing;\n\n\tconst promise = new Promise<TapipayInstance>((resolve, reject) => {\n\t\t// Si ya hay un script inyectado, esperar a que cargue\n\t\tconst existingScript = document.getElementById(\n\t\t\tSCRIPT_ID,\n\t\t) as HTMLScriptElement | null;\n\n\t\tconst onLoad = () => {\n\t\t\tif (window.tapipay) {\n\t\t\t\tresolve(window.tapipay);\n\t\t\t} else {\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\"[TapiPay] El script cargó pero window.tapipay no está definido.\",\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst onError = () => {\n\t\t\tloadPromises.delete(env);\n\t\t\treject(new Error(`[TapiPay] Error al cargar el SDK desde ${SDK_URL}`));\n\t\t};\n\n\t\tif (existingScript) {\n\t\t\texistingScript.addEventListener(\"load\", onLoad);\n\t\t\texistingScript.addEventListener(\"error\", onError);\n\t\t\treturn;\n\t\t}\n\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.id = SCRIPT_ID;\n\t\tscript.src = SDK_URL;\n\t\tscript.async = true;\n\t\tscript.addEventListener(\"load\", onLoad);\n\t\tscript.addEventListener(\"error\", onError);\n\t\tdocument.head.appendChild(script);\n\t});\n\n\tloadPromises.set(env, promise);\n\treturn promise;\n}\n"],"mappings":"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","names":[]}
package/dist/react.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { o as TapipayOptions, n as TapipayEnvironment, r as TapipayPaymentWindowOpenedEvent, q as TapipayPaymentSubmittedEvent, p as TapipayPaymentCancelledEvent, d as TapipayAutopayLoadedEvent, a as TapipayAutopayActivatedEvent, f as TapipayAutopayRemovedEvent, c as TapipayAutopayErrorEvent, i as TapipayDomiciliationBankSelectedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, j as TapipayDomiciliationConfirmedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, L as LoadTapipayOptions, T as TapipayInstance } from './types-DYWP-adY.cjs';
2
+ import { o as TapipayOptions, n as TapipayEnvironment, w as TapipayPaymentWindowOpenedEvent, v as TapipayPaymentSubmittedEvent, p as TapipayPaymentCancelledEvent, d as TapipayAutopayLoadedEvent, a as TapipayAutopayActivatedEvent, f as TapipayAutopayRemovedEvent, c as TapipayAutopayErrorEvent, i as TapipayDomiciliationBankSelectedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, j as TapipayDomiciliationConfirmedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, t as TapipayPaymentMethodsLoadedEvent, u as TapipayPaymentMethodsRemovedEvent, s as TapipayPaymentMethodsErrorEvent, L as LoadTapipayOptions, T as TapipayInstance } from './types-tK7-Mux0.cjs';
3
3
 
4
4
  /**
5
5
  * Hook de bajo nivel que carga el SDK y retorna la instancia.
@@ -40,6 +40,12 @@ interface TapipayWidgetProps extends Omit<TapipayOptions, "container"> {
40
40
  onDomiciliationConfirmed?: (data: TapipayDomiciliationConfirmedEvent) => void;
41
41
  /** (Vista autopay) El chequeo en vivo (debounceado) de la CLABE/tarjeta rechazó el valor actual. No es un hito: puede dispararse cero, una o muchas veces. */
42
42
  onDomiciliationAccountCheckFailed?: (data: TapipayDomiciliationAccountCheckFailedEvent) => void;
43
+ /** (Vista payment-methods) El medio de pago del usuario cargó. Emite una vez por montaje, incluso si no tiene ninguno. */
44
+ onPaymentMethodsLoaded?: (data: TapipayPaymentMethodsLoadedEvent) => void;
45
+ /** (Vista payment-methods) El usuario quitó su medio de pago. Trae cuántas domiciliaciones se cancelaron en cascada. */
46
+ onPaymentMethodsRemoved?: (data: TapipayPaymentMethodsRemovedEvent) => void;
47
+ /** (Vista payment-methods) Error de carga o de baja. `stage: "unavailable"` significa que la organización no tiene el widget habilitado. */
48
+ onPaymentMethodsError?: (data: TapipayPaymentMethodsErrorEvent) => void;
43
49
  /** Clases CSS adicionales para el contenedor del widget. */
44
50
  className?: string;
45
51
  /** Estilos inline adicionales para el contenedor del widget. */
@@ -83,6 +89,6 @@ interface TapipayWidgetProps extends Omit<TapipayOptions, "container"> {
83
89
  * onDomiciliationConfirmed={() => console.log("Enviado — esperar onAutopayActivated")}
84
90
  * />
85
91
  */
86
- declare function TapipayWidget({ organization, companyCode, identifier, externalRequestId, selectionStrategy, view, environment, onPaymentWindowOpened, onPaymentSubmitted, onCancelled, onAutopayLoaded, onAutopayActivated, onAutopayRemoved, onAutopayError, onDomiciliationBankSelected, onDomiciliationFormCompleted, onDomiciliationVerificationCompleted, onDomiciliationConfirmed, onDomiciliationAccountCheckFailed, className, style, }: TapipayWidgetProps): react_jsx_runtime.JSX.Element;
92
+ declare function TapipayWidget({ organization, companyCode, identifier, externalRequestId, selectionStrategy, view, environment, onPaymentWindowOpened, onPaymentSubmitted, onCancelled, onAutopayLoaded, onAutopayActivated, onAutopayRemoved, onAutopayError, onPaymentMethodsLoaded, onPaymentMethodsRemoved, onPaymentMethodsError, onDomiciliationBankSelected, onDomiciliationFormCompleted, onDomiciliationVerificationCompleted, onDomiciliationConfirmed, onDomiciliationAccountCheckFailed, className, style, }: TapipayWidgetProps): react_jsx_runtime.JSX.Element;
87
93
 
88
94
  export { TapipayWidget, type TapipayWidgetProps, useTapipay };
package/dist/react.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { o as TapipayOptions, n as TapipayEnvironment, r as TapipayPaymentWindowOpenedEvent, q as TapipayPaymentSubmittedEvent, p as TapipayPaymentCancelledEvent, d as TapipayAutopayLoadedEvent, a as TapipayAutopayActivatedEvent, f as TapipayAutopayRemovedEvent, c as TapipayAutopayErrorEvent, i as TapipayDomiciliationBankSelectedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, j as TapipayDomiciliationConfirmedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, L as LoadTapipayOptions, T as TapipayInstance } from './types-DYWP-adY.js';
2
+ import { o as TapipayOptions, n as TapipayEnvironment, w as TapipayPaymentWindowOpenedEvent, v as TapipayPaymentSubmittedEvent, p as TapipayPaymentCancelledEvent, d as TapipayAutopayLoadedEvent, a as TapipayAutopayActivatedEvent, f as TapipayAutopayRemovedEvent, c as TapipayAutopayErrorEvent, i as TapipayDomiciliationBankSelectedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, j as TapipayDomiciliationConfirmedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, t as TapipayPaymentMethodsLoadedEvent, u as TapipayPaymentMethodsRemovedEvent, s as TapipayPaymentMethodsErrorEvent, L as LoadTapipayOptions, T as TapipayInstance } from './types-tK7-Mux0.js';
3
3
 
4
4
  /**
5
5
  * Hook de bajo nivel que carga el SDK y retorna la instancia.
@@ -40,6 +40,12 @@ interface TapipayWidgetProps extends Omit<TapipayOptions, "container"> {
40
40
  onDomiciliationConfirmed?: (data: TapipayDomiciliationConfirmedEvent) => void;
41
41
  /** (Vista autopay) El chequeo en vivo (debounceado) de la CLABE/tarjeta rechazó el valor actual. No es un hito: puede dispararse cero, una o muchas veces. */
42
42
  onDomiciliationAccountCheckFailed?: (data: TapipayDomiciliationAccountCheckFailedEvent) => void;
43
+ /** (Vista payment-methods) El medio de pago del usuario cargó. Emite una vez por montaje, incluso si no tiene ninguno. */
44
+ onPaymentMethodsLoaded?: (data: TapipayPaymentMethodsLoadedEvent) => void;
45
+ /** (Vista payment-methods) El usuario quitó su medio de pago. Trae cuántas domiciliaciones se cancelaron en cascada. */
46
+ onPaymentMethodsRemoved?: (data: TapipayPaymentMethodsRemovedEvent) => void;
47
+ /** (Vista payment-methods) Error de carga o de baja. `stage: "unavailable"` significa que la organización no tiene el widget habilitado. */
48
+ onPaymentMethodsError?: (data: TapipayPaymentMethodsErrorEvent) => void;
43
49
  /** Clases CSS adicionales para el contenedor del widget. */
44
50
  className?: string;
45
51
  /** Estilos inline adicionales para el contenedor del widget. */
@@ -83,6 +89,6 @@ interface TapipayWidgetProps extends Omit<TapipayOptions, "container"> {
83
89
  * onDomiciliationConfirmed={() => console.log("Enviado — esperar onAutopayActivated")}
84
90
  * />
85
91
  */
86
- declare function TapipayWidget({ organization, companyCode, identifier, externalRequestId, selectionStrategy, view, environment, onPaymentWindowOpened, onPaymentSubmitted, onCancelled, onAutopayLoaded, onAutopayActivated, onAutopayRemoved, onAutopayError, onDomiciliationBankSelected, onDomiciliationFormCompleted, onDomiciliationVerificationCompleted, onDomiciliationConfirmed, onDomiciliationAccountCheckFailed, className, style, }: TapipayWidgetProps): react_jsx_runtime.JSX.Element;
92
+ declare function TapipayWidget({ organization, companyCode, identifier, externalRequestId, selectionStrategy, view, environment, onPaymentWindowOpened, onPaymentSubmitted, onCancelled, onAutopayLoaded, onAutopayActivated, onAutopayRemoved, onAutopayError, onPaymentMethodsLoaded, onPaymentMethodsRemoved, onPaymentMethodsError, onDomiciliationBankSelected, onDomiciliationFormCompleted, onDomiciliationVerificationCompleted, onDomiciliationConfirmed, onDomiciliationAccountCheckFailed, className, style, }: TapipayWidgetProps): react_jsx_runtime.JSX.Element;
87
93
 
88
94
  export { TapipayWidget, type TapipayWidgetProps, useTapipay };
package/dist/react.js CHANGED
@@ -37,6 +37,9 @@ function TapipayWidget({
37
37
  onAutopayActivated,
38
38
  onAutopayRemoved,
39
39
  onAutopayError,
40
+ onPaymentMethodsLoaded,
41
+ onPaymentMethodsRemoved,
42
+ onPaymentMethodsError,
40
43
  onDomiciliationBankSelected,
41
44
  onDomiciliationFormCompleted,
42
45
  onDomiciliationVerificationCompleted,
@@ -53,6 +56,9 @@ function TapipayWidget({
53
56
  const onAutopayActivatedRef = useRef(onAutopayActivated);
54
57
  const onAutopayRemovedRef = useRef(onAutopayRemoved);
55
58
  const onAutopayErrorRef = useRef(onAutopayError);
59
+ const onPaymentMethodsLoadedRef = useRef(onPaymentMethodsLoaded);
60
+ const onPaymentMethodsRemovedRef = useRef(onPaymentMethodsRemoved);
61
+ const onPaymentMethodsErrorRef = useRef(onPaymentMethodsError);
56
62
  const onDomiciliationBankSelectedRef = useRef(onDomiciliationBankSelected);
57
63
  const onDomiciliationFormCompletedRef = useRef(onDomiciliationFormCompleted);
58
64
  const onDomiciliationVerificationCompletedRef = useRef(
@@ -83,6 +89,15 @@ function TapipayWidget({
83
89
  useEffect(() => {
84
90
  onAutopayErrorRef.current = onAutopayError;
85
91
  }, [onAutopayError]);
92
+ useEffect(() => {
93
+ onPaymentMethodsLoadedRef.current = onPaymentMethodsLoaded;
94
+ }, [onPaymentMethodsLoaded]);
95
+ useEffect(() => {
96
+ onPaymentMethodsRemovedRef.current = onPaymentMethodsRemoved;
97
+ }, [onPaymentMethodsRemoved]);
98
+ useEffect(() => {
99
+ onPaymentMethodsErrorRef.current = onPaymentMethodsError;
100
+ }, [onPaymentMethodsError]);
86
101
  useEffect(() => {
87
102
  onDomiciliationBankSelectedRef.current = onDomiciliationBankSelected;
88
103
  }, [onDomiciliationBankSelected]);
@@ -151,6 +166,18 @@ function TapipayWidget({
151
166
  var _a;
152
167
  (_a = onDomiciliationAccountCheckFailedRef.current) == null ? void 0 : _a.call(onDomiciliationAccountCheckFailedRef, data);
153
168
  };
169
+ const handlePaymentMethodsLoaded = (data) => {
170
+ var _a;
171
+ (_a = onPaymentMethodsLoadedRef.current) == null ? void 0 : _a.call(onPaymentMethodsLoadedRef, data);
172
+ };
173
+ const handlePaymentMethodsRemoved = (data) => {
174
+ var _a;
175
+ (_a = onPaymentMethodsRemovedRef.current) == null ? void 0 : _a.call(onPaymentMethodsRemovedRef, data);
176
+ };
177
+ const handlePaymentMethodsError = (data) => {
178
+ var _a;
179
+ (_a = onPaymentMethodsErrorRef.current) == null ? void 0 : _a.call(onPaymentMethodsErrorRef, data);
180
+ };
154
181
  loadTapipay({ environment }).then((instance) => {
155
182
  if (cancelled) return;
156
183
  tapipayInstance = instance;
@@ -175,6 +202,9 @@ function TapipayWidget({
175
202
  "domiciliationAccountCheckFailed",
176
203
  handleDomiciliationAccountCheckFailed
177
204
  );
205
+ instance.on("paymentMethodsLoaded", handlePaymentMethodsLoaded);
206
+ instance.on("paymentMethodsRemoved", handlePaymentMethodsRemoved);
207
+ instance.on("paymentMethodsError", handlePaymentMethodsError);
178
208
  instance.initialize({
179
209
  container,
180
210
  organization,
@@ -215,6 +245,12 @@ function TapipayWidget({
215
245
  "domiciliationAccountCheckFailed",
216
246
  handleDomiciliationAccountCheckFailed
217
247
  );
248
+ tapipayInstance.off("paymentMethodsLoaded", handlePaymentMethodsLoaded);
249
+ tapipayInstance.off(
250
+ "paymentMethodsRemoved",
251
+ handlePaymentMethodsRemoved
252
+ );
253
+ tapipayInstance.off("paymentMethodsError", handlePaymentMethodsError);
218
254
  tapipayInstance.destroy(container);
219
255
  }
220
256
  };
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { loadTapipay } from \"./loader\";\nimport type {\n\tLoadTapipayOptions,\n\tTapipayAutopayActivatedEvent,\n\tTapipayAutopayErrorEvent,\n\tTapipayAutopayLoadedEvent,\n\tTapipayAutopayRemovedEvent,\n\tTapipayDomiciliationAccountCheckFailedEvent,\n\tTapipayDomiciliationBankSelectedEvent,\n\tTapipayDomiciliationConfirmedEvent,\n\tTapipayDomiciliationFormCompletedEvent,\n\tTapipayDomiciliationVerificationCompletedEvent,\n\tTapipayEnvironment,\n\tTapipayInstance,\n\tTapipayOptions,\n\tTapipayPaymentCancelledEvent,\n\tTapipayPaymentSubmittedEvent,\n\tTapipayPaymentWindowOpenedEvent,\n} from \"./types\";\n\n// ─── useTapipay hook ──────────────────────────────────────────────────────────\n\n/**\n * Hook de bajo nivel que carga el SDK y retorna la instancia.\n * Útil cuando necesitas control manual sobre initialize/destroy.\n *\n * @example\n * const { tapipay, error } = useTapipay();\n * const { tapipay, error } = useTapipay({ environment: 'homo' });\n */\nexport function useTapipay(options?: LoadTapipayOptions): {\n\ttapipay: TapipayInstance | null;\n\terror: Error | null;\n} {\n\tconst [tapipay, setTapipay] = useState<TapipayInstance | null>(null);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst environment = options?.environment;\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tloadTapipay({ environment })\n\t\t\t.then((instance) => {\n\t\t\t\tif (!cancelled) setTapipay(instance);\n\t\t\t})\n\t\t\t.catch((err: Error) => {\n\t\t\t\tif (!cancelled) setError(err);\n\t\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [environment]);\n\n\treturn { tapipay, error };\n}\n\n// ─── TapipayWidget component ──────────────────────────────────────────────────\n\nexport interface TapipayWidgetProps extends Omit<TapipayOptions, \"container\"> {\n\t/** Entorno del SDK a cargar. Por defecto `'production'`. Usar `'homo'` para homologación. */\n\tenvironment?: TapipayEnvironment;\n\t/** Callback invocado cuando el popup de Yuno se abre exitosamente. */\n\tonPaymentWindowOpened?: (data: TapipayPaymentWindowOpenedEvent) => void;\n\t/** Callback invocado cuando el usuario completó el formulario de Yuno y fue redirigido al callback. */\n\tonPaymentSubmitted?: (data: TapipayPaymentSubmittedEvent) => void;\n\t/** Callback invocado cuando el usuario cierra el popup sin completar el pago. */\n\tonCancelled?: (data: TapipayPaymentCancelledEvent) => void;\n\t/** (Vista autopay) Callback con el conjunto de adhesiones activas; se reinvoca cuando la lista cambia. */\n\tonAutopayLoaded?: (data: TapipayAutopayLoadedEvent) => void;\n\t/** (Vista autopay) Callback cuando una nueva adhesión queda activa (una sola vez por adhesión nueva). */\n\tonAutopayActivated?: (data: TapipayAutopayActivatedEvent) => void;\n\t/** (Vista autopay) Callback cuando el usuario desadhiere un medio con éxito. */\n\tonAutopayRemoved?: (data: TapipayAutopayRemovedEvent) => void;\n\t/** (Vista autopay) Callback ante un error de carga de adhesiones o de desadhesión. */\n\tonAutopayError?: (data: TapipayAutopayErrorEvent) => void;\n\t/** (Vista autopay) El usuario eligió su banco en el alta de domiciliación. Emite en cada cambio de selección. */\n\tonDomiciliationBankSelected?: (\n\t\tdata: TapipayDomiciliationBankSelectedEvent,\n\t) => void;\n\t/** (Vista autopay) Los datos de la cuenta pasaron la validación del backend. Ojo: dispara al confirmar el método de verificación, no al salir del formulario. */\n\tonDomiciliationFormCompleted?: (\n\t\tdata: TapipayDomiciliationFormCompletedEvent,\n\t) => void;\n\t/** (Vista autopay) La verificación llegó a un desenlace. Solo emite al outcome final: un intento fallido con reintentos disponibles NO dispara el evento. */\n\tonDomiciliationVerificationCompleted?: (\n\t\tdata: TapipayDomiciliationVerificationCompletedEvent,\n\t) => void;\n\t/** (Vista autopay) El usuario confirmó la domiciliación. NO significa que quedó registrada — la confirmación real llega por `onAutopayActivated`. */\n\tonDomiciliationConfirmed?: (data: TapipayDomiciliationConfirmedEvent) => void;\n\t/** (Vista autopay) El chequeo en vivo (debounceado) de la CLABE/tarjeta rechazó el valor actual. No es un hito: puede dispararse cero, una o muchas veces. */\n\tonDomiciliationAccountCheckFailed?: (\n\t\tdata: TapipayDomiciliationAccountCheckFailedEvent,\n\t) => void;\n\t/** Clases CSS adicionales para el contenedor del widget. */\n\tclassName?: string;\n\t/** Estilos inline adicionales para el contenedor del widget. */\n\tstyle?: React.CSSProperties;\n}\n\n/**\n * Componente React que encapsula el widget de pago TapiPay.\n *\n * Maneja internamente la carga del SDK, el ciclo de vida del widget\n * y el cleanup al desmontar. Compatible con React Strict Mode.\n *\n * Se requiere `identifier` + UNO de `{ organization, companyCode }`.\n * Si se pasan ambos, `companyCode` tiene prioridad.\n *\n * @example\n * // Vista de pagos (default)\n * <TapipayWidget\n * organization=\"acme\"\n * identifier=\"CLI-001\"\n * externalRequestId=\"FAC-2024-001\"\n * onPaymentSubmitted={(data) => console.log(\"Pago enviado\", data)}\n * onCancelled={() => console.log(\"Pago cancelado por el usuario\")}\n * />\n *\n * @example\n * // Usando companyCode en lugar de organization\n * <TapipayWidget companyCode=\"acme-mx\" identifier=\"CLI-001\" />\n *\n * @example\n * // Vista de gestión de adhesiones de autopay\n * <TapipayWidget\n * organization=\"acme\"\n * identifier=\"CLI-001\"\n * view=\"autopay\"\n * onAutopayLoaded={(data) => console.log(\"Adhesiones\", data.count)}\n * onAutopayActivated={(data) => console.log(\"Adhesión activada\", data.id)}\n * onAutopayRemoved={(data) => console.log(\"Adhesión eliminada\", data.id)}\n * onDomiciliationBankSelected={(data) => console.log(\"Banco\", data.name)}\n * onDomiciliationFormCompleted={(data) => console.log(\"Cuenta ****\" + data.lastFour)}\n * onDomiciliationVerificationCompleted={(data) => console.log(\"Verificación\", data.outcome)}\n * onDomiciliationConfirmed={() => console.log(\"Enviado — esperar onAutopayActivated\")}\n * />\n */\nexport function TapipayWidget({\n\torganization,\n\tcompanyCode,\n\tidentifier,\n\texternalRequestId,\n\tselectionStrategy,\n\tview,\n\tenvironment,\n\tonPaymentWindowOpened,\n\tonPaymentSubmitted,\n\tonCancelled,\n\tonAutopayLoaded,\n\tonAutopayActivated,\n\tonAutopayRemoved,\n\tonAutopayError,\n\tonDomiciliationBankSelected,\n\tonDomiciliationFormCompleted,\n\tonDomiciliationVerificationCompleted,\n\tonDomiciliationConfirmed,\n\tonDomiciliationAccountCheckFailed,\n\tclassName,\n\tstyle,\n}: TapipayWidgetProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\t// Refs para evitar re-renders innecesarios y closures estáticos en useEffect\n\tconst onPaymentWindowOpenedRef = useRef(onPaymentWindowOpened);\n\tconst onPaymentSubmittedRef = useRef(onPaymentSubmitted);\n\tconst onCancelledRef = useRef(onCancelled);\n\tconst onAutopayLoadedRef = useRef(onAutopayLoaded);\n\tconst onAutopayActivatedRef = useRef(onAutopayActivated);\n\tconst onAutopayRemovedRef = useRef(onAutopayRemoved);\n\tconst onAutopayErrorRef = useRef(onAutopayError);\n\tconst onDomiciliationBankSelectedRef = useRef(onDomiciliationBankSelected);\n\tconst onDomiciliationFormCompletedRef = useRef(onDomiciliationFormCompleted);\n\tconst onDomiciliationVerificationCompletedRef = useRef(\n\t\tonDomiciliationVerificationCompleted,\n\t);\n\tconst onDomiciliationConfirmedRef = useRef(onDomiciliationConfirmed);\n\tconst onDomiciliationAccountCheckFailedRef = useRef(\n\t\tonDomiciliationAccountCheckFailed,\n\t);\n\n\tuseEffect(() => {\n\t\tonPaymentWindowOpenedRef.current = onPaymentWindowOpened;\n\t}, [onPaymentWindowOpened]);\n\n\tuseEffect(() => {\n\t\tonPaymentSubmittedRef.current = onPaymentSubmitted;\n\t}, [onPaymentSubmitted]);\n\n\tuseEffect(() => {\n\t\tonCancelledRef.current = onCancelled;\n\t}, [onCancelled]);\n\n\tuseEffect(() => {\n\t\tonAutopayLoadedRef.current = onAutopayLoaded;\n\t}, [onAutopayLoaded]);\n\n\tuseEffect(() => {\n\t\tonAutopayActivatedRef.current = onAutopayActivated;\n\t}, [onAutopayActivated]);\n\n\tuseEffect(() => {\n\t\tonAutopayRemovedRef.current = onAutopayRemoved;\n\t}, [onAutopayRemoved]);\n\n\tuseEffect(() => {\n\t\tonAutopayErrorRef.current = onAutopayError;\n\t}, [onAutopayError]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationBankSelectedRef.current = onDomiciliationBankSelected;\n\t}, [onDomiciliationBankSelected]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationFormCompletedRef.current = onDomiciliationFormCompleted;\n\t}, [onDomiciliationFormCompleted]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationVerificationCompletedRef.current =\n\t\t\tonDomiciliationVerificationCompleted;\n\t}, [onDomiciliationVerificationCompleted]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationConfirmedRef.current = onDomiciliationConfirmed;\n\t}, [onDomiciliationConfirmed]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationAccountCheckFailedRef.current =\n\t\t\tonDomiciliationAccountCheckFailed;\n\t}, [onDomiciliationAccountCheckFailed]);\n\n\tuseEffect(() => {\n\t\tif (!containerRef.current) return;\n\t\tconst container = containerRef.current;\n\n\t\tlet tapipayInstance: TapipayInstance | null = null;\n\t\tlet cancelled = false;\n\n\t\tconst handlePaymentWindowOpened = (\n\t\t\tdata: TapipayPaymentWindowOpenedEvent,\n\t\t) => {\n\t\t\tonPaymentWindowOpenedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentSubmitted = (data: TapipayPaymentSubmittedEvent) => {\n\t\t\tonPaymentSubmittedRef.current?.(data);\n\t\t};\n\t\tconst handleCancelled = (data: TapipayPaymentCancelledEvent) => {\n\t\t\tonCancelledRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayLoaded = (data: TapipayAutopayLoadedEvent) => {\n\t\t\tonAutopayLoadedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayActivated = (data: TapipayAutopayActivatedEvent) => {\n\t\t\tonAutopayActivatedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayRemoved = (data: TapipayAutopayRemovedEvent) => {\n\t\t\tonAutopayRemovedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayError = (data: TapipayAutopayErrorEvent) => {\n\t\t\tonAutopayErrorRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationBankSelected = (\n\t\t\tdata: TapipayDomiciliationBankSelectedEvent,\n\t\t) => {\n\t\t\tonDomiciliationBankSelectedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationFormCompleted = (\n\t\t\tdata: TapipayDomiciliationFormCompletedEvent,\n\t\t) => {\n\t\t\tonDomiciliationFormCompletedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationVerificationCompleted = (\n\t\t\tdata: TapipayDomiciliationVerificationCompletedEvent,\n\t\t) => {\n\t\t\tonDomiciliationVerificationCompletedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationConfirmed = (\n\t\t\tdata: TapipayDomiciliationConfirmedEvent,\n\t\t) => {\n\t\t\tonDomiciliationConfirmedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationAccountCheckFailed = (\n\t\t\tdata: TapipayDomiciliationAccountCheckFailedEvent,\n\t\t) => {\n\t\t\tonDomiciliationAccountCheckFailedRef.current?.(data);\n\t\t};\n\n\t\tloadTapipay({ environment }).then((instance) => {\n\t\t\tif (cancelled) return;\n\t\t\ttapipayInstance = instance;\n\n\t\t\tinstance.on(\"paymentWindowOpened\", handlePaymentWindowOpened);\n\t\t\tinstance.on(\"paymentSubmitted\", handlePaymentSubmitted);\n\t\t\tinstance.on(\"paymentCancelled\", handleCancelled);\n\t\t\tinstance.on(\"autopayLoaded\", handleAutopayLoaded);\n\t\t\tinstance.on(\"autopayActivated\", handleAutopayActivated);\n\t\t\tinstance.on(\"autopayRemoved\", handleAutopayRemoved);\n\t\t\tinstance.on(\"autopayError\", handleAutopayError);\n\t\t\tinstance.on(\"domiciliationBankSelected\", handleDomiciliationBankSelected);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationFormCompleted\",\n\t\t\t\thandleDomiciliationFormCompleted,\n\t\t\t);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationVerificationCompleted\",\n\t\t\t\thandleDomiciliationVerificationCompleted,\n\t\t\t);\n\t\t\tinstance.on(\"domiciliationConfirmed\", handleDomiciliationConfirmed);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationAccountCheckFailed\",\n\t\t\t\thandleDomiciliationAccountCheckFailed,\n\t\t\t);\n\n\t\t\tinstance.initialize({\n\t\t\t\tcontainer,\n\t\t\t\torganization,\n\t\t\t\tcompanyCode,\n\t\t\t\tidentifier,\n\t\t\t\texternalRequestId,\n\t\t\t\tselectionStrategy,\n\t\t\t\tview,\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tif (tapipayInstance) {\n\t\t\t\ttapipayInstance.off(\"paymentWindowOpened\", handlePaymentWindowOpened);\n\t\t\t\ttapipayInstance.off(\"paymentSubmitted\", handlePaymentSubmitted);\n\t\t\t\ttapipayInstance.off(\"paymentCancelled\", handleCancelled);\n\t\t\t\ttapipayInstance.off(\"autopayLoaded\", handleAutopayLoaded);\n\t\t\t\ttapipayInstance.off(\"autopayActivated\", handleAutopayActivated);\n\t\t\t\ttapipayInstance.off(\"autopayRemoved\", handleAutopayRemoved);\n\t\t\t\ttapipayInstance.off(\"autopayError\", handleAutopayError);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationBankSelected\",\n\t\t\t\t\thandleDomiciliationBankSelected,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationFormCompleted\",\n\t\t\t\t\thandleDomiciliationFormCompleted,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationVerificationCompleted\",\n\t\t\t\t\thandleDomiciliationVerificationCompleted,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationConfirmed\",\n\t\t\t\t\thandleDomiciliationConfirmed,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationAccountCheckFailed\",\n\t\t\t\t\thandleDomiciliationAccountCheckFailed,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.destroy(container);\n\t\t\t}\n\t\t};\n\t\t// El widget se re-monta si cambian los parámetros de identificación o entorno\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [\n\t\torganization,\n\t\tcompanyCode,\n\t\tidentifier,\n\t\texternalRequestId,\n\t\tselectionStrategy,\n\t\tview,\n\t\tenvironment,\n\t]);\n\n\treturn <div ref={containerRef} className={className} style={style} />;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/react.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { loadTapipay } from \"./loader\";\nimport type {\n\tLoadTapipayOptions,\n\tTapipayAutopayActivatedEvent,\n\tTapipayAutopayErrorEvent,\n\tTapipayAutopayLoadedEvent,\n\tTapipayAutopayRemovedEvent,\n\tTapipayDomiciliationAccountCheckFailedEvent,\n\tTapipayDomiciliationBankSelectedEvent,\n\tTapipayDomiciliationConfirmedEvent,\n\tTapipayDomiciliationFormCompletedEvent,\n\tTapipayDomiciliationVerificationCompletedEvent,\n\tTapipayEnvironment,\n\tTapipayInstance,\n\tTapipayOptions,\n\tTapipayPaymentCancelledEvent,\n\tTapipayPaymentMethodsErrorEvent,\n\tTapipayPaymentMethodsLoadedEvent,\n\tTapipayPaymentMethodsRemovedEvent,\n\tTapipayPaymentSubmittedEvent,\n\tTapipayPaymentWindowOpenedEvent,\n} from \"./types\";\n\n// ─── useTapipay hook ──────────────────────────────────────────────────────────\n\n/**\n * Hook de bajo nivel que carga el SDK y retorna la instancia.\n * Útil cuando necesitas control manual sobre initialize/destroy.\n *\n * @example\n * const { tapipay, error } = useTapipay();\n * const { tapipay, error } = useTapipay({ environment: 'homo' });\n */\nexport function useTapipay(options?: LoadTapipayOptions): {\n\ttapipay: TapipayInstance | null;\n\terror: Error | null;\n} {\n\tconst [tapipay, setTapipay] = useState<TapipayInstance | null>(null);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst environment = options?.environment;\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tloadTapipay({ environment })\n\t\t\t.then((instance) => {\n\t\t\t\tif (!cancelled) setTapipay(instance);\n\t\t\t})\n\t\t\t.catch((err: Error) => {\n\t\t\t\tif (!cancelled) setError(err);\n\t\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [environment]);\n\n\treturn { tapipay, error };\n}\n\n// ─── TapipayWidget component ──────────────────────────────────────────────────\n\nexport interface TapipayWidgetProps extends Omit<TapipayOptions, \"container\"> {\n\t/** Entorno del SDK a cargar. Por defecto `'production'`. Usar `'homo'` para homologación. */\n\tenvironment?: TapipayEnvironment;\n\t/** Callback invocado cuando el popup de Yuno se abre exitosamente. */\n\tonPaymentWindowOpened?: (data: TapipayPaymentWindowOpenedEvent) => void;\n\t/** Callback invocado cuando el usuario completó el formulario de Yuno y fue redirigido al callback. */\n\tonPaymentSubmitted?: (data: TapipayPaymentSubmittedEvent) => void;\n\t/** Callback invocado cuando el usuario cierra el popup sin completar el pago. */\n\tonCancelled?: (data: TapipayPaymentCancelledEvent) => void;\n\t/** (Vista autopay) Callback con el conjunto de adhesiones activas; se reinvoca cuando la lista cambia. */\n\tonAutopayLoaded?: (data: TapipayAutopayLoadedEvent) => void;\n\t/** (Vista autopay) Callback cuando una nueva adhesión queda activa (una sola vez por adhesión nueva). */\n\tonAutopayActivated?: (data: TapipayAutopayActivatedEvent) => void;\n\t/** (Vista autopay) Callback cuando el usuario desadhiere un medio con éxito. */\n\tonAutopayRemoved?: (data: TapipayAutopayRemovedEvent) => void;\n\t/** (Vista autopay) Callback ante un error de carga de adhesiones o de desadhesión. */\n\tonAutopayError?: (data: TapipayAutopayErrorEvent) => void;\n\t/** (Vista autopay) El usuario eligió su banco en el alta de domiciliación. Emite en cada cambio de selección. */\n\tonDomiciliationBankSelected?: (\n\t\tdata: TapipayDomiciliationBankSelectedEvent,\n\t) => void;\n\t/** (Vista autopay) Los datos de la cuenta pasaron la validación del backend. Ojo: dispara al confirmar el método de verificación, no al salir del formulario. */\n\tonDomiciliationFormCompleted?: (\n\t\tdata: TapipayDomiciliationFormCompletedEvent,\n\t) => void;\n\t/** (Vista autopay) La verificación llegó a un desenlace. Solo emite al outcome final: un intento fallido con reintentos disponibles NO dispara el evento. */\n\tonDomiciliationVerificationCompleted?: (\n\t\tdata: TapipayDomiciliationVerificationCompletedEvent,\n\t) => void;\n\t/** (Vista autopay) El usuario confirmó la domiciliación. NO significa que quedó registrada — la confirmación real llega por `onAutopayActivated`. */\n\tonDomiciliationConfirmed?: (data: TapipayDomiciliationConfirmedEvent) => void;\n\t/** (Vista autopay) El chequeo en vivo (debounceado) de la CLABE/tarjeta rechazó el valor actual. No es un hito: puede dispararse cero, una o muchas veces. */\n\tonDomiciliationAccountCheckFailed?: (\n\t\tdata: TapipayDomiciliationAccountCheckFailedEvent,\n\t) => void;\n\t/** (Vista payment-methods) El medio de pago del usuario cargó. Emite una vez por montaje, incluso si no tiene ninguno. */\n\tonPaymentMethodsLoaded?: (data: TapipayPaymentMethodsLoadedEvent) => void;\n\t/** (Vista payment-methods) El usuario quitó su medio de pago. Trae cuántas domiciliaciones se cancelaron en cascada. */\n\tonPaymentMethodsRemoved?: (data: TapipayPaymentMethodsRemovedEvent) => void;\n\t/** (Vista payment-methods) Error de carga o de baja. `stage: \"unavailable\"` significa que la organización no tiene el widget habilitado. */\n\tonPaymentMethodsError?: (data: TapipayPaymentMethodsErrorEvent) => void;\n\t/** Clases CSS adicionales para el contenedor del widget. */\n\tclassName?: string;\n\t/** Estilos inline adicionales para el contenedor del widget. */\n\tstyle?: React.CSSProperties;\n}\n\n/**\n * Componente React que encapsula el widget de pago TapiPay.\n *\n * Maneja internamente la carga del SDK, el ciclo de vida del widget\n * y el cleanup al desmontar. Compatible con React Strict Mode.\n *\n * Se requiere `identifier` + UNO de `{ organization, companyCode }`.\n * Si se pasan ambos, `companyCode` tiene prioridad.\n *\n * @example\n * // Vista de pagos (default)\n * <TapipayWidget\n * organization=\"acme\"\n * identifier=\"CLI-001\"\n * externalRequestId=\"FAC-2024-001\"\n * onPaymentSubmitted={(data) => console.log(\"Pago enviado\", data)}\n * onCancelled={() => console.log(\"Pago cancelado por el usuario\")}\n * />\n *\n * @example\n * // Usando companyCode en lugar de organization\n * <TapipayWidget companyCode=\"acme-mx\" identifier=\"CLI-001\" />\n *\n * @example\n * // Vista de gestión de adhesiones de autopay\n * <TapipayWidget\n * organization=\"acme\"\n * identifier=\"CLI-001\"\n * view=\"autopay\"\n * onAutopayLoaded={(data) => console.log(\"Adhesiones\", data.count)}\n * onAutopayActivated={(data) => console.log(\"Adhesión activada\", data.id)}\n * onAutopayRemoved={(data) => console.log(\"Adhesión eliminada\", data.id)}\n * onDomiciliationBankSelected={(data) => console.log(\"Banco\", data.name)}\n * onDomiciliationFormCompleted={(data) => console.log(\"Cuenta ****\" + data.lastFour)}\n * onDomiciliationVerificationCompleted={(data) => console.log(\"Verificación\", data.outcome)}\n * onDomiciliationConfirmed={() => console.log(\"Enviado — esperar onAutopayActivated\")}\n * />\n */\nexport function TapipayWidget({\n\torganization,\n\tcompanyCode,\n\tidentifier,\n\texternalRequestId,\n\tselectionStrategy,\n\tview,\n\tenvironment,\n\tonPaymentWindowOpened,\n\tonPaymentSubmitted,\n\tonCancelled,\n\tonAutopayLoaded,\n\tonAutopayActivated,\n\tonAutopayRemoved,\n\tonAutopayError,\n\tonPaymentMethodsLoaded,\n\tonPaymentMethodsRemoved,\n\tonPaymentMethodsError,\n\tonDomiciliationBankSelected,\n\tonDomiciliationFormCompleted,\n\tonDomiciliationVerificationCompleted,\n\tonDomiciliationConfirmed,\n\tonDomiciliationAccountCheckFailed,\n\tclassName,\n\tstyle,\n}: TapipayWidgetProps) {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\t// Refs para evitar re-renders innecesarios y closures estáticos en useEffect\n\tconst onPaymentWindowOpenedRef = useRef(onPaymentWindowOpened);\n\tconst onPaymentSubmittedRef = useRef(onPaymentSubmitted);\n\tconst onCancelledRef = useRef(onCancelled);\n\tconst onAutopayLoadedRef = useRef(onAutopayLoaded);\n\tconst onAutopayActivatedRef = useRef(onAutopayActivated);\n\tconst onAutopayRemovedRef = useRef(onAutopayRemoved);\n\tconst onAutopayErrorRef = useRef(onAutopayError);\n\tconst onPaymentMethodsLoadedRef = useRef(onPaymentMethodsLoaded);\n\tconst onPaymentMethodsRemovedRef = useRef(onPaymentMethodsRemoved);\n\tconst onPaymentMethodsErrorRef = useRef(onPaymentMethodsError);\n\tconst onDomiciliationBankSelectedRef = useRef(onDomiciliationBankSelected);\n\tconst onDomiciliationFormCompletedRef = useRef(onDomiciliationFormCompleted);\n\tconst onDomiciliationVerificationCompletedRef = useRef(\n\t\tonDomiciliationVerificationCompleted,\n\t);\n\tconst onDomiciliationConfirmedRef = useRef(onDomiciliationConfirmed);\n\tconst onDomiciliationAccountCheckFailedRef = useRef(\n\t\tonDomiciliationAccountCheckFailed,\n\t);\n\n\tuseEffect(() => {\n\t\tonPaymentWindowOpenedRef.current = onPaymentWindowOpened;\n\t}, [onPaymentWindowOpened]);\n\n\tuseEffect(() => {\n\t\tonPaymentSubmittedRef.current = onPaymentSubmitted;\n\t}, [onPaymentSubmitted]);\n\n\tuseEffect(() => {\n\t\tonCancelledRef.current = onCancelled;\n\t}, [onCancelled]);\n\n\tuseEffect(() => {\n\t\tonAutopayLoadedRef.current = onAutopayLoaded;\n\t}, [onAutopayLoaded]);\n\n\tuseEffect(() => {\n\t\tonAutopayActivatedRef.current = onAutopayActivated;\n\t}, [onAutopayActivated]);\n\n\tuseEffect(() => {\n\t\tonAutopayRemovedRef.current = onAutopayRemoved;\n\t}, [onAutopayRemoved]);\n\n\tuseEffect(() => {\n\t\tonAutopayErrorRef.current = onAutopayError;\n\t}, [onAutopayError]);\n\n\tuseEffect(() => {\n\t\tonPaymentMethodsLoadedRef.current = onPaymentMethodsLoaded;\n\t}, [onPaymentMethodsLoaded]);\n\n\tuseEffect(() => {\n\t\tonPaymentMethodsRemovedRef.current = onPaymentMethodsRemoved;\n\t}, [onPaymentMethodsRemoved]);\n\n\tuseEffect(() => {\n\t\tonPaymentMethodsErrorRef.current = onPaymentMethodsError;\n\t}, [onPaymentMethodsError]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationBankSelectedRef.current = onDomiciliationBankSelected;\n\t}, [onDomiciliationBankSelected]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationFormCompletedRef.current = onDomiciliationFormCompleted;\n\t}, [onDomiciliationFormCompleted]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationVerificationCompletedRef.current =\n\t\t\tonDomiciliationVerificationCompleted;\n\t}, [onDomiciliationVerificationCompleted]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationConfirmedRef.current = onDomiciliationConfirmed;\n\t}, [onDomiciliationConfirmed]);\n\n\tuseEffect(() => {\n\t\tonDomiciliationAccountCheckFailedRef.current =\n\t\t\tonDomiciliationAccountCheckFailed;\n\t}, [onDomiciliationAccountCheckFailed]);\n\n\tuseEffect(() => {\n\t\tif (!containerRef.current) return;\n\t\tconst container = containerRef.current;\n\n\t\tlet tapipayInstance: TapipayInstance | null = null;\n\t\tlet cancelled = false;\n\n\t\tconst handlePaymentWindowOpened = (\n\t\t\tdata: TapipayPaymentWindowOpenedEvent,\n\t\t) => {\n\t\t\tonPaymentWindowOpenedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentSubmitted = (data: TapipayPaymentSubmittedEvent) => {\n\t\t\tonPaymentSubmittedRef.current?.(data);\n\t\t};\n\t\tconst handleCancelled = (data: TapipayPaymentCancelledEvent) => {\n\t\t\tonCancelledRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayLoaded = (data: TapipayAutopayLoadedEvent) => {\n\t\t\tonAutopayLoadedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayActivated = (data: TapipayAutopayActivatedEvent) => {\n\t\t\tonAutopayActivatedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayRemoved = (data: TapipayAutopayRemovedEvent) => {\n\t\t\tonAutopayRemovedRef.current?.(data);\n\t\t};\n\t\tconst handleAutopayError = (data: TapipayAutopayErrorEvent) => {\n\t\t\tonAutopayErrorRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationBankSelected = (\n\t\t\tdata: TapipayDomiciliationBankSelectedEvent,\n\t\t) => {\n\t\t\tonDomiciliationBankSelectedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationFormCompleted = (\n\t\t\tdata: TapipayDomiciliationFormCompletedEvent,\n\t\t) => {\n\t\t\tonDomiciliationFormCompletedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationVerificationCompleted = (\n\t\t\tdata: TapipayDomiciliationVerificationCompletedEvent,\n\t\t) => {\n\t\t\tonDomiciliationVerificationCompletedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationConfirmed = (\n\t\t\tdata: TapipayDomiciliationConfirmedEvent,\n\t\t) => {\n\t\t\tonDomiciliationConfirmedRef.current?.(data);\n\t\t};\n\t\tconst handleDomiciliationAccountCheckFailed = (\n\t\t\tdata: TapipayDomiciliationAccountCheckFailedEvent,\n\t\t) => {\n\t\t\tonDomiciliationAccountCheckFailedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentMethodsLoaded = (\n\t\t\tdata: TapipayPaymentMethodsLoadedEvent,\n\t\t) => {\n\t\t\tonPaymentMethodsLoadedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentMethodsRemoved = (\n\t\t\tdata: TapipayPaymentMethodsRemovedEvent,\n\t\t) => {\n\t\t\tonPaymentMethodsRemovedRef.current?.(data);\n\t\t};\n\t\tconst handlePaymentMethodsError = (\n\t\t\tdata: TapipayPaymentMethodsErrorEvent,\n\t\t) => {\n\t\t\tonPaymentMethodsErrorRef.current?.(data);\n\t\t};\n\n\t\tloadTapipay({ environment }).then((instance) => {\n\t\t\tif (cancelled) return;\n\t\t\ttapipayInstance = instance;\n\n\t\t\tinstance.on(\"paymentWindowOpened\", handlePaymentWindowOpened);\n\t\t\tinstance.on(\"paymentSubmitted\", handlePaymentSubmitted);\n\t\t\tinstance.on(\"paymentCancelled\", handleCancelled);\n\t\t\tinstance.on(\"autopayLoaded\", handleAutopayLoaded);\n\t\t\tinstance.on(\"autopayActivated\", handleAutopayActivated);\n\t\t\tinstance.on(\"autopayRemoved\", handleAutopayRemoved);\n\t\t\tinstance.on(\"autopayError\", handleAutopayError);\n\t\t\tinstance.on(\"domiciliationBankSelected\", handleDomiciliationBankSelected);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationFormCompleted\",\n\t\t\t\thandleDomiciliationFormCompleted,\n\t\t\t);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationVerificationCompleted\",\n\t\t\t\thandleDomiciliationVerificationCompleted,\n\t\t\t);\n\t\t\tinstance.on(\"domiciliationConfirmed\", handleDomiciliationConfirmed);\n\t\t\tinstance.on(\n\t\t\t\t\"domiciliationAccountCheckFailed\",\n\t\t\t\thandleDomiciliationAccountCheckFailed,\n\t\t\t);\n\t\t\tinstance.on(\"paymentMethodsLoaded\", handlePaymentMethodsLoaded);\n\t\t\tinstance.on(\"paymentMethodsRemoved\", handlePaymentMethodsRemoved);\n\t\t\tinstance.on(\"paymentMethodsError\", handlePaymentMethodsError);\n\n\t\t\tinstance.initialize({\n\t\t\t\tcontainer,\n\t\t\t\torganization,\n\t\t\t\tcompanyCode,\n\t\t\t\tidentifier,\n\t\t\t\texternalRequestId,\n\t\t\t\tselectionStrategy,\n\t\t\t\tview,\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tif (tapipayInstance) {\n\t\t\t\ttapipayInstance.off(\"paymentWindowOpened\", handlePaymentWindowOpened);\n\t\t\t\ttapipayInstance.off(\"paymentSubmitted\", handlePaymentSubmitted);\n\t\t\t\ttapipayInstance.off(\"paymentCancelled\", handleCancelled);\n\t\t\t\ttapipayInstance.off(\"autopayLoaded\", handleAutopayLoaded);\n\t\t\t\ttapipayInstance.off(\"autopayActivated\", handleAutopayActivated);\n\t\t\t\ttapipayInstance.off(\"autopayRemoved\", handleAutopayRemoved);\n\t\t\t\ttapipayInstance.off(\"autopayError\", handleAutopayError);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationBankSelected\",\n\t\t\t\t\thandleDomiciliationBankSelected,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationFormCompleted\",\n\t\t\t\t\thandleDomiciliationFormCompleted,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationVerificationCompleted\",\n\t\t\t\t\thandleDomiciliationVerificationCompleted,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationConfirmed\",\n\t\t\t\t\thandleDomiciliationConfirmed,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"domiciliationAccountCheckFailed\",\n\t\t\t\t\thandleDomiciliationAccountCheckFailed,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\"paymentMethodsLoaded\", handlePaymentMethodsLoaded);\n\t\t\t\ttapipayInstance.off(\n\t\t\t\t\t\"paymentMethodsRemoved\",\n\t\t\t\t\thandlePaymentMethodsRemoved,\n\t\t\t\t);\n\t\t\t\ttapipayInstance.off(\"paymentMethodsError\", handlePaymentMethodsError);\n\t\t\t\ttapipayInstance.destroy(container);\n\t\t\t}\n\t\t};\n\t\t// El widget se re-monta si cambian los parámetros de identificación o entorno\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [\n\t\torganization,\n\t\tcompanyCode,\n\t\tidentifier,\n\t\texternalRequestId,\n\t\tselectionStrategy,\n\t\tview,\n\t\tenvironment,\n\t]);\n\n\treturn <div ref={containerRef} className={className} style={style} />;\n}\n"],"mappings":"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","names":[]}
@@ -18,8 +18,13 @@ interface LoadTapipayOptions {
18
18
  * Vista a montar en el widget.
19
19
  * - `'payments'` (default si se omite): medios de pago / pago de deuda.
20
20
  * - `'autopay'`: gestión de adhesiones (ver domiciliación y desadherirse).
21
+ * - `'payment-methods'`: el medio de pago del usuario (verlo y quitarlo).
22
+ *
23
+ * Las vistas `'autopay'` y `'payment-methods'` se habilitan por organización.
24
+ * Si la organización no las tiene habilitadas, el widget monta igual y avisa
25
+ * con el evento de error correspondiente y `stage: "unavailable"`.
21
26
  */
22
- type TapipayView = "payments" | "autopay";
27
+ type TapipayView = "payments" | "autopay" | "payment-methods";
23
28
  /**
24
29
  * Opciones requeridas para montar el widget TapiPay.
25
30
  *
@@ -108,9 +113,16 @@ interface TapipayAutopayLoadedEvent {
108
113
  /**
109
114
  * Payload del evento autopayActivated.
110
115
  * Una nueva adhesión quedó activa (se dispara una sola vez por adhesión nueva).
116
+ *
117
+ * **Excepción — organizaciones en modo gestionado**: acá `id` es un hash del
118
+ * `externalClientId` del cliente, no de una adhesión real (todavía no existe
119
+ * un `agendaId` en este punto del flujo). No correlaciona con el `id` que
120
+ * verás después en `autopayLoaded`/`autopayRemoved` para la adhesión real, y
121
+ * puede repetirse si el mismo cliente domicilia otra cuenta más adelante en
122
+ * la misma sesión del widget.
111
123
  */
112
124
  interface TapipayAutopayActivatedEvent {
113
- /** Hash opaco del identificador de la adhesión activada. */
125
+ /** Hash opaco del identificador de la adhesión activada (o del cliente, en modo gestionado — ver nota arriba). */
114
126
  id: string;
115
127
  /** Tipo de medio de la adhesión activada. */
116
128
  mediaType: TapipayAutopayMediaType;
@@ -135,8 +147,96 @@ interface TapipayAutopayRemovedEvent {
135
147
  * incluye PII ni detalle de credenciales.
136
148
  */
137
149
  interface TapipayAutopayErrorEvent {
138
- /** En qué fase ocurrió el fallo. */
139
- stage: "load" | "remove";
150
+ /**
151
+ * En qué fase ocurrió. `"unavailable"` no es un fallo: la organización no
152
+ * tiene el widget habilitado, así que no corresponde mostrarle un error al
153
+ * usuario.
154
+ */
155
+ stage: "load" | "remove" | "unavailable";
156
+ /** Mensaje neutral para el host. */
157
+ message: string;
158
+ }
159
+ /** Tipo lógico del medio de pago. Mismo vocabulario que en autopay. */
160
+ type TapipayPaymentMethodMediaType = "bank_account" | "debit_card";
161
+ /**
162
+ * Resumen del medio de pago del usuario.
163
+ *
164
+ * Privacidad: `id` es un hash opaco, nunca el identificador real. Solo viajan
165
+ * el tipo de medio y los últimos 4 dígitos; nunca la CLABE completa, el banco
166
+ * ni el titular.
167
+ */
168
+ interface TapipayPaymentMethodSummary {
169
+ id: string;
170
+ mediaType: TapipayPaymentMethodMediaType;
171
+ /** Últimos 4 dígitos, o `null` si no se pudo derivar de forma segura. */
172
+ lastFour: string | null;
173
+ }
174
+ /**
175
+ * Payload del evento paymentMethodsLoaded.
176
+ * Se emite a lo sumo una vez por montaje, incluso cuando el usuario no tiene
177
+ * medio registrado (ahí `paymentMethod` es `null`). No se emite cuando el medio
178
+ * llegó ilegible: en ese caso sale `paymentMethodsError` con
179
+ * `stage: "load"`, así que no lo uses como señal de montaje — para eso está
180
+ * `ready`.
181
+ */
182
+ interface TapipayPaymentMethodsLoadedEvent {
183
+ paymentMethod: TapipayPaymentMethodSummary | null;
184
+ /**
185
+ * Cuántas domiciliaciones se cancelarían si lo quita. Es `null` cuando no
186
+ * se pudo leer el conteo: desconocido, nunca cero.
187
+ */
188
+ activeAdhesionsCount: number | null;
189
+ }
190
+ /**
191
+ * Payload del evento paymentMethodsRemoved.
192
+ * El usuario quitó su medio de pago. La baja cancela en cascada las
193
+ * domiciliaciones que lo usaban: `cancelledAdhesionsCount` dice cuántas, para
194
+ * que el host pueda refrescar su propia vista sin esperar al polling.
195
+ *
196
+ * Es `null` cuando la baja salió bien pero el backend respondió con un cuerpo
197
+ * que no se pudo leer: ahí sabemos que se quitó, no cuántas cayeron. Tratalo
198
+ * como "desconocido", no como cero.
199
+ */
200
+ interface TapipayPaymentMethodsRemovedEvent {
201
+ /** El medio que se quitó, tal como estaba antes de la baja. */
202
+ paymentMethod: TapipayPaymentMethodSummary | null;
203
+ cancelledAdhesionsCount: number | null;
204
+ /**
205
+ * Cuáles domiciliaciones cayeron, una por ítem.
206
+ *
207
+ * Cada ítem tiene la MISMA forma que el payload de `autopayRemoved`, así que
208
+ * si ya tenés un handler para ese evento podés iterarlos y pasárselos sin
209
+ * escribir lógica nueva:
210
+ *
211
+ * ```ts
212
+ * tapipay.on("paymentMethodsRemoved", (d) =>
213
+ * d.cancelledAdhesions.forEach(miHandlerDeAutopayRemoved),
214
+ * );
215
+ * ```
216
+ *
217
+ * El `id` es el mismo hash que recibiste en `autopayLoaded`, así que casa con
218
+ * la fila que ya tenías en pantalla.
219
+ *
220
+ * Viene vacío cuando no se pudo leer el detalle de la baja; en ese caso
221
+ * `cancelledAdhesionsCount` también viene `null`. Una lista vacía con un
222
+ * conteo en `null` significa "no sabemos cuáles", no "no cayó ninguna".
223
+ */
224
+ cancelledAdhesions: TapipayCancelledAdhesion[];
225
+ }
226
+ /** Una domiciliación caída en la cascada. Misma forma que `autopayRemoved`. */
227
+ interface TapipayCancelledAdhesion {
228
+ /** Hash opaco de la adhesión, el mismo que dio `autopayLoaded`. */
229
+ id: string | null;
230
+ mediaType: TapipayPaymentMethodMediaType;
231
+ lastFour: string | null;
232
+ }
233
+ /**
234
+ * Payload del evento paymentMethodsError.
235
+ * Igual que en autopay, `"unavailable"` significa que la organización no tiene
236
+ * el widget habilitado, no que algo haya fallado.
237
+ */
238
+ interface TapipayPaymentMethodsErrorEvent {
239
+ stage: "load" | "remove" | "unavailable";
140
240
  /** Mensaje neutral para el host. */
141
241
  message: string;
142
242
  }
@@ -201,11 +301,21 @@ interface TapipayDomiciliationVerificationCompletedEvent {
201
301
  * El usuario confirmó la domiciliación. **No significa que quedó registrada:**
202
302
  * se emite al click, sin esperar la respuesta del backend, que procesa el alta
203
303
  * de forma asíncrona. La confirmación real llega por `autopayActivated`.
304
+ *
305
+ * `mediaType`/`lastFour` viajan con el mismo tipo y el mismo criterio que
306
+ * `autopayActivated`/`autopayLoaded` — están para organizaciones en modo
307
+ * gestionado, donde `autopayActivated` no confirma una adhesión real (ver la
308
+ * nota en `TapipayAutopayActivatedEvent`). Este flujo (alta de domiciliación
309
+ * bancaria) nunca produce `mediaType: "card"`: ese valor es exclusivo del
310
+ * flujo de tarjeta/Yuno.
204
311
  */
205
312
  interface TapipayDomiciliationConfirmedEvent {
206
313
  /** True si adhirió todas las deudas en vez de una selección. */
207
314
  enrollAllDebts: boolean;
208
315
  selectedProductsCount: number;
316
+ mediaType: TapipayAutopayMediaType;
317
+ /** Últimos 4 dígitos de la CLABE o tarjeta. `null` si no disponible. */
318
+ lastFour: string | null;
209
319
  }
210
320
  /**
211
321
  * Payload del evento domiciliationAccountCheckFailed.
@@ -243,6 +353,9 @@ interface TapipayInstance {
243
353
  on(event: "domiciliationVerificationCompleted", handler: (data: TapipayDomiciliationVerificationCompletedEvent) => void): void;
244
354
  on(event: "domiciliationConfirmed", handler: (data: TapipayDomiciliationConfirmedEvent) => void): void;
245
355
  on(event: "domiciliationAccountCheckFailed", handler: (data: TapipayDomiciliationAccountCheckFailedEvent) => void): void;
356
+ on(event: "paymentMethodsLoaded", handler: (data: TapipayPaymentMethodsLoadedEvent) => void): void;
357
+ on(event: "paymentMethodsRemoved", handler: (data: TapipayPaymentMethodsRemovedEvent) => void): void;
358
+ on(event: "paymentMethodsError", handler: (data: TapipayPaymentMethodsErrorEvent) => void): void;
246
359
  off(event: "paymentWindowOpened", handler: (data: TapipayPaymentWindowOpenedEvent) => void): void;
247
360
  off(event: "paymentSubmitted", handler: (data: TapipayPaymentSubmittedEvent) => void): void;
248
361
  off(event: "paymentCancelled", handler: (data: TapipayPaymentCancelledEvent) => void): void;
@@ -255,6 +368,9 @@ interface TapipayInstance {
255
368
  off(event: "domiciliationVerificationCompleted", handler: (data: TapipayDomiciliationVerificationCompletedEvent) => void): void;
256
369
  off(event: "domiciliationConfirmed", handler: (data: TapipayDomiciliationConfirmedEvent) => void): void;
257
370
  off(event: "domiciliationAccountCheckFailed", handler: (data: TapipayDomiciliationAccountCheckFailedEvent) => void): void;
371
+ off(event: "paymentMethodsLoaded", handler: (data: TapipayPaymentMethodsLoadedEvent) => void): void;
372
+ off(event: "paymentMethodsRemoved", handler: (data: TapipayPaymentMethodsRemovedEvent) => void): void;
373
+ off(event: "paymentMethodsError", handler: (data: TapipayPaymentMethodsErrorEvent) => void): void;
258
374
  off(event: string, handler: (...args: unknown[]) => unknown): void;
259
375
  /** Cola interna usada por el stub antes de que cargue el SDK real. */
260
376
  _q?: [string, unknown[]][];
@@ -265,4 +381,4 @@ declare global {
265
381
  }
266
382
  }
267
383
 
268
- export type { LoadTapipayOptions as L, TapipayInstance as T, TapipayAutopayActivatedEvent as a, TapipayAutopayAdhesionSummary as b, TapipayAutopayErrorEvent as c, TapipayAutopayLoadedEvent as d, TapipayAutopayMediaType as e, TapipayAutopayRemovedEvent as f, TapipayDomiciliationAccountCheckFailedEvent as g, TapipayDomiciliationAccountType as h, TapipayDomiciliationBankSelectedEvent as i, TapipayDomiciliationConfirmedEvent as j, TapipayDomiciliationFormCompletedEvent as k, TapipayDomiciliationVerificationCompletedEvent as l, TapipayDomiciliationVerificationMethod as m, TapipayEnvironment as n, TapipayOptions as o, TapipayPaymentCancelledEvent as p, TapipayPaymentSubmittedEvent as q, TapipayPaymentWindowOpenedEvent as r, TapipayView as s };
384
+ export type { LoadTapipayOptions as L, TapipayInstance as T, TapipayAutopayActivatedEvent as a, TapipayAutopayAdhesionSummary as b, TapipayAutopayErrorEvent as c, TapipayAutopayLoadedEvent as d, TapipayAutopayMediaType as e, TapipayAutopayRemovedEvent as f, TapipayDomiciliationAccountCheckFailedEvent as g, TapipayDomiciliationAccountType as h, TapipayDomiciliationBankSelectedEvent as i, TapipayDomiciliationConfirmedEvent as j, TapipayDomiciliationFormCompletedEvent as k, TapipayDomiciliationVerificationCompletedEvent as l, TapipayDomiciliationVerificationMethod as m, TapipayEnvironment as n, TapipayOptions as o, TapipayPaymentCancelledEvent as p, TapipayPaymentMethodMediaType as q, TapipayPaymentMethodSummary as r, TapipayPaymentMethodsErrorEvent as s, TapipayPaymentMethodsLoadedEvent as t, TapipayPaymentMethodsRemovedEvent as u, TapipayPaymentSubmittedEvent as v, TapipayPaymentWindowOpenedEvent as w, TapipayView as x };
@@ -18,8 +18,13 @@ interface LoadTapipayOptions {
18
18
  * Vista a montar en el widget.
19
19
  * - `'payments'` (default si se omite): medios de pago / pago de deuda.
20
20
  * - `'autopay'`: gestión de adhesiones (ver domiciliación y desadherirse).
21
+ * - `'payment-methods'`: el medio de pago del usuario (verlo y quitarlo).
22
+ *
23
+ * Las vistas `'autopay'` y `'payment-methods'` se habilitan por organización.
24
+ * Si la organización no las tiene habilitadas, el widget monta igual y avisa
25
+ * con el evento de error correspondiente y `stage: "unavailable"`.
21
26
  */
22
- type TapipayView = "payments" | "autopay";
27
+ type TapipayView = "payments" | "autopay" | "payment-methods";
23
28
  /**
24
29
  * Opciones requeridas para montar el widget TapiPay.
25
30
  *
@@ -108,9 +113,16 @@ interface TapipayAutopayLoadedEvent {
108
113
  /**
109
114
  * Payload del evento autopayActivated.
110
115
  * Una nueva adhesión quedó activa (se dispara una sola vez por adhesión nueva).
116
+ *
117
+ * **Excepción — organizaciones en modo gestionado**: acá `id` es un hash del
118
+ * `externalClientId` del cliente, no de una adhesión real (todavía no existe
119
+ * un `agendaId` en este punto del flujo). No correlaciona con el `id` que
120
+ * verás después en `autopayLoaded`/`autopayRemoved` para la adhesión real, y
121
+ * puede repetirse si el mismo cliente domicilia otra cuenta más adelante en
122
+ * la misma sesión del widget.
111
123
  */
112
124
  interface TapipayAutopayActivatedEvent {
113
- /** Hash opaco del identificador de la adhesión activada. */
125
+ /** Hash opaco del identificador de la adhesión activada (o del cliente, en modo gestionado — ver nota arriba). */
114
126
  id: string;
115
127
  /** Tipo de medio de la adhesión activada. */
116
128
  mediaType: TapipayAutopayMediaType;
@@ -135,8 +147,96 @@ interface TapipayAutopayRemovedEvent {
135
147
  * incluye PII ni detalle de credenciales.
136
148
  */
137
149
  interface TapipayAutopayErrorEvent {
138
- /** En qué fase ocurrió el fallo. */
139
- stage: "load" | "remove";
150
+ /**
151
+ * En qué fase ocurrió. `"unavailable"` no es un fallo: la organización no
152
+ * tiene el widget habilitado, así que no corresponde mostrarle un error al
153
+ * usuario.
154
+ */
155
+ stage: "load" | "remove" | "unavailable";
156
+ /** Mensaje neutral para el host. */
157
+ message: string;
158
+ }
159
+ /** Tipo lógico del medio de pago. Mismo vocabulario que en autopay. */
160
+ type TapipayPaymentMethodMediaType = "bank_account" | "debit_card";
161
+ /**
162
+ * Resumen del medio de pago del usuario.
163
+ *
164
+ * Privacidad: `id` es un hash opaco, nunca el identificador real. Solo viajan
165
+ * el tipo de medio y los últimos 4 dígitos; nunca la CLABE completa, el banco
166
+ * ni el titular.
167
+ */
168
+ interface TapipayPaymentMethodSummary {
169
+ id: string;
170
+ mediaType: TapipayPaymentMethodMediaType;
171
+ /** Últimos 4 dígitos, o `null` si no se pudo derivar de forma segura. */
172
+ lastFour: string | null;
173
+ }
174
+ /**
175
+ * Payload del evento paymentMethodsLoaded.
176
+ * Se emite a lo sumo una vez por montaje, incluso cuando el usuario no tiene
177
+ * medio registrado (ahí `paymentMethod` es `null`). No se emite cuando el medio
178
+ * llegó ilegible: en ese caso sale `paymentMethodsError` con
179
+ * `stage: "load"`, así que no lo uses como señal de montaje — para eso está
180
+ * `ready`.
181
+ */
182
+ interface TapipayPaymentMethodsLoadedEvent {
183
+ paymentMethod: TapipayPaymentMethodSummary | null;
184
+ /**
185
+ * Cuántas domiciliaciones se cancelarían si lo quita. Es `null` cuando no
186
+ * se pudo leer el conteo: desconocido, nunca cero.
187
+ */
188
+ activeAdhesionsCount: number | null;
189
+ }
190
+ /**
191
+ * Payload del evento paymentMethodsRemoved.
192
+ * El usuario quitó su medio de pago. La baja cancela en cascada las
193
+ * domiciliaciones que lo usaban: `cancelledAdhesionsCount` dice cuántas, para
194
+ * que el host pueda refrescar su propia vista sin esperar al polling.
195
+ *
196
+ * Es `null` cuando la baja salió bien pero el backend respondió con un cuerpo
197
+ * que no se pudo leer: ahí sabemos que se quitó, no cuántas cayeron. Tratalo
198
+ * como "desconocido", no como cero.
199
+ */
200
+ interface TapipayPaymentMethodsRemovedEvent {
201
+ /** El medio que se quitó, tal como estaba antes de la baja. */
202
+ paymentMethod: TapipayPaymentMethodSummary | null;
203
+ cancelledAdhesionsCount: number | null;
204
+ /**
205
+ * Cuáles domiciliaciones cayeron, una por ítem.
206
+ *
207
+ * Cada ítem tiene la MISMA forma que el payload de `autopayRemoved`, así que
208
+ * si ya tenés un handler para ese evento podés iterarlos y pasárselos sin
209
+ * escribir lógica nueva:
210
+ *
211
+ * ```ts
212
+ * tapipay.on("paymentMethodsRemoved", (d) =>
213
+ * d.cancelledAdhesions.forEach(miHandlerDeAutopayRemoved),
214
+ * );
215
+ * ```
216
+ *
217
+ * El `id` es el mismo hash que recibiste en `autopayLoaded`, así que casa con
218
+ * la fila que ya tenías en pantalla.
219
+ *
220
+ * Viene vacío cuando no se pudo leer el detalle de la baja; en ese caso
221
+ * `cancelledAdhesionsCount` también viene `null`. Una lista vacía con un
222
+ * conteo en `null` significa "no sabemos cuáles", no "no cayó ninguna".
223
+ */
224
+ cancelledAdhesions: TapipayCancelledAdhesion[];
225
+ }
226
+ /** Una domiciliación caída en la cascada. Misma forma que `autopayRemoved`. */
227
+ interface TapipayCancelledAdhesion {
228
+ /** Hash opaco de la adhesión, el mismo que dio `autopayLoaded`. */
229
+ id: string | null;
230
+ mediaType: TapipayPaymentMethodMediaType;
231
+ lastFour: string | null;
232
+ }
233
+ /**
234
+ * Payload del evento paymentMethodsError.
235
+ * Igual que en autopay, `"unavailable"` significa que la organización no tiene
236
+ * el widget habilitado, no que algo haya fallado.
237
+ */
238
+ interface TapipayPaymentMethodsErrorEvent {
239
+ stage: "load" | "remove" | "unavailable";
140
240
  /** Mensaje neutral para el host. */
141
241
  message: string;
142
242
  }
@@ -201,11 +301,21 @@ interface TapipayDomiciliationVerificationCompletedEvent {
201
301
  * El usuario confirmó la domiciliación. **No significa que quedó registrada:**
202
302
  * se emite al click, sin esperar la respuesta del backend, que procesa el alta
203
303
  * de forma asíncrona. La confirmación real llega por `autopayActivated`.
304
+ *
305
+ * `mediaType`/`lastFour` viajan con el mismo tipo y el mismo criterio que
306
+ * `autopayActivated`/`autopayLoaded` — están para organizaciones en modo
307
+ * gestionado, donde `autopayActivated` no confirma una adhesión real (ver la
308
+ * nota en `TapipayAutopayActivatedEvent`). Este flujo (alta de domiciliación
309
+ * bancaria) nunca produce `mediaType: "card"`: ese valor es exclusivo del
310
+ * flujo de tarjeta/Yuno.
204
311
  */
205
312
  interface TapipayDomiciliationConfirmedEvent {
206
313
  /** True si adhirió todas las deudas en vez de una selección. */
207
314
  enrollAllDebts: boolean;
208
315
  selectedProductsCount: number;
316
+ mediaType: TapipayAutopayMediaType;
317
+ /** Últimos 4 dígitos de la CLABE o tarjeta. `null` si no disponible. */
318
+ lastFour: string | null;
209
319
  }
210
320
  /**
211
321
  * Payload del evento domiciliationAccountCheckFailed.
@@ -243,6 +353,9 @@ interface TapipayInstance {
243
353
  on(event: "domiciliationVerificationCompleted", handler: (data: TapipayDomiciliationVerificationCompletedEvent) => void): void;
244
354
  on(event: "domiciliationConfirmed", handler: (data: TapipayDomiciliationConfirmedEvent) => void): void;
245
355
  on(event: "domiciliationAccountCheckFailed", handler: (data: TapipayDomiciliationAccountCheckFailedEvent) => void): void;
356
+ on(event: "paymentMethodsLoaded", handler: (data: TapipayPaymentMethodsLoadedEvent) => void): void;
357
+ on(event: "paymentMethodsRemoved", handler: (data: TapipayPaymentMethodsRemovedEvent) => void): void;
358
+ on(event: "paymentMethodsError", handler: (data: TapipayPaymentMethodsErrorEvent) => void): void;
246
359
  off(event: "paymentWindowOpened", handler: (data: TapipayPaymentWindowOpenedEvent) => void): void;
247
360
  off(event: "paymentSubmitted", handler: (data: TapipayPaymentSubmittedEvent) => void): void;
248
361
  off(event: "paymentCancelled", handler: (data: TapipayPaymentCancelledEvent) => void): void;
@@ -255,6 +368,9 @@ interface TapipayInstance {
255
368
  off(event: "domiciliationVerificationCompleted", handler: (data: TapipayDomiciliationVerificationCompletedEvent) => void): void;
256
369
  off(event: "domiciliationConfirmed", handler: (data: TapipayDomiciliationConfirmedEvent) => void): void;
257
370
  off(event: "domiciliationAccountCheckFailed", handler: (data: TapipayDomiciliationAccountCheckFailedEvent) => void): void;
371
+ off(event: "paymentMethodsLoaded", handler: (data: TapipayPaymentMethodsLoadedEvent) => void): void;
372
+ off(event: "paymentMethodsRemoved", handler: (data: TapipayPaymentMethodsRemovedEvent) => void): void;
373
+ off(event: "paymentMethodsError", handler: (data: TapipayPaymentMethodsErrorEvent) => void): void;
258
374
  off(event: string, handler: (...args: unknown[]) => unknown): void;
259
375
  /** Cola interna usada por el stub antes de que cargue el SDK real. */
260
376
  _q?: [string, unknown[]][];
@@ -265,4 +381,4 @@ declare global {
265
381
  }
266
382
  }
267
383
 
268
- export type { LoadTapipayOptions as L, TapipayInstance as T, TapipayAutopayActivatedEvent as a, TapipayAutopayAdhesionSummary as b, TapipayAutopayErrorEvent as c, TapipayAutopayLoadedEvent as d, TapipayAutopayMediaType as e, TapipayAutopayRemovedEvent as f, TapipayDomiciliationAccountCheckFailedEvent as g, TapipayDomiciliationAccountType as h, TapipayDomiciliationBankSelectedEvent as i, TapipayDomiciliationConfirmedEvent as j, TapipayDomiciliationFormCompletedEvent as k, TapipayDomiciliationVerificationCompletedEvent as l, TapipayDomiciliationVerificationMethod as m, TapipayEnvironment as n, TapipayOptions as o, TapipayPaymentCancelledEvent as p, TapipayPaymentSubmittedEvent as q, TapipayPaymentWindowOpenedEvent as r, TapipayView as s };
384
+ export type { LoadTapipayOptions as L, TapipayInstance as T, TapipayAutopayActivatedEvent as a, TapipayAutopayAdhesionSummary as b, TapipayAutopayErrorEvent as c, TapipayAutopayLoadedEvent as d, TapipayAutopayMediaType as e, TapipayAutopayRemovedEvent as f, TapipayDomiciliationAccountCheckFailedEvent as g, TapipayDomiciliationAccountType as h, TapipayDomiciliationBankSelectedEvent as i, TapipayDomiciliationConfirmedEvent as j, TapipayDomiciliationFormCompletedEvent as k, TapipayDomiciliationVerificationCompletedEvent as l, TapipayDomiciliationVerificationMethod as m, TapipayEnvironment as n, TapipayOptions as o, TapipayPaymentCancelledEvent as p, TapipayPaymentMethodMediaType as q, TapipayPaymentMethodSummary as r, TapipayPaymentMethodsErrorEvent as s, TapipayPaymentMethodsLoadedEvent as t, TapipayPaymentMethodsRemovedEvent as u, TapipayPaymentSubmittedEvent as v, TapipayPaymentWindowOpenedEvent as w, TapipayView as x };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@npmtapi/embed",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "TapiPay Embed SDK — carga y controla el widget de pago embebido",
5
5
  "type": "module",
6
6
  "exports": {