@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 +24 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/react.cjs +36 -0
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +8 -2
- package/dist/react.d.ts +8 -2
- package/dist/react.js +36 -0
- package/dist/react.js.map +1 -1
- package/dist/{types-DYWP-adY.d.cts → types-tK7-Mux0.d.cts} +121 -5
- package/dist/{types-DYWP-adY.d.ts → types-tK7-Mux0.d.ts} +121 -5
- package/package.json +1 -1
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -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-
|
|
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
|
|
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-
|
|
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
|
|
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
|
};
|
package/dist/react.cjs.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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
|
-
/**
|
|
139
|
-
|
|
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,
|
|
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
|
-
/**
|
|
139
|
-
|
|
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,
|
|
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 };
|