@payconductor-sdk-web/library-react 1.0.3 → 1.0.5

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/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "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 strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const D=require("react/jsx-runtime"),m=require("react"),L="https://iframe.payconductor.ai/v1",O="http://localhost:5175",B=3e4,W="600px";var w=(e=>(e.Init="Init",e.Config="Config",e.Update="Update",e.ConfirmPayment="ConfirmPayment",e.Validate="Validate",e.Reset="Reset",e))(w||{}),I=(e=>(e.Ready="Ready",e.Error="Error",e.PaymentComplete="PaymentComplete",e.PaymentFailed="PaymentFailed",e.PaymentPending="PaymentPending",e.ValidationError="ValidationError",e.PaymentMethodSelected="PaymentMethodSelected",e))(I||{});const Q=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),U=Q?O:L,b=[O,L],v=W,F=B,s={INIT:w.Init,CONFIG:w.Config,UPDATE:w.Update,CONFIRM_PAYMENT:w.ConfirmPayment,VALIDATE:w.Validate,RESET:w.Reset,READY:I.Ready,ERROR:I.Error,PAYMENT_COMPLETE:I.PaymentComplete,PAYMENT_FAILED:I.PaymentFailed,PAYMENT_PENDING:I.PaymentPending,VALIDATION_ERROR:I.ValidationError,PAYMENT_METHOD_SELECTED:I.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`${U}?${n.toString()}`}function V(){return crypto.randomUUID()}function g(e,n){return n.includes(e)}function S(){return new Map}function R(e,n,r,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=V();n.set(l,{resolve:i,reject:f}),e.contentWindow.postMessage({type:r,data:t,requestId:l},"*"),setTimeout(()=>{n!=null&&n.has(l)&&(n.delete(l),f(new Error("Request timeout")))},F)})}function Y(e,n,r){return R(e,n,s.CONFIRM_PAYMENT,{orderId:r.orderId})}function J(e,n,r){return R(e,n,s.VALIDATE,r)}function X(e,n){return R(e,n,s.RESET)}function Z(e,n,r){return R(e,n,s.CONFIG,r)}function x(e,n,r){return R(e,n,s.INIT,r)}function p(e,n,r,t,i,f,l,C,T,E){if(!g(e.origin,b))return;const N=e.data,{requestId:h,type:P,data:u,error:y}=N;if(h&&(n!=null&&n.has(h))){const{resolve:d,reject:M}=n.get(h);n.delete(h),y?M(new Error(String(y.message))):d(u);return}if(P===s.READY){r(!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&&(T==null||T(u));return}if(P===s.PAYMENT_METHOD_SELECTED){u&&typeof u=="object"&&"paymentMethod"in u&&(E==null||E(u.paymentMethod));return}}function G(e){const[n,r]=m.useState(()=>!1),[t,i]=m.useState(()=>!1),[f,l]=m.useState(()=>null),[C,T]=m.useState(()=>""),[E,N]=m.useState(()=>null),[h,P]=m.useState(()=>null),[u,y]=m.useState(()=>!1);return m.useEffect(()=>{const d=(...a)=>{e.debug&&console.log("[PayConductor]",...a)};d("SDK initializing",{publicKey:e.publicKey});const M=K({publicKey:e.publicKey});T(M),r(!0),N(S()),d("iframeUrl built:",M),d("pendingMap created");const _=()=>{var o,c;const a=(c=(o=window.PayConductor)==null?void 0:o.frame)==null?void 0:c.iframe;if(a){if(a instanceof HTMLIFrameElement)return a;if(typeof a=="object"&&a!==null){if("current"in a)return a.current??void 0;if("value"in a)return a.value??void 0}return a}},H={iframe:null,iframeUrl:M,get isReady(){return t},get error(){return f}},z={publicKey:e.publicKey,theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod},k={confirmPayment:a=>(d("confirmPayment called",{orderId:a.orderId}),Y(_(),E,a)),validate:a=>(d("validate called",a),J(_(),E,a)),reset:()=>(d("reset called"),X(_(),E)),getSelectedPaymentMethod:()=>h};window.PayConductor={frame:H,config:z,api:k,selectedPaymentMethod:h},d("window.PayConductor registered");const q=async()=>{if(!u){const a=_();if(!a){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(a,E,{theme:e.theme,locale:e.locale,paymentMethods:e.paymentMethods,defaultPaymentMethod:e.defaultPaymentMethod,showPaymentButtons:e.showPaymentButtons,nuPayConfig:e.nuPayConfig})}},j=a=>{p(a,E,o=>{i(o),o&&(d("iframe Ready — sending config"),q())},o=>{l(o),d("iframe Error:",o)},()=>{var o;d("onReady fired"),(o=e.onReady)==null||o.call(e)},o=>{var c;d("onError fired:",o),(c=e.onError)==null||c.call(e,o)},o=>{var c;d("PaymentComplete:",o),(c=e.onPaymentComplete)==null||c.call(e,o)},o=>{var c;d("PaymentFailed:",o),(c=e.onPaymentFailed)==null||c.call(e,o)},o=>{var c;d("PaymentPending:",o),(c=e.onPaymentPending)==null||c.call(e,o)},o=>{var c;d("PaymentMethodSelected:",o),P(o),window.PayConductor&&(window.PayConductor.selectedPaymentMethod=o),(c=e.onPaymentMethodSelected)==null||c.call(e,o)})};window.addEventListener("message",j),d("SDK initialized — waiting for PayConductorCheckoutElement")},[]),D.jsx("div",{className:"payconductor",id:"payconductor",style:{display:"contents"},children:e.children})}function ee(e){const n=m.useRef(null),[r,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:",r)),f(!0)},[]),D.jsx("div",{className:"payconductor-element",style:{width:"100%"},children:i&&r?D.jsx("iframe",{allow:"payment",title:"PayConductor",ref:n,src:r,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,orderId:e.config.orderId,theme:e.config.theme,locale:e.config.locale}:{},r=e!=null&&e.frame?{iframe:e.frame.iframe,isReady:e.frame.isReady,error:e.frame.error}:{iframe:null,isReady:!1,error:null};return{...n,...r}}function A(e){var r;if(!((r=e==null?void 0:e.frame)!=null&&r.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=(r,t)=>{if(!e)return;const i=A(e);i!=null&&i.contentWindow&&i.contentWindow.postMessage({type:r,data:t},"*")};return e?{init:async r=>{const t=A(e),i=S();return x(t||void 0,i,r)},confirmPayment:async r=>{const t=A(e),i=S();if(!r.orderId)throw new Error("Order ID is required");return Y(t||void 0,i,r)},validate:e.api.validate,reset:e.api.reset,getSelectedPaymentMethod:()=>(e==null?void 0:e.selectedPaymentMethod)??null,updateConfig:r=>{const t=e.config;n(s.CONFIG,{publicKey:t==null?void 0:t.publicKey,orderId:t==null?void 0:t.orderId,theme:r.theme??(t==null?void 0:t.theme),locale:r.locale??(t==null?void 0:t.locale),paymentMethods:r.paymentMethods??(t==null?void 0:t.paymentMethods)})},updateorderId:r=>{const t=e.config;n(s.CONFIG,{publicKey:t==null?void 0:t.publicKey,orderId:r,theme:t==null?void 0:t.theme,locale:t==null?void 0:t.locale,paymentMethods:t==null?void 0:t.paymentMethods})},update:r=>{n(s.UPDATE,r)},submit:async()=>{const r=A(e),t=S();try{return await R(r||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")},updateorderId:()=>{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=U;exports.IFRAME_DEFAULT_HEIGHT_VALUE=v;exports.POST_MESSAGES=s;exports.PayConductor=G;exports.PayConductorCheckoutElement=ee;exports.REQUEST_TIMEOUT=F;exports.buildIframeUrl=K;exports.default=G;exports.generateRequestId=V;exports.isValidOrigin=g;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 orderId?: string;\n theme?: PayConductorTheme;\n locale?: string;\n paymentMethods?: PaymentMethod[] | \"all\";\n defaultPaymentMethod?: PaymentMethod;\n paymentMethodsConfig?: PaymentMethodConfig[];\n methodsDirection?: \"vertical\" | \"horizontal\";\n showPaymentButtons?: boolean;\n /** Required when NuPay is an available payment method */\n nuPayConfig?: NuPayData;\n};\nexport type BillingDetails = {\n name: string;\n email?: string;\n phone?: string;\n address?: {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n };\n};\nexport type CardData = {\n number: string;\n expMonth: string;\n expYear: string;\n cvc: string;\n};\nexport type CreatePaymentMethodOptions = {\n billingDetails: BillingDetails;\n card?: CardData;\n};\nexport type PaymentMethodResult = {\n id: string;\n type: PaymentMethod;\n card?: {\n brand: string;\n last4: string;\n expMonth: number;\n expYear: number;\n };\n billingDetails?: BillingDetails;\n};\nexport type PaymentResult = {\n orderId: string;\n status: PaymentStatus;\n amount: number;\n currency: string;\n message?: string;\n};\nexport interface MessagePayload {\n type: OutgoingMessage | IncomingMessage;\n data?: unknown;\n requestId?: string;\n error?: {\n code: string;\n message: string;\n field?: string;\n };\n}\nexport type CardTokenData = {\n token: string;\n firstSixCardNumber?: string;\n};\nexport type CardFullData = {\n number: string;\n holderName: string;\n cvv: string;\n expiration: {\n month: number;\n year: number;\n };\n};\nexport type CardPaymentData = CardTokenData | CardFullData;\nexport type PixPaymentData = {\n paymentMethod: PaymentMethod.Pix;\n expirationInSeconds?: number;\n};\nexport type CreditCardPaymentData = {\n paymentMethod: PaymentMethod.CreditCard;\n card: CardPaymentData;\n installments: number;\n softDescriptor?: string;\n};\nexport type BankSlipPaymentData = {\n paymentMethod: PaymentMethod.BankSlip;\n expirationInDays?: number;\n};\nexport type NuPayData = {\n cancelUrl: string;\n merchantName: string;\n returnUrl: string;\n storeName?: string;\n};\nexport type NuPayPaymentData = {\n paymentMethod: PaymentMethod.NuPay;\n nuPay: NuPayData;\n};\nexport type PicPayPaymentData = {\n paymentMethod: PaymentMethod.PicPay;\n};\nexport type PaymentConfirmData = PixPaymentData | CreditCardPaymentData | BankSlipPaymentData | NuPayPaymentData | PicPayPaymentData","import { IFRAME_BASE_URL_DEV, IFRAME_BASE_URL_PROD, IFRAME_DEFAULT_HEIGHT, REQUEST_TIMEOUT_MS } from \"./iframe/constants\";\nimport { IncomingMessage, OutgoingMessage } from \"./iframe/types\";\nconst isDev = typeof window !== \"undefined\" && (window.location.hostname === \"localhost\" || window.location.hostname === \"127.0.0.1\");\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 orderId: options.orderId\n }) as Promise<PaymentResult>;\n}\nexport function validatePayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, data: unknown): Promise<boolean> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.VALIDATE, data) as Promise<boolean>;\n}\nexport function resetPayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.RESET) as Promise<void>;\n}\nexport function sendConfig(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\" | \"defaultPaymentMethod\" | \"showPaymentButtons\" | \"nuPayConfig\">): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.CONFIG, config) as Promise<void>;\n}\nexport function sendInit(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: PayConductorConfig): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.INIT, config) as Promise<void>;\n}\ntype MessagePayload = {\n requestId?: string;\n type?: string;\n data?: PaymentResult | {\n paymentMethod: PaymentMethod;\n };\n error?: {\n message?: string;\n };\n};\nexport function handleMessageEvent(event: MessageEvent, pendingMap: Map<string, PendingRequest> | null, setIsReady: (value: boolean) => void, setError: (value: string | null) => void, onReady?: () => void, onError?: (error: Error) => void, onPaymentComplete?: (data: PaymentResult) => void, onPaymentFailed?: (data: PaymentResult) => void, onPaymentPending?: (data: PaymentResult) => void, onPaymentMethodSelected?: (method: PaymentMethod) => void) {\n 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, \"orderId\"> {\n children?: any;\n showActionButtons?: boolean;\n debug?: boolean;\n onReady?: () => void;\n onError?: (error: Error) => void;\n onPaymentComplete?: (result: PaymentResult) => void;\n onPaymentFailed?: (result: PaymentResult) => void;\n onPaymentPending?: (result: PaymentResult) => void;\n onPaymentMethodSelected?: (method: PaymentMethod) => void;\n}\n\nimport type {\n PayConductorConfig,\n PaymentMethod,\n PaymentResult,\n} from \"./iframe/types\";\nimport {\n confirmPayment,\n createPendingRequestsMap,\n handleMessageEvent,\n resetPayment,\n sendConfig,\n validatePayment,\n} from \"./internal\";\nimport type {\n PayConductorApi,\n PayConductorFrame,\n PayConductorState,\n PendingRequest,\n} from \"./types\";\nimport { buildIframeUrl } from \"./utils\";\n\nfunction PayConductor(props: PayConductorEmbedProps) {\n const [isLoaded, setIsLoaded] = useState<PayConductorState[\"isLoaded\"]>(\n () => false\n );\n\n const [isReady, setIsReady] = useState<PayConductorState[\"isReady\"]>(\n () => false\n );\n\n const [error, setError] = useState<PayConductorState[\"error\"]>(() => null);\n\n const [iframeUrl, setIframeUrl] = useState<PayConductorState[\"iframeUrl\"]>(\n () => \"\"\n );\n\n const [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: { orderId: string }) => {\n log(\"confirmPayment called\", {\n orderId: options.orderId,\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 orderId: ctx.config.orderId,\n theme: ctx.config.theme,\n locale: ctx.config.locale\n } : {};\n const frame = ctx?.frame ? {\n iframe: ctx.frame.iframe,\n isReady: ctx.frame.isReady,\n error: ctx.frame.error\n } : {\n iframe: null,\n isReady: false,\n error: null\n };\n return {\n ...config,\n ...frame\n };\n}","import { POST_MESSAGES } from \"../constants\";\nimport type { BillingDetails, PayConductorConfig, PaymentMethod, PaymentResult } from \"../iframe/types\";\nimport { confirmPayment, createPendingRequestsMap, sendInit, sendMessageToIframe } from \"../internal\";\nexport type SubmitResult = {\n error?: {\n message: string;\n code?: string;\n type?: \"validation_error\" | \"payment_error\";\n };\n paymentMethod?: PaymentMethod;\n};\nexport type ConfirmPaymentOptions = {\n orderId: string;\n returnUrl?: string;\n};\nexport type UpdateOptions = {\n billingDetails?: Partial<BillingDetails>;\n address?: Partial<BillingDetails[\"address\"]>;\n};\nexport interface UsePayconductorElementReturn {\n init: (config: PayConductorConfig) => Promise<void>;\n confirmPayment: (options: ConfirmPaymentOptions) => Promise<PaymentResult>;\n validate: (data: unknown) => Promise<boolean>;\n reset: () => Promise<void>;\n getSelectedPaymentMethod: () => PaymentMethod | null;\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => void;\n updateorderId: (orderId: string) => void;\n update: (options: UpdateOptions) => void;\n submit: () => Promise<SubmitResult>;\n}\nfunction getIframeFromContext(ctx: typeof window.PayConductor): HTMLIFrameElement | null {\n if (!ctx?.frame?.iframe) 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 updateorderId: () => {\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.orderId) {\n throw new Error(\"Order ID 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 orderId: currentConfig?.orderId,\n theme: config.theme ?? currentConfig?.theme,\n locale: config.locale ?? currentConfig?.locale,\n paymentMethods: config.paymentMethods ?? currentConfig?.paymentMethods\n });\n },\n updateorderId: (orderId: string) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n orderId: orderId,\n theme: currentConfig?.theme,\n locale: currentConfig?.locale,\n paymentMethods: currentConfig?.paymentMethods\n });\n },\n update: (options: UpdateOptions) => {\n sendToIframe(POST_MESSAGES.UPDATE, options);\n },\n submit: async (): Promise<SubmitResult> => {\n const iframe = getIframeFromContext(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","orderId"],"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,22 +1,22 @@
1
- import { jsxs as F, jsx as k } from "react/jsx-runtime";
2
- import { useRef as V, useState as m, useEffect as Y } from "react";
3
- const C = "https://iframe.payconductor.ai", L = "http://localhost:5175", K = 3e4, G = "600px";
4
- 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 || {});
5
- 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 = {
6
- INIT: P.Init,
7
- CONFIG: P.Config,
8
- UPDATE: P.Update,
9
- CONFIRM_PAYMENT: P.ConfirmPayment,
10
- VALIDATE: P.Validate,
11
- RESET: P.Reset,
12
- READY: E.Ready,
13
- ERROR: E.Error,
14
- PAYMENT_COMPLETE: E.PaymentComplete,
15
- PAYMENT_FAILED: E.PaymentFailed,
16
- PAYMENT_PENDING: E.PaymentPending,
17
- VALIDATION_ERROR: E.ValidationError,
18
- PAYMENT_METHOD_SELECTED: E.PaymentMethodSelected
19
- }, ee = {
1
+ import { jsx as L } from "react/jsx-runtime";
2
+ import { useState as E, useEffect as S, useRef as g } from "react";
3
+ const U = "https://iframe.payconductor.ai/v1", b = "http://localhost:5175", z = 3e4, G = "600px";
4
+ var I = /* @__PURE__ */ ((e) => (e.Init = "Init", e.Config = "Config", e.Update = "Update", e.ConfirmPayment = "ConfirmPayment", e.Validate = "Validate", e.Reset = "Reset", e))(I || {}), 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 || {});
5
+ const H = typeof window < "u" && (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1"), k = H ? b : U, q = [b, U], B = G, W = z, f = {
6
+ INIT: I.Init,
7
+ CONFIG: I.Config,
8
+ UPDATE: I.Update,
9
+ CONFIRM_PAYMENT: I.ConfirmPayment,
10
+ VALIDATE: I.Validate,
11
+ RESET: I.Reset,
12
+ READY: h.Ready,
13
+ ERROR: h.Error,
14
+ PAYMENT_COMPLETE: h.PaymentComplete,
15
+ PAYMENT_FAILED: h.PaymentFailed,
16
+ PAYMENT_PENDING: h.PaymentPending,
17
+ VALIDATION_ERROR: h.ValidationError,
18
+ PAYMENT_METHOD_SELECTED: h.PaymentMethodSelected
19
+ }, ne = {
20
20
  INVALID_CLIENT: "InvalidClient",
21
21
  INVALID_TOKEN: "InvalidToken",
22
22
  NETWORK_ERROR: "NetworkError",
@@ -26,220 +26,276 @@ const H = typeof window < "u" && (window.location.hostname === "localhost" || wi
26
26
  TIMEOUT: "Timeout"
27
27
  };
28
28
  function j(e) {
29
- const t = new URLSearchParams({
29
+ const n = new URLSearchParams({
30
30
  publicKey: e.publicKey
31
31
  });
32
- return `${z}?${t.toString()}`;
32
+ return `${k}?${n.toString()}`;
33
33
  }
34
34
  function Q() {
35
35
  return crypto.randomUUID();
36
36
  }
37
- function $(e, t) {
38
- return t.includes(e);
37
+ function $(e, n) {
38
+ return n.includes(e);
39
39
  }
40
- function D() {
40
+ function N() {
41
41
  return /* @__PURE__ */ new Map();
42
42
  }
43
- function A(e, t, o, n) {
44
- return new Promise((r, l) => {
43
+ function R(e, n, o, t) {
44
+ return new Promise((i, m) => {
45
45
  if (!e || !("contentWindow" in e)) {
46
- l(new Error("Iframe not defined"));
46
+ m(new Error("Iframe not defined"));
47
47
  return;
48
48
  }
49
49
  if (!(e != null && e.contentWindow)) {
50
- l(new Error("Iframe not ready"));
50
+ m(new Error("Iframe not ready"));
51
51
  return;
52
52
  }
53
- if (!t) {
54
- l(new Error("Pending requests not initialized"));
53
+ if (!n) {
54
+ m(new Error("Pending requests not initialized"));
55
55
  return;
56
56
  }
57
- const u = Q();
58
- t.set(u, {
59
- resolve: r,
60
- reject: l
57
+ const c = Q();
58
+ n.set(c, {
59
+ resolve: i,
60
+ reject: m
61
61
  }), e.contentWindow.postMessage({
62
62
  type: o,
63
- data: n,
64
- requestId: u
63
+ data: t,
64
+ requestId: c
65
65
  }, "*"), setTimeout(() => {
66
- t != null && t.has(u) && (t.delete(u), l(new Error("Request timeout")));
67
- }, B);
66
+ n != null && n.has(c) && (n.delete(c), m(new Error("Request timeout")));
67
+ }, W);
68
68
  });
69
69
  }
70
- function O(e, t, o) {
71
- return A(e, t, d.CONFIRM_PAYMENT, {
72
- intentToken: o.intentToken
70
+ function v(e, n, o) {
71
+ return R(e, n, f.CONFIRM_PAYMENT, {
72
+ orderId: o.orderId
73
73
  });
74
74
  }
75
- function J(e, t, o) {
76
- return A(e, t, d.VALIDATE, o);
75
+ function J(e, n, o) {
76
+ return R(e, n, f.VALIDATE, o);
77
77
  }
78
- function X(e, t) {
79
- return A(e, t, d.RESET);
78
+ function X(e, n) {
79
+ return R(e, n, f.RESET);
80
80
  }
81
- function Z(e, t, o) {
82
- return A(e, t, d.CONFIG, o);
81
+ function Z(e, n, o) {
82
+ return R(e, n, f.CONFIG, o);
83
83
  }
84
- function x(e, t, o, n, r, l, u, w, h, I) {
84
+ function x(e, n, o) {
85
+ return R(e, n, f.INIT, o);
86
+ }
87
+ function p(e, n, o, t, i, m, c, C, T, y) {
85
88
  if (!$(e.origin, q))
86
89
  return;
87
- const y = e.data, {
88
- requestId: T,
89
- type: f,
90
- data: a,
90
+ const D = e.data, {
91
+ requestId: w,
92
+ type: P,
93
+ data: l,
91
94
  error: s
92
- } = y;
93
- if (T && (t != null && t.has(T))) {
95
+ } = D;
96
+ if (w && (n != null && n.has(w))) {
94
97
  const {
95
- resolve: _,
98
+ resolve: d,
96
99
  reject: M
97
- } = t.get(T);
98
- t.delete(T), s ? M(new Error(s.message)) : _(a);
100
+ } = n.get(w);
101
+ n.delete(w), s ? M(new Error(String(s.message))) : d(l);
99
102
  return;
100
103
  }
101
- if (f === d.READY) {
102
- o(!0), r == null || r();
104
+ if (P === f.READY) {
105
+ o(!0), i == null || i();
103
106
  return;
104
107
  }
105
- if (f === d.ERROR) {
106
- n((s == null ? void 0 : s.message) || "Unknown error"), l == null || l(new Error(s == null ? void 0 : s.message));
108
+ if (P === f.ERROR) {
109
+ t((s == null ? void 0 : s.message) || "Unknown error"), m == null || m(new Error(String(s == null ? void 0 : s.message)));
107
110
  return;
108
111
  }
109
- if (f === d.PAYMENT_COMPLETE) {
110
- a && typeof a == "object" && "status" in a && (u == null || u(a));
112
+ if (P === f.PAYMENT_COMPLETE) {
113
+ l && typeof l == "object" && "status" in l && (c == null || c(l));
111
114
  return;
112
115
  }
113
- if (f === d.PAYMENT_FAILED) {
114
- a && typeof a == "object" && "status" in a && (w == null || w(a));
116
+ if (P === f.PAYMENT_FAILED) {
117
+ l && typeof l == "object" && "status" in l && (C == null || C(l));
115
118
  return;
116
119
  }
117
- if (f === d.PAYMENT_PENDING) {
118
- a && typeof a == "object" && "status" in a && (h == null || h(a));
120
+ if (P === f.PAYMENT_PENDING) {
121
+ l && typeof l == "object" && "status" in l && (T == null || T(l));
119
122
  return;
120
123
  }
121
- if (f === d.PAYMENT_METHOD_SELECTED) {
122
- a && typeof a == "object" && "paymentMethod" in a && (I == null || I(a.paymentMethod));
124
+ if (P === f.PAYMENT_METHOD_SELECTED) {
125
+ l && typeof l == "object" && "paymentMethod" in l && (y == null || y(l.paymentMethod));
123
126
  return;
124
127
  }
125
128
  }
126
- function te(e) {
127
- const t = V(null), [o, n] = m(
129
+ function oe(e) {
130
+ const [n, o] = E(
128
131
  () => !1
129
- ), [r, l] = m(
132
+ ), [t, i] = E(
130
133
  () => !1
131
- ), [u, w] = m(() => null), [h, I] = m(
134
+ ), [m, c] = E(() => null), [C, T] = E(
132
135
  () => ""
133
- ), [y, T] = m(
136
+ ), [y, D] = E(
134
137
  () => null
135
- ), [f, a] = m(() => null), [s, _] = m(() => !1);
136
- return Y(() => {
137
- I(
138
- j({
139
- publicKey: e.publicKey
140
- })
141
- ), n(!0), T(D());
142
- const M = {
143
- iframe: t.current,
138
+ ), [w, P] = E(() => null), [l, s] = E(() => !1);
139
+ return S(() => {
140
+ const d = (...a) => {
141
+ e.debug && console.log("[PayConductor]", ...a);
142
+ };
143
+ d("SDK initializing", {
144
+ publicKey: e.publicKey
145
+ });
146
+ const M = j({
147
+ publicKey: e.publicKey
148
+ });
149
+ T(M), o(!0), D(N()), d("iframeUrl built:", M), d("pendingMap created");
150
+ const A = () => {
151
+ var r, u;
152
+ const a = (u = (r = window.PayConductor) == null ? void 0 : r.frame) == null ? void 0 : u.iframe;
153
+ if (a) {
154
+ if (a instanceof HTMLIFrameElement) return a;
155
+ if (typeof a == "object" && a !== null) {
156
+ if ("current" in a) return a.current ?? void 0;
157
+ if ("value" in a) return a.value ?? void 0;
158
+ }
159
+ return a;
160
+ }
161
+ }, O = {
162
+ iframe: null,
163
+ iframeUrl: M,
144
164
  get isReady() {
145
- return r;
165
+ return t;
146
166
  },
147
167
  get error() {
148
- return u;
168
+ return m;
149
169
  }
150
- }, S = {
170
+ }, F = {
151
171
  publicKey: e.publicKey,
152
- intentToken: e.intentToken,
153
172
  theme: e.theme,
154
173
  locale: e.locale,
155
174
  paymentMethods: e.paymentMethods,
156
175
  defaultPaymentMethod: e.defaultPaymentMethod
157
- }, U = {
158
- confirmPayment: (R) => O(t.current, y, R),
159
- validate: (R) => J(t.current, y, R),
160
- reset: () => X(t.current, y),
161
- getSelectedPaymentMethod: () => f
176
+ }, K = {
177
+ confirmPayment: (a) => (d("confirmPayment called", {
178
+ orderId: a.orderId
179
+ }), v(A(), y, a)),
180
+ validate: (a) => (d("validate called", a), J(A(), y, a)),
181
+ reset: () => (d("reset called"), X(A(), y)),
182
+ getSelectedPaymentMethod: () => w
162
183
  };
163
184
  window.PayConductor = {
164
- frame: M,
165
- config: S,
166
- api: U,
167
- selectedPaymentMethod: f
168
- };
169
- const b = async () => {
170
- !s && t.current && (_(!0), Z(t.current, y, {
171
- intentToken: e.intentToken,
172
- theme: e.theme,
173
- locale: e.locale,
174
- paymentMethods: e.paymentMethods,
175
- defaultPaymentMethod: e.defaultPaymentMethod,
176
- showPaymentButtons: e.showPaymentButtons,
177
- nuPayConfig: e.nuPayConfig
178
- }));
179
- }, v = (R) => {
180
- x(
181
- R,
185
+ frame: O,
186
+ config: F,
187
+ api: K,
188
+ selectedPaymentMethod: w
189
+ }, d("window.PayConductor registered");
190
+ const V = async () => {
191
+ if (!l) {
192
+ const a = A();
193
+ if (!a) {
194
+ d("sendConfigToIframe: iframe not found, skipping");
195
+ return;
196
+ }
197
+ s(!0), d("sendConfig →", {
198
+ theme: e.theme,
199
+ locale: e.locale,
200
+ paymentMethods: e.paymentMethods,
201
+ defaultPaymentMethod: e.defaultPaymentMethod,
202
+ showPaymentButtons: e.showPaymentButtons
203
+ }), Z(a, y, {
204
+ theme: e.theme,
205
+ locale: e.locale,
206
+ paymentMethods: e.paymentMethods,
207
+ defaultPaymentMethod: e.defaultPaymentMethod,
208
+ showPaymentButtons: e.showPaymentButtons,
209
+ nuPayConfig: e.nuPayConfig
210
+ });
211
+ }
212
+ }, Y = (a) => {
213
+ p(
214
+ a,
182
215
  y,
183
- (i) => {
184
- l(i), i && b();
216
+ (r) => {
217
+ i(r), r && (d("iframe Ready — sending config"), V());
218
+ },
219
+ (r) => {
220
+ c(r), d("iframe Error:", r);
185
221
  },
186
- (i) => {
187
- w(i);
222
+ () => {
223
+ var r;
224
+ d("onReady fired"), (r = e.onReady) == null || r.call(e);
188
225
  },
189
- e.onReady,
190
- e.onError,
191
- (i) => {
192
- var c;
193
- return (c = e.onPaymentComplete) == null ? void 0 : c.call(e, i);
226
+ (r) => {
227
+ var u;
228
+ d("onError fired:", r), (u = e.onError) == null || u.call(e, r);
194
229
  },
195
- (i) => {
196
- var c;
197
- return (c = e.onPaymentFailed) == null ? void 0 : c.call(e, i);
230
+ (r) => {
231
+ var u;
232
+ d("PaymentComplete:", r), (u = e.onPaymentComplete) == null || u.call(e, r);
198
233
  },
199
- (i) => {
200
- var c;
201
- return (c = e.onPaymentPending) == null ? void 0 : c.call(e, i);
234
+ (r) => {
235
+ var u;
236
+ d("PaymentFailed:", r), (u = e.onPaymentFailed) == null || u.call(e, r);
202
237
  },
203
- (i) => {
204
- var c;
205
- a(i), window.PayConductor && (window.PayConductor.selectedPaymentMethod = i), (c = e.onPaymentMethodSelected) == null || c.call(e, i);
238
+ (r) => {
239
+ var u;
240
+ d("PaymentPending:", r), (u = e.onPaymentPending) == null || u.call(e, r);
241
+ },
242
+ (r) => {
243
+ var u;
244
+ d("PaymentMethodSelected:", r), P(r), window.PayConductor && (window.PayConductor.selectedPaymentMethod = r), (u = e.onPaymentMethodSelected) == null || u.call(e, r);
206
245
  }
207
246
  );
208
247
  };
209
- window.addEventListener("message", v);
210
- }, []), /* @__PURE__ */ F(
248
+ window.addEventListener("message", Y), d("SDK initialized — waiting for PayConductorCheckoutElement");
249
+ }, []), /* @__PURE__ */ L(
211
250
  "div",
212
251
  {
213
252
  className: "payconductor",
214
253
  id: "payconductor",
215
254
  style: {
216
- width: "100%",
217
- position: "relative"
255
+ display: "contents"
256
+ },
257
+ children: e.children
258
+ }
259
+ );
260
+ }
261
+ function re(e) {
262
+ const n = g(null), [o, t] = E(() => ""), [i, m] = E(() => !1);
263
+ return S(() => {
264
+ const c = typeof window < "u" ? window.PayConductor : null;
265
+ c || console.warn(
266
+ "[PayConductorCheckoutElement] window.PayConductor not found — ensure <PayConductor> is mounted before <PayConductorCheckoutElement>"
267
+ ), c != null && c.frame && (t(c.frame.iframeUrl || ""), c.frame.iframe = n.current, console.log(
268
+ "[PayConductorCheckoutElement] iframe registered, src:",
269
+ o
270
+ )), m(!0);
271
+ }, []), /* @__PURE__ */ L(
272
+ "div",
273
+ {
274
+ className: "payconductor-element",
275
+ style: {
276
+ width: "100%"
218
277
  },
219
- children: [
220
- e.children,
221
- o ? /* @__PURE__ */ k(
222
- "iframe",
223
- {
224
- allow: "payment",
225
- title: "PayConductor",
226
- ref: t,
227
- src: h,
228
- style: {
229
- width: "100%",
230
- height: e.height || W,
231
- border: "none"
232
- }
278
+ children: i && o ? /* @__PURE__ */ L(
279
+ "iframe",
280
+ {
281
+ allow: "payment",
282
+ title: "PayConductor",
283
+ ref: n,
284
+ src: o,
285
+ style: {
286
+ width: "100%",
287
+ height: e.height || B,
288
+ border: "none"
233
289
  }
234
- ) : null
235
- ]
290
+ }
291
+ ) : null
236
292
  }
237
293
  );
238
294
  }
239
- function ne() {
240
- const e = typeof window < "u" ? window.PayConductor : null, t = e != null && e.config ? {
295
+ function ae() {
296
+ const e = typeof window < "u" ? window.PayConductor : null, n = e != null && e.config ? {
241
297
  publicKey: e.config.publicKey,
242
- intentToken: e.config.intentToken,
298
+ orderId: e.config.orderId,
243
299
  theme: e.config.theme,
244
300
  locale: e.config.locale
245
301
  } : {}, o = e != null && e.frame ? {
@@ -252,75 +308,79 @@ function ne() {
252
308
  error: null
253
309
  };
254
310
  return {
255
- ...t,
311
+ ...n,
256
312
  ...o
257
313
  };
258
314
  }
259
- function N(e) {
315
+ function _(e) {
260
316
  var o;
261
317
  if (!((o = e == null ? void 0 : e.frame) != null && o.iframe)) return null;
262
- const t = e.frame.iframe;
263
- if (t instanceof HTMLIFrameElement)
264
- return t;
265
- if (t && typeof t == "object" && "value" in t) {
266
- const n = t.value;
267
- if (n instanceof HTMLIFrameElement)
268
- return n;
318
+ const n = e.frame.iframe;
319
+ if (n instanceof HTMLIFrameElement)
320
+ return n;
321
+ if (n && typeof n == "object" && "value" in n) {
322
+ const t = n.value;
323
+ if (t instanceof HTMLIFrameElement)
324
+ return t;
269
325
  }
270
326
  return null;
271
327
  }
272
- function oe() {
273
- const e = typeof window < "u" ? window.PayConductor : null, t = (o, n) => {
328
+ function ie() {
329
+ const e = typeof window < "u" ? window.PayConductor : null, n = (o, t) => {
274
330
  if (!e) return;
275
- const r = N(e);
276
- r != null && r.contentWindow && r.contentWindow.postMessage({
331
+ const i = _(e);
332
+ i != null && i.contentWindow && i.contentWindow.postMessage({
277
333
  type: o,
278
- data: n
334
+ data: t
279
335
  }, "*");
280
336
  };
281
337
  return e ? {
338
+ init: async (o) => {
339
+ const t = _(e), i = N();
340
+ return x(t || void 0, i, o);
341
+ },
282
342
  confirmPayment: async (o) => {
283
- const n = N(e), r = D();
284
- if (!o.intentToken)
285
- throw new Error("Intent token is required");
286
- return O(n || void 0, r, o);
343
+ const t = _(e), i = N();
344
+ if (!o.orderId)
345
+ throw new Error("Order ID is required");
346
+ return v(t || void 0, i, o);
287
347
  },
288
348
  validate: e.api.validate,
289
349
  reset: e.api.reset,
290
350
  getSelectedPaymentMethod: () => (e == null ? void 0 : e.selectedPaymentMethod) ?? null,
291
351
  updateConfig: (o) => {
292
- const n = e.config;
293
- t(d.CONFIG, {
294
- publicKey: n == null ? void 0 : n.publicKey,
295
- intentToken: n == null ? void 0 : n.intentToken,
296
- theme: o.theme ?? (n == null ? void 0 : n.theme),
297
- locale: o.locale ?? (n == null ? void 0 : n.locale),
298
- paymentMethods: o.paymentMethods ?? (n == null ? void 0 : n.paymentMethods)
352
+ const t = e.config;
353
+ n(f.CONFIG, {
354
+ publicKey: t == null ? void 0 : t.publicKey,
355
+ orderId: t == null ? void 0 : t.orderId,
356
+ theme: o.theme ?? (t == null ? void 0 : t.theme),
357
+ locale: o.locale ?? (t == null ? void 0 : t.locale),
358
+ paymentMethods: o.paymentMethods ?? (t == null ? void 0 : t.paymentMethods)
299
359
  });
300
360
  },
301
- updateIntentToken: (o) => {
302
- const n = e.config;
303
- t(d.CONFIG, {
304
- publicKey: n == null ? void 0 : n.publicKey,
305
- intentToken: o,
306
- theme: n == null ? void 0 : n.theme,
307
- locale: n == null ? void 0 : n.locale,
308
- paymentMethods: n == null ? void 0 : n.paymentMethods
361
+ updateorderId: (o) => {
362
+ const t = e.config;
363
+ n(f.CONFIG, {
364
+ publicKey: t == null ? void 0 : t.publicKey,
365
+ orderId: o,
366
+ theme: t == null ? void 0 : t.theme,
367
+ locale: t == null ? void 0 : t.locale,
368
+ paymentMethods: t == null ? void 0 : t.paymentMethods
309
369
  });
310
370
  },
311
371
  update: (o) => {
312
- t(d.UPDATE, o);
372
+ n(f.UPDATE, o);
313
373
  },
314
374
  submit: async () => {
315
- const o = N(e), n = D();
375
+ const o = _(e), t = N();
316
376
  try {
317
- return await A(o || void 0, n, d.CONFIRM_PAYMENT, {}), {
377
+ return await R(o || void 0, t, f.CONFIRM_PAYMENT, {}), {
318
378
  paymentMethod: void 0
319
379
  };
320
- } catch (r) {
380
+ } catch (i) {
321
381
  return {
322
382
  error: {
323
- message: r instanceof Error ? r.message : "Payment failed",
383
+ message: i instanceof Error ? i.message : "Payment failed",
324
384
  code: "payment_error",
325
385
  type: "payment_error"
326
386
  }
@@ -328,6 +388,9 @@ function oe() {
328
388
  }
329
389
  }
330
390
  } : {
391
+ init: async () => {
392
+ throw new Error("PayConductor not initialized");
393
+ },
331
394
  confirmPayment: async () => {
332
395
  throw new Error("PayConductor not initialized");
333
396
  },
@@ -341,7 +404,7 @@ function oe() {
341
404
  updateConfig: () => {
342
405
  throw new Error("PayConductor not initialized");
343
406
  },
344
- updateIntentToken: () => {
407
+ updateorderId: () => {
345
408
  throw new Error("PayConductor not initialized");
346
409
  },
347
410
  update: () => {
@@ -354,17 +417,18 @@ function oe() {
354
417
  }
355
418
  export {
356
419
  q as ALLOWED_ORIGINS,
357
- ee as ERROR_CODES,
358
- z as IFRAME_BASE_URL,
359
- W as IFRAME_DEFAULT_HEIGHT_VALUE,
360
- d as POST_MESSAGES,
361
- te as PayConductor,
362
- B as REQUEST_TIMEOUT,
420
+ ne as ERROR_CODES,
421
+ k as IFRAME_BASE_URL,
422
+ B as IFRAME_DEFAULT_HEIGHT_VALUE,
423
+ f as POST_MESSAGES,
424
+ oe as PayConductor,
425
+ re as PayConductorCheckoutElement,
426
+ W as REQUEST_TIMEOUT,
363
427
  j as buildIframeUrl,
364
- te as default,
428
+ oe as default,
365
429
  Q as generateRequestId,
366
430
  $ as isValidOrigin,
367
- oe as useElement,
368
- ne as usePayConductor
431
+ ae as usePayConductor,
432
+ ie as usePayconductorElement
369
433
  };
370
434
  //# 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 orderId?: string;\n theme?: PayConductorTheme;\n locale?: string;\n paymentMethods?: PaymentMethod[] | \"all\";\n defaultPaymentMethod?: PaymentMethod;\n paymentMethodsConfig?: PaymentMethodConfig[];\n methodsDirection?: \"vertical\" | \"horizontal\";\n showPaymentButtons?: boolean;\n /** Required when NuPay is an available payment method */\n nuPayConfig?: NuPayData;\n};\nexport type BillingDetails = {\n name: string;\n email?: string;\n phone?: string;\n address?: {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n };\n};\nexport type CardData = {\n number: string;\n expMonth: string;\n expYear: string;\n cvc: string;\n};\nexport type CreatePaymentMethodOptions = {\n billingDetails: BillingDetails;\n card?: CardData;\n};\nexport type PaymentMethodResult = {\n id: string;\n type: PaymentMethod;\n card?: {\n brand: string;\n last4: string;\n expMonth: number;\n expYear: number;\n };\n billingDetails?: BillingDetails;\n};\nexport type PaymentResult = {\n orderId: string;\n status: PaymentStatus;\n amount: number;\n currency: string;\n message?: string;\n};\nexport interface MessagePayload {\n type: OutgoingMessage | IncomingMessage;\n data?: unknown;\n requestId?: string;\n error?: {\n code: string;\n message: string;\n field?: string;\n };\n}\nexport type CardTokenData = {\n token: string;\n firstSixCardNumber?: string;\n};\nexport type CardFullData = {\n number: string;\n holderName: string;\n cvv: string;\n expiration: {\n month: number;\n year: number;\n };\n};\nexport type CardPaymentData = CardTokenData | CardFullData;\nexport type PixPaymentData = {\n paymentMethod: PaymentMethod.Pix;\n expirationInSeconds?: number;\n};\nexport type CreditCardPaymentData = {\n paymentMethod: PaymentMethod.CreditCard;\n card: CardPaymentData;\n installments: number;\n softDescriptor?: string;\n};\nexport type BankSlipPaymentData = {\n paymentMethod: PaymentMethod.BankSlip;\n expirationInDays?: number;\n};\nexport type NuPayData = {\n cancelUrl: string;\n merchantName: string;\n returnUrl: string;\n storeName?: string;\n};\nexport type NuPayPaymentData = {\n paymentMethod: PaymentMethod.NuPay;\n nuPay: NuPayData;\n};\nexport type PicPayPaymentData = {\n paymentMethod: PaymentMethod.PicPay;\n};\nexport type PaymentConfirmData = PixPaymentData | CreditCardPaymentData | BankSlipPaymentData | NuPayPaymentData | PicPayPaymentData","import { IFRAME_BASE_URL_DEV, IFRAME_BASE_URL_PROD, IFRAME_DEFAULT_HEIGHT, REQUEST_TIMEOUT_MS } from \"./iframe/constants\";\nimport { IncomingMessage, OutgoingMessage } from \"./iframe/types\";\nconst isDev = typeof window !== \"undefined\" && (window.location.hostname === \"localhost\" || window.location.hostname === \"127.0.0.1\");\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 orderId: options.orderId\n }) as Promise<PaymentResult>;\n}\nexport function validatePayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, data: unknown): Promise<boolean> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.VALIDATE, data) as Promise<boolean>;\n}\nexport function resetPayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.RESET) as Promise<void>;\n}\nexport function sendConfig(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\" | \"defaultPaymentMethod\" | \"showPaymentButtons\" | \"nuPayConfig\">): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.CONFIG, config) as Promise<void>;\n}\nexport function sendInit(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, config: PayConductorConfig): Promise<void> {\n return sendMessageToIframe(iframe, pendingMap, POST_MESSAGES.INIT, config) as Promise<void>;\n}\ntype MessagePayload = {\n requestId?: string;\n type?: string;\n data?: PaymentResult | {\n paymentMethod: PaymentMethod;\n };\n error?: {\n message?: string;\n };\n};\nexport function handleMessageEvent(event: MessageEvent, pendingMap: Map<string, PendingRequest> | null, setIsReady: (value: boolean) => void, setError: (value: string | null) => void, onReady?: () => void, onError?: (error: Error) => void, onPaymentComplete?: (data: PaymentResult) => void, onPaymentFailed?: (data: PaymentResult) => void, onPaymentPending?: (data: PaymentResult) => void, onPaymentMethodSelected?: (method: PaymentMethod) => void) {\n 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, \"orderId\"> {\n children?: any;\n showActionButtons?: boolean;\n debug?: boolean;\n onReady?: () => void;\n onError?: (error: Error) => void;\n onPaymentComplete?: (result: PaymentResult) => void;\n onPaymentFailed?: (result: PaymentResult) => void;\n onPaymentPending?: (result: PaymentResult) => void;\n onPaymentMethodSelected?: (method: PaymentMethod) => void;\n}\n\nimport type {\n PayConductorConfig,\n PaymentMethod,\n PaymentResult,\n} from \"./iframe/types\";\nimport {\n confirmPayment,\n createPendingRequestsMap,\n handleMessageEvent,\n resetPayment,\n sendConfig,\n validatePayment,\n} from \"./internal\";\nimport type {\n PayConductorApi,\n PayConductorFrame,\n PayConductorState,\n PendingRequest,\n} from \"./types\";\nimport { buildIframeUrl } from \"./utils\";\n\nfunction PayConductor(props: PayConductorEmbedProps) {\n const [isLoaded, setIsLoaded] = useState<PayConductorState[\"isLoaded\"]>(\n () => false\n );\n\n const [isReady, setIsReady] = useState<PayConductorState[\"isReady\"]>(\n () => false\n );\n\n const [error, setError] = useState<PayConductorState[\"error\"]>(() => null);\n\n const [iframeUrl, setIframeUrl] = useState<PayConductorState[\"iframeUrl\"]>(\n () => \"\"\n );\n\n const [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: { orderId: string }) => {\n log(\"confirmPayment called\", {\n orderId: options.orderId,\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 orderId: ctx.config.orderId,\n theme: ctx.config.theme,\n locale: ctx.config.locale\n } : {};\n const frame = ctx?.frame ? {\n iframe: ctx.frame.iframe,\n isReady: ctx.frame.isReady,\n error: ctx.frame.error\n } : {\n iframe: null,\n isReady: false,\n error: null\n };\n return {\n ...config,\n ...frame\n };\n}","import { POST_MESSAGES } from \"../constants\";\nimport type { BillingDetails, PayConductorConfig, PaymentMethod, PaymentResult } from \"../iframe/types\";\nimport { confirmPayment, createPendingRequestsMap, sendInit, sendMessageToIframe } from \"../internal\";\nexport type SubmitResult = {\n error?: {\n message: string;\n code?: string;\n type?: \"validation_error\" | \"payment_error\";\n };\n paymentMethod?: PaymentMethod;\n};\nexport type ConfirmPaymentOptions = {\n orderId: string;\n returnUrl?: string;\n};\nexport type UpdateOptions = {\n billingDetails?: Partial<BillingDetails>;\n address?: Partial<BillingDetails[\"address\"]>;\n};\nexport interface UsePayconductorElementReturn {\n init: (config: PayConductorConfig) => Promise<void>;\n confirmPayment: (options: ConfirmPaymentOptions) => Promise<PaymentResult>;\n validate: (data: unknown) => Promise<boolean>;\n reset: () => Promise<void>;\n getSelectedPaymentMethod: () => PaymentMethod | null;\n updateConfig: (config: Partial<Pick<PayConductorConfig, \"theme\" | \"locale\" | \"paymentMethods\">>) => void;\n updateorderId: (orderId: string) => void;\n update: (options: UpdateOptions) => void;\n submit: () => Promise<SubmitResult>;\n}\nfunction getIframeFromContext(ctx: typeof window.PayConductor): HTMLIFrameElement | null {\n if (!ctx?.frame?.iframe) 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 updateorderId: () => {\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.orderId) {\n throw new Error(\"Order ID 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 orderId: currentConfig?.orderId,\n theme: config.theme ?? currentConfig?.theme,\n locale: config.locale ?? currentConfig?.locale,\n paymentMethods: config.paymentMethods ?? currentConfig?.paymentMethods\n });\n },\n updateorderId: (orderId: string) => {\n const currentConfig = ctx.config;\n sendToIframe(POST_MESSAGES.CONFIG, {\n publicKey: currentConfig?.publicKey,\n orderId: orderId,\n theme: currentConfig?.theme,\n locale: currentConfig?.locale,\n paymentMethods: currentConfig?.paymentMethods\n });\n },\n update: (options: UpdateOptions) => {\n sendToIframe(POST_MESSAGES.UPDATE, options);\n },\n submit: async (): Promise<SubmitResult> => {\n const iframe = getIframeFromContext(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","orderId"],"mappings":"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"}
@@ -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';
@@ -9,21 +9,22 @@ export type SubmitResult = {
9
9
  paymentMethod?: PaymentMethod;
10
10
  };
11
11
  export type ConfirmPaymentOptions = {
12
- intentToken: string;
12
+ orderId: string;
13
13
  returnUrl?: string;
14
14
  };
15
15
  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>;
23
24
  getSelectedPaymentMethod: () => PaymentMethod | null;
24
25
  updateConfig: (config: Partial<Pick<PayConductorConfig, "theme" | "locale" | "paymentMethods">>) => void;
25
- updateIntentToken: (intentToken: string) => void;
26
+ updateorderId: (orderId: string) => void;
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";
@@ -135,7 +135,7 @@ export type PayConductorTheme = {
135
135
  export declare const defaultTheme: PayConductorTheme;
136
136
  export type PayConductorConfig = {
137
137
  publicKey: string;
138
- intentToken?: string;
138
+ orderId?: string;
139
139
  theme?: PayConductorTheme;
140
140
  locale?: string;
141
141
  paymentMethods?: PaymentMethod[] | "all";
@@ -181,7 +181,7 @@ export type PaymentMethodResult = {
181
181
  billingDetails?: BillingDetails;
182
182
  };
183
183
  export type PaymentResult = {
184
- paymentIntentId: string;
184
+ orderId: string;
185
185
  status: PaymentStatus;
186
186
  amount: number;
187
187
  currency: string;
@@ -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, "orderId"> {
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;
@@ -1,8 +1,8 @@
1
1
  import { PayConductorConfig, PaymentMethod, PaymentResult } from './iframe/types';
2
2
 
3
- export type { CardTokenData, CardFullData, CardPaymentData, PixPaymentData, CreditCardPaymentData, BankSlipPaymentData, NuPayData, NuPayPaymentData, PicPayPaymentData, PaymentConfirmData } from './iframe/types';
3
+ export type * from './iframe/types';
4
4
  export type ConfirmPaymentOptions = {
5
- intentToken: string;
5
+ orderId: string;
6
6
  returnUrl?: string;
7
7
  };
8
8
  export type SubmitResult = {
@@ -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-react",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "React SDK for PayConductor",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
@@ -10,7 +10,7 @@
10
10
  "dist"
11
11
  ],
12
12
  "scripts": {
13
- "build": "tsc && vite build",
13
+ "build": "tsc -b && vite build",
14
14
  "build:watch": "vite build --watch",
15
15
  "dev": "vite build --watch"
16
16
  },