@starfish-codes/hellgate 3.9.1 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/card-handler.spec.d.ts +1 -0
- package/dist/card/card-handler.d.ts +3 -1
- package/dist/card/coordinator/__tests__/card-handler-coordinator.spec.d.ts +1 -0
- package/dist/card/coordinator/typings.d.ts +9 -0
- package/dist/card/typings.d.ts +26 -0
- package/dist/card/ui/iframe/elements/base-element.d.ts +1 -0
- package/dist/card/ui/iframe/elements/card-expiration-month.d.ts +1 -0
- package/dist/card/ui/utils.d.ts +3 -1
- package/dist/hellgate-sdk.mjs +106 -80
- package/dist/hellgate-sdk.umd.js +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -5,7 +5,7 @@ import { CardElement, CardExpirationDateElement, CardNumberElement, CardVerifica
|
|
|
5
5
|
import { CardElementBase } from './ui/elements/base-element';
|
|
6
6
|
import { CardExpirationMonthElement } from './ui/elements/card-expiration-month';
|
|
7
7
|
import { CardExpirationYearElement } from './ui/elements/card-expiration-year';
|
|
8
|
-
import { ChangeEvent, ElementBaseOptions } from './ui/typings';
|
|
8
|
+
import { CardSchema, ChangeEvent, ElementBaseOptions } from './ui/typings';
|
|
9
9
|
export type FormFieldState = Omit<ChangeEvent['data'], 'type'>;
|
|
10
10
|
export type CardHandlerSessionInitState = TokenizeCardSessionStateDTO | RefreshSecurityCodeSessionStateDTO;
|
|
11
11
|
type FormField<T extends CardElementBase<any, any>> = {
|
|
@@ -56,6 +56,8 @@ export declare class HellgateCardHandler {
|
|
|
56
56
|
updateFormState(): void;
|
|
57
57
|
private createFieldDefaultState;
|
|
58
58
|
private serializeAdditionalData;
|
|
59
|
+
private getSessionSchemes;
|
|
59
60
|
private getCardDataValidationError;
|
|
60
61
|
}
|
|
62
|
+
export declare function resolveSchemes(sessionSchemes: CardSchema[] | undefined, userSchemes: CardSchema[] | undefined): CardSchema[] | undefined;
|
|
61
63
|
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CompleteActionResult } from '../../session';
|
|
2
2
|
import { FormFieldState } from '../card-handler';
|
|
3
3
|
import { PaymentAdditionalDataDTO, TokenizedData } from '../typings';
|
|
4
|
+
import { ElementBaseOptions } from '../ui/typings';
|
|
4
5
|
export type CardHandlerToCoordinatorMessage = {
|
|
5
6
|
type: 'card:tokenize';
|
|
6
7
|
additionalData?: PaymentAdditionalDataDTO;
|
|
@@ -34,3 +35,11 @@ export type ElementToCoordinatorMessage = {
|
|
|
34
35
|
state: FormFieldState;
|
|
35
36
|
};
|
|
36
37
|
};
|
|
38
|
+
export type CoordinatorToElementMessage = {
|
|
39
|
+
type: 'coordinator:element:update';
|
|
40
|
+
data: {
|
|
41
|
+
element: string;
|
|
42
|
+
key: string;
|
|
43
|
+
options: ElementBaseOptions;
|
|
44
|
+
};
|
|
45
|
+
};
|
package/dist/card/typings.d.ts
CHANGED
|
@@ -34,6 +34,19 @@ export type PaymentAdditionalData<FieldValue = AdditionalDataValue> = {
|
|
|
34
34
|
city?: FieldValue;
|
|
35
35
|
country?: FieldValue;
|
|
36
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Token lifecycle intent. When `true` (the SDK default), the resulting PCI
|
|
39
|
+
* token is ephemeral and cleaned up after a short TTL. When `false`, the
|
|
40
|
+
* token is persistent. Use `false` only on cardholder consent.
|
|
41
|
+
*/
|
|
42
|
+
ephemeral?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Optional ISO-8601 timestamp setting an explicit expiration for the
|
|
45
|
+
* resulting PCI token. When present it takes precedence over `ephemeral`
|
|
46
|
+
* (subject to a server-side cap). Use this for a "Save my card" UX where
|
|
47
|
+
* the merchant chooses the exact retention window after cardholder consent.
|
|
48
|
+
*/
|
|
49
|
+
expiration_date?: string;
|
|
37
50
|
};
|
|
38
51
|
export type PaymentAdditionalDataDTO = PaymentAdditionalData<AdditionalDataValueDTO>;
|
|
39
52
|
export type ElementsCardData = {
|
|
@@ -52,11 +65,13 @@ export type TokenizeCardActionDTO = {
|
|
|
52
65
|
action: 'tokenize_card';
|
|
53
66
|
result: TokenizedData;
|
|
54
67
|
};
|
|
68
|
+
export type HellgateCardScheme = 'visa' | 'mastercard' | 'americanexpress' | 'discover' | 'dinersclub' | 'jcb' | 'unionpay';
|
|
55
69
|
export type TokenizeCardConfig = {
|
|
56
70
|
provider: 'guardian';
|
|
57
71
|
api_key: string;
|
|
58
72
|
base_url: string;
|
|
59
73
|
jwk: JWK;
|
|
74
|
+
allowed_schemes?: HellgateCardScheme[];
|
|
60
75
|
};
|
|
61
76
|
export type TokenizeCardSessionStateDTO = {
|
|
62
77
|
next_action: 'tokenize_card';
|
|
@@ -69,6 +84,17 @@ export type CardTokenizeData = {
|
|
|
69
84
|
security_code: string;
|
|
70
85
|
cardholder_name?: string;
|
|
71
86
|
additional_data: PaymentAdditionalData<string>;
|
|
87
|
+
/**
|
|
88
|
+
* Optional token lifecycle intent decrypted by Guardian inside the JWE.
|
|
89
|
+
* `true` requests an ephemeral PCI token, `false` a persistent one. Absent
|
|
90
|
+
* preserves Guardian's pre-existing default behavior.
|
|
91
|
+
*/
|
|
92
|
+
ephemeral?: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Optional ISO-8601 expiration timestamp decrypted by Guardian inside the
|
|
95
|
+
* JWE. Wins over `ephemeral` server side.
|
|
96
|
+
*/
|
|
97
|
+
expiration_date?: string;
|
|
72
98
|
};
|
|
73
99
|
export type TokenizedCardMaskedData = {
|
|
74
100
|
account_number_last_four: string;
|
|
@@ -21,6 +21,7 @@ export declare abstract class IframeCardElementBase implements BaseElement<Eleme
|
|
|
21
21
|
private channel;
|
|
22
22
|
constructor(rootNode: Element, postMessageOptions: PostMessageOptions);
|
|
23
23
|
mount(): Promise<void>;
|
|
24
|
+
protected onMount(): void;
|
|
24
25
|
unmount(): void;
|
|
25
26
|
focus(): void;
|
|
26
27
|
blur(): void;
|
package/dist/card/ui/utils.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
import { TokenizedCardMaskedData } from '../typings';
|
|
1
|
+
import { HellgateCardScheme, TokenizedCardMaskedData } from '../typings';
|
|
2
|
+
import { CardSchema } from './typings';
|
|
3
|
+
export declare function mapHellgateSchemesToCardSchema(schemes: HellgateCardScheme[]): CardSchema[];
|
|
2
4
|
export declare function getMaskedCardNumber(data: TokenizedCardMaskedData): string;
|
package/dist/hellgate-sdk.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function
|
|
1
|
+
function C(i) {
|
|
2
2
|
return Array.isArray(i) ? i.filter(Boolean) : Object.fromEntries(Object.entries(i).map(([e, t]) => [
|
|
3
3
|
e,
|
|
4
|
-
typeof t == "object" && t && !Array.isArray(t) ?
|
|
4
|
+
typeof t == "object" && t && !Array.isArray(t) ? C(t) : t
|
|
5
5
|
]).filter(([e, t]) => typeof t == "object" && t && !Array.isArray(t) ? !!Object.keys(t).length : t != null && t != null));
|
|
6
6
|
}
|
|
7
7
|
function h(i, e) {
|
|
@@ -17,11 +17,11 @@ function E(i) {
|
|
|
17
17
|
throw i;
|
|
18
18
|
return i.json();
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function S(i) {
|
|
21
21
|
return `https://${window.HG_IFRAME_HOST ?? "sdk.hellgate.io"}/web/${i}/iframe/`;
|
|
22
22
|
}
|
|
23
|
-
const
|
|
24
|
-
class
|
|
23
|
+
const F = 2e3;
|
|
24
|
+
class k {
|
|
25
25
|
constructor(e, t) {
|
|
26
26
|
Object.defineProperty(this, "session", {
|
|
27
27
|
enumerable: !0,
|
|
@@ -196,24 +196,24 @@ class F {
|
|
|
196
196
|
return window.clearTimeout(this.resultPollingTimer), this.resultPollingTimer = window.setTimeout(() => fetch(e).then((r) => E(r)).then((r) => {
|
|
197
197
|
this.startAuthResultPolling(e, t), t(r);
|
|
198
198
|
}).catch(() => {
|
|
199
|
-
}),
|
|
199
|
+
}), F), () => window.clearTimeout(this.resultPollingTimer);
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
function p() {
|
|
203
203
|
return document.body;
|
|
204
204
|
}
|
|
205
|
-
const
|
|
205
|
+
const g = {
|
|
206
206
|
base: {
|
|
207
207
|
":disabled": {
|
|
208
208
|
backgroundColor: "transparent"
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
|
-
},
|
|
211
|
+
}, R = "DOM Element was not found";
|
|
212
212
|
var O;
|
|
213
213
|
(function(i) {
|
|
214
214
|
i.NOT_COMPLETE = "NOT_COMPLETE", i.SCHEME_NOT_SUPPORTED = "SCHEME_NOT_SUPPORTED", i.LUHN_CHECK_FAILED = "LUHN_CHECK_FAILED", i.INVALID_EXPIRY_DATE = "INVALID_EXPIRY_DATE";
|
|
215
215
|
})(O || (O = {}));
|
|
216
|
-
const
|
|
216
|
+
const j = (i) => i != null, $ = "v3.10.0";
|
|
217
217
|
class f {
|
|
218
218
|
constructor(e) {
|
|
219
219
|
if (Object.defineProperty(this, "options", {
|
|
@@ -246,7 +246,7 @@ class f {
|
|
|
246
246
|
configurable: !0,
|
|
247
247
|
writable: !0,
|
|
248
248
|
value: async ({ ...t }) => {
|
|
249
|
-
this.iframe &&
|
|
249
|
+
this.iframe && j(t.height) && (this.iframe.height = t.height), this.iframePostMessage({
|
|
250
250
|
type: "update",
|
|
251
251
|
data: {
|
|
252
252
|
...t,
|
|
@@ -283,13 +283,13 @@ class f {
|
|
|
283
283
|
var t;
|
|
284
284
|
(t = this.iframe) == null || t.remove(), this.iframe = null;
|
|
285
285
|
}
|
|
286
|
-
}), this.IFRAME_BASE_URL =
|
|
286
|
+
}), this.IFRAME_BASE_URL = S($), !this.IFRAME_BASE_URL)
|
|
287
287
|
throw new Error("IFRAME_BASE_URL not found");
|
|
288
288
|
}
|
|
289
289
|
mount(e) {
|
|
290
290
|
const t = typeof e == "string" ? document.querySelector(e) : e;
|
|
291
291
|
if (!t)
|
|
292
|
-
throw new Error(`${
|
|
292
|
+
throw new Error(`${R}: ${e}`);
|
|
293
293
|
t.innerHTML = `<iframe width="100%" height="29" src="${this.IFRAME_BASE_URL}?field=${this.type}&origin=${location.origin}"></iframe>`, this.iframe = t.querySelector("iframe");
|
|
294
294
|
const r = (n) => {
|
|
295
295
|
var a;
|
|
@@ -315,7 +315,7 @@ class f {
|
|
|
315
315
|
(r = (t = this.iframe) == null ? void 0 : t.contentWindow) == null || r.postMessage(e, this.IFRAME_BASE_URL);
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
|
-
class
|
|
318
|
+
class U extends f {
|
|
319
319
|
constructor() {
|
|
320
320
|
super(...arguments), Object.defineProperty(this, "type", {
|
|
321
321
|
enumerable: !0,
|
|
@@ -326,22 +326,22 @@ class $ extends f {
|
|
|
326
326
|
enumerable: !0,
|
|
327
327
|
configurable: !0,
|
|
328
328
|
writable: !0,
|
|
329
|
-
value:
|
|
329
|
+
value: A
|
|
330
330
|
}), Object.defineProperty(this, "putValue", {
|
|
331
331
|
enumerable: !0,
|
|
332
332
|
configurable: !0,
|
|
333
333
|
writable: !0,
|
|
334
|
-
value:
|
|
334
|
+
value: H
|
|
335
335
|
});
|
|
336
336
|
}
|
|
337
337
|
}
|
|
338
|
-
function
|
|
338
|
+
function A(i) {
|
|
339
339
|
return i ? Number(i) : null;
|
|
340
340
|
}
|
|
341
|
-
function
|
|
341
|
+
function H(i) {
|
|
342
342
|
return i ? i < 10 ? `0${i}` : String(i) : null;
|
|
343
343
|
}
|
|
344
|
-
class
|
|
344
|
+
class V extends f {
|
|
345
345
|
constructor() {
|
|
346
346
|
super(...arguments), Object.defineProperty(this, "type", {
|
|
347
347
|
enumerable: !0,
|
|
@@ -352,38 +352,38 @@ class U extends f {
|
|
|
352
352
|
enumerable: !0,
|
|
353
353
|
configurable: !0,
|
|
354
354
|
writable: !0,
|
|
355
|
-
value:
|
|
355
|
+
value: D
|
|
356
356
|
}), Object.defineProperty(this, "putValue", {
|
|
357
357
|
enumerable: !0,
|
|
358
358
|
configurable: !0,
|
|
359
359
|
writable: !0,
|
|
360
|
-
value:
|
|
360
|
+
value: T
|
|
361
361
|
});
|
|
362
362
|
}
|
|
363
363
|
}
|
|
364
|
-
function
|
|
364
|
+
function D(i) {
|
|
365
365
|
if (!i)
|
|
366
366
|
return null;
|
|
367
367
|
const e = Number(i);
|
|
368
368
|
return e > 10 ? +`20${e}` : null;
|
|
369
369
|
}
|
|
370
|
-
function
|
|
370
|
+
function T(i) {
|
|
371
371
|
return i ? i >= 100 ? String(i).slice(-2) : String(i) : null;
|
|
372
372
|
}
|
|
373
|
-
function
|
|
373
|
+
function M(i) {
|
|
374
374
|
const [e = null, t = null] = (i ?? "").split("/").map((r) => r.trim());
|
|
375
375
|
return {
|
|
376
|
-
month:
|
|
377
|
-
year:
|
|
376
|
+
month: A(e),
|
|
377
|
+
year: D(t)
|
|
378
378
|
};
|
|
379
379
|
}
|
|
380
|
-
function
|
|
380
|
+
function I(i) {
|
|
381
381
|
if (!i)
|
|
382
382
|
return null;
|
|
383
383
|
const { month: e, year: t } = i;
|
|
384
|
-
return [
|
|
384
|
+
return [H(e), T(t)].filter(j).join(" / ");
|
|
385
385
|
}
|
|
386
|
-
class
|
|
386
|
+
class z extends f {
|
|
387
387
|
constructor() {
|
|
388
388
|
super(...arguments), Object.defineProperty(this, "type", {
|
|
389
389
|
enumerable: !0,
|
|
@@ -394,22 +394,22 @@ class V extends f {
|
|
|
394
394
|
enumerable: !0,
|
|
395
395
|
configurable: !0,
|
|
396
396
|
writable: !0,
|
|
397
|
-
value:
|
|
397
|
+
value: M
|
|
398
398
|
}), Object.defineProperty(this, "putValue", {
|
|
399
399
|
enumerable: !0,
|
|
400
400
|
configurable: !0,
|
|
401
401
|
writable: !0,
|
|
402
|
-
value:
|
|
402
|
+
value: I
|
|
403
403
|
});
|
|
404
404
|
}
|
|
405
405
|
}
|
|
406
|
-
function
|
|
406
|
+
function L(i) {
|
|
407
407
|
return (i == null ? void 0 : i.replaceAll(" ", "")) ?? null;
|
|
408
408
|
}
|
|
409
|
-
function
|
|
409
|
+
function B(i) {
|
|
410
410
|
return i;
|
|
411
411
|
}
|
|
412
|
-
class
|
|
412
|
+
class Y extends f {
|
|
413
413
|
constructor() {
|
|
414
414
|
super(...arguments), Object.defineProperty(this, "type", {
|
|
415
415
|
enumerable: !0,
|
|
@@ -420,16 +420,16 @@ class B extends f {
|
|
|
420
420
|
enumerable: !0,
|
|
421
421
|
configurable: !0,
|
|
422
422
|
writable: !0,
|
|
423
|
-
value:
|
|
423
|
+
value: L
|
|
424
424
|
}), Object.defineProperty(this, "putValue", {
|
|
425
425
|
enumerable: !0,
|
|
426
426
|
configurable: !0,
|
|
427
427
|
writable: !0,
|
|
428
|
-
value:
|
|
428
|
+
value: B
|
|
429
429
|
});
|
|
430
430
|
}
|
|
431
431
|
}
|
|
432
|
-
class
|
|
432
|
+
class q extends f {
|
|
433
433
|
constructor() {
|
|
434
434
|
super(...arguments), Object.defineProperty(this, "type", {
|
|
435
435
|
enumerable: !0,
|
|
@@ -441,8 +441,8 @@ class Y extends f {
|
|
|
441
441
|
configurable: !0,
|
|
442
442
|
writable: !0,
|
|
443
443
|
value: (e) => e ? {
|
|
444
|
-
number: e.cardNumber ?
|
|
445
|
-
expiry_date: e.cardExpirationDate ?
|
|
444
|
+
number: e.cardNumber ? L(e.cardNumber) : null,
|
|
445
|
+
expiry_date: e.cardExpirationDate ? M(e.cardExpirationDate) : null,
|
|
446
446
|
cvc: e.cardVerificationCode ?? null
|
|
447
447
|
} : null
|
|
448
448
|
}), Object.defineProperty(this, "putValue", {
|
|
@@ -451,13 +451,13 @@ class Y extends f {
|
|
|
451
451
|
writable: !0,
|
|
452
452
|
value: (e) => e ? {
|
|
453
453
|
cardNumber: e.number ? e.number : null,
|
|
454
|
-
cardExpirationDate: e.expiry_date ?
|
|
454
|
+
cardExpirationDate: e.expiry_date ? I(e.expiry_date) : null,
|
|
455
455
|
cardVerificationCode: e.cvc ?? null
|
|
456
456
|
} : null
|
|
457
457
|
});
|
|
458
458
|
}
|
|
459
459
|
}
|
|
460
|
-
class
|
|
460
|
+
class G extends f {
|
|
461
461
|
constructor() {
|
|
462
462
|
super(...arguments), Object.defineProperty(this, "type", {
|
|
463
463
|
enumerable: !0,
|
|
@@ -500,23 +500,35 @@ class K extends f {
|
|
|
500
500
|
function b(i, e) {
|
|
501
501
|
switch (i) {
|
|
502
502
|
case "card":
|
|
503
|
-
return new
|
|
503
|
+
return new q(e);
|
|
504
504
|
case "cardNumber":
|
|
505
|
-
return new
|
|
505
|
+
return new Y(e);
|
|
506
506
|
case "cardExpirationDate":
|
|
507
|
-
return new
|
|
507
|
+
return new z(e);
|
|
508
508
|
case "cardExpirationMonth":
|
|
509
|
-
return new $(e);
|
|
510
|
-
case "cardExpirationYear":
|
|
511
509
|
return new U(e);
|
|
510
|
+
case "cardExpirationYear":
|
|
511
|
+
return new V(e);
|
|
512
512
|
case "cardVerificationCode":
|
|
513
|
-
return new
|
|
513
|
+
return new G(e);
|
|
514
514
|
case "text":
|
|
515
515
|
return new K(e);
|
|
516
516
|
default:
|
|
517
517
|
ASSERT_EXHAUSTIVE(i);
|
|
518
518
|
}
|
|
519
519
|
}
|
|
520
|
+
const W = {
|
|
521
|
+
visa: "visa",
|
|
522
|
+
mastercard: "mastercard",
|
|
523
|
+
americanexpress: "american-express",
|
|
524
|
+
discover: "discover",
|
|
525
|
+
dinersclub: "diners-club",
|
|
526
|
+
jcb: "jcb",
|
|
527
|
+
unionpay: "unionpay"
|
|
528
|
+
};
|
|
529
|
+
function X(i) {
|
|
530
|
+
return i.map((e) => W[e]).filter(Boolean);
|
|
531
|
+
}
|
|
520
532
|
function P(i) {
|
|
521
533
|
return [
|
|
522
534
|
i.issuer_identification_number,
|
|
@@ -575,7 +587,7 @@ class w {
|
|
|
575
587
|
const n = h({
|
|
576
588
|
disabled: !1,
|
|
577
589
|
autocomplete: "on",
|
|
578
|
-
style: { ...
|
|
590
|
+
style: { ...g }
|
|
579
591
|
}, r);
|
|
580
592
|
if (this.session.isNextAction("refresh_security_code") && ((s = this.session.state) != null && s.data)) {
|
|
581
593
|
const o = this.session.state.data;
|
|
@@ -588,6 +600,7 @@ class w {
|
|
|
588
600
|
cvc: null
|
|
589
601
|
};
|
|
590
602
|
}
|
|
603
|
+
n.schemes = x(this.getSessionSchemes(), n.schemes);
|
|
591
604
|
const a = b("card", n);
|
|
592
605
|
return this.cardElements.card = {
|
|
593
606
|
element: a,
|
|
@@ -602,7 +615,7 @@ class w {
|
|
|
602
615
|
const n = {
|
|
603
616
|
disabled: !1,
|
|
604
617
|
autocomplete: "on",
|
|
605
|
-
style: { ...
|
|
618
|
+
style: { ...g }
|
|
606
619
|
}, a = b("text", {
|
|
607
620
|
...h(n, { ...r })
|
|
608
621
|
});
|
|
@@ -691,12 +704,13 @@ class w {
|
|
|
691
704
|
const t = {
|
|
692
705
|
disabled: this.cvcOnlyEnabled,
|
|
693
706
|
autocomplete: "on",
|
|
694
|
-
style: { ...
|
|
707
|
+
style: { ...g }
|
|
695
708
|
}, { cardNumber: r = {}, securityCode: n = {}, ...a } = e, s = b("cardNumber", {
|
|
696
709
|
...h(t, {
|
|
697
710
|
...a,
|
|
698
711
|
...r,
|
|
699
712
|
cvcOnly: this.cvcOnlyEnabled,
|
|
713
|
+
schemes: x(this.getSessionSchemes(), r.schemes ?? a.schemes),
|
|
700
714
|
value: this.session.isNextAction("refresh_security_code") && ((l = this.session.state) != null && l.data) ? P(this.session.state.data) : null
|
|
701
715
|
})
|
|
702
716
|
}), o = b("cardVerificationCode", {
|
|
@@ -795,8 +809,8 @@ class w {
|
|
|
795
809
|
valid: !1
|
|
796
810
|
};
|
|
797
811
|
}
|
|
798
|
-
serializeAdditionalData({ cardholder_name: e, billing_address: t = {} }) {
|
|
799
|
-
|
|
812
|
+
serializeAdditionalData({ cardholder_name: e, billing_address: t = {}, ephemeral: r, expiration_date: n }) {
|
|
813
|
+
const a = C({
|
|
800
814
|
cardholder_name: m(e),
|
|
801
815
|
billing_address: {
|
|
802
816
|
line1: m(t.line1),
|
|
@@ -806,6 +820,15 @@ class w {
|
|
|
806
820
|
postal_code: m(t.postal_code)
|
|
807
821
|
}
|
|
808
822
|
});
|
|
823
|
+
return typeof r == "boolean" && (a.ephemeral = r), typeof n == "string" && (a.expiration_date = n), a;
|
|
824
|
+
}
|
|
825
|
+
getSessionSchemes() {
|
|
826
|
+
var t, r;
|
|
827
|
+
if (!this.session.isNextAction("tokenize_card"))
|
|
828
|
+
return;
|
|
829
|
+
const e = (t = this.session.state) == null ? void 0 : t.data;
|
|
830
|
+
if ((r = e == null ? void 0 : e.allowed_schemes) != null && r.length)
|
|
831
|
+
return X(e.allowed_schemes);
|
|
809
832
|
}
|
|
810
833
|
getCardDataValidationError() {
|
|
811
834
|
if (!this.state.complete)
|
|
@@ -820,8 +843,11 @@ function m(i) {
|
|
|
820
843
|
if (i != null && i.key)
|
|
821
844
|
return { key: i.key };
|
|
822
845
|
}
|
|
823
|
-
|
|
824
|
-
|
|
846
|
+
function x(i, e) {
|
|
847
|
+
return i === void 0 ? e : i.length === 0 ? [] : e != null && e.length ? e.filter((t) => i.includes(t)) : i;
|
|
848
|
+
}
|
|
849
|
+
const J = "v3.10.0";
|
|
850
|
+
class Q {
|
|
825
851
|
constructor() {
|
|
826
852
|
if (Object.defineProperty(this, "iframe", {
|
|
827
853
|
enumerable: !0,
|
|
@@ -870,7 +896,7 @@ class G {
|
|
|
870
896
|
a(new Error("Coordinator iframe failed to load"));
|
|
871
897
|
});
|
|
872
898
|
}))
|
|
873
|
-
}), this.iframeBaseUrl =
|
|
899
|
+
}), this.iframeBaseUrl = S(J), !this.iframeBaseUrl)
|
|
874
900
|
throw new Error("IFRAME_BASE_URL not found");
|
|
875
901
|
}
|
|
876
902
|
/**
|
|
@@ -897,7 +923,7 @@ class G {
|
|
|
897
923
|
this.iframe = null, e == null || e.remove();
|
|
898
924
|
}
|
|
899
925
|
}
|
|
900
|
-
class
|
|
926
|
+
class Z {
|
|
901
927
|
constructor(e = "https://api.hellgate.io", t = new AbortController()) {
|
|
902
928
|
Object.defineProperty(this, "abortCtrl", {
|
|
903
929
|
enumerable: !0,
|
|
@@ -931,8 +957,8 @@ class X {
|
|
|
931
957
|
this.abortCtrl.abort();
|
|
932
958
|
}
|
|
933
959
|
}
|
|
934
|
-
const
|
|
935
|
-
class
|
|
960
|
+
const ee = 2e3;
|
|
961
|
+
class te {
|
|
936
962
|
constructor(e, t) {
|
|
937
963
|
Object.defineProperty(this, "id", {
|
|
938
964
|
enumerable: !0,
|
|
@@ -987,7 +1013,7 @@ class Q {
|
|
|
987
1013
|
writable: !0,
|
|
988
1014
|
value: (r) => {
|
|
989
1015
|
var n;
|
|
990
|
-
return ((n = this.state) == null ? void 0 : n.next_action) === null ? (r(
|
|
1016
|
+
return ((n = this.state) == null ? void 0 : n.next_action) === null ? (r(y(this.state)), () => {
|
|
991
1017
|
}) : (this.onCloseHandlers.push(r), () => this.onCloseHandlers = this.onCloseHandlers.filter((a) => a !== r));
|
|
992
1018
|
}
|
|
993
1019
|
}), Object.defineProperty(this, "completeAction", {
|
|
@@ -998,9 +1024,9 @@ class Q {
|
|
|
998
1024
|
const n = this.state;
|
|
999
1025
|
return new Promise((a, s) => {
|
|
1000
1026
|
const o = this.onStateChange((l) => {
|
|
1001
|
-
l.next_action !== (n == null ? void 0 : n.next_action) && l.next_action === null && (a(
|
|
1027
|
+
l.next_action !== (n == null ? void 0 : n.next_action) && l.next_action === null && (a(y(l)), o());
|
|
1002
1028
|
});
|
|
1003
|
-
this.api.completeAction(this.id, r).then((l) => this.newStateHandle(l, s)).catch(async (l) => s(await
|
|
1029
|
+
this.api.completeAction(this.id, r).then((l) => this.newStateHandle(l, s)).catch(async (l) => s(await re(l)));
|
|
1004
1030
|
});
|
|
1005
1031
|
}
|
|
1006
1032
|
}), Object.defineProperty(this, "completeSession", {
|
|
@@ -1036,24 +1062,24 @@ class Q {
|
|
|
1036
1062
|
case "wait": {
|
|
1037
1063
|
window.clearTimeout(this.pollingTimer), this.pollingTimer = window.setTimeout(() => this.updateSessionState(t).catch((n) => {
|
|
1038
1064
|
n instanceof Response && n.status === 404 && (t == null || t(new Error(`Session ${this.id} has expired`)));
|
|
1039
|
-
}),
|
|
1065
|
+
}), ee);
|
|
1040
1066
|
break;
|
|
1041
1067
|
}
|
|
1042
1068
|
}
|
|
1043
|
-
e.next_action !== ((r = this.state) == null ? void 0 : r.next_action) && this.stateChangeHandlers.forEach((n) => n(e)), e.next_action === null && this.completeSession(
|
|
1069
|
+
e.next_action !== ((r = this.state) == null ? void 0 : r.next_action) && this.stateChangeHandlers.forEach((n) => n(e)), e.next_action === null && this.completeSession(y(e)), this.state = e;
|
|
1044
1070
|
}
|
|
1045
1071
|
}
|
|
1046
|
-
async function
|
|
1072
|
+
async function re(i) {
|
|
1047
1073
|
return !i.ok && i.status >= 400 && i.status <= 500 ? i.json() : i;
|
|
1048
1074
|
}
|
|
1049
|
-
function
|
|
1075
|
+
function y(i) {
|
|
1050
1076
|
const e = { ...i };
|
|
1051
1077
|
return delete e.next_action, e;
|
|
1052
1078
|
}
|
|
1053
|
-
const
|
|
1079
|
+
const ie = {
|
|
1054
1080
|
base_url: "https://api.hellgate.io"
|
|
1055
1081
|
};
|
|
1056
|
-
class
|
|
1082
|
+
class N {
|
|
1057
1083
|
constructor(e, t, r) {
|
|
1058
1084
|
Object.defineProperty(this, "session", {
|
|
1059
1085
|
enumerable: !0,
|
|
@@ -1091,16 +1117,16 @@ class L {
|
|
|
1091
1117
|
}
|
|
1092
1118
|
static async init(e, t = {}) {
|
|
1093
1119
|
const { session: r, coordinator: n, cardHandler: a, handler3DS: s } = await this.initHandlers(e, t);
|
|
1094
|
-
return new
|
|
1120
|
+
return new N(r, n, {
|
|
1095
1121
|
CARD: a,
|
|
1096
1122
|
"3DS": s
|
|
1097
1123
|
});
|
|
1098
1124
|
}
|
|
1099
1125
|
static async initHandlers(e, t) {
|
|
1100
1126
|
const r = {
|
|
1101
|
-
...
|
|
1127
|
+
...ie,
|
|
1102
1128
|
...t
|
|
1103
|
-
}, n = new
|
|
1129
|
+
}, n = new Z(r.base_url, r.abortCtrl), a = new te(e, n), s = new Q();
|
|
1104
1130
|
s.onMessage("coordinator:session_state_change", (c) => {
|
|
1105
1131
|
c.state.next_action !== "wait" && a.newStateHandle(c.state);
|
|
1106
1132
|
}), await s.init(e, r.base_url, r.abortCtrl);
|
|
@@ -1111,7 +1137,7 @@ class L {
|
|
|
1111
1137
|
return w.init(e, t);
|
|
1112
1138
|
}
|
|
1113
1139
|
static create3DSHandler(e, t) {
|
|
1114
|
-
return new
|
|
1140
|
+
return new k(e, {
|
|
1115
1141
|
domContainer: t.challenge_3ds_container,
|
|
1116
1142
|
labelText: t.challenge_3ds_label_text
|
|
1117
1143
|
});
|
|
@@ -1119,17 +1145,17 @@ class L {
|
|
|
1119
1145
|
}
|
|
1120
1146
|
globalThis.HellgateSDK && (globalThis.Hellgate = globalThis.HellgateSDK.Hellgate, delete globalThis.HellgateSDK);
|
|
1121
1147
|
export {
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1148
|
+
q as CardElement,
|
|
1149
|
+
z as CardExpirationDateElement,
|
|
1150
|
+
Y as CardNumberElement,
|
|
1151
|
+
G as CardVerificationCodeElement,
|
|
1152
|
+
N as Hellgate,
|
|
1153
|
+
k as Hellgate3DSHandler,
|
|
1128
1154
|
w as HellgateCardHandler,
|
|
1129
1155
|
K as TextElement,
|
|
1130
1156
|
b as createElement,
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1157
|
+
L as extractCardNumberValue,
|
|
1158
|
+
M as extractExpiryDateValue,
|
|
1159
|
+
B as putCardNumberValue,
|
|
1160
|
+
I as putExpiryDateValue
|
|
1135
1161
|
};
|
package/dist/hellgate-sdk.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(c,p){typeof exports=="object"&&typeof module<"u"?p(exports):typeof define=="function"&&define.amd?define(["exports"],p):(c=typeof globalThis<"u"?globalThis:c||self,p(c.HellgateSDK={}))})(this,function(c){"use strict";function p(i){return Array.isArray(i)?i.filter(Boolean):Object.fromEntries(Object.entries(i).map(([e,t])=>[e,typeof t=="object"&&t&&!Array.isArray(t)?p(t):t]).filter(([e,t])=>typeof t=="object"&&t&&!Array.isArray(t)?!!Object.keys(t).length:t!=null&&t!=null))}function b(i,e){const t={...i,...e},r=Object.keys(t);for(const n of r){const a=i[n],s=e[n];typeof a=="object"&&!Array.isArray(a)&&a&&typeof s=="object"&&!Array.isArray(s)&&s&&(t[n]=b(a,s))}return t}function E(i){if(!i.ok)throw i;return i.json()}function S(i){return`https://${window.HG_IFRAME_HOST??"sdk.hellgate.io"}/web/${i}/iframe/`}const B=2e3;class j{constructor(e,t){Object.defineProperty(this,"session",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"iframeId",{enumerable:!0,configurable:!0,writable:!0,value:String(Math.floor(1e5+Math.random()*9e5))}),Object.defineProperty(this,"resultPollingTimer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"transactionId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"decoupledAuthHandlers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"disposers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"check3dsIframeDisposers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"domContainer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"labelText",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onStartHandler",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onFinishHandler",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onDecoupledAuth",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.decoupledAuthHandlers.push(r)}}),Object.defineProperty(this,"onStartChallenge",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.onStartHandler=r}}),Object.defineProperty(this,"onChallengeFinished",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.onFinishHandler=r}}),Object.defineProperty(this,"sessionStateHandle",{enumerable:!0,configurable:!0,writable:!0,value:r=>{var n,a;switch(r.next_action){case"3ds_check":{this.initCheck3DSIframes(r.data.threeds_server_callback_url,r.data.mon_url);break}case"3ds_challenge":{(n=this.onStartHandler)==null||n.call(this),this.disposeCheck3DSIframe(),this.startChallenge(r.data.challenge_url,r.data.result_mon_url);break}case"3ds_challenge_decoupled":{this.startDecoupledAuth(r.data.cardholder_info,r.data.result_mon_url,r.data.transaction_id);break}case null:{this.dispose(),(a=this.onFinishHandler)==null||a.call(this);break}}}}),this.domContainer=t.domContainer??w(),this.disposers.push(this.session.onStateChange(this.sessionStateHandle)),this.labelText=t.labelText}dispose(){this.disposers.forEach(e=>e()),this.check3dsIframeDisposers.forEach(e=>e())}initCheck3DSIframes(e,t){const r=w();r.insertAdjacentHTML("beforeend",`<iframe id="check_3ds_${this.iframeId}" width="0" height="0" style="border:0;visibility: hidden;" src="${e}"></iframe>`);const n=r.querySelector(`#check_3ds_${this.iframeId}`);if(n){const a=s=>{s.source===n.contentWindow&&this.session.completeAction({action:"3ds_check",result:s.data})};window.addEventListener("message",a),this.check3dsIframeDisposers.push(()=>window.removeEventListener("message",a),()=>n.remove())}if(t){r.insertAdjacentHTML("beforeend",`<iframe id="mon_${this.iframeId}" width="0" height="0" style="border:0;visibility: hidden;" src="${t}"></iframe>`);const a=r.querySelector(`#mon_${this.iframeId}`);a&&this.disposers.push(()=>a.remove())}}disposeCheck3DSIframe(){this.check3dsIframeDisposers.forEach(e=>e()),this.check3dsIframeDisposers=[]}startChallenge(e,t){const r=w(),n=`<div style="display: flex; flex-direction: column; gap: 10px; align-items: center; ${this.domContainer===r?'border:0; max-width: 800px; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width:100% " ':'border:0;" width="100%" height="100%"'}><iframe id="cha_${this.iframeId}" src="${e}" width="100%" height="500"></iframe>${this.labelText?'<span id="tds_label_text" style="font-size: large;">'+this.labelText+"</span>":""}<div>`;this.domContainer.insertAdjacentHTML("beforeend",this.domContainer===r?`<div id="cha_${this.iframeId}_wrap" style="background: #fff; position: fixed; left: 0; top: 0; width: 100%; height: 100%; z-index: 10000;">${n}</div>`:n);const a=this.domContainer.querySelector(`#cha_${this.iframeId}`),s=this.domContainer.querySelector(`#cha_${this.iframeId}_wrap`);if(!a)throw new Error("3DS Challenge Iframe initialization failed");this.disposers.push(()=>{a.remove(),s==null||s.remove()});const o=new Promise(d=>{const h=u=>{u.source!==a.contentWindow||u.data.event!=="AuthResultReady"||d({...u.data,requestor_trans_id:u.data.requestor_trans_id??u.data.requestorTransId,requestorTransId:void 0,param:u.data.param||void 0})};window.addEventListener("message",h),this.disposers.push(()=>window.removeEventListener("message",h))}),l=new Promise(d=>{const h=this.startAuthResultPolling(t,u=>{u.event==="AuthResultReady"&&(h(),d({requestor_trans_id:u.threeDSRequestorTransID,event:u.event}))})});Promise.any([o,l]).then(d=>{this.session.completeAction({action:"3ds_challenge",result:d})})}startDecoupledAuth(e,t,r){this.transactionId||(this.transactionId=r),this.decoupledAuthHandlers.forEach(a=>a(e));const n=this.startAuthResultPolling(t,a=>{a.event==="AuthResultReady"&&(this.session.completeAction({action:"3ds_challenge_decoupled",result:{...a,event:a.event}}),n())})}startAuthResultPolling(e,t){return window.clearTimeout(this.resultPollingTimer),this.resultPollingTimer=window.setTimeout(()=>fetch(e).then(r=>E(r)).then(r=>{this.startAuthResultPolling(e,t),t(r)}).catch(()=>{}),B),()=>window.clearTimeout(this.resultPollingTimer)}}function w(){return document.body}const _={base:{":disabled":{backgroundColor:"transparent"}}},Y="DOM Element was not found";var A;(function(i){i.NOT_COMPLETE="NOT_COMPLETE",i.SCHEME_NOT_SUPPORTED="SCHEME_NOT_SUPPORTED",i.LUHN_CHECK_FAILED="LUHN_CHECK_FAILED",i.INVALID_EXPIRY_DATE="INVALID_EXPIRY_DATE"})(A||(A={}));const H=i=>i!=null,q="v3.9.1";class m{constructor(e){if(Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"IFRAME_BASE_URL",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"iframe",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"subscriptions",{enumerable:!0,configurable:!0,writable:!0,value:{ready:[],blur:[],focus:[],keydown:[],change:[]}}),Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:async({...t})=>{this.iframe&&H(t.height)&&(this.iframe.height=t.height),this.iframePostMessage({type:"update",data:{...t,value:t.value?this.putValue(t.value)??void 0:void 0}})}}),Object.defineProperty(this,"clear",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.iframePostMessage({type:"clear"})}}),Object.defineProperty(this,"focus",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.iframePostMessage({type:"focus"})}}),Object.defineProperty(this,"blur",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.iframePostMessage({type:"blur"})}}),Object.defineProperty(this,"unmount",{enumerable:!0,configurable:!0,writable:!0,value:()=>{var t;(t=this.iframe)==null||t.remove(),this.iframe=null}}),this.IFRAME_BASE_URL=S(q),!this.IFRAME_BASE_URL)throw new Error("IFRAME_BASE_URL not found")}mount(e){const t=typeof e=="string"?document.querySelector(e):e;if(!t)throw new Error(`${Y}: ${e}`);t.innerHTML=`<iframe width="100%" height="29" src="${this.IFRAME_BASE_URL}?field=${this.type}&origin=${location.origin}"></iframe>`,this.iframe=t.querySelector("iframe");const r=n=>{var a;n.source!==((a=this.iframe)==null?void 0:a.contentWindow)||n.data.element!==this.type||this.emitEvent(n.data)};return window.addEventListener("message",r),new Promise(n=>{this.on("ready",a=>{this.key=a.key,this.update(this.options),n()})})}on(e,t){return this.subscriptions[e].push(t),{unsubscribe:()=>this.subscriptions[e].splice(this.subscriptions[e].indexOf(t),1)}}emitEvent(e){var t;(t=this.subscriptions[e.type])==null||t.forEach(r=>r(e.data))}iframePostMessage(e){var t,r;(r=(t=this.iframe)==null?void 0:t.contentWindow)==null||r.postMessage(e,this.IFRAME_BASE_URL)}}class K extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardExpirationMonth"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:D}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:T})}}function D(i){return i?Number(i):null}function T(i){return i?i<10?`0${i}`:String(i):null}class W extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardExpirationYear"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:M}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:I})}}function M(i){if(!i)return null;const e=Number(i);return e>10?+`20${e}`:null}function I(i){return i?i>=100?String(i).slice(-2):String(i):null}function v(i){const[e=null,t=null]=(i??"").split("/").map(r=>r.trim());return{month:D(e),year:M(t)}}function O(i){if(!i)return null;const{month:e,year:t}=i;return[T(e),I(t)].filter(H).join(" / ")}class L extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardExpirationDate"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:v}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:O})}}function P(i){return(i==null?void 0:i.replaceAll(" ",""))??null}function N(i){return i}class F extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardNumber"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:P}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:N})}}class k extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"card"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e?{number:e.cardNumber?P(e.cardNumber):null,expiry_date:e.cardExpirationDate?v(e.cardExpirationDate):null,cvc:e.cardVerificationCode??null}:null}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e?{cardNumber:e.number?e.number:null,cardExpirationDate:e.expiry_date?O(e.expiry_date):null,cardVerificationCode:e.cvc??null}:null})}}class R extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardVerificationCode"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e})}}class $ extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"text"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e})}}function f(i,e){switch(i){case"card":return new k(e);case"cardNumber":return new F(e);case"cardExpirationDate":return new L(e);case"cardExpirationMonth":return new K(e);case"cardExpirationYear":return new W(e);case"cardVerificationCode":return new R(e);case"text":return new $(e);default:ASSERT_EXHAUSTIVE(i)}}function U(i){return[i.issuer_identification_number,"".padEnd(i.account_number_length-i.issuer_identification_number.length-i.account_number_last_four.length,"*"),i.account_number_last_four].join(" ")}class g{static async init(e,t){return new g(e,t)}constructor(e,t){Object.defineProperty(this,"session",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"coordinator",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:this.createFieldDefaultState()}),Object.defineProperty(this,"cardElements",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"textElements",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"stateChangeHandlers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"cvcOnlyEnabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"createForm",{enumerable:!0,configurable:!0,writable:!0,value:(r={})=>{var s;if(this.hasFormElements())throw new Error("Form elements can't be initialized twice. You can call `reset()` method or create new Hellgate client.");const n=b({disabled:!1,autocomplete:"on",style:{..._}},r);if(this.session.isNextAction("refresh_security_code")&&((s=this.session.state)!=null&&s.data)){const o=this.session.state.data;n.cvcOnly=!0,n.value={number:U(o),expiry_date:{month:(o==null?void 0:o.expiry_month)??null,year:(o==null?void 0:o.expiry_year)??null},cvc:null}}const a=f("card",n);return this.cardElements.card={element:a,state:this.createFieldDefaultState()},this.addElementStateListener("card"),a}}),Object.defineProperty(this,"createTextField",{enumerable:!0,configurable:!0,writable:!0,value:(r={})=>{const n={disabled:!1,autocomplete:"on",style:{..._}},a=f("text",{...b(n,{...r})});return this.textElements.push(a),a}}),Object.defineProperty(this,"tokenize",{enumerable:!0,configurable:!0,writable:!0,value:async r=>{var a,s;if(((a=this.session.state)==null?void 0:a.next_action)!=="tokenize_card")throw new Error(`The session's next_action='${(s=this.session.state)==null?void 0:s.next_action}'. tokenize() is available only if next_action='tokenize_card'`);const n=this.getCardDataValidationError();if(n)throw n;return this.coordinator.postMessage({type:"card:tokenize",additionalData:this.serializeAdditionalData(r)}),new Promise(o=>{this.coordinator.onMessage("card:tokenize:response",l=>{o(l.success?l.result:null)})})}}),Object.defineProperty(this,"onStateChange",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.stateChangeHandlers.push(r),r(this.state)}}),Object.defineProperty(this,"clear",{enumerable:!0,configurable:!0,writable:!0,value:()=>{Object.values(this.cardElements).forEach(r=>r==null?void 0:r.element.clear()),this.textElements.forEach(r=>r==null?void 0:r.clear())}}),Object.defineProperty(this,"reset",{enumerable:!0,configurable:!0,writable:!0,value:()=>{Object.values(this.cardElements).forEach(r=>r==null?void 0:r.element.unmount()),this.textElements.forEach(r=>r==null?void 0:r.unmount()),this.cardElements={},this.textElements=[],this.state=this.createFieldDefaultState()}}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.reset()}}),Object.defineProperty(this,"process",{enumerable:!0,configurable:!0,writable:!0,value:async(r={})=>{if(!this.hasFormElements())throw new Error("Card form must be initialized and completed before processing");const n=this.getCardDataValidationError();if(n)throw n;if(this.session.isNextAction("refresh_security_code"))return this.refreshSecurityCode();this.disableFormElements(!0);try{return this.coordinator.postMessage({type:"card:process",additionalData:this.serializeAdditionalData(r)}),new Promise((a,s)=>{this.coordinator.onMessage("card:process:response",o=>{o.result&&o.success?a(o.result):s(new Error(o.error))})})}catch(a){throw this.disableFormElements(!1),a}}}),this.cvcOnlyEnabled=this.session.isNextAction("refresh_security_code")}createFormFields(e={}){var l,d;if(this.hasFormElements())throw new Error("Form elements can't be initialized twice. You can call `reset()` method or create new Hellgate client.");const t={disabled:this.cvcOnlyEnabled,autocomplete:"on",style:{..._}},{cardNumber:r={},securityCode:n={},...a}=e,s=f("cardNumber",{...b(t,{...a,...r,cvcOnly:this.cvcOnlyEnabled,value:this.session.isNextAction("refresh_security_code")&&((l=this.session.state)!=null&&l.data)?U(this.session.state.data):null})}),o=f("cardVerificationCode",{...b({...t,disabled:!1,autofocus:this.cvcOnlyEnabled},{...a,...n})});if(s.on("change",h=>{const u=h.cardBrand;o.update({cardType:u})}),this.cardElements={cardNumber:{element:s,state:this.createFieldDefaultState()},cardVerificationCode:{element:o,state:this.createFieldDefaultState()}},this.addElementStateListener("cardNumber"),this.addElementStateListener("cardVerificationCode"),e.expiryDateElement==="separate"){const{expiryMonth:h={},expiryYear:u={}}=e,V=f("cardExpirationMonth",{...b(t,{...a,...h})}),z=f("cardExpirationYear",{...b(t,{...a,...u})});return this.cardElements.cardExpirationMonth={element:V,state:this.createFieldDefaultState()},this.cardElements.cardExpirationYear={element:z,state:this.createFieldDefaultState()},this.addElementStateListener("cardExpirationMonth"),this.addElementStateListener("cardExpirationYear"),{cardNumber:s,expiryMonth:V,expiryYear:z,securityCode:o}}else{const{expiryDate:h={}}=e,u=f("cardExpirationDate",{...b(t,{...a,...h,value:this.session.isNextAction("refresh_security_code")&&((d=this.session.state)!=null&&d.data)?{month:this.session.state.data.expiry_month,year:this.session.state.data.expiry_year}:null})});return this.cardElements.cardExpirationDate={element:u,state:this.createFieldDefaultState()},this.addElementStateListener("cardExpirationDate"),{cardNumber:s,expiryDate:u,securityCode:o}}}async refreshSecurityCode(){return this.coordinator.postMessage({type:"card:refresh_security_code"}),new Promise((e,t)=>{this.coordinator.onMessage("card:refresh_security_code:response",r=>{r.result?e(r.result):t(new Error(r.error))})})}hasFormElements(){return!!Object.keys(this.cardElements).length}disableFormElements(e){Object.values(this.cardElements).forEach(({element:t})=>{t.update({disabled:e})})}addElementStateListener(e){const t=this.cardElements[e];t&&t.element.on("change",r=>{t.state=r,this.updateFormState()})}updateFormState(){const e=this.cvcOnlyEnabled&&this.cardElements.cardVerificationCode?[this.cardElements.cardVerificationCode]:Object.values(this.cardElements);e.length?this.state=e.reduce((t,{state:r})=>(t.valid=!!t.valid&&!!r.valid,t.complete=!!t.complete&&!!r.complete,t.empty=!!t.empty&&!!r.empty,t.error=t.error||r.error,t.errorCode=t.errorCode||r.errorCode,t),{valid:!0,complete:!0,empty:!0}):this.state=this.createFieldDefaultState(),this.stateChangeHandlers.forEach(t=>t(this.state))}createFieldDefaultState(){return{empty:!0,complete:!1,valid:!1}}serializeAdditionalData({cardholder_name:e,billing_address:t={}}){return p({cardholder_name:y(e),billing_address:{line1:y(t.line1),line2:y(t.line2),line3:y(t.line3),city:y(t.city),postal_code:y(t.postal_code)}})}getCardDataValidationError(){if(!this.state.complete)return new Error(this.state.error??"Card data is not complete");if(!this.state.valid)return new Error(`Card data is not valid. ${this.state.error}`)}}function y(i){if(typeof i=="string")return i;if(i!=null&&i.key)return{key:i.key}}const G="v3.9.1";class X{constructor(){if(Object.defineProperty(this,"iframe",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"iframeBaseUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"messageHandler",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"init",{enumerable:!0,configurable:!0,writable:!0,value:async(e,t,r)=>(window.fetchMocker={a:1},new Promise((n,a)=>{r==null||r.signal.addEventListener("abort",()=>{const l=new Error("Coordinator init aborted");l.name="AbortError",a(l),this.dispose()});const s=document.createElement("div");s.setAttribute("style","position:absolute;width:0;height:0;overflow:hidden;"),s.setAttribute("data-hg-coordinator",""),document.body.appendChild(s);const o=`${this.iframeBaseUrl}?type=coordinator&sessionId=${e}&apiBaseUrl=${t}&origin=${encodeURIComponent(location.origin)}`;if(s.innerHTML=`<iframe src="${o}" width="0" height="0" style="border:none;" tabindex="-1" aria-hidden="true"></iframe>`,this.iframe=s.querySelector("iframe"),!this.iframe){a(new Error("Failed to create coordinator iframe"));return}this.messageHandler=l=>{var d,h,u;if(l.source===((d=this.iframe)==null?void 0:d.contentWindow)){if(((h=l.data)==null?void 0:h.type)==="coordinator:ready"){n();return}if(((u=l.data)==null?void 0:u.type)==="coordinator:error"){a(l.data.error);return}}},window.addEventListener("message",this.messageHandler),this.iframe.addEventListener("error",()=>{a(new Error("Coordinator iframe failed to load"))})}))}),this.iframeBaseUrl=S(G),!this.iframeBaseUrl)throw new Error("IFRAME_BASE_URL not found")}postMessage(e){var t,r;(r=(t=this.iframe)==null?void 0:t.contentWindow)==null||r.postMessage(e,this.iframeBaseUrl)}onMessage(e,t){window.addEventListener("message",r=>{var n,a;r.source===((n=this.iframe)==null?void 0:n.contentWindow)&&((a=r.data)==null?void 0:a.type)===e&&t(r.data)})}dispose(){var t;this.postMessage({type:"coordinator:dispose"}),this.messageHandler&&(window.removeEventListener("message",this.messageHandler),this.messageHandler=null);const e=(t=this.iframe)==null?void 0:t.parentElement;this.iframe=null,e==null||e.remove()}}class J{constructor(e="https://api.hellgate.io",t=new AbortController){Object.defineProperty(this,"abortCtrl",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"baseUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.baseUrl=e.endsWith("/")?e.substring(0,e.length-1):e}getSession(e){return fetch(`${this.baseUrl}/sessions/${e}`,{signal:this.abortCtrl.signal}).then(t=>E(t))}completeAction(e,t){return fetch(`${this.baseUrl}/sessions/${e}/complete-action`,{method:"POST",headers:{"Content-Type":"application/json"},mode:"cors",body:JSON.stringify(t),signal:this.abortCtrl.signal}).then(r=>E(r))}cancelAll(){this.abortCtrl.abort()}}const Q=2e3;class Z{constructor(e,t){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"api",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"stateChangeHandlers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"onCloseHandlers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pollingTimer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"init",{enumerable:!0,configurable:!0,writable:!0,value:async()=>new Promise((r,n)=>{const a=this.onStateChange(s=>{s.next_action!=="wait"&&(r(s),a())});this.updateSessionState().catch(s=>{s instanceof Response&&s.status===404&&n(new Error(`Session ${this.id} doesn't exist or has expired`)),n(s)})})}),Object.defineProperty(this,"onStateChange",{enumerable:!0,configurable:!0,writable:!0,value:r=>(this.stateChangeHandlers.push(r),this.state&&r(this.state),()=>this.stateChangeHandlers=this.stateChangeHandlers.filter(n=>n!==r))}),Object.defineProperty(this,"onClose",{enumerable:!0,configurable:!0,writable:!0,value:r=>{var n;return((n=this.state)==null?void 0:n.next_action)===null?(r(x(this.state)),()=>{}):(this.onCloseHandlers.push(r),()=>this.onCloseHandlers=this.onCloseHandlers.filter(a=>a!==r))}}),Object.defineProperty(this,"completeAction",{enumerable:!0,configurable:!0,writable:!0,value:async r=>{const n=this.state;return new Promise((a,s)=>{const o=this.onStateChange(l=>{l.next_action!==(n==null?void 0:n.next_action)&&l.next_action===null&&(a(x(l)),o())});this.api.completeAction(this.id,r).then(l=>this.newStateHandle(l,s)).catch(async l=>s(await ee(l)))})}}),Object.defineProperty(this,"completeSession",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.onCloseHandlers.forEach(n=>n(r)),this.stop()}}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.stop(),this.api.cancelAll()}})}isNextAction(e){var t;return((t=this.state)==null?void 0:t.next_action)===e}stop(){window.clearTimeout(this.pollingTimer),this.stateChangeHandlers=[],this.onCloseHandlers=[]}async updateSessionState(e){const t=await this.api.getSession(this.id);this.newStateHandle(t,e)}newStateHandle(e,t){var r;switch(!e.next_action&&e.status&&(e.next_action=null),e.next_action){case"wait":{window.clearTimeout(this.pollingTimer),this.pollingTimer=window.setTimeout(()=>this.updateSessionState(t).catch(n=>{n instanceof Response&&n.status===404&&(t==null||t(new Error(`Session ${this.id} has expired`)))}),Q);break}}e.next_action!==((r=this.state)==null?void 0:r.next_action)&&this.stateChangeHandlers.forEach(n=>n(e)),e.next_action===null&&this.completeSession(x(e)),this.state=e}}async function ee(i){return!i.ok&&i.status>=400&&i.status<=500?i.json():i}function x(i){const e={...i};return delete e.next_action,e}const te={base_url:"https://api.hellgate.io"};class C{constructor(e,t,r){Object.defineProperty(this,"session",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"coordinator",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"paymentFlowHandlers",{enumerable:!0,configurable:!0,writable:!0,value:r}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.session.dispose(),this.coordinator.dispose(),Object.values(this.paymentFlowHandlers).forEach(n=>n==null?void 0:n.dispose())}}),Object.defineProperty(this,"onSessionComplete",{enumerable:!0,configurable:!0,writable:!0,value:n=>{this.session.onClose(n)}})}use(e){return this.paymentFlowHandlers[e]}static async init(e,t={}){const{session:r,coordinator:n,cardHandler:a,handler3DS:s}=await this.initHandlers(e,t);return new C(r,n,{CARD:a,"3DS":s})}static async initHandlers(e,t){const r={...te,...t},n=new J(r.base_url,r.abortCtrl),a=new Z(e,n),s=new X;s.onMessage("coordinator:session_state_change",d=>{d.state.next_action!=="wait"&&a.newStateHandle(d.state)}),await s.init(e,r.base_url,r.abortCtrl);const o=a.isNextAction("tokenize_card")||a.isNextAction("refresh_security_code")?await this.createCardHandler(a,s):void 0,l=this.create3DSHandler(a,t);return{session:a,coordinator:s,cardHandler:o,handler3DS:l}}static createCardHandler(e,t){return g.init(e,t)}static create3DSHandler(e,t){return new j(e,{domContainer:t.challenge_3ds_container,labelText:t.challenge_3ds_label_text})}}c.CardElement=k,c.CardExpirationDateElement=L,c.CardNumberElement=F,c.CardVerificationCodeElement=R,c.Hellgate=C,c.Hellgate3DSHandler=j,c.HellgateCardHandler=g,c.TextElement=$,c.createElement=f,c.extractCardNumberValue=P,c.extractExpiryDateValue=v,c.putCardNumberValue=N,c.putExpiryDateValue=O,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});globalThis.HellgateSDK&&(globalThis.Hellgate=globalThis.HellgateSDK.Hellgate,delete globalThis.HellgateSDK);
|
|
1
|
+
(function(c,p){typeof exports=="object"&&typeof module<"u"?p(exports):typeof define=="function"&&define.amd?define(["exports"],p):(c=typeof globalThis<"u"?globalThis:c||self,p(c.HellgateSDK={}))})(this,function(c){"use strict";function p(i){return Array.isArray(i)?i.filter(Boolean):Object.fromEntries(Object.entries(i).map(([e,t])=>[e,typeof t=="object"&&t&&!Array.isArray(t)?p(t):t]).filter(([e,t])=>typeof t=="object"&&t&&!Array.isArray(t)?!!Object.keys(t).length:t!=null&&t!=null))}function b(i,e){const t={...i,...e},r=Object.keys(t);for(const n of r){const a=i[n],s=e[n];typeof a=="object"&&!Array.isArray(a)&&a&&typeof s=="object"&&!Array.isArray(s)&&s&&(t[n]=b(a,s))}return t}function E(i){if(!i.ok)throw i;return i.json()}function S(i){return`https://${window.HG_IFRAME_HOST??"sdk.hellgate.io"}/web/${i}/iframe/`}const Y=2e3;class j{constructor(e,t){Object.defineProperty(this,"session",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"iframeId",{enumerable:!0,configurable:!0,writable:!0,value:String(Math.floor(1e5+Math.random()*9e5))}),Object.defineProperty(this,"resultPollingTimer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"transactionId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"decoupledAuthHandlers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"disposers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"check3dsIframeDisposers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"domContainer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"labelText",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onStartHandler",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onFinishHandler",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"onDecoupledAuth",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.decoupledAuthHandlers.push(r)}}),Object.defineProperty(this,"onStartChallenge",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.onStartHandler=r}}),Object.defineProperty(this,"onChallengeFinished",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.onFinishHandler=r}}),Object.defineProperty(this,"sessionStateHandle",{enumerable:!0,configurable:!0,writable:!0,value:r=>{var n,a;switch(r.next_action){case"3ds_check":{this.initCheck3DSIframes(r.data.threeds_server_callback_url,r.data.mon_url);break}case"3ds_challenge":{(n=this.onStartHandler)==null||n.call(this),this.disposeCheck3DSIframe(),this.startChallenge(r.data.challenge_url,r.data.result_mon_url);break}case"3ds_challenge_decoupled":{this.startDecoupledAuth(r.data.cardholder_info,r.data.result_mon_url,r.data.transaction_id);break}case null:{this.dispose(),(a=this.onFinishHandler)==null||a.call(this);break}}}}),this.domContainer=t.domContainer??w(),this.disposers.push(this.session.onStateChange(this.sessionStateHandle)),this.labelText=t.labelText}dispose(){this.disposers.forEach(e=>e()),this.check3dsIframeDisposers.forEach(e=>e())}initCheck3DSIframes(e,t){const r=w();r.insertAdjacentHTML("beforeend",`<iframe id="check_3ds_${this.iframeId}" width="0" height="0" style="border:0;visibility: hidden;" src="${e}"></iframe>`);const n=r.querySelector(`#check_3ds_${this.iframeId}`);if(n){const a=s=>{s.source===n.contentWindow&&this.session.completeAction({action:"3ds_check",result:s.data})};window.addEventListener("message",a),this.check3dsIframeDisposers.push(()=>window.removeEventListener("message",a),()=>n.remove())}if(t){r.insertAdjacentHTML("beforeend",`<iframe id="mon_${this.iframeId}" width="0" height="0" style="border:0;visibility: hidden;" src="${t}"></iframe>`);const a=r.querySelector(`#mon_${this.iframeId}`);a&&this.disposers.push(()=>a.remove())}}disposeCheck3DSIframe(){this.check3dsIframeDisposers.forEach(e=>e()),this.check3dsIframeDisposers=[]}startChallenge(e,t){const r=w(),n=`<div style="display: flex; flex-direction: column; gap: 10px; align-items: center; ${this.domContainer===r?'border:0; max-width: 800px; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); width:100% " ':'border:0;" width="100%" height="100%"'}><iframe id="cha_${this.iframeId}" src="${e}" width="100%" height="500"></iframe>${this.labelText?'<span id="tds_label_text" style="font-size: large;">'+this.labelText+"</span>":""}<div>`;this.domContainer.insertAdjacentHTML("beforeend",this.domContainer===r?`<div id="cha_${this.iframeId}_wrap" style="background: #fff; position: fixed; left: 0; top: 0; width: 100%; height: 100%; z-index: 10000;">${n}</div>`:n);const a=this.domContainer.querySelector(`#cha_${this.iframeId}`),s=this.domContainer.querySelector(`#cha_${this.iframeId}_wrap`);if(!a)throw new Error("3DS Challenge Iframe initialization failed");this.disposers.push(()=>{a.remove(),s==null||s.remove()});const o=new Promise(d=>{const h=u=>{u.source!==a.contentWindow||u.data.event!=="AuthResultReady"||d({...u.data,requestor_trans_id:u.data.requestor_trans_id??u.data.requestorTransId,requestorTransId:void 0,param:u.data.param||void 0})};window.addEventListener("message",h),this.disposers.push(()=>window.removeEventListener("message",h))}),l=new Promise(d=>{const h=this.startAuthResultPolling(t,u=>{u.event==="AuthResultReady"&&(h(),d({requestor_trans_id:u.threeDSRequestorTransID,event:u.event}))})});Promise.any([o,l]).then(d=>{this.session.completeAction({action:"3ds_challenge",result:d})})}startDecoupledAuth(e,t,r){this.transactionId||(this.transactionId=r),this.decoupledAuthHandlers.forEach(a=>a(e));const n=this.startAuthResultPolling(t,a=>{a.event==="AuthResultReady"&&(this.session.completeAction({action:"3ds_challenge_decoupled",result:{...a,event:a.event}}),n())})}startAuthResultPolling(e,t){return window.clearTimeout(this.resultPollingTimer),this.resultPollingTimer=window.setTimeout(()=>fetch(e).then(r=>E(r)).then(r=>{this.startAuthResultPolling(e,t),t(r)}).catch(()=>{}),Y),()=>window.clearTimeout(this.resultPollingTimer)}}function w(){return document.body}const _={base:{":disabled":{backgroundColor:"transparent"}}},q="DOM Element was not found";var A;(function(i){i.NOT_COMPLETE="NOT_COMPLETE",i.SCHEME_NOT_SUPPORTED="SCHEME_NOT_SUPPORTED",i.LUHN_CHECK_FAILED="LUHN_CHECK_FAILED",i.INVALID_EXPIRY_DATE="INVALID_EXPIRY_DATE"})(A||(A={}));const H=i=>i!=null,K="v3.10.0";class m{constructor(e){if(Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"IFRAME_BASE_URL",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"iframe",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"subscriptions",{enumerable:!0,configurable:!0,writable:!0,value:{ready:[],blur:[],focus:[],keydown:[],change:[]}}),Object.defineProperty(this,"key",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:async({...t})=>{this.iframe&&H(t.height)&&(this.iframe.height=t.height),this.iframePostMessage({type:"update",data:{...t,value:t.value?this.putValue(t.value)??void 0:void 0}})}}),Object.defineProperty(this,"clear",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.iframePostMessage({type:"clear"})}}),Object.defineProperty(this,"focus",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.iframePostMessage({type:"focus"})}}),Object.defineProperty(this,"blur",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.iframePostMessage({type:"blur"})}}),Object.defineProperty(this,"unmount",{enumerable:!0,configurable:!0,writable:!0,value:()=>{var t;(t=this.iframe)==null||t.remove(),this.iframe=null}}),this.IFRAME_BASE_URL=S(K),!this.IFRAME_BASE_URL)throw new Error("IFRAME_BASE_URL not found")}mount(e){const t=typeof e=="string"?document.querySelector(e):e;if(!t)throw new Error(`${q}: ${e}`);t.innerHTML=`<iframe width="100%" height="29" src="${this.IFRAME_BASE_URL}?field=${this.type}&origin=${location.origin}"></iframe>`,this.iframe=t.querySelector("iframe");const r=n=>{var a;n.source!==((a=this.iframe)==null?void 0:a.contentWindow)||n.data.element!==this.type||this.emitEvent(n.data)};return window.addEventListener("message",r),new Promise(n=>{this.on("ready",a=>{this.key=a.key,this.update(this.options),n()})})}on(e,t){return this.subscriptions[e].push(t),{unsubscribe:()=>this.subscriptions[e].splice(this.subscriptions[e].indexOf(t),1)}}emitEvent(e){var t;(t=this.subscriptions[e.type])==null||t.forEach(r=>r(e.data))}iframePostMessage(e){var t,r;(r=(t=this.iframe)==null?void 0:t.contentWindow)==null||r.postMessage(e,this.IFRAME_BASE_URL)}}class G extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardExpirationMonth"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:D}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:T})}}function D(i){return i?Number(i):null}function T(i){return i?i<10?`0${i}`:String(i):null}class W extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardExpirationYear"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:M}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:I})}}function M(i){if(!i)return null;const e=Number(i);return e>10?+`20${e}`:null}function I(i){return i?i>=100?String(i).slice(-2):String(i):null}function v(i){const[e=null,t=null]=(i??"").split("/").map(r=>r.trim());return{month:D(e),year:M(t)}}function O(i){if(!i)return null;const{month:e,year:t}=i;return[T(e),I(t)].filter(H).join(" / ")}class L extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardExpirationDate"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:v}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:O})}}function P(i){return(i==null?void 0:i.replaceAll(" ",""))??null}function N(i){return i}class F extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardNumber"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:P}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:N})}}class k extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"card"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e?{number:e.cardNumber?P(e.cardNumber):null,expiry_date:e.cardExpirationDate?v(e.cardExpirationDate):null,cvc:e.cardVerificationCode??null}:null}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e?{cardNumber:e.number?e.number:null,cardExpirationDate:e.expiry_date?O(e.expiry_date):null,cardVerificationCode:e.cvc??null}:null})}}class R extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"cardVerificationCode"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e})}}class $ extends m{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"text"}),Object.defineProperty(this,"extractValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e}),Object.defineProperty(this,"putValue",{enumerable:!0,configurable:!0,writable:!0,value:e=>e})}}function f(i,e){switch(i){case"card":return new k(e);case"cardNumber":return new F(e);case"cardExpirationDate":return new L(e);case"cardExpirationMonth":return new G(e);case"cardExpirationYear":return new W(e);case"cardVerificationCode":return new R(e);case"text":return new $(e);default:ASSERT_EXHAUSTIVE(i)}}const X={visa:"visa",mastercard:"mastercard",americanexpress:"american-express",discover:"discover",dinersclub:"diners-club",jcb:"jcb",unionpay:"unionpay"};function J(i){return i.map(e=>X[e]).filter(Boolean)}function U(i){return[i.issuer_identification_number,"".padEnd(i.account_number_length-i.issuer_identification_number.length-i.account_number_last_four.length,"*"),i.account_number_last_four].join(" ")}class y{static async init(e,t){return new y(e,t)}constructor(e,t){Object.defineProperty(this,"session",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"coordinator",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:this.createFieldDefaultState()}),Object.defineProperty(this,"cardElements",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"textElements",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"stateChangeHandlers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"cvcOnlyEnabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"createForm",{enumerable:!0,configurable:!0,writable:!0,value:(r={})=>{var s;if(this.hasFormElements())throw new Error("Form elements can't be initialized twice. You can call `reset()` method or create new Hellgate client.");const n=b({disabled:!1,autocomplete:"on",style:{..._}},r);if(this.session.isNextAction("refresh_security_code")&&((s=this.session.state)!=null&&s.data)){const o=this.session.state.data;n.cvcOnly=!0,n.value={number:U(o),expiry_date:{month:(o==null?void 0:o.expiry_month)??null,year:(o==null?void 0:o.expiry_year)??null},cvc:null}}n.schemes=V(this.getSessionSchemes(),n.schemes);const a=f("card",n);return this.cardElements.card={element:a,state:this.createFieldDefaultState()},this.addElementStateListener("card"),a}}),Object.defineProperty(this,"createTextField",{enumerable:!0,configurable:!0,writable:!0,value:(r={})=>{const n={disabled:!1,autocomplete:"on",style:{..._}},a=f("text",{...b(n,{...r})});return this.textElements.push(a),a}}),Object.defineProperty(this,"tokenize",{enumerable:!0,configurable:!0,writable:!0,value:async r=>{var a,s;if(((a=this.session.state)==null?void 0:a.next_action)!=="tokenize_card")throw new Error(`The session's next_action='${(s=this.session.state)==null?void 0:s.next_action}'. tokenize() is available only if next_action='tokenize_card'`);const n=this.getCardDataValidationError();if(n)throw n;return this.coordinator.postMessage({type:"card:tokenize",additionalData:this.serializeAdditionalData(r)}),new Promise(o=>{this.coordinator.onMessage("card:tokenize:response",l=>{o(l.success?l.result:null)})})}}),Object.defineProperty(this,"onStateChange",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.stateChangeHandlers.push(r),r(this.state)}}),Object.defineProperty(this,"clear",{enumerable:!0,configurable:!0,writable:!0,value:()=>{Object.values(this.cardElements).forEach(r=>r==null?void 0:r.element.clear()),this.textElements.forEach(r=>r==null?void 0:r.clear())}}),Object.defineProperty(this,"reset",{enumerable:!0,configurable:!0,writable:!0,value:()=>{Object.values(this.cardElements).forEach(r=>r==null?void 0:r.element.unmount()),this.textElements.forEach(r=>r==null?void 0:r.unmount()),this.cardElements={},this.textElements=[],this.state=this.createFieldDefaultState()}}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.reset()}}),Object.defineProperty(this,"process",{enumerable:!0,configurable:!0,writable:!0,value:async(r={})=>{if(!this.hasFormElements())throw new Error("Card form must be initialized and completed before processing");const n=this.getCardDataValidationError();if(n)throw n;if(this.session.isNextAction("refresh_security_code"))return this.refreshSecurityCode();this.disableFormElements(!0);try{return this.coordinator.postMessage({type:"card:process",additionalData:this.serializeAdditionalData(r)}),new Promise((a,s)=>{this.coordinator.onMessage("card:process:response",o=>{o.result&&o.success?a(o.result):s(new Error(o.error))})})}catch(a){throw this.disableFormElements(!1),a}}}),this.cvcOnlyEnabled=this.session.isNextAction("refresh_security_code")}createFormFields(e={}){var l,d;if(this.hasFormElements())throw new Error("Form elements can't be initialized twice. You can call `reset()` method or create new Hellgate client.");const t={disabled:this.cvcOnlyEnabled,autocomplete:"on",style:{..._}},{cardNumber:r={},securityCode:n={},...a}=e,s=f("cardNumber",{...b(t,{...a,...r,cvcOnly:this.cvcOnlyEnabled,schemes:V(this.getSessionSchemes(),r.schemes??a.schemes),value:this.session.isNextAction("refresh_security_code")&&((l=this.session.state)!=null&&l.data)?U(this.session.state.data):null})}),o=f("cardVerificationCode",{...b({...t,disabled:!1,autofocus:this.cvcOnlyEnabled},{...a,...n})});if(s.on("change",h=>{const u=h.cardBrand;o.update({cardType:u})}),this.cardElements={cardNumber:{element:s,state:this.createFieldDefaultState()},cardVerificationCode:{element:o,state:this.createFieldDefaultState()}},this.addElementStateListener("cardNumber"),this.addElementStateListener("cardVerificationCode"),e.expiryDateElement==="separate"){const{expiryMonth:h={},expiryYear:u={}}=e,z=f("cardExpirationMonth",{...b(t,{...a,...h})}),B=f("cardExpirationYear",{...b(t,{...a,...u})});return this.cardElements.cardExpirationMonth={element:z,state:this.createFieldDefaultState()},this.cardElements.cardExpirationYear={element:B,state:this.createFieldDefaultState()},this.addElementStateListener("cardExpirationMonth"),this.addElementStateListener("cardExpirationYear"),{cardNumber:s,expiryMonth:z,expiryYear:B,securityCode:o}}else{const{expiryDate:h={}}=e,u=f("cardExpirationDate",{...b(t,{...a,...h,value:this.session.isNextAction("refresh_security_code")&&((d=this.session.state)!=null&&d.data)?{month:this.session.state.data.expiry_month,year:this.session.state.data.expiry_year}:null})});return this.cardElements.cardExpirationDate={element:u,state:this.createFieldDefaultState()},this.addElementStateListener("cardExpirationDate"),{cardNumber:s,expiryDate:u,securityCode:o}}}async refreshSecurityCode(){return this.coordinator.postMessage({type:"card:refresh_security_code"}),new Promise((e,t)=>{this.coordinator.onMessage("card:refresh_security_code:response",r=>{r.result?e(r.result):t(new Error(r.error))})})}hasFormElements(){return!!Object.keys(this.cardElements).length}disableFormElements(e){Object.values(this.cardElements).forEach(({element:t})=>{t.update({disabled:e})})}addElementStateListener(e){const t=this.cardElements[e];t&&t.element.on("change",r=>{t.state=r,this.updateFormState()})}updateFormState(){const e=this.cvcOnlyEnabled&&this.cardElements.cardVerificationCode?[this.cardElements.cardVerificationCode]:Object.values(this.cardElements);e.length?this.state=e.reduce((t,{state:r})=>(t.valid=!!t.valid&&!!r.valid,t.complete=!!t.complete&&!!r.complete,t.empty=!!t.empty&&!!r.empty,t.error=t.error||r.error,t.errorCode=t.errorCode||r.errorCode,t),{valid:!0,complete:!0,empty:!0}):this.state=this.createFieldDefaultState(),this.stateChangeHandlers.forEach(t=>t(this.state))}createFieldDefaultState(){return{empty:!0,complete:!1,valid:!1}}serializeAdditionalData({cardholder_name:e,billing_address:t={},ephemeral:r,expiration_date:n}){const a=p({cardholder_name:g(e),billing_address:{line1:g(t.line1),line2:g(t.line2),line3:g(t.line3),city:g(t.city),postal_code:g(t.postal_code)}});return typeof r=="boolean"&&(a.ephemeral=r),typeof n=="string"&&(a.expiration_date=n),a}getSessionSchemes(){var t,r;if(!this.session.isNextAction("tokenize_card"))return;const e=(t=this.session.state)==null?void 0:t.data;if((r=e==null?void 0:e.allowed_schemes)!=null&&r.length)return J(e.allowed_schemes)}getCardDataValidationError(){if(!this.state.complete)return new Error(this.state.error??"Card data is not complete");if(!this.state.valid)return new Error(`Card data is not valid. ${this.state.error}`)}}function g(i){if(typeof i=="string")return i;if(i!=null&&i.key)return{key:i.key}}function V(i,e){return i===void 0?e:i.length===0?[]:e!=null&&e.length?e.filter(t=>i.includes(t)):i}const Q="v3.10.0";class Z{constructor(){if(Object.defineProperty(this,"iframe",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"iframeBaseUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"messageHandler",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"init",{enumerable:!0,configurable:!0,writable:!0,value:async(e,t,r)=>(window.fetchMocker={a:1},new Promise((n,a)=>{r==null||r.signal.addEventListener("abort",()=>{const l=new Error("Coordinator init aborted");l.name="AbortError",a(l),this.dispose()});const s=document.createElement("div");s.setAttribute("style","position:absolute;width:0;height:0;overflow:hidden;"),s.setAttribute("data-hg-coordinator",""),document.body.appendChild(s);const o=`${this.iframeBaseUrl}?type=coordinator&sessionId=${e}&apiBaseUrl=${t}&origin=${encodeURIComponent(location.origin)}`;if(s.innerHTML=`<iframe src="${o}" width="0" height="0" style="border:none;" tabindex="-1" aria-hidden="true"></iframe>`,this.iframe=s.querySelector("iframe"),!this.iframe){a(new Error("Failed to create coordinator iframe"));return}this.messageHandler=l=>{var d,h,u;if(l.source===((d=this.iframe)==null?void 0:d.contentWindow)){if(((h=l.data)==null?void 0:h.type)==="coordinator:ready"){n();return}if(((u=l.data)==null?void 0:u.type)==="coordinator:error"){a(l.data.error);return}}},window.addEventListener("message",this.messageHandler),this.iframe.addEventListener("error",()=>{a(new Error("Coordinator iframe failed to load"))})}))}),this.iframeBaseUrl=S(Q),!this.iframeBaseUrl)throw new Error("IFRAME_BASE_URL not found")}postMessage(e){var t,r;(r=(t=this.iframe)==null?void 0:t.contentWindow)==null||r.postMessage(e,this.iframeBaseUrl)}onMessage(e,t){window.addEventListener("message",r=>{var n,a;r.source===((n=this.iframe)==null?void 0:n.contentWindow)&&((a=r.data)==null?void 0:a.type)===e&&t(r.data)})}dispose(){var t;this.postMessage({type:"coordinator:dispose"}),this.messageHandler&&(window.removeEventListener("message",this.messageHandler),this.messageHandler=null);const e=(t=this.iframe)==null?void 0:t.parentElement;this.iframe=null,e==null||e.remove()}}class ee{constructor(e="https://api.hellgate.io",t=new AbortController){Object.defineProperty(this,"abortCtrl",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"baseUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.baseUrl=e.endsWith("/")?e.substring(0,e.length-1):e}getSession(e){return fetch(`${this.baseUrl}/sessions/${e}`,{signal:this.abortCtrl.signal}).then(t=>E(t))}completeAction(e,t){return fetch(`${this.baseUrl}/sessions/${e}/complete-action`,{method:"POST",headers:{"Content-Type":"application/json"},mode:"cors",body:JSON.stringify(t),signal:this.abortCtrl.signal}).then(r=>E(r))}cancelAll(){this.abortCtrl.abort()}}const te=2e3;class re{constructor(e,t){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"api",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"stateChangeHandlers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"onCloseHandlers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pollingTimer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"init",{enumerable:!0,configurable:!0,writable:!0,value:async()=>new Promise((r,n)=>{const a=this.onStateChange(s=>{s.next_action!=="wait"&&(r(s),a())});this.updateSessionState().catch(s=>{s instanceof Response&&s.status===404&&n(new Error(`Session ${this.id} doesn't exist or has expired`)),n(s)})})}),Object.defineProperty(this,"onStateChange",{enumerable:!0,configurable:!0,writable:!0,value:r=>(this.stateChangeHandlers.push(r),this.state&&r(this.state),()=>this.stateChangeHandlers=this.stateChangeHandlers.filter(n=>n!==r))}),Object.defineProperty(this,"onClose",{enumerable:!0,configurable:!0,writable:!0,value:r=>{var n;return((n=this.state)==null?void 0:n.next_action)===null?(r(x(this.state)),()=>{}):(this.onCloseHandlers.push(r),()=>this.onCloseHandlers=this.onCloseHandlers.filter(a=>a!==r))}}),Object.defineProperty(this,"completeAction",{enumerable:!0,configurable:!0,writable:!0,value:async r=>{const n=this.state;return new Promise((a,s)=>{const o=this.onStateChange(l=>{l.next_action!==(n==null?void 0:n.next_action)&&l.next_action===null&&(a(x(l)),o())});this.api.completeAction(this.id,r).then(l=>this.newStateHandle(l,s)).catch(async l=>s(await ie(l)))})}}),Object.defineProperty(this,"completeSession",{enumerable:!0,configurable:!0,writable:!0,value:r=>{this.onCloseHandlers.forEach(n=>n(r)),this.stop()}}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.stop(),this.api.cancelAll()}})}isNextAction(e){var t;return((t=this.state)==null?void 0:t.next_action)===e}stop(){window.clearTimeout(this.pollingTimer),this.stateChangeHandlers=[],this.onCloseHandlers=[]}async updateSessionState(e){const t=await this.api.getSession(this.id);this.newStateHandle(t,e)}newStateHandle(e,t){var r;switch(!e.next_action&&e.status&&(e.next_action=null),e.next_action){case"wait":{window.clearTimeout(this.pollingTimer),this.pollingTimer=window.setTimeout(()=>this.updateSessionState(t).catch(n=>{n instanceof Response&&n.status===404&&(t==null||t(new Error(`Session ${this.id} has expired`)))}),te);break}}e.next_action!==((r=this.state)==null?void 0:r.next_action)&&this.stateChangeHandlers.forEach(n=>n(e)),e.next_action===null&&this.completeSession(x(e)),this.state=e}}async function ie(i){return!i.ok&&i.status>=400&&i.status<=500?i.json():i}function x(i){const e={...i};return delete e.next_action,e}const ae={base_url:"https://api.hellgate.io"};class C{constructor(e,t,r){Object.defineProperty(this,"session",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"coordinator",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"paymentFlowHandlers",{enumerable:!0,configurable:!0,writable:!0,value:r}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.session.dispose(),this.coordinator.dispose(),Object.values(this.paymentFlowHandlers).forEach(n=>n==null?void 0:n.dispose())}}),Object.defineProperty(this,"onSessionComplete",{enumerable:!0,configurable:!0,writable:!0,value:n=>{this.session.onClose(n)}})}use(e){return this.paymentFlowHandlers[e]}static async init(e,t={}){const{session:r,coordinator:n,cardHandler:a,handler3DS:s}=await this.initHandlers(e,t);return new C(r,n,{CARD:a,"3DS":s})}static async initHandlers(e,t){const r={...ae,...t},n=new ee(r.base_url,r.abortCtrl),a=new re(e,n),s=new Z;s.onMessage("coordinator:session_state_change",d=>{d.state.next_action!=="wait"&&a.newStateHandle(d.state)}),await s.init(e,r.base_url,r.abortCtrl);const o=a.isNextAction("tokenize_card")||a.isNextAction("refresh_security_code")?await this.createCardHandler(a,s):void 0,l=this.create3DSHandler(a,t);return{session:a,coordinator:s,cardHandler:o,handler3DS:l}}static createCardHandler(e,t){return y.init(e,t)}static create3DSHandler(e,t){return new j(e,{domContainer:t.challenge_3ds_container,labelText:t.challenge_3ds_label_text})}}c.CardElement=k,c.CardExpirationDateElement=L,c.CardNumberElement=F,c.CardVerificationCodeElement=R,c.Hellgate=C,c.Hellgate3DSHandler=j,c.HellgateCardHandler=y,c.TextElement=$,c.createElement=f,c.extractCardNumberValue=P,c.extractExpiryDateValue=v,c.putCardNumberValue=N,c.putExpiryDateValue=O,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});globalThis.HellgateSDK&&(globalThis.Hellgate=globalThis.HellgateSDK.Hellgate,delete globalThis.HellgateSDK);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starfish-codes/hellgate",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.10.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Starfish GmbH & Co. KG",
|
|
@@ -56,12 +56,12 @@
|
|
|
56
56
|
"husky": "^9.0.11",
|
|
57
57
|
"ky": "^1.2.2",
|
|
58
58
|
"lint-staged": "^15.2.2",
|
|
59
|
-
"lodash": "^4.
|
|
59
|
+
"lodash": "^4.18.1",
|
|
60
60
|
"mobx": "^6.12.0",
|
|
61
61
|
"mobx-react": "^9.1.0",
|
|
62
62
|
"mobx-react-viewmodel": "^0.2.0",
|
|
63
63
|
"playwright": "^1.55.1",
|
|
64
|
-
"postcss": "^8.5.
|
|
64
|
+
"postcss": "^8.5.10",
|
|
65
65
|
"postcss-nesting": "^13.0.1",
|
|
66
66
|
"prettier": "^3.2.5",
|
|
67
67
|
"react": "^18.2.0",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"tailwindcss": "^3.4.1",
|
|
74
74
|
"tailwindcss-animate": "^1.0.7",
|
|
75
75
|
"typescript": "^5.4.2",
|
|
76
|
-
"vite": "^6.4.
|
|
76
|
+
"vite": "^6.4.2",
|
|
77
77
|
"vite-plugin-checker": "^0.9.3",
|
|
78
78
|
"vite-plugin-sri3": "^1.3.0",
|
|
79
79
|
"vite-plugin-svg-icons-ng": "^1.4.0",
|