{"version":3,"file":"index.cjs","sources":["../node_modules/@paybyrd/logger-js/dist/index.module.js","../src/shared/utils/Stopwatch.ts","../src/shared/utils/Base64Converter.ts","../src/shared/utils/Browser.ts","../src/shared/utils/Delay.ts","../src/shared/utils/HtmlElementFactory.ts","../src/httpClients/retryPolicies/LinearRetryPolicy.ts","../src/services/abstractions/ChallengeWindowSize.ts","../src/httpClients/FetchHttpClient.ts","../src/services/IFrameChallengeService.ts","../src/services/IFrameDirectoryServerService.ts","../src/observer/abstractions/IEvent.ts","../src/services/ThreeDSecureService.ts"],"sourcesContent":["import{v4 as e}from\"uuid\";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},n.apply(this,arguments)}var t;!function(e){e[e.Trace=0]=\"Trace\",e[e.Debug=1]=\"Debug\",e[e.Information=2]=\"Information\",e[e.Warning=3]=\"Warning\",e[e.Error=4]=\"Error\",e[e.Critical=5]=\"Critical\",e[e.None=6]=\"None\"}(t||(t={}));var r=/*#__PURE__*/function(){function e(){}var r=e.prototype;return r.flush=function(){return Promise.resolve()},r.log=function(e){var r,o=n({},e,{error:null==(r=e.error)?void 0:r.toString()});switch(e.level){case t.Trace:return console.trace(o);case t.Debug:return console.debug(o);case t.Warning:return console.warn(o);case t.Error:case t.Critical:return console.error(o);default:return console.log(o)}},e}();function o(e,n,t){if(!e.s){if(t instanceof i){if(!t.s)return void(t.o=o.bind(null,e,n));1&n&&(n=t.s),t=t.v}if(t&&t.then)return void t.then(o.bind(null,e,n),o.bind(null,e,2));e.s=n,e.v=t;const r=e.o;r&&r(e)}}var i=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(n,t){var r=new e,i=this.s;if(i){var s=1&i?n:t;if(s){try{o(r,1,s(this.v))}catch(e){o(r,2,e)}return r}return this}return this.o=function(e){try{var i=e.v;1&e.s?o(r,1,n?n(i):i):t?o(r,1,t(i)):o(r,2,i)}catch(e){o(r,2,e)}},r},e}();function s(e){return e instanceof i&&1&e.s}function l(e,n){try{var t=e()}catch(e){return n(e)}return t&&t.then?t.then(void 0,n):t}var a=/*#__PURE__*/function(){function n(e,t){void 0===t&&(t=new r),this._logger=void 0,this._options=void 0,this._logs=[],this._interval=void 0,this._logger=t,this._options=e,this._interval=setInterval(this.sendBatch.bind(this),1e3*(this._options.batchLogIntervalInSeconds||n.DEFAULT_BATCH_TIMEOUT))}var a=n.prototype;return a.log=function(e){if(this._logger.log(e),this._options.restLoggerUrl)return this._options.minimumLevel&&e.level<this._options.minimumLevel?this._logger.log({message:\"Minimum level not achieved for sending\",content:{log:e,minimumLevel:this._options.minimumLevel},method:\"log\",correlationId:e.correlationId,level:t.Warning}):void this._logs.unshift({executionDate:new Date,log:e});this._logger.log({message:\"RestLoggerUrl is not defined\",content:e,method:\"log\",correlationId:e.correlationId,level:t.Warning})},a.flush=function(r){try{var a=this;return void 0===r&&(r=e()),clearInterval(a._interval),Promise.resolve(function(e,n){try{var c=l(function(){var e=function(e,n,t){for(var r;;){var l=e();if(s(l)&&(l=l.v),!l)return a;if(l.then){r=0;break}var a=t();if(a&&a.then){if(!s(a)){r=1;break}a=a.s}if(n){var c=n();if(c&&c.then&&!s(c)){r=2;break}}}var u=new i,h=o.bind(null,u,2);return(0===r?l.then(v):1===r?a.then(g):c.then(d)).then(void 0,h),u;function g(r){a=r;do{if(n&&(c=n())&&c.then&&!s(c))return void c.then(d).then(void 0,h);if(!(l=e())||s(l)&&!l.v)return void o(u,1,a);if(l.then)return void l.then(v).then(void 0,h);s(a=t())&&(a=a.v)}while(!a||!a.then);a.then(g).then(void 0,h)}function v(e){e?(a=t())&&a.then?a.then(g).then(void 0,h):g(a):o(u,1,a)}function d(){(l=e())?l.then?l.then(v).then(void 0,h):v(l):o(u,1,a)}}(function(){return!!a._logs.length},void 0,function(){return Promise.resolve(a.sendBatch(r)).then(function(){})});if(e&&e.then)return e.then(function(){})},function(e){a._logger.log({error:e,message:\"Error sending messages to API\",method:\"flush\",correlationId:r,level:t.Error})})}catch(e){return n(!0,e)}return c&&c.then?c.then(n.bind(null,!1),n.bind(null,!0)):n(!1,c)}(0,function(e,t){if(a._interval=setInterval(a.sendBatch.bind(a),1e3*(a._options.batchLogIntervalInSeconds||n.DEFAULT_BATCH_TIMEOUT)),e)throw t;return t}))}catch(e){return Promise.reject(e)}},a.sendBatch=function(n){try{var r=this;void 0===n&&(n=e()),r._logger.log({message:\"Start SendBatch\",method:\"sendBatch\",correlationId:n,level:t.Debug});var o=r._logs.splice(0,10);if(!o.length)return Promise.resolve();var i=l(function(){var e=1e3*(r._options.timeoutInSeconds||30),i=new AbortController,s=setTimeout(function(){return i.abort()},e),l={headers:{\"content-type\":\"application/json\"},method:\"POST\",keepalive:!0,body:JSON.stringify(o.map(function(e){return r.getFullLog(e)})),signal:i.signal},a=new URL(r._options.restLoggerUrl);return r._logger.log({message:\"ExternalService - Request (\"+a.hostname+\")\",content:o,method:\"sendBatch\",correlationId:n,level:t.Debug}),Promise.resolve(fetch(r._options.restLoggerUrl,l)).then(function(e){clearTimeout(s),r._logger.log({message:\"ExternalService - Response (\"+a.hostname+\")\",method:\"sendBatch\",correlationId:n,level:t.Debug}),e.ok||r._logger.log({message:\"Error sending messages to API\",content:o,method:\"sendBatch\",correlationId:n,level:t.Error})})},function(e){r._logger.log({error:e,message:\"Error sending messages to API\",content:o,method:\"sendBatch\",correlationId:n,level:t.Error})});return Promise.resolve(i&&i.then?i.then(function(){}):void 0)}catch(e){return Promise.reject(e)}},n.getException=function(e){return e?{stackTrace:e.stack,message:e.message,className:e.name}:null},a.getFullLog=function(e){var t=e.log,r=\"[\"+this._options.service.name+\"] \"+t.message;return t.elapsedTimeInMilliseconds&&(r=r+\" in \"+t.elapsedTimeInMilliseconds+\"ms\"),{customMessage:t.message,message:r,service:this._options.service,environment:this._options.environment||\"Development\",executionDate:e.executionDate,entrypoint:\"Execute\",method:t.method,correlationId:t.correlationId,content:t.content,exeption:n.getException(t.error),level:t.level,elapsedTimeInMilliseconds:t.elapsedTimeInMilliseconds}},n}();a.DEFAULT_BATCH_TIMEOUT=5;export{r as ConsoleLogger,t as LogLevel,a as RestLogger};\n//# sourceMappingURL=index.module.js.map\n","export class Stopwatch {\n    private start: number;\n    private end: number;\n\n    constructor() {\n        this.start = Date.now();\n    }\n    \n    stop() {\n        this.end = Date.now();\n    }\n\n    get elapsed() {\n        return (this.end || Date.now()) - this.start;\n    }\n}","export class Base64Converter {\n    static convert(data: object) {\n        const json = JSON.stringify(data);\n        const base64Json = btoa(json);\n        return base64Json\n            .replace(/=/g, '')\n            .replace(/\\+/g, '-')\n            .replace(/\\//g, '_');\n    }\n}","import { IBrowser } from \"../abstractions\";\n\nexport class Browser {\n    static create(culture?: string): IBrowser {\n        const allowedBrowserColorDepth = [48, 32, 24, 16, 15, 8, 4, 1];\n        const colorDepth = allowedBrowserColorDepth.find(x => x <= screen.colorDepth)!;\n        return {\n            javaEnabled: navigator.javaEnabled(),\n            javascriptEnabled: true,\n            language: (culture || navigator.language).replace(/^([a-zA-Z]+-[a-zA-Z]+)-.+$/, '$1'),\n            userAgent: navigator.userAgent,\n            screenWidth: window.screen.width,\n            screenHeight: window.screen.height,\n            timezoneOffset: new Date().getTimezoneOffset(),\n            colorDepth,\n            acceptHeader: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'\n        };\n    }\n}","import { IDelay } from \"../abstractions\";\n\nexport class Delay implements IDelay {\n    private _task: Promise<void>;\n    private _timeout: NodeJS.Timeout;\n    \n    constructor(delay: number) {\n        this._task = new Promise<void>((resolve) => {\n            this._timeout = setTimeout(resolve, delay);\n        });\n    }\n\n    wait() {\n        return this._task;\n    }\n\n    cancel() {\n        clearTimeout(this._timeout);\n        this._task = Promise.reject({\n            message: 'Timer cancelled'\n        });\n    }\n\n    static sleep(delay: number): IDelay {\n        return new Delay(delay);\n    }\n\n    static cancel(id: number) {\n        clearTimeout(id);\n    }\n}","import { ICreateForm, ICreateIFrame, ICreateInput } from \"./abstractions\";\n\nexport class HtmlElementFactory {\n    static createIFrame(createIFrame: ICreateIFrame) : HTMLIFrameElement {\n        const iframe = document.createElement('iframe');\n        iframe.id = createIFrame.name;\n        iframe.name = createIFrame.name;\n\n        if (createIFrame.onReadyFn) {\n            createIFrame.onReadyFn(iframe, createIFrame.isVisible);\n        }\n\n        if (createIFrame.onCreatedFn) {\n            createIFrame.onCreatedFn(iframe);\n            iframe.style.opacity = createIFrame.isVisible ? \"1\" : \"0\";\n        }\n\n        createIFrame.parent.appendChild(iframe);\n\n        return iframe;\n    }\n\n    static createForm(createForm: ICreateForm): HTMLFormElement {\n        const form = document.createElement('form');\n        form.id = createForm.name;\n        form.name = createForm.name;\n        form.action = createForm.actionUrl;\n        form.target = createForm.target;\n        form.method = createForm.method;\n        \n        createForm.parent.appendChild(form);\n\n        return form;\n    }\n\n    static createInput(createInput: ICreateInput): HTMLInputElement {\n        const input = document.createElement('input');\n        input.id = createInput.name;\n        input.name = createInput.name;\n        input.type = createInput.type;\n        \n        createInput.parent.appendChild(input);\n\n        return input;\n    }\n}","import { ILogger, LogLevel } from \"@paybyrd/logger-js\";\nimport { IError } from \"../../shared/abstractions\";\nimport { Delay } from \"../../shared/utils\";\nimport { IRetryExecution, IRetryOptions, IRetryPolicy } from \"../abstractions\";\nimport { IResult } from \"../abstractions/IResult\";\n\nexport class LinearRetryPolicy implements IRetryPolicy {\n    private readonly _options: IRetryOptions;\n    private readonly _logger: ILogger;\n\n    constructor(options: IRetryOptions, logger: ILogger) {\n        this._options = options;\n        this._logger = logger;\n    }\n    \n    execute<T>({\n        executeFn,\n        method,\n        correlationId\n    }: IRetryExecution<T>) : Promise<IResult<T>> {\n        return new Promise<IResult<T>>(async (resolve, reject) => {\n            let attempt = 1;\n            let lastError: IError | null = null;\n            do {\n                try {\n                    let result = await executeFn({\n                        attempt: attempt,\n                        maxAttempts: this._options.maxAttempts\n                    });\n                    if (result.isSuccess) {\n                        resolve(result);\n                        return;\n                    }\n                    if (!result.isTransientError) {\n                        reject(result);\n                        return;\n                    }\n                }\n                catch (error) {\n                    lastError = {\n                        message: `Unhandled error calling \"${method}\"`,\n                        error,\n                        additionalData: {\n                            attempt,\n                            maxAttempts: this._options.maxAttempts\n                        }\n                    };\n\n                    this._logger.log({\n                        message: `Unhandled error calling \"${method}\"`,\n                        error,\n                        content: {\n                            attempt,\n                            maxAttempts: this._options.maxAttempts\n                        },\n                        method: method,\n                        correlationId: correlationId,\n                        level: LogLevel.Warning\n                    });\n                }\n                attempt++;\n                await Delay.sleep(this._options.attemptDelayInSeconds * 1000).wait();\n            } while (attempt <= this._options.maxAttempts);\n\n            reject(lastError);\n\n            this._logger.log({\n                message: `Unhandled error calling \"${method}\"`,\n                error: lastError?.error,\n                content: {\n                    attempt,\n                    maxAttempts: this._options.maxAttempts\n                },\n                method: method,\n                correlationId: correlationId,\n                level: LogLevel.Error\n            });\n        });\n    }\n}","export enum ChallengeWindowSize {\n    width250xheight400 = '01',\n    width390xheight400 = '02',\n    width500xheight600 = '03',\n    width600xheight400 = '04',\n    fullscreen = '05'\n}\n","import { ILogger, LogLevel } from \"@paybyrd/logger-js\";\nimport { Stopwatch } from \"../shared/utils/Stopwatch\";\nimport { IHttpClient, IHttpClientOptions, IRequest, IRetryPolicy } from \"./abstractions\";\nimport { IResult } from \"./abstractions/IResult\";\nimport { LinearRetryPolicy } from \"./retryPolicies\";\n\nexport class FetchHttpClient implements IHttpClient {\n    private readonly _options: IHttpClientOptions;\n    private readonly _retryPolicy: IRetryPolicy;\n    private readonly _logger: ILogger;\n\n    constructor(options: IHttpClientOptions, logger: ILogger, retryPolicy: IRetryPolicy = new LinearRetryPolicy(options, logger)) {\n        this._retryPolicy = retryPolicy;\n        this._logger = logger;\n        this._options = options;\n    }\n\n    async send<T>(request: IRequest): Promise<IResult<T>> {\n        const self = this;\n        return await this._retryPolicy.execute<T>({\n            executeFn: async ({ attempt, maxAttempts }) => {\n                const timeout = (self._options.timeoutInSeconds || 30) * 1000;\n                const abortController = new AbortController();\n                const timeoutId = setTimeout(() => abortController.abort(), timeout);\n                const url = new URL(request.url);\n                \n                this._logger.log({\n                    message: `ExternalService - Request (${url.host})`,\n                    content: {\n                        request,\n                        attempt,\n                        maxAttempts\n                    },\n                    method: \"send\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                const stopwatch = new Stopwatch();\n                let response : Response;\n                try\n                {\n                    response = await fetch(request.url, {\n                        headers: {\n                            ...request.headers,\n                            'x-attempt': attempt.toString(),\n                            'x-max-attempt': maxAttempts.toString(),\n                            'accept': 'application/json',\n                            'content-type': 'application/json',\n                            'correlationId': request.correlationId\n                        },\n                        keepalive: true,\n                        body: JSON.stringify(request.body),\n                        method: request.method,\n                        signal: abortController.signal\n                    });\n\n                    this._logger.log({\n                        message: `ExternalService - Response (${url.host})`,\n                        content: {\n                            request,\n                            attempt,\n                            maxAttempts,\n                            response: {\n                                statusCode: response.status,\n                                data: await response.clone().text()\n                            }\n                        },\n                        method: \"send\",\n                        correlationId: request.correlationId,\n                        level: LogLevel.Information,\n                        elapsedTimeInMilliseconds: stopwatch.elapsed\n                    });\n                }\n                catch (error) {\n                    this._logger.log({\n                        message: `ExternalService - Error (${url.host})`,\n                        content: {\n                            request,\n                            attempt,\n                            maxAttempts,\n                            error\n                        },\n                        method: \"send\",\n                        correlationId: request.correlationId,\n                        level: LogLevel.Error,\n                        elapsedTimeInMilliseconds: stopwatch.elapsed\n                    });\n                    throw error;\n                }\n\n                clearTimeout(timeoutId);\n                const result : IResult<T> = {\n                    isSuccess: response.ok,\n                    isTransientError: this.isTransientError(response),\n                    getData: async () => {\n                        const result = await response.clone().json();\n                        return result.data as T;\n                    }\n                };\n                return result;\n            },\n            method: `[${request.method}] ${request.url}`,\n            correlationId: request.correlationId\n        });\n    }\n\n    isTransientError(response: Response): boolean {\n        const TRANSIENT_STATUS = [409, 424, 500, 503, 504];\n\n        return TRANSIENT_STATUS.includes(response.status);\n    }\n}","import { ILogger, LogLevel } from \"@paybyrd/logger-js\";\nimport { Base64Converter, HtmlElementFactory } from \"../shared/utils\";\nimport { Stopwatch } from \"../shared/utils/Stopwatch\";\nimport { ChallengeWindowSize, IChallengeExecute, IChallengeOptions, IChallengeService } from \"./abstractions\";\n\nexport class IFrameChallengeService implements IChallengeService {\n    private static readonly IFRAME_NAME = 'challengeIframe';\n    private static readonly FORM_NAME = 'challengeForm';\n    private static readonly CREQ_INPUT_NAME = 'creq';\n    private static readonly CREQ_INPUT_TYPE = 'hidden';\n\n    private readonly _options: IChallengeOptions;\n    private readonly _logger: ILogger;\n\n    constructor(options: IChallengeOptions, logger: ILogger) {\n        this._options = options;\n        this._logger = logger;\n    }\n\n    execute(request: IChallengeExecute): Promise<void> {\n        if (!request.authResponse.challengeUrl) {\n            return Promise.resolve();\n        }\n\n        return new Promise<void>((resolve, reject) => {\n            try {\n                this._logger.log({\n                    message: 'Challenge - Start',\n                    content: {\n                        authResponse: request.authResponse\n                    },\n                    method: \"executeChallenge\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                this._options.container.innerHTML = '';\n\n                const iFrame = HtmlElementFactory.createIFrame({\n                    parent: this._options.container,\n                    name: IFrameChallengeService.IFRAME_NAME,\n                    isVisible: true,\n                    useDefaultStyle: !!this._options.onIFrameCreatedFn,\n                    onCreatedFn: this._options.onIFrameCreatedFn,\n                    onReadyFn: this._options.onIFrameReadyFn\n                });\n\n                this._logger.log({\n                    message: 'Challenge - Create iFrame',\n                    method: \"executeChallenge\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n                \n                const form = HtmlElementFactory.createForm({\n                    parent: this._options.container,\n                    name: IFrameChallengeService.FORM_NAME,\n                    actionUrl: request.authResponse.challengeUrl,\n                    target: IFrameChallengeService.IFRAME_NAME,\n                    method: 'post'\n                });\n\n                this._logger.log({\n                    message: 'Challenge - Create form',\n                    method: \"executeChallenge\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                const threeDSRequestInput = HtmlElementFactory.createInput({\n                    parent: form,\n                    name: IFrameChallengeService.CREQ_INPUT_NAME,\n                    type: IFrameChallengeService.CREQ_INPUT_TYPE\n                });\n\n                this._logger.log({\n                    message: 'Challenge - Create input',\n                    method: \"executeChallenge\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                const cReq = {\n                    threeDSServerTransID: request.authResponse.processId,\n                    acsTransID: request.authResponse.challengeId,\n                    messageVersion: request.authResponse.challengeVersion,\n                    messageType: \"CReq\",\n                    challengeWindowSize: this._options.challengeWindowSize || ChallengeWindowSize.width250xheight400\n                };\n\n                const base64CReq = Base64Converter.convert(cReq)\n                threeDSRequestInput.value = base64CReq;\n\n                this._logger.log({\n                    message: 'Challenge - Prepare cReq',\n                    content: {\n                        cReq,\n                        base64CReq\n                    },\n                    method: \"executeChallenge\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                const stopwatch = new Stopwatch();\n                const checkIFrameLoaded = () => {\n                    const iframeDoc = iFrame.contentDocument || iFrame.contentWindow?.document;\n\n                    if (iframeDoc?.readyState  == 'complete' ) {\n                        this._logger.log({\n                                message: `Challenge - iFrame loaded in ${stopwatch.elapsed}ms`,\n                                content: {\n                                    iFrame: iframeDoc.body.innerText\n                                },\n                                method: \"executeChallenge\",\n                                correlationId: request.correlationId,\n                                level: LogLevel.Information\n                            });\n                        \n                        return;\n                    } \n                \n                    // If we are here, it is not loaded. Set things up so we check the status again in 250 milliseconds\n                    setTimeout(checkIFrameLoaded, 100);\n                }\n\n                form.submit();\n                \n                setTimeout(checkIFrameLoaded, 100);\n\n                this._logger.log({\n                    message: 'Challenge - Submit form',\n                    content: {\n                        authResponse: request.authResponse,\n                        cReq,\n                        base64CReq\n                    },\n                    method: \"executeChallenge\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                resolve();\n            }\n            catch (error) {\n                this._logger.log({\n                    message: 'Challenge - error',\n                    content: {\n                        authResponse: request.authResponse\n                    },\n                    error: error,\n                    method: \"executeChallenge\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Error\n                });\n\n                return reject({\n                    message: error.toString()\n                });\n            }\n        });\n    }\n\n    reset(): void {\n        try {\n            document.getElementById(IFrameChallengeService.IFRAME_NAME)?.remove();\n            document.getElementById(IFrameChallengeService.FORM_NAME)?.remove();\n            document.getElementById(IFrameChallengeService.CREQ_INPUT_NAME)?.remove();\n        } catch {\n            // Do nothing\n        }\n    }\n}","import { ILogger, LogLevel } from \"@paybyrd/logger-js\";\nimport { Base64Converter, HtmlElementFactory } from \"../shared/utils\";\nimport { Stopwatch } from \"../shared/utils/Stopwatch\";\nimport { IDirectoryServerExecute, IDirectoryServerOptions, IDirectoryServerService } from \"./abstractions\";\n\nexport class IFrameDirectoryServerService implements IDirectoryServerService {\n    private static readonly IFRAME_NAME: string = 'threeDSMethodIframe';\n    private static readonly FORM_NAME: string = 'threeDSMethodForm';\n    private static readonly FORM_INPUT_NAME: string = 'threeDSMethodData';\n    private static readonly FROM_INPUT_TYPE: string = 'hidden';\n\n    private readonly _logger: ILogger;\n    private readonly _options: IDirectoryServerOptions;\n\n    constructor(options: IDirectoryServerOptions, logger: ILogger) {\n        this._logger = logger;\n        this._options = options;\n    }\n\n    execute(request: IDirectoryServerExecute) : Promise<void> {\n        if (!request.preAuthResponse.dsMethodUrl) {\n            return Promise.resolve();\n        }        \n\n        return new Promise<void>((resolve, reject) => {\n            try {\n                this._logger.log({\n                    message: 'DirectoryServer - Start',\n                    content: {\n                        preAuthResponse: request\n                    },\n                    method: 'executeDirectoryServer',\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                this._options.container.innerHTML = '';\n\n                const iFrame = HtmlElementFactory.createIFrame({\n                    parent: this._options.container,\n                    isVisible: false,\n                    name: IFrameDirectoryServerService.IFRAME_NAME,\n                    useDefaultStyle: !!this._options.onIFrameCreatedFn\n                });\n                this._options.onIFrameCreatedFn?.call(this._options, iFrame);\n\n                this._logger.log({\n                    message: 'DirectoryServer - Create iFrame',\n                    method: \"executeDirectoryServer\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n                \n                const form = HtmlElementFactory.createForm({\n                    parent: this._options.container,\n                    name: IFrameDirectoryServerService.FORM_NAME,\n                    actionUrl: request.preAuthResponse.dsMethodUrl,\n                    target: IFrameDirectoryServerService.IFRAME_NAME,\n                    method: 'POST'\n                });\n\n                this._logger.log({\n                    message: 'DirectoryServer - Create Form',\n                    method: \"executeDirectoryServer\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                const threeDSMethodDataInput = HtmlElementFactory.createInput({\n                    parent: form,\n                    name: IFrameDirectoryServerService.FORM_INPUT_NAME,\n                    type: IFrameDirectoryServerService.FROM_INPUT_TYPE\n                });\n\n                this._logger.log({\n                    message: 'DirectoryServer - Create Input',\n                    method: \"executeDirectoryServer\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                const threeDSMethodData = {\n                    threeDSServerTransID: request.preAuthResponse.processId,\n                    threeDSMethodNotificationURL: request.preAuthResponse.notificationUrl\n                };\n\n                const threeDSMethodDataBase64 = Base64Converter.convert(threeDSMethodData)\n                threeDSMethodDataInput.value = threeDSMethodDataBase64;\n\n                this._logger.log({\n                    message: 'DirectoryServer - Prepare threeDSMethodData',\n                    content: {\n                        threeDSMethodData,\n                        threeDSMethodDataBase64\n                    },\n                    method: \"executeDirectoryServer\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                const stopwatch = new Stopwatch();\n                const checkIFrameLoaded = () => {\n                    const iframeDoc = iFrame.contentDocument || iFrame.contentWindow?.document;\n\n                    if (iframeDoc?.readyState  == 'complete' ) {\n                        this._logger.log({\n                                message: `DirectoryServer - iFrame loaded in ${stopwatch.elapsed}ms`,\n                                content: {\n                                    iFrame: iframeDoc.body.innerText\n                                },\n                                method: \"executeDirectoryServer\",\n                                correlationId: request.correlationId,\n                                level: LogLevel.Information\n                            });\n                        \n                        return;\n                    } \n                \n                    // If we are here, it is not loaded. Set things up so we check the status again in 250 milliseconds\n                    setTimeout(checkIFrameLoaded, 100);\n                }\n\n                form.submit();\n\n                setTimeout(checkIFrameLoaded, 100);\n\n                this._logger.log({\n                    message: 'DirectoryServer - Submit form',\n                    content: {\n                        threeDSMethodData,\n                        threeDSMethodDataBase64\n                    },\n                    method: \"executeDirectoryServer\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Information\n                });\n\n                resolve();\n            }\n            catch (error) {\n                this._logger.log({\n                    message: 'DirectoryServer - Error',\n                    content: {\n                        preAuthResponse: request\n                    },\n                    error,\n                    method: \"directoryServerExecute\",\n                    correlationId: request.correlationId,\n                    level: LogLevel.Error\n                });\n\n                return reject({\n                    message: error.toString()\n                });\n            }\n        });\n    }\n\n    reset(): void {\n        try {\n            document.getElementById(IFrameDirectoryServerService.IFRAME_NAME)?.remove();\n            document.getElementById(IFrameDirectoryServerService.FORM_NAME)?.remove();\n            document.getElementById(IFrameDirectoryServerService.FORM_INPUT_NAME)?.remove();\n        } catch {\n            // Do nothing\n        }\n    }\n}","export enum EventName {\n\n    PreAuthStarted = 'preAuth:started',\n    PreAuthCompleted = 'preAuth:completed',\n    AuthStarted = 'auth:started',\n    AuthCompleted = 'auth:completed',\n    PostAuthStarted = 'postAuth:started',\n    PostAuthCompleted = 'postAuth:completed',\n    PostAuthFailed = 'postAuth:failed',\n    ResetStarted = 'reset:started',\n    ResetCompleted = 'reset:completed'\n}\n\nexport interface IEvent {\n    name: EventName;\n    data?: object | null | undefined;\n}","import { IHttpClient, FetchHttpClient, IHttpClientOptions } from \"@paybyrd/http-client\";\nimport { ILogger, IRestLoggerOptions, LogLevel, RestLogger } from \"@paybyrd/logger-js\";\nimport { Browser } from \"../shared/utils\";\nimport {\n    IPreAuthRequest,\n    IAuthResponse,\n    IChallengeService,\n    IDirectoryServerService,\n    IExecuteRequest,\n    IPostAuthResponse,\n    IThreeDSecureOptions,\n    IThreeDSecureService\n} from \"./abstractions\";\nimport { IPreAuthResponse } from \"./abstractions/IPreAuthResponse\";\nimport { IFrameChallengeService } from \"./IFrameChallengeService\";\nimport { IFrameDirectoryServerService } from \"./IFrameDirectoryServerService\";\nimport { IObservable, IObserver, IEvent, EventName } from \"../observer/abstractions\";\nimport { v4 as uuidV4 } from \"uuid\";\n\n export class ThreeDSecureService implements IThreeDSecureService, IObservable {\n    private readonly _options: IThreeDSecureOptions;\n    private readonly _logger: ILogger;\n    private readonly _client: IHttpClient;\n    private readonly _directoryServer: IDirectoryServerService;\n    private readonly _challenge: IChallengeService;\n    private readonly _observers: IObserver[] = [];\n\n    constructor(\n        options: IThreeDSecureOptions,\n        logger: ILogger = new RestLogger(ThreeDSecureService.getLoggerOptions(options)),\n        httpClient: IHttpClient = new FetchHttpClient(ThreeDSecureService.getHttpClientOptions(options), logger),\n        directoryServer: IDirectoryServerService = new IFrameDirectoryServerService(options, logger),\n        challenge: IChallengeService = new IFrameChallengeService(options, logger)) {\n        this._options = options;\n        this._logger = logger;\n        this._client = httpClient;\n        this._directoryServer = directoryServer;\n        this._challenge = challenge;\n    }\n\n     subscribe(observer: IObserver): void {\n         this._observers.push(observer);\n     }\n     \n     unsubscribe(observer: IObserver): void {\n        const index = this._observers.indexOf(observer);\n        if (index > -1) {\n            this._observers.splice(index, 1);\n        }\n     }\n\n     async execute(request: IPreAuthRequest, correlationId = uuidV4()): Promise<IPostAuthResponse> {\n        if (!request.correlationId) {\n            request.correlationId = correlationId;\n            this._logger.log({\n                message: 'Obsolete request. CorrelationId is not set.',\n                content: request,\n                method: \"execute\",\n                correlationId: request.correlationId,\n                level: LogLevel.Information\n            });\n        }\n\n        try {\n            let preAuthResponse = await this.preAuth(request);\n            await this._directoryServer.execute({\n                preAuthResponse,\n                correlationId: request.correlationId\n            });\n            let authResponse = await this.auth(request);\n            await this._challenge.execute({\n                authResponse,\n                correlationId: request.correlationId\n            });\n            let postAuthResponse = await this.postAuth(request);\n            return postAuthResponse;\n        } finally {\n            this.reset();\n            await this._logger.flush();\n        }\n     }\n\n     private async preAuth(request: IPreAuthRequest): Promise<IPreAuthResponse> {\n        this._logger.log({\n            message: 'Executing PreAuth',\n            content: request,\n            method: \"_preAuth\",\n            correlationId: request.correlationId,\n            level: LogLevel.Information\n        });\n        this.notifyAll({\n            name: EventName.PreAuthStarted,\n            data: request\n        });\n        const result = await this._client.send<IPreAuthResponse>({\n            url: `${this._options.threeDSecureUrl}/api/v2/${request.id}/preAuth`,\n            method: 'POST',\n            body: {\n                customer: request.customer,\n                billingAddress: request.billingAddress,\n                shippingAddress: request.shippingAddress,\n                browser: Browser.create(this._options.culture)\n            },\n            correlationId: request.correlationId\n        });\n        this.notifyAll({\n            name: EventName.PreAuthCompleted,\n            data: result\n        });\n        return await result.getData();\n     }\n\n     private async auth(request: IExecuteRequest): Promise<IAuthResponse> {\n        this._logger.log({\n            message: 'Executing Auth',\n            content: request,\n            method: \"_auth\",\n            correlationId: request.correlationId,\n            level: LogLevel.Information\n        });\n        this.notifyAll({\n            name: EventName.AuthStarted,\n            data: request\n        });\n        const result = await this._client.send<IAuthResponse>({\n            url: `${this._options.threeDSecureUrl}/api/v1/${request.id}/auth`,\n            method: 'POST',\n            correlationId: request.correlationId\n        });\n        this.notifyAll({\n            name: EventName.AuthCompleted,\n            data: result\n        });\n        return await result.getData();\n     }\n\n     private async postAuth(request: IExecuteRequest): Promise<IPostAuthResponse> {\n        this._logger.log({\n            message: 'Executing PostAuth',\n            content: request,\n            method: \"_postAuth\",\n            correlationId: request.correlationId,\n            level: LogLevel.Information\n        });\n        this.notifyAll({\n            name: EventName.PostAuthStarted,\n            data: request\n        });\n        const result =  await this._client.send<IPostAuthResponse>({\n            url: `${this._options.threeDSecureUrl}/api/v2/${request.id}/postAuth`,\n            method: 'POST',\n            correlationId: request.correlationId\n        });\n        const data = await result.getData();\n        this.notifyAll({\n            name: EventName.PostAuthCompleted,\n            data\n        });\n        return data;\n     }\n\n     private reset() : void {\n        this.notifyAll({\n            name: EventName.ResetStarted\n        });\n        this._challenge.reset();\n        this._directoryServer.reset();\n        this.notifyAll({\n            name: EventName.ResetCompleted\n        });\n     }\n\n     private notifyAll(event: IEvent): void {\n        this._observers.forEach(observer => observer.notify(event));\n     }\n\n     private static getLoggerOptions(options: IThreeDSecureOptions): IRestLoggerOptions {\n        return {\n            restLoggerUrl: options.logUrl,\n            timeoutInSeconds: options.timeoutInSeconds || 30,\n            environment: options.environment || 'Production',\n            batchLogIntervalInSeconds: options.batchLogIntervalInSeconds || 5,\n            minimumLevel: LogLevel.Information,\n            service: {\n                name: 'Paybyrd.ThreeDSecure.JS',\n                version: '3.3.0'\n            }\n        };\n     }\n\n     private static getHttpClientOptions(options: IThreeDSecureOptions): IHttpClientOptions {\n        return {\n            timeoutInSeconds: options.timeoutInSeconds || 30,\n            attemptDelayInSeconds: options.attemptDelayInSeconds || 2,\n            maxAttempts: options.maxAttempts || 50\n        };\n     }\n }\n "],"names":["t","e","n","Object","assign","bind","arguments","length","r","prototype","hasOwnProperty","call","apply","this","Trace","Debug","Information","Warning","Error","Critical","None","flush","Promise","resolve","log","o","error","toString","level","console","trace","debug","warn","s","i","v","then","l","a","_logger","_options","_logs","_interval","setInterval","sendBatch","batchLogIntervalInSeconds","DEFAULT_BATCH_TIMEOUT","restLoggerUrl","minimumLevel","message","content","method","correlationId","unshift","executionDate","Date","clearInterval","c","u","h","g","d","reject","v4","splice","timeoutInSeconds","AbortController","setTimeout","abort","headers","keepalive","body","JSON","stringify","map","getFullLog","signal","URL","hostname","fetch","clearTimeout","ok","getException","stackTrace","stack","className","name","service","elapsedTimeInMilliseconds","customMessage","environment","entrypoint","exeption","Stopwatch","start","end","now","stop","key","get","Base64Converter","convert","data","json","btoa","replace","Browser","create","culture","colorDepth","find","x","screen","javaEnabled","navigator","javascriptEnabled","language","userAgent","screenWidth","window","width","screenHeight","height","timezoneOffset","getTimezoneOffset","acceptHeader","Delay","delay","_this","_task","_timeout","_proto","wait","cancel","sleep","id","HtmlElementFactory","createIFrame","iframe","document","createElement","onReadyFn","isVisible","onCreatedFn","style","opacity","parent","appendChild","createForm","form","action","actionUrl","target","createInput","input","type","pact","state","value","_settle","observer","_Pact","onFulfilled","onRejected","result","callback","_isSettledPact","thenable","ChallengeWindowSize","LinearRetryPolicy","options","logger","execute","_ref","executeFn","_exit","_temp4","_result2","_lastError","lastError","attempt","maxAttempts","LogLevel","_temp3","_do","_temp2","_result","attemptDelayInSeconds","_temp","isSuccess","isTransientError","_catch","additionalData","FetchHttpClient","retryPolicy","_retryPolicy","send","request","self","timeoutId","response","getData","clone","timeout","abortController","url","host","stopwatch","_extends","accept","_fetch","_this$_logger","_log","_response$status","status","text","_response$clone$text","statusCode","elapsed","includes","IFrameChallengeService","authResponse","challengeUrl","container","innerHTML","iFrame","IFRAME_NAME","useDefaultStyle","onIFrameCreatedFn","onIFrameReadyFn","FORM_NAME","threeDSRequestInput","CREQ_INPUT_NAME","CREQ_INPUT_TYPE","cReq","threeDSServerTransID","processId","acsTransID","challengeId","messageVersion","challengeVersion","messageType","challengeWindowSize","width250xheight400","base64CReq","submit","checkIFrameLoaded","_iFrame$contentWindow","iframeDoc","contentDocument","contentWindow","readyState","innerText","reset","_document$getElementB","_document$getElementB2","_document$getElementB3","getElementById","remove","_unused","EventName","IFrameDirectoryServerService","preAuthResponse","dsMethodUrl","_this$_options$onIFra","threeDSMethodDataInput","FORM_INPUT_NAME","FROM_INPUT_TYPE","threeDSMethodData","threeDSMethodNotificationURL","notificationUrl","threeDSMethodDataBase64","ThreeDSecureService","httpClient","directoryServer","challenge","RestLogger","getLoggerOptions","getHttpClientOptions","_client","_directoryServer","_challenge","_observers","subscribe","push","unsubscribe","index","indexOf","undefined","uuidV4","preAuth","auth","postAuth","_finallyRethrows","_wasThrown","_this2","notifyAll","PreAuthStarted","threeDSecureUrl","customer","billingAddress","shippingAddress","browser","PreAuthCompleted","_this3","AuthStarted","AuthCompleted","_this4","PostAuthStarted","PostAuthCompleted","ResetStarted","ResetCompleted","event","forEach","notify","logUrl","version"],"mappings":"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"}