@payconductor-sdk-web/library-rsc 1.0.2 → 1.0.4

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
@@ -118,6 +118,7 @@ export default function CheckoutPage() {
118
118
  theme={{ primaryColor: "#0066ff" }}
119
119
  locale="en-US"
120
120
  height="500px"
121
+ debug={true}
121
122
  onReady={() => console.log("Ready")}
122
123
  onError={(err) => console.error(err)}
123
124
  onPaymentComplete={(result) => console.log(result)}
@@ -170,6 +171,7 @@ Client-side component that initializes the payment iframe. Marked with `"use cli
170
171
  | `theme` | `PayConductorTheme` | Theme configuration |
171
172
  | `locale` | `string` | Locale (e.g., 'en-US', 'pt-BR') |
172
173
  | `height` | `string` | Iframe height (default: '500px') |
174
+ | `debug` | `boolean` | Enable debug mode with prefixed console.log for key events |
173
175
  | `onReady` | `() => void` | Callback when iframe is ready |
174
176
  | `onError` | `(error: Error) => void` | Error callback |
175
177
  | `onPaymentComplete` | `(result: PaymentResult) => void` | Payment complete callback |
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const O=require("react/jsx-runtime"),f=require("react"),D="https://iframe.payconductor.ai",L="http://localhost:5175",W=3e4,j="600px";var T=(e=>(e.Init="Init",e.Config="Config",e.Update="Update",e.ConfirmPayment="ConfirmPayment",e.Validate="Validate",e.Reset="Reset",e))(T||{}),y=(e=>(e.Ready="Ready",e.Error="Error",e.PaymentComplete="PaymentComplete",e.PaymentFailed="PaymentFailed",e.PaymentPending="PaymentPending",e.ValidationError="ValidationError",e.PaymentMethodSelected="PaymentMethodSelected",e))(y||{});const B=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"||window.location.port==="5175"),C=B?L:D,U=[L,D],b=j,F=W,i={INIT:T.Init,CONFIG:T.Config,UPDATE:T.Update,CONFIRM_PAYMENT:T.ConfirmPayment,VALIDATE:T.Validate,RESET:T.Reset,READY:y.Ready,ERROR:y.Error,PAYMENT_COMPLETE:y.PaymentComplete,PAYMENT_FAILED:y.PaymentFailed,PAYMENT_PENDING:y.PaymentPending,VALIDATION_ERROR:y.ValidationError,PAYMENT_METHOD_SELECTED:y.PaymentMethodSelected},Q={INVALID_CLIENT:"InvalidClient",INVALID_TOKEN:"InvalidToken",NETWORK_ERROR:"NetworkError",IFRAME_NOT_READY:"IframeNotReady",PAYMENT_DECLINED:"PaymentDeclined",VALIDATION_ERROR:"ValidationError",TIMEOUT:"Timeout"};function v(e){const t=new URLSearchParams({publicKey:e.publicKey});return`${C}?${t.toString()}`}function V(){return crypto.randomUUID()}function k(e,t){return t.includes(e)}function N(){return new Map}function _(e,t,o,n){return new Promise((r,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(!t){u(new Error("Pending requests not initialized"));return}const c=V();t.set(c,{resolve:r,reject:u}),e.contentWindow.postMessage({type:o,data:n,requestId:c},"*"),setTimeout(()=>{t!=null&&t.has(c)&&(t.delete(c),u(new Error("Request timeout")))},F)})}function Y(e,t,o){return _(e,t,i.CONFIRM_PAYMENT,{intentToken:o.intentToken})}function $(e,t,o){return _(e,t,i.VALIDATE,o)}function J(e,t){return _(e,t,i.RESET)}function X(e,t,o){return _(e,t,i.CONFIG,o)}function Z(e,t,o,n,r,u,c,R,I,w){if(!k(e.origin,U))return;const m=e.data,{requestId:P,type:E,data:a,error:s}=m;if(P&&(t!=null&&t.has(P))){const{resolve:A,reject:M}=t.get(P);t.delete(P),s?M(new Error(s.message)):A(a);return}if(E===i.READY){o(!0),r==null||r();return}if(E===i.ERROR){n((s==null?void 0:s.message)||"Unknown error"),u==null||u(new Error(s==null?void 0:s.message));return}if(E===i.PAYMENT_COMPLETE){a&&typeof a=="object"&&"status"in a&&(c==null||c(a));return}if(E===i.PAYMENT_FAILED){a&&typeof a=="object"&&"status"in a&&(R==null||R(a));return}if(E===i.PAYMENT_PENDING){a&&typeof a=="object"&&"status"in a&&(I==null||I(a));return}if(E===i.PAYMENT_METHOD_SELECTED){a&&typeof a=="object"&&"paymentMethod"in a&&(w==null||w(a.paymentMethod));return}}function K(e){const t=f.useRef(null),[o,n]=f.useState(()=>!1),[r,u]=f.useState(()=>!1),[c,R]=f.useState(()=>null),[I,w]=f.useState(()=>""),[m,P]=f.useState(()=>null),[E,a]=f.useState(()=>null),[s,A]=f.useState(()=>!1);return f.useEffect(()=>{w(v({publicKey:e.publicKey})),n(!0),P(N());const M={iframe:t.current,get isReady(){return r},get error(){return c}},G={publicKey:e.publicKey,intentToken:e.intentToken,theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod},H={confirmPayment:h=>Y(t.current,m,h),validate:h=>$(t.current,m,h),reset:()=>J(t.current,m),getSelectedPaymentMethod:()=>E};window.PayConductor={frame:M,config:G,api:H,selectedPaymentMethod:E};const q=async()=>{!s&&t.current&&(A(!0),X(t.current,m,{intentToken:e.intentToken,theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod,showPaymentButtons:e.showPaymentButtons,nuPayConfig:e.nuPayConfig}))},z=h=>{Z(h,m,d=>{u(d),d&&q()},d=>{R(d)},e.onReady,e.onError,d=>{var l;return(l=e.onPaymentComplete)==null?void 0:l.call(e,d)},d=>{var l;return(l=e.onPaymentFailed)==null?void 0:l.call(e,d)},d=>{var l;return(l=e.onPaymentPending)==null?void 0:l.call(e,d)},d=>{var l;a(d),window.PayConductor&&(window.PayConductor.selectedPaymentMethod=d),(l=e.onPaymentMethodSelected)==null||l.call(e,d)})};window.addEventListener("message",z)},[]),O.jsxs("div",{className:"payconductor",id:"payconductor",style:{width:"100%",position:"relative"},children:[e.children,o?O.jsx("iframe",{allow:"payment",title:"PayConductor",ref:t,src:I,style:{width:"100%",height:e.height||b,border:"none"}}):null]})}function g(){const e=typeof window<"u"?window.PayConductor:null,t=e!=null&&e.config?{publicKey:e.config.publicKey,intentToken:e.config.intentToken,theme:e.config.theme,locale:e.config.locale}:{},o=e!=null&&e.frame?{iframe:e.frame.iframe,isReady:e.frame.isReady,error:e.frame.error}:{iframe:null,isReady:!1,error:null};return{...t,...o}}function S(e){var o;if(!((o=e==null?void 0:e.frame)!=null&&o.iframe))return null;const t=e.frame.iframe;if(t instanceof HTMLIFrameElement)return t;if(t&&typeof t=="object"&&"value"in t){const n=t.value;if(n instanceof HTMLIFrameElement)return n}return null}function x(){const e=typeof window<"u"?window.PayConductor:null,t=(o,n)=>{if(!e)return;const r=S(e);r!=null&&r.contentWindow&&r.contentWindow.postMessage({type:o,data:n},"*")};return e?{confirmPayment:async o=>{const n=S(e),r=N();if(!o.intentToken)throw new Error("Intent token is required");return Y(n||void 0,r,o)},validate:e.api.validate,reset:e.api.reset,getSelectedPaymentMethod:()=>(e==null?void 0:e.selectedPaymentMethod)??null,updateConfig:o=>{const n=e.config;t(i.CONFIG,{publicKey:n==null?void 0:n.publicKey,intentToken:n==null?void 0:n.intentToken,theme:o.theme??(n==null?void 0:n.theme),locale:o.locale??(n==null?void 0:n.locale),paymentMethods:o.paymentMethods??(n==null?void 0:n.paymentMethods)})},updateIntentToken:o=>{const n=e.config;t(i.CONFIG,{publicKey:n==null?void 0:n.publicKey,intentToken:o,theme:n==null?void 0:n.theme,locale:n==null?void 0:n.locale,paymentMethods:n==null?void 0:n.paymentMethods})},update:o=>{t(i.UPDATE,o)},submit:async()=>{const o=S(e),n=N();try{return await _(o||void 0,n,i.CONFIRM_PAYMENT,{}),{paymentMethod:void 0}}catch(r){return{error:{message:r instanceof Error?r.message:"Payment failed",code:"payment_error",type:"payment_error"}}}}}:{confirmPayment:async()=>{throw new Error("PayConductor not initialized")},validate:async()=>{throw new Error("PayConductor not initialized")},reset:async()=>{throw new Error("PayConductor not initialized")},getSelectedPaymentMethod:()=>null,updateConfig:()=>{throw new Error("PayConductor not initialized")},updateIntentToken:()=>{throw new Error("PayConductor not initialized")},update:()=>{throw new Error("PayConductor not initialized")},submit:async()=>{throw new Error("PayConductor not initialized")}}}exports.ALLOWED_ORIGINS=U;exports.ERROR_CODES=Q;exports.IFRAME_BASE_URL=C;exports.IFRAME_DEFAULT_HEIGHT_VALUE=b;exports.POST_MESSAGES=i;exports.PayConductor=K;exports.REQUEST_TIMEOUT=F;exports.buildIframeUrl=v;exports.default=K;exports.generateRequestId=V;exports.isValidOrigin=k;exports.useElement=x;exports.usePayConductor=g;
1
+ "use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const L=require("react/jsx-runtime"),m=require("react"),D="https://iframe.payconductor.ai/v1",U="http://localhost:5175",B=3e4,W="600px";var I=(e=>(e.Init="Init",e.Config="Config",e.Update="Update",e.ConfirmPayment="ConfirmPayment",e.Validate="Validate",e.Reset="Reset",e))(I||{}),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 Q=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),O=Q?U:D,b=[U,D],v=W,F=B,s={INIT:I.Init,CONFIG:I.Config,UPDATE:I.Update,CONFIRM_PAYMENT:I.ConfirmPayment,VALIDATE:I.Validate,RESET:I.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},$={INVALID_CLIENT:"InvalidClient",INVALID_TOKEN:"InvalidToken",NETWORK_ERROR:"NetworkError",IFRAME_NOT_READY:"IframeNotReady",PAYMENT_DECLINED:"PaymentDeclined",VALIDATION_ERROR:"ValidationError",TIMEOUT:"Timeout"};function k(e){const n=new URLSearchParams({publicKey:e.publicKey});return`${O}?${n.toString()}`}function K(){return crypto.randomUUID()}function V(e,n){return n.includes(e)}function S(){return new Map}function T(e,n,o,t){return new Promise((i,f)=>{if(!e||!("contentWindow"in e)){f(new Error("Iframe not defined"));return}if(!(e!=null&&e.contentWindow)){f(new Error("Iframe not ready"));return}if(!n){f(new Error("Pending requests not initialized"));return}const l=K();n.set(l,{resolve:i,reject:f}),e.contentWindow.postMessage({type:o,data:t,requestId:l},"*"),setTimeout(()=>{n!=null&&n.has(l)&&(n.delete(l),f(new Error("Request timeout")))},F)})}function g(e,n,o){return T(e,n,s.CONFIRM_PAYMENT,{intentToken:o.intentToken})}function J(e,n,o){return T(e,n,s.VALIDATE,o)}function X(e,n){return T(e,n,s.RESET)}function Z(e,n,o){return T(e,n,s.CONFIG,o)}function x(e,n,o){return T(e,n,s.INIT,o)}function p(e,n,o,t,i,f,l,C,R,E){if(!V(e.origin,b))return;const N=e.data,{requestId:w,type:P,data:u,error:y}=N;if(w&&(n!=null&&n.has(w))){const{resolve:d,reject:M}=n.get(w);n.delete(w),y?M(new Error(String(y.message))):d(u);return}if(P===s.READY){o(!0),i==null||i();return}if(P===s.ERROR){t((y==null?void 0:y.message)||"Unknown error"),f==null||f(new Error(String(y==null?void 0:y.message)));return}if(P===s.PAYMENT_COMPLETE){u&&typeof u=="object"&&"status"in u&&(l==null||l(u));return}if(P===s.PAYMENT_FAILED){u&&typeof u=="object"&&"status"in u&&(C==null||C(u));return}if(P===s.PAYMENT_PENDING){u&&typeof u=="object"&&"status"in u&&(R==null||R(u));return}if(P===s.PAYMENT_METHOD_SELECTED){u&&typeof u=="object"&&"paymentMethod"in u&&(E==null||E(u.paymentMethod));return}}function Y(e){const[n,o]=m.useState(()=>!1),[t,i]=m.useState(()=>!1),[f,l]=m.useState(()=>null),[C,R]=m.useState(()=>""),[E,N]=m.useState(()=>null),[w,P]=m.useState(()=>null),[u,y]=m.useState(()=>!1);return m.useEffect(()=>{const d=(...r)=>{e.debug&&console.log("[PayConductor]",...r)};d("SDK initializing",{publicKey:e.publicKey});const M=k({publicKey:e.publicKey});R(M),o(!0),N(S()),d("iframeUrl built:",M),d("pendingMap created");const _=()=>{var a,c;const r=(c=(a=window.PayConductor)==null?void 0:a.frame)==null?void 0:c.iframe;if(r){if(r instanceof HTMLIFrameElement)return r;if(typeof r=="object"&&r!==null){if("current"in r)return r.current??void 0;if("value"in r)return r.value??void 0}return r}},G={iframe:null,iframeUrl:M,get isReady(){return t},get error(){return f}},H={publicKey:e.publicKey,theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod},z={confirmPayment:r=>(d("confirmPayment called",{intentToken:r.intentToken}),g(_(),E,r)),validate:r=>(d("validate called",r),J(_(),E,r)),reset:()=>(d("reset called"),X(_(),E)),getSelectedPaymentMethod:()=>w};window.PayConductor={frame:G,config:H,api:z,selectedPaymentMethod:w},d("window.PayConductor registered");const q=async()=>{if(!u){const r=_();if(!r){d("sendConfigToIframe: iframe not found, skipping");return}y(!0),d("sendConfig →",{theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod,showPaymentButtons:e.showPaymentButtons}),Z(r,E,{theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod,showPaymentButtons:e.showPaymentButtons,nuPayConfig:e.nuPayConfig})}},j=r=>{p(r,E,a=>{i(a),a&&(d("iframe Ready — sending config"),q())},a=>{l(a),d("iframe Error:",a)},()=>{var a;d("onReady fired"),(a=e.onReady)==null||a.call(e)},a=>{var c;d("onError fired:",a),(c=e.onError)==null||c.call(e,a)},a=>{var c;d("PaymentComplete:",a),(c=e.onPaymentComplete)==null||c.call(e,a)},a=>{var c;d("PaymentFailed:",a),(c=e.onPaymentFailed)==null||c.call(e,a)},a=>{var c;d("PaymentPending:",a),(c=e.onPaymentPending)==null||c.call(e,a)},a=>{var c;d("PaymentMethodSelected:",a),P(a),window.PayConductor&&(window.PayConductor.selectedPaymentMethod=a),(c=e.onPaymentMethodSelected)==null||c.call(e,a)})};window.addEventListener("message",j),d("SDK initialized — waiting for PayConductorCheckoutElement")},[]),L.jsx("div",{className:"payconductor",id:"payconductor",style:{display:"contents"},children:e.children})}function ee(e){const n=m.useRef(null),[o,t]=m.useState(()=>""),[i,f]=m.useState(()=>!1);return m.useEffect(()=>{const l=typeof window<"u"?window.PayConductor:null;l||console.warn("[PayConductorCheckoutElement] window.PayConductor not found — ensure <PayConductor> is mounted before <PayConductorCheckoutElement>"),l!=null&&l.frame&&(t(l.frame.iframeUrl||""),l.frame.iframe=n.current,console.log("[PayConductorCheckoutElement] iframe registered, src:",o)),f(!0)},[]),L.jsx("div",{className:"payconductor-element",style:{width:"100%"},children:i&&o?L.jsx("iframe",{allow:"payment",title:"PayConductor",ref:n,src:o,style:{width:"100%",height:e.height||v,border:"none"}}):null})}function te(){const e=typeof window<"u"?window.PayConductor:null,n=e!=null&&e.config?{publicKey:e.config.publicKey,intentToken:e.config.intentToken,theme:e.config.theme,locale:e.config.locale}:{},o=e!=null&&e.frame?{iframe:e.frame.iframe,isReady:e.frame.isReady,error:e.frame.error}:{iframe:null,isReady:!1,error:null};return{...n,...o}}function A(e){var o;if(!((o=e==null?void 0:e.frame)!=null&&o.iframe))return null;const n=e.frame.iframe;if(n instanceof HTMLIFrameElement)return n;if(n&&typeof n=="object"&&"value"in n){const t=n.value;if(t instanceof HTMLIFrameElement)return t}return null}function ne(){const e=typeof window<"u"?window.PayConductor:null,n=(o,t)=>{if(!e)return;const i=A(e);i!=null&&i.contentWindow&&i.contentWindow.postMessage({type:o,data:t},"*")};return e?{init:async o=>{const t=A(e),i=S();return x(t||void 0,i,o)},confirmPayment:async o=>{const t=A(e),i=S();if(!o.intentToken)throw new Error("Intent token is required");return g(t||void 0,i,o)},validate:e.api.validate,reset:e.api.reset,getSelectedPaymentMethod:()=>(e==null?void 0:e.selectedPaymentMethod)??null,updateConfig:o=>{const t=e.config;n(s.CONFIG,{publicKey:t==null?void 0:t.publicKey,intentToken:t==null?void 0:t.intentToken,theme:o.theme??(t==null?void 0:t.theme),locale:o.locale??(t==null?void 0:t.locale),paymentMethods:o.paymentMethods??(t==null?void 0:t.paymentMethods)})},updateIntentToken:o=>{const t=e.config;n(s.CONFIG,{publicKey:t==null?void 0:t.publicKey,intentToken:o,theme:t==null?void 0:t.theme,locale:t==null?void 0:t.locale,paymentMethods:t==null?void 0:t.paymentMethods})},update:o=>{n(s.UPDATE,o)},submit:async()=>{const o=A(e),t=S();try{return await T(o||void 0,t,s.CONFIRM_PAYMENT,{}),{paymentMethod:void 0}}catch(i){return{error:{message:i instanceof Error?i.message:"Payment failed",code:"payment_error",type:"payment_error"}}}}}:{init:async()=>{throw new Error("PayConductor not initialized")},confirmPayment:async()=>{throw new Error("PayConductor not initialized")},validate:async()=>{throw new Error("PayConductor not initialized")},reset:async()=>{throw new Error("PayConductor not initialized")},getSelectedPaymentMethod:()=>null,updateConfig:()=>{throw new Error("PayConductor not initialized")},updateIntentToken:()=>{throw new Error("PayConductor not initialized")},update:()=>{throw new Error("PayConductor not initialized")},submit:async()=>{throw new Error("PayConductor not initialized")}}}exports.ALLOWED_ORIGINS=b;exports.ERROR_CODES=$;exports.IFRAME_BASE_URL=O;exports.IFRAME_DEFAULT_HEIGHT_VALUE=v;exports.POST_MESSAGES=s;exports.PayConductor=Y;exports.PayConductorCheckoutElement=ee;exports.REQUEST_TIMEOUT=F;exports.buildIframeUrl=k;exports.default=Y;exports.generateRequestId=K;exports.isValidOrigin=V;exports.usePayConductor=te;exports.usePayconductorElement=ne;
2
2
  //# 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/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\";\nexport const IFRAME_BASE_URL_DEV = \"http://localhost:5175\";\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 intentToken?: 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 paymentIntentId: 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.port === \"5175\");\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.includes(origin);\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 intentToken: options.intentToken\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, \"intentToken\" | \"theme\" | \"locale\" | \"paymentMethods\" | \"defaultPaymentMethod\" | \"showPaymentButtons\" | \"nuPayConfig\">): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.CONFIG, 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 if (!isValidOrigin(event.origin, ALLOWED_ORIGINS)) {\n return;\n }\n const payload: MessagePayload = event.data;\n const {\n requestId,\n type,\n data,\n error\n } = payload;\n if (requestId && pendingMap?.has(requestId)) {\n const {\n resolve,\n reject\n } = pendingMap.get(requestId)!;\n pendingMap.delete(requestId);\n if (error) {\n reject(new Error(error.message));\n } else {\n resolve(data);\n }\n return;\n }\n if (type === POST_MESSAGES.READY) {\n setIsReady(true);\n onReady?.();\n return;\n }\n if (type === POST_MESSAGES.ERROR) {\n setError(error?.message || \"Unknown error\");\n onError?.(new Error(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, useRef, useEffect } from \"react\";\n\nexport interface PayConductorEmbedProps extends PayConductorConfig {\n height?: string;\n children?: any;\n showActionButtons?: 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 { IFRAME_DEFAULT_HEIGHT_VALUE } from \"./constants\";\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 iframeRef = useRef<any>(null);\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 [pendingMap, setPendingMap] = useState<PayConductorState[\"pendingMap\"]>(\n () => null\n );\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<\n PayConductorState[\"selectedPaymentMethod\"]\n >(() => null);\n\n const [configSent, setConfigSent] = useState(() => false);\n\n useEffect(() => {\n setIframeUrl(\n buildIframeUrl({\n publicKey: props.publicKey,\n })\n );\n setIsLoaded(true);\n setPendingMap(createPendingRequestsMap());\n const frame: PayConductorFrame = {\n iframe: iframeRef.current,\n get isReady() {\n return isReady;\n },\n get error() {\n return error;\n },\n };\n const config: PayConductorConfig = {\n publicKey: props.publicKey,\n intentToken: props.intentToken,\n theme: props.theme,\n locale: props.locale,\n paymentMethods: props.paymentMethods,\n defaultPaymentMethod: props.defaultPaymentMethod,\n };\n const api: PayConductorApi = {\n confirmPayment: (options: { intentToken: string }) =>\n confirmPayment(iframeRef.current, pendingMap, options),\n validate: (data: unknown) =>\n validatePayment(iframeRef.current, pendingMap, data),\n reset: () => resetPayment(iframeRef.current, pendingMap),\n getSelectedPaymentMethod: () => selectedPaymentMethod,\n };\n window.PayConductor = {\n frame,\n config,\n api,\n selectedPaymentMethod: selectedPaymentMethod,\n };\n const sendConfigToIframe = async () => {\n if (!configSent && iframeRef.current) {\n setConfigSent(true);\n sendConfig(iframeRef.current, pendingMap, {\n intentToken: props.intentToken,\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 handleMessageEvent(\n event,\n pendingMap,\n (val) => {\n setIsReady(val);\n if (val) {\n sendConfigToIframe();\n }\n },\n (val) => {\n setError(val);\n },\n props.onReady,\n props.onError,\n (data) => props.onPaymentComplete?.(data as PaymentResult),\n (data) => props.onPaymentFailed?.(data as PaymentResult),\n (data) => props.onPaymentPending?.(data as PaymentResult),\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 }, []);\n\n return (\n <div\n className=\"payconductor\"\n id=\"payconductor\"\n style={{\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {props.children}\n {isLoaded ? (\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 PayConductor;\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 intentToken: ctx.config.intentToken,\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, 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 intentToken: string;\n returnUrl?: string;\n};\nexport type UpdateOptions = {\n billingDetails?: Partial<BillingDetails>;\n address?: Partial<BillingDetails[\"address\"]>;\n};\nexport interface UseElementReturn {\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 updateIntentToken: (intentToken: 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) return null;\n const iframeRef = ctx.frame.iframe;\n if (iframeRef instanceof HTMLIFrameElement) {\n return iframeRef;\n }\n if (iframeRef && typeof iframeRef === \"object\" && \"value\" in iframeRef) {\n const value = iframeRef.value;\n if (value instanceof HTMLIFrameElement) {\n return value;\n }\n }\n return null;\n}\nexport function useElement(): UseElementReturn {\n const ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n const sendToIframe = (type: string, data?: unknown) => {\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 if (!ctx) {\n return {\n confirmPayment: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n validate: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n reset: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n getSelectedPaymentMethod: () => null,\n updateConfig: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n updateIntentToken: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n update: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n submit: async () => {\n throw new Error(\"PayConductor not initialized\");\n }\n };\n }\n return {\n confirmPayment: async (options: ConfirmPaymentOptions): Promise<PaymentResult> => {\n const iframe = getIframeFromContext(ctx);\n const pendingMap = createPendingRequestsMap();\n if (!options.intentToken) {\n throw new Error(\"Intent token is required\");\n }\n return confirmPayment(iframe || undefined, pendingMap, options);\n },\n validate: ctx.api.validate,\n reset: ctx.api.reset,\n getSelectedPaymentMethod: (): PaymentMethod | null => {\n return ctx?.selectedPaymentMethod ?? null;\n },\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n intentToken: currentConfig?.intentToken,\n theme: config.theme ?? currentConfig?.theme,\n locale: config.locale ?? currentConfig?.locale,\n paymentMethods: config.paymentMethods ?? currentConfig?.paymentMethods\n });\n },\n updateIntentToken: (intentToken: string) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n intentToken: intentToken,\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(ctx);\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","createPendingRequestsMap","sendMessageToIframe","iframe","pendingMap","type","data","resolve","reject","requestId","confirmPayment","options","validatePayment","resetPayment","sendConfig","handleMessageEvent","event","setIsReady","setError","onReady","onError","onPaymentComplete","onPaymentFailed","onPaymentPending","onPaymentMethodSelected","payload","error","PayConductor","props","iframeRef","useRef","isLoaded","setIsLoaded","useState","isReady","iframeUrl","setIframeUrl","setPendingMap","selectedPaymentMethod","setSelectedPaymentMethod","configSent","setConfigSent","useEffect","frame","api","sendConfigToIframe","eventHandler","val","_a","method","jsxs","jsx","usePayConductor","ctx","getIframeFromContext","value","useElement","sendToIframe","currentConfig","intentToken"],"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\";\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 intentToken?: 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 paymentIntentId: 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\");\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.includes(origin);\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 intentToken: options.intentToken\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 if (!isValidOrigin(event.origin, ALLOWED_ORIGINS)) {\n return;\n }\n const payload: MessagePayload = event.data;\n const {\n requestId,\n type,\n data,\n error\n } = payload;\n if (requestId && 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.READY) {\n setIsReady(true);\n onReady?.();\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, \"intentToken\"> {\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 [pendingMap, setPendingMap] = useState<PayConductorState[\"pendingMap\"]>(\n () => null\n );\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<\n PayConductorState[\"selectedPaymentMethod\"]\n >(() => null);\n\n const [configSent, setConfigSent] = useState(() => false);\n\n useEffect(() => {\n const log = (...args: any[]) => {\n if (props.debug) {\n console.log(\"[PayConductor]\", ...args);\n }\n };\n log(\"SDK initializing\", {\n publicKey: props.publicKey,\n });\n const iframeUrl = buildIframeUrl({\n publicKey: props.publicKey,\n });\n setIframeUrl(iframeUrl);\n setIsLoaded(true);\n setPendingMap(createPendingRequestsMap());\n log(\"iframeUrl built:\", iframeUrl);\n log(\"pendingMap created\");\n const getIframe = (): HTMLIFrameElement | undefined => {\n const ref = window.PayConductor?.frame?.iframe;\n if (!ref) return undefined;\n if (ref instanceof HTMLIFrameElement) return ref;\n if (typeof ref === \"object\" && ref !== null) {\n if (\"current\" in ref) return (ref as any).current ?? undefined;\n if (\"value\" in ref) return (ref as any).value ?? undefined;\n }\n return ref as HTMLIFrameElement;\n };\n const frame: PayConductorFrame = {\n iframe: null,\n iframeUrl,\n get isReady() {\n return isReady;\n },\n get error() {\n return error;\n },\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: { intentToken: string }) => {\n log(\"confirmPayment called\", {\n intentToken: options.intentToken,\n });\n return confirmPayment(getIframe(), pendingMap, options);\n },\n validate: (data: unknown) => {\n log(\"validate called\", data);\n return validatePayment(getIframe(), pendingMap, data);\n },\n reset: () => {\n log(\"reset called\");\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(\"window.PayConductor registered\");\n const sendConfigToIframe = async () => {\n if (!configSent) {\n const iframe = getIframe();\n if (!iframe) {\n log(\"sendConfigToIframe: iframe not found, skipping\");\n return;\n }\n setConfigSent(true);\n log(\"sendConfig →\", {\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 handleMessageEvent(\n event,\n pendingMap,\n (val) => {\n setIsReady(val);\n if (val) {\n log(\"iframe Ready — sending config\");\n sendConfigToIframe();\n }\n },\n (val) => {\n setError(val);\n log(\"iframe Error:\", val);\n },\n () => {\n log(\"onReady fired\");\n props.onReady?.();\n },\n (err) => {\n log(\"onError fired:\", err);\n props.onError?.(err);\n },\n (data) => {\n log(\"PaymentComplete:\", data);\n props.onPaymentComplete?.(data as PaymentResult);\n },\n (data) => {\n log(\"PaymentFailed:\", data);\n props.onPaymentFailed?.(data as PaymentResult);\n },\n (data) => {\n log(\"PaymentPending:\", data);\n props.onPaymentPending?.(data as PaymentResult);\n },\n (method) => {\n log(\"PaymentMethodSelected:\", 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 log(\"SDK initialized — waiting for PayConductorCheckoutElement\");\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 ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n if (!ctx) {\n console.warn(\n \"[PayConductorCheckoutElement] window.PayConductor not found — ensure <PayConductor> is mounted before <PayConductorCheckoutElement>\"\n );\n }\n if (ctx?.frame) {\n setIframeUrl(ctx.frame.iframeUrl || \"\");\n ctx.frame.iframe = iframeRef.current;\n console.log(\n \"[PayConductorCheckoutElement] iframe registered, src:\",\n iframeUrl\n );\n }\n setIsLoaded(true);\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 intentToken: ctx.config.intentToken,\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 intentToken: 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 updateIntentToken: (intentToken: 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) return null;\n const iframeRef = ctx.frame.iframe;\n if (iframeRef instanceof HTMLIFrameElement) {\n return iframeRef;\n }\n if (iframeRef && typeof iframeRef === \"object\" && \"value\" in iframeRef) {\n const value = iframeRef.value;\n if (value instanceof HTMLIFrameElement) {\n return value;\n }\n }\n return null;\n}\nexport function usePayconductorElement(): UsePayconductorElementReturn {\n const ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n const sendToIframe = (type: string, data?: unknown) => {\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 if (!ctx) {\n return {\n init: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n confirmPayment: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n validate: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n reset: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n getSelectedPaymentMethod: () => null,\n updateConfig: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n updateIntentToken: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n update: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n submit: async () => {\n throw new Error(\"PayConductor not initialized\");\n }\n };\n }\n return {\n init: async (config: PayConductorConfig): Promise<void> => {\n const iframe = getIframeFromContext(ctx);\n const pendingMap = createPendingRequestsMap();\n return sendInit(iframe || undefined, pendingMap, config);\n },\n confirmPayment: async (options: ConfirmPaymentOptions): Promise<PaymentResult> => {\n const iframe = getIframeFromContext(ctx);\n const pendingMap = createPendingRequestsMap();\n if (!options.intentToken) {\n throw new Error(\"Intent token is required\");\n }\n return confirmPayment(iframe || undefined, pendingMap, options);\n },\n validate: ctx.api.validate,\n reset: ctx.api.reset,\n getSelectedPaymentMethod: (): PaymentMethod | null => {\n return ctx?.selectedPaymentMethod ?? null;\n },\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n intentToken: currentConfig?.intentToken,\n theme: config.theme ?? currentConfig?.theme,\n locale: config.locale ?? currentConfig?.locale,\n paymentMethods: config.paymentMethods ?? currentConfig?.paymentMethods\n });\n },\n updateIntentToken: (intentToken: string) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n intentToken: intentToken,\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(ctx);\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","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","setPendingMap","selectedPaymentMethod","setSelectedPaymentMethod","configSent","setConfigSent","useEffect","log","args","getIframe","ref","_b","_a","frame","api","sendConfigToIframe","eventHandler","val","err","method","jsx","PayConductorCheckoutElement","iframeRef","useRef","ctx","usePayConductor","getIframeFromContext","value","usePayconductorElement","sendToIframe","currentConfig","intentToken"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { default } from './payconductor/payconductor';
2
2
  export { default as PayConductor } from './payconductor/payconductor';
3
+ export { default as PayConductorCheckoutElement } from './payconductor/payconductor-element';
3
4
  export * from './payconductor/types';
4
5
  export * from './payconductor/constants';
5
6
  export * from './payconductor/utils';
package/dist/index.es.js CHANGED
@@ -1,23 +1,23 @@
1
1
  "use client";
2
- import { jsxs as F, jsx as k } from "react/jsx-runtime";
3
- import { useRef as V, useState as m, useEffect as Y } from "react";
4
- const C = "https://iframe.payconductor.ai", L = "http://localhost:5175", K = 3e4, G = "600px";
5
- var P = /* @__PURE__ */ ((e) => (e.Init = "Init", e.Config = "Config", e.Update = "Update", e.ConfirmPayment = "ConfirmPayment", e.Validate = "Validate", e.Reset = "Reset", e))(P || {}), E = /* @__PURE__ */ ((e) => (e.Ready = "Ready", e.Error = "Error", e.PaymentComplete = "PaymentComplete", e.PaymentFailed = "PaymentFailed", e.PaymentPending = "PaymentPending", e.ValidationError = "ValidationError", e.PaymentMethodSelected = "PaymentMethodSelected", e))(E || {});
6
- const H = typeof window < "u" && (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1" || window.location.port === "5175"), z = H ? L : C, q = [L, C], W = G, B = K, d = {
7
- INIT: P.Init,
8
- CONFIG: P.Config,
9
- UPDATE: P.Update,
10
- CONFIRM_PAYMENT: P.ConfirmPayment,
11
- VALIDATE: P.Validate,
12
- RESET: P.Reset,
13
- READY: E.Ready,
14
- ERROR: E.Error,
15
- PAYMENT_COMPLETE: E.PaymentComplete,
16
- PAYMENT_FAILED: E.PaymentFailed,
17
- PAYMENT_PENDING: E.PaymentPending,
18
- VALIDATION_ERROR: E.ValidationError,
19
- PAYMENT_METHOD_SELECTED: E.PaymentMethodSelected
20
- }, ee = {
2
+ import { jsx as L } from "react/jsx-runtime";
3
+ import { useState as E, useEffect as S, useRef as Y } from "react";
4
+ const U = "https://iframe.payconductor.ai/v1", b = "http://localhost:5175", g = 3e4, z = "600px";
5
+ var T = /* @__PURE__ */ ((e) => (e.Init = "Init", e.Config = "Config", e.Update = "Update", e.ConfirmPayment = "ConfirmPayment", e.Validate = "Validate", e.Reset = "Reset", e))(T || {}), h = /* @__PURE__ */ ((e) => (e.Ready = "Ready", e.Error = "Error", e.PaymentComplete = "PaymentComplete", e.PaymentFailed = "PaymentFailed", e.PaymentPending = "PaymentPending", e.ValidationError = "ValidationError", e.PaymentMethodSelected = "PaymentMethodSelected", e))(h || {});
6
+ const G = typeof window < "u" && (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1"), H = G ? b : U, q = [b, U], B = z, W = g, f = {
7
+ INIT: T.Init,
8
+ CONFIG: T.Config,
9
+ UPDATE: T.Update,
10
+ CONFIRM_PAYMENT: T.ConfirmPayment,
11
+ VALIDATE: T.Validate,
12
+ RESET: T.Reset,
13
+ READY: h.Ready,
14
+ ERROR: h.Error,
15
+ PAYMENT_COMPLETE: h.PaymentComplete,
16
+ PAYMENT_FAILED: h.PaymentFailed,
17
+ PAYMENT_PENDING: h.PaymentPending,
18
+ VALIDATION_ERROR: h.ValidationError,
19
+ PAYMENT_METHOD_SELECTED: h.PaymentMethodSelected
20
+ }, ne = {
21
21
  INVALID_CLIENT: "InvalidClient",
22
22
  INVALID_TOKEN: "InvalidToken",
23
23
  NETWORK_ERROR: "NetworkError",
@@ -27,218 +27,274 @@ const H = typeof window < "u" && (window.location.hostname === "localhost" || wi
27
27
  TIMEOUT: "Timeout"
28
28
  };
29
29
  function j(e) {
30
- const t = new URLSearchParams({
30
+ const n = new URLSearchParams({
31
31
  publicKey: e.publicKey
32
32
  });
33
- return `${z}?${t.toString()}`;
33
+ return `${H}?${n.toString()}`;
34
34
  }
35
35
  function Q() {
36
36
  return crypto.randomUUID();
37
37
  }
38
- function $(e, t) {
39
- return t.includes(e);
38
+ function $(e, n) {
39
+ return n.includes(e);
40
40
  }
41
- function D() {
41
+ function N() {
42
42
  return /* @__PURE__ */ new Map();
43
43
  }
44
- function A(e, t, o, n) {
45
- return new Promise((r, l) => {
44
+ function I(e, n, o, t) {
45
+ return new Promise((i, m) => {
46
46
  if (!e || !("contentWindow" in e)) {
47
- l(new Error("Iframe not defined"));
47
+ m(new Error("Iframe not defined"));
48
48
  return;
49
49
  }
50
50
  if (!(e != null && e.contentWindow)) {
51
- l(new Error("Iframe not ready"));
51
+ m(new Error("Iframe not ready"));
52
52
  return;
53
53
  }
54
- if (!t) {
55
- l(new Error("Pending requests not initialized"));
54
+ if (!n) {
55
+ m(new Error("Pending requests not initialized"));
56
56
  return;
57
57
  }
58
- const u = Q();
59
- t.set(u, {
60
- resolve: r,
61
- reject: l
58
+ const c = Q();
59
+ n.set(c, {
60
+ resolve: i,
61
+ reject: m
62
62
  }), e.contentWindow.postMessage({
63
63
  type: o,
64
- data: n,
65
- requestId: u
64
+ data: t,
65
+ requestId: c
66
66
  }, "*"), setTimeout(() => {
67
- t != null && t.has(u) && (t.delete(u), l(new Error("Request timeout")));
68
- }, B);
67
+ n != null && n.has(c) && (n.delete(c), m(new Error("Request timeout")));
68
+ }, W);
69
69
  });
70
70
  }
71
- function O(e, t, o) {
72
- return A(e, t, d.CONFIRM_PAYMENT, {
71
+ function v(e, n, o) {
72
+ return I(e, n, f.CONFIRM_PAYMENT, {
73
73
  intentToken: o.intentToken
74
74
  });
75
75
  }
76
- function J(e, t, o) {
77
- return A(e, t, d.VALIDATE, o);
76
+ function J(e, n, o) {
77
+ return I(e, n, f.VALIDATE, o);
78
78
  }
79
- function X(e, t) {
80
- return A(e, t, d.RESET);
79
+ function X(e, n) {
80
+ return I(e, n, f.RESET);
81
81
  }
82
- function Z(e, t, o) {
83
- return A(e, t, d.CONFIG, o);
82
+ function Z(e, n, o) {
83
+ return I(e, n, f.CONFIG, o);
84
84
  }
85
- function x(e, t, o, n, r, l, u, w, h, I) {
85
+ function x(e, n, o) {
86
+ return I(e, n, f.INIT, o);
87
+ }
88
+ function p(e, n, o, t, i, m, c, C, R, y) {
86
89
  if (!$(e.origin, q))
87
90
  return;
88
- const y = e.data, {
89
- requestId: T,
90
- type: f,
91
- data: a,
91
+ const D = e.data, {
92
+ requestId: w,
93
+ type: P,
94
+ data: l,
92
95
  error: s
93
- } = y;
94
- if (T && (t != null && t.has(T))) {
96
+ } = D;
97
+ if (w && (n != null && n.has(w))) {
95
98
  const {
96
- resolve: _,
99
+ resolve: d,
97
100
  reject: M
98
- } = t.get(T);
99
- t.delete(T), s ? M(new Error(s.message)) : _(a);
101
+ } = n.get(w);
102
+ n.delete(w), s ? M(new Error(String(s.message))) : d(l);
100
103
  return;
101
104
  }
102
- if (f === d.READY) {
103
- o(!0), r == null || r();
105
+ if (P === f.READY) {
106
+ o(!0), i == null || i();
104
107
  return;
105
108
  }
106
- if (f === d.ERROR) {
107
- n((s == null ? void 0 : s.message) || "Unknown error"), l == null || l(new Error(s == null ? void 0 : s.message));
109
+ if (P === f.ERROR) {
110
+ t((s == null ? void 0 : s.message) || "Unknown error"), m == null || m(new Error(String(s == null ? void 0 : s.message)));
108
111
  return;
109
112
  }
110
- if (f === d.PAYMENT_COMPLETE) {
111
- a && typeof a == "object" && "status" in a && (u == null || u(a));
113
+ if (P === f.PAYMENT_COMPLETE) {
114
+ l && typeof l == "object" && "status" in l && (c == null || c(l));
112
115
  return;
113
116
  }
114
- if (f === d.PAYMENT_FAILED) {
115
- a && typeof a == "object" && "status" in a && (w == null || w(a));
117
+ if (P === f.PAYMENT_FAILED) {
118
+ l && typeof l == "object" && "status" in l && (C == null || C(l));
116
119
  return;
117
120
  }
118
- if (f === d.PAYMENT_PENDING) {
119
- a && typeof a == "object" && "status" in a && (h == null || h(a));
121
+ if (P === f.PAYMENT_PENDING) {
122
+ l && typeof l == "object" && "status" in l && (R == null || R(l));
120
123
  return;
121
124
  }
122
- if (f === d.PAYMENT_METHOD_SELECTED) {
123
- a && typeof a == "object" && "paymentMethod" in a && (I == null || I(a.paymentMethod));
125
+ if (P === f.PAYMENT_METHOD_SELECTED) {
126
+ l && typeof l == "object" && "paymentMethod" in l && (y == null || y(l.paymentMethod));
124
127
  return;
125
128
  }
126
129
  }
127
- function te(e) {
128
- const t = V(null), [o, n] = m(
130
+ function oe(e) {
131
+ const [n, o] = E(
129
132
  () => !1
130
- ), [r, l] = m(
133
+ ), [t, i] = E(
131
134
  () => !1
132
- ), [u, w] = m(() => null), [h, I] = m(
135
+ ), [m, c] = E(() => null), [C, R] = E(
133
136
  () => ""
134
- ), [y, T] = m(
137
+ ), [y, D] = E(
135
138
  () => null
136
- ), [f, a] = m(() => null), [s, _] = m(() => !1);
137
- return Y(() => {
138
- I(
139
- j({
140
- publicKey: e.publicKey
141
- })
142
- ), n(!0), T(D());
143
- const M = {
144
- iframe: t.current,
139
+ ), [w, P] = E(() => null), [l, s] = E(() => !1);
140
+ return S(() => {
141
+ const d = (...a) => {
142
+ e.debug && console.log("[PayConductor]", ...a);
143
+ };
144
+ d("SDK initializing", {
145
+ publicKey: e.publicKey
146
+ });
147
+ const M = j({
148
+ publicKey: e.publicKey
149
+ });
150
+ R(M), o(!0), D(N()), d("iframeUrl built:", M), d("pendingMap created");
151
+ const A = () => {
152
+ var r, u;
153
+ const a = (u = (r = window.PayConductor) == null ? void 0 : r.frame) == null ? void 0 : u.iframe;
154
+ if (a) {
155
+ if (a instanceof HTMLIFrameElement) return a;
156
+ if (typeof a == "object" && a !== null) {
157
+ if ("current" in a) return a.current ?? void 0;
158
+ if ("value" in a) return a.value ?? void 0;
159
+ }
160
+ return a;
161
+ }
162
+ }, O = {
163
+ iframe: null,
164
+ iframeUrl: M,
145
165
  get isReady() {
146
- return r;
166
+ return t;
147
167
  },
148
168
  get error() {
149
- return u;
169
+ return m;
150
170
  }
151
- }, S = {
171
+ }, F = {
152
172
  publicKey: e.publicKey,
153
- intentToken: e.intentToken,
154
173
  theme: e.theme,
155
174
  locale: e.locale,
156
175
  paymentMethods: e.paymentMethods,
157
176
  defaultPaymentMethod: e.defaultPaymentMethod
158
- }, U = {
159
- confirmPayment: (R) => O(t.current, y, R),
160
- validate: (R) => J(t.current, y, R),
161
- reset: () => X(t.current, y),
162
- getSelectedPaymentMethod: () => f
177
+ }, k = {
178
+ confirmPayment: (a) => (d("confirmPayment called", {
179
+ intentToken: a.intentToken
180
+ }), v(A(), y, a)),
181
+ validate: (a) => (d("validate called", a), J(A(), y, a)),
182
+ reset: () => (d("reset called"), X(A(), y)),
183
+ getSelectedPaymentMethod: () => w
163
184
  };
164
185
  window.PayConductor = {
165
- frame: M,
166
- config: S,
167
- api: U,
168
- selectedPaymentMethod: f
169
- };
170
- const b = async () => {
171
- !s && t.current && (_(!0), Z(t.current, y, {
172
- intentToken: e.intentToken,
173
- theme: e.theme,
174
- locale: e.locale,
175
- paymentMethods: e.paymentMethods,
176
- defaultPaymentMethod: e.defaultPaymentMethod,
177
- showPaymentButtons: e.showPaymentButtons,
178
- nuPayConfig: e.nuPayConfig
179
- }));
180
- }, v = (R) => {
181
- x(
182
- R,
186
+ frame: O,
187
+ config: F,
188
+ api: k,
189
+ selectedPaymentMethod: w
190
+ }, d("window.PayConductor registered");
191
+ const K = async () => {
192
+ if (!l) {
193
+ const a = A();
194
+ if (!a) {
195
+ d("sendConfigToIframe: iframe not found, skipping");
196
+ return;
197
+ }
198
+ s(!0), d("sendConfig →", {
199
+ theme: e.theme,
200
+ locale: e.locale,
201
+ paymentMethods: e.paymentMethods,
202
+ defaultPaymentMethod: e.defaultPaymentMethod,
203
+ showPaymentButtons: e.showPaymentButtons
204
+ }), Z(a, y, {
205
+ theme: e.theme,
206
+ locale: e.locale,
207
+ paymentMethods: e.paymentMethods,
208
+ defaultPaymentMethod: e.defaultPaymentMethod,
209
+ showPaymentButtons: e.showPaymentButtons,
210
+ nuPayConfig: e.nuPayConfig
211
+ });
212
+ }
213
+ }, V = (a) => {
214
+ p(
215
+ a,
183
216
  y,
184
- (i) => {
185
- l(i), i && b();
217
+ (r) => {
218
+ i(r), r && (d("iframe Ready — sending config"), K());
219
+ },
220
+ (r) => {
221
+ c(r), d("iframe Error:", r);
186
222
  },
187
- (i) => {
188
- w(i);
223
+ () => {
224
+ var r;
225
+ d("onReady fired"), (r = e.onReady) == null || r.call(e);
189
226
  },
190
- e.onReady,
191
- e.onError,
192
- (i) => {
193
- var c;
194
- return (c = e.onPaymentComplete) == null ? void 0 : c.call(e, i);
227
+ (r) => {
228
+ var u;
229
+ d("onError fired:", r), (u = e.onError) == null || u.call(e, r);
195
230
  },
196
- (i) => {
197
- var c;
198
- return (c = e.onPaymentFailed) == null ? void 0 : c.call(e, i);
231
+ (r) => {
232
+ var u;
233
+ d("PaymentComplete:", r), (u = e.onPaymentComplete) == null || u.call(e, r);
199
234
  },
200
- (i) => {
201
- var c;
202
- return (c = e.onPaymentPending) == null ? void 0 : c.call(e, i);
235
+ (r) => {
236
+ var u;
237
+ d("PaymentFailed:", r), (u = e.onPaymentFailed) == null || u.call(e, r);
203
238
  },
204
- (i) => {
205
- var c;
206
- a(i), window.PayConductor && (window.PayConductor.selectedPaymentMethod = i), (c = e.onPaymentMethodSelected) == null || c.call(e, i);
239
+ (r) => {
240
+ var u;
241
+ d("PaymentPending:", r), (u = e.onPaymentPending) == null || u.call(e, r);
242
+ },
243
+ (r) => {
244
+ var u;
245
+ d("PaymentMethodSelected:", r), P(r), window.PayConductor && (window.PayConductor.selectedPaymentMethod = r), (u = e.onPaymentMethodSelected) == null || u.call(e, r);
207
246
  }
208
247
  );
209
248
  };
210
- window.addEventListener("message", v);
211
- }, []), /* @__PURE__ */ F(
249
+ window.addEventListener("message", V), d("SDK initialized — waiting for PayConductorCheckoutElement");
250
+ }, []), /* @__PURE__ */ L(
212
251
  "div",
213
252
  {
214
253
  className: "payconductor",
215
254
  id: "payconductor",
216
255
  style: {
217
- width: "100%",
218
- position: "relative"
256
+ display: "contents"
257
+ },
258
+ children: e.children
259
+ }
260
+ );
261
+ }
262
+ function re(e) {
263
+ const n = Y(null), [o, t] = E(() => ""), [i, m] = E(() => !1);
264
+ return S(() => {
265
+ const c = typeof window < "u" ? window.PayConductor : null;
266
+ c || console.warn(
267
+ "[PayConductorCheckoutElement] window.PayConductor not found — ensure <PayConductor> is mounted before <PayConductorCheckoutElement>"
268
+ ), c != null && c.frame && (t(c.frame.iframeUrl || ""), c.frame.iframe = n.current, console.log(
269
+ "[PayConductorCheckoutElement] iframe registered, src:",
270
+ o
271
+ )), m(!0);
272
+ }, []), /* @__PURE__ */ L(
273
+ "div",
274
+ {
275
+ className: "payconductor-element",
276
+ style: {
277
+ width: "100%"
219
278
  },
220
- children: [
221
- e.children,
222
- o ? /* @__PURE__ */ k(
223
- "iframe",
224
- {
225
- allow: "payment",
226
- title: "PayConductor",
227
- ref: t,
228
- src: h,
229
- style: {
230
- width: "100%",
231
- height: e.height || W,
232
- border: "none"
233
- }
279
+ children: i && o ? /* @__PURE__ */ L(
280
+ "iframe",
281
+ {
282
+ allow: "payment",
283
+ title: "PayConductor",
284
+ ref: n,
285
+ src: o,
286
+ style: {
287
+ width: "100%",
288
+ height: e.height || B,
289
+ border: "none"
234
290
  }
235
- ) : null
236
- ]
291
+ }
292
+ ) : null
237
293
  }
238
294
  );
239
295
  }
240
- function ne() {
241
- const e = typeof window < "u" ? window.PayConductor : null, t = e != null && e.config ? {
296
+ function ae() {
297
+ const e = typeof window < "u" ? window.PayConductor : null, n = e != null && e.config ? {
242
298
  publicKey: e.config.publicKey,
243
299
  intentToken: e.config.intentToken,
244
300
  theme: e.config.theme,
@@ -253,75 +309,79 @@ function ne() {
253
309
  error: null
254
310
  };
255
311
  return {
256
- ...t,
312
+ ...n,
257
313
  ...o
258
314
  };
259
315
  }
260
- function N(e) {
316
+ function _(e) {
261
317
  var o;
262
318
  if (!((o = e == null ? void 0 : e.frame) != null && o.iframe)) return null;
263
- const t = e.frame.iframe;
264
- if (t instanceof HTMLIFrameElement)
265
- return t;
266
- if (t && typeof t == "object" && "value" in t) {
267
- const n = t.value;
268
- if (n instanceof HTMLIFrameElement)
269
- return n;
319
+ const n = e.frame.iframe;
320
+ if (n instanceof HTMLIFrameElement)
321
+ return n;
322
+ if (n && typeof n == "object" && "value" in n) {
323
+ const t = n.value;
324
+ if (t instanceof HTMLIFrameElement)
325
+ return t;
270
326
  }
271
327
  return null;
272
328
  }
273
- function oe() {
274
- const e = typeof window < "u" ? window.PayConductor : null, t = (o, n) => {
329
+ function ie() {
330
+ const e = typeof window < "u" ? window.PayConductor : null, n = (o, t) => {
275
331
  if (!e) return;
276
- const r = N(e);
277
- r != null && r.contentWindow && r.contentWindow.postMessage({
332
+ const i = _(e);
333
+ i != null && i.contentWindow && i.contentWindow.postMessage({
278
334
  type: o,
279
- data: n
335
+ data: t
280
336
  }, "*");
281
337
  };
282
338
  return e ? {
339
+ init: async (o) => {
340
+ const t = _(e), i = N();
341
+ return x(t || void 0, i, o);
342
+ },
283
343
  confirmPayment: async (o) => {
284
- const n = N(e), r = D();
344
+ const t = _(e), i = N();
285
345
  if (!o.intentToken)
286
346
  throw new Error("Intent token is required");
287
- return O(n || void 0, r, o);
347
+ return v(t || void 0, i, o);
288
348
  },
289
349
  validate: e.api.validate,
290
350
  reset: e.api.reset,
291
351
  getSelectedPaymentMethod: () => (e == null ? void 0 : e.selectedPaymentMethod) ?? null,
292
352
  updateConfig: (o) => {
293
- const n = e.config;
294
- t(d.CONFIG, {
295
- publicKey: n == null ? void 0 : n.publicKey,
296
- intentToken: n == null ? void 0 : n.intentToken,
297
- theme: o.theme ?? (n == null ? void 0 : n.theme),
298
- locale: o.locale ?? (n == null ? void 0 : n.locale),
299
- paymentMethods: o.paymentMethods ?? (n == null ? void 0 : n.paymentMethods)
353
+ const t = e.config;
354
+ n(f.CONFIG, {
355
+ publicKey: t == null ? void 0 : t.publicKey,
356
+ intentToken: t == null ? void 0 : t.intentToken,
357
+ theme: o.theme ?? (t == null ? void 0 : t.theme),
358
+ locale: o.locale ?? (t == null ? void 0 : t.locale),
359
+ paymentMethods: o.paymentMethods ?? (t == null ? void 0 : t.paymentMethods)
300
360
  });
301
361
  },
302
362
  updateIntentToken: (o) => {
303
- const n = e.config;
304
- t(d.CONFIG, {
305
- publicKey: n == null ? void 0 : n.publicKey,
363
+ const t = e.config;
364
+ n(f.CONFIG, {
365
+ publicKey: t == null ? void 0 : t.publicKey,
306
366
  intentToken: o,
307
- theme: n == null ? void 0 : n.theme,
308
- locale: n == null ? void 0 : n.locale,
309
- paymentMethods: n == null ? void 0 : n.paymentMethods
367
+ theme: t == null ? void 0 : t.theme,
368
+ locale: t == null ? void 0 : t.locale,
369
+ paymentMethods: t == null ? void 0 : t.paymentMethods
310
370
  });
311
371
  },
312
372
  update: (o) => {
313
- t(d.UPDATE, o);
373
+ n(f.UPDATE, o);
314
374
  },
315
375
  submit: async () => {
316
- const o = N(e), n = D();
376
+ const o = _(e), t = N();
317
377
  try {
318
- return await A(o || void 0, n, d.CONFIRM_PAYMENT, {}), {
378
+ return await I(o || void 0, t, f.CONFIRM_PAYMENT, {}), {
319
379
  paymentMethod: void 0
320
380
  };
321
- } catch (r) {
381
+ } catch (i) {
322
382
  return {
323
383
  error: {
324
- message: r instanceof Error ? r.message : "Payment failed",
384
+ message: i instanceof Error ? i.message : "Payment failed",
325
385
  code: "payment_error",
326
386
  type: "payment_error"
327
387
  }
@@ -329,6 +389,9 @@ function oe() {
329
389
  }
330
390
  }
331
391
  } : {
392
+ init: async () => {
393
+ throw new Error("PayConductor not initialized");
394
+ },
332
395
  confirmPayment: async () => {
333
396
  throw new Error("PayConductor not initialized");
334
397
  },
@@ -355,17 +418,18 @@ function oe() {
355
418
  }
356
419
  export {
357
420
  q as ALLOWED_ORIGINS,
358
- ee as ERROR_CODES,
359
- z as IFRAME_BASE_URL,
360
- W as IFRAME_DEFAULT_HEIGHT_VALUE,
361
- d as POST_MESSAGES,
362
- te as PayConductor,
363
- B as REQUEST_TIMEOUT,
421
+ ne as ERROR_CODES,
422
+ H as IFRAME_BASE_URL,
423
+ B as IFRAME_DEFAULT_HEIGHT_VALUE,
424
+ f as POST_MESSAGES,
425
+ oe as PayConductor,
426
+ re as PayConductorCheckoutElement,
427
+ W as REQUEST_TIMEOUT,
364
428
  j as buildIframeUrl,
365
- te as default,
429
+ oe as default,
366
430
  Q as generateRequestId,
367
431
  $ as isValidOrigin,
368
- oe as useElement,
369
- ne as usePayConductor
432
+ ae as usePayConductor,
433
+ ie as usePayconductorElement
370
434
  };
371
435
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.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/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\";\nexport const IFRAME_BASE_URL_DEV = \"http://localhost:5175\";\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 intentToken?: 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 paymentIntentId: 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.port === \"5175\");\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.includes(origin);\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 intentToken: options.intentToken\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, \"intentToken\" | \"theme\" | \"locale\" | \"paymentMethods\" | \"defaultPaymentMethod\" | \"showPaymentButtons\" | \"nuPayConfig\">): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.CONFIG, 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 if (!isValidOrigin(event.origin, ALLOWED_ORIGINS)) {\n return;\n }\n const payload: MessagePayload = event.data;\n const {\n requestId,\n type,\n data,\n error\n } = payload;\n if (requestId && pendingMap?.has(requestId)) {\n const {\n resolve,\n reject\n } = pendingMap.get(requestId)!;\n pendingMap.delete(requestId);\n if (error) {\n reject(new Error(error.message));\n } else {\n resolve(data);\n }\n return;\n }\n if (type === POST_MESSAGES.READY) {\n setIsReady(true);\n onReady?.();\n return;\n }\n if (type === POST_MESSAGES.ERROR) {\n setError(error?.message || \"Unknown error\");\n onError?.(new Error(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, useRef, useEffect } from \"react\";\n\nexport interface PayConductorEmbedProps extends PayConductorConfig {\n height?: string;\n children?: any;\n showActionButtons?: 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 { IFRAME_DEFAULT_HEIGHT_VALUE } from \"./constants\";\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 iframeRef = useRef<any>(null);\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 [pendingMap, setPendingMap] = useState<PayConductorState[\"pendingMap\"]>(\n () => null\n );\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<\n PayConductorState[\"selectedPaymentMethod\"]\n >(() => null);\n\n const [configSent, setConfigSent] = useState(() => false);\n\n useEffect(() => {\n setIframeUrl(\n buildIframeUrl({\n publicKey: props.publicKey,\n })\n );\n setIsLoaded(true);\n setPendingMap(createPendingRequestsMap());\n const frame: PayConductorFrame = {\n iframe: iframeRef.current,\n get isReady() {\n return isReady;\n },\n get error() {\n return error;\n },\n };\n const config: PayConductorConfig = {\n publicKey: props.publicKey,\n intentToken: props.intentToken,\n theme: props.theme,\n locale: props.locale,\n paymentMethods: props.paymentMethods,\n defaultPaymentMethod: props.defaultPaymentMethod,\n };\n const api: PayConductorApi = {\n confirmPayment: (options: { intentToken: string }) =>\n confirmPayment(iframeRef.current, pendingMap, options),\n validate: (data: unknown) =>\n validatePayment(iframeRef.current, pendingMap, data),\n reset: () => resetPayment(iframeRef.current, pendingMap),\n getSelectedPaymentMethod: () => selectedPaymentMethod,\n };\n window.PayConductor = {\n frame,\n config,\n api,\n selectedPaymentMethod: selectedPaymentMethod,\n };\n const sendConfigToIframe = async () => {\n if (!configSent && iframeRef.current) {\n setConfigSent(true);\n sendConfig(iframeRef.current, pendingMap, {\n intentToken: props.intentToken,\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 handleMessageEvent(\n event,\n pendingMap,\n (val) => {\n setIsReady(val);\n if (val) {\n sendConfigToIframe();\n }\n },\n (val) => {\n setError(val);\n },\n props.onReady,\n props.onError,\n (data) => props.onPaymentComplete?.(data as PaymentResult),\n (data) => props.onPaymentFailed?.(data as PaymentResult),\n (data) => props.onPaymentPending?.(data as PaymentResult),\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 }, []);\n\n return (\n <div\n className=\"payconductor\"\n id=\"payconductor\"\n style={{\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {props.children}\n {isLoaded ? (\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 PayConductor;\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 intentToken: ctx.config.intentToken,\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, 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 intentToken: string;\n returnUrl?: string;\n};\nexport type UpdateOptions = {\n billingDetails?: Partial<BillingDetails>;\n address?: Partial<BillingDetails[\"address\"]>;\n};\nexport interface UseElementReturn {\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 updateIntentToken: (intentToken: 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) return null;\n const iframeRef = ctx.frame.iframe;\n if (iframeRef instanceof HTMLIFrameElement) {\n return iframeRef;\n }\n if (iframeRef && typeof iframeRef === \"object\" && \"value\" in iframeRef) {\n const value = iframeRef.value;\n if (value instanceof HTMLIFrameElement) {\n return value;\n }\n }\n return null;\n}\nexport function useElement(): UseElementReturn {\n const ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n const sendToIframe = (type: string, data?: unknown) => {\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 if (!ctx) {\n return {\n confirmPayment: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n validate: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n reset: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n getSelectedPaymentMethod: () => null,\n updateConfig: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n updateIntentToken: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n update: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n submit: async () => {\n throw new Error(\"PayConductor not initialized\");\n }\n };\n }\n return {\n confirmPayment: async (options: ConfirmPaymentOptions): Promise<PaymentResult> => {\n const iframe = getIframeFromContext(ctx);\n const pendingMap = createPendingRequestsMap();\n if (!options.intentToken) {\n throw new Error(\"Intent token is required\");\n }\n return confirmPayment(iframe || undefined, pendingMap, options);\n },\n validate: ctx.api.validate,\n reset: ctx.api.reset,\n getSelectedPaymentMethod: (): PaymentMethod | null => {\n return ctx?.selectedPaymentMethod ?? null;\n },\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n intentToken: currentConfig?.intentToken,\n theme: config.theme ?? currentConfig?.theme,\n locale: config.locale ?? currentConfig?.locale,\n paymentMethods: config.paymentMethods ?? currentConfig?.paymentMethods\n });\n },\n updateIntentToken: (intentToken: string) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n intentToken: intentToken,\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(ctx);\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","createPendingRequestsMap","sendMessageToIframe","iframe","pendingMap","type","data","resolve","reject","requestId","confirmPayment","options","validatePayment","resetPayment","sendConfig","handleMessageEvent","event","setIsReady","setError","onReady","onError","onPaymentComplete","onPaymentFailed","onPaymentPending","onPaymentMethodSelected","payload","error","PayConductor","props","iframeRef","useRef","isLoaded","setIsLoaded","useState","isReady","iframeUrl","setIframeUrl","setPendingMap","selectedPaymentMethod","setSelectedPaymentMethod","configSent","setConfigSent","useEffect","frame","api","sendConfigToIframe","eventHandler","val","_a","method","jsxs","jsx","usePayConductor","ctx","getIframeFromContext","value","useElement","sendToIframe","currentConfig","intentToken"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.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\";\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 intentToken?: 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 paymentIntentId: 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\");\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.includes(origin);\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 intentToken: options.intentToken\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 if (!isValidOrigin(event.origin, ALLOWED_ORIGINS)) {\n return;\n }\n const payload: MessagePayload = event.data;\n const {\n requestId,\n type,\n data,\n error\n } = payload;\n if (requestId && 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.READY) {\n setIsReady(true);\n onReady?.();\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, \"intentToken\"> {\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 [pendingMap, setPendingMap] = useState<PayConductorState[\"pendingMap\"]>(\n () => null\n );\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<\n PayConductorState[\"selectedPaymentMethod\"]\n >(() => null);\n\n const [configSent, setConfigSent] = useState(() => false);\n\n useEffect(() => {\n const log = (...args: any[]) => {\n if (props.debug) {\n console.log(\"[PayConductor]\", ...args);\n }\n };\n log(\"SDK initializing\", {\n publicKey: props.publicKey,\n });\n const iframeUrl = buildIframeUrl({\n publicKey: props.publicKey,\n });\n setIframeUrl(iframeUrl);\n setIsLoaded(true);\n setPendingMap(createPendingRequestsMap());\n log(\"iframeUrl built:\", iframeUrl);\n log(\"pendingMap created\");\n const getIframe = (): HTMLIFrameElement | undefined => {\n const ref = window.PayConductor?.frame?.iframe;\n if (!ref) return undefined;\n if (ref instanceof HTMLIFrameElement) return ref;\n if (typeof ref === \"object\" && ref !== null) {\n if (\"current\" in ref) return (ref as any).current ?? undefined;\n if (\"value\" in ref) return (ref as any).value ?? undefined;\n }\n return ref as HTMLIFrameElement;\n };\n const frame: PayConductorFrame = {\n iframe: null,\n iframeUrl,\n get isReady() {\n return isReady;\n },\n get error() {\n return error;\n },\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: { intentToken: string }) => {\n log(\"confirmPayment called\", {\n intentToken: options.intentToken,\n });\n return confirmPayment(getIframe(), pendingMap, options);\n },\n validate: (data: unknown) => {\n log(\"validate called\", data);\n return validatePayment(getIframe(), pendingMap, data);\n },\n reset: () => {\n log(\"reset called\");\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(\"window.PayConductor registered\");\n const sendConfigToIframe = async () => {\n if (!configSent) {\n const iframe = getIframe();\n if (!iframe) {\n log(\"sendConfigToIframe: iframe not found, skipping\");\n return;\n }\n setConfigSent(true);\n log(\"sendConfig →\", {\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 handleMessageEvent(\n event,\n pendingMap,\n (val) => {\n setIsReady(val);\n if (val) {\n log(\"iframe Ready — sending config\");\n sendConfigToIframe();\n }\n },\n (val) => {\n setError(val);\n log(\"iframe Error:\", val);\n },\n () => {\n log(\"onReady fired\");\n props.onReady?.();\n },\n (err) => {\n log(\"onError fired:\", err);\n props.onError?.(err);\n },\n (data) => {\n log(\"PaymentComplete:\", data);\n props.onPaymentComplete?.(data as PaymentResult);\n },\n (data) => {\n log(\"PaymentFailed:\", data);\n props.onPaymentFailed?.(data as PaymentResult);\n },\n (data) => {\n log(\"PaymentPending:\", data);\n props.onPaymentPending?.(data as PaymentResult);\n },\n (method) => {\n log(\"PaymentMethodSelected:\", 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 log(\"SDK initialized — waiting for PayConductorCheckoutElement\");\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 ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n if (!ctx) {\n console.warn(\n \"[PayConductorCheckoutElement] window.PayConductor not found — ensure <PayConductor> is mounted before <PayConductorCheckoutElement>\"\n );\n }\n if (ctx?.frame) {\n setIframeUrl(ctx.frame.iframeUrl || \"\");\n ctx.frame.iframe = iframeRef.current;\n console.log(\n \"[PayConductorCheckoutElement] iframe registered, src:\",\n iframeUrl\n );\n }\n setIsLoaded(true);\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 intentToken: ctx.config.intentToken,\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 intentToken: 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 updateIntentToken: (intentToken: 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) return null;\n const iframeRef = ctx.frame.iframe;\n if (iframeRef instanceof HTMLIFrameElement) {\n return iframeRef;\n }\n if (iframeRef && typeof iframeRef === \"object\" && \"value\" in iframeRef) {\n const value = iframeRef.value;\n if (value instanceof HTMLIFrameElement) {\n return value;\n }\n }\n return null;\n}\nexport function usePayconductorElement(): UsePayconductorElementReturn {\n const ctx = typeof window !== \"undefined\" ? window.PayConductor : null;\n const sendToIframe = (type: string, data?: unknown) => {\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 if (!ctx) {\n return {\n init: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n confirmPayment: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n validate: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n reset: async () => {\n throw new Error(\"PayConductor not initialized\");\n },\n getSelectedPaymentMethod: () => null,\n updateConfig: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n updateIntentToken: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n update: () => {\n throw new Error(\"PayConductor not initialized\");\n },\n submit: async () => {\n throw new Error(\"PayConductor not initialized\");\n }\n };\n }\n return {\n init: async (config: PayConductorConfig): Promise<void> => {\n const iframe = getIframeFromContext(ctx);\n const pendingMap = createPendingRequestsMap();\n return sendInit(iframe || undefined, pendingMap, config);\n },\n confirmPayment: async (options: ConfirmPaymentOptions): Promise<PaymentResult> => {\n const iframe = getIframeFromContext(ctx);\n const pendingMap = createPendingRequestsMap();\n if (!options.intentToken) {\n throw new Error(\"Intent token is required\");\n }\n return confirmPayment(iframe || undefined, pendingMap, options);\n },\n validate: ctx.api.validate,\n reset: ctx.api.reset,\n getSelectedPaymentMethod: (): PaymentMethod | null => {\n return ctx?.selectedPaymentMethod ?? null;\n },\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n intentToken: currentConfig?.intentToken,\n theme: config.theme ?? currentConfig?.theme,\n locale: config.locale ?? currentConfig?.locale,\n paymentMethods: config.paymentMethods ?? currentConfig?.paymentMethods\n });\n },\n updateIntentToken: (intentToken: string) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n intentToken: intentToken,\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(ctx);\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","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","setPendingMap","selectedPaymentMethod","setSelectedPaymentMethod","configSent","setConfigSent","useEffect","log","args","getIframe","ref","_b","_a","frame","api","sendConfigToIframe","eventHandler","val","err","method","jsx","PayConductorCheckoutElement","iframeRef","useRef","ctx","usePayConductor","getIframeFromContext","value","usePayconductorElement","sendToIframe","currentConfig","intentToken"],"mappings":";;;AAMO,MAAMA,IAAuB,qCACvBC,IAAsB,yBAGtBC,IAAqB,KACrBC,IAAwB;AC4B9B,IAAKC,sBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,SAAS,UACTA,EAAA,SAAS,UACTA,EAAA,iBAAiB,kBACjBA,EAAA,WAAW,YACXA,EAAA,QAAQ,SANEA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SACRA,EAAA,kBAAkB,mBAClBA,EAAA,gBAAgB,iBAChBA,EAAA,iBAAiB,kBACjBA,EAAA,kBAAkB,mBAClBA,EAAA,wBAAwB,yBAPdA,IAAAA,KAAA,CAAA,CAAA;AC7CZ,MAAMC,IAAQ,OAAO,SAAW,QAAgB,OAAO,SAAS,aAAa,eAAe,OAAO,SAAS,aAAa,cAC5GC,IAAkBD,IAAQL,IAAsBD,GAChDQ,IAAkB,CAACP,GAAqBD,CAAoB,GAC5DS,IAA8BN,GAC9BO,IAAkBR,GAClBS,IAAgB;AAAA,EAC3B,MAAMP,EAAgB;AAAA,EACtB,QAAQA,EAAgB;AAAA,EACxB,QAAQA,EAAgB;AAAA,EACxB,iBAAiBA,EAAgB;AAAA,EACjC,UAAUA,EAAgB;AAAA,EAC1B,OAAOA,EAAgB;AAAA,EACvB,OAAOC,EAAgB;AAAA,EACvB,OAAOA,EAAgB;AAAA,EACvB,kBAAkBA,EAAgB;AAAA,EAClC,gBAAgBA,EAAgB;AAAA,EAChC,iBAAiBA,EAAgB;AAAA,EACjC,kBAAkBA,EAAgB;AAAA,EAClC,yBAAyBA,EAAgB;AAC3C,GACaO,KAAc;AAAA,EACzB,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,SAAS;AACX;AC5BO,SAASC,EAAeC,GAAoC;AACjE,QAAMC,IAAS,IAAI,gBAAgB;AAAA,IACjC,WAAWD,EAAO;AAAA,EAAA,CACnB;AACD,SAAO,GAAGP,CAAe,IAAIQ,EAAO,UAAU;AAChD;AACO,SAASC,IAA4B;AAC1C,SAAO,OAAO,WAAA;AAChB;AACO,SAASC,EAAcC,GAAgBC,GAAmC;AAC/E,SAAOA,EAAe,SAASD,CAAM;AACvC;ACTO,SAASE,IAAwD;AACtE,6BAAW,IAAA;AACb;AACO,SAASC,EAAoBC,GAAiDC,GAAgDC,GAAyCC,GAAkC;AAC9M,SAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AACtC,QAAI,CAACL,KAAU,EAAE,mBAAmBA,IAAS;AAC3C,MAAAK,EAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC;AAAA,IACF;AACA,QAAI,EAACL,KAAA,QAAAA,EAAQ,gBAAe;AAC1B,MAAAK,EAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC;AAAA,IACF;AACA,QAAI,CAACJ,GAAY;AACf,MAAAI,EAAO,IAAI,MAAM,kCAAkC,CAAC;AACpD;AAAA,IACF;AACA,UAAMC,IAAYZ,EAAA;AAClB,IAAAO,EAAW,IAAIK,GAAW;AAAA,MACxB,SAAAF;AAAA,MACA,QAAAC;AAAA,IAAA,CACD,GACDL,EAAO,cAAc,YAAY;AAAA,MAC/B,MAAAE;AAAA,MACA,MAAAC;AAAA,MACA,WAAAG;AAAA,IAAA,GACC,GAAG,GACN,WAAW,MAAM;AACf,MAAIL,KAAA,QAAAA,EAAY,IAAIK,OAClBL,EAAW,OAAOK,CAAS,GAC3BD,EAAO,IAAI,MAAM,iBAAiB,CAAC;AAAA,IAEvC,GAAGjB,CAAe;AAAA,EACpB,CAAC;AACH;AACO,SAASmB,EAAeP,GAAiDC,GAAgDO,GAAwD;AACtL,SAAOT,EAAoBC,GAAQC,GAAYZ,EAAc,iBAAiB;AAAA,IAC5E,aAAamB,EAAQ;AAAA,EAAA,CACtB;AACH;AACO,SAASC,EAAgBT,GAAiDC,GAAgDE,GAAiC;AAChK,SAAOJ,EAAoBC,GAAQC,GAAYZ,EAAc,UAAUc,CAAI;AAC7E;AACO,SAASO,EAAaV,GAAiDC,GAA+D;AAC3I,SAAOF,EAAoBC,GAAQC,GAAYZ,EAAc,KAAK;AACpE;AACO,SAASsB,EAAWX,GAAiDC,GAAgDT,GAAwJ;AAClR,SAAOO,EAAoBC,GAAQC,GAAYZ,EAAc,QAAQG,CAAM;AAC7E;AACO,SAASoB,EAASZ,GAAiDC,GAAgDT,GAA2C;AACnK,SAAOO,EAAoBC,GAAQC,GAAYZ,EAAc,MAAMG,CAAM;AAC3E;AAWO,SAASqB,EAAmBC,GAAqBb,GAAgDc,GAAsCC,GAA0CC,GAAsBC,GAAkCC,GAAmDC,GAAiDC,GAAkDC,GAA2D;AAC/b,MAAI,CAAC3B,EAAcmB,EAAM,QAAQ5B,CAAe;AAC9C;AAEF,QAAMqC,IAA0BT,EAAM,MAChC;AAAA,IACJ,WAAAR;AAAA,IACA,MAAAJ;AAAA,IACA,MAAAC;AAAA,IACA,OAAAqB;AAAA,EAAA,IACED;AACJ,MAAIjB,MAAaL,KAAA,QAAAA,EAAY,IAAIK,KAAY;AAC3C,UAAM;AAAA,MACJ,SAAAF;AAAA,MACA,QAAAC;AAAA,IAAA,IACEJ,EAAW,IAAIK,CAAS;AAC5B,IAAAL,EAAW,OAAOK,CAAS,GACvBkB,IACFnB,EAAO,IAAI,MAAM,OAAOmB,EAAM,OAAO,CAAC,CAAC,IAEvCpB,EAAQD,CAAI;AAEd;AAAA,EACF;AACA,MAAID,MAASb,EAAc,OAAO;AAChC,IAAA0B,EAAW,EAAI,GACfE,KAAA,QAAAA;AACA;AAAA,EACF;AACA,MAAIf,MAASb,EAAc,OAAO;AAChC,IAAA2B,GAASQ,KAAA,gBAAAA,EAAO,YAAW,eAAe,GAC1CN,KAAA,QAAAA,EAAU,IAAI,MAAM,OAAOM,KAAA,gBAAAA,EAAO,OAAO,CAAC;AAC1C;AAAA,EACF;AACA,MAAItB,MAASb,EAAc,kBAAkB;AAC3C,IAAIc,KAAQ,OAAOA,KAAS,YAAY,YAAYA,MAClDgB,KAAA,QAAAA,EAAoBhB;AAEtB;AAAA,EACF;AACA,MAAID,MAASb,EAAc,gBAAgB;AACzC,IAAIc,KAAQ,OAAOA,KAAS,YAAY,YAAYA,MAClDiB,KAAA,QAAAA,EAAkBjB;AAEpB;AAAA,EACF;AACA,MAAID,MAASb,EAAc,iBAAiB;AAC1C,IAAIc,KAAQ,OAAOA,KAAS,YAAY,YAAYA,MAClDkB,KAAA,QAAAA,EAAmBlB;AAErB;AAAA,EACF;AACA,MAAID,MAASb,EAAc,yBAAyB;AAClD,IAAIc,KAAQ,OAAOA,KAAS,YAAY,mBAAmBA,MACzDmB,KAAA,QAAAA,EAA0BnB,EAAK;AAEjC;AAAA,EACF;AACF;ACtFA,SAASsB,GAAaC,GAA+B;AACnD,QAAM,CAACC,GAAUC,CAAW,IAAIC;AAAA,IAC9B,MAAM;AAAA,EAAA,GAGF,CAACC,GAASf,CAAU,IAAIc;AAAA,IAC5B,MAAM;AAAA,EAAA,GAGF,CAACL,GAAOR,CAAQ,IAAIa,EAAqC,MAAM,IAAI,GAEnE,CAACE,GAAWC,CAAY,IAAIH;AAAA,IAChC,MAAM;AAAA,EAAA,GAGF,CAAC5B,GAAYgC,CAAa,IAAIJ;AAAA,IAClC,MAAM;AAAA,EAAA,GAGF,CAACK,GAAuBC,CAAwB,IAAIN,EAExD,MAAM,IAAI,GAEN,CAACO,GAAYC,CAAa,IAAIR,EAAS,MAAM,EAAK;AAExD,SAAAS,EAAU,MAAM;AACd,UAAMC,IAAM,IAAIC,MAAgB;AAC9B,MAAId,EAAM,SACR,QAAQ,IAAI,kBAAkB,GAAGc,CAAI;AAAA,IAEzC;AACA,IAAAD,EAAI,oBAAoB;AAAA,MACtB,WAAWb,EAAM;AAAA,IAAA,CAClB;AACD,UAAMK,IAAYxC,EAAe;AAAA,MAC/B,WAAWmC,EAAM;AAAA,IAAA,CAClB;AACD,IAAAM,EAAaD,CAAS,GACtBH,EAAY,EAAI,GAChBK,EAAcnC,GAA0B,GACxCyC,EAAI,oBAAoBR,CAAS,GACjCQ,EAAI,oBAAoB;AACxB,UAAME,IAAY,MAAqC;;AACrD,YAAMC,KAAMC,KAAAC,IAAA,OAAO,iBAAP,gBAAAA,EAAqB,UAArB,gBAAAD,EAA4B;AACxC,UAAKD,GACL;AAAA,YAAIA,aAAe,kBAAmB,QAAOA;AAC7C,YAAI,OAAOA,KAAQ,YAAYA,MAAQ,MAAM;AAC3C,cAAI,aAAaA,EAAK,QAAQA,EAAY,WAAW;AACrD,cAAI,WAAWA,EAAK,QAAQA,EAAY,SAAS;AAAA,QACnD;AACA,eAAOA;AAAA;AAAA,IACT,GACMG,IAA2B;AAAA,MAC/B,QAAQ;AAAA,MACR,WAAAd;AAAAA,MACA,IAAI,UAAU;AACZ,eAAOD;AAAA,MACT;AAAA,MACA,IAAI,QAAQ;AACV,eAAON;AAAA,MACT;AAAA,IAAA,GAEIhC,IAA6B;AAAA,MACjC,WAAWkC,EAAM;AAAA,MACjB,OAAOA,EAAM;AAAA,MACb,QAAQA,EAAM;AAAA,MACd,gBAAgBA,EAAM;AAAA,MACtB,sBAAsBA,EAAM;AAAA,IAAA,GAExBoB,IAAuB;AAAA,MAC3B,gBAAgB,CAACtC,OACf+B,EAAI,yBAAyB;AAAA,QAC3B,aAAa/B,EAAQ;AAAA,MAAA,CACtB,GACMD,EAAekC,KAAaxC,GAAYO,CAAO;AAAA,MAExD,UAAU,CAACL,OACToC,EAAI,mBAAmBpC,CAAI,GACpBM,EAAgBgC,KAAaxC,GAAYE,CAAI;AAAA,MAEtD,OAAO,OACLoC,EAAI,cAAc,GACX7B,EAAa+B,EAAA,GAAaxC,CAAU;AAAA,MAE7C,0BAA0B,MAAMiC;AAAA,IAAA;AAElC,WAAO,eAAe;AAAA,MACpB,OAAAW;AAAA,MACA,QAAArD;AAAA,MACA,KAAAsD;AAAA,MACA,uBAAAZ;AAAA,IAAA,GAEFK,EAAI,gCAAgC;AACpC,UAAMQ,IAAqB,YAAY;AACrC,UAAI,CAACX,GAAY;AACf,cAAMpC,IAASyC,EAAA;AACf,YAAI,CAACzC,GAAQ;AACX,UAAAuC,EAAI,gDAAgD;AACpD;AAAA,QACF;AACA,QAAAF,EAAc,EAAI,GAClBE,EAAI,gBAAgB;AAAA,UAClB,OAAOb,EAAM;AAAA,UACb,QAAQA,EAAM;AAAA,UACd,gBAAgBA,EAAM;AAAA,UACtB,sBAAsBA,EAAM;AAAA,UAC5B,oBAAoBA,EAAM;AAAA,QAAA,CAC3B,GACDf,EAAWX,GAAQC,GAAY;AAAA,UAC7B,OAAOyB,EAAM;AAAA,UACb,QAAQA,EAAM;AAAA,UACd,gBAAgBA,EAAM;AAAA,UACtB,sBAAsBA,EAAM;AAAA,UAC5B,oBAAoBA,EAAM;AAAA,UAC1B,aAAaA,EAAM;AAAA,QAAA,CACpB;AAAA,MACH;AAAA,IACF,GACMsB,IAAe,CAAClC,MAAwB;AAC5C,MAAAD;AAAA,QACEC;AAAA,QACAb;AAAA,QACA,CAACgD,MAAQ;AACP,UAAAlC,EAAWkC,CAAG,GACVA,MACFV,EAAI,+BAA+B,GACnCQ,EAAA;AAAA,QAEJ;AAAA,QACA,CAACE,MAAQ;AACP,UAAAjC,EAASiC,CAAG,GACZV,EAAI,iBAAiBU,CAAG;AAAA,QAC1B;AAAA,QACA,MAAM;;AACJ,UAAAV,EAAI,eAAe,IACnBK,IAAAlB,EAAM,YAAN,QAAAkB,EAAA,KAAAlB;AAAA,QACF;AAAA,QACA,CAACwB,MAAQ;;AACP,UAAAX,EAAI,kBAAkBW,CAAG,IACzBN,IAAAlB,EAAM,YAAN,QAAAkB,EAAA,KAAAlB,GAAgBwB;AAAA,QAClB;AAAA,QACA,CAAC/C,MAAS;;AACR,UAAAoC,EAAI,oBAAoBpC,CAAI,IAC5ByC,IAAAlB,EAAM,sBAAN,QAAAkB,EAAA,KAAAlB,GAA0BvB;AAAA,QAC5B;AAAA,QACA,CAACA,MAAS;;AACR,UAAAoC,EAAI,kBAAkBpC,CAAI,IAC1ByC,IAAAlB,EAAM,oBAAN,QAAAkB,EAAA,KAAAlB,GAAwBvB;AAAA,QAC1B;AAAA,QACA,CAACA,MAAS;;AACR,UAAAoC,EAAI,mBAAmBpC,CAAI,IAC3ByC,IAAAlB,EAAM,qBAAN,QAAAkB,EAAA,KAAAlB,GAAyBvB;AAAA,QAC3B;AAAA,QACA,CAACgD,MAAW;;AACV,UAAAZ,EAAI,0BAA0BY,CAAM,GACpChB,EAAyBgB,CAAM,GAC3B,OAAO,iBACT,OAAO,aAAa,wBAAwBA,KAE9CP,IAAAlB,EAAM,4BAAN,QAAAkB,EAAA,KAAAlB,GAAgCyB;AAAA,QAClC;AAAA,MAAA;AAAA,IAEJ;AACA,WAAO,iBAAiB,WAAWH,CAAY,GAC/CT,EAAI,2DAA2D;AAAA,EACjE,GAAG,CAAA,CAAE,GAGH,gBAAAa;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,IAAG;AAAA,MACH,OAAO;AAAA,QACL,SAAS;AAAA,MAAA;AAAA,MAGV,UAAA1B,EAAM;AAAA,IAAA;AAAA,EAAA;AAGb;AC9MA,SAAS2B,GAA4B3B,GAAyC;AAC5E,QAAM4B,IAAYC,EAAY,IAAI,GAC5B,CAACxB,GAAWC,CAAY,IAAIH,EAAS,MAAM,EAAE,GAE7C,CAACF,GAAUC,CAAW,IAAIC,EAAS,MAAM,EAAK;AAEpD,SAAAS,EAAU,MAAM;AACd,UAAMkB,IAAM,OAAO,SAAW,MAAc,OAAO,eAAe;AAClE,IAAKA,KACH,QAAQ;AAAA,MACN;AAAA,IAAA,GAGAA,KAAA,QAAAA,EAAK,UACPxB,EAAawB,EAAI,MAAM,aAAa,EAAE,GACtCA,EAAI,MAAM,SAASF,EAAU,SAC7B,QAAQ;AAAA,MACN;AAAA,MACAvB;AAAA,IAAA,IAGJH,EAAY,EAAI;AAAA,EAClB,GAAG,CAAA,CAAE,GAGH,gBAAAwB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,MAGR,eAAYrB,IACX,gBAAAqB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAM;AAAA,UACN,KAAKE;AAAA,UACL,KAAKvB;AAAA,UACL,OAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQL,EAAM,UAAUvC;AAAA,YACxB,QAAQ;AAAA,UAAA;AAAA,QACV;AAAA,MAAA,IAEA;AAAA,IAAA;AAAA,EAAA;AAGV;ACrDO,SAASsE,KAAyC;AACvD,QAAMD,IAAM,OAAO,SAAW,MAAc,OAAO,eAAe,MAC5DhE,IAASgE,KAAA,QAAAA,EAAK,SAAS;AAAA,IAC3B,WAAWA,EAAI,OAAO;AAAA,IACtB,aAAaA,EAAI,OAAO;AAAA,IACxB,OAAOA,EAAI,OAAO;AAAA,IAClB,QAAQA,EAAI,OAAO;AAAA,EAAA,IACjB,CAAA,GACEX,IAAQW,KAAA,QAAAA,EAAK,QAAQ;AAAA,IACzB,QAAQA,EAAI,MAAM;AAAA,IAClB,SAASA,EAAI,MAAM;AAAA,IACnB,OAAOA,EAAI,MAAM;AAAA,EAAA,IACf;AAAA,IACF,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,EAAA;AAET,SAAO;AAAA,IACL,GAAGhE;AAAA,IACH,GAAGqD;AAAA,EAAA;AAEP;ACMA,SAASa,EAAqBF,GAA2D;;AACvF,MAAI,GAACZ,IAAAY,KAAA,gBAAAA,EAAK,UAAL,QAAAZ,EAAY,QAAQ,QAAO;AAChC,QAAMU,IAAYE,EAAI,MAAM;AAC5B,MAAIF,aAAqB;AACvB,WAAOA;AAET,MAAIA,KAAa,OAAOA,KAAc,YAAY,WAAWA,GAAW;AACtE,UAAMK,IAAQL,EAAU;AACxB,QAAIK,aAAiB;AACnB,aAAOA;AAAA,EAEX;AACA,SAAO;AACT;AACO,SAASC,KAAuD;AACrE,QAAMJ,IAAM,OAAO,SAAW,MAAc,OAAO,eAAe,MAC5DK,IAAe,CAAC3D,GAAcC,MAAmB;AACrD,QAAI,CAACqD,EAAK;AACV,UAAMxD,IAAS0D,EAAqBF,CAAG;AACvC,IAAIxD,KAAA,QAAAA,EAAQ,iBACVA,EAAO,cAAc,YAAY;AAAA,MAC/B,MAAAE;AAAA,MACA,MAAAC;AAAA,IAAA,GACC,GAAG;AAAA,EAEV;AACA,SAAKqD,IA6BE;AAAA,IACL,MAAM,OAAOhE,MAA8C;AACzD,YAAMQ,IAAS0D,EAAqBF,CAAG,GACjCvD,IAAaH,EAAA;AACnB,aAAOc,EAASZ,KAAU,QAAWC,GAAYT,CAAM;AAAA,IACzD;AAAA,IACA,gBAAgB,OAAOgB,MAA2D;AAChF,YAAMR,IAAS0D,EAAqBF,CAAG,GACjCvD,IAAaH,EAAA;AACnB,UAAI,CAACU,EAAQ;AACX,cAAM,IAAI,MAAM,0BAA0B;AAE5C,aAAOD,EAAeP,KAAU,QAAWC,GAAYO,CAAO;AAAA,IAChE;AAAA,IACA,UAAUgD,EAAI,IAAI;AAAA,IAClB,OAAOA,EAAI,IAAI;AAAA,IACf,0BAA0B,OACjBA,KAAA,gBAAAA,EAAK,0BAAyB;AAAA,IAEvC,cAAc,CAAChE,MAAqF;AAClG,YAAMsE,IAAgBN,EAAI;AAC1B,MAAAK,EAAaxE,EAAc,QAAQ;AAAA,QACjC,WAAWyE,KAAA,gBAAAA,EAAe;AAAA,QAC1B,aAAaA,KAAA,gBAAAA,EAAe;AAAA,QAC5B,OAAOtE,EAAO,UAASsE,KAAA,gBAAAA,EAAe;AAAA,QACtC,QAAQtE,EAAO,WAAUsE,KAAA,gBAAAA,EAAe;AAAA,QACxC,gBAAgBtE,EAAO,mBAAkBsE,KAAA,gBAAAA,EAAe;AAAA,MAAA,CACzD;AAAA,IACH;AAAA,IACA,mBAAmB,CAACC,MAAwB;AAC1C,YAAMD,IAAgBN,EAAI;AAC1B,MAAAK,EAAaxE,EAAc,QAAQ;AAAA,QACjC,WAAWyE,KAAA,gBAAAA,EAAe;AAAA,QAC1B,aAAAC;AAAA,QACA,OAAOD,KAAA,gBAAAA,EAAe;AAAA,QACtB,QAAQA,KAAA,gBAAAA,EAAe;AAAA,QACvB,gBAAgBA,KAAA,gBAAAA,EAAe;AAAA,MAAA,CAChC;AAAA,IACH;AAAA,IACA,QAAQ,CAACtD,MAA2B;AAClC,MAAAqD,EAAaxE,EAAc,QAAQmB,CAAO;AAAA,IAC5C;AAAA,IACA,QAAQ,YAAmC;AACzC,YAAMR,IAAS0D,EAAqBF,CAAG,GACjCvD,IAAaH,EAAA;AACnB,UAAI;AACF,qBAAMC,EAAoBC,KAAU,QAAWC,GAAYZ,EAAc,iBAAiB,EAAE,GACrF;AAAA,UACL,eAAe;AAAA,QAAA;AAAA,MAEnB,SAASmC,GAAO;AAEd,eAAO;AAAA,UACL,OAAO;AAAA,YACL,SAHYA,aAAiB,QAAQA,EAAM,UAAU;AAAA,YAIrD,MAAM;AAAA,YACN,MAAM;AAAA,UAAA;AAAA,QACR;AAAA,MAEJ;AAAA,IACF;AAAA,EAAA,IAxFO;AAAA,IACL,MAAM,YAAY;AAChB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,IACA,gBAAgB,YAAY;AAC1B,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,IACA,UAAU,YAAY;AACpB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,IACA,OAAO,YAAY;AACjB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,IACA,0BAA0B,MAAM;AAAA,IAChC,cAAc,MAAM;AAClB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,IACA,mBAAmB,MAAM;AACvB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,IACA,QAAQ,MAAM;AACZ,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,IACA,QAAQ,YAAY;AAClB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,EAAA;AAiEN;"}
@@ -1,2 +1,3 @@
1
1
  export { usePayConductor } from './use-payconductor';
2
- export { useElement } from './use-element';
2
+ export { usePayconductorElement } from './use-element';
3
+ export type { UsePayconductorElementReturn } from './use-element';
@@ -16,7 +16,8 @@ export type UpdateOptions = {
16
16
  billingDetails?: Partial<BillingDetails>;
17
17
  address?: Partial<BillingDetails["address"]>;
18
18
  };
19
- export interface UseElementReturn {
19
+ export interface UsePayconductorElementReturn {
20
+ init: (config: PayConductorConfig) => Promise<void>;
20
21
  confirmPayment: (options: ConfirmPaymentOptions) => Promise<PaymentResult>;
21
22
  validate: (data: unknown) => Promise<boolean>;
22
23
  reset: () => Promise<void>;
@@ -26,4 +27,4 @@ export interface UseElementReturn {
26
27
  update: (options: UpdateOptions) => void;
27
28
  submit: () => Promise<SubmitResult>;
28
29
  }
29
- export declare function useElement(): UseElementReturn;
30
+ export declare function usePayconductorElement(): UsePayconductorElementReturn;
@@ -1,6 +1,6 @@
1
1
  export declare const APP_BASE_URL_PROD = "https://app.payconductor.ai";
2
2
  export declare const API_BASE_URL_PROD = "https://app.payconductor.ai/api/v1";
3
- export declare const IFRAME_BASE_URL_PROD = "https://iframe.payconductor.ai";
3
+ export declare const IFRAME_BASE_URL_PROD = "https://iframe.payconductor.ai/v1";
4
4
  export declare const IFRAME_BASE_URL_DEV = "http://localhost:5175";
5
5
  export declare const APP_BASE_URL_DEV = "http://localhost:3000";
6
6
  export declare const DEFAULT_LOCALE = "pt-BR";
@@ -6,5 +6,6 @@ export declare function sendMessageToIframe(iframe: HTMLIFrameElement | Element
6
6
  export declare function confirmPayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, options: ConfirmPaymentOptions): Promise<PaymentResult>;
7
7
  export declare function validatePayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, data: unknown): Promise<boolean>;
8
8
  export declare function resetPayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null): Promise<void>;
9
- export declare function sendConfig(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: Pick<PayConductorConfig, "intentToken" | "theme" | "locale" | "paymentMethods" | "defaultPaymentMethod" | "showPaymentButtons" | "nuPayConfig">): Promise<void>;
9
+ export declare function sendConfig(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: Pick<PayConductorConfig, "theme" | "locale" | "paymentMethods" | "defaultPaymentMethod" | "showPaymentButtons" | "nuPayConfig">): Promise<void>;
10
+ export declare function sendInit(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: PayConductorConfig): Promise<void>;
10
11
  export declare 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): void;
@@ -0,0 +1,5 @@
1
+ export interface PayConductorCheckoutElementProps {
2
+ height?: string;
3
+ }
4
+ declare function PayConductorCheckoutElement(props: PayConductorCheckoutElementProps): import("react/jsx-runtime").JSX.Element;
5
+ export default PayConductorCheckoutElement;
@@ -1,8 +1,8 @@
1
1
  import { PayConductorConfig, PaymentMethod, PaymentResult } from './iframe/types';
2
- export interface PayConductorEmbedProps extends PayConductorConfig {
3
- height?: string;
2
+ export interface PayConductorEmbedProps extends Omit<PayConductorConfig, "intentToken"> {
4
3
  children?: any;
5
4
  showActionButtons?: boolean;
5
+ debug?: boolean;
6
6
  onReady?: () => void;
7
7
  onError?: (error: Error) => void;
8
8
  onPaymentComplete?: (result: PaymentResult) => void;
@@ -21,6 +21,7 @@ export type PayConductorApi = {
21
21
  };
22
22
  export type PayConductorFrame = {
23
23
  iframe: HTMLIFrameElement | Element | unknown | null;
24
+ iframeUrl?: string;
24
25
  isReady: boolean;
25
26
  error: string | null;
26
27
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payconductor-sdk-web/library-rsc",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "React Server Components SDK for PayConductor (Next.js)",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",