@bigcommerce/checkout-sdk 1.618.4 → 1.618.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,351 @@
1
+ import { PaymentErrorData } from '@bigcommerce/checkout-sdk/payment-integration-api';
2
+ import { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';
3
+ import { Response } from '@bigcommerce/request-sender';
4
+
5
+ declare class DetachmentObserver {
6
+ private _mutationObserver;
7
+ constructor(_mutationObserver: MutationObserverFactory);
8
+ ensurePresence<T>(targets: Node[], promise: Promise<T>): Promise<T>;
9
+ }
10
+
11
+ declare interface HostedCardFieldOptions {
12
+ accessibilityLabel?: string;
13
+ containerId: string;
14
+ placeholder?: string;
15
+ }
16
+
17
+ declare interface HostedCardFieldOptionsMap {
18
+ [HostedFieldType.CardCode]?: HostedCardFieldOptions;
19
+ [HostedFieldType.CardExpiry]: HostedCardFieldOptions;
20
+ [HostedFieldType.CardName]: HostedCardFieldOptions;
21
+ [HostedFieldType.CardNumber]: HostedCardFieldOptions;
22
+ }
23
+
24
+ declare class HostedField {
25
+ private _type;
26
+ private _containerId;
27
+ private _placeholder;
28
+ private _accessibilityLabel;
29
+ private _styles;
30
+ private _eventPoster;
31
+ private _eventListener;
32
+ private _detachmentObserver;
33
+ private _iframe;
34
+ constructor(_type: HostedFieldType, _containerId: string, _placeholder: string, _accessibilityLabel: string, _styles: HostedFieldStylesMap, _eventPoster: IframeEventPoster<HostedFieldEvent>, _eventListener: IframeEventListener<HostedInputEventMap>, _detachmentObserver: DetachmentObserver);
35
+ getType(): HostedFieldType;
36
+ attach(): Promise<void>;
37
+ detach(): void;
38
+ submitForm(fields: HostedFieldType[], data: HostedFormOrderData): Promise<HostedInputSubmitSuccessEvent>;
39
+ validateForm(): Promise<void>;
40
+ private _getFontUrls;
41
+ private _isSubmitErrorEvent;
42
+ }
43
+
44
+ declare interface HostedFieldAttachEvent {
45
+ type: HostedFieldEventType.AttachRequested;
46
+ payload: {
47
+ accessibilityLabel?: string;
48
+ fontUrls?: string[];
49
+ placeholder?: string;
50
+ styles?: HostedFieldStylesMap;
51
+ origin?: string;
52
+ type: HostedFieldType;
53
+ };
54
+ }
55
+
56
+ declare type HostedFieldBlurEventData = HostedInputBlurEvent['payload'];
57
+
58
+ declare type HostedFieldCardTypeChangeEventData = HostedInputCardTypeChangeEvent['payload'];
59
+
60
+ declare type HostedFieldEnterEventData = HostedInputEnterEvent['payload'];
61
+
62
+ declare type HostedFieldEvent = HostedFieldAttachEvent | HostedFieldSubmitRequestEvent | HostedFieldValidateRequestEvent;
63
+
64
+ declare enum HostedFieldEventType {
65
+ AttachRequested = "HOSTED_FIELD:ATTACH_REQUESTED",
66
+ SubmitRequested = "HOSTED_FIELD:SUBMITTED_REQUESTED",
67
+ ValidateRequested = "HOSTED_FIELD:VALIDATE_REQUESTED"
68
+ }
69
+
70
+ declare type HostedFieldFocusEventData = HostedInputFocusEvent['payload'];
71
+
72
+ declare type HostedFieldStyles = HostedInputStyles;
73
+
74
+ declare interface HostedFieldStylesMap {
75
+ default?: HostedFieldStyles;
76
+ error?: HostedFieldStyles;
77
+ focus?: HostedFieldStyles;
78
+ }
79
+
80
+ declare interface HostedFieldSubmitRequestEvent {
81
+ type: HostedFieldEventType.SubmitRequested;
82
+ payload: {
83
+ data: HostedFormOrderData;
84
+ fields: HostedFieldType[];
85
+ };
86
+ }
87
+
88
+ declare enum HostedFieldType {
89
+ CardCode = "cardCode",
90
+ CardExpiry = "cardExpiry",
91
+ CardName = "cardName",
92
+ CardNumber = "cardNumber"
93
+ }
94
+
95
+ declare type HostedFieldValidateEventData = HostedInputValidateEvent['payload'];
96
+
97
+ declare interface HostedFieldValidateRequestEvent {
98
+ type: HostedFieldEventType.ValidateRequested;
99
+ }
100
+
101
+ declare class HostedForm implements HostedFormInterface {
102
+ private _fields;
103
+ private _eventListener;
104
+ private _eventCallbacks;
105
+ private _bin?;
106
+ private _cardType?;
107
+ constructor(_fields: HostedField[], _eventListener: IframeEventListener<HostedInputEventMap>, _eventCallbacks: HostedFormEventCallbacks);
108
+ getBin(): string | undefined;
109
+ getCardType(): string | undefined;
110
+ attach(): Promise<void>;
111
+ detach(): void;
112
+ validate(): Promise<void>;
113
+ private _getFirstField;
114
+ private _handleEnter;
115
+ }
116
+
117
+ declare interface HostedFormErrorData {
118
+ isEmpty: boolean;
119
+ isPotentiallyValid: boolean;
120
+ isValid: boolean;
121
+ }
122
+
123
+ declare type HostedFormErrorDataKeys = 'number' | 'expirationDate' | 'expirationMonth' | 'expirationYear' | 'cvv' | 'postalCode';
124
+
125
+ declare type HostedFormErrorsData = Partial<Record<HostedFormErrorDataKeys, HostedFormErrorData>>;
126
+
127
+ declare type HostedFormEventCallbacks = Pick<HostedFormOptions, 'onBlur' | 'onCardTypeChange' | 'onFocus' | 'onEnter' | 'onValidate'>;
128
+
129
+ declare class HostedFormFactory {
130
+ create(host: string, options: HostedFormOptions): HostedForm;
131
+ }
132
+
133
+ declare interface HostedFormInterface {
134
+ attach(): Promise<void>;
135
+ detach(): void;
136
+ getBin(): string | undefined;
137
+ validate(): Promise<void>;
138
+ getCardType(): string | undefined;
139
+ }
140
+
141
+ declare interface HostedFormOptions {
142
+ fields: HostedCardFieldOptionsMap;
143
+ styles?: HostedFieldStylesMap;
144
+ onBlur?(data: HostedFieldBlurEventData): void;
145
+ onCardTypeChange?(data: HostedFieldCardTypeChangeEventData): void;
146
+ onEnter?(data: HostedFieldEnterEventData): void;
147
+ onFocus?(data: HostedFieldFocusEventData): void;
148
+ onValidate?(data: HostedFieldValidateEventData): void;
149
+ }
150
+
151
+ declare interface HostedFormOrderData {
152
+ authToken: string;
153
+ }
154
+
155
+ declare class HostedFormService {
156
+ protected _host: string;
157
+ protected _hostedFormFactory: HostedFormFactory;
158
+ protected _hostedForm?: HostedForm;
159
+ constructor(_host: string, _hostedFormFactory: HostedFormFactory);
160
+ initialize(options: HostedFormOptions): Promise<void>;
161
+ deinitialize(): void;
162
+ }
163
+
164
+ declare interface HostedInputAttachErrorEvent {
165
+ type: HostedInputEventType.AttachFailed;
166
+ payload: {
167
+ error: HostedInputInitializeErrorData;
168
+ };
169
+ }
170
+
171
+ declare interface HostedInputAttachSuccessEvent {
172
+ type: HostedInputEventType.AttachSucceeded;
173
+ }
174
+
175
+ declare interface HostedInputBinChangeEvent {
176
+ type: HostedInputEventType.BinChanged;
177
+ payload: {
178
+ bin?: string;
179
+ };
180
+ }
181
+
182
+ declare interface HostedInputBlurEvent {
183
+ type: HostedInputEventType.Blurred;
184
+ payload: {
185
+ fieldType: HostedFieldType;
186
+ errors?: HostedFormErrorsData;
187
+ };
188
+ }
189
+
190
+ declare interface HostedInputCardTypeChangeEvent {
191
+ type: HostedInputEventType.CardTypeChanged;
192
+ payload: {
193
+ cardType?: string;
194
+ };
195
+ }
196
+
197
+ declare interface HostedInputChangeEvent {
198
+ type: HostedInputEventType.Changed;
199
+ payload: {
200
+ fieldType: HostedFieldType;
201
+ };
202
+ }
203
+
204
+ declare interface HostedInputEnterEvent {
205
+ type: HostedInputEventType.Entered;
206
+ payload: {
207
+ fieldType: HostedFieldType;
208
+ };
209
+ }
210
+
211
+ declare interface HostedInputEventMap {
212
+ [HostedInputEventType.AttachSucceeded]: HostedInputAttachSuccessEvent;
213
+ [HostedInputEventType.AttachFailed]: HostedInputAttachErrorEvent;
214
+ [HostedInputEventType.BinChanged]: HostedInputBinChangeEvent;
215
+ [HostedInputEventType.Blurred]: HostedInputBlurEvent;
216
+ [HostedInputEventType.Changed]: HostedInputChangeEvent;
217
+ [HostedInputEventType.CardTypeChanged]: HostedInputCardTypeChangeEvent;
218
+ [HostedInputEventType.Entered]: HostedInputEnterEvent;
219
+ [HostedInputEventType.Focused]: HostedInputFocusEvent;
220
+ [HostedInputEventType.SubmitSucceeded]: HostedInputSubmitSuccessEvent;
221
+ [HostedInputEventType.SubmitFailed]: HostedInputSubmitErrorEvent;
222
+ [HostedInputEventType.Validated]: HostedInputValidateEvent;
223
+ }
224
+
225
+ declare enum HostedInputEventType {
226
+ AttachSucceeded = "HOSTED_INPUT:ATTACH_SUCCEEDED",
227
+ AttachFailed = "HOSTED_INPUT:ATTACH_FAILED",
228
+ BinChanged = "HOSTED_INPUT:BIN_CHANGED",
229
+ Blurred = "HOSTED_INPUT:BLURRED",
230
+ Changed = "HOSTED_INPUT:CHANGED",
231
+ CardTypeChanged = "HOSTED_INPUT:CARD_TYPE_CHANGED",
232
+ Entered = "HOSTED_INPUT:ENTERED",
233
+ Focused = "HOSTED_INPUT:FOCUSED",
234
+ SubmitSucceeded = "HOSTED_INPUT:SUBMIT_SUCCEEDED",
235
+ SubmitFailed = "HOSTED_INPUT:SUBMIT_FAILED",
236
+ Validated = "HOSTED_INPUT:VALIDATED"
237
+ }
238
+
239
+ declare interface HostedInputFocusEvent {
240
+ type: HostedInputEventType.Focused;
241
+ payload: {
242
+ fieldType: HostedFieldType;
243
+ };
244
+ }
245
+
246
+ declare interface HostedInputInitializeErrorData {
247
+ message: string;
248
+ redirectUrl: string;
249
+ }
250
+
251
+ declare type HostedInputStyles = Partial<Pick<CSSStyleDeclaration, 'color' | 'fontFamily' | 'fontSize' | 'fontWeight'>>;
252
+
253
+ declare interface HostedInputSubmitErrorEvent {
254
+ type: HostedInputEventType.SubmitFailed;
255
+ payload: {
256
+ error: PaymentErrorData;
257
+ response?: Response<PaymentErrorResponseBody>;
258
+ };
259
+ }
260
+
261
+ declare interface HostedInputSubmitSuccessEvent {
262
+ type: HostedInputEventType.SubmitSucceeded;
263
+ payload: {
264
+ response: Response<unknown>;
265
+ };
266
+ }
267
+
268
+ declare interface HostedInputValidateErrorData {
269
+ fieldType: string;
270
+ message: string;
271
+ type: string;
272
+ }
273
+
274
+ declare interface HostedInputValidateErrorDataMap {
275
+ [HostedFieldType.CardCode]?: HostedInputValidateErrorData[];
276
+ [HostedFieldType.CardExpiry]?: HostedInputValidateErrorData[];
277
+ [HostedFieldType.CardName]?: HostedInputValidateErrorData[];
278
+ [HostedFieldType.CardNumber]?: HostedInputValidateErrorData[];
279
+ }
280
+
281
+ declare interface HostedInputValidateEvent {
282
+ type: HostedInputEventType.Validated;
283
+ payload: HostedInputValidateResults;
284
+ }
285
+
286
+ declare interface HostedInputValidateResults {
287
+ errors: HostedInputValidateErrorDataMap;
288
+ isValid: boolean;
289
+ }
290
+
291
+ declare interface IframeEvent<TType = string, TPayload = any> {
292
+ type: TType;
293
+ payload?: TPayload;
294
+ }
295
+
296
+ declare class IframeEventListener<TEventMap extends IframeEventMap<keyof TEventMap>, TContext = undefined> {
297
+ private _isListening;
298
+ private _listeners;
299
+ private _sourceOrigins;
300
+ constructor(sourceOrigin: string);
301
+ listen(): void;
302
+ stopListen(): void;
303
+ addListener<TType extends keyof TEventMap>(type: TType, listener: (event: TEventMap[TType], context?: TContext) => void): void;
304
+ removeListener<TType extends keyof TEventMap>(type: TType, listener: (event: TEventMap[TType], context?: TContext) => void): void;
305
+ trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void;
306
+ private _handleMessage;
307
+ }
308
+
309
+ declare type IframeEventMap<TType extends string | number | symbol = string> = {
310
+ [key in TType]: IframeEvent<TType>;
311
+ };
312
+
313
+ declare interface IframeEventPostOptions<TSuccessEvent extends IframeEvent, TErrorEvent extends IframeEvent> {
314
+ errorType?: TErrorEvent['type'];
315
+ successType?: TSuccessEvent['type'];
316
+ }
317
+
318
+ declare class IframeEventPoster<TEvent, TContext = undefined> {
319
+ private _targetWindow?;
320
+ private _context?;
321
+ private _targetOrigin;
322
+ constructor(targetOrigin: string, _targetWindow?: Window | undefined, _context?: TContext | undefined);
323
+ post(event: TEvent): void;
324
+ post<TSuccessEvent extends IframeEvent = IframeEvent, TErrorEvent extends IframeEvent = IframeEvent>(event: TEvent, options: IframeEventPostOptions<TSuccessEvent, TErrorEvent>): Promise<TSuccessEvent>;
325
+ setTarget(window: Window): void;
326
+ setContext(context: TContext): void;
327
+ }
328
+
329
+ declare interface MutationObeserverCreator {
330
+ prototype: MutationObserver;
331
+ new (callback: MutationCallback): MutationObserver;
332
+ }
333
+
334
+ declare class MutationObserverFactory {
335
+ private _window;
336
+ constructor(_window?: MutationObserverWindow);
337
+ create(callback: MutationCallback): MutationObserver;
338
+ }
339
+
340
+ declare interface MutationObserverWindow extends Window {
341
+ MutationObserver: MutationObeserverCreator;
342
+ }
343
+
344
+ /**
345
+ * Creates an instance of `HostedFormService`.
346
+ *
347
+ *
348
+ * @param host - Host url string parameter.
349
+ * @returns An instance of `HostedFormService`.
350
+ */
351
+ export declare function createHostedFormService(host: string): HostedFormService;
@@ -0,0 +1,2 @@
1
+ (()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{createHostedFormService:()=>A});const r=require("tslib"),n=require("lodash"),i=function(e){var t=this,r=new Promise((function(e,r){t.cancel=r}));this.promise=Promise.race([e,r])},o=function(e){function t(t){var r,n,i=this.constructor,o=e.call(this,t||"An unexpected error has occurred.")||this;return o.name="StandardError",o.type="standard",r=o,n=i.prototype,Object.setPrototypeOf?Object.setPrototypeOf(r,n):r.__proto__=n,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(o,i):o.stack=new Error(o.message).stack,o}return(0,r.__extends)(t,e),t}(Error),s=function(e){function t(t){var r=e.call(this,t||"Unable to proceed because the required element is unexpectedly detached from the page.")||this;return r.name="UnexpectedDetachmentError",r.type="unexpected_detachment",r}return(0,r.__extends)(t,e),t}(o),a=function(){function e(e){this._mutationObserver=e}return e.prototype.ensurePresence=function(e,t){return(0,r.__awaiter)(this,void 0,void 0,(function(){var n,o,a,c;return(0,r.__generator)(this,(function(r){switch(r.label){case 0:n=new i(t),(o=this._mutationObserver.create((function(t){t.forEach((function(t){0!==Array.from(t.removedNodes).filter((function(t){return e.some((function(e){return t===e||t.contains(e)}))})).length&&n.cancel(new s)}))}))).observe(document.body,{childList:!0,subtree:!0}),r.label=1;case 1:return r.trys.push([1,3,,4]),[4,n.promise];case 2:return a=r.sent(),o.disconnect(),[2,a];case 3:throw c=r.sent(),o.disconnect(),c;case 4:return[2]}}))}))},e}();var c=function(){function e(e){void 0===e&&(e=window),this._window=e}return e.prototype.create=function(e){return new this._window.MutationObserver(e)},e}();const u=require("rxjs"),d=require("rxjs/operators"),h=function(e){function t(t){var r=e.call(this,t||"Invalid arguments have been provided.")||this;return r.name="InvalidArgumentError",r.type="invalid_argument",r}return(0,r.__extends)(t,e),t}(o);function p(e){if(!/^(https?:)?\/\//.test(e))throw new h("The provided URL must be absolute.");var t=document.createElement("a");t.href=e;var r=t.port&&-1!==e.indexOf(t.hostname+":"+t.port)?t.port:"";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:t.protocol+"//"+t.hostname+(r?":"+r:""),pathname:t.pathname,port:r,protocol:t.protocol,search:t.search}}function f(e,t){return e.type===t}const l=function(){function e(e,t,r){this._targetWindow=t,this._context=r,this._targetOrigin="*"===e?"*":p(e).origin}return e.prototype.post=function(e,t){var n=this,i=this._targetWindow;if(window!==i){if(!i)throw new Error("Unable to post message because target window is not set.");var o=t&&(0,u.fromEvent)(window,"message").pipe((0,d.filter)((function(e){return e.origin===n._targetOrigin&&f(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)})),(0,d.map)((function(e){if(t.errorType===e.data.type)throw e.data;return e.data})),(0,d.take)(1)).toPromise();return i.postMessage((0,r.__assign)((0,r.__assign)({},e),{context:this._context}),this._targetOrigin),o}},e.prototype.setTarget=function(e){this._targetWindow=e},e.prototype.setContext=function(e){this._context=e},e}(),_=function(e,t,n){return t&&n?v(0,t,n):function(e){var t=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return(0,r.__extends)(t,e),t}(e);return Object.getOwnPropertyNames(e.prototype).forEach((function(r){var n=Object.getOwnPropertyDescriptor(e.prototype,r);n&&"constructor"!==r&&Object.defineProperty(t.prototype,r,v(e.prototype,r,n))})),t}(e)};function v(e,t,n){if("function"!=typeof n.value)return n;var i=n.value;return{get:function(){var e=i.bind(this);return Object.defineProperty(this,t,(0,r.__assign)((0,r.__assign)({},n),{value:e})),e},set:function(e){i=e}}}const y=function(){function e(e){var t;this._sourceOrigins=[p(e).origin,(t=p(e),p(0===t.hostname.indexOf("www")?t.href:t.href.replace(t.hostname,"www."+t.hostname))).origin],this._isListening=!1,this._listeners={}}return e.prototype.listen=function(){this._isListening||(this._isListening=!0,window.addEventListener("message",this._handleMessage))},e.prototype.stopListen=function(){this._isListening&&(this._isListening=!1,window.removeEventListener("message",this._handleMessage))},e.prototype.addListener=function(e,t){var r=this._listeners[e];r||(this._listeners[e]=r=[]),-1===r.indexOf(t)&&r.push(t)},e.prototype.removeListener=function(e,t){var r=this._listeners[e];if(r){var n=r.indexOf(t);n>=0&&r.splice(n,1)}},e.prototype.trigger=function(e,t){var r=this._listeners[e.type];r&&r.forEach((function(r){return t?r(e,t):r(e)}))},e.prototype._handleMessage=function(e){if(-1!==this._sourceOrigins.indexOf(e.origin)&&f(e.data,e.data.type)){var t=e.data,n=t.context,i=(0,r.__rest)(t,["context"]);this.trigger(i,n)}},(0,r.__decorate)([_],e.prototype,"_handleMessage",null),e}();var m={body:{},headers:{},status:0};const g=function(e){function t(t,r){var n=void 0===r?{}:r,i=n.message,o=n.errors,s=this,a=t||m,c=a.body,u=a.headers,d=a.status;return(s=e.call(this,i||"An unexpected error has occurred.")||this).name="RequestError",s.type="request",s.body=c,s.headers=u,s.status=d,s.errors=o||[],s}return(0,r.__extends)(t,e),t}(o);function w(e){if(Array.isArray(e))return e.reduce((function(e,t){return t&&t.message?(0,r.__spreadArrays)(e,[t.message]):e}),[]).join(" ")}const E=function(e){function t(t){var r=e.call(this,t||"Unable to proceed due to invalid configuration provided for the hosted payment form.")||this;return r.name="InvalidHostedFormConfigError",r.type="invalid_hosted_form_config",r}return(0,r.__extends)(t,e),t}(o),b=function(e){function t(t){var r=e.call(this,t||"Unable to proceed due to an unknown error with the hosted payment form.")||this;return r.name="InvalidHostedFormError",r.type="invalid_hosted_form",r}return(0,r.__extends)(t,e),t}(o),T=function(e){function t(t){var i=e.call(this,(0,r.__spreadArrays)(["Unable to proceed due to invalid user input values"],(0,n.flatMap)((0,n.values)(t),(function(e){return(0,n.map)(e,(function(e){return e.message}))}))).join(". "))||this;return i.errors=t,i.name="InvalidHostedFormValueError",i.type="invalid_hosted_form_value",i}return(0,r.__extends)(t,e),t}(o);var O,L;!function(e){e.AttachRequested="HOSTED_FIELD:ATTACH_REQUESTED",e.SubmitRequested="HOSTED_FIELD:SUBMITTED_REQUESTED",e.ValidateRequested="HOSTED_FIELD:VALIDATE_REQUESTED"}(O||(O={})),function(e){e.AttachSucceeded="HOSTED_INPUT:ATTACH_SUCCEEDED",e.AttachFailed="HOSTED_INPUT:ATTACH_FAILED",e.BinChanged="HOSTED_INPUT:BIN_CHANGED",e.Blurred="HOSTED_INPUT:BLURRED",e.Changed="HOSTED_INPUT:CHANGED",e.CardTypeChanged="HOSTED_INPUT:CARD_TYPE_CHANGED",e.Entered="HOSTED_INPUT:ENTERED",e.Focused="HOSTED_INPUT:FOCUSED",e.SubmitSucceeded="HOSTED_INPUT:SUBMIT_SUCCEEDED",e.SubmitFailed="HOSTED_INPUT:SUBMIT_FAILED",e.Validated="HOSTED_INPUT:VALIDATED"}(L||(L={}));const S=function(){function e(e,t,r,n,i,o,s,a){this._type=e,this._containerId=t,this._placeholder=r,this._accessibilityLabel=n,this._styles=i,this._eventPoster=o,this._eventListener=s,this._detachmentObserver=a,this._iframe=document.createElement("iframe"),this._iframe.src="/checkout/payment/hosted-field?version=1.618.5",this._iframe.style.border="none",this._iframe.style.height="100%",this._iframe.style.overflow="hidden",this._iframe.style.width="100%"}return e.prototype.getType=function(){return this._type},e.prototype.attach=function(){return(0,r.__awaiter)(this,void 0,void 0,(function(){var e,t,n=this;return(0,r.__generator)(this,(function(i){switch(i.label){case 0:if(!(e=document.getElementById(this._containerId)))throw new E("Unable to proceed because the provided container ID is not valid.");return e.appendChild(this._iframe),this._eventListener.listen(),t=(0,u.fromEvent)(this._iframe,"load").pipe((0,d.switchMap)((function(e){var t=e.target;return(0,r.__awaiter)(n,void 0,void 0,(function(){var e;return(0,r.__generator)(this,(function(r){switch(r.label){case 0:if(!(e=t&&t.contentWindow))throw new Error("The content window of the iframe cannot be accessed.");return this._eventPoster.setTarget(e),[4,this._eventPoster.post({type:O.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:L.AttachSucceeded,errorType:L.AttachFailed})];case 1:return r.sent(),[2]}}))}))})),(0,d.take)(1)).toPromise(),[4,this._detachmentObserver.ensurePresence([this._iframe],t)];case 1:return i.sent(),[2]}}))}))},e.prototype.detach=function(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())},e.prototype.submitForm=function(e,t){return(0,r.__awaiter)(this,void 0,void 0,(function(){var n,i;return(0,r.__generator)(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),n=this._eventPoster.post({type:O.SubmitRequested,payload:{fields:e,data:t}},{successType:L.SubmitSucceeded,errorType:L.SubmitFailed}),[4,this._detachmentObserver.ensurePresence([this._iframe],n)];case 1:return[2,r.sent()];case 2:if(i=r.sent(),this._isSubmitErrorEvent(i)){if("hosted_form_error"===i.payload.error.code)throw new b(i.payload.error.message);if(i.payload.response)throw function(e,t){var r=e.body.errors,n=void 0===r?[]:r;return new g(e,{message:w(n)||void 0,errors:n})}(i.payload.response);throw new Error(i.payload.error.message)}throw i;case 3:return[2]}}))}))},e.prototype.validateForm=function(){return(0,r.__awaiter)(this,void 0,void 0,(function(){var e,t;return(0,r.__generator)(this,(function(r){switch(r.label){case 0:return e=this._eventPoster.post({type:O.ValidateRequested},{successType:L.Validated}),[4,this._detachmentObserver.ensurePresence([this._iframe],e)];case 1:if(!(t=r.sent().payload).isValid)throw new T(t.errors);return[2]}}))}))},e.prototype._getFontUrls=function(){var e=this,t="fonts.googleapis.com",r=document.querySelectorAll("link[href*='"+t+"'][rel='stylesheet']");return Array.prototype.slice.call(r).filter((function(e){return p(e.href).hostname===t})).filter((function(t){return(0,n.values)(e._styles).map((function(e){return e&&e.fontFamily})).filter((function(e){return"string"==typeof e})).some((function(e){return e.split(/,\s/).some((function(e){return-1!==t.href.indexOf(e.replace(" ","+"))}))}))})).map((function(e){return e.href}))},e.prototype._isSubmitErrorEvent=function(e){return e.type===L.SubmitFailed},e}(),D=function(){function e(e,t,i){var o=this;this._fields=e,this._eventListener=t,this._eventCallbacks=i,this._handleEnter=function(e){var t=e.payload;return(0,r.__awaiter)(o,void 0,void 0,(function(){var e,i;return(0,r.__generator)(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this.validate()];case 1:return r.sent(),[3,3];case 2:if("InvalidHostedFormValueError"!==(e=r.sent()).name)throw e;return[3,3];case 3:return(void 0===(i=this._eventCallbacks.onEnter)?n.noop:i)(t),[2]}}))}))};var s=this._eventCallbacks,a=s.onBlur,c=void 0===a?n.noop:a,u=s.onCardTypeChange,d=void 0===u?n.noop:u,h=s.onFocus,p=void 0===h?n.noop:h,f=s.onValidate,l=void 0===f?n.noop:f;this._eventListener.addListener(L.Blurred,(function(e){var t=e.payload;return c(t)})),this._eventListener.addListener(L.CardTypeChanged,(function(e){var t=e.payload;return d(t)})),this._eventListener.addListener(L.Focused,(function(e){var t=e.payload;return p(t)})),this._eventListener.addListener(L.Validated,(function(e){var t=e.payload;return l(t)})),this._eventListener.addListener(L.Entered,this._handleEnter),this._eventListener.addListener(L.CardTypeChanged,(function(e){var t=e.payload;return o._cardType=t.cardType})),this._eventListener.addListener(L.BinChanged,(function(e){var t=e.payload;return o._bin=t.bin}))}return e.prototype.getBin=function(){return this._bin},e.prototype.getCardType=function(){return this._cardType},e.prototype.attach=function(){return(0,r.__awaiter)(this,void 0,void 0,(function(){var e,t;return(0,r.__generator)(this,(function(r){switch(r.label){case 0:return this._eventListener.listen(),e=this._getFirstField(),t=(0,n.without)(this._fields,e),[4,e.attach()];case 1:return r.sent(),[4,Promise.all(t.map((function(e){return e.attach()})))];case 2:return r.sent(),[2]}}))}))},e.prototype.detach=function(){this._eventListener.stopListen(),this._fields.forEach((function(e){e.detach()}))},e.prototype.validate=function(){return(0,r.__awaiter)(this,void 0,void 0,(function(){return(0,r.__generator)(this,(function(e){return[2,this._getFirstField().validateForm()]}))}))},e.prototype._getFirstField=function(){var e=this._fields[0];if(!e)throw new E("Unable to proceed because the payment form has no field defined.");return e},e}(),F=function(){function e(){}return e.prototype.create=function(e,t){var i=Object.keys(t.fields).reduce((function(n,i){var o=t.fields[i];return o?(0,r.__spreadArrays)(n,[new S(i,o.containerId,o.placeholder||"",o.accessibilityLabel||"",t.styles||{},new l(e),new y(e),new a(new c))]):n}),[]);return new D(i,new y(e),(0,n.pick)(t,"onBlur","onEnter","onFocus","onCardTypeChange","onValidate"))},e}(),P=function(){function e(e,t){this._host=e,this._hostedFormFactory=t}return e.prototype.initialize=function(e){var t=this,r=this._hostedFormFactory.create(this._host,e);return r.attach().then((function(){t._hostedForm=r}))},e.prototype.deinitialize=function(){this._hostedForm&&(this._hostedForm.detach(),this._hostedForm=void 0)},e}();function A(e){return new P(e,new F)}module.exports=t})();
2
+ //# sourceMappingURL=hosted-form-v2-iframe-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-form-v2-iframe-host.js","mappings":"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","sources":["webpack://@bigcommerce/checkout-sdk/webpack/bootstrap","webpack://@bigcommerce/checkout-sdk/webpack/runtime/define property getters","webpack://@bigcommerce/checkout-sdk/webpack/runtime/hasOwnProperty shorthand","webpack://@bigcommerce/checkout-sdk/webpack/runtime/make namespace object","webpack://@bigcommerce/checkout-sdk/external commonjs \"tslib\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"lodash\"","webpack://@bigcommerce/checkout-sdk/./packages/payment-integration-api/src/common/cancellable-promise/cancellable-promise.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/errors/standard-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/utility/set-prototype-of.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/dom/errors/unexpected-detachment-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/dom/detachment-observer.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/dom/mutation-observer.ts","webpack://@bigcommerce/checkout-sdk/external commonjs \"rxjs\"","webpack://@bigcommerce/checkout-sdk/external commonjs \"rxjs/operators\"","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/errors/invalid-argument-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/url/parse-url.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/iframe/is-iframe-event.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/iframe/iframe-event-poster.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/utility/bind-decorator.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/iframe/iframe-event-listener.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/url/append-www.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/errors/request-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/common/errors/map-from-payment-error-response.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/errors/invalid-hosted-form-config-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/errors/invalid-hosted-form-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/errors/invalid-hosted-form-value-error.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/hosted-field-events.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/iframe-content/hosted-input-events.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/hosted-field.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/hosted-form.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/hosted-form-factory.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/hosted-form-service.ts","webpack://@bigcommerce/checkout-sdk/./packages/hosted-form-v2/src/create-hosted-form-service.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"tslib\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash\");","export default class CancellablePromise<T> {\n promise: Promise<T>;\n cancel!: (reason?: any) => void;\n\n constructor(promise: Promise<T>) {\n const cancellable = new Promise<T>((_, reject) => {\n this.cancel = reject;\n });\n\n this.promise = Promise.race([promise, cancellable]);\n }\n}\n","import { setPrototypeOf } from '../utility';\n\nimport CustomError from './custom-error';\n\n/**\n * This error type should not be constructed directly. It is a base class for\n * all custom errors thrown in this library.\n */\nexport default abstract class StandardError extends Error implements CustomError {\n name = 'StandardError';\n type = 'standard';\n\n constructor(message?: string) {\n super(message || 'An unexpected error has occurred.');\n\n setPrototypeOf(this, new.target.prototype);\n\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, new.target);\n } else {\n this.stack = new Error(this.message).stack;\n }\n }\n}\n","export default function setPrototypeOf(object: any, prototype: object) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(object, prototype);\n } else {\n object.__proto__ = prototype;\n }\n\n return object;\n}\n","import { StandardError } from '../../errors';\n\nexport default class UnexpectedDetachmentError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed because the required element is unexpectedly detached from the page.',\n );\n\n this.name = 'UnexpectedDetachmentError';\n this.type = 'unexpected_detachment';\n }\n}\n","import { CancellablePromise } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { UnexpectedDetachmentError } from './errors';\nimport { MutationObserverFactory } from './mutation-observer';\n\nexport default class DetachmentObserver {\n constructor(private _mutationObserver: MutationObserverFactory) {}\n\n async ensurePresence<T>(targets: Node[], promise: Promise<T>): Promise<T> {\n const cancellable = new CancellablePromise(promise);\n\n const observer = this._mutationObserver.create((mutationsList) => {\n mutationsList.forEach((mutation) => {\n const removedTargets = Array.from(mutation.removedNodes).filter((node) =>\n targets.some((target) => node === target || node.contains(target)),\n );\n\n if (removedTargets.length === 0) {\n return;\n }\n\n cancellable.cancel(new UnexpectedDetachmentError());\n });\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n try {\n const output = await cancellable.promise;\n\n observer.disconnect();\n\n return output;\n } catch (error) {\n observer.disconnect();\n\n throw error;\n }\n }\n}\n","export interface MutationObeserverCreator {\n prototype: MutationObserver;\n new (callback: MutationCallback): MutationObserver;\n}\n\nexport interface MutationObserverWindow extends Window {\n MutationObserver: MutationObeserverCreator;\n}\n\nexport class MutationObserverFactory {\n constructor(private _window: MutationObserverWindow = window as MutationObserverWindow) {}\n\n create(callback: MutationCallback): MutationObserver {\n return new this._window.MutationObserver(callback);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"rxjs/operators\");","import StandardError from './standard-error';\n\n/**\n * This error should be thrown when a method is unable to proceed because the\n * caller has not provided all the arguments according to their requirements,\n * i.e.: if an argument is missing or it is not the expected data type.\n */\nexport default class InvalidArgumentError extends StandardError {\n constructor(message?: string) {\n super(message || 'Invalid arguments have been provided.');\n\n this.name = 'InvalidArgumentError';\n this.type = 'invalid_argument';\n }\n}\n","import { InvalidArgumentError } from '../errors';\n\nimport Url from './url';\n\nexport default function parseUrl(url: string): Url {\n if (!/^(https?:)?\\/\\//.test(url)) {\n throw new InvalidArgumentError('The provided URL must be absolute.');\n }\n\n // new URL() is not supported in IE11, use anchor tag instead\n const anchor = document.createElement('a');\n\n anchor.href = url;\n\n // IE11 returns 80 or 443 for the port number depending on the URL scheme,\n // even if the port number is not specified in the URL.\n const port =\n anchor.port && url.indexOf(`${anchor.hostname}:${anchor.port}`) !== -1 ? anchor.port : '';\n\n return {\n hash: anchor.hash,\n hostname: anchor.hostname,\n href: anchor.href,\n origin: `${anchor.protocol}//${anchor.hostname}${port ? `:${port}` : ''}`,\n pathname: anchor.pathname,\n port,\n protocol: anchor.protocol,\n search: anchor.search,\n };\n}\n","import IframeEvent from './iframe-event';\n\nexport default function isIframeEvent<TEvent extends IframeEvent<TType>, TType extends string>(\n object: any,\n type: TType,\n): object is TEvent {\n return object.type === type;\n}\n","import { fromEvent } from 'rxjs';\nimport { filter, map, take } from 'rxjs/operators';\n\nimport { parseUrl } from '../url';\n\nimport IframeEvent from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport interface IframeEventPostOptions<\n TSuccessEvent extends IframeEvent,\n TErrorEvent extends IframeEvent,\n> {\n errorType?: TErrorEvent['type'];\n successType?: TSuccessEvent['type'];\n}\n\nexport default class IframeEventPoster<TEvent, TContext = undefined> {\n private _targetOrigin: string;\n\n constructor(targetOrigin: string, private _targetWindow?: Window, private _context?: TContext) {\n this._targetOrigin = targetOrigin === '*' ? '*' : parseUrl(targetOrigin).origin;\n }\n\n post(event: TEvent): void;\n post<\n TSuccessEvent extends IframeEvent = IframeEvent,\n TErrorEvent extends IframeEvent = IframeEvent,\n >(\n event: TEvent,\n options: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n ): Promise<TSuccessEvent>;\n post<\n TSuccessEvent extends IframeEvent = IframeEvent,\n TErrorEvent extends IframeEvent = IframeEvent,\n >(\n event: TEvent,\n options?: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n ): Promise<TSuccessEvent> | void {\n const targetWindow = this._targetWindow;\n\n if (window === targetWindow) {\n return;\n }\n\n if (!targetWindow) {\n throw new Error('Unable to post message because target window is not set.');\n }\n\n const result =\n options &&\n fromEvent<MessageEvent>(window, 'message')\n .pipe(\n filter(\n (event) =>\n event.origin === this._targetOrigin &&\n isIframeEvent(event.data, event.data.type) &&\n [options.successType, options.errorType].indexOf(event.data.type) !==\n -1,\n ),\n map((event) => {\n if (options.errorType === event.data.type) {\n throw event.data;\n }\n\n return event.data;\n }),\n take(1),\n )\n .toPromise();\n\n targetWindow.postMessage({ ...event, context: this._context }, this._targetOrigin);\n\n return result;\n }\n\n setTarget(window: Window) {\n this._targetWindow = window;\n }\n\n setContext(context: TContext) {\n this._context = context;\n }\n}\n","/**\n * Decorates a class or a method by binding all its prototype methods or itself\n * to the calling instance respectively.\n */\nfunction bindDecorator<T extends Method>(\n target: object,\n key: string,\n descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T>;\nfunction bindDecorator<T extends Constructor<object>>(target: T): T;\n\nfunction bindDecorator(target: any, key?: any, descriptor?: any): any {\n if (!key || !descriptor) {\n return bindClassDecorator(target);\n }\n\n return bindMethodDecorator(target, key, descriptor);\n}\n\nexport default bindDecorator;\n\n/**\n * Decorates a class by binding all its prototype methods to the calling\n * instance.\n */\nexport function bindClassDecorator<T extends Constructor<object>>(target: T): T {\n const decoratedTarget = class extends target {};\n\n Object.getOwnPropertyNames(target.prototype).forEach((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);\n\n if (!descriptor || key === 'constructor') {\n return;\n }\n\n Object.defineProperty(\n decoratedTarget.prototype,\n key,\n bindMethodDecorator(target.prototype, key, descriptor),\n );\n });\n\n return decoratedTarget;\n}\n\n/**\n * Decorates a method by binding it to the calling instance.\n */\nexport function bindMethodDecorator<T extends Method>(\n _: object,\n key: string,\n descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T> {\n if (typeof descriptor.value !== 'function') {\n return descriptor;\n }\n\n let method: T = descriptor.value;\n\n return {\n get() {\n const boundMethod = method.bind(this) as T;\n\n Object.defineProperty(this, key, {\n ...descriptor,\n value: boundMethod,\n });\n\n return boundMethod;\n },\n set(value) {\n method = value;\n },\n };\n}\n\nexport type Constructor<T> = new (...args: any[]) => T;\nexport type Method = (...args: any[]) => any;\n","import { appendWww, parseUrl } from '../url';\nimport { bindDecorator as bind } from '../utility';\n\nimport { IframeEventMap } from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport default class IframeEventListener<\n TEventMap extends IframeEventMap<keyof TEventMap>,\n TContext = undefined,\n> {\n private _isListening: boolean;\n private _listeners: EventListeners<TEventMap, TContext>;\n private _sourceOrigins: string[];\n\n constructor(sourceOrigin: string) {\n this._sourceOrigins = [\n parseUrl(sourceOrigin).origin,\n appendWww(parseUrl(sourceOrigin)).origin,\n ];\n this._isListening = false;\n this._listeners = {};\n }\n\n listen(): void {\n if (this._isListening) {\n return;\n }\n\n this._isListening = true;\n\n window.addEventListener('message', this._handleMessage);\n }\n\n stopListen(): void {\n if (!this._isListening) {\n return;\n }\n\n this._isListening = false;\n\n window.removeEventListener('message', this._handleMessage);\n }\n\n addListener<TType extends keyof TEventMap>(\n type: TType,\n listener: (event: TEventMap[TType], context?: TContext) => void,\n ): void {\n let listeners = this._listeners[type];\n\n if (!listeners) {\n this._listeners[type] = listeners = [];\n }\n\n if (listeners.indexOf(listener) === -1) {\n listeners.push(listener);\n }\n }\n\n removeListener<TType extends keyof TEventMap>(\n type: TType,\n listener: (event: TEventMap[TType], context?: TContext) => void,\n ): void {\n const listeners = this._listeners[type];\n\n if (!listeners) {\n return;\n }\n\n const index = listeners.indexOf(listener);\n\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n }\n\n trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void {\n const listeners = this._listeners[event.type];\n\n if (!listeners) {\n return;\n }\n\n listeners.forEach((listener) => (context ? listener(event, context) : listener(event)));\n }\n\n @bind\n private _handleMessage(messageEvent: MessageEvent): void {\n if (\n this._sourceOrigins.indexOf(messageEvent.origin) === -1 ||\n !isIframeEvent(messageEvent.data as TEventMap[keyof TEventMap], messageEvent.data.type)\n ) {\n return;\n }\n\n const { context, ...event } = messageEvent.data;\n\n this.trigger(event, context);\n }\n}\n\ntype EventListeners<TEventMap, TContext = undefined> = {\n [key in keyof TEventMap]?: Array<(event: TEventMap[key], context?: TContext) => void>;\n};\n","import parseUrl from './parse-url';\nimport Url from './url';\n\nexport default function appendWww(url: Url): Url {\n return parseUrl(\n url.hostname.indexOf('www') === 0\n ? url.href\n : url.href.replace(url.hostname, `www.${url.hostname}`),\n );\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport StandardError from './standard-error';\n\nconst DEFAULT_RESPONSE = {\n body: {},\n headers: {},\n status: 0,\n};\n\n/**\n * Throw this error if we are unable to make a request to the server. It wraps\n * any server response into a JS error object.\n */\nexport default class RequestError<TBody = any> extends StandardError {\n body: TBody | {};\n headers: { [key: string]: any };\n errors: Array<{ code: string; message?: string }>;\n status: number;\n\n constructor(\n response?: Response<TBody | {}>,\n {\n message,\n errors,\n }: {\n message?: string;\n errors?: Array<{ code: string; message?: string }>;\n } = {},\n ) {\n const { body, headers, status } = response || DEFAULT_RESPONSE;\n\n super(message || 'An unexpected error has occurred.');\n\n this.name = 'RequestError';\n this.type = 'request';\n this.body = body;\n this.headers = headers;\n this.status = status;\n this.errors = errors || [];\n }\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromPaymentErrorResponse(\n response: Response<PaymentErrorResponseBody>,\n message?: string,\n): RequestError {\n const { body } = response;\n const { errors = [] } = body;\n\n return new RequestError(response, {\n message: joinErrors(errors) || message,\n errors,\n });\n}\n\nfunction joinErrors(errors: Array<{ code: string; message?: string }>): string | undefined {\n if (!Array.isArray(errors)) {\n return;\n }\n\n return errors\n .reduce((result: string[], error) => {\n if (error && error.message) {\n return [...result, error.message];\n }\n\n return result;\n }, [])\n .join(' ');\n}\n","import { StandardError } from '../common/errors';\n\nexport default class InvalidHostedFormConfigError extends StandardError {\n constructor(message?: string) {\n super(\n message ||\n 'Unable to proceed due to invalid configuration provided for the hosted payment form.',\n );\n\n this.name = 'InvalidHostedFormConfigError';\n this.type = 'invalid_hosted_form_config';\n }\n}\n","import { StandardError } from '../common/errors';\n\nexport default class InvalidHostedFormError extends StandardError {\n constructor(message?: string) {\n super(message || 'Unable to proceed due to an unknown error with the hosted payment form.');\n\n this.name = 'InvalidHostedFormError';\n this.type = 'invalid_hosted_form';\n }\n}\n","import { flatMap, map, values } from 'lodash';\n\nimport { StandardError } from '../common/errors';\nimport { HostedInputValidateErrorDataMap } from '../iframe-content';\n\nexport default class InvalidHostedFormValueError extends StandardError {\n constructor(public errors: HostedInputValidateErrorDataMap) {\n super(\n [\n 'Unable to proceed due to invalid user input values',\n ...flatMap(values(errors), (fieldErrors) =>\n map(fieldErrors, ({ message }) => message),\n ),\n ].join('. '),\n );\n\n this.name = 'InvalidHostedFormValueError';\n this.type = 'invalid_hosted_form_value';\n }\n}\n","import HostedFieldType from './hosted-field-type';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\n\nexport enum HostedFieldEventType {\n AttachRequested = 'HOSTED_FIELD:ATTACH_REQUESTED',\n SubmitRequested = 'HOSTED_FIELD:SUBMITTED_REQUESTED',\n ValidateRequested = 'HOSTED_FIELD:VALIDATE_REQUESTED',\n}\n\nexport interface HostedFieldEventMap {\n [HostedFieldEventType.AttachRequested]: HostedFieldAttachEvent;\n [HostedFieldEventType.SubmitRequested]: HostedFieldSubmitRequestEvent;\n [HostedFieldEventType.ValidateRequested]: HostedFieldValidateRequestEvent;\n}\n\nexport type HostedFieldEvent =\n | HostedFieldAttachEvent\n | HostedFieldSubmitRequestEvent\n | HostedFieldValidateRequestEvent;\n\nexport interface HostedFieldAttachEvent {\n type: HostedFieldEventType.AttachRequested;\n payload: {\n accessibilityLabel?: string;\n fontUrls?: string[];\n placeholder?: string;\n styles?: HostedFieldStylesMap;\n origin?: string;\n type: HostedFieldType;\n };\n}\n\nexport interface HostedFieldSubmitRequestEvent {\n type: HostedFieldEventType.SubmitRequested;\n payload: {\n data: HostedFormOrderData;\n fields: HostedFieldType[];\n };\n}\n\nexport interface HostedFieldValidateRequestEvent {\n type: HostedFieldEventType.ValidateRequested;\n}\n","import { Response } from '@bigcommerce/request-sender';\n\nimport {\n PaymentErrorData,\n PaymentErrorResponseBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport HostedFieldType from '../hosted-field-type';\nimport { HostedFormErrorsData } from '../hosted-form-options';\n\nimport HostedInputInitializeErrorData from './hosted-input-initialize-error-data';\nimport HostedInputValidateResults from './hosted-input-validate-results';\n\n// Event types\nexport enum HostedInputEventType {\n AttachSucceeded = 'HOSTED_INPUT:ATTACH_SUCCEEDED',\n AttachFailed = 'HOSTED_INPUT:ATTACH_FAILED',\n BinChanged = 'HOSTED_INPUT:BIN_CHANGED',\n Blurred = 'HOSTED_INPUT:BLURRED',\n Changed = 'HOSTED_INPUT:CHANGED',\n CardTypeChanged = 'HOSTED_INPUT:CARD_TYPE_CHANGED',\n Entered = 'HOSTED_INPUT:ENTERED',\n Focused = 'HOSTED_INPUT:FOCUSED',\n SubmitSucceeded = 'HOSTED_INPUT:SUBMIT_SUCCEEDED',\n SubmitFailed = 'HOSTED_INPUT:SUBMIT_FAILED',\n Validated = 'HOSTED_INPUT:VALIDATED',\n}\n\n// Event mapping\nexport interface HostedInputEventMap {\n [HostedInputEventType.AttachSucceeded]: HostedInputAttachSuccessEvent;\n [HostedInputEventType.AttachFailed]: HostedInputAttachErrorEvent;\n [HostedInputEventType.BinChanged]: HostedInputBinChangeEvent;\n [HostedInputEventType.Blurred]: HostedInputBlurEvent;\n [HostedInputEventType.Changed]: HostedInputChangeEvent;\n [HostedInputEventType.CardTypeChanged]: HostedInputCardTypeChangeEvent;\n [HostedInputEventType.Entered]: HostedInputEnterEvent;\n [HostedInputEventType.Focused]: HostedInputFocusEvent;\n [HostedInputEventType.SubmitSucceeded]: HostedInputSubmitSuccessEvent;\n [HostedInputEventType.SubmitFailed]: HostedInputSubmitErrorEvent;\n [HostedInputEventType.Validated]: HostedInputValidateEvent;\n}\n\n// Events\nexport type HostedInputEvent =\n | HostedInputAttachSuccessEvent\n | HostedInputAttachErrorEvent\n | HostedInputBinChangeEvent\n | HostedInputBlurEvent\n | HostedInputChangeEvent\n | HostedInputCardTypeChangeEvent\n | HostedInputEnterEvent\n | HostedInputFocusEvent\n | HostedInputSubmitSuccessEvent\n | HostedInputSubmitErrorEvent\n | HostedInputValidateEvent;\n\nexport interface HostedInputAttachSuccessEvent {\n type: HostedInputEventType.AttachSucceeded;\n}\n\nexport interface HostedInputAttachErrorEvent {\n type: HostedInputEventType.AttachFailed;\n payload: {\n error: HostedInputInitializeErrorData;\n };\n}\n\nexport interface HostedInputBinChangeEvent {\n type: HostedInputEventType.BinChanged;\n payload: {\n bin?: string;\n };\n}\n\nexport interface HostedInputBlurEvent {\n type: HostedInputEventType.Blurred;\n payload: {\n fieldType: HostedFieldType;\n errors?: HostedFormErrorsData;\n };\n}\n\nexport interface HostedInputChangeEvent {\n type: HostedInputEventType.Changed;\n payload: {\n fieldType: HostedFieldType;\n };\n}\n\nexport interface HostedInputCardTypeChangeEvent {\n type: HostedInputEventType.CardTypeChanged;\n payload: {\n cardType?: string;\n };\n}\n\nexport interface HostedInputFocusEvent {\n type: HostedInputEventType.Focused;\n payload: {\n fieldType: HostedFieldType;\n };\n}\n\nexport interface HostedInputEnterEvent {\n type: HostedInputEventType.Entered;\n payload: {\n fieldType: HostedFieldType;\n };\n}\n\nexport interface HostedInputSubmitSuccessEvent {\n type: HostedInputEventType.SubmitSucceeded;\n payload: {\n response: Response<unknown>;\n };\n}\n\nexport interface HostedInputSubmitErrorEvent {\n type: HostedInputEventType.SubmitFailed;\n payload: {\n error: PaymentErrorData;\n response?: Response<PaymentErrorResponseBody>;\n };\n}\n\nexport interface HostedInputValidateEvent {\n type: HostedInputEventType.Validated;\n payload: HostedInputValidateResults;\n}\n","import { values } from 'lodash';\nimport { fromEvent } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\n\nimport { DetachmentObserver } from './common/dom';\nimport { mapFromPaymentErrorResponse } from './common/errors';\nimport { IframeEventListener, IframeEventPoster } from './common/iframe';\nimport { parseUrl } from './common/url';\nimport {\n InvalidHostedFormConfigError,\n InvalidHostedFormError,\n InvalidHostedFormValueError,\n} from './errors';\nimport { HostedFieldEvent, HostedFieldEventType } from './hosted-field-events';\nimport HostedFieldType from './hosted-field-type';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\nimport {\n HostedInputEventMap,\n HostedInputEventType,\n HostedInputSubmitErrorEvent,\n HostedInputSubmitSuccessEvent,\n HostedInputValidateEvent,\n} from './iframe-content';\n\nexport const RETRY_INTERVAL = 60 * 1000;\nexport const LAST_RETRY_KEY = 'lastRetry';\n\nexport default class HostedField {\n private _iframe: HTMLIFrameElement;\n\n constructor(\n private _type: HostedFieldType,\n private _containerId: string,\n private _placeholder: string,\n private _accessibilityLabel: string,\n private _styles: HostedFieldStylesMap,\n private _eventPoster: IframeEventPoster<HostedFieldEvent>,\n private _eventListener: IframeEventListener<HostedInputEventMap>,\n private _detachmentObserver: DetachmentObserver,\n ) {\n this._iframe = document.createElement('iframe');\n\n this._iframe.src = `/checkout/payment/hosted-field?version=${LIBRARY_VERSION}`;\n this._iframe.style.border = 'none';\n this._iframe.style.height = '100%';\n this._iframe.style.overflow = 'hidden';\n this._iframe.style.width = '100%';\n }\n\n getType(): HostedFieldType {\n return this._type;\n }\n\n async attach(): Promise<void> {\n const container = document.getElementById(this._containerId);\n\n if (!container) {\n throw new InvalidHostedFormConfigError(\n 'Unable to proceed because the provided container ID is not valid.',\n );\n }\n\n container.appendChild(this._iframe);\n this._eventListener.listen();\n\n const promise = fromEvent(this._iframe, 'load')\n .pipe(\n switchMap(async ({ target }) => {\n const contentWindow = target && (target as HTMLIFrameElement).contentWindow;\n\n if (!contentWindow) {\n throw new Error('The content window of the iframe cannot be accessed.');\n }\n\n this._eventPoster.setTarget(contentWindow);\n\n await this._eventPoster.post(\n {\n type: HostedFieldEventType.AttachRequested,\n payload: {\n accessibilityLabel: this._accessibilityLabel,\n fontUrls: this._getFontUrls(),\n placeholder: this._placeholder,\n styles: this._styles,\n origin: document.location.origin,\n type: this._type,\n },\n },\n {\n successType: HostedInputEventType.AttachSucceeded,\n errorType: HostedInputEventType.AttachFailed,\n },\n );\n }),\n take(1),\n )\n .toPromise();\n\n await this._detachmentObserver.ensurePresence([this._iframe], promise);\n }\n\n detach(): void {\n if (!this._iframe.parentElement) {\n return;\n }\n\n this._iframe.parentElement.removeChild(this._iframe);\n this._eventListener.stopListen();\n }\n\n async submitForm(\n fields: HostedFieldType[],\n data: HostedFormOrderData,\n ): Promise<HostedInputSubmitSuccessEvent> {\n try {\n const promise = this._eventPoster.post<HostedInputSubmitSuccessEvent>(\n {\n type: HostedFieldEventType.SubmitRequested,\n payload: { fields, data },\n },\n {\n successType: HostedInputEventType.SubmitSucceeded,\n errorType: HostedInputEventType.SubmitFailed,\n },\n );\n\n return await this._detachmentObserver.ensurePresence([this._iframe], promise);\n } catch (event) {\n if (this._isSubmitErrorEvent(event)) {\n if (event.payload.error.code === 'hosted_form_error') {\n throw new InvalidHostedFormError(event.payload.error.message);\n }\n\n if (event.payload.response) {\n throw mapFromPaymentErrorResponse(event.payload.response);\n }\n\n throw new Error(event.payload.error.message);\n }\n\n throw event;\n }\n }\n\n async validateForm(): Promise<void> {\n const promise = this._eventPoster.post<HostedInputValidateEvent>(\n {\n type: HostedFieldEventType.ValidateRequested,\n },\n {\n successType: HostedInputEventType.Validated,\n },\n );\n\n const { payload } = await this._detachmentObserver.ensurePresence([this._iframe], promise);\n\n if (!payload.isValid) {\n throw new InvalidHostedFormValueError(payload.errors);\n }\n }\n\n private _getFontUrls(): string[] {\n const hostname = 'fonts.googleapis.com';\n const links = document.querySelectorAll(`link[href*='${hostname}'][rel='stylesheet']`);\n\n return Array.prototype.slice\n .call(links)\n .filter((link) => parseUrl(link.href).hostname === hostname)\n .filter((link) =>\n values(this._styles)\n .map((style) => style && style.fontFamily)\n .filter((family): family is string => typeof family === 'string')\n .some((family) =>\n family\n .split(/,\\s/)\n .some((name) => link.href.indexOf(name.replace(' ', '+')) !== -1),\n ),\n )\n .map((link) => link.href);\n }\n\n private _isSubmitErrorEvent(event: any): event is HostedInputSubmitErrorEvent {\n return event.type === HostedInputEventType.SubmitFailed;\n }\n}\n","import { noop, without } from 'lodash';\n\nimport { IframeEventListener } from './common/iframe';\nimport { InvalidHostedFormConfigError } from './errors';\nimport HostedField from './hosted-field';\nimport HostedFormOptions from './hosted-form-options';\nimport { HostedInputEnterEvent, HostedInputEventMap, HostedInputEventType } from './iframe-content';\n\ntype HostedFormEventCallbacks = Pick<\n HostedFormOptions,\n 'onBlur' | 'onCardTypeChange' | 'onFocus' | 'onEnter' | 'onValidate'\n>;\n\nexport interface HostedFormInterface {\n attach(): Promise<void>;\n detach(): void;\n getBin(): string | undefined;\n validate(): Promise<void>;\n getCardType(): string | undefined;\n}\n\nexport default class HostedForm implements HostedFormInterface {\n private _bin?: string;\n private _cardType?: string;\n\n constructor(\n private _fields: HostedField[],\n private _eventListener: IframeEventListener<HostedInputEventMap>,\n private _eventCallbacks: HostedFormEventCallbacks,\n ) {\n const {\n onBlur = noop,\n onCardTypeChange = noop,\n onFocus = noop,\n onValidate = noop,\n } = this._eventCallbacks;\n\n this._eventListener.addListener(HostedInputEventType.Blurred, ({ payload }) =>\n onBlur(payload),\n );\n this._eventListener.addListener(HostedInputEventType.CardTypeChanged, ({ payload }) =>\n onCardTypeChange(payload),\n );\n this._eventListener.addListener(HostedInputEventType.Focused, ({ payload }) =>\n onFocus(payload),\n );\n this._eventListener.addListener(HostedInputEventType.Validated, ({ payload }) =>\n onValidate(payload),\n );\n this._eventListener.addListener(HostedInputEventType.Entered, this._handleEnter);\n\n this._eventListener.addListener(\n HostedInputEventType.CardTypeChanged,\n ({ payload }) => (this._cardType = payload.cardType),\n );\n this._eventListener.addListener(\n HostedInputEventType.BinChanged,\n ({ payload }) => (this._bin = payload.bin),\n );\n }\n\n getBin(): string | undefined {\n return this._bin;\n }\n\n getCardType(): string | undefined {\n return this._cardType;\n }\n\n async attach(): Promise<void> {\n this._eventListener.listen();\n\n const field = this._getFirstField();\n const otherFields = without(this._fields, field);\n\n await field.attach();\n await Promise.all(otherFields.map((otherField) => otherField.attach()));\n }\n\n detach(): void {\n this._eventListener.stopListen();\n\n this._fields.forEach((field) => {\n field.detach();\n });\n }\n\n // TODO: CHECKOUT-8275 need to add the submit method implementation when implementing submitPayment\n // async submitManualOrderPayment(): Promise<void> {\n // }\n\n async validate(): Promise<void> {\n return this._getFirstField().validateForm();\n }\n\n private _getFirstField(): HostedField {\n const field = this._fields[0];\n\n if (!field) {\n throw new InvalidHostedFormConfigError(\n 'Unable to proceed because the payment form has no field defined.',\n );\n }\n\n return field;\n }\n\n private _handleEnter: (event: HostedInputEnterEvent) => Promise<void> = async ({ payload }) => {\n try {\n await this.validate();\n } catch (error) {\n // Catch form validation error because we want to trigger `onEnter`\n // irrespective of the validation result.\n if (error.name !== 'InvalidHostedFormValueError') {\n throw error;\n }\n }\n\n const { onEnter = noop } = this._eventCallbacks;\n\n onEnter(payload);\n };\n}\n","import { pick } from 'lodash';\n\nimport { DetachmentObserver, MutationObserverFactory } from './common/dom';\nimport { IframeEventListener, IframeEventPoster } from './common/iframe';\nimport HostedField from './hosted-field';\nimport HostedFieldType from './hosted-field-type';\nimport HostedForm from './hosted-form';\nimport HostedFormOptions from './hosted-form-options';\n\nexport default class HostedFormFactory {\n create(host: string, options: HostedFormOptions): HostedForm {\n const fieldTypes = Object.keys(options.fields) as HostedFieldType[];\n const fields = fieldTypes.reduce<HostedField[]>((result, type) => {\n const fields = options.fields;\n const fieldOptions = fields[type];\n\n if (!fieldOptions) {\n return result;\n }\n\n return [\n ...result,\n new HostedField(\n type,\n fieldOptions.containerId,\n fieldOptions.placeholder || '',\n fieldOptions.accessibilityLabel || '',\n options.styles || {},\n new IframeEventPoster(host),\n new IframeEventListener(host),\n new DetachmentObserver(new MutationObserverFactory()),\n ),\n ];\n }, []);\n\n return new HostedForm(\n fields,\n new IframeEventListener(host),\n pick(options, 'onBlur', 'onEnter', 'onFocus', 'onCardTypeChange', 'onValidate'),\n );\n }\n}\n","import HostedForm from './hosted-form';\nimport HostedFormFactory from './hosted-form-factory';\nimport HostedFormOptions from './hosted-form-options';\n\nexport default class HostedFormService {\n protected _hostedForm?: HostedForm;\n constructor(protected _host: string, protected _hostedFormFactory: HostedFormFactory) {}\n\n initialize(options: HostedFormOptions): Promise<void> {\n const form = this._hostedFormFactory.create(this._host, options);\n\n return form.attach().then(() => {\n this._hostedForm = form;\n });\n }\n\n deinitialize() {\n if (this._hostedForm) {\n this._hostedForm.detach();\n this._hostedForm = undefined;\n }\n }\n}\n","import HostedFormFactory from './hosted-form-factory';\nimport HostedFormService from './hosted-form-service';\n\n/**\n * Creates an instance of `HostedFormService`.\n *\n *\n * @param host - Host url string parameter.\n * @returns An instance of `HostedFormService`.\n */\nexport function createHostedFormService(host: string) {\n return new HostedFormService(host, new HostedFormFactory());\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","require","promise","cancellable","Promise","_","reject","cancel","this","race","message","object","name","type","setPrototypeOf","__proto__","Error","captureStackTrace","stack","_mutationObserver","ensurePresence","targets","observer","create","mutationsList","forEach","mutation","Array","from","removedNodes","filter","node","some","target","contains","length","observe","document","body","childList","subtree","output","disconnect","_window","window","callback","MutationObserver","parseUrl","url","test","anchor","createElement","href","port","indexOf","hostname","hash","origin","protocol","pathname","search","isIframeEvent","targetOrigin","_targetWindow","_context","_targetOrigin","post","event","options","targetWindow","result","fromEvent","pipe","data","successType","errorType","map","take","toPromise","postMessage","context","setTarget","setContext","descriptor","bindMethodDecorator","decoratedTarget","getOwnPropertyNames","getOwnPropertyDescriptor","bindClassDecorator","method","boundMethod","bind","set","sourceOrigin","_sourceOrigins","replace","_isListening","_listeners","listen","addEventListener","_handleMessage","stopListen","removeEventListener","addListener","listener","listeners","push","removeListener","index","splice","trigger","messageEvent","DEFAULT_RESPONSE","headers","status","response","errors","joinErrors","isArray","reduce","error","join","flatMap","values","fieldErrors","HostedFieldEventType","HostedInputEventType","_type","_containerId","_placeholder","_accessibilityLabel","_styles","_eventPoster","_eventListener","_detachmentObserver","_iframe","src","style","border","height","overflow","width","getType","attach","container","getElementById","appendChild","switchMap","contentWindow","AttachRequested","payload","accessibilityLabel","fontUrls","_getFontUrls","placeholder","styles","location","AttachSucceeded","AttachFailed","detach","parentElement","removeChild","submitForm","fields","SubmitRequested","SubmitSucceeded","SubmitFailed","_isSubmitErrorEvent","code","mapFromPaymentErrorResponse","validateForm","ValidateRequested","Validated","isValid","links","querySelectorAll","slice","link","fontFamily","family","split","_fields","_eventCallbacks","_handleEnter","validate","noop","onBlur","onCardTypeChange","onFocus","onValidate","Blurred","CardTypeChanged","Focused","Entered","_cardType","cardType","BinChanged","_bin","bin","getBin","getCardType","field","_getFirstField","otherFields","without","all","otherField","host","keys","fieldOptions","containerId","MutationObserverFactory","pick","_host","_hostedFormFactory","initialize","form","then","_hostedForm","deinitialize","undefined","createHostedFormService"],"sourceRoot":""}