@thavguard/arc-pay 0.1.13 → 0.1.15
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 +18 -20
- package/dist/{actions-BDRBji85.d.cts → actions-Bk3pXeI2.d.cts} +77 -14
- package/dist/{actions-BDRBji85.d.ts → actions-Bk3pXeI2.d.ts} +77 -14
- package/dist/cdn/arcpay.global.js +2 -2
- package/dist/cdn/arcpay.global.js.map +1 -1
- package/dist/index.cjs +124 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.mjs +123 -2
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.mjs +1 -1
- package/dist/react/index.mjs.map +1 -1
- package/dist/server/index.cjs +151 -2
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.cts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.mjs +150 -3
- package/dist/server/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -75,28 +75,25 @@ return as navigation only; confirm the final status through webhooks or
|
|
|
75
75
|
`GET /payments/{id}`.
|
|
76
76
|
|
|
77
77
|
H2H card execution returns a standardized `next_action` when the buyer must do
|
|
78
|
-
something in the browser.
|
|
79
|
-
|
|
78
|
+
something in the browser. Use `runThreeDSBrowserFlow()` to run the 3DS Method
|
|
79
|
+
hidden iframe, call your backend completion proxy, and submit any returned ACS
|
|
80
|
+
challenge form:
|
|
80
81
|
|
|
81
82
|
```ts
|
|
82
|
-
import {
|
|
83
|
-
buildThreeDSBrowserStep,
|
|
84
|
-
buildThreeDSMethodCompletion,
|
|
85
|
-
getThreeDSAction,
|
|
86
|
-
} from "@thavguard/arc-pay/server";
|
|
83
|
+
import { runThreeDSBrowserFlow } from "@thavguard/arc-pay/js";
|
|
87
84
|
|
|
88
85
|
const result = await client.executePayment(paymentId, body, { idempotencyKey });
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
86
|
+
await runThreeDSBrowserFlow(result.next_action, {
|
|
87
|
+
async completeThreeDSMethod(completion) {
|
|
88
|
+
const response = await fetch(`/api/payments/${paymentId}/complete-3ds-method`, {
|
|
89
|
+
method: "POST",
|
|
90
|
+
headers: { "Content-Type": "application/json" },
|
|
91
|
+
body: JSON.stringify(completion),
|
|
92
|
+
});
|
|
93
|
+
if (!response.ok) throw new Error("3DS Method completion failed");
|
|
94
|
+
return response.json();
|
|
95
|
+
},
|
|
96
|
+
});
|
|
100
97
|
```
|
|
101
98
|
|
|
102
99
|
Do not branch on bank-specific 3DS fields. Arc Pay normalizes 3DS 1.x and 2.x
|
|
@@ -104,8 +101,9 @@ into `next_action.three_ds.submit`.
|
|
|
104
101
|
|
|
105
102
|
After the browser step redirects or the customer returns to your order page,
|
|
106
103
|
use `waitForPaymentTerminal(paymentId)` or your own webhook/status loop. The
|
|
107
|
-
helper polls `GET /payments/{id}` and stops at terminal Arc Pay statuses
|
|
108
|
-
|
|
104
|
+
server helper polls `GET /payments/{id}` and stops at terminal Arc Pay statuses.
|
|
105
|
+
The browser helper automates the merchant-owned handoff, but the issuer ACS page
|
|
106
|
+
still belongs to the bank after the challenge form is submitted.
|
|
109
107
|
|
|
110
108
|
For saved cards and subscriptions, create a setup intent with
|
|
111
109
|
`createCardSetup()`, tokenize through Hosted Fields, execute the setup payment,
|
|
@@ -95,21 +95,51 @@ interface Refund {
|
|
|
95
95
|
reason?: string;
|
|
96
96
|
created_at: string;
|
|
97
97
|
}
|
|
98
|
-
|
|
98
|
+
type WalletInteractionAction = "redirect" | "deeplink" | "qr" | "sdk" | "phone_push";
|
|
99
|
+
type WalletInteractionSurface = "merchant_web" | "merchant_app" | "native_app";
|
|
100
|
+
interface WalletInteraction {
|
|
101
|
+
provider: PaymentMethod;
|
|
102
|
+
surface: WalletInteractionSurface;
|
|
103
|
+
action: WalletInteractionAction;
|
|
104
|
+
back_url?: string;
|
|
105
|
+
app_deep_link?: string;
|
|
106
|
+
phone?: string;
|
|
107
|
+
}
|
|
108
|
+
interface WalletAction {
|
|
109
|
+
provider: PaymentMethod;
|
|
110
|
+
action: WalletInteractionAction;
|
|
111
|
+
sdk?: string;
|
|
112
|
+
url?: string;
|
|
113
|
+
qr_url?: string;
|
|
114
|
+
qr_image_base64?: string;
|
|
115
|
+
qr_content_type?: "image/png" | "image/svg+xml";
|
|
116
|
+
bank_invoice_id?: string;
|
|
117
|
+
back_url?: string;
|
|
118
|
+
params?: Record<string, string>;
|
|
119
|
+
}
|
|
120
|
+
interface CardBrowserInfo {
|
|
121
|
+
accept_header: string;
|
|
122
|
+
language: string;
|
|
123
|
+
screen_width: number;
|
|
124
|
+
screen_height: number;
|
|
125
|
+
color_depth: 1 | 4 | 8 | 15 | 16 | 24 | 32 | 48;
|
|
126
|
+
timezone_offset_minutes: number;
|
|
127
|
+
java_enabled?: boolean;
|
|
128
|
+
user_agent: string;
|
|
129
|
+
window_size?: "01" | "02" | "03" | "04" | "05";
|
|
130
|
+
}
|
|
131
|
+
interface CardExecutePaymentRequest {
|
|
132
|
+
payment_method: "bank_card";
|
|
99
133
|
card_token_id: string;
|
|
100
134
|
payment_mode: "h2h";
|
|
101
|
-
browser_info:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
timezone_offset_minutes: number;
|
|
108
|
-
java_enabled?: boolean;
|
|
109
|
-
user_agent: string;
|
|
110
|
-
window_size?: "01" | "02" | "03" | "04" | "05";
|
|
111
|
-
};
|
|
135
|
+
browser_info: CardBrowserInfo;
|
|
136
|
+
}
|
|
137
|
+
interface WalletExecutePaymentRequest {
|
|
138
|
+
payment_method: Exclude<PaymentMethod, "bank_card">;
|
|
139
|
+
payment_mode: "h2h";
|
|
140
|
+
wallet_interaction: WalletInteraction;
|
|
112
141
|
}
|
|
142
|
+
type ExecutePaymentRequest = CardExecutePaymentRequest | WalletExecutePaymentRequest;
|
|
113
143
|
interface ExecutePaymentResponse {
|
|
114
144
|
payment_id: string;
|
|
115
145
|
status: "authorized" | "captured" | "pending" | "pending_3ds" | "failed" | "declined";
|
|
@@ -117,6 +147,7 @@ interface ExecutePaymentResponse {
|
|
|
117
147
|
payment_mode?: PaymentFlowMode;
|
|
118
148
|
liability_shifted?: boolean;
|
|
119
149
|
card_token_id?: string;
|
|
150
|
+
wallet_action?: WalletAction;
|
|
120
151
|
next_action?: PaymentNextAction;
|
|
121
152
|
decline_code?: string;
|
|
122
153
|
decline_message?: string;
|
|
@@ -295,7 +326,7 @@ interface ListAvailablePaymentMethodsQuery {
|
|
|
295
326
|
}
|
|
296
327
|
|
|
297
328
|
type ThreeDSAction = PaymentNextAction;
|
|
298
|
-
type BrowserInfo =
|
|
329
|
+
type BrowserInfo = CardBrowserInfo;
|
|
299
330
|
interface BrowserFormField {
|
|
300
331
|
name: string;
|
|
301
332
|
value: string;
|
|
@@ -313,6 +344,36 @@ interface ThreeDSBrowserStep {
|
|
|
313
344
|
completionEndpoint?: string;
|
|
314
345
|
threeDSServerTransId?: string;
|
|
315
346
|
}
|
|
347
|
+
interface MountedThreeDSForm {
|
|
348
|
+
form: HTMLFormElement;
|
|
349
|
+
iframe?: HTMLIFrameElement;
|
|
350
|
+
submit: () => void;
|
|
351
|
+
remove: () => void;
|
|
352
|
+
}
|
|
353
|
+
interface ThreeDSMountOptions {
|
|
354
|
+
document?: Document;
|
|
355
|
+
container?: HTMLElement;
|
|
356
|
+
challengeTarget?: string;
|
|
357
|
+
submitter?: (form: HTMLFormElement) => void;
|
|
358
|
+
}
|
|
359
|
+
interface RunThreeDSBrowserFlowOptions extends ThreeDSMountOptions {
|
|
360
|
+
completeThreeDSMethod: (completion: ReturnType<typeof buildThreeDSMethodCompletion>, nextAction: PaymentNextAction) => Promise<ExecutePaymentResponse>;
|
|
361
|
+
methodCompletionIndicator?: "Y" | "N" | "U";
|
|
362
|
+
methodTimeoutMs?: number;
|
|
363
|
+
signal?: AbortSignal;
|
|
364
|
+
}
|
|
365
|
+
type ThreeDSBrowserFlowResult = {
|
|
366
|
+
status: "no_action";
|
|
367
|
+
response?: ExecutePaymentResponse;
|
|
368
|
+
} | {
|
|
369
|
+
status: "method_completed";
|
|
370
|
+
response: ExecutePaymentResponse;
|
|
371
|
+
} | {
|
|
372
|
+
status: "challenge_submitted";
|
|
373
|
+
action: PaymentNextAction;
|
|
374
|
+
response?: ExecutePaymentResponse;
|
|
375
|
+
mounted: MountedThreeDSForm;
|
|
376
|
+
};
|
|
316
377
|
declare const collectBrowserInfo: (acceptHeader?: string) => BrowserInfo;
|
|
317
378
|
declare const getThreeDSAction: (nextAction?: PaymentNextAction) => PaymentNextAction | null;
|
|
318
379
|
declare const isThreeDSMethodAction: (nextAction?: PaymentNextAction) => boolean;
|
|
@@ -323,6 +384,8 @@ declare const buildThreeDSMethodCompletion: (nextAction: PaymentNextAction, comp
|
|
|
323
384
|
completion_indicator: "Y" | "N" | "U";
|
|
324
385
|
three_ds_server_trans_id: string;
|
|
325
386
|
};
|
|
387
|
+
declare const mountThreeDSBrowserForm: (nextAction: PaymentNextAction, options?: ThreeDSMountOptions) => MountedThreeDSForm;
|
|
388
|
+
declare const runThreeDSBrowserFlow: (nextAction: PaymentNextAction | undefined, options: RunThreeDSBrowserFlowOptions) => Promise<ThreeDSBrowserFlowResult>;
|
|
326
389
|
declare const buildThreeDSAutoSubmitHtml: (nextAction: PaymentNextAction) => string;
|
|
327
390
|
|
|
328
|
-
export { type AvailablePaymentMethod as A, type BrowserFormField as B, type CaptureRequest as C, type ExecutePaymentRequest as E, type Link as L, type Payment as P, type Refund as R, type ThreeDSAction as T, type VoidRequest as V, type WaitForPaymentOptions as W, type BrowserInfo as a, type BrowserPostForm as b, type ChargeSavedCardRequest as c, type CheckoutSession as d, type CompleteThreeDSMethodRequest as e, type CreateCardSetupRequest as f, type CreateCheckoutSessionRequest as g, type CreateLinkRequest as h, type CreatePaymentRequest as i, type CreateRefundRequest as j, type ExecutePaymentResponse as k, type ListAvailablePaymentMethodsQuery as l, type ListPaymentsQuery as m, type PaymentFlowMode as n, type PaymentList as o, type PaymentMethod as p, type PaymentNextAction as q, type
|
|
391
|
+
export { type AvailablePaymentMethod as A, type BrowserFormField as B, type CaptureRequest as C, getThreeDSAction as D, type ExecutePaymentRequest as E, isThreeDSChallengeAction as F, isThreeDSMethodAction as G, mountThreeDSBrowserForm as H, runThreeDSBrowserFlow as I, type Link as L, type MountedThreeDSForm as M, type Payment as P, type Refund as R, type ThreeDSAction as T, type VoidRequest as V, type WaitForPaymentOptions as W, type BrowserInfo as a, type BrowserPostForm as b, type ChargeSavedCardRequest as c, type CheckoutSession as d, type CompleteThreeDSMethodRequest as e, type CreateCardSetupRequest as f, type CreateCheckoutSessionRequest as g, type CreateLinkRequest as h, type CreatePaymentRequest as i, type CreateRefundRequest as j, type ExecutePaymentResponse as k, type ListAvailablePaymentMethodsQuery as l, type ListPaymentsQuery as m, type PaymentFlowMode as n, type PaymentList as o, type PaymentMethod as p, type PaymentNextAction as q, type RunThreeDSBrowserFlowOptions as r, type ThreeDSBrowserFlowResult as s, type ThreeDSBrowserStep as t, type ThreeDSMountOptions as u, buildThreeDSAutoSubmitHtml as v, buildThreeDSBrowserForm as w, buildThreeDSBrowserStep as x, buildThreeDSMethodCompletion as y, collectBrowserInfo as z };
|
|
@@ -95,21 +95,51 @@ interface Refund {
|
|
|
95
95
|
reason?: string;
|
|
96
96
|
created_at: string;
|
|
97
97
|
}
|
|
98
|
-
|
|
98
|
+
type WalletInteractionAction = "redirect" | "deeplink" | "qr" | "sdk" | "phone_push";
|
|
99
|
+
type WalletInteractionSurface = "merchant_web" | "merchant_app" | "native_app";
|
|
100
|
+
interface WalletInteraction {
|
|
101
|
+
provider: PaymentMethod;
|
|
102
|
+
surface: WalletInteractionSurface;
|
|
103
|
+
action: WalletInteractionAction;
|
|
104
|
+
back_url?: string;
|
|
105
|
+
app_deep_link?: string;
|
|
106
|
+
phone?: string;
|
|
107
|
+
}
|
|
108
|
+
interface WalletAction {
|
|
109
|
+
provider: PaymentMethod;
|
|
110
|
+
action: WalletInteractionAction;
|
|
111
|
+
sdk?: string;
|
|
112
|
+
url?: string;
|
|
113
|
+
qr_url?: string;
|
|
114
|
+
qr_image_base64?: string;
|
|
115
|
+
qr_content_type?: "image/png" | "image/svg+xml";
|
|
116
|
+
bank_invoice_id?: string;
|
|
117
|
+
back_url?: string;
|
|
118
|
+
params?: Record<string, string>;
|
|
119
|
+
}
|
|
120
|
+
interface CardBrowserInfo {
|
|
121
|
+
accept_header: string;
|
|
122
|
+
language: string;
|
|
123
|
+
screen_width: number;
|
|
124
|
+
screen_height: number;
|
|
125
|
+
color_depth: 1 | 4 | 8 | 15 | 16 | 24 | 32 | 48;
|
|
126
|
+
timezone_offset_minutes: number;
|
|
127
|
+
java_enabled?: boolean;
|
|
128
|
+
user_agent: string;
|
|
129
|
+
window_size?: "01" | "02" | "03" | "04" | "05";
|
|
130
|
+
}
|
|
131
|
+
interface CardExecutePaymentRequest {
|
|
132
|
+
payment_method: "bank_card";
|
|
99
133
|
card_token_id: string;
|
|
100
134
|
payment_mode: "h2h";
|
|
101
|
-
browser_info:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
timezone_offset_minutes: number;
|
|
108
|
-
java_enabled?: boolean;
|
|
109
|
-
user_agent: string;
|
|
110
|
-
window_size?: "01" | "02" | "03" | "04" | "05";
|
|
111
|
-
};
|
|
135
|
+
browser_info: CardBrowserInfo;
|
|
136
|
+
}
|
|
137
|
+
interface WalletExecutePaymentRequest {
|
|
138
|
+
payment_method: Exclude<PaymentMethod, "bank_card">;
|
|
139
|
+
payment_mode: "h2h";
|
|
140
|
+
wallet_interaction: WalletInteraction;
|
|
112
141
|
}
|
|
142
|
+
type ExecutePaymentRequest = CardExecutePaymentRequest | WalletExecutePaymentRequest;
|
|
113
143
|
interface ExecutePaymentResponse {
|
|
114
144
|
payment_id: string;
|
|
115
145
|
status: "authorized" | "captured" | "pending" | "pending_3ds" | "failed" | "declined";
|
|
@@ -117,6 +147,7 @@ interface ExecutePaymentResponse {
|
|
|
117
147
|
payment_mode?: PaymentFlowMode;
|
|
118
148
|
liability_shifted?: boolean;
|
|
119
149
|
card_token_id?: string;
|
|
150
|
+
wallet_action?: WalletAction;
|
|
120
151
|
next_action?: PaymentNextAction;
|
|
121
152
|
decline_code?: string;
|
|
122
153
|
decline_message?: string;
|
|
@@ -295,7 +326,7 @@ interface ListAvailablePaymentMethodsQuery {
|
|
|
295
326
|
}
|
|
296
327
|
|
|
297
328
|
type ThreeDSAction = PaymentNextAction;
|
|
298
|
-
type BrowserInfo =
|
|
329
|
+
type BrowserInfo = CardBrowserInfo;
|
|
299
330
|
interface BrowserFormField {
|
|
300
331
|
name: string;
|
|
301
332
|
value: string;
|
|
@@ -313,6 +344,36 @@ interface ThreeDSBrowserStep {
|
|
|
313
344
|
completionEndpoint?: string;
|
|
314
345
|
threeDSServerTransId?: string;
|
|
315
346
|
}
|
|
347
|
+
interface MountedThreeDSForm {
|
|
348
|
+
form: HTMLFormElement;
|
|
349
|
+
iframe?: HTMLIFrameElement;
|
|
350
|
+
submit: () => void;
|
|
351
|
+
remove: () => void;
|
|
352
|
+
}
|
|
353
|
+
interface ThreeDSMountOptions {
|
|
354
|
+
document?: Document;
|
|
355
|
+
container?: HTMLElement;
|
|
356
|
+
challengeTarget?: string;
|
|
357
|
+
submitter?: (form: HTMLFormElement) => void;
|
|
358
|
+
}
|
|
359
|
+
interface RunThreeDSBrowserFlowOptions extends ThreeDSMountOptions {
|
|
360
|
+
completeThreeDSMethod: (completion: ReturnType<typeof buildThreeDSMethodCompletion>, nextAction: PaymentNextAction) => Promise<ExecutePaymentResponse>;
|
|
361
|
+
methodCompletionIndicator?: "Y" | "N" | "U";
|
|
362
|
+
methodTimeoutMs?: number;
|
|
363
|
+
signal?: AbortSignal;
|
|
364
|
+
}
|
|
365
|
+
type ThreeDSBrowserFlowResult = {
|
|
366
|
+
status: "no_action";
|
|
367
|
+
response?: ExecutePaymentResponse;
|
|
368
|
+
} | {
|
|
369
|
+
status: "method_completed";
|
|
370
|
+
response: ExecutePaymentResponse;
|
|
371
|
+
} | {
|
|
372
|
+
status: "challenge_submitted";
|
|
373
|
+
action: PaymentNextAction;
|
|
374
|
+
response?: ExecutePaymentResponse;
|
|
375
|
+
mounted: MountedThreeDSForm;
|
|
376
|
+
};
|
|
316
377
|
declare const collectBrowserInfo: (acceptHeader?: string) => BrowserInfo;
|
|
317
378
|
declare const getThreeDSAction: (nextAction?: PaymentNextAction) => PaymentNextAction | null;
|
|
318
379
|
declare const isThreeDSMethodAction: (nextAction?: PaymentNextAction) => boolean;
|
|
@@ -323,6 +384,8 @@ declare const buildThreeDSMethodCompletion: (nextAction: PaymentNextAction, comp
|
|
|
323
384
|
completion_indicator: "Y" | "N" | "U";
|
|
324
385
|
three_ds_server_trans_id: string;
|
|
325
386
|
};
|
|
387
|
+
declare const mountThreeDSBrowserForm: (nextAction: PaymentNextAction, options?: ThreeDSMountOptions) => MountedThreeDSForm;
|
|
388
|
+
declare const runThreeDSBrowserFlow: (nextAction: PaymentNextAction | undefined, options: RunThreeDSBrowserFlowOptions) => Promise<ThreeDSBrowserFlowResult>;
|
|
326
389
|
declare const buildThreeDSAutoSubmitHtml: (nextAction: PaymentNextAction) => string;
|
|
327
390
|
|
|
328
|
-
export { type AvailablePaymentMethod as A, type BrowserFormField as B, type CaptureRequest as C, type ExecutePaymentRequest as E, type Link as L, type Payment as P, type Refund as R, type ThreeDSAction as T, type VoidRequest as V, type WaitForPaymentOptions as W, type BrowserInfo as a, type BrowserPostForm as b, type ChargeSavedCardRequest as c, type CheckoutSession as d, type CompleteThreeDSMethodRequest as e, type CreateCardSetupRequest as f, type CreateCheckoutSessionRequest as g, type CreateLinkRequest as h, type CreatePaymentRequest as i, type CreateRefundRequest as j, type ExecutePaymentResponse as k, type ListAvailablePaymentMethodsQuery as l, type ListPaymentsQuery as m, type PaymentFlowMode as n, type PaymentList as o, type PaymentMethod as p, type PaymentNextAction as q, type
|
|
391
|
+
export { type AvailablePaymentMethod as A, type BrowserFormField as B, type CaptureRequest as C, getThreeDSAction as D, type ExecutePaymentRequest as E, isThreeDSChallengeAction as F, isThreeDSMethodAction as G, mountThreeDSBrowserForm as H, runThreeDSBrowserFlow as I, type Link as L, type MountedThreeDSForm as M, type Payment as P, type Refund as R, type ThreeDSAction as T, type VoidRequest as V, type WaitForPaymentOptions as W, type BrowserInfo as a, type BrowserPostForm as b, type ChargeSavedCardRequest as c, type CheckoutSession as d, type CompleteThreeDSMethodRequest as e, type CreateCardSetupRequest as f, type CreateCheckoutSessionRequest as g, type CreateLinkRequest as h, type CreatePaymentRequest as i, type CreateRefundRequest as j, type ExecutePaymentResponse as k, type ListAvailablePaymentMethodsQuery as l, type ListPaymentsQuery as m, type PaymentFlowMode as n, type PaymentList as o, type PaymentMethod as p, type PaymentNextAction as q, type RunThreeDSBrowserFlowOptions as r, type ThreeDSBrowserFlowResult as s, type ThreeDSBrowserStep as t, type ThreeDSMountOptions as u, buildThreeDSAutoSubmitHtml as v, buildThreeDSBrowserForm as w, buildThreeDSBrowserStep as x, buildThreeDSMethodCompletion as y, collectBrowserInfo as z };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var ArcPay=(function(exports){'use strict';var n=class extends Error{constructor(t){super(t.message),this.name="ArcPayError",this.type=t.type,this.code=t.code,this.param=t.param,this.paymentId=t.paymentId,this.declineCode=t.declineCode,this.retryable=t.retryable,this.requestId=t.requestId;}},C=e=>e instanceof n&&e.type==="validation_error",M=e=>e instanceof n&&e.type==="authentication_error",R=e=>e instanceof n&&e.type==="authorization_error",L=e=>e instanceof n&&e.type==="state_error",N=e=>e instanceof n&&e.type==="rate_limit_error",O=e=>e instanceof n&&e.type==="api_error",W=e=>e instanceof n&&e.type==="network_error",H=e=>e instanceof n&&e.type==="challenge_aborted";var f=e=>e.startsWith("pk_test_")?"sandbox":"live",S=e=>{if(typeof e!="string"||e.length===0)throw new n({type:"validation_error",code:"invalid_publishable_key",message:"Publishable key must be a non-empty string",retryable:false});if(!e.startsWith("pk_test_")&&!e.startsWith("pk_live_"))throw new n({type:"validation_error",code:"invalid_publishable_key",message:"Publishable key must start with pk_test_ or pk_live_. Secret keys (sk_*) cannot be used in browser.",retryable:false})};var I="data-arcpay-sandbox-banner",P=()=>{if(typeof document=="undefined"||document.querySelector(`[${I}]`))return;let e=document.createElement("div");e.setAttribute(I,""),e.style.cssText="position:fixed;top:0;left:0;right:0;z-index:2147483647;background:#ffd166;color:#222;font:13px/1.4 system-ui,sans-serif;padding:6px 12px;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 3px rgba(0,0,0,0.1);";let t=document.createElement("span");t.textContent="ARC PAY TEST MODE \u2014 payments are simulated",e.appendChild(t);let r=document.createElement("button");r.type="button",r.setAttribute("data-arcpay-banner-dismiss",""),r.textContent="\xD7",r.setAttribute("aria-label","Dismiss test mode banner"),r.style.cssText="margin-left:12px;background:transparent;border:0;font-size:18px;cursor:pointer;color:inherit;",r.addEventListener("click",()=>e.remove()),e.appendChild(r),document.body.appendChild(e);};var K="arcpay:",$=e=>typeof e=="object"&&e!==null&&"type"in e&&typeof e.type=="string"&&e.type.startsWith(K),u=(e,t,r)=>{if(r==="*")throw new n({type:"validation_error",code:"wildcard_origin_forbidden",message:"postToIframe: targetOrigin cannot be '*'",retryable:false});if(!e.contentWindow)throw new n({type:"validation_error",code:"iframe_not_loaded",message:"postToIframe: iframe.contentWindow is null (iframe not mounted)",retryable:false});e.contentWindow.postMessage(t,r);};var m=(e,t)=>e.origin!==t||!$(e.data)?null:e.data;var q=new Set(["position","transform","pointer-events","z-index","top","left","right","bottom","inset"]),g=e=>{let t={};for(let[r,o]of Object.entries(e)){let s=r.toLowerCase();q.has(s)||(t[r]=o);}return t},b=e=>{let t={base:g(e.base)};return e.invalid!==void 0&&(t.invalid=g(e.invalid)),e.focus!==void 0&&(t.focus=g(e.focus)),t};var y=class{constructor(t,r,o){this.field=t;this.options=r;this.context=o;this.iframe=null;this.listeners=new Set;this.status="pending";this.messageHandler=null;}mount(t){if(this.iframe)throw new n({type:"validation_error",code:"already_mounted",message:`Element ${this.field} is already mounted`,retryable:false});let r=typeof t=="string"?document.querySelector(t):t;if(!(r instanceof HTMLElement))throw new n({type:"validation_error",code:"mount_target_not_found",message:`mount target not found: ${String(t)}`,retryable:false});let o=document.createElement("iframe");o.src=`${this.context.iframeBase}/iframe/${this.field}`,o.style.cssText="border:0;width:100%;height:100%;display:block;",o.setAttribute("allow","payment"),o.setAttribute("data-arcpay-element",this.field),r.appendChild(o),this.iframe=o;let s=new URL(this.context.iframeBase).origin;this.messageHandler=a=>{var l;if(a.source!==((l=this.iframe)==null?void 0:l.contentWindow))return;let p=m(a,s);p&&this.handleMessage(p);},window.addEventListener("message",this.messageHandler),o.addEventListener("load",()=>{if(!this.iframe)return;let a={type:"arcpay:hello",origin:window.location.origin,publishableKey:this.context.publishableKey,channelId:this.context.channelId};u(this.iframe,a,s);},{once:true});}handleMessage(t){t.type==="arcpay:ready"?(this.status="ready",this.options.style&&this.send({type:"arcpay:style",payload:b(this.options.style)}),this.emit({type:"ready"})):t.type==="arcpay:rejected"?(this.status="error",this.emit({type:"error",reason:t.reason})):t.type==="arcpay:change"&&t.field===this.field&&this.emit({type:"change",isValid:t.isValid,brand:t.brand,lastFour:t.lastFour});}update(t){t.style&&this.send({type:"arcpay:style",payload:b(t.style)});}destroy(){this.iframe&&(this.iframe.remove(),this.iframe=null),this.messageHandler&&(window.removeEventListener("message",this.messageHandler),this.messageHandler=null),this.listeners.clear(),this.status="pending";}on(t,r){return this.listeners.add(r),()=>this.listeners.delete(r)}focus(){this.send({type:"arcpay:focus"});}clear(){this.send({type:"arcpay:clear"});}isReady(){return this.status==="ready"}getIframeContentWindow(){var t,r;return (r=(t=this.iframe)==null?void 0:t.contentWindow)!=null?r:null}send(t){if(!this.iframe)throw new n({type:"validation_error",code:"not_mounted",message:`Element ${this.field} is not mounted`,retryable:false});u(this.iframe,t,new URL(this.context.iframeBase).origin);}emit(t){for(let r of this.listeners)r(t);}};var U="https://sdk.arcpay.space",V=()=>{var e;if(!((e=globalThis.crypto)!=null&&e.randomUUID))throw new n({type:"validation_error",code:"crypto_unavailable",message:"crypto.randomUUID is required for Hosted Fields",retryable:false});return globalThis.crypto.randomUUID()},d=class{constructor(t){this.elementMap=new Map;this.tokenizeInFlight=false;var r;this.publishableKey=t.publishableKey,this.iframeBase=(r=t.iframeBase)!=null?r:U,this.channelId=V();}create(t,r={}){if(this.elementMap.has(t))throw new n({type:"validation_error",code:"duplicate_element",message:`Element for ${t} already created`,retryable:false});let o={iframeBase:this.iframeBase,publishableKey:this.publishableKey,channelId:this.channelId},s=new y(t,r,o);return this.elementMap.set(t,s),s}async tokenize(t,r){if(this.tokenizeInFlight)throw new n({type:"validation_error",code:"tokenize_in_progress",message:"A tokenize() call is already in progress for this Elements instance",retryable:false});let o=this.elementMap.get("cardNumber"),s=this.elementMap.get("cardExpiry"),a=this.elementMap.get("cardCvv");if(!o||!s||!a)throw new n({type:"validation_error",code:"incomplete_elements",message:"All three elements (cardNumber, cardExpiry, cardCvv) must be created and mounted before tokenize()",retryable:false});if(!o.isReady()||!s.isReady()||!a.isReady())throw new n({type:"validation_error",code:"elements_not_ready",message:"Wait for all elements to fire 'ready' event before tokenize()",retryable:false});this.tokenizeInFlight=true;try{return await this.doTokenize(o,t,r)}finally{this.tokenizeInFlight=false;}}doTokenize(t,r,o){let s=new URL(this.iframeBase).origin,a=t.getIframeContentWindow();return new Promise((p,l)=>{let x=window.setTimeout(()=>{window.removeEventListener("message",c),l(new n({type:"network_error",code:"tokenize_timeout",message:"tokenize() timed out after 30 seconds",retryable:true,paymentId:r}));},3e4),c=T=>{if(a!==null&&T.source!==a)return;let i=m(T,s);if(i){if(i.type==="arcpay:tokenize-result")clearTimeout(x),window.removeEventListener("message",c),p({cardTokenId:i.cardTokenId,cardMask:i.cardMask,cardScheme:i.cardScheme,cardBin:i.cardBin,expiresIn:i.expiresIn,expiresAt:i.expiresAt});else if(i.type==="arcpay:tokenize-error"){clearTimeout(x),window.removeEventListener("message",c);let F=i.errorType==="validation_error"||i.errorType==="api_error"?i.errorType:"api_error";l(new n({type:F,code:i.code,message:i.message,retryable:false,paymentId:r}));}}};window.addEventListener("message",c),t.send({type:"arcpay:tokenize",paymentId:r,idempotencyKey:o});})}destroy(){for(let t of this.elementMap.values())t.destroy();this.elementMap.clear();}};var j=S,_=new Map,Y=e=>(f(e)==="sandbox"&&P(),{publishableKey:e,environment:f(e),elements:()=>new d({publishableKey:e})});function X(e){try{j(e);}catch(s){return Promise.reject(s)}let t=e,r=_.get(t);if(r)return r;let o=Promise.resolve(Y(e));return _.set(t,o),o}var G=()=>{_.clear();},J={load:X,__resetForTests:G};var Q=[1,4,8,15,16,24,32,48],Z=e=>Q.includes(e)?e:24,ee=e=>e>=1e3?"05":e>=600?"04":e>=500?"03":e>=390?"02":"01",k=(e="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")=>{if(typeof window=="undefined"||typeof navigator=="undefined"||typeof screen=="undefined")throw new Error("collectBrowserInfo must be called in a browser environment");return {accept_header:e,language:navigator.language||"en",screen_width:screen.width,screen_height:screen.height,color_depth:Z(screen.colorDepth),timezone_offset_minutes:new Date().getTimezoneOffset(),java_enabled:false,user_agent:navigator.userAgent,window_size:ee(window.innerWidth||screen.width)}},v=e=>e!=null?e:null,E=e=>(e==null?void 0:e.type)==="three_ds_method"&&e.three_ds.phase==="method",A=e=>(e==null?void 0:e.type)==="three_ds_challenge"&&e.three_ds.phase==="challenge",h=e=>({action:e.three_ds.submit.url,method:e.three_ds.submit.method,target:e.three_ds.submit.target,fields:e.three_ds.submit.fields}),B=e=>{let t=v(e);return t?{kind:t.three_ds.phase,protocolVersion:t.three_ds.version,form:h(t),completionEndpoint:t.three_ds.completion_endpoint,threeDSServerTransId:t.three_ds.three_ds_server_trans_id}:null},z=(e,t="Y")=>{if(!E(e)||!e.three_ds.three_ds_server_trans_id)throw new Error("nextAction must be a three_ds_method action with three_ds_server_trans_id");return {completion_indicator:t,three_ds_server_trans_id:e.three_ds.three_ds_server_trans_id}},w=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"),D=e=>{let t=h(e),r=t.target==="hidden_iframe"?"arcpay-three-ds-method":"_self",o=t.fields.map(a=>`<input type="hidden" name="${w(a.name)}" value="${w(a.value)}">`).join("");return `<!doctype html><html><head><meta charset="utf-8"></head><body>${t.target==="hidden_iframe"?'<iframe name="arcpay-three-ds-method" title="3-D Secure method" hidden></iframe>':""}<form method="POST" action="${w(t.action)}" target="${r}">${o}</form><script>document.forms[0].submit();</script></body></html>`};var xe="0.1.13";
|
|
2
|
-
exports.ArcPay=
|
|
1
|
+
var ArcPay=(function(exports){'use strict';var s=class extends Error{constructor(t){super(t.message),this.name="ArcPayError",this.type=t.type,this.code=t.code,this.param=t.param,this.paymentId=t.paymentId,this.declineCode=t.declineCode,this.retryable=t.retryable,this.requestId=t.requestId;}},C=e=>e instanceof s&&e.type==="validation_error",L=e=>e instanceof s&&e.type==="authentication_error",O=e=>e instanceof s&&e.type==="authorization_error",N=e=>e instanceof s&&e.type==="state_error",H=e=>e instanceof s&&e.type==="rate_limit_error",W=e=>e instanceof s&&e.type==="api_error",U=e=>e instanceof s&&e.type==="network_error",$=e=>e instanceof s&&e.type==="challenge_aborted";var T=e=>e.startsWith("pk_test_")?"sandbox":"live",D=e=>{if(typeof e!="string"||e.length===0)throw new s({type:"validation_error",code:"invalid_publishable_key",message:"Publishable key must be a non-empty string",retryable:false});if(!e.startsWith("pk_test_")&&!e.startsWith("pk_live_"))throw new s({type:"validation_error",code:"invalid_publishable_key",message:"Publishable key must start with pk_test_ or pk_live_. Secret keys (sk_*) cannot be used in browser.",retryable:false})};var k="data-arcpay-sandbox-banner",A=()=>{if(typeof document=="undefined"||document.querySelector(`[${k}]`))return;let e=document.createElement("div");e.setAttribute(k,""),e.style.cssText="position:fixed;top:0;left:0;right:0;z-index:2147483647;background:#ffd166;color:#222;font:13px/1.4 system-ui,sans-serif;padding:6px 12px;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 3px rgba(0,0,0,0.1);";let t=document.createElement("span");t.textContent="ARC PAY TEST MODE \u2014 payments are simulated",e.appendChild(t);let r=document.createElement("button");r.type="button",r.setAttribute("data-arcpay-banner-dismiss",""),r.textContent="\xD7",r.setAttribute("aria-label","Dismiss test mode banner"),r.style.cssText="margin-left:12px;background:transparent;border:0;font-size:18px;cursor:pointer;color:inherit;",r.addEventListener("click",()=>e.remove()),e.appendChild(r),document.body.appendChild(e);};var K="arcpay:",q=e=>typeof e=="object"&&e!==null&&"type"in e&&typeof e.type=="string"&&e.type.startsWith(K),v=(e,t,r)=>{if(r==="*")throw new s({type:"validation_error",code:"wildcard_origin_forbidden",message:"postToIframe: targetOrigin cannot be '*'",retryable:false});if(!e.contentWindow)throw new s({type:"validation_error",code:"iframe_not_loaded",message:"postToIframe: iframe.contentWindow is null (iframe not mounted)",retryable:false});e.contentWindow.postMessage(t,r);};var f=(e,t)=>e.origin!==t||!q(e.data)?null:e.data;var V=new Set(["position","transform","pointer-events","z-index","top","left","right","bottom","inset"]),E=e=>{let t={};for(let[r,n]of Object.entries(e)){let i=r.toLowerCase();V.has(i)||(t[r]=n);}return t},x=e=>{let t={base:E(e.base)};return e.invalid!==void 0&&(t.invalid=E(e.invalid)),e.focus!==void 0&&(t.focus=E(e.focus)),t};var g=class{constructor(t,r,n){this.field=t;this.options=r;this.context=n;this.iframe=null;this.listeners=new Set;this.status="pending";this.messageHandler=null;}mount(t){if(this.iframe)throw new s({type:"validation_error",code:"already_mounted",message:`Element ${this.field} is already mounted`,retryable:false});let r=typeof t=="string"?document.querySelector(t):t;if(!(r instanceof HTMLElement))throw new s({type:"validation_error",code:"mount_target_not_found",message:`mount target not found: ${String(t)}`,retryable:false});let n=document.createElement("iframe");n.src=`${this.context.iframeBase}/iframe/${this.field}`,n.style.cssText="border:0;width:100%;height:100%;display:block;",n.setAttribute("allow","payment"),n.setAttribute("data-arcpay-element",this.field),r.appendChild(n),this.iframe=n;let i=new URL(this.context.iframeBase).origin;this.messageHandler=o=>{var l;if(o.source!==((l=this.iframe)==null?void 0:l.contentWindow))return;let m=f(o,i);m&&this.handleMessage(m);},window.addEventListener("message",this.messageHandler),n.addEventListener("load",()=>{if(!this.iframe)return;let o={type:"arcpay:hello",origin:window.location.origin,publishableKey:this.context.publishableKey,channelId:this.context.channelId};v(this.iframe,o,i);},{once:true});}handleMessage(t){t.type==="arcpay:ready"?(this.status="ready",this.options.style&&this.send({type:"arcpay:style",payload:x(this.options.style)}),this.emit({type:"ready"})):t.type==="arcpay:rejected"?(this.status="error",this.emit({type:"error",reason:t.reason})):t.type==="arcpay:change"&&t.field===this.field&&this.emit({type:"change",isValid:t.isValid,brand:t.brand,lastFour:t.lastFour});}update(t){t.style&&this.send({type:"arcpay:style",payload:x(t.style)});}destroy(){this.iframe&&(this.iframe.remove(),this.iframe=null),this.messageHandler&&(window.removeEventListener("message",this.messageHandler),this.messageHandler=null),this.listeners.clear(),this.status="pending";}on(t,r){return this.listeners.add(r),()=>this.listeners.delete(r)}focus(){this.send({type:"arcpay:focus"});}clear(){this.send({type:"arcpay:clear"});}isReady(){return this.status==="ready"}getIframeContentWindow(){var t,r;return (r=(t=this.iframe)==null?void 0:t.contentWindow)!=null?r:null}send(t){if(!this.iframe)throw new s({type:"validation_error",code:"not_mounted",message:`Element ${this.field} is not mounted`,retryable:false});v(this.iframe,t,new URL(this.context.iframeBase).origin);}emit(t){for(let r of this.listeners)r(t);}};var Y="https://sdk.arcpay.space",j=()=>{var e;if(!((e=globalThis.crypto)!=null&&e.randomUUID))throw new s({type:"validation_error",code:"crypto_unavailable",message:"crypto.randomUUID is required for Hosted Fields",retryable:false});return globalThis.crypto.randomUUID()},u=class{constructor(t){this.elementMap=new Map;this.tokenizeInFlight=false;var r;this.publishableKey=t.publishableKey,this.iframeBase=(r=t.iframeBase)!=null?r:Y,this.channelId=j();}create(t,r={}){if(this.elementMap.has(t))throw new s({type:"validation_error",code:"duplicate_element",message:`Element for ${t} already created`,retryable:false});let n={iframeBase:this.iframeBase,publishableKey:this.publishableKey,channelId:this.channelId},i=new g(t,r,n);return this.elementMap.set(t,i),i}async tokenize(t,r){if(this.tokenizeInFlight)throw new s({type:"validation_error",code:"tokenize_in_progress",message:"A tokenize() call is already in progress for this Elements instance",retryable:false});let n=this.elementMap.get("cardNumber"),i=this.elementMap.get("cardExpiry"),o=this.elementMap.get("cardCvv");if(!n||!i||!o)throw new s({type:"validation_error",code:"incomplete_elements",message:"All three elements (cardNumber, cardExpiry, cardCvv) must be created and mounted before tokenize()",retryable:false});if(!n.isReady()||!i.isReady()||!o.isReady())throw new s({type:"validation_error",code:"elements_not_ready",message:"Wait for all elements to fire 'ready' event before tokenize()",retryable:false});this.tokenizeInFlight=true;try{return await this.doTokenize(n,t,r)}finally{this.tokenizeInFlight=false;}}doTokenize(t,r,n){let i=new URL(this.iframeBase).origin,o=t.getIframeContentWindow();return new Promise((m,l)=>{let d=window.setTimeout(()=>{window.removeEventListener("message",c),l(new s({type:"network_error",code:"tokenize_timeout",message:"tokenize() timed out after 30 seconds",retryable:true,paymentId:r}));},3e4),c=p=>{if(o!==null&&p.source!==o)return;let a=f(p,i);if(a){if(a.type==="arcpay:tokenize-result")clearTimeout(d),window.removeEventListener("message",c),m({cardTokenId:a.cardTokenId,cardMask:a.cardMask,cardScheme:a.cardScheme,cardBin:a.cardBin,expiresIn:a.expiresIn,expiresAt:a.expiresAt});else if(a.type==="arcpay:tokenize-error"){clearTimeout(d),window.removeEventListener("message",c);let R=a.errorType==="validation_error"||a.errorType==="api_error"?a.errorType:"api_error";l(new s({type:R,code:a.code,message:a.message,retryable:false,paymentId:r}));}}};window.addEventListener("message",c),t.send({type:"arcpay:tokenize",paymentId:r,idempotencyKey:n});})}destroy(){for(let t of this.elementMap.values())t.destroy();this.elementMap.clear();}};var X=D,S=new Map,G=e=>(T(e)==="sandbox"&&A(),{publishableKey:e,environment:T(e),elements:()=>new u({publishableKey:e})});function J(e){try{X(e);}catch(i){return Promise.reject(i)}let t=e,r=S.get(t);if(r)return r;let n=Promise.resolve(G(e));return S.set(t,n),n}var Q=()=>{S.clear();},Z={load:J,__resetForTests:Q};var ee=[1,4,8,15,16,24,32,48],te=e=>ee.includes(e)?e:24,re=e=>e>=1e3?"05":e>=600?"04":e>=500?"03":e>=390?"02":"01",F=(e="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")=>{if(typeof window=="undefined"||typeof navigator=="undefined"||typeof screen=="undefined")throw new Error("collectBrowserInfo must be called in a browser environment");return {accept_header:e,language:navigator.language||"en",screen_width:screen.width,screen_height:screen.height,color_depth:te(screen.colorDepth),timezone_offset_minutes:new Date().getTimezoneOffset(),java_enabled:false,user_agent:navigator.userAgent,window_size:re(window.innerWidth||screen.width)}},b=e=>e!=null?e:null,_=e=>(e==null?void 0:e.type)==="three_ds_method"&&e.three_ds.phase==="method",w=e=>(e==null?void 0:e.type)==="three_ds_challenge"&&e.three_ds.phase==="challenge",h=e=>({action:e.three_ds.submit.url,method:e.three_ds.submit.method,target:e.three_ds.submit.target,fields:e.three_ds.submit.fields}),B=e=>{let t=b(e);return t?{kind:t.three_ds.phase,protocolVersion:t.three_ds.version,form:h(t),completionEndpoint:t.three_ds.completion_endpoint,threeDSServerTransId:t.three_ds.three_ds_server_trans_id}:null},I=(e,t="Y")=>{if(!_(e)||!e.three_ds.three_ds_server_trans_id)throw new Error("nextAction must be a three_ds_method action with three_ds_server_trans_id");return {completion_indicator:t,three_ds_server_trans_id:e.three_ds.three_ds_server_trans_id}},oe=e=>{if(e)return e;if(typeof document=="undefined")throw new Error("3DS browser helpers must be called in a browser environment");return document},ne=e=>{e.submit();},y=(e,t={})=>{var d,c;let r=oe(t.document),n=(d=t.container)!=null?d:r.body,i=h(e),o=r.createElement("form"),m=i.target==="hidden_iframe"?`arcpay-three-ds-method-${Math.random().toString(36).slice(2)}`:(c=t.challengeTarget)!=null?c:"_self",l;o.method=i.method,o.action=i.action,o.target=m,o.hidden=true;for(let p of i.fields){let a=r.createElement("input");a.type="hidden",a.name=p.name,a.value=p.value,o.append(a);}return i.target==="hidden_iframe"&&(l=r.createElement("iframe"),l.name=m,l.title="3-D Secure method",l.hidden=true,n.append(l)),n.append(o),{form:o,iframe:l,submit:()=>{var p;return ((p=t.submitter)!=null?p:ne)(o)},remove:()=>{o.remove(),l==null||l.remove();}}},se=(e,t,r)=>new Promise((n,i)=>{if(!e.iframe){n("loaded");return}if(r!=null&&r.aborted){i(new DOMException("The operation was aborted","AbortError"));return}let o=false,m=()=>{var a;(a=e.iframe)==null||a.removeEventListener("load",d),r==null||r.removeEventListener("abort",c),clearTimeout(p);},l=a=>{o||(o=true,m(),n(a));},d=()=>l("loaded"),c=()=>{o||(o=true,m(),i(new DOMException("The operation was aborted","AbortError")));},p=setTimeout(()=>l("timeout"),t);e.iframe.addEventListener("load",d,{once:true}),r==null||r.addEventListener("abort",c,{once:true});}),M=async(e,t)=>{var n,i;if(!e)return {status:"no_action"};if(w(e)){let o=y(e,t);return o.submit(),{status:"challenge_submitted",action:e,mounted:o}}if(!_(e))return {status:"no_action"};let r=y(e,t);try{r.submit();let o=await se(r,(n=t.methodTimeoutMs)!=null?n:1e4,t.signal),m=(i=t.methodCompletionIndicator)!=null?i:o==="loaded"?"Y":"N",l=await t.completeThreeDSMethod(I(e,m),e),d=b(l.next_action);if(d&&w(d)){let c=y(d,t);return c.submit(),{status:"challenge_submitted",action:d,response:l,mounted:c}}return {status:"method_completed",response:l}}finally{r.remove();}},P=e=>e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"),z=e=>{let t=h(e),r=t.target==="hidden_iframe"?"arcpay-three-ds-method":"_self",n=t.fields.map(o=>`<input type="hidden" name="${P(o.name)}" value="${P(o.value)}">`).join("");return `<!doctype html><html><head><meta charset="utf-8"></head><body>${t.target==="hidden_iframe"?'<iframe name="arcpay-three-ds-method" title="3-D Secure method" hidden></iframe>':""}<form method="POST" action="${P(t.action)}" target="${r}">${n}</form><script>document.forms[0].submit();</script></body></html>`};var De="0.1.15";
|
|
2
|
+
exports.ArcPay=Z;exports.ArcPayError=s;exports.Elements=u;exports.SDK_VERSION=De;exports.buildThreeDSAutoSubmitHtml=z;exports.buildThreeDSBrowserForm=h;exports.buildThreeDSBrowserStep=B;exports.buildThreeDSMethodCompletion=I;exports.collectBrowserInfo=F;exports.getThreeDSAction=b;exports.isApiError=W;exports.isAuthenticationError=L;exports.isAuthorizationError=O;exports.isChallengeAborted=$;exports.isNetworkError=U;exports.isRateLimitError=H;exports.isStateError=N;exports.isThreeDSChallengeAction=w;exports.isThreeDSMethodAction=_;exports.isValidationError=C;exports.mountThreeDSBrowserForm=y;exports.runThreeDSBrowserFlow=M;return exports;})({});//# sourceMappingURL=arcpay.global.js.map
|
|
3
3
|
//# sourceMappingURL=arcpay.global.js.map
|