@npmtapi/embed 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -108,6 +108,10 @@ Se requiere `identifier` + **uno de** `organization` o `companyCode`. Si se pasa
108
108
  | `onAutopayActivated` | `(data) => void` | No | — | (Vista autopay) Callback cuando una nueva domiciliación queda activa (una sola vez por adhesión nueva) |
109
109
  | `onAutopayRemoved` | `(data) => void` | No | — | (Vista autopay) Callback cuando el usuario desadhiere un medio con éxito |
110
110
  | `onAutopayError` | `(data) => void` | No | — | (Vista autopay) Callback ante un error de carga o de desadhesión |
111
+ | `onDomiciliationBankSelected` | `(data) => void` | No | — | (Vista autopay) El usuario eligió su banco en el alta de domiciliación |
112
+ | `onDomiciliationFormCompleted` | `(data) => void` | No | — | (Vista autopay) Los datos de cuenta pasaron la validación del backend. Dispara al confirmar el método de verificación, no al salir del formulario |
113
+ | `onDomiciliationVerificationCompleted` | `(data) => void` | No | — | (Vista autopay) La verificación llegó a un desenlace. Solo emite al outcome final: un intento fallido con reintentos disponibles no dispara el evento |
114
+ | `onDomiciliationConfirmed` | `() => void` | No | — | (Vista autopay) El usuario confirmó la domiciliación. **No** significa que quedó registrada — la confirmación real llega por `onAutopayActivated` |
111
115
  | `className` | `string` | No | — | Clases CSS del contenedor |
112
116
  | `style` | `CSSProperties` | No | — | Estilos inline del contenedor |
113
117
 
@@ -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\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\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-BPz2Gtxx.cjs';
2
- export { a as TapipayAutopayActivatedEvent, b as TapipayAutopayAdhesionSummary, c as TapipayAutopayErrorEvent, d as TapipayAutopayLoadedEvent, e as TapipayAutopayMediaType, f as TapipayAutopayRemovedEvent, g as TapipayEnvironment, h as TapipayOptions, i as TapipayPaymentCancelledEvent, j as TapipayPaymentSubmittedEvent, k as TapipayPaymentWindowOpenedEvent, l as TapipayView } from './types-BPz2Gtxx.cjs';
1
+ import { L as LoadTapipayOptions, T as TapipayInstance } from './types-ClCjVzWi.cjs';
2
+ export { a as TapipayAutopayActivatedEvent, b as TapipayAutopayAdhesionSummary, c as TapipayAutopayErrorEvent, d as TapipayAutopayLoadedEvent, e as TapipayAutopayMediaType, f as TapipayAutopayRemovedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, h as TapipayDomiciliationAccountType, i as TapipayDomiciliationBankSelectedEvent, j as TapipayDomiciliationConfirmedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, m as TapipayDomiciliationVerificationMethod, n as TapipayEnvironment, o as TapipayOptions, p as TapipayPaymentCancelledEvent, q as TapipayPaymentSubmittedEvent, r as TapipayPaymentWindowOpenedEvent, s as TapipayView } from './types-ClCjVzWi.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-BPz2Gtxx.js';
2
- export { a as TapipayAutopayActivatedEvent, b as TapipayAutopayAdhesionSummary, c as TapipayAutopayErrorEvent, d as TapipayAutopayLoadedEvent, e as TapipayAutopayMediaType, f as TapipayAutopayRemovedEvent, g as TapipayEnvironment, h as TapipayOptions, i as TapipayPaymentCancelledEvent, j as TapipayPaymentSubmittedEvent, k as TapipayPaymentWindowOpenedEvent, l as TapipayView } from './types-BPz2Gtxx.js';
1
+ import { L as LoadTapipayOptions, T as TapipayInstance } from './types-ClCjVzWi.js';
2
+ export { a as TapipayAutopayActivatedEvent, b as TapipayAutopayAdhesionSummary, c as TapipayAutopayErrorEvent, d as TapipayAutopayLoadedEvent, e as TapipayAutopayMediaType, f as TapipayAutopayRemovedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, h as TapipayDomiciliationAccountType, i as TapipayDomiciliationBankSelectedEvent, j as TapipayDomiciliationConfirmedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, m as TapipayDomiciliationVerificationMethod, n as TapipayEnvironment, o as TapipayOptions, p as TapipayPaymentCancelledEvent, q as TapipayPaymentSubmittedEvent, r as TapipayPaymentWindowOpenedEvent, s as TapipayView } from './types-ClCjVzWi.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,11 @@ function TapipayWidget({
117
117
  onAutopayActivated,
118
118
  onAutopayRemoved,
119
119
  onAutopayError,
120
+ onDomiciliationBankSelected,
121
+ onDomiciliationFormCompleted,
122
+ onDomiciliationVerificationCompleted,
123
+ onDomiciliationConfirmed,
124
+ onDomiciliationAccountCheckFailed,
120
125
  className,
121
126
  style
122
127
  }) {
@@ -128,6 +133,15 @@ function TapipayWidget({
128
133
  const onAutopayActivatedRef = (0, import_react.useRef)(onAutopayActivated);
129
134
  const onAutopayRemovedRef = (0, import_react.useRef)(onAutopayRemoved);
130
135
  const onAutopayErrorRef = (0, import_react.useRef)(onAutopayError);
136
+ const onDomiciliationBankSelectedRef = (0, import_react.useRef)(onDomiciliationBankSelected);
137
+ const onDomiciliationFormCompletedRef = (0, import_react.useRef)(onDomiciliationFormCompleted);
138
+ const onDomiciliationVerificationCompletedRef = (0, import_react.useRef)(
139
+ onDomiciliationVerificationCompleted
140
+ );
141
+ const onDomiciliationConfirmedRef = (0, import_react.useRef)(onDomiciliationConfirmed);
142
+ const onDomiciliationAccountCheckFailedRef = (0, import_react.useRef)(
143
+ onDomiciliationAccountCheckFailed
144
+ );
131
145
  (0, import_react.useEffect)(() => {
132
146
  onPaymentWindowOpenedRef.current = onPaymentWindowOpened;
133
147
  }, [onPaymentWindowOpened]);
@@ -149,6 +163,21 @@ function TapipayWidget({
149
163
  (0, import_react.useEffect)(() => {
150
164
  onAutopayErrorRef.current = onAutopayError;
151
165
  }, [onAutopayError]);
166
+ (0, import_react.useEffect)(() => {
167
+ onDomiciliationBankSelectedRef.current = onDomiciliationBankSelected;
168
+ }, [onDomiciliationBankSelected]);
169
+ (0, import_react.useEffect)(() => {
170
+ onDomiciliationFormCompletedRef.current = onDomiciliationFormCompleted;
171
+ }, [onDomiciliationFormCompleted]);
172
+ (0, import_react.useEffect)(() => {
173
+ onDomiciliationVerificationCompletedRef.current = onDomiciliationVerificationCompleted;
174
+ }, [onDomiciliationVerificationCompleted]);
175
+ (0, import_react.useEffect)(() => {
176
+ onDomiciliationConfirmedRef.current = onDomiciliationConfirmed;
177
+ }, [onDomiciliationConfirmed]);
178
+ (0, import_react.useEffect)(() => {
179
+ onDomiciliationAccountCheckFailedRef.current = onDomiciliationAccountCheckFailed;
180
+ }, [onDomiciliationAccountCheckFailed]);
152
181
  (0, import_react.useEffect)(() => {
153
182
  if (!containerRef.current) return;
154
183
  const container = containerRef.current;
@@ -182,6 +211,26 @@ function TapipayWidget({
182
211
  var _a;
183
212
  (_a = onAutopayErrorRef.current) == null ? void 0 : _a.call(onAutopayErrorRef, data);
184
213
  };
214
+ const handleDomiciliationBankSelected = (data) => {
215
+ var _a;
216
+ (_a = onDomiciliationBankSelectedRef.current) == null ? void 0 : _a.call(onDomiciliationBankSelectedRef, data);
217
+ };
218
+ const handleDomiciliationFormCompleted = (data) => {
219
+ var _a;
220
+ (_a = onDomiciliationFormCompletedRef.current) == null ? void 0 : _a.call(onDomiciliationFormCompletedRef, data);
221
+ };
222
+ const handleDomiciliationVerificationCompleted = (data) => {
223
+ var _a;
224
+ (_a = onDomiciliationVerificationCompletedRef.current) == null ? void 0 : _a.call(onDomiciliationVerificationCompletedRef, data);
225
+ };
226
+ const handleDomiciliationConfirmed = (data) => {
227
+ var _a;
228
+ (_a = onDomiciliationConfirmedRef.current) == null ? void 0 : _a.call(onDomiciliationConfirmedRef, data);
229
+ };
230
+ const handleDomiciliationAccountCheckFailed = (data) => {
231
+ var _a;
232
+ (_a = onDomiciliationAccountCheckFailedRef.current) == null ? void 0 : _a.call(onDomiciliationAccountCheckFailedRef, data);
233
+ };
185
234
  loadTapipay({ environment }).then((instance) => {
186
235
  if (cancelled) return;
187
236
  tapipayInstance = instance;
@@ -192,6 +241,20 @@ function TapipayWidget({
192
241
  instance.on("autopayActivated", handleAutopayActivated);
193
242
  instance.on("autopayRemoved", handleAutopayRemoved);
194
243
  instance.on("autopayError", handleAutopayError);
244
+ instance.on("domiciliationBankSelected", handleDomiciliationBankSelected);
245
+ instance.on(
246
+ "domiciliationFormCompleted",
247
+ handleDomiciliationFormCompleted
248
+ );
249
+ instance.on(
250
+ "domiciliationVerificationCompleted",
251
+ handleDomiciliationVerificationCompleted
252
+ );
253
+ instance.on("domiciliationConfirmed", handleDomiciliationConfirmed);
254
+ instance.on(
255
+ "domiciliationAccountCheckFailed",
256
+ handleDomiciliationAccountCheckFailed
257
+ );
195
258
  instance.initialize({
196
259
  container,
197
260
  organization,
@@ -212,6 +275,26 @@ function TapipayWidget({
212
275
  tapipayInstance.off("autopayActivated", handleAutopayActivated);
213
276
  tapipayInstance.off("autopayRemoved", handleAutopayRemoved);
214
277
  tapipayInstance.off("autopayError", handleAutopayError);
278
+ tapipayInstance.off(
279
+ "domiciliationBankSelected",
280
+ handleDomiciliationBankSelected
281
+ );
282
+ tapipayInstance.off(
283
+ "domiciliationFormCompleted",
284
+ handleDomiciliationFormCompleted
285
+ );
286
+ tapipayInstance.off(
287
+ "domiciliationVerificationCompleted",
288
+ handleDomiciliationVerificationCompleted
289
+ );
290
+ tapipayInstance.off(
291
+ "domiciliationConfirmed",
292
+ handleDomiciliationConfirmed
293
+ );
294
+ tapipayInstance.off(
295
+ "domiciliationAccountCheckFailed",
296
+ handleDomiciliationAccountCheckFailed
297
+ );
215
298
  tapipayInstance.destroy(container);
216
299
  }
217
300
  };
@@ -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\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/** 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 * />\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\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\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\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\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\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.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\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":[]}
package/dist/react.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { h as TapipayOptions, g as TapipayEnvironment, k as TapipayPaymentWindowOpenedEvent, j as TapipayPaymentSubmittedEvent, i as TapipayPaymentCancelledEvent, d as TapipayAutopayLoadedEvent, a as TapipayAutopayActivatedEvent, f as TapipayAutopayRemovedEvent, c as TapipayAutopayErrorEvent, L as LoadTapipayOptions, T as TapipayInstance } from './types-BPz2Gtxx.cjs';
2
+ import { o as TapipayOptions, n as TapipayEnvironment, r as TapipayPaymentWindowOpenedEvent, q as TapipayPaymentSubmittedEvent, p as TapipayPaymentCancelledEvent, d as TapipayAutopayLoadedEvent, a as TapipayAutopayActivatedEvent, f as TapipayAutopayRemovedEvent, c as TapipayAutopayErrorEvent, i as TapipayDomiciliationBankSelectedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, j as TapipayDomiciliationConfirmedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, L as LoadTapipayOptions, T as TapipayInstance } from './types-ClCjVzWi.cjs';
3
3
 
4
4
  /**
5
5
  * Hook de bajo nivel que carga el SDK y retorna la instancia.
@@ -30,6 +30,16 @@ interface TapipayWidgetProps extends Omit<TapipayOptions, "container"> {
30
30
  onAutopayRemoved?: (data: TapipayAutopayRemovedEvent) => void;
31
31
  /** (Vista autopay) Callback ante un error de carga de adhesiones o de desadhesión. */
32
32
  onAutopayError?: (data: TapipayAutopayErrorEvent) => void;
33
+ /** (Vista autopay) El usuario eligió su banco en el alta de domiciliación. Emite en cada cambio de selección. */
34
+ onDomiciliationBankSelected?: (data: TapipayDomiciliationBankSelectedEvent) => void;
35
+ /** (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. */
36
+ onDomiciliationFormCompleted?: (data: TapipayDomiciliationFormCompletedEvent) => void;
37
+ /** (Vista autopay) La verificación llegó a un desenlace. Solo emite al outcome final: un intento fallido con reintentos disponibles NO dispara el evento. */
38
+ onDomiciliationVerificationCompleted?: (data: TapipayDomiciliationVerificationCompletedEvent) => void;
39
+ /** (Vista autopay) El usuario confirmó la domiciliación. NO significa que quedó registrada — la confirmación real llega por `onAutopayActivated`. */
40
+ onDomiciliationConfirmed?: (data: TapipayDomiciliationConfirmedEvent) => void;
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
+ onDomiciliationAccountCheckFailed?: (data: TapipayDomiciliationAccountCheckFailedEvent) => void;
33
43
  /** Clases CSS adicionales para el contenedor del widget. */
34
44
  className?: string;
35
45
  /** Estilos inline adicionales para el contenedor del widget. */
@@ -67,8 +77,12 @@ interface TapipayWidgetProps extends Omit<TapipayOptions, "container"> {
67
77
  * onAutopayLoaded={(data) => console.log("Adhesiones", data.count)}
68
78
  * onAutopayActivated={(data) => console.log("Adhesión activada", data.id)}
69
79
  * onAutopayRemoved={(data) => console.log("Adhesión eliminada", data.id)}
80
+ * onDomiciliationBankSelected={(data) => console.log("Banco", data.name)}
81
+ * onDomiciliationFormCompleted={(data) => console.log("Cuenta ****" + data.lastFour)}
82
+ * onDomiciliationVerificationCompleted={(data) => console.log("Verificación", data.outcome)}
83
+ * onDomiciliationConfirmed={() => console.log("Enviado — esperar onAutopayActivated")}
70
84
  * />
71
85
  */
72
- declare function TapipayWidget({ organization, companyCode, identifier, externalRequestId, selectionStrategy, view, environment, onPaymentWindowOpened, onPaymentSubmitted, onCancelled, onAutopayLoaded, onAutopayActivated, onAutopayRemoved, onAutopayError, className, style, }: TapipayWidgetProps): react_jsx_runtime.JSX.Element;
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;
73
87
 
74
88
  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 { h as TapipayOptions, g as TapipayEnvironment, k as TapipayPaymentWindowOpenedEvent, j as TapipayPaymentSubmittedEvent, i as TapipayPaymentCancelledEvent, d as TapipayAutopayLoadedEvent, a as TapipayAutopayActivatedEvent, f as TapipayAutopayRemovedEvent, c as TapipayAutopayErrorEvent, L as LoadTapipayOptions, T as TapipayInstance } from './types-BPz2Gtxx.js';
2
+ import { o as TapipayOptions, n as TapipayEnvironment, r as TapipayPaymentWindowOpenedEvent, q as TapipayPaymentSubmittedEvent, p as TapipayPaymentCancelledEvent, d as TapipayAutopayLoadedEvent, a as TapipayAutopayActivatedEvent, f as TapipayAutopayRemovedEvent, c as TapipayAutopayErrorEvent, i as TapipayDomiciliationBankSelectedEvent, k as TapipayDomiciliationFormCompletedEvent, l as TapipayDomiciliationVerificationCompletedEvent, j as TapipayDomiciliationConfirmedEvent, g as TapipayDomiciliationAccountCheckFailedEvent, L as LoadTapipayOptions, T as TapipayInstance } from './types-ClCjVzWi.js';
3
3
 
4
4
  /**
5
5
  * Hook de bajo nivel que carga el SDK y retorna la instancia.
@@ -30,6 +30,16 @@ interface TapipayWidgetProps extends Omit<TapipayOptions, "container"> {
30
30
  onAutopayRemoved?: (data: TapipayAutopayRemovedEvent) => void;
31
31
  /** (Vista autopay) Callback ante un error de carga de adhesiones o de desadhesión. */
32
32
  onAutopayError?: (data: TapipayAutopayErrorEvent) => void;
33
+ /** (Vista autopay) El usuario eligió su banco en el alta de domiciliación. Emite en cada cambio de selección. */
34
+ onDomiciliationBankSelected?: (data: TapipayDomiciliationBankSelectedEvent) => void;
35
+ /** (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. */
36
+ onDomiciliationFormCompleted?: (data: TapipayDomiciliationFormCompletedEvent) => void;
37
+ /** (Vista autopay) La verificación llegó a un desenlace. Solo emite al outcome final: un intento fallido con reintentos disponibles NO dispara el evento. */
38
+ onDomiciliationVerificationCompleted?: (data: TapipayDomiciliationVerificationCompletedEvent) => void;
39
+ /** (Vista autopay) El usuario confirmó la domiciliación. NO significa que quedó registrada — la confirmación real llega por `onAutopayActivated`. */
40
+ onDomiciliationConfirmed?: (data: TapipayDomiciliationConfirmedEvent) => void;
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
+ onDomiciliationAccountCheckFailed?: (data: TapipayDomiciliationAccountCheckFailedEvent) => void;
33
43
  /** Clases CSS adicionales para el contenedor del widget. */
34
44
  className?: string;
35
45
  /** Estilos inline adicionales para el contenedor del widget. */
@@ -67,8 +77,12 @@ interface TapipayWidgetProps extends Omit<TapipayOptions, "container"> {
67
77
  * onAutopayLoaded={(data) => console.log("Adhesiones", data.count)}
68
78
  * onAutopayActivated={(data) => console.log("Adhesión activada", data.id)}
69
79
  * onAutopayRemoved={(data) => console.log("Adhesión eliminada", data.id)}
80
+ * onDomiciliationBankSelected={(data) => console.log("Banco", data.name)}
81
+ * onDomiciliationFormCompleted={(data) => console.log("Cuenta ****" + data.lastFour)}
82
+ * onDomiciliationVerificationCompleted={(data) => console.log("Verificación", data.outcome)}
83
+ * onDomiciliationConfirmed={() => console.log("Enviado — esperar onAutopayActivated")}
70
84
  * />
71
85
  */
72
- declare function TapipayWidget({ organization, companyCode, identifier, externalRequestId, selectionStrategy, view, environment, onPaymentWindowOpened, onPaymentSubmitted, onCancelled, onAutopayLoaded, onAutopayActivated, onAutopayRemoved, onAutopayError, className, style, }: TapipayWidgetProps): react_jsx_runtime.JSX.Element;
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;
73
87
 
74
88
  export { TapipayWidget, type TapipayWidgetProps, useTapipay };
package/dist/react.js CHANGED
@@ -37,6 +37,11 @@ function TapipayWidget({
37
37
  onAutopayActivated,
38
38
  onAutopayRemoved,
39
39
  onAutopayError,
40
+ onDomiciliationBankSelected,
41
+ onDomiciliationFormCompleted,
42
+ onDomiciliationVerificationCompleted,
43
+ onDomiciliationConfirmed,
44
+ onDomiciliationAccountCheckFailed,
40
45
  className,
41
46
  style
42
47
  }) {
@@ -48,6 +53,15 @@ function TapipayWidget({
48
53
  const onAutopayActivatedRef = useRef(onAutopayActivated);
49
54
  const onAutopayRemovedRef = useRef(onAutopayRemoved);
50
55
  const onAutopayErrorRef = useRef(onAutopayError);
56
+ const onDomiciliationBankSelectedRef = useRef(onDomiciliationBankSelected);
57
+ const onDomiciliationFormCompletedRef = useRef(onDomiciliationFormCompleted);
58
+ const onDomiciliationVerificationCompletedRef = useRef(
59
+ onDomiciliationVerificationCompleted
60
+ );
61
+ const onDomiciliationConfirmedRef = useRef(onDomiciliationConfirmed);
62
+ const onDomiciliationAccountCheckFailedRef = useRef(
63
+ onDomiciliationAccountCheckFailed
64
+ );
51
65
  useEffect(() => {
52
66
  onPaymentWindowOpenedRef.current = onPaymentWindowOpened;
53
67
  }, [onPaymentWindowOpened]);
@@ -69,6 +83,21 @@ function TapipayWidget({
69
83
  useEffect(() => {
70
84
  onAutopayErrorRef.current = onAutopayError;
71
85
  }, [onAutopayError]);
86
+ useEffect(() => {
87
+ onDomiciliationBankSelectedRef.current = onDomiciliationBankSelected;
88
+ }, [onDomiciliationBankSelected]);
89
+ useEffect(() => {
90
+ onDomiciliationFormCompletedRef.current = onDomiciliationFormCompleted;
91
+ }, [onDomiciliationFormCompleted]);
92
+ useEffect(() => {
93
+ onDomiciliationVerificationCompletedRef.current = onDomiciliationVerificationCompleted;
94
+ }, [onDomiciliationVerificationCompleted]);
95
+ useEffect(() => {
96
+ onDomiciliationConfirmedRef.current = onDomiciliationConfirmed;
97
+ }, [onDomiciliationConfirmed]);
98
+ useEffect(() => {
99
+ onDomiciliationAccountCheckFailedRef.current = onDomiciliationAccountCheckFailed;
100
+ }, [onDomiciliationAccountCheckFailed]);
72
101
  useEffect(() => {
73
102
  if (!containerRef.current) return;
74
103
  const container = containerRef.current;
@@ -102,6 +131,26 @@ function TapipayWidget({
102
131
  var _a;
103
132
  (_a = onAutopayErrorRef.current) == null ? void 0 : _a.call(onAutopayErrorRef, data);
104
133
  };
134
+ const handleDomiciliationBankSelected = (data) => {
135
+ var _a;
136
+ (_a = onDomiciliationBankSelectedRef.current) == null ? void 0 : _a.call(onDomiciliationBankSelectedRef, data);
137
+ };
138
+ const handleDomiciliationFormCompleted = (data) => {
139
+ var _a;
140
+ (_a = onDomiciliationFormCompletedRef.current) == null ? void 0 : _a.call(onDomiciliationFormCompletedRef, data);
141
+ };
142
+ const handleDomiciliationVerificationCompleted = (data) => {
143
+ var _a;
144
+ (_a = onDomiciliationVerificationCompletedRef.current) == null ? void 0 : _a.call(onDomiciliationVerificationCompletedRef, data);
145
+ };
146
+ const handleDomiciliationConfirmed = (data) => {
147
+ var _a;
148
+ (_a = onDomiciliationConfirmedRef.current) == null ? void 0 : _a.call(onDomiciliationConfirmedRef, data);
149
+ };
150
+ const handleDomiciliationAccountCheckFailed = (data) => {
151
+ var _a;
152
+ (_a = onDomiciliationAccountCheckFailedRef.current) == null ? void 0 : _a.call(onDomiciliationAccountCheckFailedRef, data);
153
+ };
105
154
  loadTapipay({ environment }).then((instance) => {
106
155
  if (cancelled) return;
107
156
  tapipayInstance = instance;
@@ -112,6 +161,20 @@ function TapipayWidget({
112
161
  instance.on("autopayActivated", handleAutopayActivated);
113
162
  instance.on("autopayRemoved", handleAutopayRemoved);
114
163
  instance.on("autopayError", handleAutopayError);
164
+ instance.on("domiciliationBankSelected", handleDomiciliationBankSelected);
165
+ instance.on(
166
+ "domiciliationFormCompleted",
167
+ handleDomiciliationFormCompleted
168
+ );
169
+ instance.on(
170
+ "domiciliationVerificationCompleted",
171
+ handleDomiciliationVerificationCompleted
172
+ );
173
+ instance.on("domiciliationConfirmed", handleDomiciliationConfirmed);
174
+ instance.on(
175
+ "domiciliationAccountCheckFailed",
176
+ handleDomiciliationAccountCheckFailed
177
+ );
115
178
  instance.initialize({
116
179
  container,
117
180
  organization,
@@ -132,6 +195,26 @@ function TapipayWidget({
132
195
  tapipayInstance.off("autopayActivated", handleAutopayActivated);
133
196
  tapipayInstance.off("autopayRemoved", handleAutopayRemoved);
134
197
  tapipayInstance.off("autopayError", handleAutopayError);
198
+ tapipayInstance.off(
199
+ "domiciliationBankSelected",
200
+ handleDomiciliationBankSelected
201
+ );
202
+ tapipayInstance.off(
203
+ "domiciliationFormCompleted",
204
+ handleDomiciliationFormCompleted
205
+ );
206
+ tapipayInstance.off(
207
+ "domiciliationVerificationCompleted",
208
+ handleDomiciliationVerificationCompleted
209
+ );
210
+ tapipayInstance.off(
211
+ "domiciliationConfirmed",
212
+ handleDomiciliationConfirmed
213
+ );
214
+ tapipayInstance.off(
215
+ "domiciliationAccountCheckFailed",
216
+ handleDomiciliationAccountCheckFailed
217
+ );
135
218
  tapipayInstance.destroy(container);
136
219
  }
137
220
  };
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\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/** 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 * />\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\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\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\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\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\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.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\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":[]}
@@ -77,7 +77,7 @@ type TapipayPaymentCancelledEvent = Record<string, never>;
77
77
  * Tipo de medio adherido expuesto al sitio cliente.
78
78
  * Solo se expone el tipo lógico, nunca la marca ni el banco.
79
79
  */
80
- type TapipayAutopayMediaType = "card" | "bank_account";
80
+ type TapipayAutopayMediaType = "card" | "bank_account" | "debit_card";
81
81
  /**
82
82
  * Resumen mínimo y seguro de una adhesión activa.
83
83
  * Privacidad: solo tipo de medio + últimos 4 dígitos. El `id` es un hash opaco
@@ -140,6 +140,91 @@ interface TapipayAutopayErrorEvent {
140
140
  /** Mensaje neutral para el host. */
141
141
  message: string;
142
142
  }
143
+ /**
144
+ * Tipo de cuenta adherida, derivado de la longitud del identificador ingresado.
145
+ * 18 dígitos = CLABE, 16 = tarjeta de débito.
146
+ */
147
+ type TapipayDomiciliationAccountType = "BANK_ACCOUNT" | "DEBIT_CARD";
148
+ /** Método con el que se verificó la cuenta en el alta de domiciliación. */
149
+ type TapipayDomiciliationVerificationMethod = "penny" | "kyc" | "transfer";
150
+ /**
151
+ * Payload del evento domiciliationBankSelected.
152
+ * El usuario eligió su banco en el alta de domiciliación. Emite en cada cambio
153
+ * de selección.
154
+ */
155
+ interface TapipayDomiciliationBankSelectedEvent {
156
+ /** Id del banco en el catálogo de TapiPay. */
157
+ bankId: string;
158
+ /** Clave SPEI del banco. */
159
+ speiCode: string;
160
+ /** Nombre comercial del banco. */
161
+ name: string;
162
+ }
163
+ /**
164
+ * Payload del evento domiciliationFormCompleted.
165
+ *
166
+ * Los datos de la cuenta pasaron la validación del backend. Ojo con el timing:
167
+ * NO se dispara al salir de la pantalla del formulario, sino al confirmar el
168
+ * método de verificación — que es cuando la cuenta se registra contra el
169
+ * backend. Si los datos son inválidos, el evento no llega.
170
+ *
171
+ * Nunca incluye la CLABE ni el número de tarjeta completos.
172
+ */
173
+ interface TapipayDomiciliationFormCompletedEvent {
174
+ bankId: string;
175
+ /** Tipo de cuenta derivado de la longitud del identificador. */
176
+ accountType: TapipayDomiciliationAccountType;
177
+ /** Últimos 4 dígitos de la CLABE o tarjeta. `null` si no está disponible. */
178
+ lastFour: string | null;
179
+ }
180
+ /**
181
+ * Payload del evento domiciliationVerificationCompleted.
182
+ *
183
+ * La verificación de la cuenta llegó a un DESENLACE. Dos aclaraciones que
184
+ * importan para interpretarlo:
185
+ *
186
+ * 1. Solo emite al outcome final. Un intento de monto incorrecto que aún deja
187
+ * reintentos disponibles NO dispara el evento: `outcome: "failed"` llega
188
+ * recién cuando se agotan los intentos. Ausencia de evento NO significa que
189
+ * el usuario se frenó — puede estar reintentando.
190
+ * 2. Es method-agnostic y cubre el caso en que el paso de verificación no
191
+ * aparece en pantalla (banco que no la requiere, o método `kyc`/`transfer`):
192
+ * ahí también se emite, para que la secuencia no quede incompleta.
193
+ */
194
+ interface TapipayDomiciliationVerificationCompletedEvent {
195
+ method: TapipayDomiciliationVerificationMethod;
196
+ outcome: "approved" | "failed";
197
+ }
198
+ /**
199
+ * Payload del evento domiciliationConfirmed.
200
+ *
201
+ * El usuario confirmó la domiciliación. **No significa que quedó registrada:**
202
+ * se emite al click, sin esperar la respuesta del backend, que procesa el alta
203
+ * de forma asíncrona. La confirmación real llega por `autopayActivated`.
204
+ */
205
+ interface TapipayDomiciliationConfirmedEvent {
206
+ /** True si adhirió todas las deudas en vez de una selección. */
207
+ enrollAllDebts: boolean;
208
+ selectedProductsCount: number;
209
+ }
210
+ /**
211
+ * Payload del evento domiciliationAccountCheckFailed.
212
+ *
213
+ * El chequeo en vivo (debounceado) de la CLABE/tarjeta ingresada en el step de
214
+ * datos de cuenta rechazó el valor actual. No es un hito de la secuencia
215
+ * anterior: puede dispararse cero, una o muchas veces mientras el usuario
216
+ * tipea — es el equivalente, para este flujo, de `autopayError`.
217
+ *
218
+ * Nunca incluye la CLABE/tarjeta ingresada ni el mensaje de error en español
219
+ * (ese texto es UI, puede cambiar sin aviso): solo el `bankId` seleccionado y
220
+ * el `reason` categorizado.
221
+ */
222
+ interface TapipayDomiciliationAccountCheckFailedEvent {
223
+ /** Id del banco seleccionado en el catálogo de TapiPay. */
224
+ bankId: string;
225
+ /** Motivo categorizado del rechazo. */
226
+ reason: "checksum" | "luhn" | "card_type_blocked" | "bank_mismatch";
227
+ }
143
228
  /**
144
229
  * Instancia del SDK TapiPay expuesta en window.tapipay y retornada por loadTapipay().
145
230
  */
@@ -153,6 +238,11 @@ interface TapipayInstance {
153
238
  on(event: "autopayActivated", handler: (data: TapipayAutopayActivatedEvent) => void): void;
154
239
  on(event: "autopayRemoved", handler: (data: TapipayAutopayRemovedEvent) => void): void;
155
240
  on(event: "autopayError", handler: (data: TapipayAutopayErrorEvent) => void): void;
241
+ on(event: "domiciliationBankSelected", handler: (data: TapipayDomiciliationBankSelectedEvent) => void): void;
242
+ on(event: "domiciliationFormCompleted", handler: (data: TapipayDomiciliationFormCompletedEvent) => void): void;
243
+ on(event: "domiciliationVerificationCompleted", handler: (data: TapipayDomiciliationVerificationCompletedEvent) => void): void;
244
+ on(event: "domiciliationConfirmed", handler: (data: TapipayDomiciliationConfirmedEvent) => void): void;
245
+ on(event: "domiciliationAccountCheckFailed", handler: (data: TapipayDomiciliationAccountCheckFailedEvent) => void): void;
156
246
  off(event: "paymentWindowOpened", handler: (data: TapipayPaymentWindowOpenedEvent) => void): void;
157
247
  off(event: "paymentSubmitted", handler: (data: TapipayPaymentSubmittedEvent) => void): void;
158
248
  off(event: "paymentCancelled", handler: (data: TapipayPaymentCancelledEvent) => void): void;
@@ -160,6 +250,11 @@ interface TapipayInstance {
160
250
  off(event: "autopayActivated", handler: (data: TapipayAutopayActivatedEvent) => void): void;
161
251
  off(event: "autopayRemoved", handler: (data: TapipayAutopayRemovedEvent) => void): void;
162
252
  off(event: "autopayError", handler: (data: TapipayAutopayErrorEvent) => void): void;
253
+ off(event: "domiciliationBankSelected", handler: (data: TapipayDomiciliationBankSelectedEvent) => void): void;
254
+ off(event: "domiciliationFormCompleted", handler: (data: TapipayDomiciliationFormCompletedEvent) => void): void;
255
+ off(event: "domiciliationVerificationCompleted", handler: (data: TapipayDomiciliationVerificationCompletedEvent) => void): void;
256
+ off(event: "domiciliationConfirmed", handler: (data: TapipayDomiciliationConfirmedEvent) => void): void;
257
+ off(event: "domiciliationAccountCheckFailed", handler: (data: TapipayDomiciliationAccountCheckFailedEvent) => void): void;
163
258
  off(event: string, handler: (...args: unknown[]) => unknown): void;
164
259
  /** Cola interna usada por el stub antes de que cargue el SDK real. */
165
260
  _q?: [string, unknown[]][];
@@ -170,4 +265,4 @@ declare global {
170
265
  }
171
266
  }
172
267
 
173
- 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, TapipayEnvironment as g, TapipayOptions as h, TapipayPaymentCancelledEvent as i, TapipayPaymentSubmittedEvent as j, TapipayPaymentWindowOpenedEvent as k, TapipayView as l };
268
+ export type { LoadTapipayOptions as L, TapipayInstance as T, TapipayAutopayActivatedEvent as a, TapipayAutopayAdhesionSummary as b, TapipayAutopayErrorEvent as c, TapipayAutopayLoadedEvent as d, TapipayAutopayMediaType as e, TapipayAutopayRemovedEvent as f, TapipayDomiciliationAccountCheckFailedEvent as g, TapipayDomiciliationAccountType as h, TapipayDomiciliationBankSelectedEvent as i, TapipayDomiciliationConfirmedEvent as j, TapipayDomiciliationFormCompletedEvent as k, TapipayDomiciliationVerificationCompletedEvent as l, TapipayDomiciliationVerificationMethod as m, TapipayEnvironment as n, TapipayOptions as o, TapipayPaymentCancelledEvent as p, TapipayPaymentSubmittedEvent as q, TapipayPaymentWindowOpenedEvent as r, TapipayView as s };
@@ -77,7 +77,7 @@ type TapipayPaymentCancelledEvent = Record<string, never>;
77
77
  * Tipo de medio adherido expuesto al sitio cliente.
78
78
  * Solo se expone el tipo lógico, nunca la marca ni el banco.
79
79
  */
80
- type TapipayAutopayMediaType = "card" | "bank_account";
80
+ type TapipayAutopayMediaType = "card" | "bank_account" | "debit_card";
81
81
  /**
82
82
  * Resumen mínimo y seguro de una adhesión activa.
83
83
  * Privacidad: solo tipo de medio + últimos 4 dígitos. El `id` es un hash opaco
@@ -140,6 +140,91 @@ interface TapipayAutopayErrorEvent {
140
140
  /** Mensaje neutral para el host. */
141
141
  message: string;
142
142
  }
143
+ /**
144
+ * Tipo de cuenta adherida, derivado de la longitud del identificador ingresado.
145
+ * 18 dígitos = CLABE, 16 = tarjeta de débito.
146
+ */
147
+ type TapipayDomiciliationAccountType = "BANK_ACCOUNT" | "DEBIT_CARD";
148
+ /** Método con el que se verificó la cuenta en el alta de domiciliación. */
149
+ type TapipayDomiciliationVerificationMethod = "penny" | "kyc" | "transfer";
150
+ /**
151
+ * Payload del evento domiciliationBankSelected.
152
+ * El usuario eligió su banco en el alta de domiciliación. Emite en cada cambio
153
+ * de selección.
154
+ */
155
+ interface TapipayDomiciliationBankSelectedEvent {
156
+ /** Id del banco en el catálogo de TapiPay. */
157
+ bankId: string;
158
+ /** Clave SPEI del banco. */
159
+ speiCode: string;
160
+ /** Nombre comercial del banco. */
161
+ name: string;
162
+ }
163
+ /**
164
+ * Payload del evento domiciliationFormCompleted.
165
+ *
166
+ * Los datos de la cuenta pasaron la validación del backend. Ojo con el timing:
167
+ * NO se dispara al salir de la pantalla del formulario, sino al confirmar el
168
+ * método de verificación — que es cuando la cuenta se registra contra el
169
+ * backend. Si los datos son inválidos, el evento no llega.
170
+ *
171
+ * Nunca incluye la CLABE ni el número de tarjeta completos.
172
+ */
173
+ interface TapipayDomiciliationFormCompletedEvent {
174
+ bankId: string;
175
+ /** Tipo de cuenta derivado de la longitud del identificador. */
176
+ accountType: TapipayDomiciliationAccountType;
177
+ /** Últimos 4 dígitos de la CLABE o tarjeta. `null` si no está disponible. */
178
+ lastFour: string | null;
179
+ }
180
+ /**
181
+ * Payload del evento domiciliationVerificationCompleted.
182
+ *
183
+ * La verificación de la cuenta llegó a un DESENLACE. Dos aclaraciones que
184
+ * importan para interpretarlo:
185
+ *
186
+ * 1. Solo emite al outcome final. Un intento de monto incorrecto que aún deja
187
+ * reintentos disponibles NO dispara el evento: `outcome: "failed"` llega
188
+ * recién cuando se agotan los intentos. Ausencia de evento NO significa que
189
+ * el usuario se frenó — puede estar reintentando.
190
+ * 2. Es method-agnostic y cubre el caso en que el paso de verificación no
191
+ * aparece en pantalla (banco que no la requiere, o método `kyc`/`transfer`):
192
+ * ahí también se emite, para que la secuencia no quede incompleta.
193
+ */
194
+ interface TapipayDomiciliationVerificationCompletedEvent {
195
+ method: TapipayDomiciliationVerificationMethod;
196
+ outcome: "approved" | "failed";
197
+ }
198
+ /**
199
+ * Payload del evento domiciliationConfirmed.
200
+ *
201
+ * El usuario confirmó la domiciliación. **No significa que quedó registrada:**
202
+ * se emite al click, sin esperar la respuesta del backend, que procesa el alta
203
+ * de forma asíncrona. La confirmación real llega por `autopayActivated`.
204
+ */
205
+ interface TapipayDomiciliationConfirmedEvent {
206
+ /** True si adhirió todas las deudas en vez de una selección. */
207
+ enrollAllDebts: boolean;
208
+ selectedProductsCount: number;
209
+ }
210
+ /**
211
+ * Payload del evento domiciliationAccountCheckFailed.
212
+ *
213
+ * El chequeo en vivo (debounceado) de la CLABE/tarjeta ingresada en el step de
214
+ * datos de cuenta rechazó el valor actual. No es un hito de la secuencia
215
+ * anterior: puede dispararse cero, una o muchas veces mientras el usuario
216
+ * tipea — es el equivalente, para este flujo, de `autopayError`.
217
+ *
218
+ * Nunca incluye la CLABE/tarjeta ingresada ni el mensaje de error en español
219
+ * (ese texto es UI, puede cambiar sin aviso): solo el `bankId` seleccionado y
220
+ * el `reason` categorizado.
221
+ */
222
+ interface TapipayDomiciliationAccountCheckFailedEvent {
223
+ /** Id del banco seleccionado en el catálogo de TapiPay. */
224
+ bankId: string;
225
+ /** Motivo categorizado del rechazo. */
226
+ reason: "checksum" | "luhn" | "card_type_blocked" | "bank_mismatch";
227
+ }
143
228
  /**
144
229
  * Instancia del SDK TapiPay expuesta en window.tapipay y retornada por loadTapipay().
145
230
  */
@@ -153,6 +238,11 @@ interface TapipayInstance {
153
238
  on(event: "autopayActivated", handler: (data: TapipayAutopayActivatedEvent) => void): void;
154
239
  on(event: "autopayRemoved", handler: (data: TapipayAutopayRemovedEvent) => void): void;
155
240
  on(event: "autopayError", handler: (data: TapipayAutopayErrorEvent) => void): void;
241
+ on(event: "domiciliationBankSelected", handler: (data: TapipayDomiciliationBankSelectedEvent) => void): void;
242
+ on(event: "domiciliationFormCompleted", handler: (data: TapipayDomiciliationFormCompletedEvent) => void): void;
243
+ on(event: "domiciliationVerificationCompleted", handler: (data: TapipayDomiciliationVerificationCompletedEvent) => void): void;
244
+ on(event: "domiciliationConfirmed", handler: (data: TapipayDomiciliationConfirmedEvent) => void): void;
245
+ on(event: "domiciliationAccountCheckFailed", handler: (data: TapipayDomiciliationAccountCheckFailedEvent) => void): void;
156
246
  off(event: "paymentWindowOpened", handler: (data: TapipayPaymentWindowOpenedEvent) => void): void;
157
247
  off(event: "paymentSubmitted", handler: (data: TapipayPaymentSubmittedEvent) => void): void;
158
248
  off(event: "paymentCancelled", handler: (data: TapipayPaymentCancelledEvent) => void): void;
@@ -160,6 +250,11 @@ interface TapipayInstance {
160
250
  off(event: "autopayActivated", handler: (data: TapipayAutopayActivatedEvent) => void): void;
161
251
  off(event: "autopayRemoved", handler: (data: TapipayAutopayRemovedEvent) => void): void;
162
252
  off(event: "autopayError", handler: (data: TapipayAutopayErrorEvent) => void): void;
253
+ off(event: "domiciliationBankSelected", handler: (data: TapipayDomiciliationBankSelectedEvent) => void): void;
254
+ off(event: "domiciliationFormCompleted", handler: (data: TapipayDomiciliationFormCompletedEvent) => void): void;
255
+ off(event: "domiciliationVerificationCompleted", handler: (data: TapipayDomiciliationVerificationCompletedEvent) => void): void;
256
+ off(event: "domiciliationConfirmed", handler: (data: TapipayDomiciliationConfirmedEvent) => void): void;
257
+ off(event: "domiciliationAccountCheckFailed", handler: (data: TapipayDomiciliationAccountCheckFailedEvent) => void): void;
163
258
  off(event: string, handler: (...args: unknown[]) => unknown): void;
164
259
  /** Cola interna usada por el stub antes de que cargue el SDK real. */
165
260
  _q?: [string, unknown[]][];
@@ -170,4 +265,4 @@ declare global {
170
265
  }
171
266
  }
172
267
 
173
- 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, TapipayEnvironment as g, TapipayOptions as h, TapipayPaymentCancelledEvent as i, TapipayPaymentSubmittedEvent as j, TapipayPaymentWindowOpenedEvent as k, TapipayView as l };
268
+ export type { LoadTapipayOptions as L, TapipayInstance as T, TapipayAutopayActivatedEvent as a, TapipayAutopayAdhesionSummary as b, TapipayAutopayErrorEvent as c, TapipayAutopayLoadedEvent as d, TapipayAutopayMediaType as e, TapipayAutopayRemovedEvent as f, TapipayDomiciliationAccountCheckFailedEvent as g, TapipayDomiciliationAccountType as h, TapipayDomiciliationBankSelectedEvent as i, TapipayDomiciliationConfirmedEvent as j, TapipayDomiciliationFormCompletedEvent as k, TapipayDomiciliationVerificationCompletedEvent as l, TapipayDomiciliationVerificationMethod as m, TapipayEnvironment as n, TapipayOptions as o, TapipayPaymentCancelledEvent as p, TapipayPaymentSubmittedEvent as q, TapipayPaymentWindowOpenedEvent as r, TapipayView as s };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@npmtapi/embed",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "description": "TapiPay Embed SDK — carga y controla el widget de pago embebido",
5
5
  "type": "module",
6
6
  "exports": {