{"version":3,"file":"index-dc555686.mjs","sources":["../../admin-sdk/node_modules/semver/internal/debug.js","../../admin-sdk/node_modules/semver/internal/constants.js","../../admin-sdk/node_modules/semver/internal/re.js","../../admin-sdk/es/context/compare-version.js","../../admin-sdk/es/context/acl.js","../../admin-sdk/es/ui/component-section/index.js","../../admin-sdk/es/ui/tabs/index.js","../../admin-sdk/es/ui/menu/index.js","../../admin-sdk/es/ui/settings/index.js","../../admin-sdk/es/ui/main-module/index.js","../../admin-sdk/es/ui/module/payment/overview-card/index.js","../../admin-sdk/es/ui/modal/index.js","../../admin-sdk/es/ui/sidebar/index.js","../../admin-sdk/es/ui/action-button/index.js","../../admin-sdk/es/ui/media-modal/index.js","../../../node_modules/jwt-decode/build/esm/index.js","../../admin-sdk/es/_private/payment/index.js","../../admin-sdk/es/consent/index.js","../../../node_modules/localforage/dist/localforage.js","../../admin-sdk/es/data/composables/useSharedState.js","../../admin-sdk/es/data/composables/useDataset.js","../../admin-sdk/es/index.js"],"sourcesContent":["const debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n","const {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  safeSrc[index] = safe\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport semverCmp from 'semver/functions/cmp';\nimport valid from 'semver/functions/valid';\nexport default function getCompareIsShopwareVersion(getShopwareVersion) {\n    return (comparator, versionToCompare) => __awaiter(this, void 0, void 0, function* () {\n        const shopwareVersion = yield getShopwareVersion();\n        const shopwareSemverVersion = convertToSemver(shopwareVersion);\n        const versionSemverToCompare = convertToSemver(versionToCompare);\n        return semverCmp(shopwareSemverVersion, comparator, versionSemverToCompare);\n    });\n}\nfunction convertToSemver(version) {\n    // Test if version is a 4 digit shopware version with leading 6.\n    if (!valid(version) && /6\\.[\\d]+\\.[\\d]+\\.[\\d]+/.test(version)) {\n        return version.substring(2);\n    }\n    return version;\n}\n//# sourceMappingURL=compare-version.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nexport default function createACLHelper(getContextAppInformation) {\n    return (privilege) => __awaiter(this, void 0, void 0, function* () {\n        const appInformation = yield getContextAppInformation();\n        const appPrivileges = appInformation.privileges;\n        return can(privilege, flattenPrivileges(appPrivileges));\n    });\n}\nfunction can(privilege, privileges) {\n    return privileges.includes(privilege);\n}\nfunction flattenPrivileges(acl) {\n    const flattened = [];\n    Object.keys(acl).forEach((key) => {\n        const privileges = acl[key];\n        if (!privileges) {\n            return;\n        }\n        if (key === 'additional') {\n            flattened.push(...privileges);\n            return;\n        }\n        privileges.forEach((privilege) => {\n            flattened.push(`${privilege}:${key}`);\n        });\n    });\n    return flattened;\n}\n//# sourceMappingURL=acl.js.map","var _a;\nimport { createSender } from '../../channel';\nimport { getWindowSrc } from '../../_internals/utils';\nexport const add = createSender('uiComponentSectionRenderer', {\n    src: (_a = getWindowSrc()) !== null && _a !== void 0 ? _a : undefined,\n});\n//# sourceMappingURL=index.js.map","import { createSender } from '../../channel';\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport default (tabPositionId) => ({\n    addTabItem: createSender('uiTabsAddTabItem', { positionId: tabPositionId }),\n});\n//# sourceMappingURL=index.js.map","import { createSender } from '../../channel';\nexport const collapseMenu = createSender('menuCollapse');\nexport const expandMenu = createSender('menuExpand');\nexport const addMenuItem = createSender('menuItemAdd');\n//# sourceMappingURL=index.js.map","import { createSender } from '../../channel';\nexport const addSettingsItem = createSender('settingsItemAdd');\n//# sourceMappingURL=index.js.map","import { createSender } from '../../channel';\nexport const addMainModule = createSender('mainModuleAdd');\nexport const addSmartBarButton = createSender('smartBarButtonAdd');\nexport const hideSmartBar = createSender('smartBarHide');\n//# sourceMappingURL=index.js.map","import { createSender } from '../../../../channel';\nexport const add = createSender('uiModulePaymentOverviewCard');\n//# sourceMappingURL=index.js.map","import { createSender } from '../../channel';\nexport const open = createSender('uiModalOpen');\nexport const close = createSender('uiModalClose');\nexport const update = createSender('uiModalUpdate');\n//# sourceMappingURL=index.js.map","import { createSender } from '../../channel';\nexport const add = createSender('uiSidebarAdd');\nexport const close = createSender('uiSidebarClose');\nexport const remove = createSender('uiSidebarRemove');\nexport const setActive = createSender('uiSidebarSetActive');\n//# sourceMappingURL=index.js.map","import { createSender } from '../../channel';\nexport const add = createSender('actionButtonAdd');\n//# sourceMappingURL=index.js.map","import { createSender } from '../../channel';\nexport const open = createSender('uiMediaModalOpen');\nexport const openSaveMedia = createSender('uiMediaModalOpenSaveMedia');\n//# sourceMappingURL=index.js.map","export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n    return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n        let code = p.charCodeAt(0).toString(16).toUpperCase();\n        if (code.length < 2) {\n            code = \"0\" + code;\n        }\n        return \"%\" + code;\n    }));\n}\nfunction base64UrlDecode(str) {\n    let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    switch (output.length % 4) {\n        case 0:\n            break;\n        case 2:\n            output += \"==\";\n            break;\n        case 3:\n            output += \"=\";\n            break;\n        default:\n            throw new Error(\"base64 string is not of the correct length\");\n    }\n    try {\n        return b64DecodeUnicode(output);\n    }\n    catch (err) {\n        return atob(output);\n    }\n}\nexport function jwtDecode(token, options) {\n    if (typeof token !== \"string\") {\n        throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n    }\n    options || (options = {});\n    const pos = options.header === true ? 0 : 1;\n    const part = token.split(\".\")[pos];\n    if (typeof part !== \"string\") {\n        throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n    }\n    let decoded;\n    try {\n        decoded = base64UrlDecode(part);\n    }\n    catch (e) {\n        throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n    }\n    try {\n        return JSON.parse(decoded);\n    }\n    catch (e) {\n        throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n    }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport * as modal from '../../ui/modal';\nimport * as location from '../../location';\nimport * as context from '../../context';\nimport * as data from '../../data';\nimport Criteria from '../../data/Criteria';\nimport { jwtDecode } from 'jwt-decode';\nexport var MESSAGE_EVENT_TYPE;\n(function (MESSAGE_EVENT_TYPE) {\n    MESSAGE_EVENT_TYPE[\"PAYMENT_CLOSE\"] = \"payment_close\";\n    MESSAGE_EVENT_TYPE[\"PAYMENT_SUCCESS\"] = \"payment_success\";\n    MESSAGE_EVENT_TYPE[\"PAYMENT_ERROR\"] = \"payment_error\";\n    MESSAGE_EVENT_TYPE[\"SYNC_HEIGHT\"] = \"sync_height\";\n})(MESSAGE_EVENT_TYPE || (MESSAGE_EVENT_TYPE = {}));\nlet channel = null;\nconst getChannel = () => {\n    if (!channel) {\n        channel = new BroadcastChannel('payment');\n    }\n    return channel;\n};\nconst servicePaymentModalLocationId = 'sw-service-payment-modal';\nconst _createFlow = () => {\n    return {\n        subscribe: (eventType, callback) => {\n            const func = (event) => {\n                if (event.data.type === eventType) {\n                    callback();\n                }\n            };\n            getChannel().addEventListener('message', func);\n            return {\n                unsubscribe: () => {\n                    getChannel().removeEventListener('message', func);\n                },\n            };\n        },\n    };\n};\nexport const addPaymentIframe = (el, baseUrl, options) => __awaiter(void 0, void 0, void 0, function* () {\n    const { name, version } = yield context.getAppInformation();\n    const decodedLicense = yield decodeLicense();\n    let shopPlan = '';\n    let shopUrl = '';\n    if (decodedLicense && decodedLicense.exp > Date.now() / 1000) {\n        shopUrl = (decodedLicense === null || decodedLicense === void 0 ? void 0 : decodedLicense['aud']) || options.shopUrl || '';\n        shopPlan = (decodedLicense === null || decodedLicense === void 0 ? void 0 : decodedLicense['plan-name']) || options.shopPlan || '';\n    }\n    else {\n        shopUrl = options.shopUrl || '';\n        shopPlan = options.shopPlan || '';\n    }\n    const link = `${baseUrl}/payment?service-name=${name}&service-version=${version}&shop-url=${shopUrl}&sw-version=${options.swVersion}&sw-user-language=${options.swUserLanguage}&shop-plan=${shopPlan}`;\n    const iframeEl = document.createElement('iframe');\n    iframeEl.width = '100%';\n    iframeEl.height = '100%';\n    iframeEl.src = link;\n    iframeEl.style.border = 'none';\n    iframeEl.style.borderRadius = 'var(--border-radius-card)';\n    const handleEvent = (event) => {\n        if (event.data.type === MESSAGE_EVENT_TYPE.SYNC_HEIGHT) {\n            iframeEl.style.height = `${event.data.payload}px`;\n            location.startAutoResizer();\n        }\n        else if (event.data.type === MESSAGE_EVENT_TYPE.PAYMENT_CLOSE) {\n            window.removeEventListener('message', handleEvent);\n            void modal.close({\n                locationId: servicePaymentModalLocationId,\n            });\n        }\n        else if ([MESSAGE_EVENT_TYPE.PAYMENT_SUCCESS].includes(event.data.type)) {\n            getChannel().postMessage(event.data);\n        }\n    };\n    window.addEventListener('message', handleEvent);\n    const unmount = () => {\n        window.removeEventListener('message', handleEvent);\n        channel === null || channel === void 0 ? void 0 : channel.close();\n    };\n    el.appendChild(iframeEl);\n    return { iframeEl, unmount };\n});\nexport const startPaymentFlow = () => __awaiter(void 0, void 0, void 0, function* () {\n    yield modal.open({\n        locationId: servicePaymentModalLocationId,\n        variant: 'small',\n        showHeader: false,\n        showFooter: false,\n        closable: false,\n    });\n    const flow = _createFlow();\n    return flow;\n});\nexport const decodeLicense = () => __awaiter(void 0, void 0, void 0, function* () {\n    try {\n        const SystemConfigRepository = data.repository('system_config');\n        const criteria = new data.Classes.Criteria();\n        criteria.addFilter(Criteria.equals('system_config.configurationKey', 'core.store.licenseKey'));\n        const res = yield SystemConfigRepository.search(criteria);\n        const value = res === null || res === void 0 ? void 0 : res.first();\n        const token = (value === null || value === void 0 ? void 0 : value.configurationValue) || '';\n        const decoded = jwtDecode(token);\n        return decoded;\n    }\n    catch (_a) {\n        return null;\n    }\n});\n//# sourceMappingURL=index.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { generateUniqueId } from '../_internals/utils';\nimport { createHandler, createSender } from '../channel';\nclass Consent {\n    static fromStatusResponse(response) {\n        return new Consent(response.name, response.status, response.updatedAt, response.acceptedRevision, response.latestRevision);\n    }\n    constructor(name, status, updatedAt, acceptedRevision, lastRevision) {\n        Object.defineProperty(this, \"name\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: name\n        });\n        Object.defineProperty(this, \"status\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: status\n        });\n        Object.defineProperty(this, \"updatedAt\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: updatedAt\n        });\n        Object.defineProperty(this, \"acceptedRevision\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: acceptedRevision\n        });\n        Object.defineProperty(this, \"lastRevision\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: lastRevision\n        });\n    }\n    get isAccepted() {\n        return this.status === 'accepted';\n    }\n    get isStale() {\n        if (!this.isAccepted) {\n            return false;\n        }\n        return this.lastRevision !== null && this.lastRevision !== this.acceptedRevision;\n    }\n}\nexport const status = (messageData) => __awaiter(void 0, void 0, void 0, function* () {\n    const sender = createSender('consentStatus');\n    const response = yield sender(messageData);\n    return Consent.fromStatusResponse(response);\n});\nexport const request = (messageOptions) => {\n    /*\n     * Fake Promise.withResolvers because it is not available in our TS version\n     */\n    let resolve;\n    let reject;\n    const requestPromise = new Promise((res, rej) => {\n        resolve = res;\n        reject = rej;\n    });\n    const requestId = generateUniqueId();\n    const unhandle = createHandler('consentRequestResponse')((message) => {\n        if (message.name !== messageOptions.consent) {\n            return Promise.resolve();\n        }\n        if (message.requestId !== requestId) {\n            return Promise.resolve();\n        }\n        unhandle();\n        resolve(Consent.fromStatusResponse(message.consent));\n        return Promise.resolve();\n    });\n    createSender('consentRequest', { requestId })(messageOptions).catch((reason) => {\n        unhandle();\n        reject(reason);\n    });\n    return {\n        requestPromise,\n        abort: (reason) => {\n            unhandle();\n            reject(reason);\n        },\n    };\n};\n//# sourceMappingURL=index.js.map","/*!\n    localForage -- Offline Storage, Improved\n    Version 1.10.0\n    https://localforage.github.io/localForage\n    (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n  global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n    /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n    try {\n        if (typeof indexedDB !== 'undefined') {\n            return indexedDB;\n        }\n        if (typeof webkitIndexedDB !== 'undefined') {\n            return webkitIndexedDB;\n        }\n        if (typeof mozIndexedDB !== 'undefined') {\n            return mozIndexedDB;\n        }\n        if (typeof OIndexedDB !== 'undefined') {\n            return OIndexedDB;\n        }\n        if (typeof msIndexedDB !== 'undefined') {\n            return msIndexedDB;\n        }\n    } catch (e) {\n        return;\n    }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n    try {\n        // Initialize IndexedDB; fall back to vendor-prefixed versions\n        // if needed.\n        if (!idb || !idb.open) {\n            return false;\n        }\n        // We mimic PouchDB here;\n        //\n        // We test for openDatabase because IE Mobile identifies itself\n        // as Safari. Oh the lulz...\n        var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n        var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n        // Safari <10.1 does not meet our requirements for IDB support\n        // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n        // Safari 10.1 shipped with fetch, we can use that to detect it.\n        // Note: this creates issues with `window.fetch` polyfills and\n        // overrides; see:\n        // https://github.com/localForage/localForage/issues/856\n        return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n        // some outdated implementations of IDB that appear on Samsung\n        // and HTC Android devices <4.4 are missing IDBKeyRange\n        // See: https://github.com/mozilla/localForage/issues/128\n        // See: https://github.com/mozilla/localForage/issues/272\n        typeof IDBKeyRange !== 'undefined';\n    } catch (e) {\n        return false;\n    }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n    /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n    parts = parts || [];\n    properties = properties || {};\n    try {\n        return new Blob(parts, properties);\n    } catch (e) {\n        if (e.name !== 'TypeError') {\n            throw e;\n        }\n        var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n        var builder = new Builder();\n        for (var i = 0; i < parts.length; i += 1) {\n            builder.append(parts[i]);\n        }\n        return builder.getBlob(properties.type);\n    }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n    // In the \"nopromises\" build this will just throw if you don't have\n    // a global promise object, but it would throw anyway later.\n    _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n    if (callback) {\n        promise.then(function (result) {\n            callback(null, result);\n        }, function (error) {\n            callback(error);\n        });\n    }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n    if (typeof callback === 'function') {\n        promise.then(callback);\n    }\n\n    if (typeof errorCallback === 'function') {\n        promise[\"catch\"](errorCallback);\n    }\n}\n\nfunction normalizeKey(key) {\n    // Cast the key to a string, as that's all we can set as a key.\n    if (typeof key !== 'string') {\n        console.warn(key + ' used as a key, but it is not a string.');\n        key = String(key);\n    }\n\n    return key;\n}\n\nfunction getCallback() {\n    if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n        return arguments[arguments.length - 1];\n    }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n    var length = bin.length;\n    var buf = new ArrayBuffer(length);\n    var arr = new Uint8Array(buf);\n    for (var i = 0; i < length; i++) {\n        arr[i] = bin.charCodeAt(i);\n    }\n    return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n    return new Promise$1(function (resolve) {\n        var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n        var blob = createBlob(['']);\n        txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n        txn.onabort = function (e) {\n            // If the transaction aborts now its due to not being able to\n            // write to the database, likely due to the disk being full\n            e.preventDefault();\n            e.stopPropagation();\n            resolve(false);\n        };\n\n        txn.oncomplete = function () {\n            var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n            var matchedEdge = navigator.userAgent.match(/Edge\\//);\n            // MS Edge pretends to be Chrome 42:\n            // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n            resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n        };\n    })[\"catch\"](function () {\n        return false; // error, so assume unsupported\n    });\n}\n\nfunction _checkBlobSupport(idb) {\n    if (typeof supportsBlobs === 'boolean') {\n        return Promise$1.resolve(supportsBlobs);\n    }\n    return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n        supportsBlobs = value;\n        return supportsBlobs;\n    });\n}\n\nfunction _deferReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Create a deferred object representing the current database operation.\n    var deferredOperation = {};\n\n    deferredOperation.promise = new Promise$1(function (resolve, reject) {\n        deferredOperation.resolve = resolve;\n        deferredOperation.reject = reject;\n    });\n\n    // Enqueue the deferred operation.\n    dbContext.deferredOperations.push(deferredOperation);\n\n    // Chain its promise to the database readiness.\n    if (!dbContext.dbReady) {\n        dbContext.dbReady = deferredOperation.promise;\n    } else {\n        dbContext.dbReady = dbContext.dbReady.then(function () {\n            return deferredOperation.promise;\n        });\n    }\n}\n\nfunction _advanceReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Resolve its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.resolve();\n        return deferredOperation.promise;\n    }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Reject its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.reject(err);\n        return deferredOperation.promise;\n    }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n    return new Promise$1(function (resolve, reject) {\n        dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n        if (dbInfo.db) {\n            if (upgradeNeeded) {\n                _deferReadiness(dbInfo);\n                dbInfo.db.close();\n            } else {\n                return resolve(dbInfo.db);\n            }\n        }\n\n        var dbArgs = [dbInfo.name];\n\n        if (upgradeNeeded) {\n            dbArgs.push(dbInfo.version);\n        }\n\n        var openreq = idb.open.apply(idb, dbArgs);\n\n        if (upgradeNeeded) {\n            openreq.onupgradeneeded = function (e) {\n                var db = openreq.result;\n                try {\n                    db.createObjectStore(dbInfo.storeName);\n                    if (e.oldVersion <= 1) {\n                        // Added when support for blob shims was added\n                        db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n                    }\n                } catch (ex) {\n                    if (ex.name === 'ConstraintError') {\n                        console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n                    } else {\n                        throw ex;\n                    }\n                }\n            };\n        }\n\n        openreq.onerror = function (e) {\n            e.preventDefault();\n            reject(openreq.error);\n        };\n\n        openreq.onsuccess = function () {\n            var db = openreq.result;\n            db.onversionchange = function (e) {\n                // Triggered when the database is modified (e.g. adding an objectStore) or\n                // deleted (even when initiated by other sessions in different tabs).\n                // Closing the connection here prevents those operations from being blocked.\n                // If the database is accessed again later by this instance, the connection\n                // will be reopened or the database recreated as needed.\n                e.target.close();\n            };\n            resolve(db);\n            _advanceReadiness(dbInfo);\n        };\n    });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n    return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n    return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n    if (!dbInfo.db) {\n        return true;\n    }\n\n    var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n    var isDowngrade = dbInfo.version < dbInfo.db.version;\n    var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n    if (isDowngrade) {\n        // If the version is not the default one\n        // then warn for impossible downgrade.\n        if (dbInfo.version !== defaultVersion) {\n            console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n        }\n        // Align the versions to prevent errors.\n        dbInfo.version = dbInfo.db.version;\n    }\n\n    if (isUpgrade || isNewStore) {\n        // If the store is new then increment the version (if needed).\n        // This will trigger an \"upgradeneeded\" event which is required\n        // for creating a store.\n        if (isNewStore) {\n            var incVersion = dbInfo.db.version + 1;\n            if (incVersion > dbInfo.version) {\n                dbInfo.version = incVersion;\n            }\n        }\n\n        return true;\n    }\n\n    return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n    return new Promise$1(function (resolve, reject) {\n        var reader = new FileReader();\n        reader.onerror = reject;\n        reader.onloadend = function (e) {\n            var base64 = btoa(e.target.result || '');\n            resolve({\n                __local_forage_encoded_blob: true,\n                data: base64,\n                type: blob.type\n            });\n        };\n        reader.readAsBinaryString(blob);\n    });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n    var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n    return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n    return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n    var self = this;\n\n    var promise = self._initReady().then(function () {\n        var dbContext = dbContexts[self._dbInfo.name];\n\n        if (dbContext && dbContext.dbReady) {\n            return dbContext.dbReady;\n        }\n    });\n\n    executeTwoCallbacks(promise, callback, callback);\n    return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n    _deferReadiness(dbInfo);\n\n    var dbContext = dbContexts[dbInfo.name];\n    var forages = dbContext.forages;\n\n    for (var i = 0; i < forages.length; i++) {\n        var forage = forages[i];\n        if (forage._dbInfo.db) {\n            forage._dbInfo.db.close();\n            forage._dbInfo.db = null;\n        }\n    }\n    dbInfo.db = null;\n\n    return _getOriginalConnection(dbInfo).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        // store the latest db reference\n        // in case the db was upgraded\n        dbInfo.db = dbContext.db = db;\n        for (var i = 0; i < forages.length; i++) {\n            forages[i]._dbInfo.db = db;\n        }\n    })[\"catch\"](function (err) {\n        _rejectReadiness(dbInfo, err);\n        throw err;\n    });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n    if (retries === undefined) {\n        retries = 1;\n    }\n\n    try {\n        var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n        callback(null, tx);\n    } catch (err) {\n        if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n            return Promise$1.resolve().then(function () {\n                if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n                    // increase the db version, to create the new ObjectStore\n                    if (dbInfo.db) {\n                        dbInfo.version = dbInfo.db.version + 1;\n                    }\n                    // Reopen the database for upgrading.\n                    return _getUpgradedConnection(dbInfo);\n                }\n            }).then(function () {\n                return _tryReconnect(dbInfo).then(function () {\n                    createTransaction(dbInfo, mode, callback, retries - 1);\n                });\n            })[\"catch\"](callback);\n        }\n\n        callback(err);\n    }\n}\n\nfunction createDbContext() {\n    return {\n        // Running localForages sharing a database.\n        forages: [],\n        // Shared database.\n        db: null,\n        // Database readiness (promise).\n        dbReady: null,\n        // Deferred operations on the database.\n        deferredOperations: []\n    };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    // Get the current context of the database;\n    var dbContext = dbContexts[dbInfo.name];\n\n    // ...or create a new context.\n    if (!dbContext) {\n        dbContext = createDbContext();\n        // Register the new context in the global container.\n        dbContexts[dbInfo.name] = dbContext;\n    }\n\n    // Register itself as a running localForage in the current context.\n    dbContext.forages.push(self);\n\n    // Replace the default `ready()` function with the specialized one.\n    if (!self._initReady) {\n        self._initReady = self.ready;\n        self.ready = _fullyReady;\n    }\n\n    // Create an array of initialization states of the related localForages.\n    var initPromises = [];\n\n    function ignoreErrors() {\n        // Don't handle errors here,\n        // just makes sure related localForages aren't pending.\n        return Promise$1.resolve();\n    }\n\n    for (var j = 0; j < dbContext.forages.length; j++) {\n        var forage = dbContext.forages[j];\n        if (forage !== self) {\n            // Don't wait for itself...\n            initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n        }\n    }\n\n    // Take a snapshot of the related localForages.\n    var forages = dbContext.forages.slice(0);\n\n    // Initialize the connection process only when\n    // all the related localForages aren't pending.\n    return Promise$1.all(initPromises).then(function () {\n        dbInfo.db = dbContext.db;\n        // Get the connection or open a new one without upgrade.\n        return _getOriginalConnection(dbInfo);\n    }).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        dbInfo.db = dbContext.db = db;\n        self._dbInfo = dbInfo;\n        // Share the final connection amongst related localForages.\n        for (var k = 0; k < forages.length; k++) {\n            var forage = forages[k];\n            if (forage !== self) {\n                // Self is already up-to-date.\n                forage._dbInfo.db = dbInfo.db;\n                forage._dbInfo.version = dbInfo.version;\n            }\n        }\n    });\n}\n\nfunction getItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.get(key);\n\n                    req.onsuccess = function () {\n                        var value = req.result;\n                        if (value === undefined) {\n                            value = null;\n                        }\n                        if (_isEncodedBlob(value)) {\n                            value = _decodeBlob(value);\n                        }\n                        resolve(value);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openCursor();\n                    var iterationNumber = 1;\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (cursor) {\n                            var value = cursor.value;\n                            if (_isEncodedBlob(value)) {\n                                value = _decodeBlob(value);\n                            }\n                            var result = iterator(value, cursor.key, iterationNumber++);\n\n                            // when the iterator callback returns any\n                            // (non-`undefined`) value, then we stop\n                            // the iteration immediately\n                            if (result !== void 0) {\n                                resolve(result);\n                            } else {\n                                cursor[\"continue\"]();\n                            }\n                        } else {\n                            resolve();\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n\n    return promise;\n}\n\nfunction setItem(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        var dbInfo;\n        self.ready().then(function () {\n            dbInfo = self._dbInfo;\n            if (toString.call(value) === '[object Blob]') {\n                return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n                    if (blobSupport) {\n                        return value;\n                    }\n                    return _encodeBlob(value);\n                });\n            }\n            return value;\n        }).then(function (value) {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n\n                    // The reason we don't _save_ null is because IE 10 does\n                    // not support saving the `null` type in IndexedDB. How\n                    // ironic, given the bug below!\n                    // See: https://github.com/mozilla/localForage/issues/161\n                    if (value === null) {\n                        value = undefined;\n                    }\n\n                    var req = store.put(value, key);\n\n                    transaction.oncomplete = function () {\n                        // Cast to undefined so the value passed to\n                        // callback/promise is the same as what one would get out\n                        // of `getItem()` later. This leads to some weirdness\n                        // (setItem('foo', undefined) will return `null`), but\n                        // it's not my fault localStorage is our baseline and that\n                        // it's weird.\n                        if (value === undefined) {\n                            value = null;\n                        }\n\n                        resolve(value);\n                    };\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction removeItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    // We use a Grunt task to make this safe for IE and some\n                    // versions of Android (including those used by Cordova).\n                    // Normally IE won't like `.delete()` and will insist on\n                    // using `['delete']()`, but we have a build step that\n                    // fixes this for us now.\n                    var req = store[\"delete\"](key);\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onerror = function () {\n                        reject(req.error);\n                    };\n\n                    // The request will be also be aborted if we've exceeded our storage\n                    // space.\n                    transaction.onabort = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction clear(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.clear();\n\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction length(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.count();\n\n                    req.onsuccess = function () {\n                        resolve(req.result);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction key(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        if (n < 0) {\n            resolve(null);\n\n            return;\n        }\n\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var advanced = false;\n                    var req = store.openKeyCursor();\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n                        if (!cursor) {\n                            // this means there weren't enough keys\n                            resolve(null);\n\n                            return;\n                        }\n\n                        if (n === 0) {\n                            // We have the first key, return it if that's what they\n                            // wanted.\n                            resolve(cursor.key);\n                        } else {\n                            if (!advanced) {\n                                // Otherwise, ask the cursor to skip ahead n\n                                // records.\n                                advanced = true;\n                                cursor.advance(n);\n                            } else {\n                                // When we get here, we've got the nth key.\n                                resolve(cursor.key);\n                            }\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openKeyCursor();\n                    var keys = [];\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (!cursor) {\n                            resolve(keys);\n                            return;\n                        }\n\n                        keys.push(cursor.key);\n                        cursor[\"continue\"]();\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n        var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n            var dbContext = dbContexts[options.name];\n            var forages = dbContext.forages;\n            dbContext.db = db;\n            for (var i = 0; i < forages.length; i++) {\n                forages[i]._dbInfo.db = db;\n            }\n            return db;\n        });\n\n        if (!options.storeName) {\n            promise = dbPromise.then(function (db) {\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                }\n\n                var dropDBPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.deleteDatabase(options.name);\n\n                    req.onerror = function () {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        reject(req.error);\n                    };\n\n                    req.onblocked = function () {\n                        // Closing all open connections in onversionchange handler should prevent this situation, but if\n                        // we do get here, it just means the request remains pending - eventually it will succeed or error\n                        console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        resolve(db);\n                    };\n                });\n\n                return dropDBPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var i = 0; i < forages.length; i++) {\n                        var _forage = forages[i];\n                        _advanceReadiness(_forage._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        } else {\n            promise = dbPromise.then(function (db) {\n                if (!db.objectStoreNames.contains(options.storeName)) {\n                    return;\n                }\n\n                var newVersion = db.version + 1;\n\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                    forage._dbInfo.version = newVersion;\n                }\n\n                var dropObjectPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.open(options.name, newVersion);\n\n                    req.onerror = function (err) {\n                        var db = req.result;\n                        db.close();\n                        reject(err);\n                    };\n\n                    req.onupgradeneeded = function () {\n                        var db = req.result;\n                        db.deleteObjectStore(options.storeName);\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        db.close();\n                        resolve(db);\n                    };\n                });\n\n                return dropObjectPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var j = 0; j < forages.length; j++) {\n                        var _forage2 = forages[j];\n                        _forage2._dbInfo.db = db;\n                        _advanceReadiness(_forage2._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        }\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar asyncStorage = {\n    _driver: 'asyncStorage',\n    _initStorage: _initStorage,\n    _support: isIndexedDBValid(),\n    iterate: iterate,\n    getItem: getItem,\n    setItem: setItem,\n    removeItem: removeItem,\n    clear: clear,\n    length: length,\n    key: key,\n    keys: keys,\n    dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n    return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n    // Fill the string into a ArrayBuffer.\n    var bufferLength = serializedString.length * 0.75;\n    var len = serializedString.length;\n    var i;\n    var p = 0;\n    var encoded1, encoded2, encoded3, encoded4;\n\n    if (serializedString[serializedString.length - 1] === '=') {\n        bufferLength--;\n        if (serializedString[serializedString.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    var buffer = new ArrayBuffer(bufferLength);\n    var bytes = new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n        encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n        encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n        encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n        /*jslint bitwise: true */\n        bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n        bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n        bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n    }\n    return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n    // base64-arraybuffer\n    var bytes = new Uint8Array(buffer);\n    var base64String = '';\n    var i;\n\n    for (i = 0; i < bytes.length; i += 3) {\n        /*jslint bitwise: true */\n        base64String += BASE_CHARS[bytes[i] >> 2];\n        base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n        base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n        base64String += BASE_CHARS[bytes[i + 2] & 63];\n    }\n\n    if (bytes.length % 3 === 2) {\n        base64String = base64String.substring(0, base64String.length - 1) + '=';\n    } else if (bytes.length % 3 === 1) {\n        base64String = base64String.substring(0, base64String.length - 2) + '==';\n    }\n\n    return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n    var valueType = '';\n    if (value) {\n        valueType = toString$1.call(value);\n    }\n\n    // Cannot use `value instanceof ArrayBuffer` or such here, as these\n    // checks fail when running the tests using casper.js...\n    //\n    // TODO: See why those tests fail and use a better solution.\n    if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n        // Convert binary arrays to a string and prefix the string with\n        // a special marker.\n        var buffer;\n        var marker = SERIALIZED_MARKER;\n\n        if (value instanceof ArrayBuffer) {\n            buffer = value;\n            marker += TYPE_ARRAYBUFFER;\n        } else {\n            buffer = value.buffer;\n\n            if (valueType === '[object Int8Array]') {\n                marker += TYPE_INT8ARRAY;\n            } else if (valueType === '[object Uint8Array]') {\n                marker += TYPE_UINT8ARRAY;\n            } else if (valueType === '[object Uint8ClampedArray]') {\n                marker += TYPE_UINT8CLAMPEDARRAY;\n            } else if (valueType === '[object Int16Array]') {\n                marker += TYPE_INT16ARRAY;\n            } else if (valueType === '[object Uint16Array]') {\n                marker += TYPE_UINT16ARRAY;\n            } else if (valueType === '[object Int32Array]') {\n                marker += TYPE_INT32ARRAY;\n            } else if (valueType === '[object Uint32Array]') {\n                marker += TYPE_UINT32ARRAY;\n            } else if (valueType === '[object Float32Array]') {\n                marker += TYPE_FLOAT32ARRAY;\n            } else if (valueType === '[object Float64Array]') {\n                marker += TYPE_FLOAT64ARRAY;\n            } else {\n                callback(new Error('Failed to get type for BinaryArray'));\n            }\n        }\n\n        callback(marker + bufferToString(buffer));\n    } else if (valueType === '[object Blob]') {\n        // Conver the blob to a binaryArray and then to a string.\n        var fileReader = new FileReader();\n\n        fileReader.onload = function () {\n            // Backwards-compatible prefix for the blob type.\n            var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n            callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n        };\n\n        fileReader.readAsArrayBuffer(value);\n    } else {\n        try {\n            callback(JSON.stringify(value));\n        } catch (e) {\n            console.error(\"Couldn't convert value into a JSON string: \", value);\n\n            callback(null, e);\n        }\n    }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n    // If we haven't marked this string as being specially serialized (i.e.\n    // something other than serialized JSON), we can just return it and be\n    // done with it.\n    if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n        return JSON.parse(value);\n    }\n\n    // The following code deals with deserializing some kind of Blob or\n    // TypedArray. First we separate out the type of data we're dealing\n    // with from the data itself.\n    var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n    var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n    var blobType;\n    // Backwards-compatible blob type serialization strategy.\n    // DBs created with older versions of localForage will simply not have the blob type.\n    if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n        var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n        blobType = matcher[1];\n        serializedString = serializedString.substring(matcher[0].length);\n    }\n    var buffer = stringToBuffer(serializedString);\n\n    // Return the right type based on the code/type set during\n    // serialization.\n    switch (type) {\n        case TYPE_ARRAYBUFFER:\n            return buffer;\n        case TYPE_BLOB:\n            return createBlob([buffer], { type: blobType });\n        case TYPE_INT8ARRAY:\n            return new Int8Array(buffer);\n        case TYPE_UINT8ARRAY:\n            return new Uint8Array(buffer);\n        case TYPE_UINT8CLAMPEDARRAY:\n            return new Uint8ClampedArray(buffer);\n        case TYPE_INT16ARRAY:\n            return new Int16Array(buffer);\n        case TYPE_UINT16ARRAY:\n            return new Uint16Array(buffer);\n        case TYPE_INT32ARRAY:\n            return new Int32Array(buffer);\n        case TYPE_UINT32ARRAY:\n            return new Uint32Array(buffer);\n        case TYPE_FLOAT32ARRAY:\n            return new Float32Array(buffer);\n        case TYPE_FLOAT64ARRAY:\n            return new Float64Array(buffer);\n        default:\n            throw new Error('Unkown type: ' + type);\n    }\n}\n\nvar localforageSerializer = {\n    serialize: serialize,\n    deserialize: deserialize,\n    stringToBuffer: stringToBuffer,\n    bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n    t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n        }\n    }\n\n    var dbInfoPromise = new Promise$1(function (resolve, reject) {\n        // Open the database; the openDatabase API will automatically\n        // create it for us if it doesn't exist.\n        try {\n            dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n        } catch (e) {\n            return reject(e);\n        }\n\n        // Create our key/value table if it doesn't exist.\n        dbInfo.db.transaction(function (t) {\n            createDbTable(t, dbInfo, function () {\n                self._dbInfo = dbInfo;\n                resolve();\n            }, function (t, error) {\n                reject(error);\n            });\n        }, reject);\n    });\n\n    dbInfo.serializer = localforageSerializer;\n    return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n    t.executeSql(sqlStatement, args, callback, function (t, error) {\n        if (error.code === error.SYNTAX_ERR) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n                if (!results.rows.length) {\n                    // if the table is missing (was deleted)\n                    // re-create it table and retry\n                    createDbTable(t, dbInfo, function () {\n                        t.executeSql(sqlStatement, args, callback, errorCallback);\n                    }, errorCallback);\n                } else {\n                    errorCallback(t, error);\n                }\n            }, errorCallback);\n        } else {\n            errorCallback(t, error);\n        }\n    }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).value : null;\n\n                    // Check to see if this is serialized content we need to\n                    // unpack.\n                    if (result) {\n                        result = dbInfo.serializer.deserialize(result);\n                    }\n\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var rows = results.rows;\n                    var length = rows.length;\n\n                    for (var i = 0; i < length; i++) {\n                        var item = rows.item(i);\n                        var result = item.value;\n\n                        // Check to see if this is serialized content\n                        // we need to unpack.\n                        if (result) {\n                            result = dbInfo.serializer.deserialize(result);\n                        }\n\n                        result = iterator(result, item.key, i + 1);\n\n                        // void(0) prevents problems with redefinition\n                        // of `undefined`.\n                        if (result !== void 0) {\n                            resolve(result);\n                            return;\n                        }\n                    }\n\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            // The localStorage API doesn't return undefined values in an\n            // \"expected\" way, so undefined is always cast to null in all\n            // drivers. See: https://github.com/mozilla/localForage/pull/42\n            if (value === undefined) {\n                value = null;\n            }\n\n            // Save the original value to pass to the callback.\n            var originalValue = value;\n\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    dbInfo.db.transaction(function (t) {\n                        tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n                            resolve(originalValue);\n                        }, function (t, error) {\n                            reject(error);\n                        });\n                    }, function (sqlError) {\n                        // The transaction failed; check\n                        // to see if it's a quota error.\n                        if (sqlError.code === sqlError.QUOTA_ERR) {\n                            // We reject the callback outright for now, but\n                            // it's worth trying to re-run the transaction.\n                            // Even if the user accepts the prompt to use\n                            // more storage on Safari, this error will\n                            // be called.\n                            //\n                            // Try to re-run the transaction.\n                            if (retriesLeft > 0) {\n                                resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n                                return;\n                            }\n                            reject(sqlError);\n                        }\n                    });\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n    return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                // Ahhh, SQL makes this one soooooo easy.\n                tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var result = results.rows.item(0).c;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).key : null;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var keys = [];\n\n                    for (var i = 0; i < results.rows.length; i++) {\n                        keys.push(results.rows.item(i).key);\n                    }\n\n                    resolve(keys);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n    return new Promise$1(function (resolve, reject) {\n        db.transaction(function (t) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n                var storeNames = [];\n\n                for (var i = 0; i < results.rows.length; i++) {\n                    storeNames.push(results.rows.item(i).name);\n                }\n\n                resolve({\n                    db: db,\n                    storeNames: storeNames\n                });\n            }, function (t, error) {\n                reject(error);\n            });\n        }, function (sqlError) {\n            reject(sqlError);\n        });\n    });\n}\n\nfunction dropInstance$1(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            var db;\n            if (options.name === currentConfig.name) {\n                // use the db reference of the current instance\n                db = self._dbInfo.db;\n            } else {\n                db = openDatabase(options.name, '', '', 0);\n            }\n\n            if (!options.storeName) {\n                // drop all database tables\n                resolve(getAllStoreNames(db));\n            } else {\n                resolve({\n                    db: db,\n                    storeNames: [options.storeName]\n                });\n            }\n        }).then(function (operationInfo) {\n            return new Promise$1(function (resolve, reject) {\n                operationInfo.db.transaction(function (t) {\n                    function dropTable(storeName) {\n                        return new Promise$1(function (resolve, reject) {\n                            t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n                                resolve();\n                            }, function (t, error) {\n                                reject(error);\n                            });\n                        });\n                    }\n\n                    var operations = [];\n                    for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n                        operations.push(dropTable(operationInfo.storeNames[i]));\n                    }\n\n                    Promise$1.all(operations).then(function () {\n                        resolve();\n                    })[\"catch\"](function (e) {\n                        reject(e);\n                    });\n                }, function (sqlError) {\n                    reject(sqlError);\n                });\n            });\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar webSQLStorage = {\n    _driver: 'webSQLStorage',\n    _initStorage: _initStorage$1,\n    _support: isWebSQLValid(),\n    iterate: iterate$1,\n    getItem: getItem$1,\n    setItem: setItem$1,\n    removeItem: removeItem$1,\n    clear: clear$1,\n    length: length$1,\n    key: key$1,\n    keys: keys$1,\n    dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n    try {\n        return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n        // in IE8 typeof localStorage.setItem === 'object'\n        !!localStorage.setItem;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n    var keyPrefix = options.name + '/';\n\n    if (options.storeName !== defaultConfig.storeName) {\n        keyPrefix += options.storeName + '/';\n    }\n    return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n    var localStorageTestKey = '_localforage_support_test';\n\n    try {\n        localStorage.setItem(localStorageTestKey, true);\n        localStorage.removeItem(localStorageTestKey);\n\n        return false;\n    } catch (e) {\n        return true;\n    }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n    return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n    var self = this;\n    var dbInfo = {};\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n    if (!_isLocalStorageUsable()) {\n        return Promise$1.reject();\n    }\n\n    self._dbInfo = dbInfo;\n    dbInfo.serializer = localforageSerializer;\n\n    return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var keyPrefix = self._dbInfo.keyPrefix;\n\n        for (var i = localStorage.length - 1; i >= 0; i--) {\n            var key = localStorage.key(i);\n\n            if (key.indexOf(keyPrefix) === 0) {\n                localStorage.removeItem(key);\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n        // If a result was found, parse it from the serialized\n        // string into a JS object. If result isn't truthy, the key\n        // is likely undefined and we'll pass it straight to the\n        // callback.\n        if (result) {\n            result = dbInfo.serializer.deserialize(result);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n    var self = this;\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var keyPrefix = dbInfo.keyPrefix;\n        var keyPrefixLength = keyPrefix.length;\n        var length = localStorage.length;\n\n        // We use a dedicated iterator instead of the `i` variable below\n        // so other keys we fetch in localStorage aren't counted in\n        // the `iterationNumber` argument passed to the `iterate()`\n        // callback.\n        //\n        // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n        var iterationNumber = 1;\n\n        for (var i = 0; i < length; i++) {\n            var key = localStorage.key(i);\n            if (key.indexOf(keyPrefix) !== 0) {\n                continue;\n            }\n            var value = localStorage.getItem(key);\n\n            // If a result was found, parse it from the serialized\n            // string into a JS object. If result isn't truthy, the\n            // key is likely undefined and we'll pass it straight\n            // to the iterator.\n            if (value) {\n                value = dbInfo.serializer.deserialize(value);\n            }\n\n            value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n            if (value !== void 0) {\n                return value;\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result;\n        try {\n            result = localStorage.key(n);\n        } catch (error) {\n            result = null;\n        }\n\n        // Remove the prefix from the key, if a key is found.\n        if (result) {\n            result = result.substring(dbInfo.keyPrefix.length);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var length = localStorage.length;\n        var keys = [];\n\n        for (var i = 0; i < length; i++) {\n            var itemKey = localStorage.key(i);\n            if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n                keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n            }\n        }\n\n        return keys;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n    var self = this;\n    var promise = self.keys().then(function (keys) {\n        return keys.length;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        localStorage.removeItem(dbInfo.keyPrefix + key);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        // Convert undefined values to null.\n        // https://github.com/mozilla/localForage/pull/42\n        if (value === undefined) {\n            value = null;\n        }\n\n        // Save the original value to pass to the callback.\n        var originalValue = value;\n\n        return new Promise$1(function (resolve, reject) {\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    try {\n                        localStorage.setItem(dbInfo.keyPrefix + key, value);\n                        resolve(originalValue);\n                    } catch (e) {\n                        // localStorage capacity exceeded.\n                        // TODO: Make this a specific error/event.\n                        if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n                            reject(e);\n                        }\n                        reject(e);\n                    }\n                }\n            });\n        });\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        var currentConfig = this.config();\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            if (!options.storeName) {\n                resolve(options.name + '/');\n            } else {\n                resolve(_getKeyPrefix(options, self._defaultConfig));\n            }\n        }).then(function (keyPrefix) {\n            for (var i = localStorage.length - 1; i >= 0; i--) {\n                var key = localStorage.key(i);\n\n                if (key.indexOf(keyPrefix) === 0) {\n                    localStorage.removeItem(key);\n                }\n            }\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar localStorageWrapper = {\n    _driver: 'localStorageWrapper',\n    _initStorage: _initStorage$2,\n    _support: isLocalStorageValid(),\n    iterate: iterate$2,\n    getItem: getItem$2,\n    setItem: setItem$2,\n    removeItem: removeItem$2,\n    clear: clear$2,\n    length: length$2,\n    key: key$2,\n    keys: keys$2,\n    dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n    return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n    var len = array.length;\n    var i = 0;\n    while (i < len) {\n        if (sameValue(array[i], searchElement)) {\n            return true;\n        }\n        i++;\n    }\n\n    return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n    return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n    INDEXEDDB: asyncStorage,\n    WEBSQL: webSQLStorage,\n    LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n    description: '',\n    driver: DefaultDriverOrder.slice(),\n    name: 'localforage',\n    // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n    // we can use without a prompt.\n    size: 4980736,\n    storeName: 'keyvaluepairs',\n    version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n    localForageInstance[libraryMethod] = function () {\n        var _args = arguments;\n        return localForageInstance.ready().then(function () {\n            return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n        });\n    };\n}\n\nfunction extend() {\n    for (var i = 1; i < arguments.length; i++) {\n        var arg = arguments[i];\n\n        if (arg) {\n            for (var _key in arg) {\n                if (arg.hasOwnProperty(_key)) {\n                    if (isArray(arg[_key])) {\n                        arguments[0][_key] = arg[_key].slice();\n                    } else {\n                        arguments[0][_key] = arg[_key];\n                    }\n                }\n            }\n        }\n    }\n\n    return arguments[0];\n}\n\nvar LocalForage = function () {\n    function LocalForage(options) {\n        _classCallCheck(this, LocalForage);\n\n        for (var driverTypeKey in DefaultDrivers) {\n            if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n                var driver = DefaultDrivers[driverTypeKey];\n                var driverName = driver._driver;\n                this[driverTypeKey] = driverName;\n\n                if (!DefinedDrivers[driverName]) {\n                    // we don't need to wait for the promise,\n                    // since the default drivers can be defined\n                    // in a blocking manner\n                    this.defineDriver(driver);\n                }\n            }\n        }\n\n        this._defaultConfig = extend({}, DefaultConfig);\n        this._config = extend({}, this._defaultConfig, options);\n        this._driverSet = null;\n        this._initDriver = null;\n        this._ready = false;\n        this._dbInfo = null;\n\n        this._wrapLibraryMethodsWithReady();\n        this.setDriver(this._config.driver)[\"catch\"](function () {});\n    }\n\n    // Set any config values for localForage; can be called anytime before\n    // the first API call (e.g. `getItem`, `setItem`).\n    // We loop through options so we don't overwrite existing config\n    // values.\n\n\n    LocalForage.prototype.config = function config(options) {\n        // If the options argument is an object, we use it to set values.\n        // Otherwise, we return either a specified config value or all\n        // config values.\n        if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n            // If localforage is ready and fully initialized, we can't set\n            // any new configuration values. Instead, we return an error.\n            if (this._ready) {\n                return new Error(\"Can't call config() after localforage \" + 'has been used.');\n            }\n\n            for (var i in options) {\n                if (i === 'storeName') {\n                    options[i] = options[i].replace(/\\W/g, '_');\n                }\n\n                if (i === 'version' && typeof options[i] !== 'number') {\n                    return new Error('Database version must be a number.');\n                }\n\n                this._config[i] = options[i];\n            }\n\n            // after all config options are set and\n            // the driver option is used, try setting it\n            if ('driver' in options && options.driver) {\n                return this.setDriver(this._config.driver);\n            }\n\n            return true;\n        } else if (typeof options === 'string') {\n            return this._config[options];\n        } else {\n            return this._config;\n        }\n    };\n\n    // Used to define a custom driver, shared across all instances of\n    // localForage.\n\n\n    LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n        var promise = new Promise$1(function (resolve, reject) {\n            try {\n                var driverName = driverObject._driver;\n                var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n                // A driver name should be defined and not overlap with the\n                // library-defined, default drivers.\n                if (!driverObject._driver) {\n                    reject(complianceError);\n                    return;\n                }\n\n                var driverMethods = LibraryMethods.concat('_initStorage');\n                for (var i = 0, len = driverMethods.length; i < len; i++) {\n                    var driverMethodName = driverMethods[i];\n\n                    // when the property is there,\n                    // it should be a method even when optional\n                    var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n                    if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n                        reject(complianceError);\n                        return;\n                    }\n                }\n\n                var configureMissingMethods = function configureMissingMethods() {\n                    var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n                        return function () {\n                            var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n                            var promise = Promise$1.reject(error);\n                            executeCallback(promise, arguments[arguments.length - 1]);\n                            return promise;\n                        };\n                    };\n\n                    for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n                        var optionalDriverMethod = OptionalDriverMethods[_i];\n                        if (!driverObject[optionalDriverMethod]) {\n                            driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n                        }\n                    }\n                };\n\n                configureMissingMethods();\n\n                var setDriverSupport = function setDriverSupport(support) {\n                    if (DefinedDrivers[driverName]) {\n                        console.info('Redefining LocalForage driver: ' + driverName);\n                    }\n                    DefinedDrivers[driverName] = driverObject;\n                    DriverSupport[driverName] = support;\n                    // don't use a then, so that we can define\n                    // drivers that have simple _support methods\n                    // in a blocking manner\n                    resolve();\n                };\n\n                if ('_support' in driverObject) {\n                    if (driverObject._support && typeof driverObject._support === 'function') {\n                        driverObject._support().then(setDriverSupport, reject);\n                    } else {\n                        setDriverSupport(!!driverObject._support);\n                    }\n                } else {\n                    setDriverSupport(true);\n                }\n            } catch (e) {\n                reject(e);\n            }\n        });\n\n        executeTwoCallbacks(promise, callback, errorCallback);\n        return promise;\n    };\n\n    LocalForage.prototype.driver = function driver() {\n        return this._driver || null;\n    };\n\n    LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n        var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n        executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n        return getDriverPromise;\n    };\n\n    LocalForage.prototype.getSerializer = function getSerializer(callback) {\n        var serializerPromise = Promise$1.resolve(localforageSerializer);\n        executeTwoCallbacks(serializerPromise, callback);\n        return serializerPromise;\n    };\n\n    LocalForage.prototype.ready = function ready(callback) {\n        var self = this;\n\n        var promise = self._driverSet.then(function () {\n            if (self._ready === null) {\n                self._ready = self._initDriver();\n            }\n\n            return self._ready;\n        });\n\n        executeTwoCallbacks(promise, callback, callback);\n        return promise;\n    };\n\n    LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n        var self = this;\n\n        if (!isArray(drivers)) {\n            drivers = [drivers];\n        }\n\n        var supportedDrivers = this._getSupportedDrivers(drivers);\n\n        function setDriverToConfig() {\n            self._config.driver = self.driver();\n        }\n\n        function extendSelfWithDriver(driver) {\n            self._extend(driver);\n            setDriverToConfig();\n\n            self._ready = self._initStorage(self._config);\n            return self._ready;\n        }\n\n        function initDriver(supportedDrivers) {\n            return function () {\n                var currentDriverIndex = 0;\n\n                function driverPromiseLoop() {\n                    while (currentDriverIndex < supportedDrivers.length) {\n                        var driverName = supportedDrivers[currentDriverIndex];\n                        currentDriverIndex++;\n\n                        self._dbInfo = null;\n                        self._ready = null;\n\n                        return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n                    }\n\n                    setDriverToConfig();\n                    var error = new Error('No available storage method found.');\n                    self._driverSet = Promise$1.reject(error);\n                    return self._driverSet;\n                }\n\n                return driverPromiseLoop();\n            };\n        }\n\n        // There might be a driver initialization in progress\n        // so wait for it to finish in order to avoid a possible\n        // race condition to set _dbInfo\n        var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n            return Promise$1.resolve();\n        }) : Promise$1.resolve();\n\n        this._driverSet = oldDriverSetDone.then(function () {\n            var driverName = supportedDrivers[0];\n            self._dbInfo = null;\n            self._ready = null;\n\n            return self.getDriver(driverName).then(function (driver) {\n                self._driver = driver._driver;\n                setDriverToConfig();\n                self._wrapLibraryMethodsWithReady();\n                self._initDriver = initDriver(supportedDrivers);\n            });\n        })[\"catch\"](function () {\n            setDriverToConfig();\n            var error = new Error('No available storage method found.');\n            self._driverSet = Promise$1.reject(error);\n            return self._driverSet;\n        });\n\n        executeTwoCallbacks(this._driverSet, callback, errorCallback);\n        return this._driverSet;\n    };\n\n    LocalForage.prototype.supports = function supports(driverName) {\n        return !!DriverSupport[driverName];\n    };\n\n    LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n        extend(this, libraryMethodsAndProperties);\n    };\n\n    LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n        var supportedDrivers = [];\n        for (var i = 0, len = drivers.length; i < len; i++) {\n            var driverName = drivers[i];\n            if (this.supports(driverName)) {\n                supportedDrivers.push(driverName);\n            }\n        }\n        return supportedDrivers;\n    };\n\n    LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n        // Add a stub for each driver API method that delays the call to the\n        // corresponding driver method until localForage is ready. These stubs\n        // will be replaced by the driver methods as soon as the driver is\n        // loaded, so there is no performance impact.\n        for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n            callWhenReady(this, LibraryMethods[i]);\n        }\n    };\n\n    LocalForage.prototype.createInstance = function createInstance(options) {\n        return new LocalForage(options);\n    };\n\n    return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport SerializerFactory from './../../_internals/serializer';\nimport localforage from 'localforage';\nimport { reactive, watch, onBeforeUnmount, ref } from 'vue';\nimport { handle, send } from '../../channel';\nconst { serialize, deserialize } = SerializerFactory({\n    handle: handle,\n    send: send,\n});\nfunction setItem({ key, newValue, persistentSharedValueStore, persistentSharedValueStoreBroadcast, }) {\n    return __awaiter(this, void 0, void 0, function* () {\n        const serializedValue = serialize(newValue);\n        yield persistentSharedValueStore.setItem(key, serializedValue);\n        persistentSharedValueStoreBroadcast.postMessage({\n            type: 'store-change',\n            key: key,\n        });\n    });\n}\nfunction createValueWatcher({ key, sharedValue, persistentSharedValueStore, persistentSharedValueStoreBroadcast, getPendingValue, }) {\n    return watch(() => sharedValue.value, (newValue) => __awaiter(this, void 0, void 0, function* () {\n        if (getPendingValue()) {\n            return;\n        }\n        yield setItem({\n            key,\n            newValue,\n            persistentSharedValueStore,\n            persistentSharedValueStoreBroadcast,\n        });\n    }), { deep: true });\n}\nfunction setRemoteValue({ setPendingValue, removeWatcher, setWatcher, store, key, sharedValue, }) {\n    setPendingValue(true);\n    removeWatcher();\n    return store.getItem(key)\n        .then((value) => {\n        if (value === null) {\n            return;\n        }\n        const deserializedValue = deserialize(value, new MessageEvent('message'));\n        sharedValue.value = deserializedValue;\n    })\n        .finally(() => {\n        setPendingValue(false);\n        setWatcher();\n    });\n}\n/**\n * @internal\n * @private\n */\nexport function _useSharedState(key, initalValue) {\n    const isReady = ref(false);\n    let isPending = false;\n    const getPendingValue = () => isPending;\n    const setPendingValue = (newValue) => {\n        isPending = newValue;\n    };\n    const removeWatcher = () => {\n        unwatchValue();\n    };\n    const setWatcher = () => {\n        unwatchValue();\n        unwatchValue = createValueWatcher({\n            key,\n            sharedValue,\n            persistentSharedValueStore,\n            persistentSharedValueStoreBroadcast,\n            getPendingValue,\n        });\n    };\n    const persistentSharedValueStore = localforage.createInstance({\n        name: 'adminExtensionSDK',\n        storeName: 'persistentSharedValueStore',\n    });\n    const persistentSharedValueStoreBroadcast = new BroadcastChannel('persistentSharedValueStore');\n    const sharedValue = reactive({\n        value: initalValue,\n    });\n    let unwatchValue = createValueWatcher({\n        key,\n        sharedValue,\n        persistentSharedValueStore,\n        persistentSharedValueStoreBroadcast,\n        getPendingValue,\n    });\n    const eventListener = (event) => {\n        if (event.data.type !== 'store-change') {\n            return;\n        }\n        if (event.data.key !== key) {\n            return;\n        }\n        void setRemoteValue({\n            setPendingValue,\n            removeWatcher,\n            setWatcher,\n            store: persistentSharedValueStore,\n            key,\n            sharedValue,\n        });\n    };\n    persistentSharedValueStoreBroadcast.addEventListener('message', eventListener);\n    onBeforeUnmount(() => {\n        persistentSharedValueStoreBroadcast.close();\n        persistentSharedValueStoreBroadcast.removeEventListener('message', eventListener);\n    });\n    // Get initial value from remote\n    const remoteValuePromise = setRemoteValue({\n        setPendingValue,\n        removeWatcher,\n        setWatcher,\n        store: persistentSharedValueStore,\n        key,\n        sharedValue,\n    });\n    // Set inital value when remote value is not available\n    const initialValuePromise = persistentSharedValueStore.getItem(key)\n        .then((value) => __awaiter(this, void 0, void 0, function* () {\n        if (value !== null) {\n            return;\n        }\n        yield setItem({\n            key,\n            newValue: initalValue,\n            persistentSharedValueStore,\n            persistentSharedValueStoreBroadcast,\n        });\n    }))\n        // Handle error silently because the broadcast channel could be closed\n        // eslint-disable-next-line @typescript-eslint/no-empty-function\n        .catch(() => { });\n    const ready = Promise.all([\n        remoteValuePromise,\n        initialValuePromise,\n    ]).then(() => {\n        isReady.value = true;\n    });\n    return {\n        state: sharedValue,\n        isReady,\n        ready,\n    };\n}\n/**\n *\n * @param key - Shared state key\n * @param initalValue - Initial value\n * @returns\n */\nexport function useSharedState(key, initalValue) {\n    return _useSharedState(key, initalValue).state;\n}\n//# sourceMappingURL=useSharedState.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { nextTick, onBeforeUnmount, ref, watch } from 'vue';\nimport { get, subscribe, update } from '../index';\nexport function useDataset(id, options) {\n    const data = ref(null);\n    const isReady = ref(false);\n    let isUpdatingFromRemote = false;\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    let unsubscribe = () => { };\n    const ready = get({\n        id,\n        selectors: options === null || options === void 0 ? void 0 : options.selectors,\n    })\n        .then((initialData) => __awaiter(this, void 0, void 0, function* () {\n        if (initialData !== null && initialData !== undefined) {\n            isUpdatingFromRemote = true;\n            data.value = initialData;\n            yield nextTick();\n            isUpdatingFromRemote = false;\n        }\n    }))\n        // eslint-disable-next-line @typescript-eslint/no-empty-function\n        .catch(() => {\n        // A catch is needed because get() rejects if no data is available yet\n    })\n        .finally(() => {\n        isReady.value = true;\n    });\n    const stopWatch = watch(data, (newValue) => {\n        if (isUpdatingFromRemote || newValue === null) {\n            return;\n        }\n        void update({\n            id,\n            data: newValue,\n        });\n    }, { deep: true });\n    unsubscribe = subscribe(id, (payload) => __awaiter(this, void 0, void 0, function* () {\n        isUpdatingFromRemote = true;\n        data.value = payload.data;\n        yield nextTick();\n        isUpdatingFromRemote = false;\n    }), { selectors: options === null || options === void 0 ? void 0 : options.selectors });\n    onBeforeUnmount(() => {\n        stopWatch();\n        unsubscribe();\n    });\n    return {\n        data,\n        isReady,\n        ready,\n    };\n}\n//# sourceMappingURL=useDataset.js.map","import * as window from './window';\nimport * as notification from './notification';\nimport * as toast from './toast';\nimport * as context from './context';\nimport * as componentSection from './ui/component-section';\nimport tabs from './ui/tabs';\nimport * as cms from './ui/cms';\nimport * as location from './location';\nimport * as menu from './ui/menu';\nimport * as settings from './ui/settings';\nimport * as mainModule from './ui/main-module';\nimport * as module from './ui/module';\nimport * as modal from './ui/modal';\nimport * as sidebar from './ui/sidebar';\nimport * as actionButton from './ui/action-button';\nimport * as mediaModal from './ui/media-modal';\nimport * as webhook from './app/action';\nimport * as data from './data';\nimport * as iap from './iap';\nimport * as payment from './_private/payment';\nimport * as telemetry from './telemetry';\nimport * as consent from './consent';\nimport composables from './data/composables';\nconst app = {\n    webhook,\n};\nconst ui = {\n    componentSection,\n    tabs,\n    menu,\n    settings,\n    mainModule,\n    module,\n    modal,\n    actionButton,\n    sidebar,\n    mediaModal,\n};\nconst _private = {\n    payment,\n};\n/**\n * The main export which will be available by direct imports.\n */\nexport { window, notification, toast, context, ui, cms, location, app, data, composables, iap, telemetry, _private, consent, };\n//# sourceMappingURL=index.js.map"],"names":["MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","MAX_LENGTH","require$$0","debug","require$$1","module","re","index","this","add","open","close","MESSAGE_EVENT_TYPE","o","require","e","n","exports","global","Promise","self","i","key","length","idb","forage","value","err","keys","db","t","error","resolve","reject","sameValue","includes","LocalForage","configureMissingMethods","methodNotImplementedFactory","promise","setDriverSupport","supportedDrivers","SerializerFactory"],"mappings":"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","x_google_ignoreList":[0,1,2,15,18]}