import { createDeunaWidgetApi } from "@fire-spark/storefront";
import { deunaWidgetPayments } from "@fire-spark/payments-deuna-widget";
import type { DeunaWidgetBridge } from "@fire-spark/payments-deuna-widget";
// Un bridge por app, sobre la instancia del SDK de DEUNA que montas una vez.
const bridge: DeunaWidgetBridge = {
open: input => {
return new Promise(resolve => {
const close = () => deunaSDK.close();
input.signal.addEventListener("abort", () => {
close();
resolve({ type: "closed", by: "system" });
});
deunaSDK.initPaymentWidget({
orderToken: input.orderToken,
paymentMethods: input.paymentMethods,
language: input.language,
callbacks: {
onSuccess: order => {
close();
resolve({ type: "success", order });
},
onPending: order => resolve({ type: "pending", order }),
onExpired: () => resolve({ type: "expired" }),
onError: error => {
close();
const code = error?.metadata?.code ?? null;
resolve({ type: "error", code, errorType: error?.type ?? null });
},
onClosed: action => {
resolve({ type: "closed", by: action === "userAction" ? "user" : "system" });
}
}
});
});
}
};
const api = createDeunaWidgetApi(httpOptions);
order.setPaymentAdapters([
deunaWidgetPayments({ method: "CARD", bridge, api }),
deunaWidgetPayments({
method: "WALLET",
bridge,
api,
// Deep links de vuelta a la app después de Mercado Pago o PSE.
callbackUrls: { on_success: "myapp://deuna/success", on_failed: "myapp://deuna/failed" }
}),
deunaWidgetPayments({ method: "BANK_TRANSFER", bridge, api })
]);
const result = await order.payIntent({ payment: deunaPayment });