@bemony/payment-form 0.1.10 → 0.1.12
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 +17 -2
- package/dist/bemony-payment-form.min.js +1 -1
- package/dist/bemony-payment-form.min.js.map +3 -3
- package/dist/browser-context.d.ts.map +1 -1
- package/dist/contracts/errors.d.ts +10 -2
- package/dist/contracts/errors.d.ts.map +1 -1
- package/dist/contracts/types.d.ts +22 -0
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +243 -27
- package/dist/index.js.map +2 -2
- package/dist/mount.d.ts.map +1 -1
- package/dist/protocol.d.ts +4 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +36 -1
- package/dist/protocol.js.map +2 -2
- package/package.json +1 -1
|
@@ -156,9 +156,15 @@ export type PaymentFormErrorPayment = Readonly<{
|
|
|
156
156
|
attempts?: readonly PaymentFormErrorAttempt[];
|
|
157
157
|
}>;
|
|
158
158
|
}>;
|
|
159
|
+
/** Stable high-level class for browser-safe error handling and telemetry. */
|
|
160
|
+
export type PaymentFormErrorCategory = 'VALIDATION' | 'CONFIGURATION' | 'LIFECYCLE' | 'FRAME' | 'TOKENIZATION' | 'THREE_DS' | 'PAYMENT' | 'RUNTIME' | 'UNKNOWN';
|
|
161
|
+
/** Browser-safe operation boundary where a failure occurred. */
|
|
162
|
+
export type PaymentFormErrorStage = 'FORM_SDK' | 'FORM_IFRAME_NAVIGATION' | 'FORM_HANDSHAKE' | 'CARD_FRAME_DOCUMENT' | 'CARD_FRAME_HANDSHAKE' | 'CARD_FRAME_INITIALIZATION' | 'CARD_TOKENIZATION' | 'THREE_DS' | 'PAYMENT_SUBMISSION' | 'PAYMENT_RECONCILIATION' | 'RUNTIME';
|
|
159
163
|
export type PaymentFormError = Readonly<{
|
|
160
164
|
code: string;
|
|
161
165
|
message: string;
|
|
166
|
+
category?: PaymentFormErrorCategory;
|
|
167
|
+
stage?: PaymentFormErrorStage;
|
|
162
168
|
requestId?: string;
|
|
163
169
|
paymentId?: string;
|
|
164
170
|
retryable?: boolean;
|
|
@@ -168,6 +174,21 @@ export type PaymentFormError = Readonly<{
|
|
|
168
174
|
frameStage?: 'FRAME_DOCUMENT' | 'CARD_FRAME';
|
|
169
175
|
payment?: PaymentFormErrorPayment;
|
|
170
176
|
}>;
|
|
177
|
+
/**
|
|
178
|
+
* Non-sensitive lifecycle signal emitted by the Web SDK.
|
|
179
|
+
*
|
|
180
|
+
* It is intended for merchant telemetry only. It deliberately never includes
|
|
181
|
+
* card data, client secrets, risk collector values or payment tokens.
|
|
182
|
+
*/
|
|
183
|
+
export type PaymentFormEvent = Readonly<{
|
|
184
|
+
type: 'MOUNT_STARTED' | 'MOUNT_SLOW' | 'MOUNT_RETRY' | 'MOUNT_FAILED' | 'MOUNTED' | 'PAYMENT_STARTED' | 'PAYMENT_SUCCEEDED' | 'PAYMENT_FAILED' | 'DESTROYED';
|
|
185
|
+
attempt?: number;
|
|
186
|
+
/** Visible time spent in the current mount attempt, when applicable. */
|
|
187
|
+
durationMs?: number;
|
|
188
|
+
/** Last known non-sensitive mount boundary for mount events. */
|
|
189
|
+
stage?: PaymentFormErrorStage;
|
|
190
|
+
error?: PaymentFormError;
|
|
191
|
+
}>;
|
|
171
192
|
export type PaymentFormState = Readonly<{
|
|
172
193
|
status: PaymentFormStatus;
|
|
173
194
|
ready: boolean;
|
|
@@ -180,6 +201,7 @@ export type PaymentFormCallbacks = Readonly<{
|
|
|
180
201
|
onStatusChange?: (status: PaymentFormStatus) => void;
|
|
181
202
|
onSuccess?: (payment: PayOutcome) => void;
|
|
182
203
|
onError?: (error: PaymentFormError) => void;
|
|
204
|
+
onEvent?: (event: PaymentFormEvent) => void;
|
|
183
205
|
}>;
|
|
184
206
|
export type ThreeDSPresentation = 'modal' | 'inline';
|
|
185
207
|
export type PaymentFormAppearance = Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { BemonyPaymentForm } from './mount';
|
|
2
|
-
export type { Address, BrowserInfo, CardStorageConsent, CardState, CheckoutClient, Customer, PaymentFormAppearance, PayInput, PayOutcome, PaymentFormCallbacks, PaymentFormError, PaymentFormErrorAttempt, PaymentFormErrorPayment, PaymentFormInstance, PaymentFormMountOptions, PaymentFormState, PaymentFormStatus, PaymentAmounts, PaymentItem, PaymentStatus, RiskCollector, ShippingAddress, ThreeDSPresentation } from './contracts/types';
|
|
2
|
+
export type { Address, BrowserInfo, CardStorageConsent, CardState, CheckoutClient, Customer, PaymentFormAppearance, PayInput, PayOutcome, PaymentFormCallbacks, PaymentFormError, PaymentFormErrorAttempt, PaymentFormErrorCategory, PaymentFormEvent, PaymentFormErrorPayment, PaymentFormErrorStage, PaymentFormInstance, PaymentFormMountOptions, PaymentFormState, PaymentFormStatus, PaymentAmounts, PaymentItem, PaymentStatus, RiskCollector, ShippingAddress, ThreeDSPresentation } from './contracts/types';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,YAAY,EACV,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,QAAQ,EACR,qBAAqB,EACrB,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,aAAa,EACb,aAAa,EACb,eAAe,EACf,mBAAmB,EACpB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,YAAY,EACV,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,QAAQ,EACR,qBAAqB,EACrB,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,aAAa,EACb,aAAa,EACb,eAAe,EACf,mBAAmB,EACpB,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,76 @@
|
|
|
1
1
|
// src/contracts/errors.ts
|
|
2
|
-
function formError(code, message, requestId) {
|
|
3
|
-
return
|
|
2
|
+
function formError(code, message, requestId, details = {}) {
|
|
3
|
+
return {
|
|
4
|
+
code,
|
|
5
|
+
message,
|
|
6
|
+
...classifyPaymentFormError(code),
|
|
7
|
+
...details,
|
|
8
|
+
...requestId === void 0 ? {} : { requestId }
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function normalizePaymentFormError(error) {
|
|
12
|
+
const { category, stage, ...base } = error;
|
|
13
|
+
return {
|
|
14
|
+
...base,
|
|
15
|
+
...classifyPaymentFormError(error.code),
|
|
16
|
+
...category === void 0 ? {} : { category },
|
|
17
|
+
...stage === void 0 ? {} : { stage }
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function classifyPaymentFormError(code) {
|
|
21
|
+
switch (code) {
|
|
22
|
+
case "PAY_INPUT_INVALID":
|
|
23
|
+
case "CARD_FIELDS_INCOMPLETE":
|
|
24
|
+
return { category: "VALIDATION", stage: "CARD_TOKENIZATION" };
|
|
25
|
+
case "PAYMENT_SESSION_INVALID":
|
|
26
|
+
case "CHECKOUT_SESSION_INVALID":
|
|
27
|
+
case "CHECKOUT_SESSION_EXPIRED":
|
|
28
|
+
case "ORIGIN_NOT_ALLOWED":
|
|
29
|
+
return { category: "CONFIGURATION", stage: "CARD_FRAME_DOCUMENT" };
|
|
30
|
+
case "FORM_NOT_READY":
|
|
31
|
+
case "FORM_DESTROYED":
|
|
32
|
+
case "FORM_MOUNT_CANCELLED":
|
|
33
|
+
case "INVALID_STATE":
|
|
34
|
+
return { category: "LIFECYCLE", stage: "FORM_SDK" };
|
|
35
|
+
case "FRAME_UNAVAILABLE":
|
|
36
|
+
case "MOUNT_FAILED":
|
|
37
|
+
case "FRAME_NETWORK_TIMEOUT":
|
|
38
|
+
case "FRAME_DOCUMENT_NOT_FOUND":
|
|
39
|
+
case "FRAME_RATE_LIMITED":
|
|
40
|
+
case "FRAME_POLICY_BLOCKED":
|
|
41
|
+
return {
|
|
42
|
+
category: "FRAME",
|
|
43
|
+
stage: code === "MOUNT_FAILED" ? "FORM_SDK" : "CARD_FRAME_HANDSHAKE"
|
|
44
|
+
};
|
|
45
|
+
case "TOKENIZATION_UNAVAILABLE":
|
|
46
|
+
case "TOKENIZATION_FAILED":
|
|
47
|
+
return { category: "TOKENIZATION", stage: "CARD_TOKENIZATION" };
|
|
48
|
+
case "THREE_DS_FAILED":
|
|
49
|
+
case "STRIPE_3DS_FAILED":
|
|
50
|
+
return { category: "THREE_DS", stage: "THREE_DS" };
|
|
51
|
+
case "PAYMENT_DECLINED":
|
|
52
|
+
case "PAYMENT_FAILED":
|
|
53
|
+
case "PAYMENT_STATUS_UNKNOWN":
|
|
54
|
+
case "PAYMENT_ALREADY_IN_PROGRESS":
|
|
55
|
+
return {
|
|
56
|
+
category: "PAYMENT",
|
|
57
|
+
stage: code === "PAYMENT_STATUS_UNKNOWN" || code === "PAYMENT_ALREADY_IN_PROGRESS" ? "PAYMENT_RECONCILIATION" : "PAYMENT_SUBMISSION"
|
|
58
|
+
};
|
|
59
|
+
case "ORCHESTRATOR_UNAVAILABLE":
|
|
60
|
+
case "ORCHESTRATOR_ERROR":
|
|
61
|
+
case "INVALID_UPSTREAM_RESPONSE":
|
|
62
|
+
case "PAYMENT_FORM_SERVER_ERROR":
|
|
63
|
+
return { category: "RUNTIME", stage: "RUNTIME" };
|
|
64
|
+
default:
|
|
65
|
+
return { category: "UNKNOWN", stage: "RUNTIME" };
|
|
66
|
+
}
|
|
4
67
|
}
|
|
5
68
|
|
|
6
69
|
// src/browser-context.ts
|
|
7
70
|
function enrichPayInputFromBrowser(input) {
|
|
8
71
|
const declared = input.client;
|
|
9
|
-
const location = sanitizeUrl(window.location.href);
|
|
10
|
-
const referrer = sanitizeUrl(document.referrer);
|
|
72
|
+
const location = sanitizeUrl(declared?.page) ?? sanitizeUrl(window.location.href);
|
|
73
|
+
const referrer = sanitizeUrl(declared?.referrer) ?? sanitizeUrl(document.referrer);
|
|
11
74
|
const browserInfo = {
|
|
12
75
|
colorDepth: window.screen?.colorDepth,
|
|
13
76
|
javascriptEnabled: true,
|
|
@@ -23,9 +86,9 @@ function enrichPayInputFromBrowser(input) {
|
|
|
23
86
|
});
|
|
24
87
|
const client = {
|
|
25
88
|
...browserIdentity(),
|
|
89
|
+
...declared,
|
|
26
90
|
...location === void 0 ? {} : { page: location },
|
|
27
91
|
...referrer === void 0 ? {} : { referrer },
|
|
28
|
-
...declared,
|
|
29
92
|
...Object.keys(utm).length === 0 ? {} : { utm },
|
|
30
93
|
browserInfo: { ...browserInfo, ...declared?.browserInfo }
|
|
31
94
|
};
|
|
@@ -77,7 +140,7 @@ function hasControlCharacter(value) {
|
|
|
77
140
|
});
|
|
78
141
|
}
|
|
79
142
|
function sanitizeUrl(value) {
|
|
80
|
-
if (value === "") return void 0;
|
|
143
|
+
if (value === void 0 || value === "") return void 0;
|
|
81
144
|
try {
|
|
82
145
|
const url = new URL(value);
|
|
83
146
|
if (!["http:", "https:"].includes(url.protocol)) return void 0;
|
|
@@ -249,6 +312,8 @@ function isFrameToHostMessage(value) {
|
|
|
249
312
|
return hasOnly(value, ["channel", "version", "instanceId", "type"]);
|
|
250
313
|
case "THREE_DS_OPEN":
|
|
251
314
|
return hasOnly(value, ["channel", "version", "instanceId", "type"]);
|
|
315
|
+
case "MOUNT_SLOW":
|
|
316
|
+
return hasOnly(value, ["channel", "version", "instanceId", "type", "stage", "durationMs"]) && isMountStage(value.stage) && typeof value.durationMs === "number" && Number.isInteger(value.durationMs) && value.durationMs >= 0 && value.durationMs <= 24 * 60 * 60 * 1e3;
|
|
252
317
|
case "STRIPE_3DS":
|
|
253
318
|
return hasOnly(value, ["channel", "version", "instanceId", "type", "action"]) && isStripeThreeDSAction(value.action);
|
|
254
319
|
case "STATUS":
|
|
@@ -298,6 +363,15 @@ function isStatus(value) {
|
|
|
298
363
|
"DESTROYED"
|
|
299
364
|
].includes(value);
|
|
300
365
|
}
|
|
366
|
+
function isMountStage(value) {
|
|
367
|
+
return typeof value === "string" && [
|
|
368
|
+
"FORM_IFRAME_NAVIGATION",
|
|
369
|
+
"FORM_HANDSHAKE",
|
|
370
|
+
"CARD_FRAME_DOCUMENT",
|
|
371
|
+
"CARD_FRAME_HANDSHAKE",
|
|
372
|
+
"CARD_FRAME_INITIALIZATION"
|
|
373
|
+
].includes(value);
|
|
374
|
+
}
|
|
301
375
|
function isFrameHeight(value) {
|
|
302
376
|
return typeof value === "number" && Number.isInteger(value) && value >= 80 && value <= 1200;
|
|
303
377
|
}
|
|
@@ -311,6 +385,8 @@ function isError(value) {
|
|
|
311
385
|
return isRecord2(value) && hasOnly(value, [
|
|
312
386
|
"code",
|
|
313
387
|
"message",
|
|
388
|
+
"category",
|
|
389
|
+
"stage",
|
|
314
390
|
"requestId",
|
|
315
391
|
"paymentId",
|
|
316
392
|
"retryable",
|
|
@@ -318,7 +394,29 @@ function isError(value) {
|
|
|
318
394
|
"upstreamRequestId",
|
|
319
395
|
"frameStage",
|
|
320
396
|
"payment"
|
|
321
|
-
]) && typeof value.code === "string" && /^[A-Z][A-Z0-9_]{1,63}$/.test(value.code) && typeof value.message === "string" && value.message.length <= 1e3 && (value.
|
|
397
|
+
]) && typeof value.code === "string" && /^[A-Z][A-Z0-9_]{1,63}$/.test(value.code) && typeof value.message === "string" && value.message.length <= 1e3 && (value.category === void 0 || typeof value.category === "string" && [
|
|
398
|
+
"VALIDATION",
|
|
399
|
+
"CONFIGURATION",
|
|
400
|
+
"LIFECYCLE",
|
|
401
|
+
"FRAME",
|
|
402
|
+
"TOKENIZATION",
|
|
403
|
+
"THREE_DS",
|
|
404
|
+
"PAYMENT",
|
|
405
|
+
"RUNTIME",
|
|
406
|
+
"UNKNOWN"
|
|
407
|
+
].includes(value.category)) && (value.stage === void 0 || typeof value.stage === "string" && [
|
|
408
|
+
"FORM_SDK",
|
|
409
|
+
"FORM_IFRAME_NAVIGATION",
|
|
410
|
+
"FORM_HANDSHAKE",
|
|
411
|
+
"CARD_FRAME_DOCUMENT",
|
|
412
|
+
"CARD_FRAME_HANDSHAKE",
|
|
413
|
+
"CARD_FRAME_INITIALIZATION",
|
|
414
|
+
"CARD_TOKENIZATION",
|
|
415
|
+
"THREE_DS",
|
|
416
|
+
"PAYMENT_SUBMISSION",
|
|
417
|
+
"PAYMENT_RECONCILIATION",
|
|
418
|
+
"RUNTIME"
|
|
419
|
+
].includes(value.stage)) && (value.requestId === void 0 || isId(value.requestId)) && (value.paymentId === void 0 || typeof value.paymentId === "string" && /^pay_[A-Za-z0-9_-]{4,128}$/.test(value.paymentId)) && (value.retryable === void 0 || typeof value.retryable === "boolean") && (value.httpStatus === void 0 || typeof value.httpStatus === "number" && Number.isInteger(value.httpStatus) && value.httpStatus >= 400 && value.httpStatus <= 599) && (value.upstreamRequestId === void 0 || typeof value.upstreamRequestId === "string" && value.upstreamRequestId.length > 0 && value.upstreamRequestId.length <= 1e3) && (value.frameStage === void 0 || value.frameStage === "FRAME_DOCUMENT" || value.frameStage === "CARD_FRAME") && (value.payment === void 0 || isErrorPayment(value.payment));
|
|
322
420
|
}
|
|
323
421
|
function isErrorPayment(value) {
|
|
324
422
|
return isRecord2(value) && hasOnly(value, ["id", "environment", "currency", "transaction"]) && typeof value.id === "string" && /^pay_[A-Za-z0-9_-]{4,128}$/.test(value.id) && (value.environment === "sandbox" || value.environment === "live") && typeof value.currency === "string" && /^[A-Z]{3}$/.test(value.currency) && isErrorTransaction(value.transaction);
|
|
@@ -375,7 +473,7 @@ function isRecord2(value) {
|
|
|
375
473
|
var productionFrameOrigin = "https://payment-form.bemony.com";
|
|
376
474
|
var threeDSModalWidth = 624;
|
|
377
475
|
var threeDSModalRadius = 12;
|
|
378
|
-
var
|
|
476
|
+
var FORM_MOUNT_SLOW_VISIBLE_MS = 1e4;
|
|
379
477
|
var BemonyPaymentForm = {
|
|
380
478
|
mount(options) {
|
|
381
479
|
const target = resolveTarget(options.target);
|
|
@@ -385,7 +483,7 @@ var BemonyPaymentForm = {
|
|
|
385
483
|
);
|
|
386
484
|
}
|
|
387
485
|
if (options.signal?.aborted) {
|
|
388
|
-
return Promise.reject(formError("
|
|
486
|
+
return Promise.reject(formError("FORM_MOUNT_CANCELLED", "A montagem foi cancelada."));
|
|
389
487
|
}
|
|
390
488
|
const riskCollectorSessions = startRiskCollectorSessionCollection(
|
|
391
489
|
options.riskCollectors,
|
|
@@ -393,11 +491,11 @@ var BemonyPaymentForm = {
|
|
|
393
491
|
);
|
|
394
492
|
const instanceId = crypto.randomUUID();
|
|
395
493
|
const frameOrigin = resolveFrameOrigin();
|
|
494
|
+
ensureConnectionHints(frameOrigin);
|
|
396
495
|
const slot = document.createElement("div");
|
|
397
496
|
slot.dataset.bemonyPaymentForm = "";
|
|
398
497
|
const iframe = document.createElement("iframe");
|
|
399
498
|
iframe.title = "Pagamento seguro Bemony";
|
|
400
|
-
iframe.src = `${frameOrigin}/frame?instance=${encodeURIComponent(instanceId)}`;
|
|
401
499
|
iframe.setAttribute("allow", "payment *");
|
|
402
500
|
iframe.setAttribute("referrerpolicy", "no-referrer");
|
|
403
501
|
let contentHeight = 100;
|
|
@@ -407,7 +505,10 @@ var BemonyPaymentForm = {
|
|
|
407
505
|
target.append(slot);
|
|
408
506
|
let destroyed = false;
|
|
409
507
|
let mounted = false;
|
|
410
|
-
let
|
|
508
|
+
let mountSlowTimer;
|
|
509
|
+
let mountAttempt = 0;
|
|
510
|
+
let mountAttemptStartedAt = 0;
|
|
511
|
+
let mountPhase = "FORM_IFRAME_NAVIGATION";
|
|
411
512
|
let overlay;
|
|
412
513
|
let applyOverlayLayout;
|
|
413
514
|
let bodyOverflow = null;
|
|
@@ -423,6 +524,7 @@ var BemonyPaymentForm = {
|
|
|
423
524
|
} catch {
|
|
424
525
|
}
|
|
425
526
|
};
|
|
527
|
+
const reportEvent = (event) => callback(options.onEvent, event);
|
|
426
528
|
const post = (message) => {
|
|
427
529
|
iframe.contentWindow?.postMessage(message, frameOrigin);
|
|
428
530
|
};
|
|
@@ -502,8 +604,11 @@ var BemonyPaymentForm = {
|
|
|
502
604
|
};
|
|
503
605
|
callback(options.onStatusChange, status);
|
|
504
606
|
};
|
|
505
|
-
const reportError = (
|
|
607
|
+
const reportError = (received, requestId) => {
|
|
506
608
|
if (requestId !== void 0 && active !== void 0 && active.requestId !== requestId) return;
|
|
609
|
+
const error = normalizePaymentFormError(
|
|
610
|
+
received.stage === void 0 && !mounted ? { ...received, category: "FRAME", stage: mountPhase } : received
|
|
611
|
+
);
|
|
507
612
|
restoreInline();
|
|
508
613
|
if (error.code === "PAYMENT_STATUS_UNKNOWN" || error.code === "PAYMENT_ALREADY_IN_PROGRESS" || requestId !== void 0 && error.retryable !== true) {
|
|
509
614
|
blockedError = error;
|
|
@@ -515,8 +620,17 @@ var BemonyPaymentForm = {
|
|
|
515
620
|
isSubmitting: false
|
|
516
621
|
};
|
|
517
622
|
callback(options.onError, error);
|
|
623
|
+
reportEvent({
|
|
624
|
+
type: !mounted ? "MOUNT_FAILED" : "PAYMENT_FAILED",
|
|
625
|
+
...mounted ? {} : {
|
|
626
|
+
attempt: mountAttempt,
|
|
627
|
+
durationMs: Date.now() - mountAttemptStartedAt,
|
|
628
|
+
stage: error.stage ?? mountPhase
|
|
629
|
+
},
|
|
630
|
+
error
|
|
631
|
+
});
|
|
518
632
|
if (!mounted && rejectMount !== void 0) {
|
|
519
|
-
|
|
633
|
+
mountSlowTimer?.cancel();
|
|
520
634
|
const reject = rejectMount;
|
|
521
635
|
rejectMount = void 0;
|
|
522
636
|
destroy();
|
|
@@ -531,7 +645,7 @@ var BemonyPaymentForm = {
|
|
|
531
645
|
const destroy = () => {
|
|
532
646
|
if (destroyed) return;
|
|
533
647
|
destroyed = true;
|
|
534
|
-
|
|
648
|
+
mountSlowTimer?.cancel();
|
|
535
649
|
window.removeEventListener("message", onMessage);
|
|
536
650
|
options.signal?.removeEventListener("abort", destroy);
|
|
537
651
|
restoreInline();
|
|
@@ -543,13 +657,14 @@ var BemonyPaymentForm = {
|
|
|
543
657
|
});
|
|
544
658
|
iframe.remove();
|
|
545
659
|
slot.remove();
|
|
546
|
-
active?.reject(formError("
|
|
660
|
+
active?.reject(formError("FORM_DESTROYED", "O formul\xE1rio de pagamento foi desmontado."));
|
|
547
661
|
active = void 0;
|
|
548
662
|
state = { ...state, status: "DESTROYED", ready: false, isSubmitting: false };
|
|
663
|
+
reportEvent({ type: "DESTROYED" });
|
|
549
664
|
if (!mounted && rejectMount !== void 0) {
|
|
550
665
|
const reject = rejectMount;
|
|
551
666
|
rejectMount = void 0;
|
|
552
|
-
reject(formError("
|
|
667
|
+
reject(formError("FORM_MOUNT_CANCELLED", "A montagem foi cancelada."));
|
|
553
668
|
}
|
|
554
669
|
};
|
|
555
670
|
const instance = {
|
|
@@ -572,6 +687,7 @@ var BemonyPaymentForm = {
|
|
|
572
687
|
reject = nextReject;
|
|
573
688
|
});
|
|
574
689
|
active = { requestId, promise, resolve, reject };
|
|
690
|
+
reportEvent({ type: "PAYMENT_STARTED" });
|
|
575
691
|
const enrichedInput = enrichPayInputFromBrowser(input);
|
|
576
692
|
const sessions = riskCollectorSessions.snapshot();
|
|
577
693
|
post({
|
|
@@ -590,22 +706,37 @@ var BemonyPaymentForm = {
|
|
|
590
706
|
};
|
|
591
707
|
const mountPromise = new Promise((resolve, reject) => {
|
|
592
708
|
rejectMount = reject;
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
709
|
+
const startMountAttempt = () => {
|
|
710
|
+
mountSlowTimer?.cancel();
|
|
711
|
+
mountAttempt += 1;
|
|
712
|
+
mountAttemptStartedAt = Date.now();
|
|
713
|
+
reportEvent({
|
|
714
|
+
type: mountAttempt === 1 ? "MOUNT_STARTED" : "MOUNT_RETRY",
|
|
715
|
+
attempt: mountAttempt
|
|
716
|
+
});
|
|
717
|
+
mountPhase = "FORM_IFRAME_NAVIGATION";
|
|
718
|
+
const source = new URL("/frame", frameOrigin);
|
|
719
|
+
source.searchParams.set("instance", instanceId);
|
|
720
|
+
source.searchParams.set("mountAttempt", String(mountAttempt));
|
|
721
|
+
iframe.src = source.toString();
|
|
722
|
+
mountSlowTimer = setVisibleTimeout(() => {
|
|
723
|
+
if (mounted || destroyed) return;
|
|
724
|
+
reportEvent({
|
|
725
|
+
type: "MOUNT_SLOW",
|
|
726
|
+
attempt: mountAttempt,
|
|
727
|
+
durationMs: Date.now() - mountAttemptStartedAt,
|
|
728
|
+
stage: mountPhase
|
|
729
|
+
});
|
|
730
|
+
}, FORM_MOUNT_SLOW_VISIBLE_MS);
|
|
731
|
+
};
|
|
603
732
|
onMessage = (event) => {
|
|
604
733
|
if (destroyed || event.origin !== frameOrigin || event.source !== iframe.contentWindow)
|
|
605
734
|
return;
|
|
606
735
|
if (!isFrameToHostMessage(event.data) || event.data.instanceId !== instanceId) return;
|
|
607
736
|
const message = event.data;
|
|
608
737
|
if (message.type === "READY") {
|
|
738
|
+
mountPhase = "CARD_FRAME_INITIALIZATION";
|
|
739
|
+
mountSlowTimer?.cancel();
|
|
609
740
|
post({
|
|
610
741
|
channel: "BEMONY_FORM_PAYMENT",
|
|
611
742
|
version: FORM_PAYMENT_PROTOCOL_VERSION,
|
|
@@ -620,14 +751,29 @@ var BemonyPaymentForm = {
|
|
|
620
751
|
if (message.type === "MOUNTED") {
|
|
621
752
|
if (mounted) return;
|
|
622
753
|
mounted = true;
|
|
623
|
-
|
|
754
|
+
mountSlowTimer?.cancel();
|
|
624
755
|
rejectMount = void 0;
|
|
625
756
|
state = { ...state, status: "READY", ready: true };
|
|
626
757
|
callback(options.onReady, void 0);
|
|
627
758
|
callback(options.onStatusChange, "READY");
|
|
759
|
+
reportEvent({
|
|
760
|
+
type: "MOUNTED",
|
|
761
|
+
attempt: mountAttempt,
|
|
762
|
+
durationMs: Date.now() - mountAttemptStartedAt,
|
|
763
|
+
stage: "CARD_FRAME_INITIALIZATION"
|
|
764
|
+
});
|
|
628
765
|
resolve(instance);
|
|
629
766
|
return;
|
|
630
767
|
}
|
|
768
|
+
if (message.type === "MOUNT_SLOW") {
|
|
769
|
+
reportEvent({
|
|
770
|
+
type: "MOUNT_SLOW",
|
|
771
|
+
attempt: mountAttempt,
|
|
772
|
+
durationMs: message.durationMs,
|
|
773
|
+
stage: message.stage
|
|
774
|
+
});
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
631
777
|
if (message.type === "STATUS") return reportStatus(message.status);
|
|
632
778
|
if (message.type === "CARD_STATE")
|
|
633
779
|
return callback(options.onCardStateChange, message.state);
|
|
@@ -688,6 +834,7 @@ var BemonyPaymentForm = {
|
|
|
688
834
|
};
|
|
689
835
|
callback(options.onStatusChange, message.payment.status);
|
|
690
836
|
callback(options.onSuccess, message.payment);
|
|
837
|
+
reportEvent({ type: "PAYMENT_SUCCEEDED" });
|
|
691
838
|
active?.resolve(message.payment);
|
|
692
839
|
active = void 0;
|
|
693
840
|
return;
|
|
@@ -695,6 +842,12 @@ var BemonyPaymentForm = {
|
|
|
695
842
|
if (message.type === "ERROR") reportError(message.error, message.requestId);
|
|
696
843
|
};
|
|
697
844
|
window.addEventListener("message", onMessage);
|
|
845
|
+
iframe.addEventListener("load", () => {
|
|
846
|
+
if (!mounted && !destroyed && mountPhase === "FORM_IFRAME_NAVIGATION") {
|
|
847
|
+
mountPhase = "FORM_HANDSHAKE";
|
|
848
|
+
}
|
|
849
|
+
});
|
|
850
|
+
startMountAttempt();
|
|
698
851
|
});
|
|
699
852
|
options.signal?.addEventListener("abort", destroy, { once: true });
|
|
700
853
|
return mountPromise;
|
|
@@ -723,10 +876,73 @@ function resolveFrameOrigin() {
|
|
|
723
876
|
return productionFrameOrigin;
|
|
724
877
|
}
|
|
725
878
|
}
|
|
879
|
+
function ensureConnectionHints(origin) {
|
|
880
|
+
for (const rel of ["dns-prefetch", "preconnect"]) {
|
|
881
|
+
const exists = Array.from(document.head.querySelectorAll("link")).some(
|
|
882
|
+
(link) => {
|
|
883
|
+
try {
|
|
884
|
+
return link.rel === rel && new URL(link.href).origin === origin;
|
|
885
|
+
} catch {
|
|
886
|
+
return false;
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
);
|
|
890
|
+
if (exists) continue;
|
|
891
|
+
const hint = document.createElement("link");
|
|
892
|
+
hint.rel = rel;
|
|
893
|
+
hint.href = origin;
|
|
894
|
+
if (rel === "preconnect") hint.crossOrigin = "anonymous";
|
|
895
|
+
document.head.append(hint);
|
|
896
|
+
}
|
|
897
|
+
}
|
|
726
898
|
function setInlineStyle(iframe, height) {
|
|
727
899
|
iframe.style.cssText = `display:block;width:100%;height:${height}px;min-height:${height}px;border:0;background:transparent;`;
|
|
728
900
|
iframe.removeAttribute("tabindex");
|
|
729
901
|
}
|
|
902
|
+
function setVisibleTimeout(callback, visibleBudgetMs) {
|
|
903
|
+
let remaining = visibleBudgetMs;
|
|
904
|
+
let startedAt;
|
|
905
|
+
let timer;
|
|
906
|
+
let cancelled = false;
|
|
907
|
+
const clear = () => {
|
|
908
|
+
if (timer !== void 0) window.clearTimeout(timer);
|
|
909
|
+
timer = void 0;
|
|
910
|
+
};
|
|
911
|
+
const pause = () => {
|
|
912
|
+
if (startedAt === void 0) return;
|
|
913
|
+
remaining = Math.max(0, remaining - (Date.now() - startedAt));
|
|
914
|
+
startedAt = void 0;
|
|
915
|
+
clear();
|
|
916
|
+
};
|
|
917
|
+
const expire = () => {
|
|
918
|
+
if (cancelled) return;
|
|
919
|
+
pause();
|
|
920
|
+
if (remaining === 0) {
|
|
921
|
+
cancelled = true;
|
|
922
|
+
document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
923
|
+
callback();
|
|
924
|
+
}
|
|
925
|
+
};
|
|
926
|
+
const resume = () => {
|
|
927
|
+
if (cancelled || startedAt !== void 0) return;
|
|
928
|
+
startedAt = Date.now();
|
|
929
|
+
timer = window.setTimeout(expire, remaining);
|
|
930
|
+
};
|
|
931
|
+
const onVisibilityChange = () => {
|
|
932
|
+
if (document.visibilityState === "hidden") pause();
|
|
933
|
+
else resume();
|
|
934
|
+
};
|
|
935
|
+
document.addEventListener("visibilitychange", onVisibilityChange);
|
|
936
|
+
if (document.visibilityState !== "hidden") resume();
|
|
937
|
+
return {
|
|
938
|
+
cancel() {
|
|
939
|
+
if (cancelled) return;
|
|
940
|
+
cancelled = true;
|
|
941
|
+
clear();
|
|
942
|
+
document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
943
|
+
}
|
|
944
|
+
};
|
|
945
|
+
}
|
|
730
946
|
export {
|
|
731
947
|
BemonyPaymentForm
|
|
732
948
|
};
|