@payconductor-sdk-web/library-react 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -230
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.es.js +370 -0
- package/dist/index.es.js.map +1 -0
- package/dist/payconductor/constants.d.ts +30 -0
- package/dist/payconductor/hooks/index.d.ts +2 -0
- package/dist/payconductor/hooks/use-element.d.ts +29 -0
- package/dist/payconductor/hooks/use-payconductor.d.ts +6 -0
- package/dist/payconductor/iframe/constants.d.ts +8 -0
- package/dist/payconductor/iframe/types.d.ts +241 -0
- package/dist/payconductor/internal.d.ts +10 -0
- package/dist/payconductor/payconductor.d.ts +14 -0
- package/dist/payconductor/types.d.ts +44 -0
- package/dist/payconductor/utils.d.ts +5 -0
- package/package.json +19 -12
package/README.md
CHANGED
|
@@ -1,241 +1,21 @@
|
|
|
1
|
-
#
|
|
1
|
+
# bun-react-template
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
3
|
+
To install dependencies:
|
|
6
4
|
|
|
7
5
|
```bash
|
|
8
|
-
|
|
9
|
-
# or
|
|
10
|
-
yarn add @payconductor-sdk-web/library-react
|
|
11
|
-
# or
|
|
12
|
-
pnpm add @payconductor-sdk-web/library-react
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Basic Usage
|
|
16
|
-
|
|
17
|
-
```tsx
|
|
18
|
-
"use client";
|
|
19
|
-
|
|
20
|
-
import {
|
|
21
|
-
PayConductor,
|
|
22
|
-
useElement,
|
|
23
|
-
usePayConductor,
|
|
24
|
-
type PaymentResult,
|
|
25
|
-
} from "@payconductor-sdk-web/library-react";
|
|
26
|
-
import { useState, useEffect } from "react";
|
|
27
|
-
|
|
28
|
-
function CheckoutForm() {
|
|
29
|
-
const { isReady, error } = usePayConductor();
|
|
30
|
-
const { submit, confirmPayment, update } = useElement();
|
|
31
|
-
|
|
32
|
-
const [errorMessage, setErrorMessage] = useState<string | null>(null);
|
|
33
|
-
const [isProcessing, setIsProcessing] = useState(false);
|
|
34
|
-
const [clientName, setClientName] = useState("");
|
|
35
|
-
const [clientEmail, setClientEmail] = useState("");
|
|
36
|
-
|
|
37
|
-
useEffect(() => {
|
|
38
|
-
update({
|
|
39
|
-
billingDetails: {
|
|
40
|
-
name: clientName,
|
|
41
|
-
email: clientEmail,
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
}, [clientName, clientEmail, update]);
|
|
45
|
-
|
|
46
|
-
const handleSubmit = async (event: React.FormEvent) => {
|
|
47
|
-
event.preventDefault();
|
|
48
|
-
|
|
49
|
-
if (!isReady) return;
|
|
50
|
-
|
|
51
|
-
setIsProcessing(true);
|
|
52
|
-
setErrorMessage(null);
|
|
53
|
-
|
|
54
|
-
try {
|
|
55
|
-
const { error: submitError } = await submit();
|
|
56
|
-
|
|
57
|
-
if (submitError) {
|
|
58
|
-
setErrorMessage(submitError.message || "Validation failed");
|
|
59
|
-
setIsProcessing(false);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const result: PaymentResult = await confirmPayment({
|
|
64
|
-
intentToken: "pi_xxx_intent_token_xxx",
|
|
65
|
-
returnUrl: window.location.href,
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
if (result.status === "succeeded") {
|
|
69
|
-
alert("Payment successful!");
|
|
70
|
-
}
|
|
71
|
-
} catch (err: any) {
|
|
72
|
-
setErrorMessage(err.message || "Payment failed");
|
|
73
|
-
} finally {
|
|
74
|
-
setIsProcessing(false);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
return (
|
|
79
|
-
<form onSubmit={handleSubmit}>
|
|
80
|
-
<input
|
|
81
|
-
type="text"
|
|
82
|
-
placeholder="Full name"
|
|
83
|
-
value={clientName}
|
|
84
|
-
onChange={(e) => setClientName(e.target.value)}
|
|
85
|
-
/>
|
|
86
|
-
<input
|
|
87
|
-
type="email"
|
|
88
|
-
placeholder="Email"
|
|
89
|
-
value={clientEmail}
|
|
90
|
-
onChange={(e) => setClientEmail(e.target.value)}
|
|
91
|
-
/>
|
|
92
|
-
<button type="submit" disabled={!isReady || isProcessing}>
|
|
93
|
-
{isProcessing ? "Processing..." : "Pay now"}
|
|
94
|
-
</button>
|
|
95
|
-
{errorMessage && <div>{errorMessage}</div>}
|
|
96
|
-
{error && <div>Error: {error}</div>}
|
|
97
|
-
</form>
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export default function App() {
|
|
102
|
-
return (
|
|
103
|
-
<PayConductor
|
|
104
|
-
publicKey="pk_test_123"
|
|
105
|
-
intentToken="pi_test_abc123"
|
|
106
|
-
theme={{ primaryColor: "#0066ff" }}
|
|
107
|
-
locale="en-US"
|
|
108
|
-
height="500px"
|
|
109
|
-
onReady={() => console.log("Ready")}
|
|
110
|
-
onError={(err) => console.error(err)}
|
|
111
|
-
onPaymentComplete={(result) => console.log(result)}
|
|
112
|
-
>
|
|
113
|
-
<CheckoutForm />
|
|
114
|
-
</PayConductor>
|
|
115
|
-
);
|
|
116
|
-
}
|
|
6
|
+
bun install
|
|
117
7
|
```
|
|
118
8
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
### `<PayConductor />`
|
|
9
|
+
To start a development server:
|
|
122
10
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
| Prop | Type | Description |
|
|
126
|
-
|------|------|-------------|
|
|
127
|
-
| `publicKey` | `string` | Your PayConductor public key |
|
|
128
|
-
| `intentToken` | `string` | Payment intent token |
|
|
129
|
-
| `theme` | `PayConductorTheme` | Theme configuration |
|
|
130
|
-
| `locale` | `string` | Locale (e.g., 'en-US', 'pt-BR') |
|
|
131
|
-
| `height` | `string` | Iframe height (default: '500px') |
|
|
132
|
-
| `onReady` | `() => void` | Callback when iframe is ready |
|
|
133
|
-
| `onError` | `(error: Error) => void` | Error callback |
|
|
134
|
-
| `onPaymentComplete` | `(result: PaymentResult) => void` | Payment complete callback |
|
|
135
|
-
|
|
136
|
-
### `usePayConductor()`
|
|
137
|
-
|
|
138
|
-
Hook that returns frame state and configuration.
|
|
139
|
-
|
|
140
|
-
```tsx
|
|
141
|
-
const { isReady, error, publicKey, intentToken, theme, locale } = usePayConductor();
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
| Property | Type | Description |
|
|
145
|
-
|----------|------|-------------|
|
|
146
|
-
| `isReady` | `boolean` | Whether iframe is ready |
|
|
147
|
-
| `error` | `string \| null` | Error message if any |
|
|
148
|
-
| `publicKey` | `string` | Public key from config |
|
|
149
|
-
| `intentToken` | `string` | Intent token from config |
|
|
150
|
-
| `theme` | `PayConductorTheme` | Theme from config |
|
|
151
|
-
| `locale` | `string` | Locale from config |
|
|
152
|
-
|
|
153
|
-
### `useElement()`
|
|
154
|
-
|
|
155
|
-
Hook that provides payment methods.
|
|
156
|
-
|
|
157
|
-
```tsx
|
|
158
|
-
const {
|
|
159
|
-
submit,
|
|
160
|
-
confirmPayment,
|
|
161
|
-
update,
|
|
162
|
-
validate,
|
|
163
|
-
reset,
|
|
164
|
-
updateConfig,
|
|
165
|
-
updateIntentToken
|
|
166
|
-
} = useElement();
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
| Method | Description |
|
|
170
|
-
|--------|-------------|
|
|
171
|
-
| `submit()` | Submits the form, returns `{ error?, paymentMethod? }` |
|
|
172
|
-
| `confirmPayment(options)` | Confirms payment with `{ intentToken, returnUrl? }` |
|
|
173
|
-
| `update(options)` | Updates billing details `{ billingDetails?: { name, email, phone, address } }` |
|
|
174
|
-
| `validate(data)` | Validates payment data |
|
|
175
|
-
| `reset()` | Resets the payment form |
|
|
176
|
-
| `updateConfig(config)` | Updates theme, locale, or paymentMethods config |
|
|
177
|
-
| `updateIntentToken(token)` | Updates the intent token |
|
|
178
|
-
|
|
179
|
-
## Theming
|
|
180
|
-
|
|
181
|
-
```tsx
|
|
182
|
-
const theme: PayConductorTheme = {
|
|
183
|
-
primaryColor: "#0066ff",
|
|
184
|
-
secondaryColor: "#5a6b7c",
|
|
185
|
-
backgroundColor: "transparent",
|
|
186
|
-
surfaceColor: "#f8fafc",
|
|
187
|
-
textColor: "#0f172a",
|
|
188
|
-
textSecondaryColor: "#64748b",
|
|
189
|
-
errorColor: "#ef4444",
|
|
190
|
-
successColor: "#22c55e",
|
|
191
|
-
warningColor: "#f59e0b",
|
|
192
|
-
borderColor: "#e2e8f0",
|
|
193
|
-
disabledColor: "#cbd5e1",
|
|
194
|
-
fontFamily: '"Poppins", sans-serif',
|
|
195
|
-
fontSize: { xs: "0.75rem", sm: "0.875rem", md: "1rem", lg: "1.125rem", xl: "1.25rem" },
|
|
196
|
-
fontWeight: { normal: 400, medium: 500, bold: 600 },
|
|
197
|
-
lineHeight: "1.5",
|
|
198
|
-
spacing: { xs: "4px", sm: "8px", md: "16px", lg: "24px", xl: "32px" },
|
|
199
|
-
borderRadius: "8px",
|
|
200
|
-
borderWidth: "1px",
|
|
201
|
-
boxShadow: "0 1px 3px 0 rgb(0 0 0 / 0.1)",
|
|
202
|
-
inputBackground: "#ffffff",
|
|
203
|
-
inputBorderColor: "#cbd5e1",
|
|
204
|
-
inputBorderRadius: "8px",
|
|
205
|
-
inputHeight: "44px",
|
|
206
|
-
inputPadding: "12px 16px",
|
|
207
|
-
buttonHeight: "48px",
|
|
208
|
-
buttonPadding: "16px 24px",
|
|
209
|
-
buttonBorderRadius: "8px",
|
|
210
|
-
transitionDuration: "0.2s",
|
|
211
|
-
};
|
|
11
|
+
```bash
|
|
12
|
+
bun dev
|
|
212
13
|
```
|
|
213
14
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
```tsx
|
|
217
|
-
type PaymentResult = {
|
|
218
|
-
paymentIntentId: string;
|
|
219
|
-
status: "succeeded" | "pending" | "failed";
|
|
220
|
-
amount: number;
|
|
221
|
-
currency: string;
|
|
222
|
-
};
|
|
15
|
+
To run for production:
|
|
223
16
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
email?: string;
|
|
227
|
-
phone?: string;
|
|
228
|
-
address?: {
|
|
229
|
-
line1: string;
|
|
230
|
-
line2?: string;
|
|
231
|
-
city: string;
|
|
232
|
-
state: string;
|
|
233
|
-
postalCode: string;
|
|
234
|
-
country: string;
|
|
235
|
-
};
|
|
236
|
-
};
|
|
17
|
+
```bash
|
|
18
|
+
bun start
|
|
237
19
|
```
|
|
238
20
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
MIT
|
|
21
|
+
This project was created using `bun init` in bun v1.3.6. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
|
|
@@ -0,0 +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;
|
|
2
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default } from './payconductor/payconductor';
|
|
2
|
+
export { default as PayConductor } from './payconductor/payconductor';
|
|
3
|
+
export * from './payconductor/types';
|
|
4
|
+
export * from './payconductor/constants';
|
|
5
|
+
export * from './payconductor/utils';
|
|
6
|
+
export * from './payconductor/hooks';
|
package/dist/index.es.js
ADDED
|
@@ -0,0 +1,370 @@
|
|
|
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 = {
|
|
20
|
+
INVALID_CLIENT: "InvalidClient",
|
|
21
|
+
INVALID_TOKEN: "InvalidToken",
|
|
22
|
+
NETWORK_ERROR: "NetworkError",
|
|
23
|
+
IFRAME_NOT_READY: "IframeNotReady",
|
|
24
|
+
PAYMENT_DECLINED: "PaymentDeclined",
|
|
25
|
+
VALIDATION_ERROR: "ValidationError",
|
|
26
|
+
TIMEOUT: "Timeout"
|
|
27
|
+
};
|
|
28
|
+
function j(e) {
|
|
29
|
+
const t = new URLSearchParams({
|
|
30
|
+
publicKey: e.publicKey
|
|
31
|
+
});
|
|
32
|
+
return `${z}?${t.toString()}`;
|
|
33
|
+
}
|
|
34
|
+
function Q() {
|
|
35
|
+
return crypto.randomUUID();
|
|
36
|
+
}
|
|
37
|
+
function $(e, t) {
|
|
38
|
+
return t.includes(e);
|
|
39
|
+
}
|
|
40
|
+
function D() {
|
|
41
|
+
return /* @__PURE__ */ new Map();
|
|
42
|
+
}
|
|
43
|
+
function A(e, t, o, n) {
|
|
44
|
+
return new Promise((r, l) => {
|
|
45
|
+
if (!e || !("contentWindow" in e)) {
|
|
46
|
+
l(new Error("Iframe not defined"));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (!(e != null && e.contentWindow)) {
|
|
50
|
+
l(new Error("Iframe not ready"));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!t) {
|
|
54
|
+
l(new Error("Pending requests not initialized"));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const u = Q();
|
|
58
|
+
t.set(u, {
|
|
59
|
+
resolve: r,
|
|
60
|
+
reject: l
|
|
61
|
+
}), e.contentWindow.postMessage({
|
|
62
|
+
type: o,
|
|
63
|
+
data: n,
|
|
64
|
+
requestId: u
|
|
65
|
+
}, "*"), setTimeout(() => {
|
|
66
|
+
t != null && t.has(u) && (t.delete(u), l(new Error("Request timeout")));
|
|
67
|
+
}, B);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function O(e, t, o) {
|
|
71
|
+
return A(e, t, d.CONFIRM_PAYMENT, {
|
|
72
|
+
intentToken: o.intentToken
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function J(e, t, o) {
|
|
76
|
+
return A(e, t, d.VALIDATE, o);
|
|
77
|
+
}
|
|
78
|
+
function X(e, t) {
|
|
79
|
+
return A(e, t, d.RESET);
|
|
80
|
+
}
|
|
81
|
+
function Z(e, t, o) {
|
|
82
|
+
return A(e, t, d.CONFIG, o);
|
|
83
|
+
}
|
|
84
|
+
function x(e, t, o, n, r, l, u, w, h, I) {
|
|
85
|
+
if (!$(e.origin, q))
|
|
86
|
+
return;
|
|
87
|
+
const y = e.data, {
|
|
88
|
+
requestId: T,
|
|
89
|
+
type: f,
|
|
90
|
+
data: a,
|
|
91
|
+
error: s
|
|
92
|
+
} = y;
|
|
93
|
+
if (T && (t != null && t.has(T))) {
|
|
94
|
+
const {
|
|
95
|
+
resolve: _,
|
|
96
|
+
reject: M
|
|
97
|
+
} = t.get(T);
|
|
98
|
+
t.delete(T), s ? M(new Error(s.message)) : _(a);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (f === d.READY) {
|
|
102
|
+
o(!0), r == null || r();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
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));
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (f === d.PAYMENT_COMPLETE) {
|
|
110
|
+
a && typeof a == "object" && "status" in a && (u == null || u(a));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (f === d.PAYMENT_FAILED) {
|
|
114
|
+
a && typeof a == "object" && "status" in a && (w == null || w(a));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (f === d.PAYMENT_PENDING) {
|
|
118
|
+
a && typeof a == "object" && "status" in a && (h == null || h(a));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (f === d.PAYMENT_METHOD_SELECTED) {
|
|
122
|
+
a && typeof a == "object" && "paymentMethod" in a && (I == null || I(a.paymentMethod));
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function te(e) {
|
|
127
|
+
const t = V(null), [o, n] = m(
|
|
128
|
+
() => !1
|
|
129
|
+
), [r, l] = m(
|
|
130
|
+
() => !1
|
|
131
|
+
), [u, w] = m(() => null), [h, I] = m(
|
|
132
|
+
() => ""
|
|
133
|
+
), [y, T] = m(
|
|
134
|
+
() => 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,
|
|
144
|
+
get isReady() {
|
|
145
|
+
return r;
|
|
146
|
+
},
|
|
147
|
+
get error() {
|
|
148
|
+
return u;
|
|
149
|
+
}
|
|
150
|
+
}, S = {
|
|
151
|
+
publicKey: e.publicKey,
|
|
152
|
+
intentToken: e.intentToken,
|
|
153
|
+
theme: e.theme,
|
|
154
|
+
locale: e.locale,
|
|
155
|
+
paymentMethods: e.paymentMethods,
|
|
156
|
+
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
|
|
162
|
+
};
|
|
163
|
+
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,
|
|
182
|
+
y,
|
|
183
|
+
(i) => {
|
|
184
|
+
l(i), i && b();
|
|
185
|
+
},
|
|
186
|
+
(i) => {
|
|
187
|
+
w(i);
|
|
188
|
+
},
|
|
189
|
+
e.onReady,
|
|
190
|
+
e.onError,
|
|
191
|
+
(i) => {
|
|
192
|
+
var c;
|
|
193
|
+
return (c = e.onPaymentComplete) == null ? void 0 : c.call(e, i);
|
|
194
|
+
},
|
|
195
|
+
(i) => {
|
|
196
|
+
var c;
|
|
197
|
+
return (c = e.onPaymentFailed) == null ? void 0 : c.call(e, i);
|
|
198
|
+
},
|
|
199
|
+
(i) => {
|
|
200
|
+
var c;
|
|
201
|
+
return (c = e.onPaymentPending) == null ? void 0 : c.call(e, i);
|
|
202
|
+
},
|
|
203
|
+
(i) => {
|
|
204
|
+
var c;
|
|
205
|
+
a(i), window.PayConductor && (window.PayConductor.selectedPaymentMethod = i), (c = e.onPaymentMethodSelected) == null || c.call(e, i);
|
|
206
|
+
}
|
|
207
|
+
);
|
|
208
|
+
};
|
|
209
|
+
window.addEventListener("message", v);
|
|
210
|
+
}, []), /* @__PURE__ */ F(
|
|
211
|
+
"div",
|
|
212
|
+
{
|
|
213
|
+
className: "payconductor",
|
|
214
|
+
id: "payconductor",
|
|
215
|
+
style: {
|
|
216
|
+
width: "100%",
|
|
217
|
+
position: "relative"
|
|
218
|
+
},
|
|
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
|
+
}
|
|
233
|
+
}
|
|
234
|
+
) : null
|
|
235
|
+
]
|
|
236
|
+
}
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
function ne() {
|
|
240
|
+
const e = typeof window < "u" ? window.PayConductor : null, t = e != null && e.config ? {
|
|
241
|
+
publicKey: e.config.publicKey,
|
|
242
|
+
intentToken: e.config.intentToken,
|
|
243
|
+
theme: e.config.theme,
|
|
244
|
+
locale: e.config.locale
|
|
245
|
+
} : {}, o = e != null && e.frame ? {
|
|
246
|
+
iframe: e.frame.iframe,
|
|
247
|
+
isReady: e.frame.isReady,
|
|
248
|
+
error: e.frame.error
|
|
249
|
+
} : {
|
|
250
|
+
iframe: null,
|
|
251
|
+
isReady: !1,
|
|
252
|
+
error: null
|
|
253
|
+
};
|
|
254
|
+
return {
|
|
255
|
+
...t,
|
|
256
|
+
...o
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
function N(e) {
|
|
260
|
+
var o;
|
|
261
|
+
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;
|
|
269
|
+
}
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
function oe() {
|
|
273
|
+
const e = typeof window < "u" ? window.PayConductor : null, t = (o, n) => {
|
|
274
|
+
if (!e) return;
|
|
275
|
+
const r = N(e);
|
|
276
|
+
r != null && r.contentWindow && r.contentWindow.postMessage({
|
|
277
|
+
type: o,
|
|
278
|
+
data: n
|
|
279
|
+
}, "*");
|
|
280
|
+
};
|
|
281
|
+
return e ? {
|
|
282
|
+
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);
|
|
287
|
+
},
|
|
288
|
+
validate: e.api.validate,
|
|
289
|
+
reset: e.api.reset,
|
|
290
|
+
getSelectedPaymentMethod: () => (e == null ? void 0 : e.selectedPaymentMethod) ?? null,
|
|
291
|
+
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)
|
|
299
|
+
});
|
|
300
|
+
},
|
|
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
|
|
309
|
+
});
|
|
310
|
+
},
|
|
311
|
+
update: (o) => {
|
|
312
|
+
t(d.UPDATE, o);
|
|
313
|
+
},
|
|
314
|
+
submit: async () => {
|
|
315
|
+
const o = N(e), n = D();
|
|
316
|
+
try {
|
|
317
|
+
return await A(o || void 0, n, d.CONFIRM_PAYMENT, {}), {
|
|
318
|
+
paymentMethod: void 0
|
|
319
|
+
};
|
|
320
|
+
} catch (r) {
|
|
321
|
+
return {
|
|
322
|
+
error: {
|
|
323
|
+
message: r instanceof Error ? r.message : "Payment failed",
|
|
324
|
+
code: "payment_error",
|
|
325
|
+
type: "payment_error"
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
} : {
|
|
331
|
+
confirmPayment: async () => {
|
|
332
|
+
throw new Error("PayConductor not initialized");
|
|
333
|
+
},
|
|
334
|
+
validate: async () => {
|
|
335
|
+
throw new Error("PayConductor not initialized");
|
|
336
|
+
},
|
|
337
|
+
reset: async () => {
|
|
338
|
+
throw new Error("PayConductor not initialized");
|
|
339
|
+
},
|
|
340
|
+
getSelectedPaymentMethod: () => null,
|
|
341
|
+
updateConfig: () => {
|
|
342
|
+
throw new Error("PayConductor not initialized");
|
|
343
|
+
},
|
|
344
|
+
updateIntentToken: () => {
|
|
345
|
+
throw new Error("PayConductor not initialized");
|
|
346
|
+
},
|
|
347
|
+
update: () => {
|
|
348
|
+
throw new Error("PayConductor not initialized");
|
|
349
|
+
},
|
|
350
|
+
submit: async () => {
|
|
351
|
+
throw new Error("PayConductor not initialized");
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
export {
|
|
356
|
+
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,
|
|
363
|
+
j as buildIframeUrl,
|
|
364
|
+
te as default,
|
|
365
|
+
Q as generateRequestId,
|
|
366
|
+
$ as isValidOrigin,
|
|
367
|
+
oe as useElement,
|
|
368
|
+
ne as usePayConductor
|
|
369
|
+
};
|
|
370
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IncomingMessage, OutgoingMessage } from './iframe/types';
|
|
2
|
+
|
|
3
|
+
export declare const IFRAME_BASE_URL: string;
|
|
4
|
+
export declare const ALLOWED_ORIGINS: string[];
|
|
5
|
+
export declare const IFRAME_DEFAULT_HEIGHT_VALUE = "600px";
|
|
6
|
+
export declare const REQUEST_TIMEOUT = 30000;
|
|
7
|
+
export declare const POST_MESSAGES: {
|
|
8
|
+
readonly INIT: OutgoingMessage.Init;
|
|
9
|
+
readonly CONFIG: OutgoingMessage.Config;
|
|
10
|
+
readonly UPDATE: OutgoingMessage.Update;
|
|
11
|
+
readonly CONFIRM_PAYMENT: OutgoingMessage.ConfirmPayment;
|
|
12
|
+
readonly VALIDATE: OutgoingMessage.Validate;
|
|
13
|
+
readonly RESET: OutgoingMessage.Reset;
|
|
14
|
+
readonly READY: IncomingMessage.Ready;
|
|
15
|
+
readonly ERROR: IncomingMessage.Error;
|
|
16
|
+
readonly PAYMENT_COMPLETE: IncomingMessage.PaymentComplete;
|
|
17
|
+
readonly PAYMENT_FAILED: IncomingMessage.PaymentFailed;
|
|
18
|
+
readonly PAYMENT_PENDING: IncomingMessage.PaymentPending;
|
|
19
|
+
readonly VALIDATION_ERROR: IncomingMessage.ValidationError;
|
|
20
|
+
readonly PAYMENT_METHOD_SELECTED: IncomingMessage.PaymentMethodSelected;
|
|
21
|
+
};
|
|
22
|
+
export declare const ERROR_CODES: {
|
|
23
|
+
readonly INVALID_CLIENT: "InvalidClient";
|
|
24
|
+
readonly INVALID_TOKEN: "InvalidToken";
|
|
25
|
+
readonly NETWORK_ERROR: "NetworkError";
|
|
26
|
+
readonly IFRAME_NOT_READY: "IframeNotReady";
|
|
27
|
+
readonly PAYMENT_DECLINED: "PaymentDeclined";
|
|
28
|
+
readonly VALIDATION_ERROR: "ValidationError";
|
|
29
|
+
readonly TIMEOUT: "Timeout";
|
|
30
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BillingDetails, PayConductorConfig, PaymentMethod, PaymentResult } from '../iframe/types';
|
|
2
|
+
|
|
3
|
+
export type SubmitResult = {
|
|
4
|
+
error?: {
|
|
5
|
+
message: string;
|
|
6
|
+
code?: string;
|
|
7
|
+
type?: "validation_error" | "payment_error";
|
|
8
|
+
};
|
|
9
|
+
paymentMethod?: PaymentMethod;
|
|
10
|
+
};
|
|
11
|
+
export type ConfirmPaymentOptions = {
|
|
12
|
+
intentToken: string;
|
|
13
|
+
returnUrl?: string;
|
|
14
|
+
};
|
|
15
|
+
export type UpdateOptions = {
|
|
16
|
+
billingDetails?: Partial<BillingDetails>;
|
|
17
|
+
address?: Partial<BillingDetails["address"]>;
|
|
18
|
+
};
|
|
19
|
+
export interface UseElementReturn {
|
|
20
|
+
confirmPayment: (options: ConfirmPaymentOptions) => Promise<PaymentResult>;
|
|
21
|
+
validate: (data: unknown) => Promise<boolean>;
|
|
22
|
+
reset: () => Promise<void>;
|
|
23
|
+
getSelectedPaymentMethod: () => PaymentMethod | null;
|
|
24
|
+
updateConfig: (config: Partial<Pick<PayConductorConfig, "theme" | "locale" | "paymentMethods">>) => void;
|
|
25
|
+
updateIntentToken: (intentToken: string) => void;
|
|
26
|
+
update: (options: UpdateOptions) => void;
|
|
27
|
+
submit: () => Promise<SubmitResult>;
|
|
28
|
+
}
|
|
29
|
+
export declare function useElement(): UseElementReturn;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const APP_BASE_URL_PROD = "https://app.payconductor.ai";
|
|
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";
|
|
4
|
+
export declare const IFRAME_BASE_URL_DEV = "http://localhost:5175";
|
|
5
|
+
export declare const APP_BASE_URL_DEV = "http://localhost:3000";
|
|
6
|
+
export declare const DEFAULT_LOCALE = "pt-BR";
|
|
7
|
+
export declare const REQUEST_TIMEOUT_MS = 30000;
|
|
8
|
+
export declare const IFRAME_DEFAULT_HEIGHT = "600px";
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
export declare enum PaymentMethod {
|
|
2
|
+
Pix = "Pix",
|
|
3
|
+
CreditCard = "CreditCard",
|
|
4
|
+
DebitCard = "DebitCard",
|
|
5
|
+
BankSlip = "BankSlip",
|
|
6
|
+
Crypto = "Crypto",
|
|
7
|
+
ApplePay = "ApplePay",
|
|
8
|
+
NuPay = "NuPay",
|
|
9
|
+
PicPay = "PicPay",
|
|
10
|
+
AmazonPay = "AmazonPay",
|
|
11
|
+
SepaDebit = "SepaDebit",
|
|
12
|
+
GooglePay = "GooglePay"
|
|
13
|
+
}
|
|
14
|
+
export declare enum PaymentMethodLayout {
|
|
15
|
+
Grid = "grid",
|
|
16
|
+
Vertical = "vertical",
|
|
17
|
+
Horizontal = "horizontal"
|
|
18
|
+
}
|
|
19
|
+
export declare enum PaymentStatus {
|
|
20
|
+
Succeeded = "succeeded",
|
|
21
|
+
Pending = "pending",
|
|
22
|
+
Failed = "failed"
|
|
23
|
+
}
|
|
24
|
+
export declare enum DeviceType {
|
|
25
|
+
Android = "android",
|
|
26
|
+
IOS = "ios",
|
|
27
|
+
Web = "web"
|
|
28
|
+
}
|
|
29
|
+
export declare enum InputStyleKey {
|
|
30
|
+
Padding = "padding",
|
|
31
|
+
Radius = "radius",
|
|
32
|
+
Color = "color",
|
|
33
|
+
Background = "background",
|
|
34
|
+
Shadow = "shadow"
|
|
35
|
+
}
|
|
36
|
+
export declare enum OutgoingMessage {
|
|
37
|
+
Init = "Init",
|
|
38
|
+
Config = "Config",
|
|
39
|
+
Update = "Update",
|
|
40
|
+
ConfirmPayment = "ConfirmPayment",
|
|
41
|
+
Validate = "Validate",
|
|
42
|
+
Reset = "Reset"
|
|
43
|
+
}
|
|
44
|
+
export declare enum IncomingMessage {
|
|
45
|
+
Ready = "Ready",
|
|
46
|
+
Error = "Error",
|
|
47
|
+
PaymentComplete = "PaymentComplete",
|
|
48
|
+
PaymentFailed = "PaymentFailed",
|
|
49
|
+
PaymentPending = "PaymentPending",
|
|
50
|
+
ValidationError = "ValidationError",
|
|
51
|
+
PaymentMethodSelected = "PaymentMethodSelected"
|
|
52
|
+
}
|
|
53
|
+
export declare enum ErrorCode {
|
|
54
|
+
InvalidClient = "InvalidClient",
|
|
55
|
+
InvalidToken = "InvalidToken",
|
|
56
|
+
NetworkError = "NetworkError",
|
|
57
|
+
IframeNotReady = "IframeNotReady",
|
|
58
|
+
PaymentDeclined = "PaymentDeclined",
|
|
59
|
+
ValidationError = "ValidationError",
|
|
60
|
+
Timeout = "Timeout"
|
|
61
|
+
}
|
|
62
|
+
export type InputStyleConfig = {
|
|
63
|
+
padding?: string;
|
|
64
|
+
radius?: string;
|
|
65
|
+
color?: string;
|
|
66
|
+
background?: string;
|
|
67
|
+
shadow?: string;
|
|
68
|
+
};
|
|
69
|
+
export type PaymentMethodsConfig = {
|
|
70
|
+
layout?: PaymentMethodLayout;
|
|
71
|
+
gap?: string;
|
|
72
|
+
inputStyle?: InputStyleConfig;
|
|
73
|
+
};
|
|
74
|
+
export type PaymentMethodConfig = {
|
|
75
|
+
method: PaymentMethod;
|
|
76
|
+
discount?: number;
|
|
77
|
+
showBrands?: boolean;
|
|
78
|
+
installments?: {
|
|
79
|
+
count: number;
|
|
80
|
+
amount: number;
|
|
81
|
+
}[];
|
|
82
|
+
};
|
|
83
|
+
export type PaymentMethodsResponse = {
|
|
84
|
+
methods: PaymentMethod[];
|
|
85
|
+
config: PaymentMethodsConfig;
|
|
86
|
+
};
|
|
87
|
+
export type PayConductorTheme = {
|
|
88
|
+
primaryColor?: string;
|
|
89
|
+
secondaryColor?: string;
|
|
90
|
+
backgroundColor?: string;
|
|
91
|
+
surfaceColor?: string;
|
|
92
|
+
textColor?: string;
|
|
93
|
+
textSecondaryColor?: string;
|
|
94
|
+
errorColor?: string;
|
|
95
|
+
successColor?: string;
|
|
96
|
+
warningColor?: string;
|
|
97
|
+
borderColor?: string;
|
|
98
|
+
disabledColor?: string;
|
|
99
|
+
fontFamily?: string;
|
|
100
|
+
fontSize?: {
|
|
101
|
+
xs?: string;
|
|
102
|
+
sm?: string;
|
|
103
|
+
md?: string;
|
|
104
|
+
lg?: string;
|
|
105
|
+
xl?: string;
|
|
106
|
+
};
|
|
107
|
+
fontWeight?: {
|
|
108
|
+
normal?: number;
|
|
109
|
+
medium?: number;
|
|
110
|
+
bold?: number;
|
|
111
|
+
};
|
|
112
|
+
lineHeight?: string;
|
|
113
|
+
spacing?: {
|
|
114
|
+
xs?: string;
|
|
115
|
+
sm?: string;
|
|
116
|
+
md?: string;
|
|
117
|
+
lg?: string;
|
|
118
|
+
xl?: string;
|
|
119
|
+
};
|
|
120
|
+
borderRadius?: string;
|
|
121
|
+
borderWidth?: string;
|
|
122
|
+
boxShadow?: string;
|
|
123
|
+
boxShadowHover?: string;
|
|
124
|
+
inputBackground?: string;
|
|
125
|
+
inputBorderColor?: string;
|
|
126
|
+
inputBorderRadius?: string;
|
|
127
|
+
inputHeight?: string;
|
|
128
|
+
inputPadding?: string;
|
|
129
|
+
buttonHeight?: string;
|
|
130
|
+
buttonPadding?: string;
|
|
131
|
+
buttonBorderRadius?: string;
|
|
132
|
+
transitionDuration?: string;
|
|
133
|
+
transitionTimingFunction?: string;
|
|
134
|
+
};
|
|
135
|
+
export declare const defaultTheme: PayConductorTheme;
|
|
136
|
+
export type PayConductorConfig = {
|
|
137
|
+
publicKey: string;
|
|
138
|
+
intentToken?: string;
|
|
139
|
+
theme?: PayConductorTheme;
|
|
140
|
+
locale?: string;
|
|
141
|
+
paymentMethods?: PaymentMethod[] | "all";
|
|
142
|
+
defaultPaymentMethod?: PaymentMethod;
|
|
143
|
+
paymentMethodsConfig?: PaymentMethodConfig[];
|
|
144
|
+
methodsDirection?: "vertical" | "horizontal";
|
|
145
|
+
showPaymentButtons?: boolean;
|
|
146
|
+
/** Required when NuPay is an available payment method */
|
|
147
|
+
nuPayConfig?: NuPayData;
|
|
148
|
+
};
|
|
149
|
+
export type BillingDetails = {
|
|
150
|
+
name: string;
|
|
151
|
+
email?: string;
|
|
152
|
+
phone?: string;
|
|
153
|
+
address?: {
|
|
154
|
+
line1: string;
|
|
155
|
+
line2?: string;
|
|
156
|
+
city: string;
|
|
157
|
+
state: string;
|
|
158
|
+
postalCode: string;
|
|
159
|
+
country: string;
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
export type CardData = {
|
|
163
|
+
number: string;
|
|
164
|
+
expMonth: string;
|
|
165
|
+
expYear: string;
|
|
166
|
+
cvc: string;
|
|
167
|
+
};
|
|
168
|
+
export type CreatePaymentMethodOptions = {
|
|
169
|
+
billingDetails: BillingDetails;
|
|
170
|
+
card?: CardData;
|
|
171
|
+
};
|
|
172
|
+
export type PaymentMethodResult = {
|
|
173
|
+
id: string;
|
|
174
|
+
type: PaymentMethod;
|
|
175
|
+
card?: {
|
|
176
|
+
brand: string;
|
|
177
|
+
last4: string;
|
|
178
|
+
expMonth: number;
|
|
179
|
+
expYear: number;
|
|
180
|
+
};
|
|
181
|
+
billingDetails?: BillingDetails;
|
|
182
|
+
};
|
|
183
|
+
export type PaymentResult = {
|
|
184
|
+
paymentIntentId: string;
|
|
185
|
+
status: PaymentStatus;
|
|
186
|
+
amount: number;
|
|
187
|
+
currency: string;
|
|
188
|
+
message?: string;
|
|
189
|
+
};
|
|
190
|
+
export interface MessagePayload {
|
|
191
|
+
type: OutgoingMessage | IncomingMessage;
|
|
192
|
+
data?: unknown;
|
|
193
|
+
requestId?: string;
|
|
194
|
+
error?: {
|
|
195
|
+
code: string;
|
|
196
|
+
message: string;
|
|
197
|
+
field?: string;
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
export type CardTokenData = {
|
|
201
|
+
token: string;
|
|
202
|
+
firstSixCardNumber?: string;
|
|
203
|
+
};
|
|
204
|
+
export type CardFullData = {
|
|
205
|
+
number: string;
|
|
206
|
+
holderName: string;
|
|
207
|
+
cvv: string;
|
|
208
|
+
expiration: {
|
|
209
|
+
month: number;
|
|
210
|
+
year: number;
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
export type CardPaymentData = CardTokenData | CardFullData;
|
|
214
|
+
export type PixPaymentData = {
|
|
215
|
+
paymentMethod: PaymentMethod.Pix;
|
|
216
|
+
expirationInSeconds?: number;
|
|
217
|
+
};
|
|
218
|
+
export type CreditCardPaymentData = {
|
|
219
|
+
paymentMethod: PaymentMethod.CreditCard;
|
|
220
|
+
card: CardPaymentData;
|
|
221
|
+
installments: number;
|
|
222
|
+
softDescriptor?: string;
|
|
223
|
+
};
|
|
224
|
+
export type BankSlipPaymentData = {
|
|
225
|
+
paymentMethod: PaymentMethod.BankSlip;
|
|
226
|
+
expirationInDays?: number;
|
|
227
|
+
};
|
|
228
|
+
export type NuPayData = {
|
|
229
|
+
cancelUrl: string;
|
|
230
|
+
merchantName: string;
|
|
231
|
+
returnUrl: string;
|
|
232
|
+
storeName?: string;
|
|
233
|
+
};
|
|
234
|
+
export type NuPayPaymentData = {
|
|
235
|
+
paymentMethod: PaymentMethod.NuPay;
|
|
236
|
+
nuPay: NuPayData;
|
|
237
|
+
};
|
|
238
|
+
export type PicPayPaymentData = {
|
|
239
|
+
paymentMethod: PaymentMethod.PicPay;
|
|
240
|
+
};
|
|
241
|
+
export type PaymentConfirmData = PixPaymentData | CreditCardPaymentData | BankSlipPaymentData | NuPayPaymentData | PicPayPaymentData;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IncomingMessage, OutgoingMessage, PayConductorConfig, PaymentMethod, PaymentResult } from './iframe/types';
|
|
2
|
+
import { ConfirmPaymentOptions, PendingRequest } from './types';
|
|
3
|
+
|
|
4
|
+
export declare function createPendingRequestsMap(): Map<string, PendingRequest>;
|
|
5
|
+
export declare function sendMessageToIframe(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, type: OutgoingMessage | IncomingMessage, data?: unknown): Promise<unknown>;
|
|
6
|
+
export declare function confirmPayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, options: ConfirmPaymentOptions): Promise<PaymentResult>;
|
|
7
|
+
export declare function validatePayment(iframe: HTMLIFrameElement | Element | undefined, pendingMap: Map<string, PendingRequest> | null, data: unknown): Promise<boolean>;
|
|
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>;
|
|
10
|
+
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,14 @@
|
|
|
1
|
+
import { PayConductorConfig, PaymentMethod, PaymentResult } from './iframe/types';
|
|
2
|
+
export interface PayConductorEmbedProps extends PayConductorConfig {
|
|
3
|
+
height?: string;
|
|
4
|
+
children?: any;
|
|
5
|
+
showActionButtons?: boolean;
|
|
6
|
+
onReady?: () => void;
|
|
7
|
+
onError?: (error: Error) => void;
|
|
8
|
+
onPaymentComplete?: (result: PaymentResult) => void;
|
|
9
|
+
onPaymentFailed?: (result: PaymentResult) => void;
|
|
10
|
+
onPaymentPending?: (result: PaymentResult) => void;
|
|
11
|
+
onPaymentMethodSelected?: (method: PaymentMethod) => void;
|
|
12
|
+
}
|
|
13
|
+
declare function PayConductor(props: PayConductorEmbedProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export default PayConductor;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { PayConductorConfig, PaymentMethod, PaymentResult } from './iframe/types';
|
|
2
|
+
|
|
3
|
+
export type { CardTokenData, CardFullData, CardPaymentData, PixPaymentData, CreditCardPaymentData, BankSlipPaymentData, NuPayData, NuPayPaymentData, PicPayPaymentData, PaymentConfirmData } from './iframe/types';
|
|
4
|
+
export type ConfirmPaymentOptions = {
|
|
5
|
+
intentToken: string;
|
|
6
|
+
returnUrl?: string;
|
|
7
|
+
};
|
|
8
|
+
export type SubmitResult = {
|
|
9
|
+
error?: {
|
|
10
|
+
message: string;
|
|
11
|
+
code?: string;
|
|
12
|
+
type?: "validation_error" | "payment_error";
|
|
13
|
+
};
|
|
14
|
+
paymentMethod?: PaymentMethod;
|
|
15
|
+
};
|
|
16
|
+
export type PayConductorApi = {
|
|
17
|
+
confirmPayment: (options: ConfirmPaymentOptions) => Promise<PaymentResult>;
|
|
18
|
+
validate: (data: unknown) => Promise<boolean>;
|
|
19
|
+
reset: () => Promise<void>;
|
|
20
|
+
getSelectedPaymentMethod: () => PaymentMethod | null;
|
|
21
|
+
};
|
|
22
|
+
export type PayConductorFrame = {
|
|
23
|
+
iframe: HTMLIFrameElement | Element | unknown | null;
|
|
24
|
+
isReady: boolean;
|
|
25
|
+
error: string | null;
|
|
26
|
+
};
|
|
27
|
+
export type PayConductorContextValue = {
|
|
28
|
+
frame: PayConductorFrame | null;
|
|
29
|
+
config: PayConductorConfig | null;
|
|
30
|
+
api: PayConductorApi;
|
|
31
|
+
selectedPaymentMethod?: PaymentMethod | null;
|
|
32
|
+
};
|
|
33
|
+
export type PayConductorState = {
|
|
34
|
+
isLoaded: boolean;
|
|
35
|
+
isReady: boolean;
|
|
36
|
+
error: string | null;
|
|
37
|
+
iframeUrl: string;
|
|
38
|
+
pendingMap: Map<string, PendingRequest> | null;
|
|
39
|
+
selectedPaymentMethod: PaymentMethod | null;
|
|
40
|
+
};
|
|
41
|
+
export type PendingRequest = {
|
|
42
|
+
resolve: (value: unknown) => void;
|
|
43
|
+
reject: (error: unknown) => void;
|
|
44
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PayConductorConfig } from './iframe/types';
|
|
2
|
+
|
|
3
|
+
export declare function buildIframeUrl(config: PayConductorConfig): string;
|
|
4
|
+
export declare function generateRequestId(): string;
|
|
5
|
+
export declare function isValidOrigin(origin: string, allowedOrigins: string[]): boolean;
|
package/package.json
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payconductor-sdk-web/library-react",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "React SDK for PayConductor",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "
|
|
7
|
-
"module": "
|
|
8
|
-
"types": "
|
|
6
|
+
"main": "dist/index.cjs.js",
|
|
7
|
+
"module": "dist/index.es.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
9
|
"files": [
|
|
10
10
|
"dist"
|
|
11
11
|
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc && vite build",
|
|
14
|
+
"build:watch": "vite build --watch",
|
|
15
|
+
"dev": "vite build --watch"
|
|
16
|
+
},
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"import": "./dist/index.es.js",
|
|
20
|
+
"require": "./dist/index.cjs.js",
|
|
21
|
+
"types": "./dist/index.d.ts"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
12
24
|
"repository": {
|
|
13
25
|
"type": "git",
|
|
14
26
|
"url": "http://github.com/payconductor-ai/payconductor-sdk-web"
|
|
@@ -27,13 +39,6 @@
|
|
|
27
39
|
"sdk",
|
|
28
40
|
"checkout"
|
|
29
41
|
],
|
|
30
|
-
"exports": {
|
|
31
|
-
".": {
|
|
32
|
-
"import": "./dist/index.js",
|
|
33
|
-
"require": "./dist/index.js",
|
|
34
|
-
"types": "./dist/index.d.ts"
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
42
|
"publishConfig": {
|
|
38
43
|
"access": "public"
|
|
39
44
|
},
|
|
@@ -46,6 +51,8 @@
|
|
|
46
51
|
"@types/react-dom": "^18.0.0",
|
|
47
52
|
"react": "^18.0.0",
|
|
48
53
|
"react-dom": "^18.0.0",
|
|
49
|
-
"typescript": "^5.0.0"
|
|
54
|
+
"typescript": "^5.0.0",
|
|
55
|
+
"vite": "^5.0.0",
|
|
56
|
+
"vite-plugin-dts": "^3.9.0"
|
|
50
57
|
}
|
|
51
58
|
}
|