@payconductor/react 1.0.1 → 1.0.3

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
@@ -11,13 +11,13 @@ Minimum React version: **v16.8**.
11
11
  ## Installation
12
12
 
13
13
  ```bash
14
- npm install @payconductor/react payconductor-sdk
14
+ npm install @payconductor/react @payconductor/sdk
15
15
  # or
16
- yarn add @payconductor/react payconductor-sdk
16
+ yarn add @payconductor/react @payconductor/sdk
17
17
  # or
18
- pnpm add @payconductor/react payconductor-sdk
18
+ pnpm add @payconductor/react @payconductor/sdk
19
19
  # or
20
- bun add @payconductor/react payconductor-sdk
20
+ bun add @payconductor/react @payconductor/sdk
21
21
  ```
22
22
 
23
23
  ## Quick Start
@@ -37,7 +37,7 @@ import {
37
37
  DocumentType,
38
38
  OrderApi,
39
39
  type OrderCreateRequest,
40
- } from 'payconductor-sdk';
40
+ } from '@payconductor/sdk';
41
41
 
42
42
  const sdkConfig = new Configuration({
43
43
  username: import.meta.env.VITE_PAYCONDUCTOR_CLIENT_ID || 'your_client_id',
@@ -58,7 +58,7 @@ function CheckoutForm() {
58
58
  setErrorMessage(null);
59
59
 
60
60
  try {
61
- // 1. Create the Draft order via payconductor-sdk to get the orderId
61
+ // 1. Create the Draft order via @payconductor/sdk to get the orderId
62
62
  const orderRequest: OrderCreateRequest = {
63
63
  chargeAmount: 100.00,
64
64
  clientIp: '0.0.0.0',
@@ -115,7 +115,7 @@ function CheckoutForm() {
115
115
  export default function App() {
116
116
  return (
117
117
  <PayConductor
118
- publicKey="pk_test_123"
118
+ publicKey={import.meta.env.VITE_PAYCONDUCTOR_CLIENT_ID || "your_client_id"}
119
119
  locale="pt-BR"
120
120
  debug={true}
121
121
  theme={{ primaryColor: '#0066ff', borderRadius: '8px' }}
@@ -241,7 +241,7 @@ import type {
241
241
  └─ getSelectedPaymentMethod() returns the chosen method
242
242
 
243
243
  5. User clicks "Checkout" (your button, outside the iframe)
244
- └─ payconductor-sdk creates Draft order → returns orderId
244
+ └─ @payconductor/sdk creates Draft order → returns orderId
245
245
  └─ confirmPayment({ orderId })
246
246
  └─ iframe collects form data → POST /orders/:id/confirm
247
247
 
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,14 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const O=require("react/jsx-runtime"),P=require("react"),U="https://iframe.payconductor.ai/v1",F="http://localhost:5175/v1",g=3e4,$="600px";var _=(e=>(e.Init="Init",e.Config="Config",e.Update="Update",e.ConfirmPayment="ConfirmPayment",e.Validate="Validate",e.Reset="Reset",e))(_||{}),h=(e=>(e.Ready="Ready",e.Error="Error",e.PaymentComplete="PaymentComplete",e.PaymentFailed="PaymentFailed",e.PaymentPending="PaymentPending",e.ValidationError="ValidationError",e.PaymentMethodSelected="PaymentMethodSelected",e))(h||{});const z=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1")&&!window.location.search.includes("production"),v=z?F:U,b=[F,U],V=$,Y=g,s={INIT:_.Init,CONFIG:_.Config,UPDATE:_.Update,CONFIRM_PAYMENT:_.ConfirmPayment,VALIDATE:_.Validate,RESET:_.Reset,READY:h.Ready,ERROR:h.Error,PAYMENT_COMPLETE:h.PaymentComplete,PAYMENT_FAILED:h.PaymentFailed,PAYMENT_PENDING:h.PaymentPending,VALIDATION_ERROR:h.ValidationError,PAYMENT_METHOD_SELECTED:h.PaymentMethodSelected},J={INVALID_CLIENT:"InvalidClient",INVALID_TOKEN:"InvalidToken",NETWORK_ERROR:"NetworkError",IFRAME_NOT_READY:"IframeNotReady",PAYMENT_DECLINED:"PaymentDeclined",VALIDATION_ERROR:"ValidationError",TIMEOUT:"Timeout"};function G(e){const r=new URLSearchParams({publicKey:e.publicKey});return`${v}?${r.toString()}`}function H(){return crypto.randomUUID()}function K(e,r){return r.some(t=>{try{return new URL(t).origin===e}catch{return t===e}})}function S(){return new Map}function A(e,r,t,n){return new Promise((d,u)=>{if(!e||!("contentWindow"in e)){u(new Error("Iframe not defined"));return}if(!(e!=null&&e.contentWindow)){u(new Error("Iframe not ready"));return}if(!r){u(new Error("Pending requests not initialized"));return}const f=H();r.set(f,{resolve:d,reject:u}),e.contentWindow.postMessage({type:t,data:n,requestId:f},"*"),setTimeout(()=>{r!=null&&r.has(f)&&(r.delete(f),u(new Error("Request timeout")))},Y)})}function q(e,r,t){return A(e,r,s.CONFIRM_PAYMENT,{orderId:t.orderId})}function X(e,r,t){return A(e,r,s.VALIDATE,t)}function Z(e,r){return A(e,r,s.RESET)}function x(e,r,t){return A(e,r,s.CONFIG,t)}function p(e,r,t){return A(e,r,s.INIT,t)}function ee(e,r,t,n,d,u,f,T,m,I){const L=e.data,{requestId:l,type:E,data:c,error:y}=L;if(E===s.READY){if(t(!0),window.PayConductor&&window.PayConductor.frame&&(window.PayConductor.frame.isReady=!0),d==null||d(),l&&(r!=null&&r.has(l))){const{resolve:w}=r.get(l);r.delete(l),w(c)}return}if(K(e.origin,b)){if(l&&r&&r.has(l)){const{resolve:w,reject:M}=r.get(l);r.delete(l),y?M(new Error(String(y.message))):w(c);return}if(E===s.ERROR){n((y==null?void 0:y.message)||"Unknown error"),u==null||u(new Error(String(y==null?void 0:y.message)));return}if(E===s.PAYMENT_COMPLETE){c&&typeof c=="object"&&"status"in c&&(f==null||f(c));return}if(E===s.PAYMENT_FAILED){c&&typeof c=="object"&&"status"in c&&(T==null||T(c));return}if(E===s.PAYMENT_PENDING){c&&typeof c=="object"&&"status"in c&&(m==null||m(c));return}if(E===s.PAYMENT_METHOD_SELECTED){c&&typeof c=="object"&&"paymentMethod"in c&&(I==null||I(c.paymentMethod));return}}}function j(e){const[r,t]=P.useState(()=>!1),[n,d]=P.useState(()=>!1),[u,f]=P.useState(()=>null),[T,m]=P.useState(()=>""),[I,L]=P.useState(()=>null);return P.useEffect(()=>{const l=(...o)=>{e.debug&&console.log("[PayConductor]",...o)},E=G({publicKey:e.publicKey});m(E),t(!0);const c=S();let y=!1;l("init",e.publicKey),l("iframeUrl",E);const w=()=>{var R,i;const o=(i=(R=window.PayConductor)==null?void 0:R.frame)==null?void 0:i.iframe;if(o){if(o instanceof HTMLIFrameElement)return o;if(typeof o=="object"&&o!==null){const a=o;if("current"in a&&a.current instanceof HTMLIFrameElement)return a.current;if("value"in a&&a.value instanceof HTMLIFrameElement)return a.value}return o}return document.querySelector(".payconductor-element iframe")??void 0},M={get iframe(){return document.querySelector(".payconductor-element iframe")??null},set iframe(o){},iframeUrl:E,isReady:window.PayConductor&&window.PayConductor.frame?window.PayConductor.frame.isReady:!1,error:null},W={publicKey:e.publicKey,theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod},B={confirmPayment:o=>(l("→ CONFIRM_PAYMENT",{orderId:o.orderId}),q(w(),c,o)),validate:o=>(l("→ VALIDATE",o),X(w(),c,o)),reset:()=>(l(" RESET"),Z(w(),c)),getSelectedPaymentMethod:()=>I};window.PayConductor={frame:M,config:W,api:B,selectedPaymentMethod:I},l("registered"),window.dispatchEvent(new CustomEvent("payconductor:registered",{detail:window.PayConductor}));const N=async()=>{if(!y){const o=w();if(!o){l("→ CONFIG skipped: iframe not found");return}y=!0,l("→ CONFIG",{theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod,showPaymentButtons:e.showPaymentButtons}),x(o,c,{theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod,showPaymentButtons:e.showPaymentButtons,nuPayConfig:e.nuPayConfig})}},k=o=>{var R;(R=o.data)!=null&&R.type&&l("",o.data.type,o.data.data??""),ee(o,c,i=>{var a;d(i),M.isReady=i,(a=window.PayConductor)!=null&&a.frame&&(window.PayConductor.frame.isReady=i),i&&N()},i=>{var a;f(i),M.error=i,(a=window.PayConductor)!=null&&a.frame&&(window.PayConductor.frame.error=i)},()=>{var i;(i=e.onReady)==null||i.call(e)},i=>{var a;(a=e.onError)==null||a.call(e,i)},i=>{var a;(a=e.onPaymentComplete)==null||a.call(e,i)},i=>{var a;(a=e.onPaymentFailed)==null||a.call(e,i)},i=>{var a;(a=e.onPaymentPending)==null||a.call(e,i)},i=>{var a;L(i),window.PayConductor&&(window.PayConductor.selectedPaymentMethod=i),(a=e.onPaymentMethodSelected)==null||a.call(e,i)})};window.addEventListener("message",k);const Q=()=>{var R,i,a;const o=w();if(!o)return!1;try{if((((R=o.contentDocument)==null?void 0:R.readyState)??((a=(i=o.contentWindow)==null?void 0:i.document)==null?void 0:a.readyState))==="complete")return N(),!0}catch{}return!1},D=()=>{if(Q())return;const o=w();if(o){o.addEventListener("load",()=>N(),{once:!0});return}setTimeout(D,50)};D()},[]),O.jsx("div",{className:"payconductor",id:"payconductor",style:{display:"contents"},children:e.children})}function te(e){const r=P.useRef(null),[t,n]=P.useState(()=>""),[d,u]=P.useState(()=>!1);return P.useEffect(()=>{const f=m=>{m!=null&&m.frame&&(n(m.frame.iframeUrl||""),u(!0),window.PayConductor&&window.PayConductor.frame&&(window.PayConductor.frame.isReady=!0),console.log("init",{PayConductor:window.PayConductor}))},T=typeof window<"u"?window.PayConductor:null;if(T)f(T);else{const m=I=>{f(I.detail),window.removeEventListener("payconductor:registered",m)};window.addEventListener("payconductor:registered",m)}},[]),O.jsx("div",{className:"payconductor-element",style:{width:"100%"},children:d&&t?O.jsx("iframe",{allow:"payment",title:"PayConductor",ref:r,src:t,style:{width:"100%",height:e.height||V,border:"none"}}):null})}function ne(){const e=typeof window<"u"?window.PayConductor:null,r=e!=null&&e.config?{publicKey:e.config.publicKey,orderId:e.config.orderId,theme:e.config.theme,locale:e.config.locale}:{},t=e!=null&&e.frame?{iframe:e.frame.iframe,isReady:e.frame.isReady,error:e.frame.error}:{iframe:null,isReady:!1,error:null};return{...r,...t}}function C(e){var r;if((r=e==null?void 0:e.frame)!=null&&r.iframe){const t=e.frame.iframe;if(t instanceof HTMLIFrameElement)return t;if(t&&typeof t=="object"){if("current"in t){const n=t.current;if(n instanceof HTMLIFrameElement)return n}if("value"in t){const n=t.value;if(n instanceof HTMLIFrameElement)return n}}}return document.querySelector(".payconductor-element iframe")??null}function re(){const e=()=>typeof window<"u"?window.PayConductor:null,r=(t,n)=>{const d=e();if(!d)return;const u=C(d);u!=null&&u.contentWindow&&u.contentWindow.postMessage({type:t,data:n},"*")};return{init:async t=>{const n=C(e()),d=S();return p(n||void 0,d,t)},confirmPayment:async t=>{const n=C(e()),d=S();if(!t.orderId)throw new Error("Order ID is required");return q(n||void 0,d,t)},validate:t=>{const n=e();return n?n.api.validate(t):Promise.resolve(!1)},reset:()=>{const t=e();return t?t.api.reset():Promise.resolve()},getSelectedPaymentMethod:()=>{var t;return((t=e())==null?void 0:t.selectedPaymentMethod)??null},updateConfig:t=>{var d;const n=(d=e())==null?void 0:d.config;r(s.CONFIG,{publicKey:n==null?void 0:n.publicKey,orderId:n==null?void 0:n.orderId,theme:t.theme??(n==null?void 0:n.theme),locale:t.locale??(n==null?void 0:n.locale),paymentMethods:t.paymentMethods??(n==null?void 0:n.paymentMethods)})},updateorderId:t=>{var d;const n=(d=e())==null?void 0:d.config;r(s.CONFIG,{publicKey:n==null?void 0:n.publicKey,orderId:t,theme:n==null?void 0:n.theme,locale:n==null?void 0:n.locale,paymentMethods:n==null?void 0:n.paymentMethods})},update:t=>{r(s.UPDATE,t)},submit:async()=>{const t=C(e()),n=S();try{return await A(t||void 0,n,s.CONFIRM_PAYMENT,{}),{paymentMethod:void 0}}catch(d){return{error:{message:d instanceof Error?d.message:"Payment failed",code:"payment_error",type:"payment_error"}}}}}}exports.ALLOWED_ORIGINS=b;exports.ERROR_CODES=J;exports.IFRAME_BASE_URL=v;exports.IFRAME_DEFAULT_HEIGHT_VALUE=V;exports.POST_MESSAGES=s;exports.PayConductor=j;exports.PayConductorCheckoutElement=te;exports.REQUEST_TIMEOUT=Y;exports.buildIframeUrl=G;exports.default=j;exports.generateRequestId=H;exports.isValidOrigin=K;exports.usePayConductor=ne;exports.usePayconductorElement=re;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const g=require("react/jsx-runtime"),P=require("react"),v="https://iframe.payconductor.ai/v1",x="http://localhost:5175/v1",p=3e4,J="600px";var F=(e=>(e.Pix="Pix",e.CreditCard="CreditCard",e.DebitCard="DebitCard",e.BankSlip="BankSlip",e.Crypto="Crypto",e.ApplePay="ApplePay",e.NuPay="NuPay",e.PicPay="PicPay",e.AmazonPay="AmazonPay",e.SepaDebit="SepaDebit",e.GooglePay="GooglePay",e))(F||{}),U=(e=>(e.Grid="grid",e.Vertical="vertical",e.Horizontal="horizontal",e))(U||{}),k=(e=>(e.Succeeded="succeeded",e.Pending="pending",e.Failed="failed",e))(k||{}),H=(e=>(e.Android="android",e.IOS="ios",e.Web="web",e))(H||{}),V=(e=>(e.Padding="padding",e.Radius="radius",e.Color="color",e.Background="background",e.Shadow="shadow",e))(V||{}),C=(e=>(e.Init="Init",e.Config="Config",e.Update="Update",e.ConfirmPayment="ConfirmPayment",e.Validate="Validate",e.Reset="Reset",e))(C||{}),h=(e=>(e.Ready="Ready",e.Error="Error",e.PaymentComplete="PaymentComplete",e.PaymentFailed="PaymentFailed",e.PaymentPending="PaymentPending",e.ValidationError="ValidationError",e.PaymentMethodSelected="PaymentMethodSelected",e.Resize="Resize",e))(h||{}),G=(e=>(e.InvalidClient="InvalidClient",e.InvalidToken="InvalidToken",e.NetworkError="NetworkError",e.IframeNotReady="IframeNotReady",e.PaymentDeclined="PaymentDeclined",e.ValidationError="ValidationError",e.Timeout="Timeout",e))(G||{});const X={primaryColor:"#0066ff",secondaryColor:"#5a6b7c",backgroundColor:"transparent",surfaceColor:"#f8fafc",textColor:"#0f172a",textSecondaryColor:"#64748b",errorColor:"#ef4444",successColor:"#22c55e",warningColor:"#f59e0b",borderColor:"#e2e8f0",disabledColor:"#cbd5e1",fontFamily:'"Poppins", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem"},fontWeight:{normal:400,medium:500,bold:600},lineHeight:"1.5",spacing:{xs:"4px",sm:"8px",md:"16px",lg:"24px",xl:"32px"},borderRadius:"8px",borderWidth:"1px",boxShadow:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",boxShadowHover:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",inputBackground:"#ffffff",inputBorderColor:"#cbd5e1",inputBorderRadius:"8px",inputHeight:"44px",inputPadding:"12px 16px",buttonHeight:"48px",buttonPadding:"16px 24px",buttonBorderRadius:"8px",transitionDuration:"0.2s",transitionTimingFunction:"ease"},ee=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1")&&!window.location.search.includes("production"),B=ee?x:v,Y=[x,v],L=J,K=p,u={INIT:C.Init,CONFIG:C.Config,UPDATE:C.Update,CONFIRM_PAYMENT:C.ConfirmPayment,VALIDATE:C.Validate,RESET:C.Reset,READY:h.Ready,ERROR:h.Error,PAYMENT_COMPLETE:h.PaymentComplete,PAYMENT_FAILED:h.PaymentFailed,PAYMENT_PENDING:h.PaymentPending,VALIDATION_ERROR:h.ValidationError,PAYMENT_METHOD_SELECTED:h.PaymentMethodSelected,RESIZE:h.Resize},te={INVALID_CLIENT:"InvalidClient",INVALID_TOKEN:"InvalidToken",NETWORK_ERROR:"NetworkError",IFRAME_NOT_READY:"IframeNotReady",PAYMENT_DECLINED:"PaymentDeclined",VALIDATION_ERROR:"ValidationError",TIMEOUT:"Timeout"},M="payconductor-skeleton-style",W=`
2
+ @keyframes payconductor-shimmer {
3
+ 0% { background-position: -200% 0; }
4
+ 100% { background-position: 200% 0; }
5
+ }
6
+ .payconductor-skeleton {
7
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
8
+ background-size: 200% 100%;
9
+ animation: payconductor-shimmer 1.5s infinite linear;
10
+ border-radius: 4px;
11
+ width: 100%;
12
+ }
13
+ `;function q(e){const r=new URLSearchParams({publicKey:e.publicKey});return`${B}?${r.toString()}`}function z(){return crypto.randomUUID()}function j(e,r){return r.some(n=>{try{return new URL(n).origin===e}catch{return n===e}})}function O(){return new Map}function _(e,r,n,t){return new Promise((c,s)=>{if(!e||!("contentWindow"in e)){s(new Error("Iframe not defined"));return}if(!(e!=null&&e.contentWindow)){s(new Error("Iframe not ready"));return}if(!r){s(new Error("Pending requests not initialized"));return}const I=z();r.set(I,{resolve:c,reject:s}),e.contentWindow.postMessage({type:n,data:t,requestId:I},"*"),setTimeout(()=>{r!=null&&r.has(I)&&(r.delete(I),s(new Error("Request timeout")))},K)})}function ne(e,r,n){return _(e,r,u.CONFIRM_PAYMENT,{orderId:n.orderId})}function re(e,r,n){return _(e,r,u.VALIDATE,n)}function oe(e,r){return _(e,r,u.RESET)}function ae(e,r,n){return _(e,r,u.CONFIG,n)}function ie(e,r,n){return _(e,r,u.INIT,n)}function de(e,r,n,t,c,s,I,T,R){const y=e.data,{requestId:m,type:f,data:o,error:l}=y;if(f===u.READY){if(t==null||t(),m&&(r!=null&&r.has(m))){const{resolve:w}=r.get(m);r.delete(m),w(o)}return}if(j(e.origin,Y)){if(m&&r&&r.has(m)){const{resolve:w,reject:b}=r.get(m);r.delete(m),l?b(new Error(String(l.message))):w(o);return}if(f===u.ERROR){n((l==null?void 0:l.message)||"Unknown error"),c==null||c(new Error(String(l==null?void 0:l.message)));return}if(f===u.PAYMENT_COMPLETE){o&&typeof o=="object"&&"status"in o&&(s==null||s(o));return}if(f===u.PAYMENT_FAILED){o&&typeof o=="object"&&"status"in o&&(I==null||I(o));return}if(f===u.PAYMENT_PENDING){o&&typeof o=="object"&&"status"in o&&(T==null||T(o));return}if(f===u.PAYMENT_METHOD_SELECTED){o&&typeof o=="object"&&"paymentMethod"in o&&(R==null||R(o.paymentMethod));return}u.RESIZE}}function Q(e){const[r,n]=P.useState(()=>!1),[t,c]=P.useState(()=>null),[s,I]=P.useState(()=>""),[T,R]=P.useState(()=>null);return P.useEffect(()=>{const y=(...a)=>{e.debug&&console.log("[PayConductor]",...a)},m=q({publicKey:e.publicKey});I(m),n(!0);const f=O();let o=!1;y("init",e.publicKey),y("iframeUrl",m);const l=()=>{var E,i;const a=(i=(E=window.PayConductor)==null?void 0:E.frame)==null?void 0:i.iframe;if(a){if(a instanceof HTMLIFrameElement)return a;if(typeof a=="object"&&a!==null){const d=a;if("current"in d&&d.current instanceof HTMLIFrameElement)return d.current;if("value"in d&&d.value instanceof HTMLIFrameElement)return d.value}return a}return document.querySelector(".payconductor-element iframe")??void 0},w={get iframe(){return document.querySelector(".payconductor-element iframe")??null},set iframe(a){},iframeUrl:m,error:null},b={publicKey:e.publicKey,theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod},A={confirmPayment:a=>{var i;y("→ CONFIRM_PAYMENT",{orderId:a.orderId});const E=l();return E!=null&&E.contentWindow&&E.contentWindow.postMessage({type:u.CONFIG,data:{publicKey:e.publicKey,orderId:a.orderId,theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod,showPaymentButtons:e.showPaymentButtons,nuPayConfig:e.nuPayConfig}},"*"),b.orderId=a.orderId,(i=window.PayConductor)!=null&&i.config&&(window.PayConductor.config.orderId=a.orderId),ne(E,f,a)},validate:a=>(y("→ VALIDATE",a),re(l(),f,a)),reset:()=>(y("→ RESET"),oe(l(),f)),getSelectedPaymentMethod:()=>T};window.PayConductor={frame:w,config:b,api:A,selectedPaymentMethod:T},y("registered"),window.dispatchEvent(new CustomEvent("payconductor:registered",{detail:window.PayConductor}));const S=async()=>{if(!o){const a=l();if(!a){y("→ CONFIG skipped: iframe not found");return}o=!0,y("→ CONFIG",{theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod,showPaymentButtons:e.showPaymentButtons}),ae(a,f,{theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod,showPaymentButtons:e.showPaymentButtons,nuPayConfig:e.nuPayConfig})}},Z=a=>{var E;(E=a.data)!=null&&E.type&&y("←",a.data.type,a.data.data??""),de(a,f,i=>{var d;c(i),w.error=i,(d=window.PayConductor)!=null&&d.frame&&(window.PayConductor.frame.error=i)},()=>{var i;(i=e.onReady)==null||i.call(e),S()},i=>{var d;(d=e.onError)==null||d.call(e,i)},i=>{var d;(d=e.onPaymentComplete)==null||d.call(e,i)},i=>{var d;(d=e.onPaymentFailed)==null||d.call(e,i)},i=>{var d;(d=e.onPaymentPending)==null||d.call(e,i)},i=>{var d;R(i),window.PayConductor&&(window.PayConductor.selectedPaymentMethod=i),(d=e.onPaymentMethodSelected)==null||d.call(e,i)})};window.addEventListener("message",Z);const $=()=>{var E,i,d;const a=l();if(!a)return!1;try{if((((E=a.contentDocument)==null?void 0:E.readyState)??((d=(i=a.contentWindow)==null?void 0:i.document)==null?void 0:d.readyState))==="complete")return S(),!0}catch{}return!1},D=()=>{if($())return;const a=l();if(a){a.addEventListener("load",()=>S(),{once:!0});return}setTimeout(D,50)};D()},[]),g.jsx("div",{className:"payconductor",id:"payconductor",style:{display:"contents"},children:e.children})}function ce(e){const r=P.useRef(null),[n,t]=P.useState(()=>""),[c,s]=P.useState(()=>!1),[I,T]=P.useState(()=>"");return P.useEffect(()=>{if(typeof document<"u"&&!document.getElementById(M)){const o=document.createElement("style");o.id=M,o.textContent=W,document.head.appendChild(o)}const R=o=>{o!=null&&o.frame&&(t(o.frame.iframeUrl||""),s(!0),console.log("init",{PayConductor:window.PayConductor}))},y=typeof window<"u"?window.PayConductor:null;if(y)R(y);else{const o=l=>{R(l.detail),window.removeEventListener("payconductor:registered",o)};window.addEventListener("payconductor:registered",o)}let m=!1;const f=o=>{var l,w,b,A;if(((l=o.data)==null?void 0:l.type)===u.RESIZE&&((b=(w=o.data)==null?void 0:w.data)!=null&&b.height)&&T(o.data.data.height+"px"),((A=o.data)==null?void 0:A.type)===u.READY&&e.height&&!m){m=!0;const S=document.querySelector(".payconductor-element iframe");S!=null&&S.contentWindow&&S.contentWindow.postMessage({type:u.CONFIG,data:{height:e.height},requestId:"element-height"},"*")}};return window.addEventListener("message",f),()=>window.removeEventListener("message",f)},[]),g.jsxs("div",{className:"payconductor-element",style:{width:"100%"},children:[c?null:g.jsx("div",{className:"payconductor-skeleton",style:{height:e.height||L}}),c&&n?g.jsx("iframe",{allow:"payment",title:"PayConductor",ref:r,src:n,style:{width:"100%",height:e.height||I||L,border:"none"}}):null]})}function ue(){const e=typeof window<"u"?window.PayConductor:null,r=e!=null&&e.config?{publicKey:e.config.publicKey,orderId:e.config.orderId,theme:e.config.theme,locale:e.config.locale}:{},n=e!=null&&e.frame?{iframe:e.frame.iframe,error:e.frame.error}:{iframe:null,error:null};return{...r,...n}}function N(e){var r;if((r=e==null?void 0:e.frame)!=null&&r.iframe){const n=e.frame.iframe;if(n instanceof HTMLIFrameElement)return n;if(n&&typeof n=="object"){if("current"in n){const t=n.current;if(t instanceof HTMLIFrameElement)return t}if("value"in n){const t=n.value;if(t instanceof HTMLIFrameElement)return t}}}return document.querySelector(".payconductor-element iframe")??null}function le(){const e=()=>typeof window<"u"?window.PayConductor:null,r=(n,t)=>{const c=e();if(!c)return;const s=N(c);s!=null&&s.contentWindow&&s.contentWindow.postMessage({type:n,data:t},"*")};return{init:async n=>{const t=N(e()),c=O();return ie(t||void 0,c,n)},confirmPayment:async n=>{if(!n.orderId)throw new Error("Order ID is required");const t=e();if(!(t!=null&&t.api))throw new Error("PayConductor not initialized");return t.api.confirmPayment(n)},validate:n=>{const t=e();return t?t.api.validate(n):Promise.resolve(!1)},reset:()=>{const n=e();return n?n.api.reset():Promise.resolve()},getSelectedPaymentMethod:()=>{var n;return((n=e())==null?void 0:n.selectedPaymentMethod)??null},updateConfig:n=>{var c;const t=(c=e())==null?void 0:c.config;r(u.CONFIG,{publicKey:t==null?void 0:t.publicKey,orderId:t==null?void 0:t.orderId,theme:n.theme??(t==null?void 0:t.theme),locale:n.locale??(t==null?void 0:t.locale),paymentMethods:n.paymentMethods??(t==null?void 0:t.paymentMethods)})},updateOrderId:n=>{var c;const t=(c=e())==null?void 0:c.config;r(u.CONFIG,{publicKey:t==null?void 0:t.publicKey,orderId:n,theme:t==null?void 0:t.theme,locale:t==null?void 0:t.locale,paymentMethods:t==null?void 0:t.paymentMethods})},update:n=>{r(u.UPDATE,n)},submit:async()=>{const n=N(e()),t=O();try{return await _(n||void 0,t,u.CONFIRM_PAYMENT,{}),{paymentMethod:void 0}}catch(c){return{error:{message:c instanceof Error?c.message:"Payment failed",code:"payment_error",type:"payment_error"}}}}}}exports.ALLOWED_ORIGINS=Y;exports.DeviceType=H;exports.ERROR_CODES=te;exports.ErrorCode=G;exports.IFRAME_BASE_URL=B;exports.IFRAME_DEFAULT_HEIGHT_VALUE=L;exports.IncomingMessage=h;exports.InputStyleKey=V;exports.OutgoingMessage=C;exports.POST_MESSAGES=u;exports.PayConductor=Q;exports.PayConductorCheckoutElement=ce;exports.PaymentMethod=F;exports.PaymentMethodLayout=U;exports.PaymentStatus=k;exports.REQUEST_TIMEOUT=K;exports.SKELETON_CSS=W;exports.SKELETON_STYLE_ID=M;exports.buildIframeUrl=q;exports.default=Q;exports.defaultTheme=X;exports.generateRequestId=z;exports.isValidOrigin=j;exports.usePayConductor=ue;exports.usePayconductorElement=le;
2
14
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/payconductor/iframe/constants.ts","../src/payconductor/iframe/types.ts","../src/payconductor/constants.ts","../src/payconductor/utils.ts","../src/payconductor/internal.ts","../src/payconductor/payconductor.tsx","../src/payconductor/payconductor-element.tsx","../src/payconductor/hooks/use-payconductor.ts","../src/payconductor/hooks/use-element.ts"],"sourcesContent":["// PayConductor Shared Constants\n// Served statically at iframe.payconductor.ai/constants.ts\n// Used by the iFrame (imported directly) and the SDK Web (synced with: bun sync)\n\nexport const APP_BASE_URL_PROD = \"https://app.payconductor.ai\";\nexport const API_BASE_URL_PROD = \"https://app.payconductor.ai/api/v1\";\nexport const IFRAME_BASE_URL_PROD = \"https://iframe.payconductor.ai/v1\";\nexport const IFRAME_BASE_URL_DEV = \"http://localhost:5175/v1\";\nexport const APP_BASE_URL_DEV = \"http://localhost:3000\";\nexport const DEFAULT_LOCALE = \"pt-BR\";\nexport const REQUEST_TIMEOUT_MS = 30000;\nexport const IFRAME_DEFAULT_HEIGHT = \"600px\"","// PayConductor Shared Types\n// Served statically at iframe.payconductor.ai/types.ts\n// Used by the iFrame (imported directly) and the SDK Web (synced with: bun sync)\n\nexport enum PaymentMethod {\n Pix = \"Pix\",\n CreditCard = \"CreditCard\",\n DebitCard = \"DebitCard\",\n BankSlip = \"BankSlip\",\n Crypto = \"Crypto\",\n ApplePay = \"ApplePay\",\n NuPay = \"NuPay\",\n PicPay = \"PicPay\",\n AmazonPay = \"AmazonPay\",\n SepaDebit = \"SepaDebit\",\n GooglePay = \"GooglePay\",\n}\nexport enum PaymentMethodLayout {\n Grid = \"grid\",\n Vertical = \"vertical\",\n Horizontal = \"horizontal\",\n}\nexport enum PaymentStatus {\n Succeeded = \"succeeded\",\n Pending = \"pending\",\n Failed = \"failed\",\n}\nexport enum DeviceType {\n Android = \"android\",\n IOS = \"ios\",\n Web = \"web\",\n}\nexport enum InputStyleKey {\n Padding = \"padding\",\n Radius = \"radius\",\n Color = \"color\",\n Background = \"background\",\n Shadow = \"shadow\",\n}\nexport enum OutgoingMessage {\n Init = \"Init\",\n Config = \"Config\",\n Update = \"Update\",\n ConfirmPayment = \"ConfirmPayment\",\n Validate = \"Validate\",\n Reset = \"Reset\",\n}\nexport enum IncomingMessage {\n Ready = \"Ready\",\n Error = \"Error\",\n PaymentComplete = \"PaymentComplete\",\n PaymentFailed = \"PaymentFailed\",\n PaymentPending = \"PaymentPending\",\n ValidationError = \"ValidationError\",\n PaymentMethodSelected = \"PaymentMethodSelected\",\n}\nexport enum ErrorCode {\n InvalidClient = \"InvalidClient\",\n InvalidToken = \"InvalidToken\",\n NetworkError = \"NetworkError\",\n IframeNotReady = \"IframeNotReady\",\n PaymentDeclined = \"PaymentDeclined\",\n ValidationError = \"ValidationError\",\n Timeout = \"Timeout\",\n}\nexport type InputStyleConfig = {\n padding?: string;\n radius?: string;\n color?: string;\n background?: string;\n shadow?: string;\n};\nexport type PaymentMethodsConfig = {\n layout?: PaymentMethodLayout;\n gap?: string;\n inputStyle?: InputStyleConfig;\n};\nexport type PaymentMethodConfig = {\n method: PaymentMethod;\n discount?: number;\n showBrands?: boolean;\n installments?: {\n count: number;\n amount: number;\n }[];\n};\nexport type PaymentMethodsResponse = {\n methods: PaymentMethod[];\n config: PaymentMethodsConfig;\n};\nexport type PayConductorTheme = {\n primaryColor?: string;\n secondaryColor?: string;\n backgroundColor?: string;\n surfaceColor?: string;\n textColor?: string;\n textSecondaryColor?: string;\n errorColor?: string;\n successColor?: string;\n warningColor?: string;\n borderColor?: string;\n disabledColor?: string;\n fontFamily?: string;\n fontSize?: {\n xs?: string;\n sm?: string;\n md?: string;\n lg?: string;\n xl?: string;\n };\n fontWeight?: {\n normal?: number;\n medium?: number;\n bold?: number;\n };\n lineHeight?: string;\n spacing?: {\n xs?: string;\n sm?: string;\n md?: string;\n lg?: string;\n xl?: string;\n };\n borderRadius?: string;\n borderWidth?: string;\n boxShadow?: string;\n boxShadowHover?: string;\n inputBackground?: string;\n inputBorderColor?: string;\n inputBorderRadius?: string;\n inputHeight?: string;\n inputPadding?: string;\n buttonHeight?: string;\n buttonPadding?: string;\n buttonBorderRadius?: string;\n transitionDuration?: string;\n transitionTimingFunction?: string;\n};\nexport const defaultTheme: PayConductorTheme = {\n primaryColor: \"#0066ff\",\n secondaryColor: \"#5a6b7c\",\n backgroundColor: \"transparent\",\n surfaceColor: \"#f8fafc\",\n textColor: \"#0f172a\",\n textSecondaryColor: \"#64748b\",\n errorColor: \"#ef4444\",\n successColor: \"#22c55e\",\n warningColor: \"#f59e0b\",\n borderColor: \"#e2e8f0\",\n disabledColor: \"#cbd5e1\",\n fontFamily: '\"Poppins\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: {\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n md: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\"\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n bold: 600\n },\n lineHeight: \"1.5\",\n spacing: {\n xs: \"4px\",\n sm: \"8px\",\n md: \"16px\",\n lg: \"24px\",\n xl: \"32px\"\n },\n borderRadius: \"8px\",\n borderWidth: \"1px\",\n boxShadow: \"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)\",\n boxShadowHover: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n inputBackground: \"#ffffff\",\n inputBorderColor: \"#cbd5e1\",\n inputBorderRadius: \"8px\",\n inputHeight: \"44px\",\n inputPadding: \"12px 16px\",\n buttonHeight: \"48px\",\n buttonPadding: \"16px 24px\",\n buttonBorderRadius: \"8px\",\n transitionDuration: \"0.2s\",\n transitionTimingFunction: \"ease\"\n};\nexport type PayConductorConfig = {\n publicKey: string;\n orderId?: string;\n theme?: PayConductorTheme;\n locale?: string;\n paymentMethods?: PaymentMethod[] | \"all\";\n defaultPaymentMethod?: PaymentMethod;\n paymentMethodsConfig?: PaymentMethodConfig[];\n methodsDirection?: \"vertical\" | \"horizontal\";\n showPaymentButtons?: boolean;\n /** Required when NuPay is an available payment method */\n nuPayConfig?: NuPayData;\n};\nexport type BillingDetails = {\n name: string;\n email?: string;\n phone?: string;\n address?: {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n };\n};\nexport type CardData = {\n number: string;\n expMonth: string;\n expYear: string;\n cvc: string;\n};\nexport type CreatePaymentMethodOptions = {\n billingDetails: BillingDetails;\n card?: CardData;\n};\nexport type PaymentMethodResult = {\n id: string;\n type: PaymentMethod;\n card?: {\n brand: string;\n last4: string;\n expMonth: number;\n expYear: number;\n };\n billingDetails?: BillingDetails;\n};\nexport type PaymentResult = {\n orderId: string;\n status: PaymentStatus;\n amount: number;\n currency: string;\n message?: string;\n};\nexport interface MessagePayload {\n type: OutgoingMessage | IncomingMessage;\n data?: unknown;\n requestId?: string;\n error?: {\n code: string;\n message: string;\n field?: string;\n };\n}\nexport type CardTokenData = {\n token: string;\n firstSixCardNumber?: string;\n};\nexport type CardFullData = {\n number: string;\n holderName: string;\n cvv: string;\n expiration: {\n month: number;\n year: number;\n };\n};\nexport type CardPaymentData = CardTokenData | CardFullData;\nexport type PixPaymentData = {\n paymentMethod: PaymentMethod.Pix;\n expirationInSeconds?: number;\n};\nexport type CreditCardPaymentData = {\n paymentMethod: PaymentMethod.CreditCard;\n card: CardPaymentData;\n installments: number;\n softDescriptor?: string;\n};\nexport type BankSlipPaymentData = {\n paymentMethod: PaymentMethod.BankSlip;\n expirationInDays?: number;\n};\nexport type NuPayData = {\n cancelUrl: string;\n merchantName: string;\n returnUrl: string;\n storeName?: string;\n};\nexport type NuPayPaymentData = {\n paymentMethod: PaymentMethod.NuPay;\n nuPay: NuPayData;\n};\nexport type PicPayPaymentData = {\n paymentMethod: PaymentMethod.PicPay;\n};\nexport type PaymentConfirmData = PixPaymentData | CreditCardPaymentData | BankSlipPaymentData | NuPayPaymentData | PicPayPaymentData","import { IFRAME_BASE_URL_DEV, IFRAME_BASE_URL_PROD, IFRAME_DEFAULT_HEIGHT, REQUEST_TIMEOUT_MS } from \"./iframe/constants\";\nimport { IncomingMessage, OutgoingMessage } from \"./iframe/types\";\nconst isDev = typeof window !== \"undefined\" && (window.location.hostname === \"localhost\" || window.location.hostname === \"127.0.0.1\") && !window.location.search.includes(\"production\");\nexport const IFRAME_BASE_URL = isDev ? IFRAME_BASE_URL_DEV : IFRAME_BASE_URL_PROD;\nexport const ALLOWED_ORIGINS = [IFRAME_BASE_URL_DEV, IFRAME_BASE_URL_PROD];\nexport const IFRAME_DEFAULT_HEIGHT_VALUE = IFRAME_DEFAULT_HEIGHT;\nexport const REQUEST_TIMEOUT = REQUEST_TIMEOUT_MS;\nexport const POST_MESSAGES = {\n INIT: OutgoingMessage.Init,\n CONFIG: OutgoingMessage.Config,\n UPDATE: OutgoingMessage.Update,\n CONFIRM_PAYMENT: OutgoingMessage.ConfirmPayment,\n VALIDATE: OutgoingMessage.Validate,\n RESET: OutgoingMessage.Reset,\n READY: IncomingMessage.Ready,\n ERROR: IncomingMessage.Error,\n PAYMENT_COMPLETE: IncomingMessage.PaymentComplete,\n PAYMENT_FAILED: IncomingMessage.PaymentFailed,\n PAYMENT_PENDING: IncomingMessage.PaymentPending,\n VALIDATION_ERROR: IncomingMessage.ValidationError,\n PAYMENT_METHOD_SELECTED: IncomingMessage.PaymentMethodSelected\n} as const;\nexport const ERROR_CODES = {\n INVALID_CLIENT: \"InvalidClient\",\n INVALID_TOKEN: \"InvalidToken\",\n NETWORK_ERROR: \"NetworkError\",\n IFRAME_NOT_READY: \"IframeNotReady\",\n PAYMENT_DECLINED: \"PaymentDeclined\",\n VALIDATION_ERROR: \"ValidationError\",\n TIMEOUT: \"Timeout\"\n} as const","import { IFRAME_BASE_URL } from \"./constants\";\nimport type { PayConductorConfig } from \"./iframe/types\";\nexport function buildIframeUrl(config: PayConductorConfig): string {\n const params = new URLSearchParams({\n publicKey: config.publicKey\n });\n return `${IFRAME_BASE_URL}?${params.toString()}`;\n}\nexport function generateRequestId(): string {\n return crypto.randomUUID();\n}\nexport function isValidOrigin(origin: string, allowedOrigins: string[]): boolean {\n return allowedOrigins.some(allowed => {\n try {\n return new URL(allowed).origin === origin;\n } catch {\n return allowed === origin;\n }\n });\n}","import { ALLOWED_ORIGINS, POST_MESSAGES, REQUEST_TIMEOUT } from \"./constants\";\nimport { IncomingMessage, OutgoingMessage, PayConductorConfig, PaymentMethod, PaymentResult } from \"./iframe/types\";\nimport type { ConfirmPaymentOptions, PendingRequest } from \"./types\";\nimport { generateRequestId, isValidOrigin } from \"./utils\";\nexport function createPendingRequestsMap(): Map<string, PendingRequest> {\n return new Map<string, PendingRequest>();\n}\nexport function sendMessageToIframe(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, type: OutgoingMessage | IncomingMessage, data?: unknown): Promise<unknown> {\n return new Promise((resolve, reject) => {\n if (!iframe || !(\"contentWindow\" in iframe)) {\n reject(new Error(\"Iframe not defined\"));\n return;\n }\n if (!iframe?.contentWindow) {\n reject(new Error(\"Iframe not ready\"));\n return;\n }\n if (!pendingMap) {\n reject(new Error(\"Pending requests not initialized\"));\n return;\n }\n const requestId = generateRequestId();\n pendingMap.set(requestId, {\n resolve,\n reject\n });\n iframe.contentWindow.postMessage({\n type,\n data,\n requestId\n }, \"*\");\n setTimeout(() => {\n if (pendingMap?.has(requestId)) {\n pendingMap.delete(requestId);\n reject(new Error(\"Request timeout\"));\n }\n }, REQUEST_TIMEOUT);\n });\n}\nexport function confirmPayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, options: ConfirmPaymentOptions): Promise<PaymentResult> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.CONFIRM_PAYMENT, {\n orderId: options.orderId\n }) as Promise<PaymentResult>;\n}\nexport function validatePayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, data: unknown): Promise<boolean> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.VALIDATE, data) as Promise<boolean>;\n}\nexport function resetPayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.RESET) as Promise<void>;\n}\nexport function sendConfig(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\" | \"defaultPaymentMethod\" | \"showPaymentButtons\" | \"nuPayConfig\">): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.CONFIG, config) as Promise<void>;\n}\nexport function sendInit(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: PayConductorConfig): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.INIT, config) as Promise<void>;\n}\ntype MessagePayload = {\n requestId?: string;\n type?: string;\n data?: PaymentResult | {\n paymentMethod: PaymentMethod;\n };\n error?: {\n message?: string;\n };\n};\nexport function handleMessageEvent(event: MessageEvent, pendingMap: Map<string, PendingRequest> | null, setIsReady: (value: boolean) => void, setError: (value: string | null) => void, onReady?: () => void, onError?: (error: Error) => void, onPaymentComplete?: (data: PaymentResult) => void, onPaymentFailed?: (data: PaymentResult) => void, onPaymentPending?: (data: PaymentResult) => void, onPaymentMethodSelected?: (method: PaymentMethod) => void) {\n const payload: MessagePayload = event.data;\n const {\n requestId,\n type,\n data,\n error\n } = payload;\n if (type === POST_MESSAGES.READY) {\n setIsReady(true);\n if (window.PayConductor && window.PayConductor.frame) window.PayConductor.frame.isReady = true;\n onReady?.();\n if (requestId && pendingMap?.has(requestId)) {\n const {\n resolve\n } = pendingMap.get(requestId)!;\n pendingMap.delete(requestId);\n resolve(data);\n }\n return;\n }\n if (!isValidOrigin(event.origin, ALLOWED_ORIGINS)) {\n return;\n }\n if (requestId && pendingMap && pendingMap.has(requestId)) {\n const {\n resolve,\n reject\n } = pendingMap.get(requestId)!;\n pendingMap.delete(requestId);\n if (error) {\n reject(new Error(String(error.message)));\n } else {\n resolve(data);\n }\n return;\n }\n if (type === POST_MESSAGES.ERROR) {\n setError(error?.message || \"Unknown error\");\n onError?.(new Error(String(error?.message)));\n return;\n }\n if (type === POST_MESSAGES.PAYMENT_COMPLETE) {\n if (data && typeof data === \"object\" && \"status\" in data) {\n onPaymentComplete?.(data);\n }\n return;\n }\n if (type === POST_MESSAGES.PAYMENT_FAILED) {\n if (data && typeof data === \"object\" && \"status\" in data) {\n onPaymentFailed?.(data);\n }\n return;\n }\n if (type === POST_MESSAGES.PAYMENT_PENDING) {\n if (data && typeof data === \"object\" && \"status\" in data) {\n onPaymentPending?.(data);\n }\n return;\n }\n if (type === POST_MESSAGES.PAYMENT_METHOD_SELECTED) {\n if (data && typeof data === \"object\" && \"paymentMethod\" in data) {\n onPaymentMethodSelected?.(data.paymentMethod);\n }\n return;\n }\n}","\"use client\";\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\n\nexport interface PayConductorEmbedProps\n extends Omit<PayConductorConfig, \"orderId\"> {\n children?: any;\n showActionButtons?: boolean;\n debug?: boolean;\n onReady?: () => void;\n onError?: (error: Error) => void;\n onPaymentComplete?: (result: PaymentResult) => void;\n onPaymentFailed?: (result: PaymentResult) => void;\n onPaymentPending?: (result: PaymentResult) => void;\n onPaymentMethodSelected?: (method: PaymentMethod) => void;\n}\n\nimport type {\n PayConductorConfig,\n PaymentMethod,\n PaymentResult,\n} from \"./iframe/types\";\nimport {\n confirmPayment,\n createPendingRequestsMap,\n handleMessageEvent,\n resetPayment,\n sendConfig,\n validatePayment,\n} from \"./internal\";\nimport type {\n PayConductorApi,\n PayConductorFrame,\n PayConductorState,\n PendingRequest,\n} from \"./types\";\nimport { buildIframeUrl } from \"./utils\";\n\nfunction PayConductor(props: PayConductorEmbedProps) {\n const [isLoaded, setIsLoaded] = useState<PayConductorState[\"isLoaded\"]>(\n () => false\n );\n\n const [isReady, setIsReady] = useState<PayConductorState[\"isReady\"]>(\n () => false\n );\n\n const [error, setError] = useState<PayConductorState[\"error\"]>(() => null);\n\n const [iframeUrl, setIframeUrl] = useState<PayConductorState[\"iframeUrl\"]>(\n () => \"\"\n );\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<\n PayConductorState[\"selectedPaymentMethod\"]\n >(() => null);\n\n useEffect(() => {\n const log = (...args: any[]) => {\n if (props.debug) console.log(\"[PayConductor]\", ...args);\n };\n const iframeUrl = buildIframeUrl({\n publicKey: props.publicKey,\n });\n setIframeUrl(iframeUrl);\n setIsLoaded(true);\n const pendingMap: Map<string, PendingRequest> = createPendingRequestsMap();\n let configSent = false;\n log(\"init\", props.publicKey);\n log(\"iframeUrl\", iframeUrl);\n const getIframe = (): HTMLIFrameElement | undefined => {\n const ref = window.PayConductor?.frame?.iframe;\n if (ref) {\n if (ref instanceof HTMLIFrameElement) return ref;\n if (typeof ref === \"object\" && ref !== null) {\n const obj = ref as Record<string, unknown>;\n if (\"current\" in obj && obj.current instanceof HTMLIFrameElement)\n return obj.current;\n if (\"value\" in obj && obj.value instanceof HTMLIFrameElement)\n return obj.value;\n }\n return ref as HTMLIFrameElement;\n }\n return (\n (document.querySelector(\n \".payconductor-element iframe\"\n ) as HTMLIFrameElement) ?? undefined\n );\n };\n const frame: PayConductorFrame = {\n get iframe(): HTMLIFrameElement | null {\n return (\n (document.querySelector(\n \".payconductor-element iframe\"\n ) as HTMLIFrameElement) ?? null\n );\n },\n set iframe(_: HTMLIFrameElement | Element | unknown | null) {},\n iframeUrl,\n isReady:\n window.PayConductor && window.PayConductor.frame\n ? window.PayConductor.frame.isReady\n : false,\n error: null,\n };\n const config: PayConductorConfig = {\n publicKey: props.publicKey,\n theme: props.theme,\n locale: props.locale,\n paymentMethods: props.paymentMethods,\n defaultPaymentMethod: props.defaultPaymentMethod,\n };\n const api: PayConductorApi = {\n confirmPayment: (options: { orderId: string }) => {\n log(\"→ CONFIRM_PAYMENT\", {\n orderId: options.orderId,\n });\n return confirmPayment(getIframe(), pendingMap, options);\n },\n validate: (data: unknown) => {\n log(\"→ VALIDATE\", data);\n return validatePayment(getIframe(), pendingMap, data);\n },\n reset: () => {\n log(\"→ RESET\");\n return resetPayment(getIframe(), pendingMap);\n },\n getSelectedPaymentMethod: () => selectedPaymentMethod,\n };\n window.PayConductor = {\n frame,\n config,\n api,\n selectedPaymentMethod: selectedPaymentMethod,\n };\n log(\"registered\");\n window.dispatchEvent(\n new CustomEvent(\"payconductor:registered\", {\n detail: window.PayConductor,\n })\n );\n const sendConfigToIframe = async () => {\n if (!configSent) {\n const iframe = getIframe();\n if (!iframe) {\n log(\"→ CONFIG skipped: iframe not found\");\n return;\n }\n configSent = true;\n log(\"→ CONFIG\", {\n theme: props.theme,\n locale: props.locale,\n paymentMethods: props.paymentMethods,\n defaultPaymentMethod: props.defaultPaymentMethod,\n showPaymentButtons: props.showPaymentButtons,\n });\n sendConfig(iframe, pendingMap, {\n theme: props.theme,\n locale: props.locale,\n paymentMethods: props.paymentMethods,\n defaultPaymentMethod: props.defaultPaymentMethod,\n showPaymentButtons: props.showPaymentButtons,\n nuPayConfig: props.nuPayConfig,\n });\n }\n };\n const eventHandler = (event: MessageEvent) => {\n if (event.data?.type) {\n log(\"←\", event.data.type, event.data.data ?? \"\");\n }\n handleMessageEvent(\n event,\n pendingMap,\n (val) => {\n setIsReady(val);\n frame.isReady = val;\n if (window.PayConductor?.frame)\n window.PayConductor.frame.isReady = val;\n if (val) sendConfigToIframe();\n },\n (val) => {\n setError(val);\n frame.error = val;\n if (window.PayConductor?.frame) window.PayConductor.frame.error = val;\n },\n () => {\n props.onReady?.();\n },\n (err) => {\n props.onError?.(err);\n },\n (data) => {\n props.onPaymentComplete?.(data as PaymentResult);\n },\n (data) => {\n props.onPaymentFailed?.(data as PaymentResult);\n },\n (data) => {\n props.onPaymentPending?.(data as PaymentResult);\n },\n (method) => {\n setSelectedPaymentMethod(method);\n if (window.PayConductor)\n window.PayConductor.selectedPaymentMethod = method;\n props.onPaymentMethodSelected?.(method);\n }\n );\n };\n window.addEventListener(\"message\", eventHandler);\n const trySendConfig = () => {\n const el = getIframe();\n if (!el) return false;\n try {\n const readyState =\n el.contentDocument?.readyState ??\n el.contentWindow?.document?.readyState;\n if (readyState === \"complete\") {\n sendConfigToIframe();\n return true;\n }\n } catch {}\n return false;\n };\n const pollForIframe = () => {\n if (trySendConfig()) return;\n const el = getIframe();\n if (el) {\n el.addEventListener(\"load\", () => sendConfigToIframe(), {\n once: true,\n });\n return;\n }\n setTimeout(pollForIframe, 50);\n };\n pollForIframe();\n }, []);\n\n return (\n <div\n className=\"payconductor\"\n id=\"payconductor\"\n style={{\n display: \"contents\",\n }}\n >\n {props.children}\n </div>\n );\n}\n\nexport default PayConductor;\n","\"use client\";\nimport * as React from \"react\";\nimport { useState, useRef, useEffect } from \"react\";\n\nexport interface PayConductorCheckoutElementProps {\n height?: string;\n}\n\nimport { IFRAME_DEFAULT_HEIGHT_VALUE } from \"./constants\";\n\nfunction PayConductorCheckoutElement(props: PayConductorCheckoutElementProps) {\n const iframeRef = useRef<any>(null);\n const [iframeUrl, setIframeUrl] = useState(() => \"\");\n\n const [isLoaded, setIsLoaded] = useState(() => false);\n\n useEffect(() => {\n const init = (ctx: typeof window.PayConductor) => {\n if (!ctx?.frame) return;\n setIframeUrl(ctx.frame.iframeUrl || \"\");\n setIsLoaded(true);\n if (window.PayConductor && window.PayConductor.frame)\n window.PayConductor.frame.isReady = true;\n console.log(\"init\", {\n PayConductor: window.PayConductor,\n });\n };\n const ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n if (ctx) {\n init(ctx);\n } else {\n const handler = (e: Event) => {\n init((e as CustomEvent).detail);\n window.removeEventListener(\"payconductor:registered\", handler);\n };\n window.addEventListener(\"payconductor:registered\", handler);\n }\n }, []);\n\n return (\n <div\n className=\"payconductor-element\"\n style={{\n width: \"100%\",\n }}\n >\n {isLoaded && iframeUrl ? (\n <iframe\n allow=\"payment\"\n title=\"PayConductor\"\n ref={iframeRef}\n src={iframeUrl}\n style={{\n width: \"100%\",\n height: props.height || IFRAME_DEFAULT_HEIGHT_VALUE,\n border: \"none\",\n }}\n />\n ) : null}\n </div>\n );\n}\n\nexport default PayConductorCheckoutElement;\n","import type { PayConductorConfig } from \"../iframe/types\";\nimport type { PayConductorFrame } from \"../types\";\ntype UsePayConductorReturn = PayConductorFrame & Partial<PayConductorConfig>;\nexport function usePayConductor(): UsePayConductorReturn {\n const ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n const config = ctx?.config ? {\n publicKey: ctx.config.publicKey,\n orderId: ctx.config.orderId,\n theme: ctx.config.theme,\n locale: ctx.config.locale\n } : {};\n const frame = ctx?.frame ? {\n iframe: ctx.frame.iframe,\n isReady: ctx.frame.isReady,\n error: ctx.frame.error\n } : {\n iframe: null,\n isReady: false,\n error: null\n };\n return {\n ...config,\n ...frame\n };\n}","import { POST_MESSAGES } from \"../constants\";\nimport type { BillingDetails, PayConductorConfig, PaymentMethod, PaymentResult } from \"../iframe/types\";\nimport { confirmPayment, createPendingRequestsMap, sendInit, sendMessageToIframe } from \"../internal\";\nexport type SubmitResult = {\n error?: {\n message: string;\n code?: string;\n type?: \"validation_error\" | \"payment_error\";\n };\n paymentMethod?: PaymentMethod;\n};\nexport type ConfirmPaymentOptions = {\n orderId: string;\n returnUrl?: string;\n};\nexport type UpdateOptions = {\n billingDetails?: Partial<BillingDetails>;\n address?: Partial<BillingDetails[\"address\"]>;\n};\nexport interface UsePayconductorElementReturn {\n init: (config: PayConductorConfig) => Promise<void>;\n confirmPayment: (options: ConfirmPaymentOptions) => Promise<PaymentResult>;\n validate: (data: unknown) => Promise<boolean>;\n reset: () => Promise<void>;\n getSelectedPaymentMethod: () => PaymentMethod | null;\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => void;\n updateorderId: (orderId: string) => void;\n update: (options: UpdateOptions) => void;\n submit: () => Promise<SubmitResult>;\n}\nfunction getIframeFromContext(ctx: typeof window.PayConductor): HTMLIFrameElement | null {\n if (ctx?.frame?.iframe) {\n const iframeRef = ctx.frame.iframe;\n if (iframeRef instanceof HTMLIFrameElement) return iframeRef;\n if (iframeRef && typeof iframeRef === \"object\") {\n if (\"current\" in iframeRef) {\n const el = (iframeRef as any).current;\n if (el instanceof HTMLIFrameElement) return el;\n }\n if (\"value\" in iframeRef) {\n const el = (iframeRef as any).value;\n if (el instanceof HTMLIFrameElement) return el;\n }\n }\n }\n return document.querySelector(\".payconductor-element iframe\") as HTMLIFrameElement ?? null;\n}\nexport function usePayconductorElement(): UsePayconductorElementReturn {\n const getCtx = () => typeof window !== \"undefined\" ? window.PayConductor : null;\n const sendToIframe = (type: string, data?: unknown) => {\n const ctx = getCtx();\n if (!ctx) return;\n const iframe = getIframeFromContext(ctx);\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type,\n data\n }, \"*\");\n }\n };\n return {\n init: async (config: PayConductorConfig): Promise<void> => {\n const iframe = getIframeFromContext(getCtx());\n const pendingMap = createPendingRequestsMap();\n return sendInit(iframe || undefined, pendingMap, config);\n },\n confirmPayment: async (options: ConfirmPaymentOptions): Promise<PaymentResult> => {\n const iframe = getIframeFromContext(getCtx());\n const pendingMap = createPendingRequestsMap();\n if (!options.orderId) {\n throw new Error(\"Order ID is required\");\n }\n return confirmPayment(iframe || undefined, pendingMap, options);\n },\n validate: (data: unknown) => {\n const ctx = getCtx();\n if (!ctx) return Promise.resolve(false);\n return ctx.api.validate(data);\n },\n reset: () => {\n const ctx = getCtx();\n if (!ctx) return Promise.resolve();\n return ctx.api.reset();\n },\n getSelectedPaymentMethod: (): PaymentMethod | null => {\n return getCtx()?.selectedPaymentMethod ?? null;\n },\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => {\n const currentConfig = getCtx()?.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n orderId: currentConfig?.orderId,\n theme: config.theme ?? currentConfig?.theme,\n locale: config.locale ?? currentConfig?.locale,\n paymentMethods: config.paymentMethods ?? currentConfig?.paymentMethods\n });\n },\n updateorderId: (orderId: string) => {\n const currentConfig = getCtx()?.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n orderId: orderId,\n theme: currentConfig?.theme,\n locale: currentConfig?.locale,\n paymentMethods: currentConfig?.paymentMethods\n });\n },\n update: (options: UpdateOptions) => {\n sendToIframe(POST_MESSAGES.UPDATE, options);\n },\n submit: async (): Promise<SubmitResult> => {\n const iframe = getIframeFromContext(getCtx());\n const pendingMap = createPendingRequestsMap();\n try {\n await sendMessageToIframe(iframe || undefined, pendingMap, POST_MESSAGES.CONFIRM_PAYMENT, {});\n return {\n paymentMethod: undefined\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Payment failed\";\n return {\n error: {\n message,\n code: \"payment_error\",\n type: \"payment_error\"\n }\n };\n }\n }\n };\n}"],"names":["IFRAME_BASE_URL_PROD","IFRAME_BASE_URL_DEV","REQUEST_TIMEOUT_MS","IFRAME_DEFAULT_HEIGHT","OutgoingMessage","IncomingMessage","isDev","IFRAME_BASE_URL","ALLOWED_ORIGINS","IFRAME_DEFAULT_HEIGHT_VALUE","REQUEST_TIMEOUT","POST_MESSAGES","ERROR_CODES","buildIframeUrl","config","params","generateRequestId","isValidOrigin","origin","allowedOrigins","allowed","createPendingRequestsMap","sendMessageToIframe","iframe","pendingMap","type","data","resolve","reject","requestId","confirmPayment","options","validatePayment","resetPayment","sendConfig","sendInit","handleMessageEvent","event","setIsReady","setError","onReady","onError","onPaymentComplete","onPaymentFailed","onPaymentPending","onPaymentMethodSelected","payload","error","PayConductor","props","isLoaded","setIsLoaded","useState","isReady","iframeUrl","setIframeUrl","selectedPaymentMethod","setSelectedPaymentMethod","useEffect","log","args","configSent","getIframe","ref","_b","_a","obj","frame","_","api","sendConfigToIframe","eventHandler","val","err","method","trySendConfig","el","_c","pollForIframe","jsx","PayConductorCheckoutElement","iframeRef","useRef","init","ctx","handler","e","usePayConductor","getIframeFromContext","usePayconductorElement","getCtx","sendToIframe","currentConfig","orderId"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/payconductor/iframe/constants.ts","../src/payconductor/iframe/types.ts","../src/payconductor/constants.ts","../src/payconductor/utils.ts","../src/payconductor/internal.ts","../src/payconductor/payconductor.tsx","../src/payconductor/payconductor-element.tsx","../src/payconductor/hooks/use-payconductor.ts","../src/payconductor/hooks/use-element.ts"],"sourcesContent":["// PayConductor Shared Constants\n// Served statically at iframe.payconductor.ai/constants.ts\n// Used by the iFrame (imported directly) and the SDK Web (synced with: bun sync)\n\nexport const APP_BASE_URL_PROD = \"https://app.payconductor.ai\";\nexport const API_BASE_URL_PROD = \"https://app.payconductor.ai/api/v1\";\nexport const IFRAME_BASE_URL_PROD = \"https://iframe.payconductor.ai/v1\";\nexport const IFRAME_BASE_URL_DEV = \"http://localhost:5175/v1\";\nexport const APP_BASE_URL_DEV = \"http://localhost:3000\";\nexport const DEFAULT_LOCALE = \"pt-BR\";\nexport const REQUEST_TIMEOUT_MS = 30000;\nexport const IFRAME_DEFAULT_HEIGHT = \"600px\"","// PayConductor Shared Types\n// Served statically at iframe.payconductor.ai/types.ts\n// Used by the iFrame (imported directly) and the SDK Web (synced with: bun sync)\n\nexport enum PaymentMethod {\n Pix = \"Pix\",\n CreditCard = \"CreditCard\",\n DebitCard = \"DebitCard\",\n BankSlip = \"BankSlip\",\n Crypto = \"Crypto\",\n ApplePay = \"ApplePay\",\n NuPay = \"NuPay\",\n PicPay = \"PicPay\",\n AmazonPay = \"AmazonPay\",\n SepaDebit = \"SepaDebit\",\n GooglePay = \"GooglePay\",\n}\nexport enum PaymentMethodLayout {\n Grid = \"grid\",\n Vertical = \"vertical\",\n Horizontal = \"horizontal\",\n}\nexport enum PaymentStatus {\n Succeeded = \"succeeded\",\n Pending = \"pending\",\n Failed = \"failed\",\n}\nexport enum DeviceType {\n Android = \"android\",\n IOS = \"ios\",\n Web = \"web\",\n}\nexport enum InputStyleKey {\n Padding = \"padding\",\n Radius = \"radius\",\n Color = \"color\",\n Background = \"background\",\n Shadow = \"shadow\",\n}\nexport enum OutgoingMessage {\n Init = \"Init\",\n Config = \"Config\",\n Update = \"Update\",\n ConfirmPayment = \"ConfirmPayment\",\n Validate = \"Validate\",\n Reset = \"Reset\",\n}\nexport enum IncomingMessage {\n Ready = \"Ready\",\n Error = \"Error\",\n PaymentComplete = \"PaymentComplete\",\n PaymentFailed = \"PaymentFailed\",\n PaymentPending = \"PaymentPending\",\n ValidationError = \"ValidationError\",\n PaymentMethodSelected = \"PaymentMethodSelected\",\n Resize = \"Resize\",\n}\nexport enum ErrorCode {\n InvalidClient = \"InvalidClient\",\n InvalidToken = \"InvalidToken\",\n NetworkError = \"NetworkError\",\n IframeNotReady = \"IframeNotReady\",\n PaymentDeclined = \"PaymentDeclined\",\n ValidationError = \"ValidationError\",\n Timeout = \"Timeout\",\n}\nexport type InputStyleConfig = {\n padding?: string;\n radius?: string;\n color?: string;\n background?: string;\n shadow?: string;\n};\nexport type PaymentMethodsConfig = {\n layout?: PaymentMethodLayout;\n gap?: string;\n inputStyle?: InputStyleConfig;\n};\nexport type PaymentMethodConfig = {\n method: PaymentMethod;\n discount?: number;\n showBrands?: boolean;\n installments?: {\n count: number;\n amount: number;\n }[];\n};\nexport type PaymentMethodsResponse = {\n methods: PaymentMethod[];\n config: PaymentMethodsConfig;\n};\nexport type PayConductorTheme = {\n primaryColor?: string;\n secondaryColor?: string;\n backgroundColor?: string;\n surfaceColor?: string;\n textColor?: string;\n textSecondaryColor?: string;\n errorColor?: string;\n successColor?: string;\n warningColor?: string;\n borderColor?: string;\n disabledColor?: string;\n fontFamily?: string;\n fontSize?: {\n xs?: string;\n sm?: string;\n md?: string;\n lg?: string;\n xl?: string;\n };\n fontWeight?: {\n normal?: number;\n medium?: number;\n bold?: number;\n };\n lineHeight?: string;\n spacing?: {\n xs?: string;\n sm?: string;\n md?: string;\n lg?: string;\n xl?: string;\n };\n borderRadius?: string;\n borderWidth?: string;\n boxShadow?: string;\n boxShadowHover?: string;\n inputBackground?: string;\n inputBorderColor?: string;\n inputBorderRadius?: string;\n inputHeight?: string;\n inputPadding?: string;\n buttonHeight?: string;\n buttonPadding?: string;\n buttonBorderRadius?: string;\n transitionDuration?: string;\n transitionTimingFunction?: string;\n};\nexport const defaultTheme: PayConductorTheme = {\n primaryColor: \"#0066ff\",\n secondaryColor: \"#5a6b7c\",\n backgroundColor: \"transparent\",\n surfaceColor: \"#f8fafc\",\n textColor: \"#0f172a\",\n textSecondaryColor: \"#64748b\",\n errorColor: \"#ef4444\",\n successColor: \"#22c55e\",\n warningColor: \"#f59e0b\",\n borderColor: \"#e2e8f0\",\n disabledColor: \"#cbd5e1\",\n fontFamily: '\"Poppins\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: {\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n md: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\"\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n bold: 600\n },\n lineHeight: \"1.5\",\n spacing: {\n xs: \"4px\",\n sm: \"8px\",\n md: \"16px\",\n lg: \"24px\",\n xl: \"32px\"\n },\n borderRadius: \"8px\",\n borderWidth: \"1px\",\n boxShadow: \"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)\",\n boxShadowHover: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n inputBackground: \"#ffffff\",\n inputBorderColor: \"#cbd5e1\",\n inputBorderRadius: \"8px\",\n inputHeight: \"44px\",\n inputPadding: \"12px 16px\",\n buttonHeight: \"48px\",\n buttonPadding: \"16px 24px\",\n buttonBorderRadius: \"8px\",\n transitionDuration: \"0.2s\",\n transitionTimingFunction: \"ease\"\n};\nexport type PayConductorConfig = {\n publicKey: string;\n orderId?: string;\n theme?: PayConductorTheme;\n locale?: string;\n paymentMethods?: PaymentMethod[] | \"all\";\n defaultPaymentMethod?: PaymentMethod;\n paymentMethodsConfig?: PaymentMethodConfig[];\n methodsDirection?: \"vertical\" | \"horizontal\";\n showPaymentButtons?: boolean;\n height?: string;\n /** Required when NuPay is an available payment method */\n nuPayConfig?: NuPayData;\n};\nexport type BillingDetails = {\n name: string;\n email?: string;\n phone?: string;\n address?: {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n };\n};\nexport type CardData = {\n number: string;\n expMonth: string;\n expYear: string;\n cvc: string;\n};\nexport type CreatePaymentMethodOptions = {\n billingDetails: BillingDetails;\n card?: CardData;\n};\nexport type PaymentMethodResult = {\n id: string;\n type: PaymentMethod;\n card?: {\n brand: string;\n last4: string;\n expMonth: number;\n expYear: number;\n };\n billingDetails?: BillingDetails;\n};\nexport type PaymentResult = {\n orderId: string;\n status: PaymentStatus;\n amount: number;\n currency: string;\n message?: string;\n};\nexport interface MessagePayload {\n type: OutgoingMessage | IncomingMessage;\n data?: unknown;\n requestId?: string;\n error?: {\n code: string;\n message: string;\n field?: string;\n };\n}\nexport type CardTokenData = {\n token: string;\n firstSixCardNumber?: string;\n};\nexport type CardFullData = {\n number: string;\n holderName: string;\n cvv: string;\n expiration: {\n month: number;\n year: number;\n };\n};\nexport type CardPaymentData = CardTokenData | CardFullData;\nexport type PixPaymentData = {\n paymentMethod: PaymentMethod.Pix;\n expirationInSeconds?: number;\n};\nexport type CreditCardPaymentData = {\n paymentMethod: PaymentMethod.CreditCard;\n card: CardPaymentData;\n installments: number;\n softDescriptor?: string;\n};\nexport type BankSlipPaymentData = {\n paymentMethod: PaymentMethod.BankSlip;\n expirationInDays?: number;\n};\nexport type NuPayData = {\n cancelUrl: string;\n merchantName: string;\n returnUrl: string;\n storeName?: string;\n};\nexport type NuPayPaymentData = {\n paymentMethod: PaymentMethod.NuPay;\n nuPay: NuPayData;\n};\nexport type PicPayPaymentData = {\n paymentMethod: PaymentMethod.PicPay;\n};\nexport type PaymentConfirmData = PixPaymentData | CreditCardPaymentData | BankSlipPaymentData | NuPayPaymentData | PicPayPaymentData","import { IFRAME_BASE_URL_DEV, IFRAME_BASE_URL_PROD, IFRAME_DEFAULT_HEIGHT, REQUEST_TIMEOUT_MS } from \"./iframe/constants\";\nimport { IncomingMessage, OutgoingMessage } from \"./iframe/types\";\nconst isDev = typeof window !== \"undefined\" && (window.location.hostname === \"localhost\" || window.location.hostname === \"127.0.0.1\") && !window.location.search.includes(\"production\");\nexport const IFRAME_BASE_URL = isDev ? IFRAME_BASE_URL_DEV : IFRAME_BASE_URL_PROD;\nexport const ALLOWED_ORIGINS = [IFRAME_BASE_URL_DEV, IFRAME_BASE_URL_PROD];\nexport const IFRAME_DEFAULT_HEIGHT_VALUE = IFRAME_DEFAULT_HEIGHT;\nexport const REQUEST_TIMEOUT = REQUEST_TIMEOUT_MS;\nexport const POST_MESSAGES = {\n INIT: OutgoingMessage.Init,\n CONFIG: OutgoingMessage.Config,\n UPDATE: OutgoingMessage.Update,\n CONFIRM_PAYMENT: OutgoingMessage.ConfirmPayment,\n VALIDATE: OutgoingMessage.Validate,\n RESET: OutgoingMessage.Reset,\n READY: IncomingMessage.Ready,\n ERROR: IncomingMessage.Error,\n PAYMENT_COMPLETE: IncomingMessage.PaymentComplete,\n PAYMENT_FAILED: IncomingMessage.PaymentFailed,\n PAYMENT_PENDING: IncomingMessage.PaymentPending,\n VALIDATION_ERROR: IncomingMessage.ValidationError,\n PAYMENT_METHOD_SELECTED: IncomingMessage.PaymentMethodSelected,\n RESIZE: IncomingMessage.Resize\n} as const;\nexport const ERROR_CODES = {\n INVALID_CLIENT: \"InvalidClient\",\n INVALID_TOKEN: \"InvalidToken\",\n NETWORK_ERROR: \"NetworkError\",\n IFRAME_NOT_READY: \"IframeNotReady\",\n PAYMENT_DECLINED: \"PaymentDeclined\",\n VALIDATION_ERROR: \"ValidationError\",\n TIMEOUT: \"Timeout\"\n} as const","import { IFRAME_BASE_URL } from \"./constants\";\nexport const SKELETON_STYLE_ID = \"payconductor-skeleton-style\";\nexport const SKELETON_CSS = `\n\t@keyframes payconductor-shimmer {\n\t 0% { background-position: -200% 0; }\n\t 100% { background-position: 200% 0; }\n\t}\n\t.payconductor-skeleton {\n\t background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);\n\t background-size: 200% 100%;\n\t animation: payconductor-shimmer 1.5s infinite linear;\n\t border-radius: 4px;\n\t width: 100%;\n\t}\n`;\nimport type { PayConductorConfig } from \"./iframe/types\";\nexport function buildIframeUrl(config: PayConductorConfig): string {\n const params = new URLSearchParams({\n publicKey: config.publicKey\n });\n return `${IFRAME_BASE_URL}?${params.toString()}`;\n}\nexport function generateRequestId(): string {\n return crypto.randomUUID();\n}\nexport function isValidOrigin(origin: string, allowedOrigins: string[]): boolean {\n return allowedOrigins.some(allowed => {\n try {\n return new URL(allowed).origin === origin;\n } catch {\n return allowed === origin;\n }\n });\n}","import { ALLOWED_ORIGINS, POST_MESSAGES, REQUEST_TIMEOUT } from \"./constants\";\nimport { IncomingMessage, OutgoingMessage, PayConductorConfig, PaymentMethod, PaymentResult } from \"./iframe/types\";\nimport type { ConfirmPaymentOptions, PendingRequest } from \"./types\";\nimport { generateRequestId, isValidOrigin } from \"./utils\";\nexport function createPendingRequestsMap(): Map<string, PendingRequest> {\n return new Map<string, PendingRequest>();\n}\nexport function sendMessageToIframe(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, type: OutgoingMessage | IncomingMessage, data?: unknown): Promise<unknown> {\n return new Promise((resolve, reject) => {\n if (!iframe || !(\"contentWindow\" in iframe)) {\n reject(new Error(\"Iframe not defined\"));\n return;\n }\n if (!iframe?.contentWindow) {\n reject(new Error(\"Iframe not ready\"));\n return;\n }\n if (!pendingMap) {\n reject(new Error(\"Pending requests not initialized\"));\n return;\n }\n const requestId = generateRequestId();\n pendingMap.set(requestId, {\n resolve,\n reject\n });\n iframe.contentWindow.postMessage({\n type,\n data,\n requestId\n }, \"*\");\n setTimeout(() => {\n if (pendingMap?.has(requestId)) {\n pendingMap.delete(requestId);\n reject(new Error(\"Request timeout\"));\n }\n }, REQUEST_TIMEOUT);\n });\n}\nexport function confirmPayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, options: ConfirmPaymentOptions): Promise<PaymentResult> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.CONFIRM_PAYMENT, {\n orderId: options.orderId\n }) as Promise<PaymentResult>;\n}\nexport function validatePayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, data: unknown): Promise<boolean> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.VALIDATE, data) as Promise<boolean>;\n}\nexport function resetPayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.RESET) as Promise<void>;\n}\nexport function sendConfig(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\" | \"defaultPaymentMethod\" | \"showPaymentButtons\" | \"nuPayConfig\">): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.CONFIG, config) as Promise<void>;\n}\nexport function sendInit(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: PayConductorConfig): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.INIT, config) as Promise<void>;\n}\ntype MessagePayload = {\n requestId?: string;\n type?: string;\n data?: PaymentResult | {\n paymentMethod: PaymentMethod;\n };\n error?: {\n message?: string;\n };\n};\nexport function handleMessageEvent(event: MessageEvent, pendingMap: Map<string, PendingRequest> | null, setError: (value: string | null) => void, onReady?: () => void, onError?: (error: Error) => void, onPaymentComplete?: (data: PaymentResult) => void, onPaymentFailed?: (data: PaymentResult) => void, onPaymentPending?: (data: PaymentResult) => void, onPaymentMethodSelected?: (method: PaymentMethod) => void) {\n const payload: MessagePayload = event.data;\n const {\n requestId,\n type,\n data,\n error\n } = payload;\n if (type === POST_MESSAGES.READY) {\n onReady?.();\n if (requestId && pendingMap?.has(requestId)) {\n const {\n resolve\n } = pendingMap.get(requestId)!;\n pendingMap.delete(requestId);\n resolve(data);\n }\n return;\n }\n if (!isValidOrigin(event.origin, ALLOWED_ORIGINS)) {\n return;\n }\n if (requestId && pendingMap && pendingMap.has(requestId)) {\n const {\n resolve,\n reject\n } = pendingMap.get(requestId)!;\n pendingMap.delete(requestId);\n if (error) {\n reject(new Error(String(error.message)));\n } else {\n resolve(data);\n }\n return;\n }\n if (type === POST_MESSAGES.ERROR) {\n setError(error?.message || \"Unknown error\");\n onError?.(new Error(String(error?.message)));\n return;\n }\n if (type === POST_MESSAGES.PAYMENT_COMPLETE) {\n if (data && typeof data === \"object\" && \"status\" in data) {\n onPaymentComplete?.(data);\n }\n return;\n }\n if (type === POST_MESSAGES.PAYMENT_FAILED) {\n if (data && typeof data === \"object\" && \"status\" in data) {\n onPaymentFailed?.(data);\n }\n return;\n }\n if (type === POST_MESSAGES.PAYMENT_PENDING) {\n if (data && typeof data === \"object\" && \"status\" in data) {\n onPaymentPending?.(data);\n }\n return;\n }\n if (type === POST_MESSAGES.PAYMENT_METHOD_SELECTED) {\n if (data && typeof data === \"object\" && \"paymentMethod\" in data) {\n onPaymentMethodSelected?.(data.paymentMethod);\n }\n return;\n }\n if (type === POST_MESSAGES.RESIZE) {\n return;\n }\n}","\"use client\";\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\n\nexport interface PayConductorEmbedProps\n extends Omit<PayConductorConfig, \"orderId\"> {\n children?: any;\n showActionButtons?: boolean;\n debug?: boolean;\n onReady?: () => void;\n onError?: (error: Error) => void;\n onPaymentComplete?: (result: PaymentResult) => void;\n onPaymentFailed?: (result: PaymentResult) => void;\n onPaymentPending?: (result: PaymentResult) => void;\n onPaymentMethodSelected?: (method: PaymentMethod) => void;\n}\n\nimport type {\n PayConductorConfig,\n PaymentMethod,\n PaymentResult,\n} from \"./iframe/types\";\nimport {\n confirmPayment,\n createPendingRequestsMap,\n handleMessageEvent,\n resetPayment,\n sendConfig,\n validatePayment,\n} from \"./internal\";\nimport type {\n PayConductorApi,\n PayConductorFrame,\n PayConductorState,\n PendingRequest,\n} from \"./types\";\nimport { POST_MESSAGES } from \"./constants\";\nimport { buildIframeUrl } from \"./utils\";\n\nfunction PayConductor(props: PayConductorEmbedProps) {\n const [isLoaded, setIsLoaded] = useState<PayConductorState[\"isLoaded\"]>(\n () => false\n );\n\n const [error, setError] = useState<PayConductorState[\"error\"]>(() => null);\n\n const [iframeUrl, setIframeUrl] = useState<PayConductorState[\"iframeUrl\"]>(\n () => \"\"\n );\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<\n PayConductorState[\"selectedPaymentMethod\"]\n >(() => null);\n\n useEffect(() => {\n const log = (...args: any[]) => {\n if (props.debug) console.log(\"[PayConductor]\", ...args);\n };\n const iframeUrl = buildIframeUrl({\n publicKey: props.publicKey,\n });\n setIframeUrl(iframeUrl);\n setIsLoaded(true);\n const pendingMap: Map<string, PendingRequest> = createPendingRequestsMap();\n let configSent = false;\n log(\"init\", props.publicKey);\n log(\"iframeUrl\", iframeUrl);\n const getIframe = (): HTMLIFrameElement | undefined => {\n const ref = window.PayConductor?.frame?.iframe;\n if (ref) {\n if (ref instanceof HTMLIFrameElement) return ref;\n if (typeof ref === \"object\" && ref !== null) {\n const obj = ref as Record<string, unknown>;\n if (\"current\" in obj && obj.current instanceof HTMLIFrameElement)\n return obj.current;\n if (\"value\" in obj && obj.value instanceof HTMLIFrameElement)\n return obj.value;\n }\n return ref as HTMLIFrameElement;\n }\n return (\n (document.querySelector(\n \".payconductor-element iframe\"\n ) as HTMLIFrameElement) ?? undefined\n );\n };\n const frame: PayConductorFrame = {\n get iframe(): HTMLIFrameElement | null {\n return (\n (document.querySelector(\n \".payconductor-element iframe\"\n ) as HTMLIFrameElement) ?? null\n );\n },\n set iframe(_: HTMLIFrameElement | Element | unknown | null) {},\n iframeUrl,\n error: null,\n };\n const config: PayConductorConfig = {\n publicKey: props.publicKey,\n theme: props.theme,\n locale: props.locale,\n paymentMethods: props.paymentMethods,\n defaultPaymentMethod: props.defaultPaymentMethod,\n };\n const api: PayConductorApi = {\n confirmPayment: (options: { orderId: string }) => {\n log(\"→ CONFIRM_PAYMENT\", {\n orderId: options.orderId,\n });\n const iframe = getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage(\n {\n type: POST_MESSAGES.CONFIG,\n data: {\n publicKey: props.publicKey,\n orderId: options.orderId,\n theme: props.theme,\n locale: props.locale,\n paymentMethods: props.paymentMethods,\n defaultPaymentMethod: props.defaultPaymentMethod,\n showPaymentButtons: props.showPaymentButtons,\n nuPayConfig: props.nuPayConfig,\n },\n },\n \"*\"\n );\n }\n config.orderId = options.orderId;\n if (window.PayConductor?.config) {\n window.PayConductor.config.orderId = options.orderId;\n }\n return confirmPayment(iframe, pendingMap, options);\n },\n validate: (data: unknown) => {\n log(\"→ VALIDATE\", data);\n return validatePayment(getIframe(), pendingMap, data);\n },\n reset: () => {\n log(\"→ RESET\");\n return resetPayment(getIframe(), pendingMap);\n },\n getSelectedPaymentMethod: () => selectedPaymentMethod,\n };\n window.PayConductor = {\n frame,\n config,\n api,\n selectedPaymentMethod: selectedPaymentMethod,\n };\n log(\"registered\");\n window.dispatchEvent(\n new CustomEvent(\"payconductor:registered\", {\n detail: window.PayConductor,\n })\n );\n const sendConfigToIframe = async () => {\n if (!configSent) {\n const iframe = getIframe();\n if (!iframe) {\n log(\"→ CONFIG skipped: iframe not found\");\n return;\n }\n configSent = true;\n log(\"→ CONFIG\", {\n theme: props.theme,\n locale: props.locale,\n paymentMethods: props.paymentMethods,\n defaultPaymentMethod: props.defaultPaymentMethod,\n showPaymentButtons: props.showPaymentButtons,\n });\n sendConfig(iframe, pendingMap, {\n theme: props.theme,\n locale: props.locale,\n paymentMethods: props.paymentMethods,\n defaultPaymentMethod: props.defaultPaymentMethod,\n showPaymentButtons: props.showPaymentButtons,\n nuPayConfig: props.nuPayConfig,\n });\n }\n };\n const eventHandler = (event: MessageEvent) => {\n if (event.data?.type) {\n log(\"←\", event.data.type, event.data.data ?? \"\");\n }\n handleMessageEvent(\n event,\n pendingMap,\n (val) => {\n setError(val);\n frame.error = val;\n if (window.PayConductor?.frame) {\n window.PayConductor.frame.error = val;\n }\n },\n () => {\n props.onReady?.();\n sendConfigToIframe();\n },\n (err) => {\n props.onError?.(err);\n },\n (data) => {\n props.onPaymentComplete?.(data as PaymentResult);\n },\n (data) => {\n props.onPaymentFailed?.(data as PaymentResult);\n },\n (data) => {\n props.onPaymentPending?.(data as PaymentResult);\n },\n (method) => {\n setSelectedPaymentMethod(method);\n if (window.PayConductor) {\n window.PayConductor.selectedPaymentMethod = method;\n }\n props.onPaymentMethodSelected?.(method);\n }\n );\n };\n window.addEventListener(\"message\", eventHandler);\n const trySendConfig = () => {\n const el = getIframe();\n if (!el) return false;\n try {\n const readyState =\n el.contentDocument?.readyState ??\n el.contentWindow?.document?.readyState;\n if (readyState === \"complete\") {\n sendConfigToIframe();\n return true;\n }\n } catch {}\n return false;\n };\n const pollForIframe = () => {\n if (trySendConfig()) return;\n const el = getIframe();\n if (el) {\n el.addEventListener(\"load\", () => sendConfigToIframe(), {\n once: true,\n });\n return;\n }\n setTimeout(pollForIframe, 50);\n };\n pollForIframe();\n }, []);\n\n return (\n <div\n className=\"payconductor\"\n id=\"payconductor\"\n style={{\n display: \"contents\",\n }}\n >\n {props.children}\n </div>\n );\n}\n\nexport default PayConductor;\n","\"use client\";\nimport * as React from \"react\";\nimport { useState, useRef, useEffect } from \"react\";\n\nexport interface PayConductorCheckoutElementProps {\n height?: string;\n}\n\nimport { IFRAME_DEFAULT_HEIGHT_VALUE, POST_MESSAGES } from \"./constants\";\nimport { PayConductorContextValue } from \"./types\";\nimport { SKELETON_CSS, SKELETON_STYLE_ID } from \"./utils\";\n\nfunction PayConductorCheckoutElement(props: PayConductorCheckoutElementProps) {\n const iframeRef = useRef<any>(null);\n const [iframeUrl, setIframeUrl] = useState(() => \"\");\n\n const [isLoaded, setIsLoaded] = useState(() => false);\n\n const [iframeHeight, setIframeHeight] = useState(() => \"\");\n\n useEffect(() => {\n if (\n typeof document !== \"undefined\" &&\n !document.getElementById(SKELETON_STYLE_ID)\n ) {\n const styleEl = document.createElement(\"style\");\n styleEl.id = SKELETON_STYLE_ID;\n styleEl.textContent = SKELETON_CSS;\n document.head.appendChild(styleEl);\n }\n const init = (ctx: PayConductorContextValue) => {\n if (!ctx?.frame) return;\n setIframeUrl(ctx.frame.iframeUrl || \"\");\n setIsLoaded(true);\n console.log(\"init\", {\n PayConductor: window.PayConductor,\n });\n };\n const ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n if (ctx) {\n init(ctx);\n } else {\n const handler = (e: Event) => {\n init((e as CustomEvent).detail as PayConductorContextValue);\n window.removeEventListener(\"payconductor:registered\", handler);\n };\n window.addEventListener(\"payconductor:registered\", handler);\n }\n let heightSent = false;\n const handleMessages = (event: MessageEvent) => {\n if (\n event.data?.type === POST_MESSAGES.RESIZE &&\n event.data?.data?.height\n ) {\n setIframeHeight(event.data.data.height + \"px\");\n }\n if (\n event.data?.type === POST_MESSAGES.READY &&\n props.height &&\n !heightSent\n ) {\n heightSent = true;\n const iframe = document.querySelector(\n \".payconductor-element iframe\"\n ) as HTMLIFrameElement;\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage(\n {\n type: POST_MESSAGES.CONFIG,\n data: {\n height: props.height,\n },\n requestId: \"element-height\",\n },\n \"*\"\n );\n }\n }\n };\n window.addEventListener(\"message\", handleMessages);\n return () => window.removeEventListener(\"message\", handleMessages);\n }, []);\n\n return (\n <div\n className=\"payconductor-element\"\n style={{\n width: \"100%\",\n }}\n >\n {!isLoaded ? (\n <div\n className=\"payconductor-skeleton\"\n style={{\n height: props.height || IFRAME_DEFAULT_HEIGHT_VALUE,\n }}\n />\n ) : null}\n {isLoaded && iframeUrl ? (\n <iframe\n allow=\"payment\"\n title=\"PayConductor\"\n ref={iframeRef}\n src={iframeUrl}\n style={{\n width: \"100%\",\n height: props.height || iframeHeight || IFRAME_DEFAULT_HEIGHT_VALUE,\n border: \"none\",\n }}\n />\n ) : null}\n </div>\n );\n}\n\nexport default PayConductorCheckoutElement;\n","import type { PayConductorConfig } from \"../iframe/types\";\nimport type { PayConductorFrame } from \"../types\";\ntype UsePayConductorReturn = PayConductorFrame & Partial<PayConductorConfig>;\nexport function usePayConductor(): UsePayConductorReturn {\n const ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n const config = ctx?.config ? {\n publicKey: ctx.config.publicKey,\n orderId: ctx.config.orderId,\n theme: ctx.config.theme,\n locale: ctx.config.locale\n } : {};\n const frame = ctx?.frame ? {\n iframe: ctx.frame.iframe,\n error: ctx.frame.error\n } : {\n iframe: null,\n error: null\n };\n return {\n ...config,\n ...frame\n };\n}","import { POST_MESSAGES } from \"../constants\";\nimport type { BillingDetails, PayConductorConfig, PaymentMethod, PaymentResult } from \"../iframe/types\";\nimport { createPendingRequestsMap, sendInit, sendMessageToIframe } from \"../internal\";\nimport { PayConductorContextValue } from \"../types\";\nexport type SubmitResult = {\n error?: {\n message: string;\n code?: string;\n type?: \"validation_error\" | \"payment_error\";\n };\n paymentMethod?: PaymentMethod;\n};\nexport type ConfirmPaymentOptions = {\n orderId: string;\n returnUrl?: string;\n};\nexport type UpdateOptions = {\n billingDetails?: Partial<BillingDetails>;\n address?: Partial<BillingDetails[\"address\"]>;\n};\nexport interface UsePayconductorElementReturn {\n init: (config: PayConductorConfig) => Promise<void>;\n confirmPayment: (options: ConfirmPaymentOptions) => Promise<PaymentResult>;\n validate: (data: unknown) => Promise<boolean>;\n reset: () => Promise<void>;\n getSelectedPaymentMethod: () => PaymentMethod | null;\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => void;\n updateOrderId: (orderId: string) => void;\n update: (options: UpdateOptions) => void;\n submit: () => Promise<SubmitResult>;\n}\nfunction getIframeFromContext(ctx: PayConductorContextValue | null): HTMLIFrameElement | null {\n if (ctx?.frame?.iframe) {\n const iframeRef = ctx.frame.iframe;\n if (iframeRef instanceof HTMLIFrameElement) return iframeRef;\n if (iframeRef && typeof iframeRef === \"object\") {\n if (\"current\" in iframeRef) {\n const el = (iframeRef as any).current;\n if (el instanceof HTMLIFrameElement) return el;\n }\n if (\"value\" in iframeRef) {\n const el = (iframeRef as any).value;\n if (el instanceof HTMLIFrameElement) return el;\n }\n }\n }\n return document.querySelector(\".payconductor-element iframe\") as HTMLIFrameElement ?? null;\n}\nexport function usePayconductorElement(): UsePayconductorElementReturn {\n const getCtx = () => typeof window !== \"undefined\" ? window.PayConductor : null;\n const sendToIframe = (type: string, data?: unknown) => {\n const ctx = getCtx();\n if (!ctx) return;\n const iframe = getIframeFromContext(ctx);\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type,\n data\n }, \"*\");\n }\n };\n return {\n init: async (config: PayConductorConfig): Promise<void> => {\n const iframe = getIframeFromContext(getCtx());\n const pendingMap = createPendingRequestsMap();\n return sendInit(iframe || undefined, pendingMap, config);\n },\n confirmPayment: async (options: ConfirmPaymentOptions): Promise<PaymentResult> => {\n if (!options.orderId) {\n throw new Error(\"Order ID is required\");\n }\n const ctx = getCtx();\n if (!ctx?.api) throw new Error(\"PayConductor not initialized\");\n return ctx.api.confirmPayment(options);\n },\n validate: (data: unknown) => {\n const ctx = getCtx();\n if (!ctx) return Promise.resolve(false);\n return ctx.api.validate(data);\n },\n reset: () => {\n const ctx = getCtx();\n if (!ctx) return Promise.resolve();\n return ctx.api.reset();\n },\n getSelectedPaymentMethod: (): PaymentMethod | null => {\n return getCtx()?.selectedPaymentMethod ?? null;\n },\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => {\n const currentConfig = getCtx()?.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n orderId: currentConfig?.orderId,\n theme: config.theme ?? currentConfig?.theme,\n locale: config.locale ?? currentConfig?.locale,\n paymentMethods: config.paymentMethods ?? currentConfig?.paymentMethods\n });\n },\n updateOrderId: (orderId: string) => {\n const currentConfig = getCtx()?.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n orderId: orderId,\n theme: currentConfig?.theme,\n locale: currentConfig?.locale,\n paymentMethods: currentConfig?.paymentMethods\n });\n },\n update: (options: UpdateOptions) => {\n sendToIframe(POST_MESSAGES.UPDATE, options);\n },\n submit: async (): Promise<SubmitResult> => {\n const iframe = getIframeFromContext(getCtx());\n const pendingMap = createPendingRequestsMap();\n try {\n await sendMessageToIframe(iframe || undefined, pendingMap, POST_MESSAGES.CONFIRM_PAYMENT, {});\n return {\n paymentMethod: undefined\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Payment failed\";\n return {\n error: {\n message,\n code: \"payment_error\",\n type: \"payment_error\"\n }\n };\n }\n }\n };\n}"],"names":["IFRAME_BASE_URL_PROD","IFRAME_BASE_URL_DEV","REQUEST_TIMEOUT_MS","IFRAME_DEFAULT_HEIGHT","PaymentMethod","PaymentMethodLayout","PaymentStatus","DeviceType","InputStyleKey","OutgoingMessage","IncomingMessage","ErrorCode","defaultTheme","isDev","IFRAME_BASE_URL","ALLOWED_ORIGINS","IFRAME_DEFAULT_HEIGHT_VALUE","REQUEST_TIMEOUT","POST_MESSAGES","ERROR_CODES","SKELETON_STYLE_ID","SKELETON_CSS","buildIframeUrl","config","params","generateRequestId","isValidOrigin","origin","allowedOrigins","allowed","createPendingRequestsMap","sendMessageToIframe","iframe","pendingMap","type","data","resolve","reject","requestId","confirmPayment","options","validatePayment","resetPayment","sendConfig","sendInit","handleMessageEvent","event","setError","onReady","onError","onPaymentComplete","onPaymentFailed","onPaymentPending","onPaymentMethodSelected","payload","error","PayConductor","props","isLoaded","setIsLoaded","useState","iframeUrl","setIframeUrl","selectedPaymentMethod","setSelectedPaymentMethod","useEffect","log","args","configSent","getIframe","ref","_b","_a","obj","frame","_","api","sendConfigToIframe","eventHandler","val","err","method","trySendConfig","el","_c","pollForIframe","jsx","PayConductorCheckoutElement","iframeRef","useRef","iframeHeight","setIframeHeight","styleEl","init","ctx","handler","e","heightSent","handleMessages","_d","jsxs","usePayConductor","getIframeFromContext","usePayconductorElement","getCtx","sendToIframe","currentConfig","orderId"],"mappings":"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"}