{"version":3,"file":"bundle.min.mjs","sources":["../../sdk-core/lib/bundle.mjs","../src/agentDefinition.ts","../../../node_modules/tslib/tslib.es6.js","../src/BacktraceBrowserRequestHandler.ts","../src/BacktraceApi.ts","../src/BacktraceBrowserSessionProvider.ts","../src/attributes/ApplicationInformationAttributeProvider.ts","../../../node_modules/ua-parser-js/src/ua-parser.js","../src/attributes/UserAgentAttributeProvider.ts","../src/attributes/UserIdentifierAttributeProvider.ts","../src/attributes/WebsiteAttributeProvider.ts","../src/attributes/WindowAttributeProvider.ts","../src/breadcrumbs/DocumentEventSubscriber.ts","../src/breadcrumbs/HistoryEventSubscriber.ts","../src/breadcrumbs/WebRequestEventSubscriber.ts","../src/builder/BacktraceClientBuilder.ts","../src/converters/JavaScriptCoreStackTraceConverter.ts","../src/converters/SpiderMonkeyStackTraceConverter.ts","../src/converters/getStackTraceConverter.ts","../src/engineDetector.ts","../src/BacktraceClient.ts","../src/redux/BacktraceReduxMiddleware.ts"],"sourcesContent":["class BacktraceReportSubmissionResult {\n    message;\n    get result() {\n        return this._result;\n    }\n    status = 'Ok';\n    _result;\n    constructor(statusOrResponse, message) {\n        this.message = message;\n        if (this.isSubmissionResponse(statusOrResponse)) {\n            this.status = statusOrResponse;\n            return;\n        }\n        this._result = statusOrResponse;\n    }\n    static OnLimitReached(target = 'Server') {\n        return new BacktraceReportSubmissionResult('Limit reached', `${target} report limit reached`);\n    }\n    static SdkDisabled() {\n        return new BacktraceReportSubmissionResult('Disabled SDK');\n    }\n    static Unsupported(message) {\n        return new BacktraceReportSubmissionResult('Unsupported', message);\n    }\n    static ReportSkipped() {\n        return new BacktraceReportSubmissionResult('Report skipped');\n    }\n    static OnInternalServerError(message) {\n        return new BacktraceReportSubmissionResult('Server Error', message);\n    }\n    static OnInvalidToken() {\n        return new BacktraceReportSubmissionResult('Invalid token');\n    }\n    static OnUnknownError(message) {\n        return new BacktraceReportSubmissionResult('Unknown', message);\n    }\n    static OnNetworkingError(message) {\n        return new BacktraceReportSubmissionResult('Network Error', message);\n    }\n    static Ok(response) {\n        return new BacktraceReportSubmissionResult(response);\n    }\n    isSubmissionResponse(statusOrResponse) {\n        return typeof statusOrResponse === 'string';\n    }\n}\n\nfunction jsonEscaper() {\n    const ancestors = [];\n    const keys = [];\n    // in TypeScript add \"this: any\" param to avoid compliation errors - as follows\n    //    return function (this: any, field: any, value: any) {\n    return function (key, value) {\n        if (value === null) {\n            return value;\n        }\n        const valueType = typeof value;\n        if (valueType === 'bigint') {\n            return value.toString();\n        }\n        if (valueType !== 'object') {\n            return value;\n        }\n        // `this` is the object that value is contained in,\n        // i.e., its direct parent.\n        while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this) {\n            ancestors.pop();\n            keys.pop();\n        }\n        if (ancestors.includes(value)) {\n            return `[Circular].${keys.filter((k) => !!k).join('.')}.${key}`;\n        }\n        keys.push(key);\n        ancestors.push(value);\n        return value;\n    };\n}\n\nclass SubmissionUrlInformation {\n    static SUBMIT_PREFIX = 'submit.backtrace.io/';\n    /**\n     * Convert url/token from credentials to JSON submission URL\n     * @param url credentials URL\n     * @param token credentials token\n     * @returns JSON submissionURL\n     */\n    static toJsonReportSubmissionUrl(url, token) {\n        // if the token doesn't exist - use URL\n        if (!token) {\n            return url;\n        }\n        // if the url points to submit, we should always use it without any modifications\n        if (url.includes(this.SUBMIT_PREFIX)) {\n            return url;\n        }\n        // if the URL has token in the URL, the user probably added a token once again\n        // in this case, don't do anything\n        if (url.indexOf(token) !== -1) {\n            return url;\n        }\n        const result = new URL(`/post`, url);\n        result.searchParams.append('format', 'json');\n        result.searchParams.append('token', token);\n        return result.href;\n    }\n    /**\n     * Converts full submission JSON URL to PlCrashReporter submission URL\n     * @param submissionUrl Backtrace Submission URL\n     */\n    static toPlCrashReporterSubmissionUrl(submissionUrl) {\n        return this.changeSubmissionFormat(submissionUrl, 'plcrash');\n    }\n    /**\n     * Converts full submission JSON URL to minidump submission URL\n     * @param submissionUrl Backtrace Submission URL\n     */\n    static toMinidumpSubmissionUrl(submissionUrl) {\n        return this.changeSubmissionFormat(submissionUrl, 'minidump');\n    }\n    static toAttachmentSubmissionUrl(submissionUrl, rxid, attachmentName) {\n        const query = `object=${rxid}&attachment_name=${attachmentName}`;\n        if (submissionUrl.includes('?')) {\n            return (submissionUrl += `&` + query);\n        }\n        return (submissionUrl += '?' + query);\n    }\n    /**\n     * Find the universe based on the submission URL\n     * @param submissionUrl submission URL - full submission URL to Backtrace.\n     * @returns universe name\n     */\n    static findUniverse(submissionUrl) {\n        const submitIndex = submissionUrl.indexOf(this.SUBMIT_PREFIX);\n        if (submitIndex !== -1) {\n            // submit format URL\n            // submit.backtrace.io/universe/token/format\n            // we can expect the universe name just after the hostname\n            const universeStartIndex = submitIndex + this.SUBMIT_PREFIX.length;\n            const endOfUniverseName = submissionUrl.indexOf('/', universeStartIndex);\n            return submissionUrl.substring(universeStartIndex, endOfUniverseName);\n        }\n        // the universe name should be available in the hostname\n        // for example abc.sp.backtrace.io or zyx.in.backtrace.io or foo.backtrace.io\n        const domainIndex = submissionUrl.indexOf('.backtrace.io');\n        if (domainIndex === -1) {\n            return undefined;\n        }\n        const protocolSeparator = '://';\n        let protocolEndIndex = submissionUrl.indexOf(protocolSeparator);\n        if (protocolEndIndex === -1) {\n            protocolEndIndex = 0;\n        }\n        else {\n            protocolEndIndex += protocolSeparator.length;\n        }\n        const hostname = submissionUrl.substring(protocolEndIndex, domainIndex);\n        const endOfUniverseName = hostname.indexOf('.');\n        return endOfUniverseName === -1 ? hostname : hostname.substring(0, endOfUniverseName);\n    }\n    static findToken(submissionUrl) {\n        const submitIndex = submissionUrl.indexOf(this.SUBMIT_PREFIX);\n        if (submitIndex !== -1) {\n            const submissionUrlParts = submissionUrl.split('/');\n            // submit format URL\n            // submit.backtrace.io/universe/token/format\n            // by spliting the submission URL by `/` and dropping the last\n            // part of the URL, the last element on the list is the token.\n            return submissionUrlParts[submissionUrlParts.length - 2] ?? null;\n        }\n        const url = new URL(submissionUrl);\n        return url.searchParams.get('token');\n    }\n    static changeSubmissionFormat(submissionUrl, desiredFormat) {\n        const submitIndex = submissionUrl.indexOf(this.SUBMIT_PREFIX);\n        if (submitIndex !== -1) {\n            const queryParametersIndex = submissionUrl.indexOf('?');\n            const queryParameters = queryParametersIndex === -1 ? '' : submissionUrl.substring(queryParametersIndex);\n            const pathname = submissionUrl.substring(submitIndex + this.SUBMIT_PREFIX.length, queryParametersIndex === -1 ? undefined : queryParametersIndex);\n            const pathParts = pathname.split('/');\n            // path parts are prefixed with '/' character. Expected and valid submit format is:\n            // /universe/token/format\n            // splitting pathname should generate at least 4 elements ('', universe, token, format)\n            // if pathParts length is not equal to 4 then the invalid were passed.\n            const expectedMinimalPathParts = 3;\n            if (pathParts.length < expectedMinimalPathParts) {\n                return submissionUrl;\n            }\n            pathParts[2] = desiredFormat;\n            return (submissionUrl.substring(0, submitIndex + this.SUBMIT_PREFIX.length) +\n                pathParts.join('/') +\n                queryParameters);\n        }\n        else {\n            const url = new URL(submissionUrl);\n            url.searchParams.set('format', desiredFormat);\n            return url.href;\n        }\n    }\n}\n\nclass RequestBacktraceReportSubmission {\n    _requestHandler;\n    _submissionUrl;\n    constructor(options, _requestHandler) {\n        this._requestHandler = _requestHandler;\n        this._submissionUrl = SubmissionUrlInformation.toJsonReportSubmissionUrl(options.url, options.token);\n    }\n    send(data, attachments, abortSignal) {\n        const json = JSON.stringify(data, jsonEscaper());\n        return this._requestHandler.postError(this._submissionUrl, json, attachments, abortSignal);\n    }\n    async sendAttachment(rxid, attachment, abortSignal) {\n        if (!this._requestHandler.postAttachment) {\n            return BacktraceReportSubmissionResult.Unsupported('postAttachment is not implemented');\n        }\n        return await this._requestHandler.postAttachment(SubmissionUrlInformation.toAttachmentSubmissionUrl(this._submissionUrl, rxid, attachment.name), attachment, abortSignal);\n    }\n}\n\nconst DEFAULT_TIMEOUT = 15_000;\n\nclass ConnectionError {\n    /**\n     * Verifies if an Error is a connection error\n     * @param err error\n     * @returns true if the error was caused by ETIMEDOUT or ECONNRESET or ECONNABORTED\n     */\n    static isConnectionError(err) {\n        const error = err;\n        return error.code === 'ETIMEDOUT' || error.code === 'ECONNRESET' || error.code === 'ECONNABORTED';\n    }\n}\n\nclass MetricsUrlInformation {\n    static generateSummedEventsUrl(hostname, submissionUrl, credentialsToken) {\n        const submissionInformation = this.findSubmissionInformation(submissionUrl, credentialsToken);\n        if (!submissionInformation) {\n            return undefined;\n        }\n        return this.generateEventsServiceUrl(hostname, 'summed-events', submissionInformation.universe, submissionInformation.token);\n    }\n    static generateUniqueEventsUrl(hostname, submissionUrl, credentialsToken) {\n        const submissionInformation = this.findSubmissionInformation(submissionUrl, credentialsToken);\n        if (!submissionInformation) {\n            return undefined;\n        }\n        return this.generateEventsServiceUrl(hostname, 'unique-events', submissionInformation.universe, submissionInformation.token);\n    }\n    static generateEventsServiceUrl(hostname, eventServiceName, universe, token) {\n        return new URL(`/api/${eventServiceName}/submit?universe=${universe}&token=${token}`, hostname).toString();\n    }\n    static findSubmissionInformation(submissionUrl, token) {\n        const universe = SubmissionUrlInformation.findUniverse(submissionUrl);\n        if (!universe) {\n            return undefined;\n        }\n        token = token ?? SubmissionUrlInformation.findToken(submissionUrl);\n        if (!token) {\n            return undefined;\n        }\n        return { universe, token };\n    }\n}\n\nclass BacktraceCoreApi {\n    _requestHandler;\n    _summedMetricsSubmissionUrl;\n    _uniqueMetricsSubmissionUrl;\n    _requestBacktraceReportSubmission;\n    constructor(options, _requestHandler) {\n        this._requestHandler = _requestHandler;\n        this._summedMetricsSubmissionUrl = MetricsUrlInformation.generateSummedEventsUrl(options.metrics?.url ?? 'https://events.backtrace.io', options.url, options.token);\n        this._uniqueMetricsSubmissionUrl = MetricsUrlInformation.generateUniqueEventsUrl(options.metrics?.url ?? 'https://events.backtrace.io', options.url, options.token);\n        this._requestBacktraceReportSubmission =\n            options.requestBacktraceReportSubmission ??\n                new RequestBacktraceReportSubmission({\n                    url: options.url,\n                }, this._requestHandler);\n    }\n    sendReport(data, attachments, abortSignal) {\n        return this._requestBacktraceReportSubmission.send(data, attachments, abortSignal);\n    }\n    sendAttachment(rxid, attachment, abortSignal) {\n        return this._requestBacktraceReportSubmission.sendAttachment(rxid, attachment, abortSignal);\n    }\n    sendUniqueMetrics(metrics, abortSignal) {\n        if (!this._uniqueMetricsSubmissionUrl) {\n            throw new Error('Unique metrics URL is not available.');\n        }\n        return this._requestHandler.post(this._uniqueMetricsSubmissionUrl, JSON.stringify(metrics), abortSignal);\n    }\n    sendSummedMetrics(metrics, abortSignal) {\n        if (!this._summedMetricsSubmissionUrl) {\n            throw new Error('Summed metrics URL is not available.');\n        }\n        return this._requestHandler.post(this._summedMetricsSubmissionUrl, JSON.stringify(metrics), abortSignal);\n    }\n}\n\nclass Events {\n    _callbacks = {};\n    on(event, callback) {\n        this.addCallback(event, { callback });\n        return this;\n    }\n    once(event, callback) {\n        this.addCallback(event, { callback, once: true });\n        return this;\n    }\n    off(event, callback) {\n        this.removeCallback(event, callback);\n        return this;\n    }\n    emit(event, ...args) {\n        const callbacks = this._callbacks[event];\n        if (!callbacks || !callbacks.length) {\n            return false;\n        }\n        for (const { callback, once } of [...callbacks]) {\n            try {\n                callback(...args);\n            }\n            catch {\n                // Do nothing\n            }\n            if (once) {\n                this.removeCallback(event, callback);\n            }\n        }\n        return true;\n    }\n    addCallback(event, callback) {\n        const list = this._callbacks[event];\n        if (list) {\n            list.push(callback);\n        }\n        else {\n            this._callbacks[event] = [callback];\n        }\n    }\n    removeCallback(event, callback) {\n        const list = this._callbacks[event];\n        if (!list) {\n            return;\n        }\n        const index = list.findIndex((el) => el.callback === callback);\n        if (index === -1) {\n            return;\n        }\n        list.splice(index, 1);\n        if (!list.length) {\n            delete this._callbacks[event];\n        }\n    }\n}\n\nclass TimeHelper {\n    static now() {\n        return Date.now();\n    }\n    static toTimestampInSec(timestampMs) {\n        return Math.floor(timestampMs / 1000);\n    }\n    static convertSecondsToMilliseconds(timeInSec) {\n        return timeInSec * 1000;\n    }\n}\n\nclass BacktraceReport {\n    data;\n    attributes;\n    attachments;\n    /**\n     * Report classifiers\n     */\n    classifiers = [];\n    /**\n     * Report annotations\n     */\n    annotations = {};\n    /**\n     * Report stack trace\n     */\n    stackTrace = {};\n    /**\n     * Report message\n     */\n    message;\n    /**\n     * Report inner errors\n     */\n    innerReport = [];\n    /**\n     * Report timestamp in ms\n     */\n    timestamp = TimeHelper.now();\n    /**\n     * Sets how many top frames should be skipped.\n     */\n    skipFrames = 0;\n    addStackTrace(name, stack, message = '') {\n        if (typeof stack === 'string') {\n            this.stackTrace[name] = {\n                stack,\n                message,\n            };\n        }\n        else {\n            this.stackTrace[name] = stack;\n        }\n        return this;\n    }\n    constructor(data, attributes = {}, attachments = [], options = {}) {\n        this.data = data;\n        this.attributes = attributes;\n        this.attachments = attachments;\n        this.skipFrames = options?.skipFrames ?? 0;\n        let errorType = 'Exception';\n        if (data instanceof Error) {\n            this.message = this.generateErrorMessage(data.message);\n            this.annotations['error'] = {\n                ...data,\n                message: this.message,\n                name: data.name,\n                stack: data.stack,\n            };\n            this.classifiers = [data.name];\n            this.stackTrace['main'] = {\n                stack: data.stack ?? '',\n                message: this.message,\n            };\n            // Supported in ES2022\n            if (data.cause) {\n                this.innerReport.push(data.cause);\n            }\n        }\n        else {\n            this.message = this.generateErrorMessage(data);\n            this.stackTrace['main'] = {\n                stack: new Error().stack ?? '',\n                message: this.message,\n            };\n            this.classifiers = ['Message'];\n            errorType = 'Message';\n            this.skipFrames += 1;\n        }\n        if (!this.attributes['error.type']) {\n            this.attributes['error.type'] = errorType;\n        }\n        this.attributes['error.message'] = this.message;\n        if (options?.timestamp) {\n            this.timestamp = options.timestamp;\n        }\n        if (options?.classifiers) {\n            this.classifiers.unshift(...options.classifiers);\n        }\n    }\n    generateErrorMessage(data) {\n        return typeof data === 'object' ? JSON.stringify(data, jsonEscaper()) : (data?.toString() ?? '');\n    }\n}\n\nclass AttachmentManager {\n    attachmentEvents;\n    _attachmentProviders = [];\n    constructor() {\n        this.attachmentEvents = new Events();\n    }\n    /**\n     * Adds attachment to manager cache.\n     * @param attachments attachments or attachment returning functions\n     */\n    add(...attachments) {\n        this.addProviders(...attachments.map((a) => typeof a === 'function'\n            ? {\n                type: 'dynamic',\n                get: a,\n            }\n            : {\n                type: 'scoped',\n                get: () => a,\n            }));\n    }\n    /**\n     * Adds `BacktraceAttachmentProvider` to manager cache.\n     * @param attachmentProviders attachment providers\n     */\n    addProviders(...attachmentProviders) {\n        let anyScoped = false;\n        for (const provider of attachmentProviders) {\n            if (provider.type === 'dynamic') {\n                this._attachmentProviders.push(provider);\n            }\n            else {\n                const attachment = provider.get();\n                this._attachmentProviders.push({\n                    type: 'scoped',\n                    get: () => attachment,\n                });\n                anyScoped = true;\n            }\n        }\n        if (anyScoped) {\n            this.attachmentEvents.emit('scoped-attachments-updated', this.get('scoped'));\n        }\n    }\n    /**\n     * Returns scoped, dynamic, or all attachments.\n     * @param type optional type to filter attachments\n     * @returns array of `BacktraceAttachment`\n     */\n    get(type) {\n        const result = [];\n        for (const provider of this._attachmentProviders) {\n            if (type && provider.type !== type) {\n                continue;\n            }\n            const attachment = provider.get();\n            if (!attachment) {\n                continue;\n            }\n            if (Array.isArray(attachment)) {\n                result.push(...attachment);\n            }\n            else {\n                result.push(attachment);\n            }\n        }\n        return result;\n    }\n}\n\nclass ReportDataBuilder {\n    static build(attributes) {\n        const result = { annotations: {}, attributes: {} };\n        if (!attributes) {\n            return result;\n        }\n        for (const attributeKey in attributes) {\n            const attribute = attributes[attributeKey];\n            if (attribute == null) {\n                result.attributes[attributeKey] = attribute;\n                continue;\n            }\n            switch (typeof attribute) {\n                case 'object': {\n                    result.annotations[attributeKey] = attribute;\n                    break;\n                }\n                case 'bigint': {\n                    result.attributes[attributeKey] = attribute.toString();\n                    break;\n                }\n                default: {\n                    result.attributes[attributeKey] = attribute;\n                    break;\n                }\n            }\n        }\n        return result;\n    }\n}\n\nclass AttributeManager {\n    attributeEvents;\n    _attributeProviders = [];\n    constructor(providers) {\n        this.attributeEvents = new Events();\n        for (const provider of providers) {\n            this.addProvider(provider);\n        }\n    }\n    /**\n     * Adds attributes to manager cache\n     * @param attributes attributes object\n     */\n    add(attributes) {\n        if (typeof attributes === 'function') {\n            this.addProvider({ type: 'dynamic', get: attributes });\n        }\n        else {\n            this.addProvider({ type: 'scoped', get: () => attributes });\n        }\n    }\n    /**\n     * Adds attribute provider to the manager\n     * @param attributeProvider\n     * @returns\n     */\n    addProvider(attributeProvider) {\n        if (attributeProvider.type === 'dynamic') {\n            this._attributeProviders.push(attributeProvider);\n            return;\n        }\n        else {\n            const attributes = attributeProvider.get();\n            this._attributeProviders.push({\n                type: 'scoped',\n                get: () => attributes,\n            });\n            this.attributeEvents.emit('scoped-attributes-updated', this.get('scoped'));\n        }\n    }\n    /**\n     * Gets client attributes\n     * @returns Report attribute - client attributes and annotations\n     */\n    get(attributeType) {\n        const result = {\n            annotations: {},\n            attributes: {},\n        };\n        for (const attributeProvider of this._attributeProviders) {\n            if (attributeType && attributeProvider.type != attributeType) {\n                continue;\n            }\n            const providerResult = ReportDataBuilder.build(attributeProvider.get());\n            result.attributes = {\n                ...result.attributes,\n                ...providerResult.attributes,\n            };\n            result.annotations = {\n                ...result.annotations,\n                ...providerResult.annotations,\n            };\n        }\n        return result;\n    }\n}\n\nclass ClientAttributeProvider {\n    _sdkName;\n    _sdkVersion;\n    _sessionId;\n    constructor(_sdkName, _sdkVersion, _sessionId) {\n        this._sdkName = _sdkName;\n        this._sdkVersion = _sdkVersion;\n        this._sessionId = _sessionId;\n    }\n    get type() {\n        return 'scoped';\n    }\n    get() {\n        return {\n            'application.session': this._sessionId,\n            'backtrace.agent': this._sdkName,\n            'backtrace.version': this._sdkVersion,\n        };\n    }\n}\n\nclass UserAttributeProvider {\n    type;\n    _source;\n    constructor(source) {\n        this._source = typeof source === 'function' ? source : () => source;\n        this.type = typeof source === 'function' ? 'dynamic' : 'scoped';\n    }\n    get() {\n        return this._source();\n    }\n}\n\nfunction stringifiedSize(value) {\n    return JSON.stringify(value).length;\n}\nfunction toStringSize(value) {\n    return value.toString().length;\n}\nconst stringSize = (value) => stringifiedSize(value);\nconst numberSize = (toStringSize);\nconst bigintSize = (toStringSize);\nconst symbolSize = 0;\nconst functionSize = 0;\nconst booleanSize = (value) => (value ? 4 : 5);\nconst undefinedSize = 0;\nconst nullSize = 'null'.length;\nfunction arraySize(array, replacer) {\n    const bracketLength = 2;\n    const commaLength = array.length - 1;\n    let elementsLength = 0;\n    for (let i = 0; i < array.length; i++) {\n        const element = array[i];\n        switch (typeof element) {\n            case 'function':\n            case 'symbol':\n            case 'undefined':\n                elementsLength += nullSize;\n                break;\n            default:\n                elementsLength += _jsonSize(array, i.toString(), element, replacer);\n        }\n    }\n    return bracketLength + commaLength + elementsLength;\n}\nconst objectSize = (obj, replacer) => {\n    const entries = Object.entries(obj);\n    const bracketLength = 2;\n    let entryCount = 0;\n    let entriesLength = 0;\n    for (const [k, v] of entries) {\n        const valueSize = _jsonSize(obj, k, v, replacer);\n        if (valueSize === 0) {\n            continue;\n        }\n        entryCount++;\n        // +1 adds the comma size\n        entriesLength += keySize(k) + valueSize + 1;\n    }\n    // -1 removes previously added last comma size (there is no trailing comma)\n    const commaLength = Math.max(0, entryCount - 1);\n    return bracketLength + commaLength + entriesLength;\n};\nfunction keySize(key) {\n    const QUOTE_SIZE = 2;\n    if (key === null) {\n        return nullSize + QUOTE_SIZE;\n    }\n    else if (key === undefined) {\n        return '\"undefined\"'.length;\n    }\n    switch (typeof key) {\n        case 'string':\n            return stringSize(key);\n        case 'number':\n            return numberSize(key) + QUOTE_SIZE;\n        case 'boolean':\n            return booleanSize(key) + QUOTE_SIZE;\n        case 'symbol':\n            return symbolSize; // key not used in JSON\n        default:\n            return stringSize(key.toString());\n    }\n}\nfunction _jsonSize(parent, key, value, replacer) {\n    if (value && typeof value === 'object' && 'toJSON' in value && typeof value.toJSON === 'function') {\n        value = value.toJSON();\n    }\n    value = replacer ? replacer.call(parent, key, value) : value;\n    if (value === null) {\n        return nullSize;\n    }\n    else if (value === undefined) {\n        return undefinedSize;\n    }\n    if (Array.isArray(value)) {\n        return arraySize(value, replacer);\n    }\n    switch (typeof value) {\n        case 'bigint':\n            return bigintSize(value);\n        case 'boolean':\n            return booleanSize(value);\n        case 'function':\n            return functionSize;\n        case 'number':\n            return numberSize(value);\n        case 'object':\n            return objectSize(value, replacer);\n        case 'string':\n            return stringSize(value);\n        case 'symbol':\n            return symbolSize;\n        case 'undefined':\n            return undefinedSize;\n    }\n    return 0;\n}\n/**\n * Calculates size of the object as it would be serialized into JSON.\n *\n * _Should_ return the same value as `JSON.stringify(value, replacer).length`.\n * This may not be 100% accurate, but should work for our requirements.\n * @param value Value to compute length for.\n * @param replacer A function that transforms the results as in `JSON.stringify`.\n * @returns Final string length.\n */\nfunction jsonSize(value, replacer) {\n    return _jsonSize(undefined, '', value, replacer);\n}\n\nconst REMOVED_PLACEHOLDER = '<removed>';\nfunction limitObjectDepth(obj, depth) {\n    if (!(depth < Infinity)) {\n        return obj;\n    }\n    if (depth < 0) {\n        return REMOVED_PLACEHOLDER;\n    }\n    const limitIfObject = (value) => typeof value === 'object' && value ? limitObjectDepth(value, depth - 1) : value;\n    const result = {};\n    for (const key in obj) {\n        const value = obj[key];\n        if (Array.isArray(value)) {\n            result[key] = value.map(limitIfObject);\n        }\n        else {\n            result[key] = limitIfObject(value);\n        }\n    }\n    return result;\n}\n\nfunction textFormatter() {\n    const defaultFormatter = fallbackFormatter(jsonEscaper());\n    try {\n        // eslint-disable-next-line @typescript-eslint/no-var-requires\n        const util = require('util');\n        return util.format ?? defaultFormatter;\n    }\n    catch {\n        return defaultFormatter;\n    }\n}\nfunction fallbackFormatter(jsonEscapeFunction) {\n    return function fallbackFormatter(...params) {\n        let result = '';\n        for (const param of params) {\n            result += typeof param === 'object' ? JSON.stringify(param, jsonEscapeFunction) : param?.toString();\n        }\n        return result;\n    };\n}\n\nvar BreadcrumbLogLevel;\n(function (BreadcrumbLogLevel) {\n    BreadcrumbLogLevel[BreadcrumbLogLevel[\"Verbose\"] = 1] = \"Verbose\";\n    BreadcrumbLogLevel[BreadcrumbLogLevel[\"Debug\"] = 2] = \"Debug\";\n    BreadcrumbLogLevel[BreadcrumbLogLevel[\"Info\"] = 4] = \"Info\";\n    BreadcrumbLogLevel[BreadcrumbLogLevel[\"Warning\"] = 8] = \"Warning\";\n    BreadcrumbLogLevel[BreadcrumbLogLevel[\"Error\"] = 16] = \"Error\";\n})(BreadcrumbLogLevel || (BreadcrumbLogLevel = {}));\nconst defaultBreadcrumbsLogLevel = (1 << 5) - 1;\n\nvar BreadcrumbType;\n(function (BreadcrumbType) {\n    BreadcrumbType[BreadcrumbType[\"Manual\"] = 1] = \"Manual\";\n    BreadcrumbType[BreadcrumbType[\"Log\"] = 2] = \"Log\";\n    BreadcrumbType[BreadcrumbType[\"Navigation\"] = 4] = \"Navigation\";\n    BreadcrumbType[BreadcrumbType[\"Http\"] = 8] = \"Http\";\n    BreadcrumbType[BreadcrumbType[\"System\"] = 16] = \"System\";\n    BreadcrumbType[BreadcrumbType[\"User\"] = 32] = \"User\";\n    BreadcrumbType[BreadcrumbType[\"Configuration\"] = 64] = \"Configuration\";\n})(BreadcrumbType || (BreadcrumbType = {}));\nconst defaultBreadcurmbType = (1 << 7) - 1;\n\nclass ConsoleEventSubscriber {\n    /**\n     * All overriden console events\n     */\n    _events = {};\n    _formatter;\n    start(backtraceBreadcrumbs) {\n        if ((backtraceBreadcrumbs.breadcrumbsType & BreadcrumbType.Log) !== BreadcrumbType.Log) {\n            return;\n        }\n        this._formatter = textFormatter();\n        this.bindToConsoleMethod('log', BreadcrumbLogLevel.Info, backtraceBreadcrumbs);\n        this.bindToConsoleMethod('warn', BreadcrumbLogLevel.Warning, backtraceBreadcrumbs);\n        this.bindToConsoleMethod('error', BreadcrumbLogLevel.Error, backtraceBreadcrumbs);\n        this.bindToConsoleMethod('debug', BreadcrumbLogLevel.Debug, backtraceBreadcrumbs);\n        this.bindToConsoleMethod('trace', BreadcrumbLogLevel.Verbose, backtraceBreadcrumbs);\n    }\n    dispose() {\n        for (const key in this._events) {\n            const consoleMethod = this._events[key];\n            console[key] = consoleMethod;\n        }\n    }\n    bindToConsoleMethod(name, level, backtraceBreadcrumbs) {\n        const originalMethod = console[name];\n        console[name] = (...args) => {\n            originalMethod(...args);\n            const message = this._formatter(...args);\n            backtraceBreadcrumbs.addBreadcrumb(message, level, BreadcrumbType.Log);\n        };\n        this._events[name] = originalMethod;\n    }\n}\n\n/**\n * Constrains `value` to `min` and `max` values, wrapping not matching values around.\n * @param min minimum value to allow\n * @param max maximum value to allow\n * @returns function accepting `value`\n *\n * @example\n * const wrap = wrapped(10, 20);\n * console.log(wrap(15)); // 15\n * console.log(wrap(21)); // 10, wrapped around\n * console.log(wrap(8)); // 18, wrapped around\n */\nfunction wrapped(min, max) {\n    function wrapped(value) {\n        const range = max - min;\n        let newValue;\n        if (value < min) {\n            newValue = max - ((min - value) % range);\n            if (newValue === max) {\n                newValue = min;\n            }\n        }\n        else if (value >= max) {\n            newValue = min + ((value - max) % range);\n            if (newValue === max) {\n                newValue = min;\n            }\n        }\n        else {\n            newValue = value;\n        }\n        return newValue;\n    }\n    return wrapped;\n}\n/**\n * Constrains `value` to `min` and `max` values.\n * @param min minimum value to allow\n * @param max maximum value to allow\n * @returns function accepting `value`\n *\n * @example\n * const clamp = clamped(10, 20);\n * console.log(wrap(15)); // 15\n * console.log(wrap(21)); // 20\n * console.log(wrap(8)); // 10\n */\nfunction clamped(min, max) {\n    function clamped(value) {\n        return Math.max(min, Math.min(value, max));\n    }\n    return clamped;\n}\n\nclass OverwritingArray {\n    capacity;\n    _array;\n    _headConstraint;\n    _lengthConstraint;\n    _head = 0;\n    _length = 0;\n    get head() {\n        return this._head;\n    }\n    set head(value) {\n        this._head = this._headConstraint(value);\n    }\n    get length() {\n        return this._length;\n    }\n    set length(value) {\n        this._length = this._lengthConstraint(value);\n    }\n    get start() {\n        return this._headConstraint(this.head - this.length);\n    }\n    constructor(capacity, items) {\n        this.capacity = capacity;\n        this._array = new Array(capacity);\n        // Head must be always between 0 and capacity.\n        // If lower than 0, it needs to go from the end\n        // If larger than capacity, it needs to go from the start\n        // Wrapping solves this\n        this._headConstraint = wrapped(0, capacity);\n        // Length must be always no less than 0 and no larger than capacity\n        this._lengthConstraint = clamped(0, capacity);\n        if (items) {\n            this.push(...items);\n        }\n    }\n    add(item) {\n        return this.pushOne(item);\n    }\n    push(...items) {\n        for (const item of items) {\n            this.pushOne(item);\n        }\n        return this.length;\n    }\n    pop() {\n        this.head--;\n        const element = this._array[this.head];\n        this._array[this.head] = undefined;\n        this.length--;\n        return element;\n    }\n    shift() {\n        const element = this._array[this.start];\n        this._array[this.start] = undefined;\n        this.length--;\n        return element;\n    }\n    at(index) {\n        return this._array[this.index(index)];\n    }\n    *values() {\n        for (let i = 0; i < this.length; i++) {\n            const index = this.index(i);\n            yield this._array[index];\n        }\n    }\n    *keys() {\n        for (let i = 0; i < this.length; i++) {\n            yield i;\n        }\n    }\n    *entries() {\n        for (let i = 0; i < this.length; i++) {\n            const index = this.index(i);\n            yield [i, this._array[index]];\n        }\n    }\n    [Symbol.iterator]() {\n        return this.values();\n    }\n    pushOne(item) {\n        this._array[this.head] = item;\n        this.head++;\n        this.length++;\n    }\n    index(value) {\n        if (!this.length) {\n            return this._headConstraint(value);\n        }\n        const index = (value % this.length) + this.start;\n        return this._headConstraint(index);\n    }\n}\n\nclass InMemoryBreadcrumbsStorage {\n    _limits;\n    get lastBreadcrumbId() {\n        return this._lastBreadcrumbId;\n    }\n    /**\n     * Breadcrumb name\n     */\n    name = 'bt-breadcrumbs-0';\n    _lastBreadcrumbId = TimeHelper.toTimestampInSec(TimeHelper.now());\n    _breadcrumbs;\n    _breadcrumbSizes;\n    constructor(_limits) {\n        this._limits = _limits;\n        this._breadcrumbs = new OverwritingArray(_limits.maximumBreadcrumbs ?? 100);\n        this._breadcrumbSizes = new OverwritingArray(this._breadcrumbs.capacity);\n    }\n    getAttachments() {\n        return [this];\n    }\n    getAttachmentProviders() {\n        return [\n            {\n                get: () => this,\n                type: 'scoped',\n            },\n        ];\n    }\n    static factory({ limits }) {\n        return new InMemoryBreadcrumbsStorage(limits);\n    }\n    /**\n     * Returns breadcrumbs in the JSON format\n     * @returns Breadcrumbs JSON\n     */\n    get() {\n        return JSON.stringify([...this._breadcrumbs], jsonEscaper());\n    }\n    add(rawBreadcrumb) {\n        this._lastBreadcrumbId++;\n        const id = this._lastBreadcrumbId;\n        const breadcrumb = {\n            id,\n            message: rawBreadcrumb.message,\n            timestamp: TimeHelper.now(),\n            type: BreadcrumbType[rawBreadcrumb.type].toLowerCase(),\n            level: BreadcrumbLogLevel[rawBreadcrumb.level].toLowerCase(),\n        };\n        if (rawBreadcrumb.attributes) {\n            breadcrumb.attributes = rawBreadcrumb.attributes;\n        }\n        this._breadcrumbs.add(breadcrumb);\n        if (this._limits.maximumTotalBreadcrumbsSize) {\n            const size = jsonSize(breadcrumb, jsonEscaper());\n            this._breadcrumbSizes.add(size);\n            let totalSize = this.totalSize();\n            while (totalSize > this._limits.maximumTotalBreadcrumbsSize) {\n                this._breadcrumbs.shift();\n                const removedSize = this._breadcrumbSizes.shift() ?? 0;\n                // We subtract removedSize plus comma in JSON\n                totalSize -= removedSize + 1;\n            }\n        }\n        return id;\n    }\n    totalSize() {\n        let sum = 0;\n        for (const size of this._breadcrumbSizes) {\n            sum += size;\n        }\n        // Sum of:\n        // - all breadcrumbs\n        // - comma count\n        // - brackets\n        return sum + Math.max(0, this._breadcrumbSizes.length - 1) + 2;\n    }\n}\n\nconst BREADCRUMB_ATTRIBUTE_NAME = 'breadcrumbs.lastId';\n/**\n * @returns `undefined` if value is `false`, else `value` if defined, else `defaultValue`\n */\nconst defaultIfNotFalse = (value, defaultValue) => {\n    return value === false ? undefined : value !== undefined ? value : defaultValue;\n};\nclass BreadcrumbsManager {\n    /**\n     * Breadcrumbs type\n     */\n    breadcrumbsType;\n    /**\n     * Breadcrumbs Log level\n     */\n    logLevel;\n    /**\n     * Determines if the breadcrumb manager is enabled.\n     */\n    _enabled = false;\n    _limits;\n    _eventSubscribers = [new ConsoleEventSubscriber()];\n    _interceptor;\n    _storage;\n    constructor(configuration, options) {\n        this._limits = {\n            maximumBreadcrumbs: defaultIfNotFalse(configuration?.maximumBreadcrumbs, 100),\n            maximumAttributesDepth: defaultIfNotFalse(configuration?.maximumAttributesDepth, 2),\n            maximumBreadcrumbMessageLength: defaultIfNotFalse(configuration?.maximumBreadcrumbMessageLength, 255),\n            maximumBreadcrumbSize: defaultIfNotFalse(configuration?.maximumBreadcrumbSize, 64 * 1024),\n            maximumTotalBreadcrumbsSize: defaultIfNotFalse(configuration?.maximumTotalBreadcrumbsSize, 1024 * 1024),\n        };\n        this.breadcrumbsType = configuration?.eventType ?? defaultBreadcurmbType;\n        this.logLevel = configuration?.logLevel ?? defaultBreadcrumbsLogLevel;\n        this._storage = (options?.storage ?? InMemoryBreadcrumbsStorage.factory)({ limits: this._limits });\n        this._interceptor = configuration?.intercept;\n        if (options?.subscribers) {\n            this._eventSubscribers.push(...options.subscribers);\n        }\n    }\n    addEventSubscriber(subscriber) {\n        if (this._enabled) {\n            subscriber.start(this);\n        }\n        this._eventSubscribers.push(subscriber);\n    }\n    setStorage(storage) {\n        if (typeof storage === 'function') {\n            this._storage = storage({ limits: this._limits });\n        }\n        else {\n            this._storage = storage;\n        }\n    }\n    dispose() {\n        this._enabled = false;\n        for (const subscriber of this._eventSubscribers) {\n            subscriber.dispose();\n        }\n    }\n    bind({ client, attachmentManager }) {\n        if (this._storage.getAttachmentProviders) {\n            attachmentManager.addProviders(...this._storage.getAttachmentProviders());\n        }\n        else {\n            attachmentManager.add(...this._storage.getAttachments());\n        }\n        client.addAttribute(() => ({\n            [BREADCRUMB_ATTRIBUTE_NAME]: this._storage.lastBreadcrumbId,\n        }));\n        client.on('before-skip', (report) => this.logReport(report));\n    }\n    initialize() {\n        if (this._enabled) {\n            return;\n        }\n        for (const subscriber of this._eventSubscribers) {\n            subscriber.start(this);\n        }\n        this._enabled = true;\n    }\n    verbose(message, attributes) {\n        return this.log(message, BreadcrumbLogLevel.Verbose, attributes);\n    }\n    debug(message, attributes) {\n        return this.log(message, BreadcrumbLogLevel.Debug, attributes);\n    }\n    info(message, attributes) {\n        return this.log(message, BreadcrumbLogLevel.Info, attributes);\n    }\n    warn(message, attributes) {\n        return this.log(message, BreadcrumbLogLevel.Warning, attributes);\n    }\n    error(message, attributes) {\n        return this.log(message, BreadcrumbLogLevel.Error, attributes);\n    }\n    log(message, level, attributes) {\n        return this.addBreadcrumb(message, level, BreadcrumbType.Manual, attributes);\n    }\n    logReport(report) {\n        const level = report.data instanceof Error ? BreadcrumbLogLevel.Error : BreadcrumbLogLevel.Warning;\n        return this.addBreadcrumb(report.message, level, BreadcrumbType.System);\n    }\n    addBreadcrumb(message, level, type, attributes) {\n        if (!this._enabled) {\n            return false;\n        }\n        let rawBreadcrumb = {\n            message: this.prepareBreadcrumbMessage(message),\n            level,\n            type,\n            attributes,\n        };\n        if (this._interceptor) {\n            const interceptorBreadcrumb = this._interceptor(rawBreadcrumb);\n            if (!interceptorBreadcrumb) {\n                return false;\n            }\n            rawBreadcrumb = interceptorBreadcrumb;\n        }\n        if ((this.logLevel & rawBreadcrumb.level) !== level) {\n            return false;\n        }\n        if ((this.breadcrumbsType & rawBreadcrumb.type) !== type) {\n            return false;\n        }\n        if (this._limits.maximumBreadcrumbMessageLength !== undefined) {\n            rawBreadcrumb.message = rawBreadcrumb.message.substring(0, this._limits.maximumBreadcrumbMessageLength);\n        }\n        let limitedBreadcrumb;\n        if (this._limits.maximumAttributesDepth !== undefined && rawBreadcrumb.attributes) {\n            limitedBreadcrumb = {\n                ...rawBreadcrumb,\n                attributes: limitObjectDepth(rawBreadcrumb.attributes, this._limits.maximumAttributesDepth),\n            };\n        }\n        else {\n            limitedBreadcrumb = rawBreadcrumb;\n        }\n        if (this._limits.maximumBreadcrumbSize !== undefined) {\n            const breadcrumbSize = jsonSize(limitedBreadcrumb, jsonEscaper());\n            if (breadcrumbSize > this._limits.maximumBreadcrumbSize) {\n                // TODO: Trim the breadcrumb\n                return false;\n            }\n        }\n        const id = this._storage.add(limitedBreadcrumb);\n        return id !== undefined;\n    }\n    /**\n     * The expectation is, message should always be defined and passed as string.\n     * However, logger can pass as a message an object or any other unknown type.\n     * To be sure the code won't break, this method ensures the message is always a string\n     * no matter what the logger gives us.\n     * @param message breadcrumb message\n     */\n    prepareBreadcrumbMessage(message) {\n        if (message == null) {\n            return '';\n        }\n        const messageType = typeof message;\n        switch (messageType) {\n            case 'string': {\n                return message;\n            }\n            case 'object': {\n                return JSON.stringify(message, jsonEscaper());\n            }\n            default: {\n                return message.toString();\n            }\n        }\n    }\n}\n\nconst UNKNOWN_FRAME = 'unknown';\nconst ANONYMOUS_FUNCTION = 'anonymous';\n\nclass V8StackTraceConverter {\n    addressSeparator;\n    get engine() {\n        return 'v8';\n    }\n    constructor(addressSeparator = '') {\n        this.addressSeparator = addressSeparator;\n    }\n    convert(stackTrace, message) {\n        const result = [];\n        let stackFrames = stackTrace.split('\\n');\n        const errorHeader = message.split('\\n');\n        // remove error header from stack trace - if the error header exists\n        if (stackFrames[0].indexOf(errorHeader[0]) !== -1) {\n            stackFrames = stackFrames.slice(errorHeader.length);\n        }\n        else {\n            stackFrames = stackFrames.slice(1);\n        }\n        for (const stackFrame of stackFrames) {\n            const normalizedStackFrame = stackFrame.trim();\n            if (!normalizedStackFrame) {\n                continue;\n            }\n            const frame = this.parseFrame(normalizedStackFrame);\n            result.push(frame);\n        }\n        return result;\n    }\n    parseFrame(stackFrame) {\n        const frameSeparator = 'at ';\n        if (!stackFrame.startsWith(frameSeparator)) {\n            return {\n                funcName: stackFrame,\n                library: UNKNOWN_FRAME,\n            };\n        }\n        stackFrame = stackFrame.substring(stackFrame.indexOf(frameSeparator) + frameSeparator.length);\n        const asyncKeyword = 'async ';\n        const sourceCodeSeparator = ' (';\n        let sourceCodeStartIndex = stackFrame.indexOf(sourceCodeSeparator);\n        const anonymousFunction = sourceCodeStartIndex === -1;\n        if (anonymousFunction) {\n            if (stackFrame.startsWith(asyncKeyword)) {\n                stackFrame = stackFrame.substring(asyncKeyword.length);\n            }\n            return {\n                funcName: ANONYMOUS_FUNCTION,\n                ...this.parseSourceCodeInformation(stackFrame),\n            };\n        }\n        let sourceCodeInformation = stackFrame.substring(sourceCodeStartIndex + sourceCodeSeparator.length - 1, stackFrame.length);\n        const anonymousGenericSymbol = '(<anonymous>)';\n        if (sourceCodeInformation.startsWith(anonymousGenericSymbol)) {\n            sourceCodeStartIndex += anonymousGenericSymbol.length + 1;\n            sourceCodeInformation = sourceCodeInformation.substring(anonymousGenericSymbol.length);\n        }\n        if (sourceCodeInformation.startsWith(` ${frameSeparator}`)) {\n            sourceCodeInformation = sourceCodeInformation.substring(frameSeparator.length + 1);\n        }\n        else {\n            sourceCodeInformation = sourceCodeInformation.substring(1, sourceCodeInformation.length - 1);\n        }\n        let functionName = stackFrame.substring(0, sourceCodeStartIndex);\n        if (functionName.startsWith(asyncKeyword)) {\n            functionName = functionName.substring(asyncKeyword.length);\n        }\n        return {\n            funcName: functionName,\n            ...this.parseSourceCodeInformation(sourceCodeInformation),\n        };\n    }\n    parseSourceCodeInformation(sourceCodeInformation) {\n        if (sourceCodeInformation.startsWith('eval')) {\n            return this.extractEvalInformation(sourceCodeInformation);\n        }\n        if (this.addressSeparator && sourceCodeInformation.startsWith(this.addressSeparator)) {\n            sourceCodeInformation = sourceCodeInformation.substring(this.addressSeparator.length).trimStart();\n        }\n        const sourceCodeParts = sourceCodeInformation.split(':');\n        const column = parseInt(sourceCodeParts[sourceCodeParts.length - 1]);\n        const lineNumber = parseInt(sourceCodeParts[sourceCodeParts.length - 2]);\n        const library = sourceCodeParts.slice(0, sourceCodeParts.length - 2).join(':');\n        return {\n            library,\n            column: isNaN(column) ? undefined : column,\n            line: isNaN(lineNumber) ? undefined : lineNumber,\n        };\n    }\n    extractEvalInformation(evalSourceCodeInformation) {\n        const sourceCodeStartSeparatorChar = '(';\n        const sourceCodeEndSeparatorChar = ')';\n        const sourceCodeStart = evalSourceCodeInformation.indexOf(sourceCodeStartSeparatorChar);\n        const sourceCodeEnd = evalSourceCodeInformation.indexOf(sourceCodeEndSeparatorChar);\n        if (sourceCodeStart === -1 || sourceCodeEnd === -1 || sourceCodeStart > sourceCodeEnd) {\n            return {\n                library: UNKNOWN_FRAME,\n            };\n        }\n        const sourceCodeInformation = evalSourceCodeInformation.substring(sourceCodeStart + sourceCodeStartSeparatorChar.length, sourceCodeEnd);\n        return this.parseSourceCodeInformation(sourceCodeInformation);\n    }\n}\n\nclass IdGenerator {\n    static uuid() {\n        const bytes = [...new Array(16)].map(() => Math.floor(Math.random() * 256));\n        bytes[6] = (bytes[6] & 0x0f) | 0x40;\n        bytes[8] = (bytes[8] & 0x3f) | 0x80;\n        return (bytes\n            .slice(0, 4)\n            .map((n) => n.toString(16).padStart(2, '0'))\n            .join('') +\n            '-' +\n            bytes\n                .slice(4, 6)\n                .map((n) => n.toString(16).padStart(2, '0'))\n                .join('') +\n            '-' +\n            bytes\n                .slice(6, 8)\n                .map((n) => n.toString(16).padStart(2, '0'))\n                .join('') +\n            '-' +\n            bytes\n                .slice(8, 10)\n                .map((n) => n.toString(16).padStart(2, '0'))\n                .join('') +\n            '-' +\n            bytes\n                .slice(10, 16)\n                .map((n) => n.toString(16).padStart(2, '0'))\n                .join(''));\n    }\n}\n\nclass BacktraceDataBuilder {\n    _sdkOptions;\n    _stackTraceConverter;\n    _attributeManager;\n    _debugIdProvider;\n    MAIN_THREAD_NAME = 'main';\n    constructor(_sdkOptions, _stackTraceConverter, _attributeManager, _debugIdProvider) {\n        this._sdkOptions = _sdkOptions;\n        this._stackTraceConverter = _stackTraceConverter;\n        this._attributeManager = _attributeManager;\n        this._debugIdProvider = _debugIdProvider;\n    }\n    build(report) {\n        const { annotations, attributes } = this._attributeManager.get();\n        const reportData = ReportDataBuilder.build(report.attributes);\n        const { threads, detectedDebugIdentifier } = this.getThreads(report);\n        const result = {\n            uuid: IdGenerator.uuid(),\n            timestamp: TimeHelper.toTimestampInSec(report.timestamp),\n            agent: this._sdkOptions.agent,\n            agentVersion: this._sdkOptions.agentVersion,\n            lang: this._sdkOptions.langName,\n            langVersion: this._sdkOptions.langVersion,\n            classifiers: report.classifiers,\n            mainThread: this.MAIN_THREAD_NAME,\n            threads,\n            annotations: {\n                ...annotations,\n                ...reportData.annotations,\n                ...report.annotations,\n            },\n            attributes: {\n                ...attributes,\n                ...reportData.attributes,\n            },\n        };\n        if (detectedDebugIdentifier) {\n            result.symbolication = 'sourcemap';\n        }\n        return result;\n    }\n    getThreads(report) {\n        const threads = {};\n        let detectedDebugIdentifier = false;\n        for (const [name, traceInfo] of Object.entries(report.stackTrace)) {\n            let stackFrames;\n            if (Array.isArray(traceInfo)) {\n                stackFrames = traceInfo;\n            }\n            else {\n                const { message, stack } = traceInfo;\n                stackFrames = this._stackTraceConverter.convert(stack, message);\n            }\n            if (name === this.MAIN_THREAD_NAME && report.skipFrames > 0) {\n                stackFrames.splice(0, report.skipFrames);\n            }\n            for (const frame of stackFrames) {\n                const debugIdentifier = this._debugIdProvider.getDebugId(frame.library);\n                if (!debugIdentifier) {\n                    continue;\n                }\n                detectedDebugIdentifier = true;\n                frame.debug_identifier = debugIdentifier;\n            }\n            threads[name] = {\n                fault: name === this.MAIN_THREAD_NAME,\n                name,\n                stack: stackFrames,\n            };\n        }\n        return {\n            threads,\n            detectedDebugIdentifier,\n        };\n    }\n}\n\nclass AbortError extends Error {\n    constructor(message) {\n        super(message ?? 'Operation cancelled.');\n    }\n}\n\n// Required for polyfills to have the same name as the original implementations\nfunction getGlobal(key) {\n    return typeof window !== 'undefined'\n        ? window[key]\n        : typeof global !== 'undefined'\n            ? global[key]\n            : typeof self !== 'undefined'\n                ? self[key]\n                : undefined;\n}\nconst OriginalAbortController = getGlobal('AbortController');\n\n/**\n * Copied and repurposed from https://github.com/mo/abortcontroller-polyfill/blob/master/src/abortcontroller.js\n */\nclass Emitter {\n    _listeners = {};\n    _events = new Events();\n    addEventListener(type, listener, options) {\n        if (!(type in this._listeners)) {\n            this._listeners[type] = [];\n        }\n        const callback = (ev) => {\n            if (typeof listener === 'object') {\n                return listener.handleEvent.call(this, ev);\n            }\n            else {\n                return listener.call(this, ev);\n            }\n        };\n        const { once, signal } = (typeof options === 'object' ? options : {});\n        if (once) {\n            this._events.once(type, callback);\n        }\n        else {\n            this._events.on(type, callback);\n        }\n        if (signal) {\n            const removeFn = () => this.removeEventListener(type, listener);\n            signal.addEventListener(type, removeFn, { once: true });\n        }\n        this._listeners[type].push({ callback, listener, options });\n    }\n    removeEventListener(type, listener) {\n        if (!(type in this._listeners)) {\n            return;\n        }\n        const allListeners = this._listeners[type];\n        const listeners = allListeners.filter((l) => l.listener === listener);\n        for (const elem of listeners) {\n            this._events.off(type, elem.callback);\n            const index = allListeners.indexOf(elem);\n            allListeners.splice(index, 1);\n        }\n    }\n    dispatchEvent(event) {\n        this._events.emit(event.type, event);\n        return !event.defaultPrevented;\n    }\n}\n/**\n * Copied and repurposed from https://github.com/mo/abortcontroller-polyfill/blob/master/src/abortcontroller.js\n */\nclass AbortSignal extends Emitter {\n    aborted = false;\n    onabort = null;\n    reason;\n    constructor() {\n        super();\n        // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and\n        // we want Object.keys(new AbortController().signal) to be [] for compat with the native impl\n        Object.defineProperty(this, 'aborted', { writable: true, configurable: true, enumerable: false });\n        Object.defineProperty(this, 'onabort', { writable: true, configurable: true, enumerable: false });\n        Object.defineProperty(this, 'reason', { writable: true, configurable: true, enumerable: false });\n    }\n    toString() {\n        return '[object AbortSignal]';\n    }\n    throwIfAborted() {\n        if (this.aborted) {\n            throw this.reason;\n        }\n    }\n    dispatchEvent(event) {\n        if (event.type === 'abort') {\n            this.aborted = true;\n            if (typeof this.onabort === 'function') {\n                this.onabort.call(this, event);\n            }\n        }\n        return super.dispatchEvent(event);\n    }\n    any(signals) {\n        return anySignal(...signals);\n    }\n}\n/**\n * Copied and repurposed from https://github.com/mo/abortcontroller-polyfill/blob/master/src/abortcontroller.js\n */\nclass AbortController {\n    signal;\n    constructor() {\n        // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and\n        // we want Object.keys(new AbortController()) to be [] for compat with the native impl\n        this.signal = new AbortSignal();\n        Object.defineProperty(this, 'signal', { configurable: true, enumerable: false });\n    }\n    abort(reason) {\n        let event;\n        try {\n            event = new Event('abort');\n        }\n        catch (e) {\n            if (typeof document !== 'undefined') {\n                const ie8Document = document;\n                if (!ie8Document.createEvent && ie8Document.createEventObject) {\n                    // For Internet Explorer 8:\n                    event = ie8Document.createEventObject();\n                    event.type = 'abort';\n                }\n                else {\n                    // For Internet Explorer 11:\n                    event = document.createEvent('Event');\n                    event.initEvent('abort', false, false);\n                }\n            }\n            else {\n                // Fallback where document isn't available:\n                event = {\n                    type: 'abort',\n                    bubbles: false,\n                    cancelable: false,\n                };\n            }\n        }\n        let signalReason = reason;\n        if (signalReason === undefined) {\n            if (typeof document === 'undefined') {\n                signalReason = new AbortError('This operation was aborted');\n            }\n            else {\n                try {\n                    signalReason = new DOMException('signal is aborted without reason');\n                }\n                catch (err) {\n                    // IE 11 does not support calling the DOMException constructor, use a\n                    // regular error object on it instead.\n                    signalReason = new AbortError('This operation was aborted');\n                }\n            }\n        }\n        this.signal.reason = signalReason;\n        this.signal.dispatchEvent(event);\n    }\n    toString() {\n        return '[object AbortController]';\n    }\n}\n/**\n * Copied and repurposed from https://github.com/mo/abortcontroller-polyfill/blob/master/src/abortcontroller.js\n */\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n    // These are necessary to make sure that we get correct output for:\n    // Object.prototype.toString.call(new AbortController())\n    AbortController.prototype[Symbol.toStringTag] = 'AbortController';\n    AbortSignal.prototype[Symbol.toStringTag] = 'AbortSignal';\n}\n/**\n * Creates a new abort controller.\n *\n * If the AbortController is not available, a polyfill is used.\n * @returns\n */\nfunction createAbortController() {\n    if (OriginalAbortController) {\n        return new OriginalAbortController();\n    }\n    else {\n        return new AbortController();\n    }\n}\nfunction anySignal(...signals) {\n    const controller = createAbortController();\n    function cleanup() {\n        // Cleanup\n        for (const signal of signals) {\n            if (signal) {\n                signal.removeEventListener('abort', onAbort);\n            }\n        }\n    }\n    function onAbort() {\n        controller.abort();\n        cleanup();\n    }\n    for (const signal of signals) {\n        if (!signal) {\n            continue;\n        }\n        if (signal.aborted) {\n            onAbort();\n            break;\n        }\n        signal.addEventListener('abort', onAbort);\n    }\n    controller.signal.dispose = cleanup;\n    return controller.signal;\n}\n\n/**\n * Due to the event loop, NodeJS application might not exit\n * due to some background work that the SDK delegates to setIntervals.\n * Thanks to this helper we can cancell interval in NodeJS process.\n * @param interval setInterval interval\n */\nfunction unrefInterval(interval) {\n    if (!interval || typeof interval === 'number') {\n        return;\n    }\n    interval.unref();\n}\n\nclass BacktraceDatabaseContext {\n    bucketCount;\n    _records;\n    _recordBuckets = {};\n    constructor(bucketCount = 3) {\n        this.bucketCount = bucketCount;\n        this._records = [];\n        this._recordBuckets = {};\n    }\n    find(predicate) {\n        return this._records.find(predicate);\n    }\n    add(record) {\n        if (this._recordBuckets[record.id] !== undefined) {\n            this._recordBuckets[record.id] = 0;\n            return;\n        }\n        this._records.push(record);\n        this._recordBuckets[record.id] = 0;\n    }\n    get() {\n        return this._records.map((r) => ({ ...r }));\n    }\n    getBucket(index) {\n        const bucket = [];\n        for (const record of this._records) {\n            if (this._recordBuckets[record.id] === index) {\n                bucket.push(record);\n            }\n        }\n        return bucket;\n    }\n    count() {\n        return this._records.length;\n    }\n    countByType() {\n        return this._records.reduce((total, current) => {\n            total[current.type]++;\n            return total;\n        }, {});\n    }\n    remove(recordOrId) {\n        const id = typeof recordOrId === 'string' ? recordOrId : recordOrId.id;\n        const index = this._records.findIndex((r) => r.id === id);\n        if (index === -1) {\n            return;\n        }\n        this._records.splice(index, 1);\n        delete this._recordBuckets[id];\n    }\n    increaseBucket(bucketStart) {\n        for (const [id, bucket] of Object.entries(this._recordBuckets)) {\n            if (bucket < bucketStart) {\n                continue;\n            }\n            const newBucket = bucket + 1;\n            if (newBucket >= this.bucketCount) {\n                this.remove(id);\n            }\n            this._recordBuckets[id] = newBucket;\n        }\n    }\n    load(records) {\n        for (const record of records) {\n            this.add(record);\n        }\n    }\n    dropOverLimits(limits) {\n        const remaining = { ...limits };\n        const dropped = [];\n        for (let i = this._records.length - 1; i >= 0; i--) {\n            const record = this._records[i];\n            if (remaining[record.type] === 0) {\n                this.remove(record);\n                dropped.push(record);\n            }\n            else {\n                remaining[record.type]--;\n            }\n        }\n        return dropped;\n    }\n}\n\nclass BacktraceDatabase extends Events {\n    _options;\n    _storageProvider;\n    _requestHandler;\n    _sessionFiles;\n    /**\n     * Determines if the database is enabled.\n     */\n    get enabled() {\n        return this._enabled;\n    }\n    /**\n     * Abort controller to cancel asynchronous database operations when\n     * the database is being disabled by the user.\n     */\n    _abortController = createAbortController();\n    _databaseRecordContext;\n    _storageProviders = [];\n    _recordLimits;\n    _retryInterval;\n    _intervalId;\n    _enabled = false;\n    constructor(_options, _storageProvider, _requestHandler, _sessionFiles) {\n        super();\n        this._options = _options;\n        this._storageProvider = _storageProvider;\n        this._requestHandler = _requestHandler;\n        this._sessionFiles = _sessionFiles;\n        this._databaseRecordContext = new BacktraceDatabaseContext(this._options?.maximumRetries);\n        this._recordLimits = {\n            report: this._options?.maximumNumberOfRecords ?? 8,\n            attachment: this._options?.maximumNumberOfAttachmentRecords ?? 10,\n        };\n        this._retryInterval = this._options?.retryInterval ?? 60_000;\n    }\n    /**\n     * Starts database integration.\n     * @returns true if the database started successfully. Otherwise false.\n     */\n    initialize() {\n        if (this._enabled) {\n            return this._enabled;\n        }\n        if (this._options?.enable === false) {\n            return false;\n        }\n        const startResult = this._storageProvider.start();\n        if (!startResult) {\n            return false;\n        }\n        const lockId = this._sessionFiles?.lockPreviousSessions();\n        this.loadReports()\n            .then(() => {\n            this.setupDatabaseAutoSend();\n        })\n            .finally(() => lockId && this._sessionFiles?.unlockPreviousSessions(lockId));\n        this._enabled = true;\n        return true;\n    }\n    bind({ client }) {\n        if (this._enabled) {\n            return;\n        }\n        if (this._options?.enable === false) {\n            return;\n        }\n        client.on('before-send', (_, data, attachments) => {\n            const record = this.add(data, attachments);\n            if (!record || record.locked) {\n                return undefined;\n            }\n            record.locked = true;\n        });\n        client.on('after-send', (_, data, __, submissionResult) => {\n            const record = this._databaseRecordContext.find((record) => record.type === 'report' && record.data.uuid === data.uuid);\n            if (!record) {\n                return;\n            }\n            record.locked = false;\n            if (submissionResult.status === 'Ok') {\n                this.remove(record);\n                this._sessionFiles?.unlockPreviousSessions(record.id);\n            }\n        });\n    }\n    /**\n     * Adds backtrace data to the database\n     * @param backtraceData diagnostic data object\n     * @param attachments attachments\n     * @returns record if database is enabled. Otherwise undefined.\n     */\n    add(backtraceData, attachments) {\n        if (!this._enabled) {\n            return undefined;\n        }\n        const sessionId = backtraceData.attributes?.['application.session'];\n        const record = {\n            type: 'report',\n            data: backtraceData,\n            timestamp: TimeHelper.now(),\n            id: IdGenerator.uuid(),\n            locked: false,\n            attachments: attachments,\n            sessionId: typeof sessionId === 'string' ? sessionId : undefined,\n        };\n        this.prepareDatabase([record]);\n        const saveResult = this._storageProvider.add(record);\n        if (!saveResult) {\n            return undefined;\n        }\n        this._databaseRecordContext.add(record);\n        this.lockSessionWithRecord(record);\n        this.emit('added', record);\n        return record;\n    }\n    /**\n     * Adds Bactrace attachment to the database\n     * @param backtraceData diagnostic data object\n     * @param attachment the attachment to add\n     * @param sessionId session ID to use\n     * @returns record if database is enabled. Otherwise undefined.\n     */\n    addAttachment(rxid, attachment, sessionId) {\n        if (!this._enabled) {\n            return undefined;\n        }\n        const record = {\n            type: 'attachment',\n            timestamp: TimeHelper.now(),\n            id: IdGenerator.uuid(),\n            rxid,\n            locked: false,\n            attachment,\n            sessionId,\n        };\n        this.prepareDatabase([record]);\n        const saveResult = this._storageProvider.add(record);\n        if (!saveResult) {\n            return undefined;\n        }\n        this._databaseRecordContext.add(record);\n        this.lockSessionWithRecord(record);\n        this.emit('added', record);\n        return record;\n    }\n    /**\n     * Returns stored references to Backtrace records\n     * @returns available records in the database\n     */\n    get() {\n        return this._databaseRecordContext.get();\n    }\n    /**\n     * @returns Returns number of records stored in the Database\n     */\n    count() {\n        return this._databaseRecordContext.count();\n    }\n    /**\n     * @returns Returns number of records by type stored in the Database\n     */\n    countByType() {\n        return this._databaseRecordContext.countByType();\n    }\n    /**\n     * Disables database integration. After running the dispose method, you cannot\n     * execute any database operations.\n     */\n    dispose() {\n        this._enabled = false;\n        clearInterval(this._intervalId);\n        this._abortController.abort();\n    }\n    /**\n     * Removes the database record/records\n     * @param recordOrRecords database records\n     */\n    remove(recordOrRecords) {\n        if (!this._enabled) {\n            return;\n        }\n        const records = Array.isArray(recordOrRecords) ? recordOrRecords : [recordOrRecords];\n        for (const record of records) {\n            this._databaseRecordContext.remove(record);\n            this._storageProvider.delete(record);\n            this._sessionFiles?.unlockPreviousSessions(record.id);\n            this.emit('removed', record);\n        }\n    }\n    addStorageProvider(storageProvider) {\n        if (this._enabled) {\n            throw new Error('Cannot add storage provider after the database has been enabled.');\n        }\n        this._storageProviders.push(storageProvider);\n    }\n    /**\n     * Sends all records available in the database to Backtrace and removes them\n     * no matter if the submission process was successful or not.\n     * @param abortSignal optional abort signal to cancel sending requests\n     */\n    async flush(abortSignal) {\n        const start = TimeHelper.now();\n        await this.send(abortSignal);\n        const records = this.get().filter((n) => n.timestamp <= start);\n        for (const record of records) {\n            if (abortSignal?.aborted) {\n                return;\n            }\n            this.remove(record);\n        }\n    }\n    /**\n     * Sends all records available in the database to Backtrace.\n     * @param abortSignal optional abort signal to cancel sending requests\n     */\n    async send(abortSignal) {\n        for (let bucketIndex = 0; bucketIndex < this._databaseRecordContext.bucketCount; bucketIndex++) {\n            // make a copy of records to not update the array after each remove\n            const records = [...this._databaseRecordContext.getBucket(bucketIndex)];\n            const signal = anySignal(abortSignal, this._abortController.signal);\n            try {\n                for (const record of records) {\n                    if (!this.enabled) {\n                        return;\n                    }\n                    if (record.locked) {\n                        continue;\n                    }\n                    try {\n                        record.locked = true;\n                        this.emit('before-send', record);\n                        const result = record.type === 'report'\n                            ? await this._requestHandler.send(record.data, record.attachments, signal)\n                            : await this._requestHandler.sendAttachment(record.rxid, record.attachment, signal);\n                        this.emit('after-send', record, result);\n                        if (result.status === 'Ok' ||\n                            result.status === 'Unsupported' ||\n                            result.status === 'Report skipped') {\n                            this.remove(record);\n                            continue;\n                        }\n                        this._databaseRecordContext.increaseBucket(bucketIndex);\n                        return;\n                    }\n                    finally {\n                        record.locked = false;\n                    }\n                }\n            }\n            finally {\n                signal.dispose();\n            }\n        }\n    }\n    /**\n     * Prepare database to insert records\n     * @param forRecords records for which to update the database\n     */\n    prepareDatabase(forRecords) {\n        const dropLimits = { ...this._recordLimits };\n        for (const record of forRecords) {\n            dropLimits[record.type]--;\n        }\n        const dropped = this._databaseRecordContext.dropOverLimits(dropLimits);\n        this.remove(dropped);\n    }\n    async loadReports() {\n        const records = await this._storageProvider.get();\n        // limit only non-attachment records\n        const countByType = {\n            attachment: 0,\n            report: 0,\n        };\n        const recordsToAdd = [];\n        const recordsToRemove = [];\n        for (const record of records) {\n            if (countByType[record.type] >= this._recordLimits[record.type]) {\n                recordsToRemove.push(record);\n            }\n            else {\n                recordsToAdd.push(record);\n                countByType[record.type]++;\n            }\n        }\n        // delete old records before adding them to the database\n        if (recordsToRemove.length) {\n            this.remove(recordsToRemove);\n        }\n        this.prepareDatabase(recordsToAdd);\n        this._databaseRecordContext.load(recordsToAdd);\n        for (const record of recordsToAdd) {\n            this.lockSessionWithRecord(record);\n            this.emit('added', record);\n        }\n    }\n    async setupDatabaseAutoSend() {\n        if (!this._enabled) {\n            return;\n        }\n        if (this._options?.autoSend === false) {\n            return;\n        }\n        const sendDatabaseReports = async () => {\n            await this.send();\n        };\n        this._intervalId = setInterval(sendDatabaseReports, this._retryInterval);\n        unrefInterval(this._intervalId);\n        await this.send();\n    }\n    lockSessionWithRecord(record) {\n        if (!this._sessionFiles) {\n            return;\n        }\n        const sessionId = record.sessionId;\n        if (typeof sessionId !== 'string') {\n            this._sessionFiles.lockPreviousSessions(record.id);\n            return;\n        }\n        const session = this._sessionFiles.getSessionWithId(sessionId);\n        session?.lock(record.id);\n    }\n}\n\nfunction isFileAttachment(attachment) {\n    return 'filePath' in attachment && typeof attachment.filePath === 'string';\n}\n\nclass AttachmentBacktraceDatabaseFileRecord {\n    type = 'attachment';\n    id;\n    rxid;\n    timestamp;\n    attachment;\n    sessionId;\n    locked;\n    constructor(record) {\n        this.attachment = record.attachment;\n        this.id = record.id;\n        this.timestamp = record.timestamp;\n        this.rxid = record.rxid;\n        this.sessionId = record.sessionId;\n        // make sure the database record stored in the database directory\n        // is never locked. By doing this, we want to be sure once we load\n        // the record once again, the record will be available for future usage\n        this.locked = false;\n    }\n    static fromRecord(record) {\n        return new AttachmentBacktraceDatabaseFileRecord(record);\n    }\n    static fromJson(json, fileSystem) {\n        try {\n            const record = typeof json === 'string' ? JSON.parse(json) : json;\n            if (!isFileAttachment(record.attachment)) {\n                return undefined;\n            }\n            if (!fileSystem.existsSync(record.attachment.filePath)) {\n                return undefined;\n            }\n            const attachment = fileSystem.createAttachment(record.attachment.filePath, record.attachment.name);\n            return new AttachmentBacktraceDatabaseFileRecord({\n                ...record,\n                attachment,\n            });\n        }\n        catch {\n            return undefined;\n        }\n    }\n}\n\nclass ReportBacktraceDatabaseFileRecord {\n    attachments;\n    type = 'report';\n    data;\n    id;\n    timestamp;\n    sessionId;\n    locked;\n    constructor(record, attachments) {\n        this.attachments = attachments;\n        this.data = record.data;\n        this.id = record.id;\n        this.timestamp = record.timestamp;\n        this.sessionId = record.sessionId;\n        // make sure the database record stored in the database directory\n        // is never locked. By doing this, we want to be sure once we load\n        // the record once again, the record will be available for future usage\n        this.locked = false;\n    }\n    static fromRecord(record) {\n        return new ReportBacktraceDatabaseFileRecord(record, record.attachments.filter(isFileAttachment));\n    }\n    static fromJson(json, fileSystem) {\n        try {\n            const record = typeof json === 'string' ? JSON.parse(json) : json;\n            const attachments = record.attachments\n                ? record.attachments\n                    .filter(isFileAttachment)\n                    .map((n) => fileSystem.createAttachment(n.filePath, n.name))\n                : [];\n            return new ReportBacktraceDatabaseFileRecord(record, attachments);\n        }\n        catch {\n            return undefined;\n        }\n    }\n}\n\nconst BacktraceDatabaseFileRecord = {\n    fromRecord(record) {\n        switch (record.type) {\n            case 'attachment':\n                return AttachmentBacktraceDatabaseFileRecord.fromRecord(record);\n            case 'report':\n                return ReportBacktraceDatabaseFileRecord.fromRecord(record);\n            default:\n                throw new Error('unknown record type');\n        }\n    },\n    fromJson(json, fileSystem) {\n        try {\n            const record = JSON.parse(json);\n            switch (record.type) {\n                case 'attachment':\n                    return AttachmentBacktraceDatabaseFileRecord.fromJson(record, fileSystem);\n                case 'report':\n                    return ReportBacktraceDatabaseFileRecord.fromJson(record, fileSystem);\n                default:\n                    return undefined;\n            }\n        }\n        catch {\n            return undefined;\n        }\n    },\n};\n\nclass BacktraceDatabaseFileStorageProvider {\n    _fileSystem;\n    _path;\n    _enabled = true;\n    RECORD_SUFFIX = '-record.json';\n    constructor(_fileSystem, _path) {\n        this._fileSystem = _fileSystem;\n        this._path = _path;\n    }\n    /**\n     * Create a provider if provided options are valid\n     * @param options database configuration\n     * @returns database file storage provider\n     */\n    static createIfValid(fileSystem, options) {\n        if (!options) {\n            return undefined;\n        }\n        if (!options.enable) {\n            return undefined;\n        }\n        if (options.enable && !options.path) {\n            throw new Error('Missing mandatory path to the database. Please define the database.path option in the configuration.');\n        }\n        return new BacktraceDatabaseFileStorageProvider(fileSystem, options.path);\n    }\n    start() {\n        // make sure by mistake we don't create anything or start any operation\n        if (this._enabled === false) {\n            return false;\n        }\n        return true;\n    }\n    delete(record) {\n        const recordPath = this.getRecordPath(record.id);\n        return this.unlinkRecord(recordPath);\n    }\n    add(record) {\n        const recordPath = this.getRecordPath(record.id);\n        try {\n            this._fileSystem.writeFileSync(recordPath, JSON.stringify(BacktraceDatabaseFileRecord.fromRecord(record), jsonEscaper()));\n            return true;\n        }\n        catch {\n            return false;\n        }\n    }\n    async get() {\n        const databaseFiles = await this._fileSystem.readDir(this._path);\n        const recordNames = databaseFiles\n            .filter((file) => file.endsWith(this.RECORD_SUFFIX))\n            .map((f) => this._path + '/' + f);\n        const records = [];\n        for (const recordName of recordNames) {\n            try {\n                const recordJson = await this._fileSystem.readFile(recordName);\n                const record = BacktraceDatabaseFileRecord.fromJson(recordJson, this._fileSystem);\n                if (!record) {\n                    await this._fileSystem.unlink(recordName);\n                    continue;\n                }\n                records.push(record);\n            }\n            catch {\n                await this._fileSystem.unlink(recordName);\n            }\n        }\n        return records;\n    }\n    unlinkRecord(recordPath) {\n        if (!this._fileSystem.existsSync(recordPath)) {\n            return false;\n        }\n        try {\n            this._fileSystem.unlinkSync(recordPath);\n            return true;\n        }\n        catch {\n            return false;\n        }\n    }\n    getRecordPath(id) {\n        return this._path + '/' + `${id}${this.RECORD_SUFFIX}`;\n    }\n}\n\nclass MetricsEvent {\n    metricGroupName;\n    metricGroupValue;\n    attributes;\n    id = IdGenerator.uuid();\n    constructor(metricGroupName, metricGroupValue, attributes = {}) {\n        this.metricGroupName = metricGroupName;\n        this.metricGroupValue = metricGroupValue;\n        this.attributes = attributes;\n    }\n    toJSON() {\n        return {\n            timestamp: TimeHelper.toTimestampInSec(TimeHelper.now()),\n            attributes: this.attributes,\n            [this.metricGroupName]: this.metricGroupValue,\n        };\n    }\n}\n\nclass SummedEvent extends MetricsEvent {\n    constructor(metricGroupName, attributes = {}) {\n        super('metric_group', metricGroupName, attributes);\n    }\n}\n\nclass UniqueEvent extends MetricsEvent {\n    constructor(attributes) {\n        super('unique', ['guid'], attributes);\n    }\n}\n\nclass BacktraceMetrics {\n    _options;\n    _sessionProvider;\n    _attributeManager;\n    _summedEventsSubmissionQueue;\n    _uniqueEventsSubmissionQueue;\n    /**\n     * Returns current session id.\n     */\n    get sessionId() {\n        return this._sessionProvider.sessionId;\n    }\n    /**\n     * Default metrics submission interval. The variable defines how often metrics will be sent to metrics system.\n     */\n    DEFAULT_UPDATE_INTERVAL = TimeHelper.convertSecondsToMilliseconds(30 * 60);\n    DEFAULT_SERVER_URL = 'https://events.backtrace.io';\n    metricsHost;\n    _updateInterval;\n    _updateIntervalId;\n    _abortController;\n    constructor(_options, _sessionProvider, _attributeManager, _summedEventsSubmissionQueue, _uniqueEventsSubmissionQueue) {\n        this._options = _options;\n        this._sessionProvider = _sessionProvider;\n        this._attributeManager = _attributeManager;\n        this._summedEventsSubmissionQueue = _summedEventsSubmissionQueue;\n        this._uniqueEventsSubmissionQueue = _uniqueEventsSubmissionQueue;\n        this.metricsHost = this._options.metricsSubmissionUrl ?? this.DEFAULT_SERVER_URL;\n        this._updateInterval = this._options.autoSendInterval ?? this.DEFAULT_UPDATE_INTERVAL;\n        this._abortController = createAbortController();\n    }\n    /**\n     * Starts metrics submission.\n     */\n    initialize() {\n        if (!this._sessionProvider.newSession) {\n            return;\n        }\n        this.addSummedEvent('Application Launches');\n        this.handleAbort(() => this.send(this._abortController.signal));\n        if (this._updateInterval === 0) {\n            return;\n        }\n        this._updateIntervalId = setInterval(() => {\n            this.handleAbort(() => this.send(this._abortController.signal));\n        }, this._updateInterval);\n        unrefInterval(this._updateIntervalId);\n    }\n    /**\n     * Returns total number of events in the submission queue.\n     */\n    count() {\n        return this._summedEventsSubmissionQueue?.total ?? 0 + this._uniqueEventsSubmissionQueue?.total ?? 0;\n    }\n    /**\n     * Add summed event to next Backtrace Metrics request.\n     * @param metricName Summed event name.\n     * @param eventAttributes event attributes.\n     */\n    addSummedEvent(metricName, eventAttributes = {}) {\n        if (!metricName) {\n            return false;\n        }\n        const attributes = this.convertAttributes({\n            ...this._attributeManager.get().attributes,\n            ...ReportDataBuilder.build(eventAttributes ?? {}).attributes,\n        });\n        this._summedEventsSubmissionQueue.add(new SummedEvent(metricName, attributes));\n        return true;\n    }\n    /**\n     * Sends event to the metrics system.\n     */\n    async send(abortSignal) {\n        if (!this._sessionProvider.shouldSend()) {\n            return false;\n        }\n        await Promise.all([this.sendUniqueEvent(abortSignal), this._summedEventsSubmissionQueue.send(abortSignal)]);\n        this._sessionProvider.afterMetricsSubmission();\n        return true;\n    }\n    /**\n     * Cleans up metrics interface.\n     */\n    dispose() {\n        this._abortController.abort();\n        if (this._updateIntervalId) {\n            clearInterval(this._updateIntervalId);\n        }\n        this._uniqueEventsSubmissionQueue.dispose && this._uniqueEventsSubmissionQueue.dispose();\n        this._summedEventsSubmissionQueue.dispose && this._summedEventsSubmissionQueue.dispose();\n    }\n    async sendUniqueEvent(abortSignal) {\n        // always add the same unique event before send.\n        const { attributes } = this._attributeManager.get();\n        this._uniqueEventsSubmissionQueue.add(new UniqueEvent(this.convertAttributes(attributes)));\n        await this._uniqueEventsSubmissionQueue.send(abortSignal);\n    }\n    /**\n     * Event aggregators expecting to retrieve attributes in a string format. They also\n     * don't expect to retrieve null/undefined as attribute values.\n     */\n    convertAttributes(attributes) {\n        return Object.keys(attributes)\n            .filter((n) => attributes[n] != null)\n            .reduce((acc, n) => {\n            acc[n] = attributes[n]?.toString();\n            return acc;\n        }, {});\n    }\n    async handleAbort(fn) {\n        try {\n            await fn();\n            return true;\n        }\n        catch (err) {\n            if (err instanceof AbortError) {\n                return false;\n            }\n            throw err;\n        }\n    }\n}\n\nclass Delay {\n    /**\n     * Promise set timeout wrapper.\n     * @param timeout timeout in ms\n     * @param signal abort signal\n     */\n    static wait(timeout, signal) {\n        return new Promise((resolve, reject) => {\n            // intervalId has to be defined here,\n            // as abortCallback can execute before setTimeout is executed\n            // eslint-disable-next-line prefer-const\n            let intervalId;\n            function abortCallback() {\n                clearTimeout(intervalId);\n                reject(new AbortError());\n            }\n            if (signal?.aborted) {\n                return abortCallback();\n            }\n            intervalId = setTimeout(() => {\n                signal?.removeEventListener('abort', abortCallback);\n                resolve();\n            }, timeout);\n            signal?.addEventListener('abort', abortCallback);\n        });\n    }\n}\n\nclass MetricsSubmissionQueue {\n    _submissionUrl;\n    _eventName;\n    _requestHandler;\n    _metricMetadata;\n    maximumEvents;\n    get total() {\n        return this._events.length;\n    }\n    get submissionUrl() {\n        return this._submissionUrl;\n    }\n    DELAY_BETWEEN_REQUESTS = TimeHelper.convertSecondsToMilliseconds(10);\n    _events = [];\n    _numberOfDroppedRequests = 0;\n    _abortController;\n    MAXIMUM_NUMBER_OF_ATTEMPTS = 3;\n    constructor(_submissionUrl, _eventName, _requestHandler, _metricMetadata, maximumEvents = 50) {\n        this._submissionUrl = _submissionUrl;\n        this._eventName = _eventName;\n        this._requestHandler = _requestHandler;\n        this._metricMetadata = _metricMetadata;\n        this.maximumEvents = maximumEvents;\n        this._abortController = createAbortController();\n    }\n    add(event) {\n        this._events.push(event);\n        if (this.reachedLimit()) {\n            this.send();\n        }\n    }\n    async send(abortSignal) {\n        const eventsToProcess = this._events.splice(0);\n        const signal = anySignal(abortSignal, this._abortController.signal);\n        try {\n            return await this.submit(eventsToProcess, signal);\n        }\n        finally {\n            signal.dispose();\n        }\n    }\n    dispose() {\n        this._abortController.abort();\n    }\n    async submit(events, abortSignal) {\n        for (let attempts = 0; attempts < this.MAXIMUM_NUMBER_OF_ATTEMPTS; attempts++) {\n            const response = await this._requestHandler.post(this._submissionUrl, JSON.stringify({\n                ...this._metricMetadata,\n                [this._eventName]: events,\n                metadata: {\n                    dropped_events: this._numberOfDroppedRequests,\n                },\n            }, jsonEscaper()), abortSignal);\n            if (response.status === 'Ok') {\n                this._numberOfDroppedRequests = 0;\n                return;\n            }\n            this._numberOfDroppedRequests++;\n            await Delay.wait(2 ** attempts * this.DELAY_BETWEEN_REQUESTS, abortSignal);\n        }\n        // if the code reached this line, it means, we couldn't send data to server\n        // we need to try to return events to the queue and try to send it once again later.\n        this.returnEventsIfPossible(events);\n    }\n    returnEventsIfPossible(events) {\n        if (this.maximumEvents < this._events.length + events.length) {\n            return;\n        }\n        // push events to the beginning of the queue\n        this._events.unshift(...events);\n    }\n    reachedLimit() {\n        return this.maximumEvents === this._events.length && this.maximumEvents !== 0;\n    }\n}\n\nclass MetricsBuilder {\n    _options;\n    _sessionProvider;\n    _attributeManager;\n    _requestHandler;\n    /**\n     * Default metrics submission interval. The variable defines how often metrics will be sent to metrics system\n     * By default 30 mins.\n     */\n    DEFAULT_UPDATE_INTERVAL = TimeHelper.convertSecondsToMilliseconds(30 * 60);\n    APPLICATION_VERSION_ATTRIBUTE = 'application.version';\n    APPLICATION_ATTRIBUTE = 'application';\n    constructor(_options, _sessionProvider, _attributeManager, _requestHandler) {\n        this._options = _options;\n        this._sessionProvider = _sessionProvider;\n        this._attributeManager = _attributeManager;\n        this._requestHandler = _requestHandler;\n    }\n    build(uniqueEventsSubmissionQueue, summedEventsSubmissionQueue) {\n        const metricsOptions = {\n            ...this.optionsWithDefaults(),\n            ...(this._options.metrics ?? {}),\n        };\n        if (!metricsOptions.enable) {\n            return undefined;\n        }\n        const applicationInfo = this.verifyAttributeSetup();\n        if (!applicationInfo) {\n            return undefined;\n        }\n        uniqueEventsSubmissionQueue =\n            uniqueEventsSubmissionQueue ??\n                this.createUniqueEventSubmissionQueue(metricsOptions.metricsSubmissionUrl, applicationInfo);\n        if (!uniqueEventsSubmissionQueue) {\n            return undefined;\n        }\n        summedEventsSubmissionQueue =\n            summedEventsSubmissionQueue ??\n                this.createSummedEventSubmissionQueue(metricsOptions.metricsSubmissionUrl, applicationInfo);\n        if (!summedEventsSubmissionQueue) {\n            return undefined;\n        }\n        return new BacktraceMetrics(metricsOptions, this._sessionProvider, this._attributeManager, summedEventsSubmissionQueue, uniqueEventsSubmissionQueue);\n    }\n    verifyAttributeSetup() {\n        const { attributes } = this._attributeManager.get();\n        const application = attributes[this.APPLICATION_ATTRIBUTE];\n        const applicationVersion = attributes[this.APPLICATION_VERSION_ATTRIBUTE];\n        if (!application || !applicationVersion) {\n            return undefined;\n        }\n        return { application, applicationVersion };\n    }\n    createUniqueEventSubmissionQueue(metricsHost, applicationInfo) {\n        const uniqueEventsSubmissionUrl = MetricsUrlInformation.generateUniqueEventsUrl(metricsHost, this._options.url, this._options.token);\n        if (!uniqueEventsSubmissionUrl) {\n            return undefined;\n        }\n        return new MetricsSubmissionQueue(uniqueEventsSubmissionUrl, 'unique_events', this._requestHandler, {\n            [this.APPLICATION_ATTRIBUTE]: applicationInfo.application,\n            appversion: applicationInfo.applicationVersion,\n        }, this._options?.metrics?.size);\n    }\n    createSummedEventSubmissionQueue(metricsHost, applicationInfo) {\n        const summedEventsSubmissionUrl = MetricsUrlInformation.generateSummedEventsUrl(metricsHost, this._options.url, this._options.token);\n        if (!summedEventsSubmissionUrl) {\n            return undefined;\n        }\n        return new MetricsSubmissionQueue(summedEventsSubmissionUrl, 'summed_events', this._requestHandler, {\n            [this.APPLICATION_ATTRIBUTE]: applicationInfo.application,\n            appversion: applicationInfo.applicationVersion,\n        }, this._options?.metrics?.size);\n    }\n    optionsWithDefaults() {\n        return {\n            enable: true,\n            autoSendInterval: this.DEFAULT_UPDATE_INTERVAL,\n            metricsSubmissionUrl: 'https://events.backtrace.io',\n            size: 50,\n        };\n    }\n}\n\nclass SingleSessionProvider {\n    newSession = true;\n    sessionId = IdGenerator.uuid();\n    _lastActive = 0;\n    get lastActive() {\n        return this._lastActive;\n    }\n    afterMetricsSubmission() {\n        this._lastActive = TimeHelper.now();\n    }\n    /**\n     * Allow to alway send metrics - in the single session there is no reason\n     * to skip sending metrics.\n     */\n    shouldSend() {\n        return true;\n    }\n}\n\nclass RateLimitWatcher {\n    /**\n     * Time the single report can stay in the queue in ms.\n     */\n    MAXIMUM_TIME_IN_QUEUE = 60 * 1000;\n    _reportPerMin;\n    _watcherEnable;\n    _reportQueue = [];\n    get enabled() {\n        return this._watcherEnable;\n    }\n    constructor(reportPerMin) {\n        if (reportPerMin == null) {\n            reportPerMin = 0;\n        }\n        if (reportPerMin < 0) {\n            throw new Error('ReportPerMinute argument must be greater or equal to zero');\n        }\n        this._reportPerMin = reportPerMin;\n        this._watcherEnable = reportPerMin > 0;\n    }\n    skipReport() {\n        const time = TimeHelper.now();\n        if (!this._watcherEnable) {\n            return false;\n        }\n        this.clear(time);\n        if (this._reportQueue.length >= this._reportPerMin) {\n            return true;\n        }\n        this._reportQueue.push(time);\n        return false;\n    }\n    clear(time) {\n        if (this._reportQueue.length === 0) {\n            return;\n        }\n        // we don't have anything to remove\n        if (time - this._reportQueue[0] < this.MAXIMUM_TIME_IN_QUEUE) {\n            return;\n        }\n        for (let queueIndex = this._reportQueue.length; queueIndex != 0; queueIndex--) {\n            if (time - this._reportQueue[queueIndex - 1] > this.MAXIMUM_TIME_IN_QUEUE) {\n                this._reportQueue = this._reportQueue.slice(queueIndex);\n                return;\n            }\n        }\n    }\n}\n\nclass BacktraceCoreClient extends Events {\n    /**\n     * Backtrace client instance\n     */\n    static _instance;\n    /**\n     * Determines if the client is enabled.\n     */\n    get enabled() {\n        return this._enabled;\n    }\n    /**\n     * Current session id\n     */\n    get sessionId() {\n        return this._sessionProvider.sessionId;\n    }\n    /**\n     * Backtrace SDK name\n     */\n    get agent() {\n        return this._sdkOptions.agent;\n    }\n    /**\n     * Backtrace SDK version\n     */\n    get agentVersion() {\n        return this._sdkOptions.agentVersion;\n    }\n    /**\n     * Available cached client attributes\n     */\n    get attributes() {\n        return this.attributeManager.get().attributes;\n    }\n    /**\n     * Available cached client annotatations\n     */\n    get annotations() {\n        return this.attributeManager.get().annotations;\n    }\n    get metrics() {\n        return this._modules.get(BacktraceMetrics);\n    }\n    get breadcrumbs() {\n        return this._modules.get(BreadcrumbsManager);\n    }\n    get database() {\n        return this._modules.get(BacktraceDatabase);\n    }\n    /**\n     * Client cached attachments\n     */\n    get attachments() {\n        return this.attachmentManager.get();\n    }\n    /**\n     * Modules used by the client\n     */\n    get modules() {\n        return this._modules;\n    }\n    get sessionFiles() {\n        return this._modules.get(SessionFiles);\n    }\n    options;\n    attributeManager;\n    attachmentManager;\n    fileSystem;\n    _modules = new Map();\n    _dataBuilder;\n    _reportSubmission;\n    _rateLimitWatcher;\n    _sessionProvider;\n    _sdkOptions;\n    _requestHandler;\n    _enabled = false;\n    constructor(setup) {\n        super();\n        this.options = setup.options;\n        this.fileSystem = setup.fileSystem;\n        this._sdkOptions = setup.sdkOptions;\n        this._sessionProvider = setup.sessionProvider ?? new SingleSessionProvider();\n        this._reportSubmission =\n            setup.reportSubmission ?? new RequestBacktraceReportSubmission(this.options, setup.requestHandler);\n        this._rateLimitWatcher = new RateLimitWatcher(this.options.rateLimit);\n        this._requestHandler = setup.requestHandler;\n        const attributeProviders = [\n            new ClientAttributeProvider(this.agent, this.agentVersion, this._sessionProvider.sessionId),\n        ];\n        if (setup.attributeProviders) {\n            attributeProviders.push(...setup.attributeProviders);\n        }\n        if (this.options.userAttributes) {\n            attributeProviders.push(new UserAttributeProvider(this.options.userAttributes));\n        }\n        this.attributeManager = new AttributeManager(attributeProviders);\n        this.attachmentManager = new AttachmentManager();\n        if (this.options.attachments) {\n            this.attachmentManager.add(...this.options.attachments);\n        }\n        const stackTraceConverter = setup.stackTraceConverter ?? new V8StackTraceConverter();\n        this._dataBuilder = new BacktraceDataBuilder(this._sdkOptions, stackTraceConverter, this.attributeManager, new DebugIdProvider(stackTraceConverter, setup.debugIdMapProvider));\n        if (this.options?.database?.enable === true && setup.fileSystem) {\n            const provider = BacktraceDatabaseFileStorageProvider.createIfValid(setup.fileSystem, this.options.database);\n            if (this.fileSystem) {\n                const sessionFiles = new SessionFiles(this.fileSystem, this.options.database.path, this.sessionId, this.options.database.maximumOldSessions ?? 1);\n                this._modules.set(SessionFiles, sessionFiles);\n            }\n            if (provider) {\n                const database = new BacktraceDatabase(this.options.database, provider, this._reportSubmission, this.sessionFiles);\n                this._modules.set(BacktraceDatabase, database);\n            }\n        }\n        const metrics = new MetricsBuilder(this.options, this._sessionProvider, this.attributeManager, setup.requestHandler).build(setup.uniqueMetricsQueue, setup.summedMetricsQueue);\n        if (metrics) {\n            this._modules.set(BacktraceMetrics, metrics);\n        }\n        if (this.options.breadcrumbs?.enable !== false) {\n            const breadcrumbsManager = new BreadcrumbsManager(this.options?.breadcrumbs, setup.breadcrumbsSetup);\n            this._modules.set(BreadcrumbsManager, breadcrumbsManager);\n        }\n        if (setup.modules) {\n            for (const module of setup.modules) {\n                this.addModule(module);\n            }\n        }\n    }\n    initialize() {\n        this.validateAttributes();\n        if (this.fileSystem && this.options.database?.createDatabaseDirectory) {\n            if (!this.options.database.path) {\n                throw new Error('Missing mandatory path to the database. Please define the database.path option in the configuration.');\n            }\n            this.fileSystem.createDirSync(this.options.database?.path);\n        }\n        for (const module of this._modules.values()) {\n            if (module.bind) {\n                module.bind(this.getModuleBindData());\n            }\n            if (module.initialize) {\n                module.initialize();\n            }\n        }\n        this.sessionFiles?.clearPreviousSessions();\n        this._enabled = true;\n        BacktraceCoreClient._instance = this;\n    }\n    addAttribute(attributes) {\n        this.attributeManager.add(attributes);\n    }\n    addAttachment(...attachments) {\n        this.attachmentManager.add(...attachments);\n    }\n    // This function CANNOT be an async function due to possible async state machine stack frame inclusion, which breaks the skip stacks\n    send(data, reportAttributesOrAbortSignal, reportAttachments = [], abortSignal) {\n        if (!this._enabled) {\n            return Promise.resolve(BacktraceReportSubmissionResult.SdkDisabled());\n        }\n        if (this._rateLimitWatcher.skipReport()) {\n            return Promise.resolve(BacktraceReportSubmissionResult.OnLimitReached('Client'));\n        }\n        // If data is BacktraceReport, we know that the second argument should be only AbortSignal\n        const reportAttributes = !this.isReport(data)\n            ? reportAttributesOrAbortSignal\n            : undefined;\n        // If data is BacktraceReport, we know that the second argument should be only AbortSignal\n        abortSignal = !this.isReport(data) ? abortSignal : reportAttributesOrAbortSignal;\n        const report = this.isReport(data)\n            ? data\n            : new BacktraceReport(data, reportAttributes, [], {\n                skipFrames: this.skipFrameOnMessage(data),\n            });\n        this.emit('before-skip', report);\n        if (this.options.skipReport && this.options.skipReport(report)) {\n            return Promise.resolve(BacktraceReportSubmissionResult.ReportSkipped());\n        }\n        const backtraceData = this.generateSubmissionData(report);\n        if (!backtraceData) {\n            return Promise.resolve(BacktraceReportSubmissionResult.ReportSkipped());\n        }\n        const submissionAttachments = this.generateSubmissionAttachments(report, reportAttachments);\n        this.emit('before-send', report, backtraceData, submissionAttachments);\n        return this._reportSubmission\n            .send(backtraceData, submissionAttachments, abortSignal)\n            .then((submissionResult) => {\n            this.emit('after-send', report, backtraceData, submissionAttachments, submissionResult);\n            return submissionResult;\n        });\n    }\n    /**\n     * Disposes the client and all client callbacks\n     */\n    dispose() {\n        this._enabled = false;\n        for (const module of this._modules.values()) {\n            if (module.dispose) {\n                module.dispose();\n            }\n        }\n        BacktraceCoreClient.destroy();\n    }\n    addModule(typeOrModule, module) {\n        let type;\n        if (typeof typeOrModule === 'function') {\n            type = typeOrModule;\n        }\n        else {\n            module = typeOrModule;\n            type = Object.getPrototypeOf(module);\n        }\n        if (!module) {\n            throw new Error('Module implementation is required.');\n        }\n        this._modules.set(type, module);\n        if (this._enabled) {\n            module.bind && module.bind(this.getModuleBindData());\n            module.initialize && module.initialize();\n        }\n    }\n    generateSubmissionData(report) {\n        const backtraceData = this._dataBuilder.build(report);\n        if (!this.options.beforeSend) {\n            return backtraceData;\n        }\n        return this.options.beforeSend(backtraceData);\n    }\n    generateSubmissionAttachments(report, reportAttachments) {\n        return [...this.attachmentManager.get(), ...(report.attachments ?? []), ...(reportAttachments ?? [])];\n    }\n    skipFrameOnMessage(data) {\n        return typeof data === 'string' ? 1 : 0;\n    }\n    isReport(data) {\n        return data instanceof BacktraceReport;\n    }\n    getModuleBindData() {\n        return {\n            client: this,\n            options: this.options,\n            attributeManager: this.attributeManager,\n            attachmentManager: this.attachmentManager,\n            reportSubmission: this._reportSubmission,\n            requestHandler: this._requestHandler,\n            database: this.database,\n            sessionFiles: this.sessionFiles,\n            fileSystem: this.fileSystem,\n        };\n    }\n    static destroy() {\n        this._instance = undefined;\n    }\n    validateAttributes() {\n        function validateApplicationAndVersion(attributes) {\n            if (!attributes['application'] || !attributes['application.version']) {\n                return 'application and application.version attributes must be defined.';\n            }\n        }\n        // Validate scoped attributes first. If they return no errors, there is no point\n        // in checking all attributes, which resolving of may be slower.\n        const scoped = this.attributeManager.get('scoped');\n        const scopedError = validateApplicationAndVersion(scoped.attributes);\n        if (!scopedError) {\n            return;\n        }\n        const allAttributes = this.attributeManager.get();\n        const error = validateApplicationAndVersion(allAttributes.attributes);\n        if (!error) {\n            return;\n        }\n        throw new Error(error);\n    }\n}\n\nclass BacktraceCoreClientBuilder {\n    clientSetup;\n    constructor(clientSetup) {\n        this.clientSetup = clientSetup;\n    }\n    addAttributeProvider(provider) {\n        if (!this.clientSetup.attributeProviders) {\n            this.clientSetup.attributeProviders = [provider];\n        }\n        else {\n            this.clientSetup.attributeProviders.push(provider);\n        }\n        return this;\n    }\n    useBreadcrumbSubscriber(breadcrumbSubscriber) {\n        if (!this.clientSetup.breadcrumbsSetup) {\n            this.clientSetup.breadcrumbsSetup = {};\n        }\n        if (!this.clientSetup.breadcrumbsSetup.subscribers) {\n            this.clientSetup.breadcrumbsSetup.subscribers = [breadcrumbSubscriber];\n        }\n        else {\n            this.clientSetup.breadcrumbsSetup.subscribers.push(breadcrumbSubscriber);\n        }\n        return this;\n    }\n    useBreadcrumbsStorage(storage) {\n        if (!this.clientSetup.breadcrumbsSetup) {\n            this.clientSetup.breadcrumbsSetup = {};\n        }\n        if (typeof storage === 'function') {\n            this.clientSetup.breadcrumbsSetup.storage = storage;\n        }\n        else {\n            this.clientSetup.breadcrumbsSetup.storage = () => storage;\n        }\n        return this;\n    }\n    useSessionProvider(sessionProvider) {\n        this.clientSetup.sessionProvider = sessionProvider;\n        return this;\n    }\n    useRequestHandler(handler) {\n        this.clientSetup.requestHandler = handler;\n        return this;\n    }\n    useStackTraceConverter(stackTraceConverter) {\n        this.clientSetup.stackTraceConverter = stackTraceConverter;\n        return this;\n    }\n    useFileSystem(fileSystem) {\n        this.clientSetup.fileSystem = fileSystem;\n        return this;\n    }\n    useReportSubmission(reportSubmission) {\n        this.clientSetup.reportSubmission = reportSubmission;\n        return this;\n    }\n    useSummedMetricsQueue(queue) {\n        this.clientSetup.summedMetricsQueue = queue;\n        return this;\n    }\n    useUniqueMetricsQueue(queue) {\n        this.clientSetup.uniqueMetricsQueue = queue;\n        return this;\n    }\n    useModule(module) {\n        if (!this.clientSetup.modules) {\n            this.clientSetup.modules = [module];\n        }\n        else {\n            this.clientSetup.modules.push(module);\n        }\n        return this;\n    }\n}\n\nclass BacktraceStringAttachment {\n    name;\n    data;\n    constructor(name, data) {\n        this.name = name;\n        this.data = data;\n    }\n    get() {\n        return this.data;\n    }\n}\n\nclass BacktraceUint8ArrayAttachment {\n    name;\n    data;\n    constructor(name, data) {\n        this.name = name;\n        this.data = data;\n    }\n    get() {\n        return new Blob([this.data.buffer]);\n    }\n}\n\nconst ATTRIBUTE_FILE_NAME = 'bt-attributes';\nclass FileAttributeManager {\n    _fileSystem;\n    _fileName;\n    _attributeManager;\n    constructor(_fileSystem, _fileName) {\n        this._fileSystem = _fileSystem;\n        this._fileName = _fileName;\n    }\n    static create(fileSystem) {\n        return new FileAttributeManager(fileSystem);\n    }\n    static createFromSession(sessionFiles, fileSystem) {\n        const fileName = sessionFiles.getFileName(ATTRIBUTE_FILE_NAME);\n        return new FileAttributeManager(fileSystem, fileName);\n    }\n    initialize() {\n        this.saveAttributes();\n    }\n    bind({ attributeManager, sessionFiles }) {\n        if (this._fileName) {\n            throw new Error('This instance is already bound.');\n        }\n        if (!sessionFiles) {\n            return;\n        }\n        this._fileName = sessionFiles.getFileName(ATTRIBUTE_FILE_NAME);\n        this._attributeManager = attributeManager;\n        attributeManager.attributeEvents.on('scoped-attributes-updated', () => this.saveAttributes());\n    }\n    dispose() {\n        this._fileName = undefined;\n    }\n    async get() {\n        if (!this._fileName) {\n            return {};\n        }\n        try {\n            const content = await this._fileSystem.readFile(this._fileName);\n            return JSON.parse(content);\n        }\n        catch {\n            return {};\n        }\n    }\n    async saveAttributes() {\n        if (!this._fileName || !this._attributeManager) {\n            return;\n        }\n        const reportData = this._attributeManager.get('scoped');\n        await this._fileSystem.writeFile(this._fileName, JSON.stringify(reportData.attributes, jsonEscaper()));\n    }\n}\n\nconst SESSION_MARKER_PREFIX = 'bt-session';\nconst isDefined = (t) => !!t;\nclass SessionFiles {\n    _fileSystem;\n    _directory;\n    sessionId;\n    _maxPreviousLockedSessions;\n    timestamp;\n    _lockable;\n    marker;\n    _events = new Events();\n    _escapedSessionId;\n    _locks = new Set();\n    _previousSession;\n    _cleared = false;\n    constructor(_fileSystem, _directory, sessionId, _maxPreviousLockedSessions = 1, timestamp = Date.now(), _lockable = true) {\n        this._fileSystem = _fileSystem;\n        this._directory = _directory;\n        this.sessionId = sessionId;\n        this._maxPreviousLockedSessions = _maxPreviousLockedSessions;\n        this.timestamp = timestamp;\n        this._lockable = _lockable;\n        this._escapedSessionId = this.escapeFileName(sessionId);\n        this.marker = this.getFileName(SESSION_MARKER_PREFIX);\n    }\n    initialize() {\n        this.createSessionMarker();\n    }\n    getPreviousSession() {\n        if (this._previousSession) {\n            return this._previousSession;\n        }\n        const directoryFiles = this.readDirectoryFiles();\n        if (!directoryFiles.length) {\n            return undefined;\n        }\n        const sessionMarkers = directoryFiles\n            .filter((f) => f.startsWith(SESSION_MARKER_PREFIX))\n            .map((f) => this.getFileSession(f))\n            .filter(isDefined)\n            .sort((a, b) => b.timestamp - a.timestamp);\n        const currentSessionMarker = sessionMarkers.find((s) => s.sessionId === this.sessionId);\n        const lastSessionMarker = currentSessionMarker\n            ? sessionMarkers.filter(({ timestamp }) => currentSessionMarker.timestamp > timestamp)[0]\n            : sessionMarkers[0];\n        if (!lastSessionMarker) {\n            return undefined;\n        }\n        return (this._previousSession = new SessionFiles(this._fileSystem, this._directory, lastSessionMarker.sessionId, this._maxPreviousLockedSessions - 1, lastSessionMarker.timestamp, this._maxPreviousLockedSessions > 0));\n    }\n    getSessionWithId(sessionId) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let session = this;\n        while (session && session.sessionId !== sessionId) {\n            session = session.getPreviousSession();\n        }\n        return session;\n    }\n    getPreviousSessions(count = Infinity) {\n        const result = [];\n        let current = this.getPreviousSession();\n        while (current && count > 0) {\n            result.push(current);\n            count--;\n            current = current.getPreviousSession();\n        }\n        return result;\n    }\n    lockPreviousSessions(lockId) {\n        lockId = lockId ?? IdGenerator.uuid();\n        for (const session of this.getPreviousSessions(this._maxPreviousLockedSessions)) {\n            session.lock(lockId);\n        }\n        return lockId;\n    }\n    unlockPreviousSessions(lockId) {\n        for (const session of this.getPreviousSessions(this._maxPreviousLockedSessions)) {\n            session.unlock(lockId);\n        }\n    }\n    clearPreviousSessions() {\n        for (const session of this.getPreviousSessions()) {\n            session.clearSession();\n        }\n    }\n    getFileName(prefix) {\n        this.throwIfCleared();\n        return this._directory + '/' + `${this.escapeFileName(prefix)}_${this._escapedSessionId}_${this.timestamp}`;\n    }\n    getSessionFiles() {\n        this.throwIfCleared();\n        const files = this.readDirectoryFiles();\n        return files\n            .map((file) => this.getFileSession(file))\n            .filter(isDefined)\n            .filter(({ sessionId }) => sessionId === this.sessionId)\n            .map(({ file }) => this._directory + '/' + file);\n    }\n    clearSession() {\n        if (this._locks.size > 0) {\n            this._events.once('unlocked', () => this.clearSession());\n            return;\n        }\n        if (this._cleared) {\n            return;\n        }\n        try {\n            const sessionFiles = this.getSessionFiles();\n            for (const file of sessionFiles) {\n                this._fileSystem.unlinkSync(file);\n            }\n        }\n        catch {\n            // Don't propagate errors\n        }\n        finally {\n            this._cleared = true;\n        }\n    }\n    lock(lockId) {\n        if (this._cleared || !this._lockable) {\n            return;\n        }\n        lockId = lockId ?? IdGenerator.uuid();\n        this._locks.add(lockId);\n        return lockId;\n    }\n    unlock(lockId) {\n        this._locks.delete(lockId);\n        if (this._locks.size === 0) {\n            this._events.emit('unlocked');\n        }\n    }\n    getFileSession(file) {\n        const [escapedSessionId, rawTimestamp] = this.splitByOneChar(file, '_').slice(-2);\n        const timestamp = parseInt(rawTimestamp);\n        if (isNaN(timestamp)) {\n            return undefined;\n        }\n        return { file, escapedSessionId, timestamp, sessionId: this.unescapeFileName(escapedSessionId) };\n    }\n    readDirectoryFiles() {\n        try {\n            return this._fileSystem.readDirSync(this._directory);\n        }\n        catch {\n            return [];\n        }\n    }\n    createSessionMarker() {\n        this._fileSystem.writeFileSync(this.marker, '');\n    }\n    escapeFileName(name) {\n        return name.replace(/_/g, '__');\n    }\n    unescapeFileName(name) {\n        return name.replace(/__/g, '_');\n    }\n    splitByOneChar(str, char) {\n        const result = [];\n        let start = 0;\n        let index = str.indexOf(char);\n        while (index !== -1) {\n            if (str[index + 1] === char) {\n                index = str.indexOf(char, index + 2);\n            }\n            else {\n                result.push(str.substring(start, index));\n                start = index + 1;\n                index = str.indexOf(char, start);\n            }\n        }\n        result.push(str.substring(start));\n        return result;\n    }\n    throwIfCleared() {\n        if (this._cleared) {\n            throw new Error('This session files are cleared.');\n        }\n    }\n}\n\nconst SOURCE_DEBUG_ID_VARIABLE = '_btDebugIds';\nclass DebugIdProvider {\n    _stackTraceConverter;\n    _debugIdMapProvider;\n    _fileDebugIds;\n    constructor(_stackTraceConverter, _debugIdMapProvider) {\n        this._stackTraceConverter = _stackTraceConverter;\n        this._debugIdMapProvider = _debugIdMapProvider;\n        this._fileDebugIds = this.loadDebugIds();\n    }\n    getDebugId(file) {\n        const debugId = this._fileDebugIds[file];\n        if (debugId) {\n            return debugId;\n        }\n        // in case of dynamic require - lazy load dynamically debug ids\n        this._fileDebugIds = this.loadDebugIds();\n        return this._fileDebugIds[file];\n    }\n    loadDebugIds() {\n        const debugIdMap = this._debugIdMapProvider?.getDebugIdMap();\n        if (!debugIdMap) {\n            return {};\n        }\n        const message = new Error().message;\n        const result = {};\n        for (const [rawStack, debugId] of Object.entries(debugIdMap)) {\n            const frames = this._stackTraceConverter.convert(rawStack, message);\n            if (!frames.length) {\n                continue;\n            }\n            // The first frame will have the file's path\n            const frame = frames[0];\n            result[frame.library] = debugId;\n        }\n        return result;\n    }\n}\n\nclass VariableDebugIdMapProvider {\n    _variable;\n    constructor(_variable) {\n        this._variable = _variable;\n    }\n    getDebugIdMap() {\n        return this._variable[SOURCE_DEBUG_ID_VARIABLE] ?? {};\n    }\n}\n\nexport { ANONYMOUS_FUNCTION, AttachmentManager, BacktraceCoreApi, BacktraceCoreClient, BacktraceCoreClientBuilder, BacktraceDatabase, BacktraceReport, BacktraceReportSubmissionResult, BacktraceStringAttachment, BacktraceUint8ArrayAttachment, BreadcrumbLogLevel, BreadcrumbType, BreadcrumbsManager, ConnectionError, DEFAULT_TIMEOUT, DebugIdProvider, FileAttributeManager, IdGenerator, OverwritingArray, RequestBacktraceReportSubmission, SOURCE_DEBUG_ID_VARIABLE, SessionFiles, SingleSessionProvider, SubmissionUrlInformation, SummedEvent, TimeHelper, UNKNOWN_FRAME, V8StackTraceConverter, VariableDebugIdMapProvider, anySignal, defaultBreadcrumbsLogLevel, defaultBreadcurmbType, jsonEscaper };\n//# sourceMappingURL=bundle.mjs.map\n",null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n    return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n        var dispose, inner;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n            if (async) inner = dispose;\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    var r, s = 0;\r\n    function next() {\r\n        while (r = env.stack.pop()) {\r\n            try {\r\n                if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n                if (r.dispose) {\r\n                    var result = r.dispose.call(r.value);\r\n                    if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n                }\r\n                else s |= 1;\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport default {\r\n    __extends: __extends,\r\n    __assign: __assign,\r\n    __rest: __rest,\r\n    __decorate: __decorate,\r\n    __param: __param,\r\n    __metadata: __metadata,\r\n    __awaiter: __awaiter,\r\n    __generator: __generator,\r\n    __createBinding: __createBinding,\r\n    __exportStar: __exportStar,\r\n    __values: __values,\r\n    __read: __read,\r\n    __spread: __spread,\r\n    __spreadArrays: __spreadArrays,\r\n    __spreadArray: __spreadArray,\r\n    __await: __await,\r\n    __asyncGenerator: __asyncGenerator,\r\n    __asyncDelegator: __asyncDelegator,\r\n    __asyncValues: __asyncValues,\r\n    __makeTemplateObject: __makeTemplateObject,\r\n    __importStar: __importStar,\r\n    __importDefault: __importDefault,\r\n    __classPrivateFieldGet: __classPrivateFieldGet,\r\n    __classPrivateFieldSet: __classPrivateFieldSet,\r\n    __classPrivateFieldIn: __classPrivateFieldIn,\r\n    __addDisposableResource: __addDisposableResource,\r\n    __disposeResources: __disposeResources,\r\n};\r\n",null,null,null,null,"/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.38\n   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n   MIT License *//*\n   Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n   Supports browser & node.js environment. \n   Demo   : https://faisalman.github.io/ua-parser-js\n   Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n    'use strict';\n\n    //////////////\n    // Constants\n    /////////////\n\n\n    var LIBVERSION  = '1.0.38',\n        EMPTY       = '',\n        UNKNOWN     = '?',\n        FUNC_TYPE   = 'function',\n        UNDEF_TYPE  = 'undefined',\n        OBJ_TYPE    = 'object',\n        STR_TYPE    = 'string',\n        MAJOR       = 'major',\n        MODEL       = 'model',\n        NAME        = 'name',\n        TYPE        = 'type',\n        VENDOR      = 'vendor',\n        VERSION     = 'version',\n        ARCHITECTURE= 'architecture',\n        CONSOLE     = 'console',\n        MOBILE      = 'mobile',\n        TABLET      = 'tablet',\n        SMARTTV     = 'smarttv',\n        WEARABLE    = 'wearable',\n        EMBEDDED    = 'embedded',\n        UA_MAX_LENGTH = 500;\n\n    var AMAZON  = 'Amazon',\n        APPLE   = 'Apple',\n        ASUS    = 'ASUS',\n        BLACKBERRY = 'BlackBerry',\n        BROWSER = 'Browser',\n        CHROME  = 'Chrome',\n        EDGE    = 'Edge',\n        FIREFOX = 'Firefox',\n        GOOGLE  = 'Google',\n        HUAWEI  = 'Huawei',\n        LG      = 'LG',\n        MICROSOFT = 'Microsoft',\n        MOTOROLA  = 'Motorola',\n        OPERA   = 'Opera',\n        SAMSUNG = 'Samsung',\n        SHARP   = 'Sharp',\n        SONY    = 'Sony',\n        XIAOMI  = 'Xiaomi',\n        ZEBRA   = 'Zebra',\n        FACEBOOK    = 'Facebook',\n        CHROMIUM_OS = 'Chromium OS',\n        MAC_OS  = 'Mac OS';\n\n    ///////////\n    // Helper\n    //////////\n\n    var extend = function (regexes, extensions) {\n            var mergedRegexes = {};\n            for (var i in regexes) {\n                if (extensions[i] && extensions[i].length % 2 === 0) {\n                    mergedRegexes[i] = extensions[i].concat(regexes[i]);\n                } else {\n                    mergedRegexes[i] = regexes[i];\n                }\n            }\n            return mergedRegexes;\n        },\n        enumerize = function (arr) {\n            var enums = {};\n            for (var i=0; i<arr.length; i++) {\n                enums[arr[i].toUpperCase()] = arr[i];\n            }\n            return enums;\n        },\n        has = function (str1, str2) {\n            return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n        },\n        lowerize = function (str) {\n            return str.toLowerCase();\n        },\n        majorize = function (version) {\n            return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n        },\n        trim = function (str, len) {\n            if (typeof(str) === STR_TYPE) {\n                str = str.replace(/^\\s\\s*/, EMPTY);\n                return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n            }\n    };\n\n    ///////////////\n    // Map helper\n    //////////////\n\n    var rgxMapper = function (ua, arrays) {\n\n            var i = 0, j, k, p, q, matches, match;\n\n            // loop through all regexes maps\n            while (i < arrays.length && !matches) {\n\n                var regex = arrays[i],       // even sequence (0,2,4,..)\n                    props = arrays[i + 1];   // odd sequence (1,3,5,..)\n                j = k = 0;\n\n                // try matching uastring with regexes\n                while (j < regex.length && !matches) {\n\n                    if (!regex[j]) { break; }\n                    matches = regex[j++].exec(ua);\n\n                    if (!!matches) {\n                        for (p = 0; p < props.length; p++) {\n                            match = matches[++k];\n                            q = props[p];\n                            // check if given property is actually array\n                            if (typeof q === OBJ_TYPE && q.length > 0) {\n                                if (q.length === 2) {\n                                    if (typeof q[1] == FUNC_TYPE) {\n                                        // assign modified match\n                                        this[q[0]] = q[1].call(this, match);\n                                    } else {\n                                        // assign given value, ignore regex match\n                                        this[q[0]] = q[1];\n                                    }\n                                } else if (q.length === 3) {\n                                    // check whether function or regex\n                                    if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n                                        // call function (usually string mapper)\n                                        this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n                                    } else {\n                                        // sanitize match using given regex\n                                        this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n                                    }\n                                } else if (q.length === 4) {\n                                        this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n                                }\n                            } else {\n                                this[q] = match ? match : undefined;\n                            }\n                        }\n                    }\n                }\n                i += 2;\n            }\n        },\n\n        strMapper = function (str, map) {\n\n            for (var i in map) {\n                // check if current value is array\n                if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n                    for (var j = 0; j < map[i].length; j++) {\n                        if (has(map[i][j], str)) {\n                            return (i === UNKNOWN) ? undefined : i;\n                        }\n                    }\n                } else if (has(map[i], str)) {\n                    return (i === UNKNOWN) ? undefined : i;\n                }\n            }\n            return str;\n    };\n\n    ///////////////\n    // String map\n    //////////////\n\n    // Safari < 3.0\n    var oldSafariMap = {\n            '1.0'   : '/8',\n            '1.2'   : '/1',\n            '1.3'   : '/3',\n            '2.0'   : '/412',\n            '2.0.2' : '/416',\n            '2.0.3' : '/417',\n            '2.0.4' : '/419',\n            '?'     : '/'\n        },\n        windowsVersionMap = {\n            'ME'        : '4.90',\n            'NT 3.11'   : 'NT3.51',\n            'NT 4.0'    : 'NT4.0',\n            '2000'      : 'NT 5.0',\n            'XP'        : ['NT 5.1', 'NT 5.2'],\n            'Vista'     : 'NT 6.0',\n            '7'         : 'NT 6.1',\n            '8'         : 'NT 6.2',\n            '8.1'       : 'NT 6.3',\n            '10'        : ['NT 6.4', 'NT 10.0'],\n            'RT'        : 'ARM'\n    };\n\n    //////////////\n    // Regex map\n    /////////////\n\n    var regexes = {\n\n        browser : [[\n\n            /\\b(?:crmo|crios)\\/([\\w\\.]+)/i                                      // Chrome for Android/iOS\n            ], [VERSION, [NAME, 'Chrome']], [\n            /edg(?:e|ios|a)?\\/([\\w\\.]+)/i                                       // Microsoft Edge\n            ], [VERSION, [NAME, 'Edge']], [\n\n            // Presto based\n            /(opera mini)\\/([-\\w\\.]+)/i,                                        // Opera Mini\n            /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,                 // Opera Mobi/Tablet\n            /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i                           // Opera\n            ], [NAME, VERSION], [\n            /opios[\\/ ]+([\\w\\.]+)/i                                             // Opera mini on iphone >= 8.0\n            ], [VERSION, [NAME, OPERA+' Mini']], [\n            /\\bop(?:rg)?x\\/([\\w\\.]+)/i                                          // Opera GX\n            ], [VERSION, [NAME, OPERA+' GX']], [\n            /\\bopr\\/([\\w\\.]+)/i                                                 // Opera Webkit\n            ], [VERSION, [NAME, OPERA]], [\n\n            // Mixed\n            /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i            // Baidu\n            ], [VERSION, [NAME, 'Baidu']], [\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i,      // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n            // Trident based\n            /(avant|iemobile|slim)\\s?(?:browser)?[\\/ ]?([\\w\\.]*)/i,             // Avant/IEMobile/SlimBrowser\n            /(?:ms|\\()(ie) ([\\w\\.]+)/i,                                         // Internet Explorer\n\n            // Webkit/KHTML based                                               // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n            /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n                                                                                // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n            /(heytap|ovi)browser\\/([\\d\\.]+)/i,                                  // Heytap/Ovi\n            /(weibo)__([\\d\\.]+)/i                                               // Weibo\n            ], [NAME, VERSION], [\n            /\\bddg\\/([\\w\\.]+)/i                                                 // DuckDuckGo\n            ], [VERSION, [NAME, 'DuckDuckGo']], [\n            /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i                 // UCBrowser\n            ], [VERSION, [NAME, 'UC'+BROWSER]], [\n            /microm.+\\bqbcore\\/([\\w\\.]+)/i,                                     // WeChat Desktop for Windows Built-in Browser\n            /\\bqbcore\\/([\\w\\.]+).+microm/i,\n            /micromessenger\\/([\\w\\.]+)/i                                        // WeChat\n            ], [VERSION, [NAME, 'WeChat']], [\n            /konqueror\\/([\\w\\.]+)/i                                             // Konqueror\n            ], [VERSION, [NAME, 'Konqueror']], [\n            /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i                       // IE11\n            ], [VERSION, [NAME, 'IE']], [\n            /ya(?:search)?browser\\/([\\w\\.]+)/i                                  // Yandex\n            ], [VERSION, [NAME, 'Yandex']], [\n            /slbrowser\\/([\\w\\.]+)/i                                             // Smart Lenovo Browser\n            ], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [\n            /(avast|avg)\\/([\\w\\.]+)/i                                           // Avast/AVG Secure Browser\n            ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n            /\\bfocus\\/([\\w\\.]+)/i                                               // Firefox Focus\n            ], [VERSION, [NAME, FIREFOX+' Focus']], [\n            /\\bopt\\/([\\w\\.]+)/i                                                 // Opera Touch\n            ], [VERSION, [NAME, OPERA+' Touch']], [\n            /coc_coc\\w+\\/([\\w\\.]+)/i                                            // Coc Coc Browser\n            ], [VERSION, [NAME, 'Coc Coc']], [\n            /dolfin\\/([\\w\\.]+)/i                                                // Dolphin\n            ], [VERSION, [NAME, 'Dolphin']], [\n            /coast\\/([\\w\\.]+)/i                                                 // Opera Coast\n            ], [VERSION, [NAME, OPERA+' Coast']], [\n            /miuibrowser\\/([\\w\\.]+)/i                                           // MIUI Browser\n            ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n            /fxios\\/([-\\w\\.]+)/i                                                // Firefox for iOS\n            ], [VERSION, [NAME, FIREFOX]], [\n            /\\bqihu|(qi?ho?o?|360)browser/i                                     // 360\n            ], [[NAME, '360 ' + BROWSER]], [\n            /(oculus|sailfish|huawei|vivo)browser\\/([\\w\\.]+)/i\n            ], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [                    // Oculus/Sailfish/HuaweiBrowser/VivoBrowser\n            /samsungbrowser\\/([\\w\\.]+)/i                                        // Samsung Internet\n            ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n            /(comodo_dragon)\\/([\\w\\.]+)/i                                       // Comodo Dragon\n            ], [[NAME, /_/g, ' '], VERSION], [\n            /metasr[\\/ ]?([\\d\\.]+)/i                                            // Sogou Explorer\n            ], [VERSION, [NAME, 'Sogou Explorer']], [\n            /(sogou)mo\\w+\\/([\\d\\.]+)/i                                          // Sogou Mobile\n            ], [[NAME, 'Sogou Mobile'], VERSION], [\n            /(electron)\\/([\\w\\.]+) safari/i,                                    // Electron-based App\n            /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,                   // Tesla\n            /m?(qqbrowser|2345Explorer)[\\/ ]?([\\w\\.]+)/i                        // QQBrowser/2345 Browser\n            ], [NAME, VERSION], [\n            /(lbbrowser)/i,                                                     // LieBao Browser\n            /\\[(linkedin)app\\]/i                                                // LinkedIn App for iOS & Android\n            ], [NAME], [\n\n            // WebView\n            /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i       // Facebook App for iOS & Android\n            ], [[NAME, FACEBOOK], VERSION], [\n            /(Klarna)\\/([\\w\\.]+)/i,                                             // Klarna Shopping Browser for iOS & Android\n            /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i,                             // Kakao App\n            /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i,                                  // Naver InApp\n            /safari (line)\\/([\\w\\.]+)/i,                                        // Line App for iOS\n            /\\b(line)\\/([\\w\\.]+)\\/iab/i,                                        // Line App for Android\n            /(alipay)client\\/([\\w\\.]+)/i,                                       // Alipay\n            /(twitter)(?:and| f.+e\\/([\\w\\.]+))/i,                               // Twitter\n            /(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i                     // Chromium/Instagram/Snapchat\n            ], [NAME, VERSION], [\n            /\\bgsa\\/([\\w\\.]+) .*safari\\//i                                      // Google Search Appliance on iOS\n            ], [VERSION, [NAME, 'GSA']], [\n            /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i                        // TikTok\n            ], [VERSION, [NAME, 'TikTok']], [\n\n            /headlesschrome(?:\\/([\\w\\.]+)| )/i                                  // Chrome Headless\n            ], [VERSION, [NAME, CHROME+' Headless']], [\n\n            / wv\\).+(chrome)\\/([\\w\\.]+)/i                                       // Chrome WebView\n            ], [[NAME, CHROME+' WebView'], VERSION], [\n\n            /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i           // Android Browser\n            ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n            /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i       // Chrome/OmniWeb/Arora/Tizen/Nokia\n            ], [NAME, VERSION], [\n\n            /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i                      // Mobile Safari\n            ], [VERSION, [NAME, 'Mobile Safari']], [\n            /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i                // Safari & Safari Mobile\n            ], [VERSION, NAME], [\n            /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i                      // Safari < 3.0\n            ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n            /(webkit|khtml)\\/([\\w\\.]+)/i\n            ], [NAME, VERSION], [\n\n            // Gecko based\n            /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i                              // Netscape\n            ], [[NAME, 'Netscape'], VERSION], [\n            /mobile vr; rv:([\\w\\.]+)\\).+firefox/i                               // Firefox Reality\n            ], [VERSION, [NAME, FIREFOX+' Reality']], [\n            /ekiohf.+(flow)\\/([\\w\\.]+)/i,                                       // Flow\n            /(swiftfox)/i,                                                      // Swiftfox\n            /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n                                                                                // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n            /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n                                                                                // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n            /(firefox)\\/([\\w\\.]+)/i,                                            // Other Firefox-based\n            /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,                         // Mozilla\n\n            // Other\n            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n                                                                                // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n            /(links) \\(([\\w\\.]+)/i,                                             // Links\n            /panasonic;(viera)/i                                                // Panasonic Viera\n            ], [NAME, VERSION], [\n            \n            /(cobalt)\\/([\\w\\.]+)/i                                              // Cobalt\n            ], [NAME, [VERSION, /master.|lts./, \"\"]]\n        ],\n\n        cpu : [[\n\n            /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i                     // AMD64 (x64)\n            ], [[ARCHITECTURE, 'amd64']], [\n\n            /(ia32(?=;))/i                                                      // IA32 (quicktime)\n            ], [[ARCHITECTURE, lowerize]], [\n\n            /((?:i[346]|x)86)[;\\)]/i                                            // IA32 (x86)\n            ], [[ARCHITECTURE, 'ia32']], [\n\n            /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i                                 // ARM64\n            ], [[ARCHITECTURE, 'arm64']], [\n\n            /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i                                   // ARMHF\n            ], [[ARCHITECTURE, 'armhf']], [\n\n            // PocketPC mistakenly identified as PowerPC\n            /windows (ce|mobile); ppc;/i\n            ], [[ARCHITECTURE, 'arm']], [\n\n            /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i                            // PowerPC\n            ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n            /(sun4\\w)[;\\)]/i                                                    // SPARC\n            ], [[ARCHITECTURE, 'sparc']], [\n\n            /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n                                                                                // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n            ], [[ARCHITECTURE, lowerize]]\n        ],\n\n        device : [[\n\n            //////////////////////////\n            // MOBILES & TABLETS\n            /////////////////////////\n\n            // Samsung\n            /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n            /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n            /samsung[- ]([-\\w]+)/i,\n            /sec-(sgh\\w+)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n            // Apple\n            /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i                          // iPod/iPhone\n            ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n            /\\((ipad);[-\\w\\),; ]+apple/i,                                       // iPad\n            /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n            /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n            ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n            /(macintosh);/i\n            ], [MODEL, [VENDOR, APPLE]], [\n\n            // Sharp\n            /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n            ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n            // Huawei\n            /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n            /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n            /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n            // Xiaomi\n            /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i,                  // Xiaomi POCO\n            /\\b; (\\w+) build\\/hm\\1/i,                                           // Xiaomi Hongmi 'numeric' models\n            /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,                             // Xiaomi Hongmi\n            /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,                   // Xiaomi Redmi\n            /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i,        // Xiaomi Redmi 'numeric' models\n            /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n            ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n            /oid[^\\)]+; (2\\d{4}(283|rpbf)[cgl])( bui|\\))/i,                     // Redmi Pad\n            /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i                        // Mi Pad tablets\n            ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n            // OPPO\n            /; (\\w+) bui.+ oppo/i,\n            /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n            ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n            /\\b(opd2\\d{3}a?) bui/i\n            ], [MODEL, [VENDOR, 'OPPO'], [TYPE, TABLET]], [\n\n            // Vivo\n            /vivo (\\w+)(?: bui|\\))/i,\n            /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n            ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n            // Realme\n            /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n            ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n            // Motorola\n            /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n            /\\bmot(?:orola)?[- ](\\w*)/i,\n            /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n            /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n            // LG\n            /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n            ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n            /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n            /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n            /\\blg-?([\\d\\w]+) bui/i\n            ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n            // Lenovo\n            /(ideatab[-\\w ]+)/i,\n            /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n            ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n            // Nokia\n            /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n            /nokia[-_ ]?([-\\w\\.]*)/i\n            ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n            // Google\n            /(pixel c)\\b/i                                                      // Google Pixel C\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n            /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i                         // Google Pixel\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n            // Sony\n            /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n            ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n            /sony tablet [ps]/i,\n            /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n            ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n            // OnePlus\n            / (kb2005|in20[12]5|be20[12][59])\\b/i,\n            /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n            ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n            // Amazon\n            /(alexa)webm/i,\n            /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i,                             // Kindle Fire without Silk / Echo Show\n            /(kf[a-z]+)( bui|\\)).+silk\\//i                                      // Kindle Fire HD\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n            /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i                     // Fire Phone\n            ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n            // BlackBerry\n            /(playbook);[-\\w\\),; ]+(rim)/i                                      // BlackBerry PlayBook\n            ], [MODEL, VENDOR, [TYPE, TABLET]], [\n            /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n            /\\(bb10; (\\w+)/i                                                    // BlackBerry 10\n            ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n            // Asus\n            /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n            / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n            // HTC\n            /(nexus 9)/i                                                        // HTC Nexus 9\n            ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n            /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,                         // HTC\n\n            // ZTE\n            /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n            /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i         // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n            ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n            // Acer\n            /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n            ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n            // Meizu\n            /droid.+; (m[1-5] note) bui/i,\n            /\\bmz-([-\\w]{2,})/i\n            ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n                \n            // Ulefone\n            /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n            ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n            // MIXED\n            /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\\w]*)/i,\n                                                                                // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n            /(hp) ([\\w ]+\\w)/i,                                                 // HP iPAQ\n            /(asus)-?(\\w+)/i,                                                   // Asus\n            /(microsoft); (lumia[\\w ]+)/i,                                      // Microsoft Lumia\n            /(lenovo)[-_ ]?([-\\w]+)/i,                                          // Lenovo\n            /(jolla)/i,                                                         // Jolla\n            /(oppo) ?([\\w ]+) bui/i                                             // OPPO\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n            /(kobo)\\s(ereader|touch)/i,                                         // Kobo\n            /(archos) (gamepad2?)/i,                                            // Archos\n            /(hp).+(touchpad(?!.+tablet)|tablet)/i,                             // HP TouchPad\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(nook)[\\w ]+build\\/(\\w+)/i,                                        // Nook\n            /(dell) (strea[kpr\\d ]*[\\dko])/i,                                   // Dell Streak\n            /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,                                  // Le Pan Tablets\n            /(trinity)[- ]*(t\\d{3}) bui/i,                                      // Trinity Tablets\n            /(gigaset)[- ]+(q\\w{1,9}) bui/i,                                    // Gigaset Tablets\n            /(vodafone) ([\\w ]+)(?:\\)| bui)/i                                   // Vodafone\n            ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n            /(surface duo)/i                                                    // Surface Duo\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n            /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i                                 // Fairphone\n            ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n            /(u304aa)/i                                                         // AT&T\n            ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n            /\\bsie-(\\w*)/i                                                      // Siemens\n            ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n            /\\b(rct\\w+) b/i                                                     // RCA Tablets\n            ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n            /\\b(venue[\\d ]{2,7}) b/i                                            // Dell Venue Tablets\n            ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n            /\\b(q(?:mv|ta)\\w+) b/i                                              // Verizon Tablet\n            ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n            /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i                       // Barnes & Noble Tablet\n            ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n            /\\b(tm\\d{3}\\w+) b/i\n            ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n            /\\b(k88) b/i                                                        // ZTE K Series Tablet\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n            /\\b(nx\\d{3}j) b/i                                                   // ZTE Nubia\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n            /\\b(gen\\d{3}) b.+49h/i                                              // Swiss GEN Mobile\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n            /\\b(zur\\d{3}) b/i                                                   // Swiss ZUR Tablet\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n            /\\b((zeki)?tb.*\\b) b/i                                              // Zeki Tablets\n            ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n            /\\b([yr]\\d{2}) b/i,\n            /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i                                // Dragon Touch Tablet\n            ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n            /\\b(ns-?\\w{0,9}) b/i                                                // Insignia Tablets\n            ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n            /\\b((nxa|next)-?\\w{0,9}) b/i                                        // NextBook Tablets\n            ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n            /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i                  // Voice Xtreme Phones\n            ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n            /\\b(lvtel\\-)?(v1[12]) b/i                                           // LvTel Phones\n            ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n            /\\b(ph-1) /i                                                        // Essential PH-1\n            ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n            /\\b(v(100md|700na|7011|917g).*\\b) b/i                               // Envizen Tablets\n            ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n            /\\b(trio[-\\w\\. ]+) b/i                                              // MachSpeed Tablets\n            ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n            /\\btu_(1491) b/i                                                    // Rotor Tablets\n            ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n            /(shield[\\w ]+) b/i                                                 // Nvidia Shield Tablets\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n            /(sprint) (\\w+)/i                                                   // Sprint Phones\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n            /(kin\\.[onetw]{3})/i                                                // Microsoft Kin\n            ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n            /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i             // Zebra\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n            /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n            ///////////////////\n            // SMARTTVS\n            ///////////////////\n\n            /smart-tv.+(samsung)/i                                              // Samsung\n            ], [VENDOR, [TYPE, SMARTTV]], [\n            /hbbtv.+maple;(\\d+)/i\n            ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n            /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i        // LG SmartTV\n            ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n            /(apple) ?tv/i                                                      // Apple TV\n            ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n            /crkey/i                                                            // Google Chromecast\n            ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n            /droid.+aft(\\w+)( bui|\\))/i                                         // Fire TV\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n            /\\(dtv[\\);].+(aquos)/i,\n            /(aquos-tv[\\w ]+)\\)/i                                               // Sharp\n            ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n            /(bravia[\\w ]+)( bui|\\))/i                                              // Sony\n            ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n            /(mitv-\\w{5}) bui/i                                                 // Xiaomi\n            ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n            /Hbbtv.*(technisat) (.*);/i                                         // TechniSAT\n            ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n            /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,                          // Roku\n            /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i         // HbbTV devices\n            ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n            /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i                   // SmartTV from Unidentified Vendors\n            ], [[TYPE, SMARTTV]], [\n\n            ///////////////////\n            // CONSOLES\n            ///////////////////\n\n            /(ouya)/i,                                                          // Ouya\n            /(nintendo) ([wids3utch]+)/i                                        // Nintendo\n            ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n            /droid.+; (shield) bui/i                                            // Nvidia\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n            /(playstation [345portablevi]+)/i                                   // Playstation\n            ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n            /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i                                // Microsoft Xbox\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n            ///////////////////\n            // WEARABLES\n            ///////////////////\n\n            /((pebble))app/i                                                    // Pebble\n            ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n            /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i                              // Apple Watch\n            ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n            /droid.+; (glass) \\d/i                                              // Google Glass\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n            /droid.+; (wt63?0{2,3})\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n            /(quest( \\d| pro)?)/i                                               // Oculus Quest\n            ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n            ///////////////////\n            // EMBEDDED\n            ///////////////////\n\n            /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i                              // Tesla\n            ], [VENDOR, [TYPE, EMBEDDED]], [\n            /(aeobc)\\b/i                                                        // Echo Dot\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n            ////////////////////\n            // MIXED (GENERIC)\n            ///////////////////\n\n            /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i    // Android Phones from Unidentified Vendors\n            ], [MODEL, [TYPE, MOBILE]], [\n            /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i       // Android Tablets from Unidentified Vendors\n            ], [MODEL, [TYPE, TABLET]], [\n            /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i                      // Unidentifiable Tablet\n            ], [[TYPE, TABLET]], [\n            /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i    // Unidentifiable Mobile\n            ], [[TYPE, MOBILE]], [\n            /(android[-\\w\\. ]{0,9});.+buil/i                                    // Generic Android Device\n            ], [MODEL, [VENDOR, 'Generic']]\n        ],\n\n        engine : [[\n\n            /windows.+ edge\\/([\\w\\.]+)/i                                       // EdgeHTML\n            ], [VERSION, [NAME, EDGE+'HTML']], [\n\n            /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i                         // Blink\n            ], [VERSION, [NAME, 'Blink']], [\n\n            /(presto)\\/([\\w\\.]+)/i,                                             // Presto\n            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n            /ekioh(flow)\\/([\\w\\.]+)/i,                                          // Flow\n            /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,                           // KHTML/Tasman/Links\n            /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i,                                      // iCab\n            /\\b(libweb)/i\n            ], [NAME, VERSION], [\n\n            /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i                                     // Gecko\n            ], [VERSION, NAME]\n        ],\n\n        os : [[\n\n            // Windows\n            /microsoft (windows) (vista|xp)/i                                   // Windows (iTunes)\n            ], [NAME, VERSION], [\n            /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i             // Windows Phone\n            ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n            /windows nt 6\\.2; (arm)/i,                                        // Windows RT\n            /windows[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i,\n            /(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n            ], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [\n\n            // iOS/macOS\n            /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i,              // iOS\n            /(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,\n            /cfnetwork\\/.+darwin/i\n            ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n            /(mac os x) ?([\\w\\. ]*)/i,\n            /(macintosh|mac_powerpc\\b)(?!.+haiku)/i                             // Mac OS\n            ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n            // Mobile OSes\n            /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i                    // Android-x86/HarmonyOS\n            ], [VERSION, NAME], [                                               // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n            /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n            /(blackberry)\\w*\\/([\\w\\.]*)/i,                                      // Blackberry\n            /(tizen|kaios)[\\/ ]([\\w\\.]+)/i,                                     // Tizen/KaiOS\n            /\\((series40);/i                                                    // Series 40\n            ], [NAME, VERSION], [\n            /\\(bb(10);/i                                                        // BlackBerry 10\n            ], [VERSION, [NAME, BLACKBERRY]], [\n            /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i         // Symbian\n            ], [VERSION, [NAME, 'Symbian']], [\n            /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n            ], [VERSION, [NAME, FIREFOX+' OS']], [\n            /web0s;.+rt(tv)/i,\n            /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i                              // WebOS\n            ], [VERSION, [NAME, 'webOS']], [\n            /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i                              // watchOS\n            ], [VERSION, [NAME, 'watchOS']], [\n\n            // Google Chromecast\n            /crkey\\/([\\d\\.]+)/i                                                 // Google Chromecast\n            ], [VERSION, [NAME, CHROME+'cast']], [\n            /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i                                  // Chromium OS\n            ], [[NAME, CHROMIUM_OS], VERSION],[\n\n            // Smart TVs\n            /panasonic;(viera)/i,                                               // Panasonic Viera\n            /(netrange)mmh/i,                                                   // Netrange\n            /(nettv)\\/(\\d+\\.[\\w\\.]+)/i,                                         // NetTV\n\n            // Console\n            /(nintendo|playstation) ([wids345portablevuch]+)/i,                 // Nintendo/Playstation\n            /(xbox); +xbox ([^\\);]+)/i,                                         // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n            // Other\n            /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,                            // Joli/Palm\n            /(mint)[\\/\\(\\) ]?(\\w*)/i,                                           // Mint\n            /(mageia|vectorlinux)[; ]/i,                                        // Mageia/VectorLinux\n            /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n                                                                                // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n            /(hurd|linux) ?([\\w\\.]*)/i,                                         // Hurd/Linux\n            /(gnu) ?([\\w\\.]*)/i,                                                // GNU\n            /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n            /(haiku) (\\w+)/i                                                    // Haiku\n            ], [NAME, VERSION], [\n            /(sunos) ?([\\w\\.\\d]*)/i                                             // Solaris\n            ], [[NAME, 'Solaris'], VERSION], [\n            /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,                              // Solaris\n            /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,                                  // AIX\n            /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n            /(unix) ?([\\w\\.]*)/i                                                // UNIX\n            ], [NAME, VERSION]\n        ]\n    };\n\n    /////////////////\n    // Constructor\n    ////////////////\n\n    var UAParser = function (ua, extensions) {\n\n        if (typeof ua === OBJ_TYPE) {\n            extensions = ua;\n            ua = undefined;\n        }\n\n        if (!(this instanceof UAParser)) {\n            return new UAParser(ua, extensions).getResult();\n        }\n\n        var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n        var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n        var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n        var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n        var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n        this.getBrowser = function () {\n            var _browser = {};\n            _browser[NAME] = undefined;\n            _browser[VERSION] = undefined;\n            rgxMapper.call(_browser, _ua, _rgxmap.browser);\n            _browser[MAJOR] = majorize(_browser[VERSION]);\n            // Brave-specific detection\n            if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n                _browser[NAME] = 'Brave';\n            }\n            return _browser;\n        };\n        this.getCPU = function () {\n            var _cpu = {};\n            _cpu[ARCHITECTURE] = undefined;\n            rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n            return _cpu;\n        };\n        this.getDevice = function () {\n            var _device = {};\n            _device[VENDOR] = undefined;\n            _device[MODEL] = undefined;\n            _device[TYPE] = undefined;\n            rgxMapper.call(_device, _ua, _rgxmap.device);\n            if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n                _device[TYPE] = MOBILE;\n            }\n            // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n            if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n                _device[MODEL] = 'iPad';\n                _device[TYPE] = TABLET;\n            }\n            return _device;\n        };\n        this.getEngine = function () {\n            var _engine = {};\n            _engine[NAME] = undefined;\n            _engine[VERSION] = undefined;\n            rgxMapper.call(_engine, _ua, _rgxmap.engine);\n            return _engine;\n        };\n        this.getOS = function () {\n            var _os = {};\n            _os[NAME] = undefined;\n            _os[VERSION] = undefined;\n            rgxMapper.call(_os, _ua, _rgxmap.os);\n            if (_isSelfNav && !_os[NAME] && _uach && _uach.platform && _uach.platform != 'Unknown') {\n                _os[NAME] = _uach.platform  \n                                    .replace(/chrome os/i, CHROMIUM_OS)\n                                    .replace(/macos/i, MAC_OS);           // backward compatibility\n            }\n            return _os;\n        };\n        this.getResult = function () {\n            return {\n                ua      : this.getUA(),\n                browser : this.getBrowser(),\n                engine  : this.getEngine(),\n                os      : this.getOS(),\n                device  : this.getDevice(),\n                cpu     : this.getCPU()\n            };\n        };\n        this.getUA = function () {\n            return _ua;\n        };\n        this.setUA = function (ua) {\n            _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n            return this;\n        };\n        this.setUA(_ua);\n        return this;\n    };\n\n    UAParser.VERSION = LIBVERSION;\n    UAParser.BROWSER =  enumerize([NAME, VERSION, MAJOR]);\n    UAParser.CPU = enumerize([ARCHITECTURE]);\n    UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n    UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n    ///////////\n    // Export\n    //////////\n\n    // check js environment\n    if (typeof(exports) !== UNDEF_TYPE) {\n        // nodejs env\n        if (typeof module !== UNDEF_TYPE && module.exports) {\n            exports = module.exports = UAParser;\n        }\n        exports.UAParser = UAParser;\n    } else {\n        // requirejs env (optional)\n        if (typeof(define) === FUNC_TYPE && define.amd) {\n            define(function () {\n                return UAParser;\n            });\n        } else if (typeof window !== UNDEF_TYPE) {\n            // browser env\n            window.UAParser = UAParser;\n        }\n    }\n\n    // jQuery/Zepto specific (optional)\n    // Note:\n    //   In AMD env the global scope should be kept clean, but jQuery is an exception.\n    //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n    //   and we should catch that.\n    var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n    if ($ && !$.ua) {\n        var parser = new UAParser();\n        $.ua = parser.getResult();\n        $.ua.get = function () {\n            return parser.getUA();\n        };\n        $.ua.set = function (ua) {\n            parser.setUA(ua);\n            var result = parser.getResult();\n            for (var prop in result) {\n                $.ua[prop] = result[prop];\n            }\n        };\n    }\n\n})(typeof window === 'object' ? window : this);\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["BacktraceReportSubmissionResult","message","result","this","_result","status","constructor","statusOrResponse","isSubmissionResponse","OnLimitReached","target","SdkDisabled","Unsupported","ReportSkipped","OnInternalServerError","OnInvalidToken","OnUnknownError","OnNetworkingError","Ok","response","jsonEscaper","ancestors","keys","key","value","valueType","toString","length","pop","includes","filter","k","join","push","SubmissionUrlInformation","static","toJsonReportSubmissionUrl","url","token","SUBMIT_PREFIX","indexOf","URL","searchParams","append","href","toPlCrashReporterSubmissionUrl","submissionUrl","changeSubmissionFormat","toMinidumpSubmissionUrl","toAttachmentSubmissionUrl","rxid","attachmentName","query","findUniverse","submitIndex","universeStartIndex","endOfUniverseName","substring","domainIndex","protocolEndIndex","protocolSeparator","hostname","findToken","submissionUrlParts","split","get","desiredFormat","queryParametersIndex","queryParameters","pathParts","undefined","expectedMinimalPathParts","set","RequestBacktraceReportSubmission","_requestHandler","_submissionUrl","options","send","data","attachments","abortSignal","json","JSON","stringify","postError","sendAttachment","attachment","postAttachment","name","ConnectionError","isConnectionError","err","error","code","MetricsUrlInformation","generateSummedEventsUrl","credentialsToken","submissionInformation","findSubmissionInformation","generateEventsServiceUrl","universe","generateUniqueEventsUrl","eventServiceName","BacktraceCoreApi","_summedMetricsSubmissionUrl","_uniqueMetricsSubmissionUrl","_requestBacktraceReportSubmission","metrics","requestBacktraceReportSubmission","sendReport","sendUniqueMetrics","Error","post","sendSummedMetrics","Events","_callbacks","on","event","callback","addCallback","once","off","removeCallback","emit","args","callbacks","list","index","findIndex","el","splice","TimeHelper","now","Date","toTimestampInSec","timestampMs","Math","floor","convertSecondsToMilliseconds","timeInSec","BacktraceReport","attributes","classifiers","annotations","stackTrace","innerReport","timestamp","skipFrames","addStackTrace","stack","errorType","generateErrorMessage","cause","unshift","AttachmentManager","attachmentEvents","_attachmentProviders","add","addProviders","map","a","type","attachmentProviders","anyScoped","provider","Array","isArray","ReportDataBuilder","build","attributeKey","attribute","AttributeManager","attributeEvents","_attributeProviders","providers","addProvider","attributeProvider","attributeType","providerResult","ClientAttributeProvider","_sdkName","_sdkVersion","_sessionId","UserAttributeProvider","_source","source","toStringSize","stringSize","stringifiedSize","numberSize","bigintSize","symbolSize","functionSize","booleanSize","undefinedSize","nullSize","objectSize","obj","replacer","entries","Object","entryCount","entriesLength","v","valueSize","_jsonSize","keySize","max","parent","toJSON","call","array","commaLength","elementsLength","i","element","arraySize","jsonSize","limitObjectDepth","depth","Infinity","limitIfObject","textFormatter","defaultFormatter","jsonEscapeFunction","params","param","require","format","BreadcrumbLogLevel","BreadcrumbType","ConsoleEventSubscriber","_events","_formatter","start","backtraceBreadcrumbs","breadcrumbsType","Log","bindToConsoleMethod","Info","Warning","Debug","Verbose","dispose","consoleMethod","console","level","originalMethod","addBreadcrumb","OverwritingArray","capacity","_array","_headConstraint","_lengthConstraint","_head","_length","head","items","min","range","newValue","clamped","item","pushOne","shift","at","values","Symbol","iterator","InMemoryBreadcrumbsStorage","_limits","lastBreadcrumbId","_lastBreadcrumbId","_breadcrumbs","_breadcrumbSizes","maximumBreadcrumbs","getAttachments","getAttachmentProviders","factory","limits","rawBreadcrumb","id","breadcrumb","toLowerCase","maximumTotalBreadcrumbsSize","size","totalSize","sum","BREADCRUMB_ATTRIBUTE_NAME","defaultIfNotFalse","defaultValue","BreadcrumbsManager","logLevel","_enabled","_eventSubscribers","_interceptor","_storage","configuration","maximumAttributesDepth","maximumBreadcrumbMessageLength","maximumBreadcrumbSize","eventType","storage","intercept","subscribers","addEventSubscriber","subscriber","setStorage","bind","client","attachmentManager","addAttribute","report","logReport","initialize","verbose","log","debug","info","warn","Manual","System","limitedBreadcrumb","prepareBreadcrumbMessage","interceptorBreadcrumb","UNKNOWN_FRAME","ANONYMOUS_FUNCTION","V8StackTraceConverter","addressSeparator","engine","convert","stackFrames","errorHeader","slice","stackFrame","normalizedStackFrame","trim","frame","parseFrame","frameSeparator","startsWith","funcName","library","asyncKeyword","sourceCodeStartIndex","parseSourceCodeInformation","sourceCodeInformation","sourceCodeSeparator","anonymousGenericSymbol","functionName","extractEvalInformation","trimStart","sourceCodeParts","column","parseInt","lineNumber","isNaN","line","evalSourceCodeInformation","sourceCodeStart","sourceCodeEnd","sourceCodeStartSeparatorChar","IdGenerator","uuid","bytes","random","n","padStart","BacktraceDataBuilder","_sdkOptions","_stackTraceConverter","_attributeManager","_debugIdProvider","MAIN_THREAD_NAME","reportData","threads","detectedDebugIdentifier","getThreads","agent","agentVersion","lang","langName","langVersion","mainThread","symbolication","traceInfo","debugIdentifier","getDebugId","debug_identifier","fault","AbortError","super","OriginalAbortController","window","global","self","Emitter","_listeners","addEventListener","listener","ev","handleEvent","signal","removeFn","removeEventListener","allListeners","listeners","l","elem","dispatchEvent","defaultPrevented","AbortSignal","aborted","onabort","reason","defineProperty","writable","configurable","enumerable","throwIfAborted","any","signals","anySignal","AbortController$1","abort","Event","e","document","ie8Document","createEvent","createEventObject","initEvent","bubbles","cancelable","signalReason","DOMException","createAbortController","AbortController","controller","cleanup","onAbort","unrefInterval","interval","unref","toStringTag","prototype","BacktraceDatabaseContext","bucketCount","_records","_recordBuckets","find","predicate","record","r","getBucket","bucket","count","countByType","reduce","total","current","remove","recordOrId","increaseBucket","bucketStart","newBucket","load","records","dropOverLimits","remaining","dropped","BacktraceDatabase","_options","_storageProvider","_sessionFiles","enabled","_abortController","_databaseRecordContext","_storageProviders","_recordLimits","_retryInterval","_intervalId","maximumRetries","maximumNumberOfRecords","maximumNumberOfAttachmentRecords","retryInterval","enable","lockId","lockPreviousSessions","loadReports","then","setupDatabaseAutoSend","finally","unlockPreviousSessions","_","locked","__","submissionResult","backtraceData","sessionId","prepareDatabase","lockSessionWithRecord","addAttachment","clearInterval","recordOrRecords","delete","addStorageProvider","storageProvider","flush","bucketIndex","forRecords","dropLimits","recordsToAdd","recordsToRemove","autoSend","setInterval","async","session","getSessionWithId","lock","isFileAttachment","filePath","AttachmentBacktraceDatabaseFileRecord","fromRecord","fromJson","fileSystem","parse","existsSync","createAttachment","ReportBacktraceDatabaseFileRecord","BacktraceDatabaseFileRecord","BacktraceDatabaseFileStorageProvider","_fileSystem","_path","RECORD_SUFFIX","createIfValid","path","recordPath","getRecordPath","unlinkRecord","writeFileSync","recordNames","readDir","file","endsWith","f","recordName","recordJson","readFile","unlink","unlinkSync","MetricsEvent","metricGroupName","metricGroupValue","SummedEvent","UniqueEvent","BacktraceMetrics","_sessionProvider","_summedEventsSubmissionQueue","_uniqueEventsSubmissionQueue","DEFAULT_UPDATE_INTERVAL","DEFAULT_SERVER_URL","metricsHost","_updateInterval","_updateIntervalId","metricsSubmissionUrl","autoSendInterval","newSession","addSummedEvent","handleAbort","metricName","eventAttributes","convertAttributes","shouldSend","Promise","all","sendUniqueEvent","afterMetricsSubmission","acc","fn","Delay","wait","timeout","resolve","reject","intervalId","abortCallback","clearTimeout","setTimeout","MetricsSubmissionQueue","_eventName","_metricMetadata","maximumEvents","DELAY_BETWEEN_REQUESTS","_numberOfDroppedRequests","MAXIMUM_NUMBER_OF_ATTEMPTS","reachedLimit","eventsToProcess","submit","events","attempts","metadata","dropped_events","returnEventsIfPossible","MetricsBuilder","APPLICATION_VERSION_ATTRIBUTE","APPLICATION_ATTRIBUTE","uniqueEventsSubmissionQueue","summedEventsSubmissionQueue","metricsOptions","optionsWithDefaults","applicationInfo","verifyAttributeSetup","createUniqueEventSubmissionQueue","createSummedEventSubmissionQueue","application","applicationVersion","uniqueEventsSubmissionUrl","appversion","summedEventsSubmissionUrl","SingleSessionProvider","_lastActive","lastActive","RateLimitWatcher","MAXIMUM_TIME_IN_QUEUE","_reportPerMin","_watcherEnable","_reportQueue","reportPerMin","skipReport","time","clear","queueIndex","BacktraceCoreClient","attributeManager","_modules","breadcrumbs","database","modules","sessionFiles","SessionFiles","Map","_dataBuilder","_reportSubmission","_rateLimitWatcher","setup","sdkOptions","sessionProvider","reportSubmission","requestHandler","rateLimit","attributeProviders","userAttributes","stackTraceConverter","DebugIdProvider","debugIdMapProvider","maximumOldSessions","uniqueMetricsQueue","summedMetricsQueue","breadcrumbsManager","breadcrumbsSetup","module","addModule","validateAttributes","createDatabaseDirectory","createDirSync","getModuleBindData","clearPreviousSessions","_instance","reportAttributesOrAbortSignal","reportAttachments","reportAttributes","isReport","skipFrameOnMessage","generateSubmissionData","submissionAttachments","generateSubmissionAttachments","destroy","typeOrModule","getPrototypeOf","beforeSend","validateApplicationAndVersion","BacktraceCoreClientBuilder","clientSetup","addAttributeProvider","useBreadcrumbSubscriber","breadcrumbSubscriber","useBreadcrumbsStorage","useSessionProvider","useRequestHandler","handler","useStackTraceConverter","useFileSystem","useReportSubmission","useSummedMetricsQueue","queue","useUniqueMetricsQueue","useModule","BacktraceStringAttachment","BacktraceUint8ArrayAttachment","Blob","buffer","SESSION_MARKER_PREFIX","isDefined","t","_directory","_maxPreviousLockedSessions","_lockable","marker","_escapedSessionId","_locks","Set","_previousSession","_cleared","escapeFileName","getFileName","createSessionMarker","getPreviousSession","directoryFiles","readDirectoryFiles","sessionMarkers","getFileSession","sort","b","currentSessionMarker","s","lastSessionMarker","getPreviousSessions","unlock","clearSession","prefix","throwIfCleared","getSessionFiles","escapedSessionId","rawTimestamp","splitByOneChar","unescapeFileName","readDirSync","replace","str","char","_debugIdMapProvider","_fileDebugIds","loadDebugIds","debugId","debugIdMap","getDebugIdMap","rawStack","frames","VariableDebugIdMapProvider","_variable","AGENT","navigator","userAgent","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","next","rejected","done","apply","SuppressedError","BacktraceBrowserRequestHandler","UPLOAD_FILE_NAME","JSON_HEADERS","MULTIPART_HEADERS","_timeout","_a","dataJson","payload","createFormData","fetch","method","body","headers","statusText","formData","FormData","BacktraceApi","requestHandlerOptions","BacktraceBrowserSessionProvider","SESSION_LAST_ACTIVE","SESSION_GUID","localStorage","readLastActiveTimestamp","PERSISTENCE_INTERVAL","updateLastActiveTimestamp","setItem","getItem","hidden","lastActiveStringTimestamp","ApplicationInformationAttributeProvider","_application","_applicationVersion","version","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","enumerize","arr","enums","toUpperCase","has","str1","str2","lowerize","len","rgxMapper","ua","arrays","j","p","q","matches","match","regex","props","exec","test","strMapper","windowsVersionMap","ME","XP","Vista","RT","regexes","browser","cpu","device","EDGE","os","UAParser","extensions","getResult","_navigator","_ua","_uach","userAgentData","_rgxmap","mergedRegexes","concat","extend","_isSelfNav","getBrowser","_browser","brave","isBrave","getCPU","_cpu","getDevice","_device","mobile","standalone","maxTouchPoints","getEngine","_engine","getOS","_os","platform","getUA","setUA","CPU","DEVICE","ENGINE","OS","exports","$","jQuery","Zepto","parser","prop","UserAgentAttributeProvider","information","architecture","model","vendor","UserIdentifierAttributeProvider","USER_IDENTIFIER","guid","generateUuidToLocalStorage","PAGE_START_TIME","WebsiteAttributeProvider","title","getTime","location","referrer","port","protocol","origin","language","cookieEnabled","domain","baseURI","WindowAttributeProvider","innerHeight","innerWidth","outerHeight","outerWidth","pageXOffset","pageYOffset","screenX","screenY","screenLeft","screenTop","DocumentEventSubscriber","_controller","mouseEvent","tagName","User","class","className","text","dragEvent","HistoryEventSubscriber","Navigation","state","originalHistoryPushStateMethod","history","pushState","_originalHistoryPushStateMethod","WebRequestEventSubscriber","Http","xmlHttpRequestOriginalOpenMethod","XMLHttpRequest","open","username","password","readyStateChangeCallback","onreadystatechange","readyState","DONE","statusCode","_xmlHttpRequestOriginalOpenMethod","fetchOriginalMethod","resource","config","assign","_b","_fetchOriginalMethod","BacktraceClientBuilder","instance","BacktraceClient","JavaScriptCoreStackTraceConverter","functionSeparatorIndex","generateSeparatorIndex","lastIndexOf","possibleSeparators","possibleSeparator","possibleSeparatorIndex","SpiderMonkeyStackTraceConverter","ANONYMOUS_FUNCTIONS","cleanUpEvalInformation","sourceCodeOrRowNumber","possibleRowNumber","generateLegacyFirefoxFrame","generateFirefoxFrame","lineNumberStart","columnName","evalSeparator","evalIndex","lineSeparatorIndex","textToRemove","getStackTraceConverter","normalizedUserAgent","_disposeController","captureUnhandledErrors","captureUnhandledPromiseRejections","builder","captureUnhandledExceptions","captureUnhandledRejections","errorEvent","createBacktraceReduxMiddleware","interceptActionOrOptions","action","interceptAction","mode","interceptedAction","getBreadcrumbPayload","_c","_d"],"mappings":"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","x_google_ignoreList":[2,7]}