{"version":3,"file":"index.mjs","mappings":"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","sources":["webpack://dome-embedded-app-sdk/webpack/bootstrap","webpack://dome-embedded-app-sdk/webpack/runtime/define property getters","webpack://dome-embedded-app-sdk/webpack/runtime/hasOwnProperty shorthand","webpack://dome-embedded-app-sdk/./node_modules/cbor-x/decode.js","webpack://dome-embedded-app-sdk/./node_modules/cbor-x/encode.js","webpack://dome-embedded-app-sdk/./src/critical-error.ts","webpack://dome-embedded-app-sdk/./src/dome-sdk.ts","webpack://dome-embedded-app-sdk/./src/types/card-sdk.types.ts","webpack://dome-embedded-app-sdk/./src/utils.ts","webpack://dome-embedded-app-sdk/./src/viewer-sdk.ts","webpack://dome-embedded-app-sdk/./src/crypto.ts","webpack://dome-embedded-app-sdk/./src/card-sdk.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","let decoder\ntry {\n\tdecoder = new TextDecoder()\n} catch(error) {}\nlet src\nlet srcEnd\nlet position = 0\nlet alreadySet\nconst EMPTY_ARRAY = []\nconst LEGACY_RECORD_INLINE_ID = 105\nconst RECORD_DEFINITIONS_ID = 0xdffe\nconst RECORD_INLINE_ID = 0xdfff // temporary first-come first-serve tag // proposed tag: 0x7265 // 're'\nconst BUNDLED_STRINGS_ID = 0xdff9\nconst PACKED_TABLE_TAG_ID = 51\nconst PACKED_REFERENCE_TAG_ID = 6\nconst STOP_CODE = {}\nlet maxArraySize = 112810000 // This is the maximum array size in V8. We would potentially detect and set it higher\n// for JSC, but this is pretty large and should be sufficient for most use cases\nlet maxMapSize = 16810000 // JavaScript has a fixed maximum map size of about 16710000, but JS itself enforces this,\n// so we don't need to\n\nlet maxObjectSize = 16710000; // This is the maximum number of keys in a Map. It takes over a minute to create this\n// many keys in an object, so also probably a reasonable choice there.\nlet strings = EMPTY_ARRAY\nlet stringPosition = 0\nlet currentDecoder = {}\nlet currentStructures\nlet srcString\nlet srcStringStart = 0\nlet srcStringEnd = 0\nlet bundledStrings\nlet referenceMap\nlet currentExtensions = []\nlet currentExtensionRanges = []\nlet packedValues\nlet dataView\nlet restoreMapsAsObject\nlet defaultOptions = {\n\tuseRecords: false,\n\tmapsAsObjects: true\n}\nlet sequentialMode = false\nlet inlineObjectReadThreshold = 2;\nvar BlockedFunction // we use search and replace to change the next call to BlockedFunction to avoid CSP issues for\n// no-eval build\ntry {\n\tnew Function('')\n} catch(error) {\n\t// if eval variants are not supported, do not create inline object readers ever\n\tinlineObjectReadThreshold = Infinity\n}\n\n\n\nexport class Decoder {\n\tconstructor(options) {\n\t\tif (options) {\n\t\t\tif ((options.keyMap || options._keyMap) && !options.useRecords) {\n\t\t\t\toptions.useRecords = false\n\t\t\t\toptions.mapsAsObjects = true\n\t\t\t}\n\t\t\tif (options.useRecords === false && options.mapsAsObjects === undefined)\n\t\t\t\toptions.mapsAsObjects = true\n\t\t\tif (options.getStructures)\n\t\t\t\toptions.getShared = options.getStructures\n\t\t\tif (options.getShared && !options.structures)\n\t\t\t\t(options.structures = []).uninitialized = true // this is what we use to denote an uninitialized structures\n\t\t\tif (options.keyMap) {\n\t\t\t\tthis.mapKey = new Map()\n\t\t\t\tfor (let [k,v] of Object.entries(options.keyMap)) this.mapKey.set(v,k)\n\t\t\t}\n\t\t}\n\t\tObject.assign(this, options)\n\t}\n\t/*\n\tdecodeKey(key) {\n\t\treturn this.keyMap\n\t\t\t? Object.keys(this.keyMap)[Object.values(this.keyMap).indexOf(key)] || key\n\t\t\t: key\n\t}\n\t*/\n\tdecodeKey(key) {\n\t\treturn this.keyMap ? this.mapKey.get(key) || key : key\n\t}\n\t\n\tencodeKey(key) {\n\t\treturn this.keyMap && this.keyMap.hasOwnProperty(key) ? this.keyMap[key] : key\n\t}\n\n\tencodeKeys(rec) {\n\t\tif (!this._keyMap) return rec\n\t\tlet map = new Map()\n\t\tfor (let [k,v] of Object.entries(rec)) map.set((this._keyMap.hasOwnProperty(k) ? this._keyMap[k] : k), v)\n\t\treturn map\n\t}\n\n\tdecodeKeys(map) {\n\t\tif (!this._keyMap || map.constructor.name != 'Map') return map\n\t\tif (!this._mapKey) {\n\t\t\tthis._mapKey = new Map()\n\t\t\tfor (let [k,v] of Object.entries(this._keyMap)) this._mapKey.set(v,k)\n\t\t}\n\t\tlet res = {}\n\t\t//map.forEach((v,k) => res[Object.keys(this._keyMap)[Object.values(this._keyMap).indexOf(k)] || k] = v)\n\t\tmap.forEach((v,k) => res[safeKey(this._mapKey.has(k) ? this._mapKey.get(k) : k)] =  v)\n\t\treturn res\n\t}\n\t\n\tmapDecode(source, end) {\n\t\n\t\tlet res = this.decode(source)\n\t\tif (this._keyMap) { \n\t\t\t//Experiemntal support for Optimised KeyMap  decoding \n\t\t\tswitch (res.constructor.name) {\n\t\t\t\tcase 'Array': return res.map(r => this.decodeKeys(r))\n\t\t\t\t//case 'Map': return this.decodeKeys(res)\n\t\t\t}\n\t\t}\n\t\treturn res\n\t}\n\n\tdecode(source, end) {\n\t\tif (src) {\n\t\t\t// re-entrant execution, save the state and restore it after we do this decode\n\t\t\treturn saveState(() => {\n\t\t\t\tclearSource()\n\t\t\t\treturn this ? this.decode(source, end) : Decoder.prototype.decode.call(defaultOptions, source, end)\n\t\t\t})\n\t\t}\n\t\tsrcEnd = end > -1 ? end : source.length\n\t\tposition = 0\n\t\tstringPosition = 0\n\t\tsrcStringEnd = 0\n\t\tsrcString = null\n\t\tstrings = EMPTY_ARRAY\n\t\tbundledStrings = null\n\t\tsrc = source\n\t\t// this provides cached access to the data view for a buffer if it is getting reused, which is a recommend\n\t\t// technique for getting data from a database where it can be copied into an existing buffer instead of creating\n\t\t// new ones\n\t\ttry {\n\t\t\tdataView = source.dataView || (source.dataView = new DataView(source.buffer, source.byteOffset, source.byteLength))\n\t\t} catch(error) {\n\t\t\t// if it doesn't have a buffer, maybe it is the wrong type of object\n\t\t\tsrc = null\n\t\t\tif (source instanceof Uint8Array)\n\t\t\t\tthrow error\n\t\t\tthrow new Error('Source must be a Uint8Array or Buffer but was a ' + ((source && typeof source == 'object') ? source.constructor.name : typeof source))\n\t\t}\n\t\tif (this instanceof Decoder) {\n\t\t\tcurrentDecoder = this\n\t\t\tpackedValues = this.sharedValues &&\n\t\t\t\t(this.pack ? new Array(this.maxPrivatePackedValues || 16).concat(this.sharedValues) :\n\t\t\t\tthis.sharedValues)\n\t\t\tif (this.structures) {\n\t\t\t\tcurrentStructures = this.structures\n\t\t\t\treturn checkedRead()\n\t\t\t} else if (!currentStructures || currentStructures.length > 0) {\n\t\t\t\tcurrentStructures = []\n\t\t\t}\n\t\t} else {\n\t\t\tcurrentDecoder = defaultOptions\n\t\t\tif (!currentStructures || currentStructures.length > 0)\n\t\t\t\tcurrentStructures = []\n\t\t\tpackedValues = null\n\t\t}\n\t\treturn checkedRead()\n\t}\n\tdecodeMultiple(source, forEach) {\n\t\tlet values, lastPosition = 0\n\t\ttry {\n\t\t\tlet size = source.length\n\t\t\tsequentialMode = true\n\t\t\tlet value = this ? this.decode(source, size) : defaultDecoder.decode(source, size)\n\t\t\tif (forEach) {\n\t\t\t\tif (forEach(value) === false) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\twhile(position < size) {\n\t\t\t\t\tlastPosition = position\n\t\t\t\t\tif (forEach(checkedRead()) === false) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalues = [ value ]\n\t\t\t\twhile(position < size) {\n\t\t\t\t\tlastPosition = position\n\t\t\t\t\tvalues.push(checkedRead())\n\t\t\t\t}\n\t\t\t\treturn values\n\t\t\t}\n\t\t} catch(error) {\n\t\t\terror.lastPosition = lastPosition\n\t\t\terror.values = values\n\t\t\tthrow error\n\t\t} finally {\n\t\t\tsequentialMode = false\n\t\t\tclearSource()\n\t\t}\n\t}\n}\nexport function getPosition() {\n\treturn position\n}\nexport function checkedRead() {\n\ttry {\n\t\tlet result = read()\n\t\tif (bundledStrings) {\n\t\t\tif (position >= bundledStrings.postBundlePosition) {\n\t\t\t\tlet error = new Error('Unexpected bundle position');\n\t\t\t\terror.incomplete = true;\n\t\t\t\tthrow error\n\t\t\t}\n\t\t\t// bundled strings to skip past\n\t\t\tposition = bundledStrings.postBundlePosition;\n\t\t\tbundledStrings = null;\n\t\t}\n\n\t\tif (position == srcEnd) {\n\t\t\t// finished reading this source, cleanup references\n\t\t\tcurrentStructures = null\n\t\t\tsrc = null\n\t\t\tif (referenceMap)\n\t\t\t\treferenceMap = null\n\t\t} else if (position > srcEnd) {\n\t\t\t// over read\n\t\t\tlet error = new Error('Unexpected end of CBOR data')\n\t\t\terror.incomplete = true\n\t\t\tthrow error\n\t\t} else if (!sequentialMode) {\n\t\t\tthrow new Error('Data read, but end of buffer not reached')\n\t\t}\n\t\t// else more to read, but we are reading sequentially, so don't clear source yet\n\t\treturn result\n\t} catch(error) {\n\t\tclearSource()\n\t\tif (error instanceof RangeError || error.message.startsWith('Unexpected end of buffer')) {\n\t\t\terror.incomplete = true\n\t\t}\n\t\tthrow error\n\t}\n}\n\nexport function read() {\n\tlet token = src[position++]\n\tlet majorType = token >> 5\n\ttoken = token & 0x1f\n\tif (token > 0x17) {\n\t\tswitch (token) {\n\t\t\tcase 0x18:\n\t\t\t\ttoken = src[position++]\n\t\t\t\tbreak\n\t\t\tcase 0x19:\n\t\t\t\tif (majorType == 7) {\n\t\t\t\t\treturn getFloat16()\n\t\t\t\t}\n\t\t\t\ttoken = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\tbreak\n\t\t\tcase 0x1a:\n\t\t\t\tif (majorType == 7) {\n\t\t\t\t\tlet value = dataView.getFloat32(position)\n\t\t\t\t\tif (currentDecoder.useFloat32 > 2) {\n\t\t\t\t\t\t// this does rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\t\tlet multiplier = mult10[((src[position] & 0x7f) << 1) | (src[position + 1] >> 7)]\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\treturn ((multiplier * value + (value > 0 ? 0.5 : -0.5)) >> 0) / multiplier\n\t\t\t\t\t}\n\t\t\t\t\tposition += 4\n\t\t\t\t\treturn value\n\t\t\t\t}\n\t\t\t\ttoken = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\tbreak\n\t\t\tcase 0x1b:\n\t\t\t\tif (majorType == 7) {\n\t\t\t\t\tlet value = dataView.getFloat64(position)\n\t\t\t\t\tposition += 8\n\t\t\t\t\treturn value\n\t\t\t\t}\n\t\t\t\tif (majorType > 1) {\n\t\t\t\t\tif (dataView.getUint32(position) > 0)\n\t\t\t\t\t\tthrow new Error('JavaScript does not support arrays, maps, or strings with length over 4294967295')\n\t\t\t\t\ttoken = dataView.getUint32(position + 4)\n\t\t\t\t} else if (currentDecoder.int64AsNumber) {\n\t\t\t\t\ttoken = dataView.getUint32(position) * 0x100000000\n\t\t\t\t\ttoken += dataView.getUint32(position + 4)\n\t\t\t\t} else\n\t\t\t\t\ttoken = dataView.getBigUint64(position)\n\t\t\t\tposition += 8\n\t\t\t\tbreak\n\t\t\tcase 0x1f: \n\t\t\t\t// indefinite length\n\t\t\t\tswitch(majorType) {\n\t\t\t\t\tcase 2: // byte string\n\t\t\t\t\tcase 3: // text string\n\t\t\t\t\t\tthrow new Error('Indefinite length not supported for byte or text strings')\n\t\t\t\t\tcase 4: // array\n\t\t\t\t\t\tlet array = []\n\t\t\t\t\t\tlet value, i = 0\n\t\t\t\t\t\twhile ((value = read()) != STOP_CODE) {\n\t\t\t\t\t\t\tif (i >= maxArraySize) throw new Error(`Array length exceeds ${maxArraySize}`)\n\t\t\t\t\t\t\tarray[i++] = value\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn majorType == 4 ? array : majorType == 3 ? array.join('') : Buffer.concat(array)\n\t\t\t\t\tcase 5: // map\n\t\t\t\t\t\tlet key\n\t\t\t\t\t\tif (currentDecoder.mapsAsObjects) {\n\t\t\t\t\t\t\tlet object = {}\n\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\tif (currentDecoder.keyMap) {\n\t\t\t\t\t\t\t\twhile((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) throw new Error(`Property count exceeds ${maxMapSize}`)\n\t\t\t\t\t\t\t\t\tobject[safeKey(currentDecoder.decodeKey(key))] = read()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\twhile ((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) throw new Error(`Property count exceeds ${maxMapSize}`)\n\t\t\t\t\t\t\t\t\tobject[safeKey(key)] = read()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn object\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (restoreMapsAsObject) {\n\t\t\t\t\t\t\t\tcurrentDecoder.mapsAsObjects = true\n\t\t\t\t\t\t\t\trestoreMapsAsObject = false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet map = new Map()\n\t\t\t\t\t\t\tif (currentDecoder.keyMap) {\n\t\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\t\twhile((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(`Map size exceeds ${maxMapSize}`);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmap.set(currentDecoder.decodeKey(key), read())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\t\twhile ((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(`Map size exceeds ${maxMapSize}`);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmap.set(key, read())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn map\n\t\t\t\t\t\t}\n\t\t\t\t\tcase 7:\n\t\t\t\t\t\treturn STOP_CODE\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error('Invalid major type for indefinite length ' + majorType)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Unknown token ' + token)\n\t\t}\n\t}\n\tswitch (majorType) {\n\t\tcase 0: // positive int\n\t\t\treturn token\n\t\tcase 1: // negative int\n\t\t\treturn ~token\n\t\tcase 2: // buffer\n\t\t\treturn readBin(token)\n\t\tcase 3: // string\n\t\t\tif (srcStringEnd >= position) {\n\t\t\t\treturn srcString.slice(position - srcStringStart, (position += token) - srcStringStart)\n\t\t\t}\n\t\t\tif (srcStringEnd == 0 && srcEnd < 140 && token < 32) {\n\t\t\t\t// for small blocks, avoiding the overhead of the extract call is helpful\n\t\t\t\tlet string = token < 16 ? shortStringInJS(token) : longStringInJS(token)\n\t\t\t\tif (string != null)\n\t\t\t\t\treturn string\n\t\t\t}\n\t\t\treturn readFixedString(token)\n\t\tcase 4: // array\n\t\t\tif (token >= maxArraySize) throw new Error(`Array length exceeds ${maxArraySize}`)\n\t\t\tlet array = new Array(token)\n\t\t  //if (currentDecoder.keyMap) for (let i = 0; i < token; i++) array[i] = currentDecoder.decodeKey(read())\t\n\t\t\t//else \n\t\t\tfor (let i = 0; i < token; i++) array[i] = read()\n\t\t\treturn array\n\t\tcase 5: // map\n\t\t\tif (token >= maxMapSize) throw new Error(`Map size exceeds ${maxArraySize}`)\n\t\t\tif (currentDecoder.mapsAsObjects) {\n\t\t\t\tlet object = {}\n\t\t\t\tif (currentDecoder.keyMap) for (let i = 0; i < token; i++) object[safeKey(currentDecoder.decodeKey(read()))] = read()\n\t\t\t\telse for (let i = 0; i < token; i++) object[safeKey(read())] = read()\n\t\t\t\treturn object\n\t\t\t} else {\n\t\t\t\tif (restoreMapsAsObject) {\n\t\t\t\t\tcurrentDecoder.mapsAsObjects = true\n\t\t\t\t\trestoreMapsAsObject = false\n\t\t\t\t}\n\t\t\t\tlet map = new Map()\n\t\t\t\tif (currentDecoder.keyMap) for (let i = 0; i < token; i++) map.set(currentDecoder.decodeKey(read()),read())\n\t\t\t\telse for (let i = 0; i < token; i++) map.set(read(), read())\n\t\t\t\treturn map\n\t\t\t}\n\t\tcase 6: // extension\n\t\t\tif (token >= BUNDLED_STRINGS_ID) {\n\t\t\t\tlet structure = currentStructures[token & 0x1fff] // check record structures first\n\t\t\t\t// At some point we may provide an option for dynamic tag assignment with a range like token >= 8 && (token < 16 || (token > 0x80 && token < 0xc0) || (token > 0x130 && token < 0x4000))\n\t\t\t\tif (structure) {\n\t\t\t\t\tif (!structure.read) structure.read = createStructureReader(structure)\n\t\t\t\t\treturn structure.read()\n\t\t\t\t}\n\t\t\t\tif (token < 0x10000) {\n\t\t\t\t\tif (token == RECORD_INLINE_ID) { // we do a special check for this so that we can keep the\n\t\t\t\t\t\t// currentExtensions as densely stored array (v8 stores arrays densely under about 3000 elements)\n\t\t\t\t\t\tlet length = readJustLength()\n\t\t\t\t\t\tlet id = read()\n\t\t\t\t\t\tlet structure = read()\n\t\t\t\t\t\trecordDefinition(id, structure)\n\t\t\t\t\t\tlet object = {}\n\t\t\t\t\t\tif (currentDecoder.keyMap) for (let i = 2; i < length; i++) {\n\t\t\t\t\t\t\tlet key = currentDecoder.decodeKey(structure[i - 2])\n\t\t\t\t\t\t\tobject[safeKey(key)] = read()\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse for (let i = 2; i < length; i++) {\n\t\t\t\t\t\t\tlet key = structure[i - 2]\n\t\t\t\t\t\t\tobject[safeKey(key)] = read()\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn object\n\t\t\t\t\t}\n\t\t\t\t\telse if (token == RECORD_DEFINITIONS_ID) {\n\t\t\t\t\t\tlet length = readJustLength()\n\t\t\t\t\t\tlet id = read()\n\t\t\t\t\t\tfor (let i = 2; i < length; i++) {\n\t\t\t\t\t\t\trecordDefinition(id++, read())\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn read()\n\t\t\t\t\t} else if (token == BUNDLED_STRINGS_ID) {\n\t\t\t\t\t\treturn readBundleExt()\n\t\t\t\t\t}\n\t\t\t\t\tif (currentDecoder.getShared) {\n\t\t\t\t\t\tloadShared()\n\t\t\t\t\t\tstructure = currentStructures[token & 0x1fff]\n\t\t\t\t\t\tif (structure) {\n\t\t\t\t\t\t\tif (!structure.read)\n\t\t\t\t\t\t\t\tstructure.read = createStructureReader(structure)\n\t\t\t\t\t\t\treturn structure.read()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet extension = currentExtensions[token]\n\t\t\tif (extension) {\n\t\t\t\tif (extension.handlesRead)\n\t\t\t\t\treturn extension(read)\n\t\t\t\telse\n\t\t\t\t\treturn extension(read())\n\t\t\t} else {\n\t\t\t\tlet input = read()\n\t\t\t\tfor (let i = 0; i < currentExtensionRanges.length; i++) {\n\t\t\t\t\tlet value = currentExtensionRanges[i](token, input)\n\t\t\t\t\tif (value !== undefined)\n\t\t\t\t\t\treturn value\n\t\t\t\t}\n\t\t\t\treturn new Tag(input, token)\n\t\t\t}\n\t\tcase 7: // fixed value\n\t\t\tswitch (token) {\n\t\t\t\tcase 0x14: return false\n\t\t\t\tcase 0x15: return true\n\t\t\t\tcase 0x16: return null\n\t\t\t\tcase 0x17: return; // undefined\n\t\t\t\tcase 0x1f:\n\t\t\t\tdefault:\n\t\t\t\t\tlet packedValue = (packedValues || getPackedValues())[token]\n\t\t\t\t\tif (packedValue !== undefined)\n\t\t\t\t\t\treturn packedValue\n\t\t\t\t\tthrow new Error('Unknown token ' + token)\n\t\t\t}\n\t\tdefault: // negative int\n\t\t\tif (isNaN(token)) {\n\t\t\t\tlet error = new Error('Unexpected end of CBOR data')\n\t\t\t\terror.incomplete = true\n\t\t\t\tthrow error\n\t\t\t}\n\t\t\tthrow new Error('Unknown CBOR token ' + token)\n\t}\n}\nconst validName = /^[a-zA-Z_$][a-zA-Z\\d_$]*$/\nfunction createStructureReader(structure) {\n\tif (!structure) throw new Error('Structure is required in record definition');\n\tfunction readObject() {\n\t\t// get the array size from the header\n\t\tlet length = src[position++]\n\t\t//let majorType = token >> 5\n\t\tlength = length & 0x1f\n\t\tif (length > 0x17) {\n\t\t\tswitch (length) {\n\t\t\t\tcase 0x18:\n\t\t\t\t\tlength = src[position++]\n\t\t\t\t\tbreak\n\t\t\t\tcase 0x19:\n\t\t\t\t\tlength = dataView.getUint16(position)\n\t\t\t\t\tposition += 2\n\t\t\t\t\tbreak\n\t\t\t\tcase 0x1a:\n\t\t\t\t\tlength = dataView.getUint32(position)\n\t\t\t\t\tposition += 4\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('Expected array header, but got ' + src[position - 1])\n\t\t\t}\n\t\t}\n\t\t// This initial function is quick to instantiate, but runs slower. After several iterations pay the cost to build the faster function\n\t\tlet compiledReader = this.compiledReader // first look to see if we have the fast compiled function\n\t\twhile(compiledReader) {\n\t\t\t// we have a fast compiled object literal reader\n\t\t\tif (compiledReader.propertyCount === length)\n\t\t\t\treturn compiledReader(read) // with the right length, so we use it\n\t\t\tcompiledReader = compiledReader.next // see if there is another reader with the right length\n\t\t}\n\t\tif (this.slowReads++ >= inlineObjectReadThreshold) { // create a fast compiled reader\n\t\t\tlet array = this.length == length ? this : this.slice(0, length)\n\t\t\tcompiledReader = currentDecoder.keyMap \n\t\t\t? new Function('r', 'return {' + array.map(k => currentDecoder.decodeKey(k)).map(k => validName.test(k) ? safeKey(k) + ':r()' : ('[' + JSON.stringify(k) + ']:r()')).join(',') + '}')\n\t\t\t: new Function('r', 'return {' + array.map(key => validName.test(key) ? safeKey(key) + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '}')\n\t\t\tif (this.compiledReader)\n\t\t\t\tcompiledReader.next = this.compiledReader // if there is an existing one, we store multiple readers as a linked list because it is usually pretty rare to have multiple readers (of different length) for the same structure\n\t\t\tcompiledReader.propertyCount = length\n\t\t\tthis.compiledReader = compiledReader\n\t\t\treturn compiledReader(read)\n\t\t}\n\t\tlet object = {}\n\t\tif (currentDecoder.keyMap) for (let i = 0; i < length; i++) object[safeKey(currentDecoder.decodeKey(this[i]))] = read()\n\t\telse for (let i = 0; i < length; i++) {\n\t\t\tobject[safeKey(this[i])] = read();\n\t\t}\n\t\treturn object\n\t}\n\tstructure.slowReads = 0\n\treturn readObject\n}\n\nfunction safeKey(key) {\n\t// protect against prototype pollution\n\tif (typeof key === 'string') return key === '__proto__' ? '__proto_' : key\n\tif (typeof key === 'number' || typeof key === 'boolean' || typeof key === 'bigint') return key.toString();\n\tif (key == null) return key + '';\n\t// protect against expensive (DoS) string conversions\n\tthrow new Error('Invalid property name type ' + typeof key);\n}\n\nlet readFixedString = readStringJS\nlet readString8 = readStringJS\nlet readString16 = readStringJS\nlet readString32 = readStringJS\n\nexport let isNativeAccelerationEnabled = false\nexport function setExtractor(extractStrings) {\n\tisNativeAccelerationEnabled = true\n\treadFixedString = readString(1)\n\treadString8 = readString(2)\n\treadString16 = readString(3)\n\treadString32 = readString(5)\n\tfunction readString(headerLength) {\n\t\treturn function readString(length) {\n\t\t\tlet string = strings[stringPosition++]\n\t\t\tif (string == null) {\n\t\t\t\tif (bundledStrings)\n\t\t\t\t\treturn readStringJS(length)\n\t\t\t\tlet extraction = extractStrings(position, srcEnd, length, src)\n\t\t\t\tif (typeof extraction == 'string') {\n\t\t\t\t\tstring = extraction\n\t\t\t\t\tstrings = EMPTY_ARRAY\n\t\t\t\t} else {\n\t\t\t\t\tstrings = extraction\n\t\t\t\t\tstringPosition = 1\n\t\t\t\t\tsrcStringEnd = 1 // even if a utf-8 string was decoded, must indicate we are in the midst of extracted strings and can't skip strings\n\t\t\t\t\tstring = strings[0]\n\t\t\t\t\tif (string === undefined)\n\t\t\t\t\t\tthrow new Error('Unexpected end of buffer')\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet srcStringLength = string.length\n\t\t\tif (srcStringLength <= length) {\n\t\t\t\tposition += length\n\t\t\t\treturn string\n\t\t\t}\n\t\t\tsrcString = string\n\t\t\tsrcStringStart = position\n\t\t\tsrcStringEnd = position + srcStringLength\n\t\t\tposition += length\n\t\t\treturn string.slice(0, length) // we know we just want the beginning\n\t\t}\n\t}\n}\nfunction readStringJS(length) {\n\tlet result\n\tif (length < 16) {\n\t\tif (result = shortStringInJS(length))\n\t\t\treturn result\n\t}\n\tif (length > 64 && decoder)\n\t\treturn decoder.decode(src.subarray(position, position += length))\n\tconst end = position + length\n\tconst units = []\n\tresult = ''\n\twhile (position < end) {\n\t\tconst byte1 = src[position++]\n\t\tif ((byte1 & 0x80) === 0) {\n\t\t\t// 1 byte\n\t\t\tunits.push(byte1)\n\t\t} else if ((byte1 & 0xe0) === 0xc0) {\n\t\t\t// 2 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tunits.push(((byte1 & 0x1f) << 6) | byte2)\n\t\t} else if ((byte1 & 0xf0) === 0xe0) {\n\t\t\t// 3 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tconst byte3 = src[position++] & 0x3f\n\t\t\tunits.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3)\n\t\t} else if ((byte1 & 0xf8) === 0xf0) {\n\t\t\t// 4 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tconst byte3 = src[position++] & 0x3f\n\t\t\tconst byte4 = src[position++] & 0x3f\n\t\t\tlet unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4\n\t\t\tif (unit > 0xffff) {\n\t\t\t\tunit -= 0x10000\n\t\t\t\tunits.push(((unit >>> 10) & 0x3ff) | 0xd800)\n\t\t\t\tunit = 0xdc00 | (unit & 0x3ff)\n\t\t\t}\n\t\t\tunits.push(unit)\n\t\t} else {\n\t\t\tunits.push(byte1)\n\t\t}\n\n\t\tif (units.length >= 0x1000) {\n\t\t\tresult += fromCharCode.apply(String, units)\n\t\t\tunits.length = 0\n\t\t}\n\t}\n\n\tif (units.length > 0) {\n\t\tresult += fromCharCode.apply(String, units)\n\t}\n\n\treturn result\n}\nlet fromCharCode = String.fromCharCode\nfunction longStringInJS(length) {\n\tlet start = position\n\tlet bytes = new Array(length)\n\tfor (let i = 0; i < length; i++) {\n\t\tconst byte = src[position++];\n\t\tif ((byte & 0x80) > 0) {\n\t\t\tposition = start\n    \t\t\treturn\n    \t\t}\n    \t\tbytes[i] = byte\n    \t}\n    \treturn fromCharCode.apply(String, bytes)\n}\nfunction shortStringInJS(length) {\n\tif (length < 4) {\n\t\tif (length < 2) {\n\t\t\tif (length === 0)\n\t\t\t\treturn ''\n\t\t\telse {\n\t\t\t\tlet a = src[position++]\n\t\t\t\tif ((a & 0x80) > 1) {\n\t\t\t\t\tposition -= 1\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a)\n\t\t\t}\n\t\t} else {\n\t\t\tlet a = src[position++]\n\t\t\tlet b = src[position++]\n\t\t\tif ((a & 0x80) > 0 || (b & 0x80) > 0) {\n\t\t\t\tposition -= 2\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 3)\n\t\t\t\treturn fromCharCode(a, b)\n\t\t\tlet c = src[position++]\n\t\t\tif ((c & 0x80) > 0) {\n\t\t\t\tposition -= 3\n\t\t\t\treturn\n\t\t\t}\n\t\t\treturn fromCharCode(a, b, c)\n\t\t}\n\t} else {\n\t\tlet a = src[position++]\n\t\tlet b = src[position++]\n\t\tlet c = src[position++]\n\t\tlet d = src[position++]\n\t\tif ((a & 0x80) > 0 || (b & 0x80) > 0 || (c & 0x80) > 0 || (d & 0x80) > 0) {\n\t\t\tposition -= 4\n\t\t\treturn\n\t\t}\n\t\tif (length < 6) {\n\t\t\tif (length === 4)\n\t\t\t\treturn fromCharCode(a, b, c, d)\n\t\t\telse {\n\t\t\t\tlet e = src[position++]\n\t\t\t\tif ((e & 0x80) > 0) {\n\t\t\t\t\tposition -= 5\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a, b, c, d, e)\n\t\t\t}\n\t\t} else if (length < 8) {\n\t\t\tlet e = src[position++]\n\t\t\tlet f = src[position++]\n\t\t\tif ((e & 0x80) > 0 || (f & 0x80) > 0) {\n\t\t\t\tposition -= 6\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 7)\n\t\t\t\treturn fromCharCode(a, b, c, d, e, f)\n\t\t\tlet g = src[position++]\n\t\t\tif ((g & 0x80) > 0) {\n\t\t\t\tposition -= 7\n\t\t\t\treturn\n\t\t\t}\n\t\t\treturn fromCharCode(a, b, c, d, e, f, g)\n\t\t} else {\n\t\t\tlet e = src[position++]\n\t\t\tlet f = src[position++]\n\t\t\tlet g = src[position++]\n\t\t\tlet h = src[position++]\n\t\t\tif ((e & 0x80) > 0 || (f & 0x80) > 0 || (g & 0x80) > 0 || (h & 0x80) > 0) {\n\t\t\t\tposition -= 8\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 10) {\n\t\t\t\tif (length === 8)\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h)\n\t\t\t\telse {\n\t\t\t\t\tlet i = src[position++]\n\t\t\t\t\tif ((i & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 9\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i)\n\t\t\t\t}\n\t\t\t} else if (length < 12) {\n\t\t\t\tlet i = src[position++]\n\t\t\t\tlet j = src[position++]\n\t\t\t\tif ((i & 0x80) > 0 || (j & 0x80) > 0) {\n\t\t\t\t\tposition -= 10\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (length < 11)\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j)\n\t\t\t\tlet k = src[position++]\n\t\t\t\tif ((k & 0x80) > 0) {\n\t\t\t\t\tposition -= 11\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k)\n\t\t\t} else {\n\t\t\t\tlet i = src[position++]\n\t\t\t\tlet j = src[position++]\n\t\t\t\tlet k = src[position++]\n\t\t\t\tlet l = src[position++]\n\t\t\t\tif ((i & 0x80) > 0 || (j & 0x80) > 0 || (k & 0x80) > 0 || (l & 0x80) > 0) {\n\t\t\t\t\tposition -= 12\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (length < 14) {\n\t\t\t\t\tif (length === 12)\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l)\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet m = src[position++]\n\t\t\t\t\t\tif ((m & 0x80) > 0) {\n\t\t\t\t\t\t\tposition -= 13\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet m = src[position++]\n\t\t\t\t\tlet n = src[position++]\n\t\t\t\t\tif ((m & 0x80) > 0 || (n & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 14\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tif (length < 15)\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n)\n\t\t\t\t\tlet o = src[position++]\n\t\t\t\t\tif ((o & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 15\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction readBin(length) {\n\treturn currentDecoder.copyBuffers ?\n\t\t// specifically use the copying slice (not the node one)\n\t\tUint8Array.prototype.slice.call(src, position, position += length) :\n\t\tsrc.subarray(position, position += length)\n}\nfunction readExt(length) {\n\tlet type = src[position++]\n\tif (currentExtensions[type]) {\n\t\treturn currentExtensions[type](src.subarray(position, position += length))\n\t}\n\telse\n\t\tthrow new Error('Unknown extension type ' + type)\n}\nlet f32Array = new Float32Array(1)\nlet u8Array = new Uint8Array(f32Array.buffer, 0, 4)\nfunction getFloat16() {\n\tlet byte0 = src[position++]\n\tlet byte1 = src[position++]\n\tlet exponent = (byte0 & 0x7f) >> 2;\n\tif (exponent === 0x1f) { // specials\n\t\tif (byte1 || (byte0 & 3))\n\t\t\treturn NaN;\n\t\treturn (byte0 & 0x80) ? -Infinity : Infinity;\n\t}\n\tif (exponent === 0) { // sub-normals\n\t\t// significand with 10 fractional bits and divided by 2^14\n\t\tlet abs = (((byte0 & 3) << 8) | byte1) / (1 << 24)\n\t\treturn (byte0 & 0x80) ? -abs : abs\n\t}\n\n\tu8Array[3] = (byte0 & 0x80) | // sign bit\n\t\t((exponent >> 1) + 56) // 4 of 5 of the exponent bits, re-offset-ed\n\tu8Array[2] = ((byte0 & 7) << 5) | // last exponent bit and first two mantissa bits\n\t\t(byte1 >> 3) // next 5 bits of mantissa\n\tu8Array[1] = byte1 << 5; // last three bits of mantissa\n\tu8Array[0] = 0;\n\treturn f32Array[0];\n}\n\nlet keyCache = new Array(4096)\nfunction readKey() {\n\tlet length = src[position++]\n\tif (length >= 0x60 && length < 0x78) {\n\t\t// fixstr, potentially use key cache\n\t\tlength = length - 0x60\n\t\tif (srcStringEnd >= position) // if it has been extracted, must use it (and faster anyway)\n\t\t\treturn srcString.slice(position - srcStringStart, (position += length) - srcStringStart)\n\t\telse if (!(srcStringEnd == 0 && srcEnd < 180))\n\t\t\treturn readFixedString(length)\n\t} else { // not cacheable, go back and do a standard read\n\t\tposition--\n\t\treturn read()\n\t}\n\tlet key = ((length << 5) ^ (length > 1 ? dataView.getUint16(position) : length > 0 ? src[position] : 0)) & 0xfff\n\tlet entry = keyCache[key]\n\tlet checkPosition = position\n\tlet end = position + length - 3\n\tlet chunk\n\tlet i = 0\n\tif (entry && entry.bytes == length) {\n\t\twhile (checkPosition < end) {\n\t\t\tchunk = dataView.getUint32(checkPosition)\n\t\t\tif (chunk != entry[i++]) {\n\t\t\t\tcheckPosition = 0x70000000\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcheckPosition += 4\n\t\t}\n\t\tend += 3\n\t\twhile (checkPosition < end) {\n\t\t\tchunk = src[checkPosition++]\n\t\t\tif (chunk != entry[i++]) {\n\t\t\t\tcheckPosition = 0x70000000\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (checkPosition === end) {\n\t\t\tposition = checkPosition\n\t\t\treturn entry.string\n\t\t}\n\t\tend -= 3\n\t\tcheckPosition = position\n\t}\n\tentry = []\n\tkeyCache[key] = entry\n\tentry.bytes = length\n\twhile (checkPosition < end) {\n\t\tchunk = dataView.getUint32(checkPosition)\n\t\tentry.push(chunk)\n\t\tcheckPosition += 4\n\t}\n\tend += 3\n\twhile (checkPosition < end) {\n\t\tchunk = src[checkPosition++]\n\t\tentry.push(chunk)\n\t}\n\t// for small blocks, avoiding the overhead of the extract call is helpful\n\tlet string = length < 16 ? shortStringInJS(length) : longStringInJS(length)\n\tif (string != null)\n\t\treturn entry.string = string\n\treturn entry.string = readFixedString(length)\n}\n\nexport class Tag {\n\tconstructor(value, tag) {\n\t\tthis.value = value\n\t\tthis.tag = tag\n\t}\n}\n\ncurrentExtensions[0] = (dateString) => {\n\t// string date extension\n\treturn new Date(dateString)\n}\n\ncurrentExtensions[1] = (epochSec) => {\n\t// numeric date extension\n\treturn new Date(Math.round(epochSec * 1000))\n}\n\ncurrentExtensions[2] = (buffer) => {\n\t// bigint extension\n\tlet value = BigInt(0)\n\tfor (let i = 0, l = buffer.byteLength; i < l; i++) {\n\t\tvalue = BigInt(buffer[i]) + (value << BigInt(8))\n\t}\n\treturn value\n}\n\ncurrentExtensions[3] = (buffer) => {\n\t// negative bigint extension\n\treturn BigInt(-1) - currentExtensions[2](buffer)\n}\ncurrentExtensions[4] = (fraction) => {\n\t// best to reparse to maintain accuracy\n\treturn +(fraction[1] + 'e' + fraction[0])\n}\n\ncurrentExtensions[5] = (fraction) => {\n\t// probably not sufficiently accurate\n\treturn fraction[1] * Math.exp(fraction[0] * Math.log(2))\n}\n\n// the registration of the record definition extension\nconst recordDefinition = (id, structure) => {\n\tid = id - 0xe000\n\tlet existingStructure = currentStructures[id]\n\tif (existingStructure && existingStructure.isShared) {\n\t\t(currentStructures.restoreStructures || (currentStructures.restoreStructures = []))[id] = existingStructure\n\t}\n\tcurrentStructures[id] = structure\n\n\tstructure.read = createStructureReader(structure)\n}\ncurrentExtensions[LEGACY_RECORD_INLINE_ID] = (data) => {\n\tlet length = data.length\n\tlet structure = data[1]\n\trecordDefinition(data[0], structure)\n\tlet object = {}\n\tfor (let i = 2; i < length; i++) {\n\t\tlet key = structure[i - 2]\n\t\tobject[safeKey(key)] = data[i]\n\t}\n\treturn object\n}\ncurrentExtensions[14] = (value) => {\n\tif (bundledStrings)\n\t\treturn bundledStrings[0].slice(bundledStrings.position0, bundledStrings.position0 += value)\n\treturn new Tag(value, 14)\n}\ncurrentExtensions[15] = (value) => {\n\tif (bundledStrings)\n\t\treturn bundledStrings[1].slice(bundledStrings.position1, bundledStrings.position1 += value)\n\treturn new Tag(value, 15)\n}\nlet glbl = { Error, RegExp }\ncurrentExtensions[27] = (data) => { // http://cbor.schmorp.de/generic-object\n\treturn (glbl[data[0]] || Error)(data[1], data[2])\n}\nconst packedTable = (read) => {\n\tif (src[position++] != 0x84) {\n\t\tlet error = new Error('Packed values structure must be followed by a 4 element array')\n\t\tif (src.length < position)\n\t\t\terror.incomplete = true\n\t\tthrow error\n\t}\n\tlet newPackedValues = read() // packed values\n\tif (!newPackedValues || !newPackedValues.length) {\n\t\tlet error = new Error('Packed values structure must be followed by a 4 element array')\n\t\terror.incomplete = true\n\t\tthrow error\n\t}\n\tpackedValues = packedValues ? newPackedValues.concat(packedValues.slice(newPackedValues.length)) : newPackedValues\n\tpackedValues.prefixes = read()\n\tpackedValues.suffixes = read()\n\treturn read() // read the rump\n}\npackedTable.handlesRead = true\ncurrentExtensions[51] = packedTable\n\ncurrentExtensions[PACKED_REFERENCE_TAG_ID] = (data) => { // packed reference\n\tif (!packedValues) {\n\t\tif (currentDecoder.getShared)\n\t\t\tloadShared()\n\t\telse\n\t\t\treturn new Tag(data, PACKED_REFERENCE_TAG_ID)\n\t}\n\tif (typeof data == 'number')\n\t\treturn packedValues[16 + (data >= 0 ? 2 * data : (-2 * data - 1))]\n\tlet error = new Error('No support for non-integer packed references yet')\n\tif (data === undefined)\n\t\terror.incomplete = true\n\tthrow error\n}\n\n// The following code is an incomplete implementation of http://cbor.schmorp.de/stringref\n// the real thing would need to implemennt more logic to populate the stringRefs table and\n// maintain a stack of stringRef \"namespaces\".\n//\n// currentExtensions[25] = (id) => {\n// \treturn stringRefs[id]\n// }\n// currentExtensions[256] = (read) => {\n// \tstringRefs = []\n// \ttry {\n// \t\treturn read()\n// \t} finally {\n// \t\tstringRefs = null\n// \t}\n// }\n// currentExtensions[256].handlesRead = true\n\ncurrentExtensions[28] = (read) => { \n\t// shareable http://cbor.schmorp.de/value-sharing (for structured clones)\n\tif (!referenceMap) {\n\t\treferenceMap = new Map()\n\t\treferenceMap.id = 0\n\t}\n\tlet id = referenceMap.id++\n\tlet startingPosition = position\n\tlet token = src[position]\n\tlet target\n\t// TODO: handle Maps, Sets, and other types that can cycle; this is complicated, because you potentially need to read\n\t// ahead past references to record structure definitions\n\tif ((token >> 5) == 4)\n\t\ttarget = []\n\telse\n\t\ttarget = {}\n\n\tlet refEntry = { target } // a placeholder object\n\treferenceMap.set(id, refEntry)\n\tlet targetProperties = read() // read the next value as the target object to id\n\tif (refEntry.used) {// there is a cycle, so we have to assign properties to original target\n\t\tif (Object.getPrototypeOf(target) !== Object.getPrototypeOf(targetProperties)) {\n\t\t\t// this means that the returned target does not match the targetProperties, so we need rerun the read to\n\t\t\t// have the correctly create instance be assigned as a reference, then we do the copy the properties back to the\n\t\t\t// target\n\t\t\t// reset the position so that the read can be repeated\n\t\t\tposition = startingPosition\n\t\t\t// the returned instance is our new target for references\n\t\t\ttarget = targetProperties\n\t\t\treferenceMap.set(id, { target })\n\t\t\ttargetProperties = read()\n\t\t}\n\t\treturn Object.assign(target, targetProperties)\n\t}\n\trefEntry.target = targetProperties // the placeholder wasn't used, replace with the deserialized one\n\treturn targetProperties // no cycle, can just use the returned read object\n}\ncurrentExtensions[28].handlesRead = true\n\ncurrentExtensions[29] = (id) => {\n\t// sharedref http://cbor.schmorp.de/value-sharing (for structured clones)\n\tlet refEntry = referenceMap.get(id)\n\trefEntry.used = true\n\treturn refEntry.target\n}\n\ncurrentExtensions[258] = (array) => new Set(array); // https://github.com/input-output-hk/cbor-sets-spec/blob/master/CBOR_SETS.md\n(currentExtensions[259] = (read) => {\n\t// https://github.com/shanewholloway/js-cbor-codec/blob/master/docs/CBOR-259-spec\n\t// for decoding as a standard Map\n\tif (currentDecoder.mapsAsObjects) {\n\t\tcurrentDecoder.mapsAsObjects = false\n\t\trestoreMapsAsObject = true\n\t}\n\treturn read()\n}).handlesRead = true\nfunction combine(a, b) {\n\tif (typeof a === 'string')\n\t\treturn a + b\n\tif (a instanceof Array)\n\t\treturn a.concat(b)\n\treturn Object.assign({}, a, b)\n}\nfunction getPackedValues() {\n\tif (!packedValues) {\n\t\tif (currentDecoder.getShared)\n\t\t\tloadShared()\n\t\telse\n\t\t\tthrow new Error('No packed values available')\n\t}\n\treturn packedValues\n}\nconst SHARED_DATA_TAG_ID = 0x53687264 // ascii 'Shrd'\ncurrentExtensionRanges.push((tag, input) => {\n\tif (tag >= 225 && tag <= 255)\n\t\treturn combine(getPackedValues().prefixes[tag - 224], input)\n\tif (tag >= 28704 && tag <= 32767)\n\t\treturn combine(getPackedValues().prefixes[tag - 28672], input)\n\tif (tag >= 1879052288 && tag <= 2147483647)\n\t\treturn combine(getPackedValues().prefixes[tag - 1879048192], input)\n\tif (tag >= 216 && tag <= 223)\n\t\treturn combine(input, getPackedValues().suffixes[tag - 216])\n\tif (tag >= 27647 && tag <= 28671)\n\t\treturn combine(input, getPackedValues().suffixes[tag - 27639])\n\tif (tag >= 1811940352 && tag <= 1879048191)\n\t\treturn combine(input, getPackedValues().suffixes[tag - 1811939328])\n\tif (tag == SHARED_DATA_TAG_ID) {// we do a special check for this so that we can keep the currentExtensions as densely stored array (v8 stores arrays densely under about 3000 elements)\n\t\treturn {\n\t\t\tpackedValues: packedValues,\n\t\t\tstructures: currentStructures.slice(0),\n\t\t\tversion: input,\n\t\t}\n\t}\n\tif (tag == 55799) // self-descriptive CBOR tag, just return input value\n\t\treturn input\n})\n\nconst isLittleEndianMachine = new Uint8Array(new Uint16Array([1]).buffer)[0] == 1\nexport const typedArrays = [Uint8Array, Uint8ClampedArray, Uint16Array, Uint32Array,\n\ttypeof BigUint64Array == 'undefined' ? { name:'BigUint64Array' } : BigUint64Array, Int8Array, Int16Array, Int32Array,\n\ttypeof BigInt64Array == 'undefined' ? { name:'BigInt64Array' } : BigInt64Array, Float32Array, Float64Array]\nconst typedArrayTags = [64, 68, 69, 70, 71, 72, 77, 78, 79, 85, 86]\nfor (let i = 0; i < typedArrays.length; i++) {\n\tregisterTypedArray(typedArrays[i], typedArrayTags[i])\n}\nfunction registerTypedArray(TypedArray, tag) {\n\tlet dvMethod = 'get' + TypedArray.name.slice(0, -5)\n\tlet bytesPerElement;\n\tif (typeof TypedArray === 'function')\n\t\tbytesPerElement = TypedArray.BYTES_PER_ELEMENT;\n\telse\n\t\tTypedArray = null;\n\tfor (let littleEndian = 0; littleEndian < 2; littleEndian++) {\n\t\tif (!littleEndian && bytesPerElement == 1)\n\t\t\tcontinue\n\t\tlet sizeShift = bytesPerElement == 2 ? 1 : bytesPerElement == 4 ? 2 : bytesPerElement == 8 ? 3 : 0\n\t\tcurrentExtensions[littleEndian ? tag : (tag - 4)] = (bytesPerElement == 1 || littleEndian == isLittleEndianMachine) ? (buffer) => {\n\t\t\tif (!TypedArray)\n\t\t\t\tthrow new Error('Could not find typed array for code ' + tag)\n\t\t\tif (!currentDecoder.copyBuffers) {\n\t\t\t\t// try provide a direct view, but will only work if we are byte-aligned\n\t\t\t\tif (bytesPerElement === 1 ||\n\t\t\t\t\tbytesPerElement === 2 && !(buffer.byteOffset & 1) ||\n\t\t\t\t\tbytesPerElement === 4 && !(buffer.byteOffset & 3) ||\n\t\t\t\t\tbytesPerElement === 8 && !(buffer.byteOffset & 7))\n\t\t\t\t\treturn new TypedArray(buffer.buffer, buffer.byteOffset, buffer.byteLength >> sizeShift);\n\t\t\t}\n\t\t\t// we have to slice/copy here to get a new ArrayBuffer, if we are not word/byte aligned\n\t\t\treturn new TypedArray(Uint8Array.prototype.slice.call(buffer, 0).buffer)\n\t\t} : buffer => {\n\t\t\tif (!TypedArray)\n\t\t\t\tthrow new Error('Could not find typed array for code ' + tag)\n\t\t\tlet dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n\t\t\tlet elements = buffer.length >> sizeShift\n\t\t\tlet ta = new TypedArray(elements)\n\t\t\tlet method = dv[dvMethod]\n\t\t\tfor (let i = 0; i < elements; i++) {\n\t\t\t\tta[i] = method.call(dv, i << sizeShift, littleEndian)\n\t\t\t}\n\t\t\treturn ta\n\t\t}\n\t}\n}\n\nfunction readBundleExt() {\n\tlet length = readJustLength()\n\tlet bundlePosition = position + read()\n\tfor (let i = 2; i < length; i++) {\n\t\t// skip past bundles that were already read\n\t\tlet bundleLength = readJustLength() // this will increment position, so must add to position afterwards\n\t\tposition += bundleLength\n\t}\n\tlet dataPosition = position\n\tposition = bundlePosition\n\tbundledStrings = [readStringJS(readJustLength()), readStringJS(readJustLength())]\n\tbundledStrings.position0 = 0\n\tbundledStrings.position1 = 0\n\tbundledStrings.postBundlePosition = position\n\tposition = dataPosition\n\treturn read()\n}\n\nfunction readJustLength() {\n\tlet token = src[position++] & 0x1f\n\tif (token > 0x17) {\n\t\tswitch (token) {\n\t\t\tcase 0x18:\n\t\t\t\ttoken = src[position++]\n\t\t\t\tbreak\n\t\t\tcase 0x19:\n\t\t\t\ttoken = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\tbreak\n\t\t\tcase 0x1a:\n\t\t\t\ttoken = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\tbreak\n\t\t}\n\t}\n\treturn token\n}\n\nfunction loadShared() {\n\tif (currentDecoder.getShared) {\n\t\tlet sharedData = saveState(() => {\n\t\t\t// save the state in case getShared modifies our buffer\n\t\t\tsrc = null\n\t\t\treturn currentDecoder.getShared()\n\t\t}) || {}\n\t\tlet updatedStructures = sharedData.structures || []\n\t\tcurrentDecoder.sharedVersion = sharedData.version\n\t\tpackedValues = currentDecoder.sharedValues = sharedData.packedValues\n\t\tif (currentStructures === true)\n\t\t\tcurrentDecoder.structures = currentStructures = updatedStructures\n\t\telse\n\t\t\tcurrentStructures.splice.apply(currentStructures, [0, updatedStructures.length].concat(updatedStructures))\n\t}\n}\n\nfunction saveState(callback) {\n\tlet savedSrcEnd = srcEnd\n\tlet savedPosition = position\n\tlet savedStringPosition = stringPosition\n\tlet savedSrcStringStart = srcStringStart\n\tlet savedSrcStringEnd = srcStringEnd\n\tlet savedSrcString = srcString\n\tlet savedStrings = strings\n\tlet savedReferenceMap = referenceMap\n\tlet savedBundledStrings = bundledStrings\n\n\t// TODO: We may need to revisit this if we do more external calls to user code (since it could be slow)\n\tlet savedSrc = new Uint8Array(src.slice(0, srcEnd)) // we copy the data in case it changes while external data is processed\n\tlet savedStructures = currentStructures\n\tlet savedDecoder = currentDecoder\n\tlet savedSequentialMode = sequentialMode\n\tlet value = callback()\n\tsrcEnd = savedSrcEnd\n\tposition = savedPosition\n\tstringPosition = savedStringPosition\n\tsrcStringStart = savedSrcStringStart\n\tsrcStringEnd = savedSrcStringEnd\n\tsrcString = savedSrcString\n\tstrings = savedStrings\n\treferenceMap = savedReferenceMap\n\tbundledStrings = savedBundledStrings\n\tsrc = savedSrc\n\tsequentialMode = savedSequentialMode\n\tcurrentStructures = savedStructures\n\tcurrentDecoder = savedDecoder\n\tdataView = new DataView(src.buffer, src.byteOffset, src.byteLength)\n\treturn value\n}\nexport function clearSource() {\n\tsrc = null\n\treferenceMap = null\n\tcurrentStructures = null\n}\n\nexport function addExtension(extension) {\n\tcurrentExtensions[extension.tag] = extension.decode\n}\n\nexport function setSizeLimits(limits) {\n\tif (limits.maxMapSize) maxMapSize = limits.maxMapSize;\n\tif (limits.maxArraySize) maxArraySize = limits.maxArraySize;\n\tif (limits.maxObjectSize) maxObjectSize = limits.maxObjectSize;\n}\n\nexport const mult10 = new Array(147) // this is a table matching binary exponents to the multiplier to determine significant digit rounding\nfor (let i = 0; i < 256; i++) {\n\tmult10[i] = +('1e' + Math.floor(45.15 - i * 0.30103))\n}\nlet defaultDecoder = new Decoder({ useRecords: false })\nexport const decode = defaultDecoder.decode\nexport const decodeMultiple = defaultDecoder.decodeMultiple\nexport const FLOAT32_OPTIONS = {\n\tNEVER: 0,\n\tALWAYS: 1,\n\tDECIMAL_ROUND: 3,\n\tDECIMAL_FIT: 4\n}\nexport function roundFloat32(float32Number) {\n\tf32Array[0] = float32Number\n\tlet multiplier = mult10[((u8Array[3] & 0x7f) << 1) | (u8Array[2] >> 7)]\n\treturn ((multiplier * float32Number + (float32Number > 0 ? 0.5 : -0.5)) >> 0) / multiplier\n}\n","import { Decoder, mult10, Tag, typedArrays, addExtension as decodeAddExtension } from './decode.js'\nlet textEncoder\ntry {\n\ttextEncoder = new TextEncoder()\n} catch (error) {}\nlet extensions, extensionClasses\nconst Buffer = typeof globalThis === 'object' && globalThis.Buffer;\nconst hasNodeBuffer = typeof Buffer !== 'undefined'\nconst ByteArrayAllocate = hasNodeBuffer ? Buffer.allocUnsafeSlow : Uint8Array\nconst ByteArray = hasNodeBuffer ? Buffer : Uint8Array\nconst MAX_STRUCTURES = 0x100\nconst MAX_BUFFER_SIZE = hasNodeBuffer ? 0x100000000 : 0x7fd00000\nlet serializationId = 1\nlet throwOnIterable\nlet target\nlet targetView\nlet position = 0\nlet safeEnd\nlet bundledStrings = null\nconst MAX_BUNDLE_SIZE = 0xf000\nconst hasNonLatin = /[\\u0080-\\uFFFF]/\nconst RECORD_SYMBOL = Symbol('record-id')\nexport class Encoder extends Decoder {\n\tconstructor(options) {\n\t\tsuper(options)\n\t\tthis.offset = 0\n\t\tlet typeBuffer\n\t\tlet start\n\t\tlet sharedStructures\n\t\tlet hasSharedUpdate\n\t\tlet structures\n\t\tlet referenceMap\n\t\toptions = options || {}\n\t\tlet encodeUtf8 = ByteArray.prototype.utf8Write ? function(string, position, maxBytes) {\n\t\t\treturn target.utf8Write(string, position, maxBytes)\n\t\t} : (textEncoder && textEncoder.encodeInto) ?\n\t\t\tfunction(string, position) {\n\t\t\t\treturn textEncoder.encodeInto(string, target.subarray(position)).written\n\t\t\t} : false\n\n\t\tlet encoder = this\n\t\tlet hasSharedStructures = options.structures || options.saveStructures\n\t\tlet maxSharedStructures = options.maxSharedStructures\n\t\tif (maxSharedStructures == null)\n\t\t\tmaxSharedStructures = hasSharedStructures ? 128 : 0\n\t\tif (maxSharedStructures > 8190)\n\t\t\tthrow new Error('Maximum maxSharedStructure is 8190')\n\t\tlet isSequential = options.sequential\n\t\tif (isSequential) {\n\t\t\tmaxSharedStructures = 0\n\t\t}\n\t\tif (!this.structures)\n\t\t\tthis.structures = []\n\t\tif (this.saveStructures)\n\t\t\tthis.saveShared = this.saveStructures\n\t\tlet samplingPackedValues, packedObjectMap, sharedValues = options.sharedValues\n\t\tlet sharedPackedObjectMap\n\t\tif (sharedValues) {\n\t\t\tsharedPackedObjectMap = Object.create(null)\n\t\t\tfor (let i = 0, l = sharedValues.length; i < l; i++) {\n\t\t\t\tsharedPackedObjectMap[sharedValues[i]] = i\n\t\t\t}\n\t\t}\n\t\tlet recordIdsToRemove = []\n\t\tlet transitionsCount = 0\n\t\tlet serializationsSinceTransitionRebuild = 0\n\t\t\n\t\tthis.mapEncode = function(value, encodeOptions) {\n\t\t\t// Experimental support for premapping keys using _keyMap instad of keyMap - not optiimised yet)\n\t\t\tif (this._keyMap && !this._mapped) {\n\t\t\t\t//console.log('encoding ', value)\n\t\t\t\tswitch (value.constructor.name) {\n\t\t\t\t\tcase 'Array': \n\t\t\t\t\t\tvalue = value.map(r => this.encodeKeys(r))\n\t\t\t\t\t\tbreak\n\t\t\t\t\t//case 'Map': \n\t\t\t\t\t//\tvalue = this.encodeKeys(value)\n\t\t\t\t\t//\tbreak\n\t\t\t\t}\n\t\t\t\t//this._mapped = true\n\t\t\t}\n\t\t\treturn this.encode(value, encodeOptions)\n\t\t}\n\t\t\n\t\tthis.encode = function(value, encodeOptions)\t{\n\t\t\tif (!target) {\n\t\t\t\ttarget = new ByteArrayAllocate(8192)\n\t\t\t\ttargetView = new DataView(target.buffer, 0, 8192)\n\t\t\t\tposition = 0\n\t\t\t}\n\t\t\tsafeEnd = target.length - 10\n\t\t\tif (safeEnd - position < 0x800) {\n\t\t\t\t// don't start too close to the end, \n\t\t\t\ttarget = new ByteArrayAllocate(target.length)\n\t\t\t\ttargetView = new DataView(target.buffer, 0, target.length)\n\t\t\t\tsafeEnd = target.length - 10\n\t\t\t\tposition = 0\n\t\t\t} else if (encodeOptions === REUSE_BUFFER_MODE)\n\t\t\t\tposition = (position + 7) & 0x7ffffff8 // Word align to make any future copying of this buffer faster\n\t\t\tstart = position\n\t\t\tif (encoder.useSelfDescribedHeader) {\n\t\t\t\ttargetView.setUint32(position, 0xd9d9f700) // tag two byte, then self-descriptive tag\n\t\t\t\tposition += 3\n\t\t\t}\n\t\t\treferenceMap = encoder.structuredClone ? new Map() : null\n\t\t\tif (encoder.bundleStrings && typeof value !== 'string') {\n\t\t\t\tbundledStrings = []\n\t\t\t\tbundledStrings.size = Infinity // force a new bundle start on first string\n\t\t\t} else\n\t\t\t\tbundledStrings = null\n\n\t\t\tsharedStructures = encoder.structures\n\t\t\tif (sharedStructures) {\n\t\t\t\tif (sharedStructures.uninitialized) {\n\t\t\t\t\tlet sharedData = encoder.getShared() || {}\n\t\t\t\t\tencoder.structures = sharedStructures = sharedData.structures || []\n\t\t\t\t\tencoder.sharedVersion = sharedData.version\n\t\t\t\t\tlet sharedValues = encoder.sharedValues = sharedData.packedValues\n\t\t\t\t\tif (sharedValues) {\n\t\t\t\t\t\tsharedPackedObjectMap = {}\n\t\t\t\t\t\tfor (let i = 0, l = sharedValues.length; i < l; i++)\n\t\t\t\t\t\t\tsharedPackedObjectMap[sharedValues[i]] = i\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet sharedStructuresLength = sharedStructures.length\n\t\t\t\tif (sharedStructuresLength > maxSharedStructures && !isSequential)\n\t\t\t\t\tsharedStructuresLength = maxSharedStructures\n\t\t\t\tif (!sharedStructures.transitions) {\n\t\t\t\t\t// rebuild our structure transitions\n\t\t\t\t\tsharedStructures.transitions = Object.create(null)\n\t\t\t\t\tfor (let i = 0; i < sharedStructuresLength; i++) {\n\t\t\t\t\t\tlet keys = sharedStructures[i]\n\t\t\t\t\t\t//console.log('shared struct keys:', keys)\n\t\t\t\t\t\tif (!keys)\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\tlet nextTransition, transition = sharedStructures.transitions\n\t\t\t\t\t\tfor (let j = 0, l = keys.length; j < l; j++) {\n\t\t\t\t\t\t\tif (transition[RECORD_SYMBOL] === undefined)\n\t\t\t\t\t\t\t\ttransition[RECORD_SYMBOL] = i\n\t\t\t\t\t\t\tlet key = keys[j]\n\t\t\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttransition = nextTransition\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttransition[RECORD_SYMBOL] = i | 0x100000\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isSequential)\n\t\t\t\t\tsharedStructures.nextId = sharedStructuresLength\n\t\t\t}\n\t\t\tif (hasSharedUpdate)\n\t\t\t\thasSharedUpdate = false\n\t\t\tstructures = sharedStructures || []\n\t\t\tpackedObjectMap = sharedPackedObjectMap\n\t\t\tif (options.pack) {\n\t\t\t\tlet packedValues = new Map()\n\t\t\t\tpackedValues.values = []\n\t\t\t\tpackedValues.encoder = encoder\n\t\t\t\tpackedValues.maxValues = options.maxPrivatePackedValues || (sharedPackedObjectMap ? 16 : Infinity)\n\t\t\t\tpackedValues.objectMap = sharedPackedObjectMap || false\n\t\t\t\tpackedValues.samplingPackedValues = samplingPackedValues\n\t\t\t\tfindRepetitiveStrings(value, packedValues)\n\t\t\t\tif (packedValues.values.length > 0) {\n\t\t\t\t\ttarget[position++] = 0xd8 // one-byte tag\n\t\t\t\t\ttarget[position++] = 51 // tag 51 for packed shared structures https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\t\t\twriteArrayHeader(4)\n\t\t\t\t\tlet valuesArray = packedValues.values\n\t\t\t\t\tencode(valuesArray)\n\t\t\t\t\twriteArrayHeader(0) // prefixes\n\t\t\t\t\twriteArrayHeader(0) // suffixes\n\t\t\t\t\tpackedObjectMap = Object.create(sharedPackedObjectMap || null)\n\t\t\t\t\tfor (let i = 0, l = valuesArray.length; i < l; i++) {\n\t\t\t\t\t\tpackedObjectMap[valuesArray[i]] = i\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrowOnIterable = encodeOptions & THROW_ON_ITERABLE;\n\t\t\ttry {\n\t\t\t\tif (throwOnIterable)\n\t\t\t\t\treturn;\n\t\t\t\tencode(value)\n\t\t\t\tif (bundledStrings) {\n\t\t\t\t\twriteBundles(start, encode)\n\t\t\t\t}\n\t\t\t\tencoder.offset = position // update the offset so next serialization doesn't write over our buffer, but can continue writing to same buffer sequentially\n\t\t\t\tif (referenceMap && referenceMap.idsToInsert) {\n\t\t\t\t\tposition += referenceMap.idsToInsert.length * 2\n\t\t\t\t\tif (position > safeEnd)\n\t\t\t\t\t\tmakeRoom(position)\n\t\t\t\t\tencoder.offset = position\n\t\t\t\t\tlet serialized = insertIds(target.subarray(start, position), referenceMap.idsToInsert)\n\t\t\t\t\treferenceMap = null\n\t\t\t\t\treturn serialized\n\t\t\t\t}\n\t\t\t\tif (encodeOptions & REUSE_BUFFER_MODE) {\n\t\t\t\t\ttarget.start = start\n\t\t\t\t\ttarget.end = position\n\t\t\t\t\treturn target\n\t\t\t\t}\n\t\t\t\treturn target.subarray(start, position) // position can change if we call encode again in saveShared, so we get the buffer now\n\t\t\t} finally {\n\t\t\t\tif (sharedStructures) {\n\t\t\t\t\tif (serializationsSinceTransitionRebuild < 10)\n\t\t\t\t\t\tserializationsSinceTransitionRebuild++\n\t\t\t\t\tif (sharedStructures.length > maxSharedStructures)\n\t\t\t\t\t\tsharedStructures.length = maxSharedStructures\n\t\t\t\t\tif (transitionsCount > 10000) {\n\t\t\t\t\t\t// force a rebuild occasionally after a lot of transitions so it can get cleaned up\n\t\t\t\t\t\tsharedStructures.transitions = null\n\t\t\t\t\t\tserializationsSinceTransitionRebuild = 0\n\t\t\t\t\t\ttransitionsCount = 0\n\t\t\t\t\t\tif (recordIdsToRemove.length > 0)\n\t\t\t\t\t\t\trecordIdsToRemove = []\n\t\t\t\t\t} else if (recordIdsToRemove.length > 0 && !isSequential) {\n\t\t\t\t\t\tfor (let i = 0, l = recordIdsToRemove.length; i < l; i++) {\n\t\t\t\t\t\t\trecordIdsToRemove[i][RECORD_SYMBOL] = undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\trecordIdsToRemove = []\n\t\t\t\t\t\t//sharedStructures.nextId = maxSharedStructures\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (hasSharedUpdate && encoder.saveShared) {\n\t\t\t\t\tif (encoder.structures.length > maxSharedStructures) {\n\t\t\t\t\t\tencoder.structures = encoder.structures.slice(0, maxSharedStructures)\n\t\t\t\t\t}\n\t\t\t\t\t// we can't rely on start/end with REUSE_BUFFER_MODE since they will (probably) change when we save\n\t\t\t\t\tlet returnBuffer = target.subarray(start, position)\n\t\t\t\t\tif (encoder.updateSharedData() === false)\n\t\t\t\t\t\treturn encoder.encode(value) // re-encode if it fails\n\t\t\t\t\treturn returnBuffer\n\t\t\t\t}\n\t\t\t\tif (encodeOptions & RESET_BUFFER_MODE)\n\t\t\t\t\tposition = start\n\t\t\t}\n\t\t}\n\t\tthis.findCommonStringsToPack = () => {\n\t\t\tsamplingPackedValues = new Map()\n\t\t\tif (!sharedPackedObjectMap)\n\t\t\t\tsharedPackedObjectMap = Object.create(null)\n\t\t\treturn (options) => {\n\t\t\t\tlet threshold = options && options.threshold || 4\n\t\t\t\tlet position = this.pack ? options.maxPrivatePackedValues || 16 : 0\n\t\t\t\tif (!sharedValues)\n\t\t\t\t\tsharedValues = this.sharedValues = []\n\t\t\t\tfor (let [ key, status ] of samplingPackedValues) {\n\t\t\t\t\tif (status.count > threshold) {\n\t\t\t\t\t\tsharedPackedObjectMap[key] = position++\n\t\t\t\t\t\tsharedValues.push(key)\n\t\t\t\t\t\thasSharedUpdate = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (this.saveShared && this.updateSharedData() === false) {}\n\t\t\t\tsamplingPackedValues = null\n\t\t\t}\n\t\t}\n\t\tconst encode = (value) => {\n\t\t\tif (position > safeEnd)\n\t\t\t\ttarget = makeRoom(position)\n\n\t\t\tvar type = typeof value\n\t\t\tvar length\n\t\t\tif (type === 'string') {\n\t\t\t\tif (packedObjectMap) {\n\t\t\t\t\tlet packedPosition = packedObjectMap[value]\n\t\t\t\t\tif (packedPosition >= 0) {\n\t\t\t\t\t\tif (packedPosition < 16)\n\t\t\t\t\t\t\ttarget[position++] = packedPosition + 0xe0 // simple values, defined in https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttarget[position++] = 0xc6 // tag 6 defined in https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\t\t\t\t\tif (packedPosition & 1)\n\t\t\t\t\t\t\t\tencode((15 - packedPosition) >> 1)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tencode((packedPosition - 16) >> 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n/*\t\t\t\t\t\t} else if (packedStatus.serializationId != serializationId) {\n\t\t\t\t\t\t\tpackedStatus.serializationId = serializationId\n\t\t\t\t\t\t\tpackedStatus.count = 1\n\t\t\t\t\t\t\tif (options.sharedPack) {\n\t\t\t\t\t\t\t\tlet sharedCount = packedStatus.sharedCount = (packedStatus.sharedCount || 0) + 1\n\t\t\t\t\t\t\t\tif (shareCount > (options.sharedPack.threshold || 5)) {\n\t\t\t\t\t\t\t\t\tlet sharedPosition = packedStatus.position = packedStatus.nextSharedPosition\n\t\t\t\t\t\t\t\t\thasSharedUpdate = true\n\t\t\t\t\t\t\t\t\tif (sharedPosition < 16)\n\t\t\t\t\t\t\t\t\t\ttarget[position++] = sharedPosition + 0xc0\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} // else any in-doc incrementation?*/\n\t\t\t\t\t} else if (samplingPackedValues && !options.pack) {\n\t\t\t\t\t\tlet status = samplingPackedValues.get(value)\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tstatus.count++\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tsamplingPackedValues.set(value, {\n\t\t\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet strLength = value.length\n\t\t\t\tif (bundledStrings && strLength >= 4 && strLength < 0x400) {\n\t\t\t\t\tif ((bundledStrings.size += strLength) > MAX_BUNDLE_SIZE) {\n\t\t\t\t\t\tlet extStart\n\t\t\t\t\t\tlet maxBytes = (bundledStrings[0] ? bundledStrings[0].length * 3 + bundledStrings[1].length : 0) + 10\n\t\t\t\t\t\tif (position + maxBytes > safeEnd)\n\t\t\t\t\t\t\ttarget = makeRoom(position + maxBytes)\n\t\t\t\t\t\ttarget[position++] = 0xd9 // tag 16-bit\n\t\t\t\t\t\ttarget[position++] = 0xdf // tag 0xdff9\n\t\t\t\t\t\ttarget[position++] = 0xf9\n\t\t\t\t\t\t// TODO: If we only have one bundle with any string data, only write one string bundle\n\t\t\t\t\t\ttarget[position++] = bundledStrings.position ? 0x84 : 0x82 // array of 4 or 2 elements depending on if we write bundles\n\t\t\t\t\t\ttarget[position++] = 0x1a // 32-bit unsigned int\n\t\t\t\t\t\textStart = position - start\n\t\t\t\t\t\tposition += 4 // reserve for writing bundle reference\n\t\t\t\t\t\tif (bundledStrings.position) {\n\t\t\t\t\t\t\twriteBundles(start, encode) // write the last bundles\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbundledStrings = ['', ''] // create new ones\n\t\t\t\t\t\tbundledStrings.size = 0\n\t\t\t\t\t\tbundledStrings.position = extStart\n\t\t\t\t\t}\n\t\t\t\t\tlet twoByte = hasNonLatin.test(value)\n\t\t\t\t\tbundledStrings[twoByte ? 0 : 1] += value\n\t\t\t\t\ttarget[position++] = twoByte ? 0xce : 0xcf\n\t\t\t\t\tencode(strLength);\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlet headerSize\n\t\t\t\t// first we estimate the header size, so we can write to the correct location\n\t\t\t\tif (strLength < 0x20) {\n\t\t\t\t\theaderSize = 1\n\t\t\t\t} else if (strLength < 0x100) {\n\t\t\t\t\theaderSize = 2\n\t\t\t\t} else if (strLength < 0x10000) {\n\t\t\t\t\theaderSize = 3\n\t\t\t\t} else {\n\t\t\t\t\theaderSize = 5\n\t\t\t\t}\n\t\t\t\tlet maxBytes = strLength * 3\n\t\t\t\tif (position + maxBytes > safeEnd)\n\t\t\t\t\ttarget = makeRoom(position + maxBytes)\n\n\t\t\t\tif (strLength < 0x40 || !encodeUtf8) {\n\t\t\t\t\tlet i, c1, c2, strPosition = position + headerSize\n\t\t\t\t\tfor (i = 0; i < strLength; i++) {\n\t\t\t\t\t\tc1 = value.charCodeAt(i)\n\t\t\t\t\t\tif (c1 < 0x80) {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1\n\t\t\t\t\t\t} else if (c1 < 0x800) {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 | 0xc0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t(c1 & 0xfc00) === 0xd800 &&\n\t\t\t\t\t\t\t((c2 = value.charCodeAt(i + 1)) & 0xfc00) === 0xdc00\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tc1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff)\n\t\t\t\t\t\t\ti++\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 18 | 0xf0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 12 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 12 | 0xe0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlength = strPosition - position - headerSize\n\t\t\t\t} else {\n\t\t\t\t\tlength = encodeUtf8(value, position + headerSize, maxBytes)\n\t\t\t\t}\n\n\t\t\t\tif (length < 0x18) {\n\t\t\t\t\ttarget[position++] = 0x60 | length\n\t\t\t\t} else if (length < 0x100) {\n\t\t\t\t\tif (headerSize < 2) {\n\t\t\t\t\t\ttarget.copyWithin(position + 2, position + 1, position + 1 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0x78\n\t\t\t\t\ttarget[position++] = length\n\t\t\t\t} else if (length < 0x10000) {\n\t\t\t\t\tif (headerSize < 3) {\n\t\t\t\t\t\ttarget.copyWithin(position + 3, position + 2, position + 2 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0x79\n\t\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t\t} else {\n\t\t\t\t\tif (headerSize < 5) {\n\t\t\t\t\t\ttarget.copyWithin(position + 5, position + 3, position + 3 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0x7a\n\t\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\t\tposition += 4\n\t\t\t\t}\n\t\t\t\tposition += length\n\t\t\t} else if (type === 'number') {\n\t\t\t\tif (!this.alwaysUseFloat && value >>> 0 === value) {// positive integer, 32-bit or less\n\t\t\t\t\t// positive uint\n\t\t\t\t\tif (value < 0x18) {\n\t\t\t\t\t\ttarget[position++] = value\n\t\t\t\t\t} else if (value < 0x100) {\n\t\t\t\t\t\ttarget[position++] = 0x18\n\t\t\t\t\t\ttarget[position++] = value\n\t\t\t\t\t} else if (value < 0x10000) {\n\t\t\t\t\t\ttarget[position++] = 0x19\n\t\t\t\t\t\ttarget[position++] = value >> 8\n\t\t\t\t\t\ttarget[position++] = value & 0xff\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[position++] = 0x1a\n\t\t\t\t\t\ttargetView.setUint32(position, value)\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t}\n\t\t\t\t} else if (!this.alwaysUseFloat && value >> 0 === value) { // negative integer\n\t\t\t\t\tif (value >= -0x18) {\n\t\t\t\t\t\ttarget[position++] = 0x1f - value\n\t\t\t\t\t} else if (value >= -0x100) {\n\t\t\t\t\t\ttarget[position++] = 0x38\n\t\t\t\t\t\ttarget[position++] = ~value\n\t\t\t\t\t} else if (value >= -0x10000) {\n\t\t\t\t\t\ttarget[position++] = 0x39\n\t\t\t\t\t\ttargetView.setUint16(position, ~value)\n\t\t\t\t\t\tposition += 2\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[position++] = 0x3a\n\t\t\t\t\t\ttargetView.setUint32(position, ~value)\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet useFloat32\n\t\t\t\t\tif ((useFloat32 = this.useFloat32) > 0 && value < 0x100000000 && value >= -0x80000000) {\n\t\t\t\t\t\ttarget[position++] = 0xfa\n\t\t\t\t\t\ttargetView.setFloat32(position, value)\n\t\t\t\t\t\tlet xShifted\n\t\t\t\t\t\tif (useFloat32 < 4 ||\n\t\t\t\t\t\t\t\t// this checks for rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\t\t\t\t((xShifted = value * mult10[((target[position] & 0x7f) << 1) | (target[position + 1] >> 7)]) >> 0) === xShifted) {\n\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tposition-- // move back into position for writing a double\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0xfb\n\t\t\t\t\ttargetView.setFloat64(position, value)\n\t\t\t\t\tposition += 8\n\t\t\t\t}\n\t\t\t} else if (type === 'object') {\n\t\t\t\tif (!value)\n\t\t\t\t\ttarget[position++] = 0xf6\n\t\t\t\telse {\n\t\t\t\t\tif (referenceMap) {\n\t\t\t\t\t\tlet referee = referenceMap.get(value)\n\t\t\t\t\t\tif (referee) {\n\t\t\t\t\t\t\ttarget[position++] = 0xd8\n\t\t\t\t\t\t\ttarget[position++] = 29 // http://cbor.schmorp.de/value-sharing\n\t\t\t\t\t\t\ttarget[position++] = 0x19 // 16-bit uint\n\t\t\t\t\t\t\tif (!referee.references) {\n\t\t\t\t\t\t\t\tlet idsToInsert = referenceMap.idsToInsert || (referenceMap.idsToInsert = [])\n\t\t\t\t\t\t\t\treferee.references = []\n\t\t\t\t\t\t\t\tidsToInsert.push(referee)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treferee.references.push(position - start)\n\t\t\t\t\t\t\tposition += 2 // TODO: also support 32-bit\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t} else \n\t\t\t\t\t\t\treferenceMap.set(value, { offset: position - start })\n\t\t\t\t\t}\n\t\t\t\t\tlet constructor = value.constructor\n\t\t\t\t\tif (constructor === Object) {\n\t\t\t\t\t\twriteObject(value)\n\t\t\t\t\t} else if (constructor === Array) {\n\t\t\t\t\t\tlength = value.length\n\t\t\t\t\t\tif (length < 0x18) {\n\t\t\t\t\t\t\ttarget[position++] = 0x80 | length\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twriteArrayHeader(length)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\t\t\tencode(value[i])\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (constructor === Map) {\n\t\t\t\t\t\tif (this.mapsAsObjects ? this.useTag259ForMaps !== false : this.useTag259ForMaps) {\n\t\t\t\t\t\t\t// use Tag 259 (https://github.com/shanewholloway/js-cbor-codec/blob/master/docs/CBOR-259-spec--explicit-maps.md) for maps if the user wants it that way\n\t\t\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\t\t\ttarget[position++] = 1\n\t\t\t\t\t\t\ttarget[position++] = 3\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlength = value.size\n\t\t\t\t\t\tif (length < 0x18) {\n\t\t\t\t\t\t\ttarget[position++] = 0xa0 | length\n\t\t\t\t\t\t} else if (length < 0x100) {\n\t\t\t\t\t\t\ttarget[position++] = 0xb8\n\t\t\t\t\t\t\ttarget[position++] = length\n\t\t\t\t\t\t} else if (length < 0x10000) {\n\t\t\t\t\t\t\ttarget[position++] = 0xb9\n\t\t\t\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[position++] = 0xba\n\t\t\t\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (encoder.keyMap) { \n\t\t\t\t\t\t\tfor (let [ key, entryValue ] of value) {\n\t\t\t\t\t\t\t\tencode(encoder.encodeKey(key))\n\t\t\t\t\t\t\t\tencode(entryValue)\n\t\t\t\t\t\t\t} \n\t\t\t\t\t\t} else { \n\t\t\t\t\t\t\tfor (let [ key, entryValue ] of value) {\n\t\t\t\t\t\t\t\tencode(key) \n\t\t\t\t\t\t\t\tencode(entryValue)\n\t\t\t\t\t\t\t} \t\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (let i = 0, l = extensions.length; i < l; i++) {\n\t\t\t\t\t\t\tlet extensionClass = extensionClasses[i]\n\t\t\t\t\t\t\tif (value instanceof extensionClass) {\n\t\t\t\t\t\t\t\tlet extension = extensions[i]\n\t\t\t\t\t\t\t\tlet tag = extension.tag\n\t\t\t\t\t\t\t\tif (tag == undefined)\n\t\t\t\t\t\t\t\t\ttag = extension.getTag && extension.getTag.call(this, value)\n\t\t\t\t\t\t\t\tif (tag < 0x18) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xc0 | tag\n\t\t\t\t\t\t\t\t} else if (tag < 0x100) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xd8\n\t\t\t\t\t\t\t\t\ttarget[position++] = tag\n\t\t\t\t\t\t\t\t} else if (tag < 0x10000) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\t\t\t\t\ttarget[position++] = tag >> 8\n\t\t\t\t\t\t\t\t\ttarget[position++] = tag & 0xff\n\t\t\t\t\t\t\t\t} else if (tag > -1) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xda\n\t\t\t\t\t\t\t\t\ttargetView.setUint32(position, tag)\n\t\t\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t\t\t} // else undefined, don't write tag\n\t\t\t\t\t\t\t\textension.encode.call(this, value, encode, makeRoom)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value[Symbol.iterator]) {\n\t\t\t\t\t\t\tif (throwOnIterable) {\n\t\t\t\t\t\t\t\tlet error = new Error('Iterable should be serialized as iterator')\n\t\t\t\t\t\t\t\terror.iteratorNotHandled = true;\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttarget[position++] = 0x9f // indefinite length array\n\t\t\t\t\t\t\tfor (let entry of value) {\n\t\t\t\t\t\t\t\tencode(entry)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttarget[position++] = 0xff // stop-code\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value[Symbol.asyncIterator] || isBlob(value)) {\n\t\t\t\t\t\t\tlet error = new Error('Iterable/blob should be serialized as iterator')\n\t\t\t\t\t\t\terror.iteratorNotHandled = true;\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.useToJSON && value.toJSON) {\n\t\t\t\t\t\t\tconst json = value.toJSON()\n\t\t\t\t\t\t\t// if for some reason value.toJSON returns itself it'll loop forever\n\t\t\t\t\t\t\tif (json !== value)\n\t\t\t\t\t\t\t\treturn encode(json)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// no extension found, write as a plain object\n\t\t\t\t\t\twriteObject(value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (type === 'boolean') {\n\t\t\t\ttarget[position++] = value ? 0xf5 : 0xf4\n\t\t\t} else if (type === 'bigint') {\n\t\t\t\tif (value < (BigInt(1)<<BigInt(64)) && value >= 0) {\n\t\t\t\t\t// use an unsigned int as long as it fits\n\t\t\t\t\ttarget[position++] = 0x1b\n\t\t\t\t\ttargetView.setBigUint64(position, value)\n\t\t\t\t} else if (value > -(BigInt(1)<<BigInt(64)) && value < 0) {\n\t\t\t\t\t// if we can fit an unsigned int, use that\n\t\t\t\t\ttarget[position++] = 0x3b\n\t\t\t\t\ttargetView.setBigUint64(position, -value - BigInt(1))\n\t\t\t\t} else {\n\t\t\t\t\t// overflow\n\t\t\t\t\tif (this.largeBigIntToFloat) {\n\t\t\t\t\t\ttarget[position++] = 0xfb\n\t\t\t\t\t\ttargetView.setFloat64(position, Number(value))\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (value >= BigInt(0))\n\t\t\t\t\t\t\ttarget[position++] = 0xc2 // tag 2\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttarget[position++] = 0xc3 // tag 2\n\t\t\t\t\t\t\tvalue = BigInt(-1) - value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet bytes = [];\n\t\t\t\t\t\twhile (value) {\n\t\t\t\t\t\t\tbytes.push(Number(value & BigInt(0xff)));\n\t\t\t\t\t\t\tvalue >>= BigInt(8);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twriteBuffer(new Uint8Array(bytes.reverse()), makeRoom);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tposition += 8\n\t\t\t} else if (type === 'undefined') {\n\t\t\t\ttarget[position++] = 0xf7\n\t\t\t} else {\n\t\t\t\tthrow new Error('Unknown type: ' + type)\n\t\t\t}\n\t\t}\n\n\t\tconst writeObject = this.useRecords === false ? this.variableMapSize ? (object) => {\n\t\t\t// this method is slightly slower, but generates \"preferred serialization\" (optimally small for smaller objects)\n\t\t\tlet keys = Object.keys(object)\n\t\t\tlet vals = Object.values(object)\n\t\t\tlet length = keys.length\n\t\t\tif (length < 0x18) {\n\t\t\t\ttarget[position++] = 0xa0 | length\n\t\t\t} else if (length < 0x100) {\n\t\t\t\ttarget[position++] = 0xb8\n\t\t\t\ttarget[position++] = length\n\t\t\t} else if (length < 0x10000) {\n\t\t\t\ttarget[position++] = 0xb9\n\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t} else {\n\t\t\t\ttarget[position++] = 0xba\n\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\tposition += 4\n\t\t\t}\n\t\t\tlet key\n\t\t\tif (encoder.keyMap) { \n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tencode(encoder.encodeKey(keys[i]))\n\t\t\t\t\tencode(vals[i])\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tencode(keys[i])\n\t\t\t\t\tencode(vals[i])\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\t\t(object) => {\n\t\t\ttarget[position++] = 0xb9 // always use map 16, so we can preallocate and set the length afterwards\n\t\t\tlet objectOffset = position - start\n\t\t\tposition += 2\n\t\t\tlet size = 0\n\t\t\tif (encoder.keyMap) {\n\t\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\tencode(encoder.encodeKey(key))\n\t\t\t\t\tencode(object[key])\n\t\t\t\t\tsize++\n\t\t\t\t}\n\t\t\t} else { \n\t\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\t\tencode(key)\n\t\t\t\t\t\tencode(object[key])\n\t\t\t\t\tsize++\n\t\t\t\t}\n\t\t\t}\n\t\t\ttarget[objectOffset++ + start] = size >> 8\n\t\t\ttarget[objectOffset + start] = size & 0xff\n\t\t} :\n\t\t(object, skipValues) => {\n\t\t\tlet nextTransition, transition = structures.transitions || (structures.transitions = Object.create(null))\n\t\t\tlet newTransitions = 0\n\t\t\tlet length = 0\n\t\t\tlet parentRecordId\n\t\t\tlet keys\n\t\t\tif (this.keyMap) {\n\t\t\t\tkeys = Object.keys(object).map(k => this.encodeKey(k))\n\t\t\t\tlength = keys.length\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tlet key = keys[i]\n\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\tnewTransitions++\n\t\t\t\t\t}\n\t\t\t\t\ttransition = nextTransition\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\tif (transition[RECORD_SYMBOL] & 0x100000) {// this indicates it is a brancheable/extendable terminal node, so we will use this record id and extend it\n\t\t\t\t\t\t\tparentRecordId = transition[RECORD_SYMBOL] & 0xffff\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\tnewTransitions++\n\t\t\t\t\t}\n\t\t\t\t\ttransition = nextTransition\n\t\t\t\t\tlength++\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet recordId = transition[RECORD_SYMBOL]\n\t\t\tif (recordId !== undefined) {\n\t\t\t\trecordId &= 0xffff\n\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\ttarget[position++] = (recordId >> 8) | 0xe0\n\t\t\t\ttarget[position++] = recordId & 0xff\n\t\t\t} else {\n\t\t\t\tif (!keys)\n\t\t\t\t\tkeys = transition.__keys__ || (transition.__keys__ = Object.keys(object))\n\t\t\t\tif (parentRecordId === undefined) {\n\t\t\t\t\trecordId = structures.nextId++\n\t\t\t\t\tif (!recordId) {\n\t\t\t\t\t\trecordId = 0\n\t\t\t\t\t\tstructures.nextId = 1\n\t\t\t\t\t}\n\t\t\t\t\tif (recordId >= MAX_STRUCTURES) {// cycle back around\n\t\t\t\t\t\tstructures.nextId = (recordId = maxSharedStructures) + 1\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trecordId = parentRecordId\n\t\t\t\t}\n\t\t\t\tstructures[recordId] = keys\n\t\t\t\tif (recordId < maxSharedStructures) {\n\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\ttarget[position++] = (recordId >> 8) | 0xe0\n\t\t\t\t\ttarget[position++] = recordId & 0xff\n\t\t\t\t\ttransition = structures.transitions\n\t\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\t\tif (transition[RECORD_SYMBOL] === undefined || (transition[RECORD_SYMBOL] & 0x100000))\n\t\t\t\t\t\t\ttransition[RECORD_SYMBOL] = recordId\n\t\t\t\t\t\ttransition = transition[keys[i]]\n\t\t\t\t\t}\n\t\t\t\t\ttransition[RECORD_SYMBOL] = recordId | 0x100000 // indicates it is a extendable terminal\n\t\t\t\t\thasSharedUpdate = true\n\t\t\t\t} else {\n\t\t\t\t\ttransition[RECORD_SYMBOL] = recordId\n\t\t\t\t\ttargetView.setUint32(position, 0xd9dfff00) // tag two byte, then record definition id\n\t\t\t\t\tposition += 3\n\t\t\t\t\tif (newTransitions)\n\t\t\t\t\t\ttransitionsCount += serializationsSinceTransitionRebuild * newTransitions\n\t\t\t\t\t// record the removal of the id, we can maintain our shared structure\n\t\t\t\t\tif (recordIdsToRemove.length >= MAX_STRUCTURES - maxSharedStructures)\n\t\t\t\t\t\trecordIdsToRemove.shift()[RECORD_SYMBOL] = undefined // we are cycling back through, and have to remove old ones\n\t\t\t\t\trecordIdsToRemove.push(transition)\n\t\t\t\t\twriteArrayHeader(length + 2)\n\t\t\t\t\tencode(0xe000 + recordId)\n\t\t\t\t\tencode(keys)\n\t\t\t\t\tif (skipValues) return; // special exit for iterator\n\t\t\t\t\tfor (let key in object)\n\t\t\t\t\t\tif (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key))\n\t\t\t\t\t\t\tencode(object[key])\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (length < 0x18) { // write the array header\n\t\t\t\ttarget[position++] = 0x80 | length\n\t\t\t} else {\n\t\t\t\twriteArrayHeader(length)\n\t\t\t}\n\t\t\tif (skipValues) return; // special exit for iterator\n\t\t\tfor (let key in object)\n\t\t\t\tif (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key))\n\t\t\t\t\tencode(object[key])\n\t\t}\n\t\tconst makeRoom = (end) => {\n\t\t\tlet newSize\n\t\t\tif (end > 0x1000000) {\n\t\t\t\t// special handling for really large buffers\n\t\t\t\tif ((end - start) > MAX_BUFFER_SIZE)\n\t\t\t\t\tthrow new Error('Encoded buffer would be larger than maximum buffer size')\n\t\t\t\tnewSize = Math.min(MAX_BUFFER_SIZE,\n\t\t\t\t\tMath.round(Math.max((end - start) * (end > 0x4000000 ? 1.25 : 2), 0x400000) / 0x1000) * 0x1000)\n\t\t\t} else // faster handling for smaller buffers\n\t\t\t\tnewSize = ((Math.max((end - start) << 2, target.length - 1) >> 12) + 1) << 12\n\t\t\tlet newBuffer = new ByteArrayAllocate(newSize)\n\t\t\ttargetView = new DataView(newBuffer.buffer, 0, newSize)\n\t\t\tif (target.copy)\n\t\t\t\ttarget.copy(newBuffer, 0, start, end)\n\t\t\telse\n\t\t\t\tnewBuffer.set(target.slice(start, end))\n\t\t\tposition -= start\n\t\t\tstart = 0\n\t\t\tsafeEnd = newBuffer.length - 10\n\t\t\treturn target = newBuffer\n\t\t}\n\t\tlet chunkThreshold = 100;\n\t\tlet continuedChunkThreshold = 1000;\n\t\tthis.encodeAsIterable = function(value, options) {\n\t\t\treturn startEncoding(value, options, encodeObjectAsIterable);\n\t\t}\n\t\tthis.encodeAsAsyncIterable = function(value, options) {\n\t\t\treturn startEncoding(value, options, encodeObjectAsAsyncIterable);\n\t\t}\n\n\t\tfunction* encodeObjectAsIterable(object, iterateProperties, finalIterable) {\n\t\t\tlet constructor = object.constructor;\n\t\t\tif (constructor === Object) {\n\t\t\t\tlet useRecords = encoder.useRecords !== false;\n\t\t\t\tif (useRecords)\n\t\t\t\t\twriteObject(object, true); // write the record identifier\n\t\t\t\telse\n\t\t\t\t\twriteEntityLength(Object.keys(object).length, 0xa0);\n\t\t\t\tfor (let key in object) {\n\t\t\t\t\tlet value = object[key];\n\t\t\t\t\tif (!useRecords) encode(key);\n\t\t\t\t\tif (value && typeof value === 'object') {\n\t\t\t\t\t\tif (iterateProperties[key])\n\t\t\t\t\t\t\tyield* encodeObjectAsIterable(value, iterateProperties[key]);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tyield* tryEncode(value, iterateProperties, key);\n\t\t\t\t\t} else encode(value);\n\t\t\t\t}\n\t\t\t} else if (constructor === Array) {\n\t\t\t\tlet length = object.length;\n\t\t\t\twriteArrayHeader(length);\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tlet value = object[i];\n\t\t\t\t\tif (value && (typeof value === 'object' || position - start > chunkThreshold)) {\n\t\t\t\t\t\tif (iterateProperties.element)\n\t\t\t\t\t\t\tyield* encodeObjectAsIterable(value, iterateProperties.element);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tyield* tryEncode(value, iterateProperties, 'element');\n\t\t\t\t\t} else encode(value);\n\t\t\t\t}\n\t\t\t} else if (object[Symbol.iterator] && !object.buffer) { // iterator, but exclude typed arrays\n\t\t\t\ttarget[position++] = 0x9f; // start indefinite array\n\t\t\t\tfor (let value of object) {\n\t\t\t\t\tif (value && (typeof value === 'object' || position - start > chunkThreshold)) {\n\t\t\t\t\t\tif (iterateProperties.element)\n\t\t\t\t\t\t\tyield* encodeObjectAsIterable(value, iterateProperties.element);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tyield* tryEncode(value, iterateProperties, 'element');\n\t\t\t\t\t} else encode(value);\n\t\t\t\t}\n\t\t\t\ttarget[position++] = 0xff; // stop byte\n\t\t\t} else if (isBlob(object)){\n\t\t\t\twriteEntityLength(object.size, 0x40); // encode as binary data\n\t\t\t\tyield target.subarray(start, position);\n\t\t\t\tyield object; // directly return blobs, they have to be encoded asynchronously\n\t\t\t\trestartEncoding();\n\t\t\t} else if (object[Symbol.asyncIterator]) {\n\t\t\t\ttarget[position++] = 0x9f; // start indefinite array\n\t\t\t\tyield target.subarray(start, position);\n\t\t\t\tyield object; // directly return async iterators, they have to be encoded asynchronously\n\t\t\t\trestartEncoding();\n\t\t\t\ttarget[position++] = 0xff; // stop byte\n\t\t\t} else {\n\t\t\t\tencode(object);\n\t\t\t}\n\t\t\tif (finalIterable && position > start) yield target.subarray(start, position);\n\t\t\telse if (position - start > chunkThreshold) {\n\t\t\t\tyield target.subarray(start, position);\n\t\t\t\trestartEncoding();\n\t\t\t}\n\t\t}\n\t\tfunction* tryEncode(value, iterateProperties, key) {\n\t\t\tlet restart = position - start;\n\t\t\ttry {\n\t\t\t\tencode(value);\n\t\t\t\tif (position - start > chunkThreshold) {\n\t\t\t\t\tyield target.subarray(start, position);\n\t\t\t\t\trestartEncoding();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (error.iteratorNotHandled) {\n\t\t\t\t\titerateProperties[key] = {};\n\t\t\t\t\tposition = start + restart; // restart our position so we don't have partial data from last encode\n\t\t\t\t\tyield* encodeObjectAsIterable.call(this, value, iterateProperties[key]);\n\t\t\t\t} else throw error;\n\t\t\t}\n\t\t}\n\t\tfunction restartEncoding() {\n\t\t\tchunkThreshold = continuedChunkThreshold;\n\t\t\tencoder.encode(null, THROW_ON_ITERABLE); // restart encoding\n\t\t}\n\t\tfunction startEncoding(value, options, encodeIterable) {\n\t\t\tif (options && options.chunkThreshold) // explicitly specified chunk sizes\n\t\t\t\tchunkThreshold = continuedChunkThreshold = options.chunkThreshold;\n\t\t\telse // we start with a smaller threshold to get initial bytes sent quickly\n\t\t\t\tchunkThreshold = 100;\n\t\t\tif (value && typeof value === 'object') {\n\t\t\t\tencoder.encode(null, THROW_ON_ITERABLE); // start encoding\n\t\t\t\treturn encodeIterable(value, encoder.iterateProperties || (encoder.iterateProperties = {}), true);\n\t\t\t}\n\t\t\treturn [encoder.encode(value)];\n\t\t}\n\n\t\tasync function* encodeObjectAsAsyncIterable(value, iterateProperties) {\n\t\t\tfor (let encodedValue of encodeObjectAsIterable(value, iterateProperties, true)) {\n\t\t\t\tlet constructor = encodedValue.constructor;\n\t\t\t\tif (constructor === ByteArray || constructor === Uint8Array)\n\t\t\t\t\tyield encodedValue;\n\t\t\t\telse if (isBlob(encodedValue)) {\n\t\t\t\t\tlet reader = encodedValue.stream().getReader();\n\t\t\t\t\tlet next;\n\t\t\t\t\twhile (!(next = await reader.read()).done) {\n\t\t\t\t\t\tyield next.value;\n\t\t\t\t\t}\n\t\t\t\t} else if (encodedValue[Symbol.asyncIterator]) {\n\t\t\t\t\tfor await (let asyncValue of encodedValue) {\n\t\t\t\t\t\trestartEncoding();\n\t\t\t\t\t\tif (asyncValue)\n\t\t\t\t\t\t\tyield* encodeObjectAsAsyncIterable(asyncValue, iterateProperties.async || (iterateProperties.async = {}));\n\t\t\t\t\t\telse yield encoder.encode(asyncValue);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tyield encodedValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tuseBuffer(buffer) {\n\t\t// this means we are finished using our own buffer and we can write over it safely\n\t\ttarget = buffer\n\t\ttargetView = new DataView(target.buffer, target.byteOffset, target.byteLength)\n\t\tposition = 0\n\t}\n\tclearSharedData() {\n\t\tif (this.structures)\n\t\t\tthis.structures = []\n\t\tif (this.sharedValues)\n\t\t\tthis.sharedValues = undefined\n\t}\n\tupdateSharedData() {\n\t\tlet lastVersion = this.sharedVersion || 0\n\t\tthis.sharedVersion = lastVersion + 1\n\t\tlet structuresCopy = this.structures.slice(0)\n\t\tlet sharedData = new SharedData(structuresCopy, this.sharedValues, this.sharedVersion)\n\t\tlet saveResults = this.saveShared(sharedData,\n\t\t\t\texistingShared => (existingShared && existingShared.version || 0) == lastVersion)\n\t\tif (saveResults === false) {\n\t\t\t// get updated structures and try again if the update failed\n\t\t\tsharedData = this.getShared() || {}\n\t\t\tthis.structures = sharedData.structures || []\n\t\t\tthis.sharedValues = sharedData.packedValues\n\t\t\tthis.sharedVersion = sharedData.version\n\t\t\tthis.structures.nextId = this.structures.length\n\t\t} else {\n\t\t\t// restore structures\n\t\t\tstructuresCopy.forEach((structure, i) => this.structures[i] = structure)\n\t\t}\n\t\t// saveShared may fail to write and reload, or may have reloaded to check compatibility and overwrite saved data, either way load the correct shared data\n\t\treturn saveResults\n\t}\n}\nfunction writeEntityLength(length, majorValue) {\n\tif (length < 0x18)\n\t\ttarget[position++] = majorValue | length\n\telse if (length < 0x100) {\n\t\ttarget[position++] = majorValue | 0x18\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\ttarget[position++] = majorValue | 0x19\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\ttarget[position++] = majorValue | 0x1a\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n\n}\nclass SharedData {\n\tconstructor(structures, values, version) {\n\t\tthis.structures = structures\n\t\tthis.packedValues = values\n\t\tthis.version = version\n\t}\n}\n\nfunction writeArrayHeader(length) {\n\tif (length < 0x18)\n\t\ttarget[position++] = 0x80 | length\n\telse if (length < 0x100) {\n\t\ttarget[position++] = 0x98\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\ttarget[position++] = 0x99\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\ttarget[position++] = 0x9a\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n}\n\nconst BlobConstructor = typeof Blob === 'undefined' ? function(){} : Blob;\nfunction isBlob(object) {\n\tif (object instanceof BlobConstructor)\n\t\treturn true;\n\tlet tag = object[Symbol.toStringTag];\n\treturn tag === 'Blob' || tag === 'File';\n}\nfunction findRepetitiveStrings(value, packedValues) {\n\tswitch(typeof value) {\n\t\tcase 'string':\n\t\t\tif (value.length > 3) {\n\t\t\t\tif (packedValues.objectMap[value] > -1 || packedValues.values.length >= packedValues.maxValues)\n\t\t\t\t\treturn\n\t\t\t\tlet packedStatus = packedValues.get(value)\n\t\t\t\tif (packedStatus) {\n\t\t\t\t\tif (++packedStatus.count == 2) {\n\t\t\t\t\t\tpackedValues.values.push(value)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpackedValues.set(value, {\n\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t})\n\t\t\t\t\tif (packedValues.samplingPackedValues) {\n\t\t\t\t\t\tlet status = packedValues.samplingPackedValues.get(value)\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tstatus.count++\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpackedValues.samplingPackedValues.set(value, {\n\t\t\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'object':\n\t\t\tif (value) {\n\t\t\t\tif (value instanceof Array) {\n\t\t\t\t\tfor (let i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\tfindRepetitiveStrings(value[i], packedValues)\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tlet includeKeys = !packedValues.encoder.useRecords\n\t\t\t\t\tfor (var key in value) {\n\t\t\t\t\t\tif (value.hasOwnProperty(key)) {\n\t\t\t\t\t\t\tif (includeKeys)\n\t\t\t\t\t\t\t\tfindRepetitiveStrings(key, packedValues)\n\t\t\t\t\t\t\tfindRepetitiveStrings(value[key], packedValues)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'function': console.log(value)\n\t}\n}\nconst isLittleEndianMachine = new Uint8Array(new Uint16Array([1]).buffer)[0] == 1\nextensionClasses = [ Date, Set, Error, RegExp, Tag, ArrayBuffer,\n\tUint8Array, Uint8ClampedArray, Uint16Array, Uint32Array,\n\ttypeof BigUint64Array == 'undefined' ? function() {} : BigUint64Array, Int8Array, Int16Array, Int32Array,\n\ttypeof BigInt64Array == 'undefined' ? function() {} : BigInt64Array,\n\tFloat32Array, Float64Array, SharedData ]\n\n//Object.getPrototypeOf(Uint8Array.prototype).constructor /*TypedArray*/\nextensions = [{ // Date\n\ttag: 1,\n\tencode(date, encode) {\n\t\tlet seconds = date.getTime() / 1000\n\t\tif ((this.useTimestamp32 || date.getMilliseconds() === 0) && seconds >= 0 && seconds < 0x100000000) {\n\t\t\t// Timestamp 32\n\t\t\ttarget[position++] = 0x1a\n\t\t\ttargetView.setUint32(position, seconds)\n\t\t\tposition += 4\n\t\t} else {\n\t\t\t// Timestamp float64\n\t\t\ttarget[position++] = 0xfb\n\t\t\ttargetView.setFloat64(position, seconds)\n\t\t\tposition += 8\n\t\t}\n\t}\n}, { // Set\n\ttag: 258, // https://github.com/input-output-hk/cbor-sets-spec/blob/master/CBOR_SETS.md\n\tencode(set, encode) {\n\t\tlet array = Array.from(set)\n\t\tencode(array)\n\t}\n}, { // Error\n\ttag: 27, // http://cbor.schmorp.de/generic-object\n\tencode(error, encode) {\n\t\tencode([ error.name, error.message ])\n\t}\n}, { // RegExp\n\ttag: 27, // http://cbor.schmorp.de/generic-object\n\tencode(regex, encode) {\n\t\tencode([ 'RegExp', regex.source, regex.flags ])\n\t}\n}, { // Tag\n\tgetTag(tag) {\n\t\treturn tag.tag\n\t},\n\tencode(tag, encode) {\n\t\tencode(tag.value)\n\t}\n}, { // ArrayBuffer\n\tencode(arrayBuffer, encode, makeRoom) {\n\t\twriteBuffer(arrayBuffer, makeRoom)\n\t}\n}, { // Uint8Array\n\tgetTag(typedArray) {\n\t\tif (typedArray.constructor === Uint8Array) {\n\t\t\tif (this.tagUint8Array || hasNodeBuffer && this.tagUint8Array !== false)\n\t\t\t\treturn 64;\n\t\t} // else no tag\n\t},\n\tencode(typedArray, encode, makeRoom) {\n\t\twriteBuffer(typedArray, makeRoom)\n\t}\n},\n\ttypedArrayEncoder(68, 1),\n\ttypedArrayEncoder(69, 2),\n\ttypedArrayEncoder(70, 4),\n\ttypedArrayEncoder(71, 8),\n\ttypedArrayEncoder(72, 1),\n\ttypedArrayEncoder(77, 2),\n\ttypedArrayEncoder(78, 4),\n\ttypedArrayEncoder(79, 8),\n\ttypedArrayEncoder(85, 4),\n\ttypedArrayEncoder(86, 8),\n{\n\tencode(sharedData, encode) { // write SharedData\n\t\tlet packedValues = sharedData.packedValues || []\n\t\tlet sharedStructures = sharedData.structures || []\n\t\tif (packedValues.values.length > 0) {\n\t\t\ttarget[position++] = 0xd8 // one-byte tag\n\t\t\ttarget[position++] = 51 // tag 51 for packed shared structures https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\twriteArrayHeader(4)\n\t\t\tlet valuesArray = packedValues.values\n\t\t\tencode(valuesArray)\n\t\t\twriteArrayHeader(0) // prefixes\n\t\t\twriteArrayHeader(0) // suffixes\n\t\t\tpackedObjectMap = Object.create(sharedPackedObjectMap || null)\n\t\t\tfor (let i = 0, l = valuesArray.length; i < l; i++) {\n\t\t\t\tpackedObjectMap[valuesArray[i]] = i\n\t\t\t}\n\t\t}\n\t\tif (sharedStructures) {\n\t\t\ttargetView.setUint32(position, 0xd9dffe00)\n\t\t\tposition += 3\n\t\t\tlet definitions = sharedStructures.slice(0)\n\t\t\tdefinitions.unshift(0xe000)\n\t\t\tdefinitions.push(new Tag(sharedData.version, 0x53687264))\n\t\t\tencode(definitions)\n\t\t} else\n\t\t\tencode(new Tag(sharedData.version, 0x53687264))\n\t\t}\n\t}]\nfunction typedArrayEncoder(tag, size) {\n\tif (!isLittleEndianMachine && size > 1)\n\t\ttag -= 4 // the big endian equivalents are 4 less\n\treturn {\n\t\ttag: tag,\n\t\tencode: function writeExtBuffer(typedArray, encode) {\n\t\t\tlet length = typedArray.byteLength\n\t\t\tlet offset = typedArray.byteOffset || 0\n\t\t\tlet buffer = typedArray.buffer || typedArray\n\t\t\tencode(hasNodeBuffer ? Buffer.from(buffer, offset, length) :\n\t\t\t\tnew Uint8Array(buffer, offset, length))\n\t\t}\n\t}\n}\nfunction writeBuffer(buffer, makeRoom) {\n\tlet length = buffer.byteLength\n\tif (length < 0x18) {\n\t\ttarget[position++] = 0x40 + length\n\t} else if (length < 0x100) {\n\t\ttarget[position++] = 0x58\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\ttarget[position++] = 0x59\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\ttarget[position++] = 0x5a\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n\tif (position + length >= target.length) {\n\t\tmakeRoom(position + length)\n\t}\n\t// if it is already a typed array (has an ArrayBuffer), use that, but if it is an ArrayBuffer itself,\n\t// must wrap it to set it.\n\ttarget.set(buffer.buffer ? buffer : new Uint8Array(buffer), position)\n\tposition += length\n}\n\nfunction insertIds(serialized, idsToInsert) {\n\t// insert the ids that need to be referenced for structured clones\n\tlet nextId\n\tlet distanceToMove = idsToInsert.length * 2\n\tlet lastEnd = serialized.length - distanceToMove\n\tidsToInsert.sort((a, b) => a.offset > b.offset ? 1 : -1)\n\tfor (let id = 0; id < idsToInsert.length; id++) {\n\t\tlet referee = idsToInsert[id]\n\t\treferee.id = id\n\t\tfor (let position of referee.references) {\n\t\t\tserialized[position++] = id >> 8\n\t\t\tserialized[position] = id & 0xff\n\t\t}\n\t}\n\twhile (nextId = idsToInsert.pop()) {\n\t\tlet offset = nextId.offset\n\t\tserialized.copyWithin(offset + distanceToMove, offset, lastEnd)\n\t\tdistanceToMove -= 2\n\t\tlet position = offset + distanceToMove\n\t\tserialized[position++] = 0xd8\n\t\tserialized[position++] = 28 // http://cbor.schmorp.de/value-sharing\n\t\tlastEnd = offset\n\t}\n\treturn serialized\n}\nfunction writeBundles(start, encode) {\n\ttargetView.setUint32(bundledStrings.position + start, position - bundledStrings.position - start + 1) // the offset to bundle\n\tlet writeStrings = bundledStrings\n\tbundledStrings = null\n\tencode(writeStrings[0])\n\tencode(writeStrings[1])\n}\n\nexport function addExtension(extension) {\n\tif (extension.Class) {\n\t\tif (!extension.encode)\n\t\t\tthrow new Error('Extension has no encode function')\n\t\textensionClasses.unshift(extension.Class)\n\t\textensions.unshift(extension)\n\t}\n\tdecodeAddExtension(extension)\n}\nlet defaultEncoder = new Encoder({ useRecords: false })\nexport const encode = defaultEncoder.encode\nexport const encodeAsIterable = defaultEncoder.encodeAsIterable\nexport const encodeAsAsyncIterable = defaultEncoder.encodeAsAsyncIterable\nexport { FLOAT32_OPTIONS } from './decode.js'\nimport { FLOAT32_OPTIONS } from './decode.js'\nexport const { NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT } = FLOAT32_OPTIONS\nexport const REUSE_BUFFER_MODE = 512\nexport const RESET_BUFFER_MODE = 1024\nexport const THROW_ON_ITERABLE = 2048\n\n\n","// Support entrypoint shown in the SDK-managed critical error screen.\nconst CRITICAL_ERROR_SUPPORT_URL = \"https://dome.so/user/dome/#/ui/fax2xpwj65000wjpausr\";\n// Label for the support CTA rendered with the critical error.\nconst CRITICAL_ERROR_SUPPORT_LABEL = \"Chat with us\";\n// Inline styles for the critical error page.\nconst CRITICAL_ERROR_STYLES = `\n  :root {\n    color-scheme: light dark;\n    --itui-bg: #ffffff;\n    --itui-overlay-bg: #ffffff;\n    --itui-text-primary: #212121;\n    --itui-text-secondary: #757575;\n    --itui-border-color: #dee2e6;\n    --itui-brand-color: #de0f17;\n    --itui-info-color: #2196f3;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    :root {\n      --itui-bg: #121212;\n      --itui-overlay-bg: #212121;\n      --itui-text-primary: #abb5bd;\n      --itui-text-secondary: #80868c;\n      --itui-border-color: #495057;\n      --itui-brand-color: #ce4247;\n      --itui-info-color: #5197cf;\n    }\n  }\n\n  html,\n  body.dome-sdk-critical-error {\n    height: 100%;\n    min-height: 100%;\n  }\n\n  body.dome-sdk-critical-error {\n    margin: 0;\n    box-sizing: border-box;\n    display: flex;\n    justify-content: center;\n    place-items: center;\n    padding: 24px;\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\n      'Helvetica Neue', Arial, sans-serif;\n    background: var(--itui-bg);\n    color: var(--itui-text-primary);\n  }\n\n  .dome-sdk-critical-error__card {\n    width: 80%;\n    background: var(--itui-overlay-bg);\n    border: 1px solid var(--itui-border-color);\n    border-radius: 14px;\n    padding: 24px;\n    text-align: center;\n  }\n\n  .dome-sdk-critical-error__title {\n    margin: 0 0 12px 0;\n    line-height: 1.2;\n    color: var(--itui-brand-color);\n  }\n\n  .dome-sdk-critical-error__text {\n    line-height: 1.5;\n  }\n\n  .dome-sdk-critical-error__link {\n    color: var(--itui-info-color);\n    text-decoration: none;\n  }\n\n  .dome-sdk-critical-error__link:hover {\n    text-decoration: underline;\n  }\n\n  .dome-sdk-critical-error__meta {\n    font-size: 12px;\n    color: var(--itui-text-secondary);\n  }\n`;\nfunction escapeHtml(value) {\n    return value\n        .replace(/&/g, \"&amp;\")\n        .replace(/</g, \"&lt;\")\n        .replace(/>/g, \"&gt;\")\n        .replace(/\\\"/g, \"&quot;\")\n        .replace(/'/g, \"&#39;\");\n}\n// Replace app body with a self-contained critical error view.\nexport function renderCriticalErrorPage(options) {\n    if (typeof document === \"undefined\") {\n        return;\n    }\n    const { title, errorCode, lang = \"en\" } = options;\n    const safeTitle = escapeHtml(title);\n    const safeErrorCode = escapeHtml(errorCode);\n    const safeSupportLabel = escapeHtml(CRITICAL_ERROR_SUPPORT_LABEL);\n    const safeLang = escapeHtml(lang);\n    if (document.documentElement) {\n        document.documentElement.lang = safeLang;\n    }\n    let body = document.body;\n    if (!body && document.documentElement) {\n        body = document.createElement(\"body\");\n        document.documentElement.appendChild(body);\n    }\n    if (!body) {\n        return;\n    }\n    body.className = \"dome-sdk-critical-error\";\n    body.innerHTML = `\n    <style>${CRITICAL_ERROR_STYLES}</style>\n    <main class=\"dome-sdk-critical-error__card\" role=\"alert\" aria-live=\"assertive\">\n      <h3 class=\"dome-sdk-critical-error__title\">${safeTitle}</h3>\n      <p class=\"dome-sdk-critical-error__meta\">${safeErrorCode}</p>\n      <p class=\"dome-sdk-critical-error__text\">\n        Please contact support for further assistance.\n        <a class=\"dome-sdk-critical-error__link\" href=\"${CRITICAL_ERROR_SUPPORT_URL}\" target=\"_blank\" rel=\"noopener noreferrer\">${safeSupportLabel}</a>\n      </p>\n    </main>\n  `;\n}\n","import pkg from \"../package.json\";\nimport { decode, encode } from \"cbor-x\";\nimport { renderCriticalErrorPage } from \"./critical-error\";\nconst ALLOWED_DEEP_LINK_PROTOCOLS = new Set([\"dome\", \"intouchapp\"]);\nconst CONNECT_TIMEOUT_MS = 5000;\nexport var ViewerMessageType;\n(function (ViewerMessageType) {\n    ViewerMessageType[\"CONNECTION_SUCCESS\"] = \"CONNECTION_SUCCESS\";\n    ViewerMessageType[\"INIT\"] = \"INIT\";\n    ViewerMessageType[\"REQUEST_SAVE\"] = \"REQUEST_SAVE\";\n    ViewerMessageType[\"REQUEST_CLOSE\"] = \"REQUEST_CLOSE\";\n    ViewerMessageType[\"REQUEST_INITIAL_DATA\"] = \"REQUEST_INITIAL_DATA\";\n    ViewerMessageType[\"SET_DIRTY\"] = \"SET_DIRTY\";\n    ViewerMessageType[\"SEND_CLOSE\"] = \"SEND_CLOSE\";\n    ViewerMessageType[\"SEND_EXCEPTION\"] = \"SEND_EXCEPTION\";\n})(ViewerMessageType || (ViewerMessageType = {}));\nvar CommonSdkMessageType;\n(function (CommonSdkMessageType) {\n    CommonSdkMessageType[\"INIT_MESSAGE_CHANNEL\"] = \"INIT_MESSAGE_CHANNEL\";\n})(CommonSdkMessageType || (CommonSdkMessageType = {}));\nexport var CommonClientMessageType;\n(function (CommonClientMessageType) {\n    CommonClientMessageType[\"CONNECT\"] = \"CONNECT\";\n})(CommonClientMessageType || (CommonClientMessageType = {}));\nexport var ViewerClientMessageType;\n(function (ViewerClientMessageType) {\n    ViewerClientMessageType[\"REQUEST_CLOSE\"] = \"REQUEST_CLOSE\";\n    ViewerClientMessageType[\"REQUEST_SAVE\"] = \"REQUEST_SAVE\";\n    ViewerClientMessageType[\"DATA_CHANGE\"] = \"DATA_CHANGE\";\n    ViewerClientMessageType[\"SAVE_ERROR\"] = \"SAVE_ERROR\";\n    ViewerClientMessageType[\"SAVE_SUCCESS\"] = \"SAVE_SUCCESS\";\n    ViewerClientMessageType[\"INIT_ACK\"] = \"INIT_ACK\";\n})(ViewerClientMessageType || (ViewerClientMessageType = {}));\nexport var CardClientMessageType;\n(function (CardClientMessageType) {\n    CardClientMessageType[\"DATA_CHANGE\"] = \"DATA_CHANGE\";\n    // CardFS Messages\n    CardClientMessageType[\"CFS_ERROR\"] = \"CFS_ERROR\";\n    CardClientMessageType[\"CFS_WRITE_SUCCESS\"] = \"CFS_WRITE_SUCCESS\";\n    CardClientMessageType[\"CFS_FILE_DATA\"] = \"CFS_FILE_DATA\";\n    CardClientMessageType[\"CFS_WRITE_FILE_ACK\"] = \"CFS_WRITE_FILE_ACK\";\n    CardClientMessageType[\"CFS_READ_FILE_ACK\"] = \"CFS_READ_FILE_ACK\";\n    CardClientMessageType[\"CFS_DELETE_FILE_ACK\"] = \"CFS_DELETE_FILE_ACK\";\n    CardClientMessageType[\"CFS_LIST_FILES_ACK\"] = \"CFS_LIST_FILES_ACK\";\n    CardClientMessageType[\"INIT_ACK\"] = \"INIT_ACK\";\n    CardClientMessageType[\"INIT_ERROR\"] = \"INIT_ERROR\";\n    CardClientMessageType[\"AF1_DATA_TOKEN_ACK\"] = \"AF1_DATA_TOKEN_ACK\";\n    CardClientMessageType[\"ERROR\"] = \"ERROR\";\n    CardClientMessageType[\"REFRESH\"] = \"REFRESH\";\n    CardClientMessageType[\"LOGGING_ENABLE\"] = \"LOGGING_ENABLE\";\n    CardClientMessageType[\"LOGGING_DISABLE\"] = \"LOGGING_DISABLE\";\n    CardClientMessageType[\"LOGGING_CLEAR\"] = \"LOGGING_CLEAR\";\n    CardClientMessageType[\"LOGGING_GET\"] = \"LOGGING_GET\";\n})(CardClientMessageType || (CardClientMessageType = {}));\nexport var CardMessageType;\n(function (CardMessageType) {\n    CardMessageType[\"APP_READY\"] = \"APP_READY\";\n    CardMessageType[\"INIT\"] = \"INIT\";\n    CardMessageType[\"CFS_READ_FILE\"] = \"CFS_READ_FILE\";\n    CardMessageType[\"CFS_WRITE_FILE\"] = \"CFS_WRITE_FILE\";\n    CardMessageType[\"CFS_DELETE_FILE\"] = \"CFS_DELETE_FILE\";\n    CardMessageType[\"CFS_LIST_FILES\"] = \"CFS_LIST_FILES\";\n    CardMessageType[\"FILE_DIRTY\"] = \"FILE_DIRTY\";\n    CardMessageType[\"OPEN_DEEPLINK\"] = \"OPEN_DEEPLINK\";\n    CardMessageType[\"AF1_DATA_TOKEN\"] = \"AF1_DATA_TOKEN\";\n    CardMessageType[\"LOGGING_GET_RET\"] = \"LOGGING_GET_RET\";\n})(CardMessageType || (CardMessageType = {}));\nexport class DomeEmbeddedAppSdk {\n    constructor() {\n        this.targetOrigin = \"*\";\n        this.isAppReady = false;\n        this.port2 = null;\n        this.runtimeHost = \"unknown\";\n        this.parentHostDetails = null;\n        this.parentCapabilities = null;\n        this.handleDeepLinkClick = (event) => {\n            if (this.runtimeHost !== \"webapp\")\n                return;\n            if (!(event.target instanceof Element))\n                return;\n            const anchor = event.target.closest(\"a[href]\");\n            if (!anchor)\n                return;\n            const href = anchor.getAttribute(\"href\") ?? \"\";\n            if (this.emitDeepLink(href)) {\n                event.preventDefault();\n            }\n        };\n        console.info(`Initializing Dome Embedded App SDK v${pkg.version}`);\n        this.detectHost();\n        this.setupDeepLinkInterception();\n    }\n    detectHost() {\n        if (typeof window.AndroidBridge !== \"undefined\") {\n            this.runtimeHost = \"android\";\n        }\n        else if (typeof window.webkit !== \"undefined\") {\n            this.runtimeHost = \"ios\";\n        }\n        else {\n            this.runtimeHost = \"webapp\";\n        }\n        console.debug(`Detected host: ${this.runtimeHost}`);\n    }\n    setupDeepLinkInterception() {\n        if (this.runtimeHost !== \"webapp\")\n            return;\n        if (typeof document === \"undefined\")\n            return;\n        document.addEventListener(\"click\", this.handleDeepLinkClick, true);\n    }\n    emitDeepLink(href) {\n        if (typeof href !== \"string\" || href.trim() === \"\") {\n            console.warn(\"emitDeepLink called without a valid href\");\n            return false;\n        }\n        const protocol = href.split(\":\")[0]?.toLowerCase();\n        if (!protocol || !ALLOWED_DEEP_LINK_PROTOCOLS.has(protocol)) {\n            return false;\n        }\n        this.sendMessage(CardMessageType.OPEN_DEEPLINK, { url: href });\n        return true;\n    }\n    updateParentContext(host, capabilities) {\n        if (!host && !capabilities) {\n            return;\n        }\n        const base = this.parentHostDetails ?? { type: this.runtimeHost };\n        const merged = {\n            ...base,\n            ...(host ?? {}),\n        };\n        if (!merged.type) {\n            merged.type = this.runtimeHost;\n        }\n        const nextCapabilities = capabilities ?? this.parentCapabilities ?? merged.capabilities;\n        if (capabilities) {\n            this.parentCapabilities = capabilities;\n        }\n        if (nextCapabilities) {\n            merged.capabilities = nextCapabilities;\n        }\n        else {\n            delete merged.capabilities;\n        }\n        this.parentHostDetails = merged;\n        this.parentCapabilities = nextCapabilities ?? null;\n        if (nextCapabilities) {\n            console.info(\"Host capabilities detected\", {\n                host_type: merged.type,\n                capabilities: nextCapabilities,\n            });\n        }\n        else {\n            console.info(\"Host capabilities not found\", {\n                hostType: merged.type,\n            });\n        }\n    }\n    getHost() {\n        return this.parentHostDetails ?? { type: this.runtimeHost };\n    }\n    sendMessage(type, data, binaryData) {\n        const message = this.buildVersionedMessage(type, data ?? null);\n        if (this.runtimeHost === \"android\") {\n            if (binaryData) {\n                const binaryPayload = this.toUint8Array(binaryData);\n                const dataWithBinary = message.data && typeof message.data === \"object\"\n                    ? { ...message.data, v: \"1.0\", data: binaryPayload }\n                    : { v: \"1.0\", data: binaryPayload };\n                const payload = this.encodeCborMessage({ ...message, v: \"1.0\", data: dataWithBinary });\n                if (this.port2) {\n                    this.port2.postMessage(payload);\n                }\n                else {\n                    window.AndroidBridge?.sendMessage(payload);\n                }\n            }\n            else {\n                const payload = JSON.stringify(message);\n                if (this.port2) {\n                    this.port2.postMessage(payload);\n                }\n                else {\n                    window.AndroidBridge?.sendMessage(payload);\n                }\n            }\n            console.debug(`Sent message to ${this.runtimeHost}:`, message);\n            return;\n        }\n        if (this.port2) {\n            this.port2.postMessage(message);\n            console.debug(`Sent message via message channel:`, message);\n            return;\n        }\n        switch (this.runtimeHost) {\n            case \"ios\":\n                if (window?.webkit?.messageHandlers) {\n                    window.webkit?.messageHandlers.appHandler.postMessage(JSON.stringify(message));\n                }\n                else {\n                    console.error(\"webkit.messageHandlers not found\");\n                }\n                break;\n            case \"webapp\":\n                console.error(\"Web connection is not established.\");\n                break;\n            default:\n                console.error(\"Unsupported host, cannot send message.\");\n                break;\n        }\n        console.debug(`Sent message to ${this.runtimeHost}:`, message);\n    }\n    sendAppInit() {\n        if (!this.isAppReady) {\n            this.isAppReady = true;\n            this.sendMessage(ViewerMessageType.INIT, { sdk: { ver: pkg.version } });\n        }\n    }\n    safeInvoke(eventName, handlerObj, data) {\n        const handler = handlerObj?.[eventName];\n        if (typeof handler === \"function\") {\n            handler(data);\n        }\n        else {\n            console.warn(`Handler for '${String(eventName)}' is not defined.`);\n        }\n    }\n    setupParentConnection() {\n        return new Promise((resolve, reject) => {\n            switch (this.runtimeHost) {\n                case \"android\":\n                    window.receiveFromAndroid = (message) => {\n                        console.debug(\"Message received from Android:\", message);\n                        let payload = message;\n                        if (payload instanceof ArrayBuffer || ArrayBuffer.isView(payload)) {\n                            const decoded = this.decodeCborBuffer(payload);\n                            if (!decoded) {\n                                return;\n                            }\n                            payload = decoded;\n                        }\n                        const { type, data } = payload || {};\n                        if (!type)\n                            return;\n                        this.handleMessage(type, data);\n                    };\n                    let resolved = false;\n                    let connectTimeout;\n                    const resolveOnce = () => {\n                        if (resolved)\n                            return;\n                        resolved = true;\n                        if (connectTimeout) {\n                            clearTimeout(connectTimeout);\n                            connectTimeout = undefined;\n                        }\n                        if (this.runtimeHost === \"android\") {\n                            this.sendMessage(ViewerMessageType.CONNECTION_SUCCESS);\n                        }\n                        console.debug(\"Message channel connect resolved; proceeding with INIT\");\n                        resolve();\n                    };\n                    this.setupMessageChannelListener(resolveOnce);\n                    window.AndroidBridge?.sendMessage(JSON.stringify(this.buildVersionedMessage(CommonSdkMessageType.INIT_MESSAGE_CHANNEL, { sdk: { ver: pkg.version } })));\n                    console.debug(\"Sent INIT_MESSAGE_CHANNEL to Android bridge\");\n                    connectTimeout = setTimeout(() => {\n                        if (resolved)\n                            return;\n                        resolved = true;\n                        console.error(\"Android message channel CONNECT not received within timeout. Rendering critical error UI.\");\n                        try {\n                            renderCriticalErrorPage({\n                                title: \"Initialization Error\",\n                                errorCode: \"MESSAGE_CHANNEL_CONNECT_TIMEOUT\",\n                            });\n                        }\n                        catch (error) {\n                            console.error(\"Failed to render critical error UI.\", error);\n                        }\n                        reject(new Error(\"Android message channel initialization timed out.\"));\n                    }, CONNECT_TIMEOUT_MS);\n                    break;\n                case \"ios\":\n                    window.receiveFromIOS = (message) => {\n                        console.debug(\"Message received from iOS:\", message);\n                        this.handleMessage(message.type, message.data);\n                    };\n                    resolve();\n                    break;\n                case \"webapp\":\n                    if (this.port2) {\n                        console.warn(\"Connection already established. Skipping reinitialization.\");\n                        resolve();\n                        return;\n                    }\n                    let resolvedWebConnect = false;\n                    let webConnectTimeout;\n                    const resolveWebConnect = () => {\n                        if (resolvedWebConnect)\n                            return;\n                        resolvedWebConnect = true;\n                        if (webConnectTimeout) {\n                            clearTimeout(webConnectTimeout);\n                            webConnectTimeout = undefined;\n                        }\n                        this.notifyConnectionSuccess();\n                        resolve();\n                    };\n                    this.setupMessageChannelListener(resolveWebConnect);\n                    if (window.parent) {\n                        window.parent.postMessage({ type: CommonSdkMessageType.INIT_MESSAGE_CHANNEL, data: { sdk: { ver: pkg.version } } }, this.targetOrigin);\n                    }\n                    else {\n                        console.error(\"Parent window not available to initialize message channel.\");\n                    }\n                    webConnectTimeout = setTimeout(() => {\n                        if (resolvedWebConnect)\n                            return;\n                        resolvedWebConnect = true;\n                        console.error(\"Web message channel CONNECT not received within timeout. Rendering critical error UI.\");\n                        try {\n                            renderCriticalErrorPage({\n                                title: \"Initialization Error\",\n                                errorCode: \"MESSAGE_CHANNEL_CONNECT_TIMEOUT\",\n                            });\n                        }\n                        catch (error) {\n                            console.error(\"Failed to render critical error UI.\", error);\n                        }\n                        reject(new Error(\"Web message channel initialization timed out.\"));\n                    }, CONNECT_TIMEOUT_MS);\n                    break;\n                default:\n                    console.error(\"Unknown host.\");\n                    reject(\"Unknown host\");\n            }\n        });\n    }\n    setupMessageChannelListener(onConnect) {\n        if (typeof window === \"undefined\")\n            return;\n        const handleMessage = (event) => {\n            let payload = event.data;\n            if (typeof payload === \"string\") {\n                try {\n                    payload = JSON.parse(payload);\n                }\n                catch {\n                    // Keep raw string payload.\n                }\n            }\n            const type = payload?.type ?? payload;\n            if (type !== CommonClientMessageType.CONNECT) {\n                return;\n            }\n            console.debug(\"Message channel CONNECT received\", payload);\n            if (!event.ports || event.ports.length === 0) {\n                console.warn(\"Message channel CONNECT missing ports\");\n                return;\n            }\n            this.port2 = event.ports[0];\n            this.port2.onmessage = (e) => this.handlePortMessage(e);\n            console.debug(\"Message channel port connected\");\n            window.removeEventListener(\"message\", handleMessage);\n            onConnect?.();\n        };\n        window.addEventListener(\"message\", handleMessage);\n    }\n    notifyConnectionSuccess() {\n        this.sendMessage(ViewerMessageType.CONNECTION_SUCCESS);\n    }\n    handlePortMessage(event) {\n        console.debug(\"received message event from port\", event);\n        let payload = event.data;\n        if (payload instanceof ArrayBuffer || ArrayBuffer.isView(payload)) {\n            const decoded = this.decodeCborBuffer(payload);\n            if (!decoded) {\n                return;\n            }\n            payload = decoded;\n        }\n        else if (typeof payload === \"string\") {\n            try {\n                payload = JSON.parse(payload);\n            }\n            catch {\n                return;\n            }\n        }\n        const { type, data } = payload || {};\n        if (!type)\n            return;\n        console.debug(`Handling port message event. type: ${type}, data: ${data}`);\n        this.handleMessage(type, data);\n    }\n    handleMessage(type, data) {\n        throw new Error(\"Subclasses must implement handleMessage.\");\n    }\n    decodeCborBuffer(buffer) {\n        let payload;\n        try {\n            // CBOR decode expects Uint8Array input.\n            payload = decode(this.toUint8Array(buffer));\n        }\n        catch {\n            return null;\n        }\n        if (payload && typeof payload === \"object\" && \"data\" in payload) {\n            const payloadData = payload.data;\n            if (payloadData && typeof payloadData === \"object\" && \"data\" in payloadData) {\n                const nestedPayload = payloadData;\n                const rawNestedData = nestedPayload.data;\n                if (typeof nestedPayload.object === \"string\") {\n                    try {\n                        nestedPayload.object = JSON.parse(nestedPayload.object);\n                    }\n                    catch {\n                        // Keep original string if parsing fails.\n                    }\n                }\n                const nestedBinary = this.normalizeBinaryPayload(rawNestedData);\n                if (nestedBinary) {\n                    payload.data = { ...nestedPayload, data: nestedBinary };\n                }\n                else if (typeof rawNestedData === \"string\") {\n                    try {\n                        payload.data = { ...nestedPayload, data: JSON.parse(rawNestedData) };\n                    }\n                    catch {\n                        payload.data = nestedPayload;\n                    }\n                }\n            }\n            else {\n                const normalized = this.normalizeBinaryPayload(payloadData);\n                if (normalized) {\n                    payload.data = normalized;\n                }\n            }\n        }\n        return payload;\n    }\n    encodeCborMessage(payload) {\n        const encoded = encode(payload);\n        // Ensure we always return a plain ArrayBuffer.\n        if (encoded.buffer instanceof ArrayBuffer\n            && encoded.byteOffset === 0\n            && encoded.byteLength === encoded.buffer.byteLength) {\n            return encoded.buffer;\n        }\n        return Uint8Array.prototype.slice.call(encoded).buffer;\n    }\n    toUint8Array(binaryData) {\n        // Normalize incoming binary data to a Uint8Array for CBOR encoding.\n        if (binaryData instanceof Uint8Array) {\n            return binaryData;\n        }\n        if (binaryData instanceof ArrayBuffer) {\n            return new Uint8Array(binaryData);\n        }\n        return new Uint8Array(binaryData.buffer, binaryData.byteOffset, binaryData.byteLength);\n    }\n    normalizeBinaryPayload(value) {\n        // Decode CBOR byte strings to the ArrayBuffer shape used by SDK consumers.\n        if (value instanceof ArrayBuffer) {\n            return value;\n        }\n        if (value instanceof Uint8Array) {\n            return this.copyBufferView(value.buffer, value.byteOffset, value.byteLength);\n        }\n        if (ArrayBuffer.isView(value)) {\n            const view = value;\n            return this.copyBufferView(view.buffer, view.byteOffset, view.byteLength);\n        }\n        return null;\n    }\n    buildVersionedMessage(type, data) {\n        if (data && typeof data === \"object\" && !Array.isArray(data)) {\n            return { type, v: \"1.0\", data: { ...data, v: \"1.0\" } };\n        }\n        return { type, v: \"1.0\", data: { v: \"1.0\", data } };\n    }\n    copyBufferView(buffer, byteOffset, byteLength) {\n        // Copy views or shared buffers into an ArrayBuffer.\n        if (buffer instanceof ArrayBuffer && byteOffset === 0 && byteLength === buffer.byteLength) {\n            return buffer;\n        }\n        return new Uint8Array(buffer, byteOffset, byteLength).slice().buffer;\n    }\n}\n","/**\n * Permission codes available to cards.\n */\nexport var CardPermission;\n(function (CardPermission) {\n    CardPermission[\"READ\"] = \"r\";\n    CardPermission[\"WRITE\"] = \"w\";\n    CardPermission[\"FORWARD\"] = \"f\";\n    CardPermission[\"SHARE\"] = \"s\";\n    CardPermission[\"DOWNLOAD\"] = \"d\";\n})(CardPermission || (CardPermission = {}));\n/**\n * Convenience alias for permission enum.\n */\nexport const cardPermission = CardPermission;\nexport var CardFsFileType;\n(function (CardFsFileType) {\n    CardFsFileType[\"TEXT\"] = \"text\";\n    CardFsFileType[\"JSON\"] = \"json\";\n    CardFsFileType[\"BINARY\"] = \"binary\";\n})(CardFsFileType || (CardFsFileType = {}));\n/**\n * CardFS error codes.\n */\nexport var CardFsErrorCode;\n(function (CardFsErrorCode) {\n    CardFsErrorCode[\"NO_INTERNET\"] = \"NO_INTERNET\";\n    CardFsErrorCode[\"NO_PERMISSION\"] = \"NO_PERMISSION\";\n    CardFsErrorCode[\"NOT_FOUND\"] = \"NOT_FOUND\";\n    CardFsErrorCode[\"SERVER_ERROR\"] = \"SERVER_ERROR\";\n    CardFsErrorCode[\"TIMEOUT\"] = \"TIMEOUT\";\n    CardFsErrorCode[\"INVALID_REQUEST\"] = \"INVALID_REQUEST\";\n    CardFsErrorCode[\"UNKNOWN\"] = \"UNKNOWN\";\n})(CardFsErrorCode || (CardFsErrorCode = {}));\n","/**\n * Helper function to generate a unique requestId (UUID).\n * This uses the browser's crypto API for random UUID generation.\n */\nexport function generateUUID() {\n    // If in a browser environment with crypto support (modern browsers)\n    if (typeof window !== 'undefined' && window.crypto && window.crypto.randomUUID) {\n        return window.crypto.randomUUID();\n    }\n    // Fallback for non-browser environments (e.g., Node.js)\n    if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n        return crypto.randomUUID();\n    }\n    // Fallback for environments without crypto support\n    throw new Error('UUID generation is not supported in this environment');\n}\n/**\n * Helper function to get username from user object\n * @param nameObj the user object\n */\nexport function getNameString(nameObj) {\n    const { prefix = '', given = '', middle = '', family = '', suffix = '' } = nameObj || {};\n    const fullname = [prefix, given, middle, family, suffix].filter(namePart => namePart).join(' ');\n    return fullname.trim();\n}\n/**\n * Helper function to decode an ArrayBuffer payload into a UTF-8 string.\n * @param data the array data to decode\n */\nexport function uint8ArrayToUtf8String(data) {\n    if (typeof TextDecoder !== 'undefined') {\n        return new TextDecoder().decode(data);\n    }\n    let out = '';\n    for (let i = 0; i < data.length; i++) {\n        out += String.fromCharCode(data[i]);\n    }\n    return out;\n}\n/**\n * Helper function to decode a CardKeyBlob v1 payload.\n * @param blob the v1 key blob payload\n */\nexport function decodeCardKeyBlobV1(blob) {\n    const { seed, obf } = blob;\n    const out = new Uint8Array(obf.length);\n    for (let i = 0; i < obf.length; i++) {\n        out[i] = obf[i] ^ ((seed + i * 17) & 0xff);\n    }\n    return out;\n}\n","import { DomeEmbeddedAppSdk, ViewerMessageType, ViewerClientMessageType } from \"./dome-sdk\";\nimport { generateUUID } from \"./utils\";\nexport class ViewerSdk extends DomeEmbeddedAppSdk {\n    constructor() {\n        super();\n        this.handler = null;\n        this.pendingRequests = new Map();\n        this.pendingInitAck = null;\n    }\n    static init(handler) {\n        console.debug(\"init called\", handler && \"with handler\");\n        if (ViewerSdk.initialized) {\n            console.warn(\"ViewerSdk is already initialized. Skipping initialization.\");\n            return ViewerSdk.instance;\n        }\n        if (!ViewerSdk.instance) {\n            ViewerSdk.instance = new ViewerSdk();\n            ViewerSdk.instance\n                .setupParentConnection()\n                .then(() => {\n                try {\n                    ViewerSdk.instance.initializeViewerSdk();\n                }\n                catch (err) {\n                    console.error(\"Error in initializeViewerSdk:\", err);\n                }\n            })\n                .catch((err) => {\n                console.error(\"init: Error setting up parent connection!\", err);\n                console.trace(\"called from:\");\n            });\n        }\n        if (handler) {\n            ViewerSdk.instance.setHandler(handler);\n        }\n        ViewerSdk.initialized = true;\n        return ViewerSdk.instance;\n    }\n    setHandler(handler) {\n        this.handler = handler;\n        if (this.pendingInitAck) {\n            console.debug(\"Processing pending INIT_ACK message after handler is set.\");\n            this.safeInvoke(\"onInitialData\", this.handler, this.pendingInitAck);\n            this.pendingInitAck = null;\n        }\n    }\n    canRead(perms) {\n        return !!perms?.includes(\"r\");\n    }\n    canWrite(perms) {\n        return !!perms?.includes(\"w\") || !!perms?.includes(\"*\");\n    }\n    initializeViewerSdk() {\n        console.debug(\"initializing viewer sdk\");\n        this.sendAppInit();\n    }\n    requestInitialData() {\n        this.sendMessage(ViewerMessageType.REQUEST_INITIAL_DATA);\n    }\n    requestSave(doc, isDataDirty) {\n        const requestId = generateUUID();\n        this.sendMessage(ViewerMessageType.REQUEST_SAVE, { doc, isDataDirty, requestId });\n        return new Promise((resolve, reject) => {\n            this.pendingRequests.set(requestId, resolve);\n            this.pendingRequests.set(requestId + \"_reject\", reject);\n            setTimeout(() => {\n                if (this.pendingRequests.has(requestId)) {\n                    this.pendingRequests.delete(requestId);\n                    this.pendingRequests.delete(requestId + \"_reject\");\n                }\n            }, 30000);\n        });\n    }\n    handleOnSave(data) {\n        const { requestId, status, message } = data;\n        const resolve = this.pendingRequests.get(requestId);\n        const reject = this.pendingRequests.get(requestId + \"_reject\");\n        if (resolve) {\n            if (status === \"error\") {\n                reject?.({ status, message });\n            }\n            else {\n                resolve({ status, message });\n            }\n            this.pendingRequests.delete(requestId);\n            this.pendingRequests.delete(requestId + \"_reject\");\n        }\n    }\n    setDirty(isDirty) {\n        this.sendMessage(ViewerMessageType.SET_DIRTY, isDirty);\n    }\n    sendClose(doc, isDataDirty) {\n        this.sendMessage(ViewerMessageType.SEND_CLOSE, { doc, isDataDirty });\n    }\n    sendException(error) {\n        this.sendMessage(ViewerMessageType.SEND_EXCEPTION, error);\n    }\n    handleMessage(type, data) {\n        console.debug(\"handleMessage called for:\", type, \"with data:\", data);\n        if (type === ViewerClientMessageType.INIT_ACK) {\n            this.updateParentContext(data?.host, data?.capabilities);\n        }\n        if (!this.handler) {\n            if (type === ViewerClientMessageType.INIT_ACK) {\n                console.warn(\"Handler not set. Storing INIT_ACK message for later processing.\");\n                this.pendingInitAck = data;\n            }\n            else {\n                console.error(\"Message handler not found for type:\", type);\n            }\n            return;\n        }\n        switch (type) {\n            case ViewerClientMessageType.INIT_ACK:\n                this.safeInvoke(\"onInitialData\", this.handler, data);\n                break;\n            case ViewerClientMessageType.DATA_CHANGE:\n                this.safeInvoke(\"onDataChange\", this.handler, data);\n                break;\n            case ViewerClientMessageType.REQUEST_CLOSE:\n                this.safeInvoke(\"onCloseRequest\", this.handler);\n                break;\n            case ViewerClientMessageType.REQUEST_SAVE:\n                this.safeInvoke(\"onSaveRequest\", this.handler);\n                break;\n            case ViewerClientMessageType.SAVE_SUCCESS:\n            case ViewerClientMessageType.SAVE_ERROR:\n                this.handleOnSave(data);\n                break;\n            default:\n                console.warn(`No handler found for message type: ${type}`);\n        }\n    }\n}\nViewerSdk.initialized = false;\n","// Provide enc / dec using Algorithm01\nexport class CryptoA01 {\n    constructor() {\n        // Initialize subtleCrypto once\n        this.subtleCrypto = window.crypto?.subtle;\n        if (!this.subtleCrypto) {\n            throw new Error('SubtleCrypto API is not available in this environment.');\n        }\n    }\n    /**\n     * Perform decryption using AES based V1 algorithm.\n     *\n     * string: the encrypted string (base64 encoded)\n     * password: the password used for encryption\n     * salt: the base64 encoded salt used\n     */\n    async decrypt(token, password, salt) {\n        try {\n            if (!token) {\n                throw new Error(\"Invalid token\");\n            }\n            const tokenBytes = this.base64UrlDecode(token);\n            // Extract token components\n            const version = tokenBytes[0];\n            if (version !== 0x80) {\n                // console.log(\"Incorrect Version: \", version);\n                throw new Error('Invalid version');\n            }\n            const timestamp = tokenBytes.slice(1, 9);\n            const iv = tokenBytes.slice(9, 25);\n            const ciphertext = tokenBytes.slice(25, -32);\n            const hmacFromToken = tokenBytes.slice(-32);\n            // Derive the key and split it into HMAC and AES keys\n            const fullKey = await this.deriveKey(password, salt);\n            const { hmacKey, aesKey } = await this.splitKey(fullKey);\n            // Compute HMAC over version + timestamp + IV + ciphertext\n            const hmacInput = tokenBytes.slice(0, -32);\n            const computedHmac = new Uint8Array(await this.subtleCrypto.sign('HMAC', hmacKey, hmacInput));\n            // Validate HMAC\n            if (!computedHmac.every((byte, i) => byte === hmacFromToken[i])) {\n                throw new Error('Invalid HMAC. Token has been tampered with!');\n            }\n            // Decrypt the ciphertext\n            const decrypted = await this.subtleCrypto.decrypt({\n                name: 'AES-CBC',\n                iv: iv,\n            }, aesKey, ciphertext);\n            // Convert decrypted data to UTF-8 string\n            const decoder = new TextDecoder();\n            return decoder.decode(decrypted);\n        }\n        catch (err) {\n            console.log(\"Error in decrypt:\", err);\n            throw err;\n        }\n    }\n    async deriveKey(password, salt, iterations = 10000) {\n        const encoder = new TextEncoder();\n        const keyMaterial = await this.subtleCrypto.importKey(\"raw\", encoder.encode(password), \"PBKDF2\", false, [\"deriveKey\"]);\n        return this.subtleCrypto.deriveKey({\n            name: \"PBKDF2\",\n            hash: \"SHA-256\",\n            salt: encoder.encode(salt),\n            iterations: iterations,\n        }, keyMaterial, { name: \"AES-CBC\", length: 256 }, true, // Allow export of the derived key (req for splitting)\n        [\"encrypt\", \"decrypt\"]);\n    }\n    // Split the full key into HMAC and AES keys\n    async splitKey(fullKey) {\n        const rawKey = new Uint8Array(await this.subtleCrypto.exportKey('raw', fullKey));\n        // Split the key into HMAC (first 16 bytes) and AES (last 16 bytes)\n        const hmacKey = await this.subtleCrypto.importKey('raw', rawKey.slice(0, 16), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign', 'verify']);\n        const aesKey = await this.subtleCrypto.importKey('raw', rawKey.slice(16), { name: 'AES-CBC' }, false, ['encrypt', 'decrypt']);\n        return { hmacKey, aesKey };\n    }\n    // Decode Base64 URL-safe strings\n    base64UrlDecode(base64) {\n        // assumes URL safe encoding that has + in place of - and _ in place of /\n        const base64String = base64.replace(/-/g, '+').replace(/_/g, '/');\n        const decodedString = atob(base64String);\n        return new Uint8Array([...decodedString].map(c => c.charCodeAt(0)));\n    }\n}\n","import pkg from \"../package.json\";\nimport { DomeEmbeddedAppSdk, CardMessageType, CardClientMessageType } from \"./dome-sdk\";\nimport { decodeCardKeyBlobV1, getNameString, uint8ArrayToUtf8String } from \"./utils\";\nimport { CryptoA01 } from \"./crypto\";\nimport { CardFsErrorCode, CardFsFileType, CardPermission } from \"./types/card-sdk.types\";\nexport { CardFsErrorCode, CardFsFileType, CardPermission, cardPermission } from \"./types/card-sdk.types\";\nconst CARD_FS_VERSION = \"1.1.0\";\nconst LOGGER_VERSION = \"1.0.0\";\nexport function getKeyFromBlobStr(blobStr) {\n    // assume json in string\n    const reactStarterDecBlob = JSON.parse(blobStr);\n    return (getKeyFromBlob(reactStarterDecBlob));\n    throw new Error(`Error getting key form blob`);\n}\nexport function getKeyFromBlob(blob) {\n    let decoded;\n    switch (blob.v) {\n        case 1:\n            decoded = decodeCardKeyBlobV1(blob);\n            break;\n        default:\n            throw new Error(`Unsupported key blob version: ${blob.v}`);\n    }\n    return uint8ArrayToUtf8String(decoded);\n}\n/**\n * IndexedDB-backed cache used for cardFS fallback implementation.\n */\nclass CardFsCache {\n    /**\n     * Scoped cache per card (and optionally per container).\n     */\n    constructor(cardIuid, containerIuid) {\n        this.cardIuid = cardIuid;\n        this.containerIuid = containerIuid;\n        this.openPromise = null;\n    }\n    /**\n     * Guard for IndexedDB availability in the runtime.\n     */\n    isSupported() {\n        return typeof indexedDB !== \"undefined\";\n    }\n    /**\n     * Open the cache database, creating/upgrading stores as needed.\n     */\n    async openDb() {\n        if (!this.isSupported())\n            return null;\n        if (!this.openPromise) {\n            this.openPromise = new Promise((resolve) => {\n                this.openWithVersion(CardFsCache.DB_VERSION, resolve);\n            });\n        }\n        return this.openPromise;\n    }\n    /**\n     * Open the DB at a specific version and ensure schema is compatible.\n     */\n    openWithVersion(version, resolve) {\n        let infoAction = \"ensure\";\n        const request = indexedDB.open(this.cardIuid, version);\n        request.onupgradeneeded = (event) => {\n            infoAction = (event.oldVersion || 0) === 0 ? \"create\" : \"ensure\";\n            this.configureStores(request.result);\n        };\n        request.onsuccess = () => {\n            const db = request.result;\n            if (!this.hasRequiredStores(db)) {\n                const nextVersion = db.version + 1;\n                db.close();\n                this.openWithVersion(nextVersion, resolve);\n                return;\n            }\n            this.updateStoresMetadata(db, infoAction === \"ensure\")\n                .catch(() => undefined)\n                .finally(() => resolve(db));\n        };\n        request.onerror = () => resolve(null);\n    }\n    /**\n     * Ensure all required object stores exist.\n     */\n    configureStores(db) {\n        if (!db.objectStoreNames.contains(CardFsCache.DATA_STORE)) {\n            db.createObjectStore(CardFsCache.DATA_STORE);\n        }\n        if (!db.objectStoreNames.contains(CardFsCache.NAME_LOOKUP_STORE)) {\n            db.createObjectStore(CardFsCache.NAME_LOOKUP_STORE);\n        }\n        if (!db.objectStoreNames.contains(CardFsCache.INFO_STORE)) {\n            db.createObjectStore(CardFsCache.INFO_STORE);\n        }\n        if (!db.objectStoreNames.contains(CardFsCache.FOLDER_CACHE_STORE)) {\n            db.createObjectStore(CardFsCache.FOLDER_CACHE_STORE);\n        }\n    }\n    /**\n     * Verify that required stores are present for this cache version.\n     */\n    hasRequiredStores(db) {\n        const stores = db.objectStoreNames;\n        return (stores.contains(CardFsCache.DATA_STORE) &&\n            stores.contains(CardFsCache.NAME_LOOKUP_STORE) &&\n            stores.contains(CardFsCache.INFO_STORE) &&\n            stores.contains(CardFsCache.FOLDER_CACHE_STORE));\n    }\n    /**\n     * Use microsecond timestamps for cache metadata.\n     */\n    static nowMicros() {\n        return Math.trunc(Date.now() * 1000);\n    }\n    /**\n     * Store schema metadata and card info into the info store.\n     */\n    updateStoresMetadata(db, preserveExistingInfoTs) {\n        return Promise.all([\n            this.ensureStoreVersion(db, CardFsCache.DATA_STORE),\n            this.ensureStoreVersion(db, CardFsCache.NAME_LOOKUP_STORE),\n            this.ensureStoreVersion(db, CardFsCache.FOLDER_CACHE_STORE),\n            this.updateCardInfo(db, preserveExistingInfoTs),\n        ]).then(() => undefined);\n    }\n    /**\n     * Stamp a store with the current cache version.\n     */\n    ensureStoreVersion(db, storeName) {\n        if (!db.objectStoreNames.contains(storeName)) {\n            return Promise.resolve();\n        }\n        return new Promise((resolve) => {\n            try {\n                const tx = db.transaction(storeName, \"readwrite\");\n                const store = tx.objectStore(storeName);\n                const finalize = () => resolve();\n                tx.oncomplete = finalize;\n                tx.onerror = finalize;\n                tx.onabort = finalize;\n                store.put(CARD_FS_VERSION, CardFsCache.STORE_VERSION_KEY);\n            }\n            catch {\n                resolve();\n            }\n        });\n    }\n    /**\n     * Cache per-card metadata, preserving initial timestamps when requested.\n     */\n    async updateCardInfo(db, preserveExistingTs) {\n        if (!db.objectStoreNames.contains(CardFsCache.INFO_STORE)) {\n            return;\n        }\n        const existingContainer = await this.readInfoValue(db, \"container_iuid\");\n        const existingTs = preserveExistingTs ? await this.readInfoValue(db, \"ts_c\") : undefined;\n        const containerValue = this.containerIuid ?? existingContainer ?? null;\n        const timestampValue = preserveExistingTs && existingTs ? existingTs : CardFsCache.nowMicros();\n        await Promise.all([\n            this.writeInfoValue(db, \"container_iuid\", containerValue),\n            this.writeInfoValue(db, \"ts_c\", timestampValue),\n        ]).catch(() => undefined);\n    }\n    /**\n     * Read a value from the info store with graceful fallbacks.\n     */\n    readInfoValue(db, key) {\n        return new Promise((resolve) => {\n            try {\n                const tx = db.transaction(CardFsCache.INFO_STORE, \"readonly\");\n                const store = tx.objectStore(CardFsCache.INFO_STORE);\n                const request = store.get(key);\n                request.onsuccess = () => resolve(request.result);\n                request.onerror = () => resolve(undefined);\n            }\n            catch {\n                resolve(undefined);\n            }\n        });\n    }\n    /**\n     * Write a value to the info store with best-effort semantics.\n     */\n    writeInfoValue(db, key, value) {\n        return new Promise((resolve) => {\n            try {\n                const tx = db.transaction(CardFsCache.INFO_STORE, \"readwrite\");\n                const store = tx.objectStore(CardFsCache.INFO_STORE);\n                const finalize = () => resolve();\n                tx.oncomplete = finalize;\n                tx.onerror = finalize;\n                tx.onabort = finalize;\n                store.put(value, key);\n            }\n            catch {\n                resolve();\n            }\n        });\n    }\n    /**\n     * Compose a cache key for object/data entries.\n     */\n    keyFor(suffix) {\n        return suffix;\n    }\n    /**\n     * Normalize folder paths to a trailing-slash format.\n     */\n    static normalizeFolderName(folderName) {\n        if (typeof folderName !== \"string\")\n            return CardFsCache.DEFAULT_FOLDER_KEY;\n        let normalized = folderName.trim();\n        if (!normalized)\n            return CardFsCache.DEFAULT_FOLDER_KEY;\n        normalized = normalized.replace(/^\\/+/, \"\");\n        if (!normalized)\n            return CardFsCache.DEFAULT_FOLDER_KEY;\n        if (!normalized.endsWith(\"/\")) {\n            normalized += \"/\";\n        }\n        return normalized || CardFsCache.DEFAULT_FOLDER_KEY;\n    }\n    /**\n     * Build the cache key for folder listing entries.\n     */\n    folderListingKey(folderName) {\n        return CardFsCache.normalizeFolderName(folderName);\n    }\n    /**\n     * Normalize file names used in cardFS lookups.\n     */\n    static normalizeName(name) {\n        if (typeof name !== \"string\")\n            return null;\n        const trimmed = name.trim();\n        return trimmed ? trimmed : null;\n    }\n    /**\n     * Store an entry in the object cache.\n     */\n    async put(key, value) {\n        const db = await this.openDb();\n        if (!db)\n            return;\n        await new Promise((resolve) => {\n            const tx = db.transaction(CardFsCache.DATA_STORE, \"readwrite\");\n            const store = tx.objectStore(CardFsCache.DATA_STORE);\n            store.put(value, key).onsuccess = () => resolve();\n            tx.oncomplete = () => resolve();\n            tx.onerror = () => resolve();\n            tx.onabort = () => resolve();\n        });\n    }\n    /**\n     * Read an entry from the object cache.\n     */\n    async get(key) {\n        const db = await this.openDb();\n        if (!db)\n            return undefined;\n        return new Promise((resolve) => {\n            const tx = db.transaction(CardFsCache.DATA_STORE, \"readonly\");\n            const store = tx.objectStore(CardFsCache.DATA_STORE);\n            const request = store.get(key);\n            request.onsuccess = () => resolve(request.result);\n            request.onerror = () => resolve(undefined);\n        });\n    }\n    /**\n     * Remove an entry from the object cache.\n     */\n    async delete(key) {\n        const db = await this.openDb();\n        if (!db)\n            return;\n        await new Promise((resolve) => {\n            const tx = db.transaction(CardFsCache.DATA_STORE, \"readwrite\");\n            const store = tx.objectStore(CardFsCache.DATA_STORE);\n            store.delete(key).onsuccess = () => resolve();\n            tx.oncomplete = () => resolve();\n            tx.onerror = () => resolve();\n            tx.onabort = () => resolve();\n        });\n    }\n    /**\n     * Hash file names to avoid storing raw names in lookup tables.\n     */\n    static async hashName(name) {\n        const cryptoRef = typeof globalThis !== 'undefined' ? globalThis.crypto : undefined;\n        if (!cryptoRef?.subtle?.digest) {\n            throw new Error('CardFS name hashing requires SubtleCrypto support');\n        }\n        const encoded = CardFsCache.encodeText(name);\n        const digest = await cryptoRef.subtle.digest('SHA-256', encoded);\n        return CardFsCache.bufferToBase64(digest);\n    }\n    /**\n     * Encode text into an ArrayBuffer for hashing.\n     */\n    static encodeText(value) {\n        if (typeof TextEncoder !== 'undefined') {\n            return new TextEncoder().encode(value).buffer;\n        }\n        const result = new Uint8Array(value.length);\n        for (let i = 0; i < value.length; i++) {\n            result[i] = value.charCodeAt(i);\n        }\n        return result.buffer;\n    }\n    /**\n     * Convert a binary digest to base64 for storage.\n     */\n    static bufferToBase64(buffer) {\n        let binary = '';\n        const bytes = new Uint8Array(buffer);\n        for (let i = 0; i < bytes.length; i++) {\n            binary += String.fromCharCode(bytes[i]);\n        }\n        return btoa(binary);\n    }\n    /**\n     * Resolve an iuid from a file name via hashed lookup.\n     */\n    async getIuidForName(name) {\n        const normalized = CardFsCache.normalizeName(name);\n        if (!normalized)\n            return undefined;\n        const db = await this.openDb();\n        if (!db)\n            return undefined;\n        const hashed = await CardFsCache.hashName(normalized);\n        return new Promise((resolve) => {\n            const tx = db.transaction(CardFsCache.NAME_LOOKUP_STORE, \"readonly\");\n            const store = tx.objectStore(CardFsCache.NAME_LOOKUP_STORE);\n            const request = store.get(hashed);\n            request.onsuccess = () => resolve(request.result);\n            request.onerror = () => resolve(undefined);\n        });\n    }\n    /**\n     * Map a file name to its iuid and remove stale reverse mappings.\n     */\n    async upsertNameLookup(name, iuid) {\n        const normalized = CardFsCache.normalizeName(name);\n        if (!normalized)\n            return;\n        const db = await this.openDb();\n        if (!db)\n            return;\n        const hashed = await CardFsCache.hashName(normalized);\n        await new Promise((resolve) => {\n            const tx = db.transaction(CardFsCache.NAME_LOOKUP_STORE, \"readwrite\");\n            const store = tx.objectStore(CardFsCache.NAME_LOOKUP_STORE);\n            store.put(iuid, hashed);\n            const cursorRequest = store.openCursor();\n            cursorRequest.onsuccess = (event) => {\n                const cursor = event.target.result;\n                if (!cursor)\n                    return;\n                if (cursor.key !== hashed && cursor.value === iuid) {\n                    cursor.delete();\n                }\n                cursor.continue();\n            };\n            tx.oncomplete = () => resolve();\n            tx.onerror = () => resolve();\n            tx.onabort = () => resolve();\n        });\n    }\n    /**\n     * Remove name-to-iuid mapping for a specific file name.\n     */\n    async deleteNameLookupByName(name) {\n        const normalized = CardFsCache.normalizeName(name);\n        if (!normalized)\n            return;\n        const db = await this.openDb();\n        if (!db)\n            return;\n        const hashed = await CardFsCache.hashName(normalized);\n        await new Promise((resolve) => {\n            const tx = db.transaction(CardFsCache.NAME_LOOKUP_STORE, \"readwrite\");\n            const store = tx.objectStore(CardFsCache.NAME_LOOKUP_STORE);\n            store.delete(hashed);\n            tx.oncomplete = () => resolve();\n            tx.onerror = () => resolve();\n            tx.onabort = () => resolve();\n        });\n    }\n    /**\n     * Remove any name lookup entries pointing at a given iuid.\n     */\n    async deleteNameLookupByIuid(iuid) {\n        if (!iuid)\n            return;\n        const db = await this.openDb();\n        if (!db)\n            return;\n        await new Promise((resolve) => {\n            const tx = db.transaction(CardFsCache.NAME_LOOKUP_STORE, \"readwrite\");\n            const store = tx.objectStore(CardFsCache.NAME_LOOKUP_STORE);\n            const request = store.openCursor();\n            request.onsuccess = (event) => {\n                const cursor = event.target.result;\n                if (!cursor)\n                    return;\n                if (cursor.value === iuid) {\n                    cursor.delete();\n                }\n                cursor.continue();\n            };\n            tx.oncomplete = () => resolve();\n            tx.onerror = () => resolve();\n            tx.onabort = () => resolve();\n        });\n    }\n    /**\n     * Estimate the byte size of cached payloads.\n     */\n    static estimateSize(data) {\n        if (data == null)\n            return 0;\n        if (typeof Blob !== \"undefined\" && data instanceof Blob)\n            return data.size;\n        if (data instanceof ArrayBuffer)\n            return data.byteLength;\n        if (ArrayBuffer.isView(data))\n            return data.byteLength;\n        if (typeof data === \"string\")\n            return new Blob([data]).size;\n        try {\n            return new Blob([JSON.stringify(data)]).size;\n        }\n        catch {\n            return 0;\n        }\n    }\n    /**\n     * Persist a document + optional data payload into the cache.\n     */\n    async cacheDocument(doc, data) {\n        if (!doc?.iuid)\n            return;\n        await this.put(this.keyFor(`${doc.iuid}_object`), doc);\n        const normalizedName = CardFsCache.normalizeName(doc.name);\n        if (normalizedName) {\n            await this.upsertNameLookup(normalizedName, doc.iuid);\n        }\n        if (data === undefined) {\n            await this.delete(this.keyFor(`${doc.iuid}_data`));\n            return;\n        }\n        const size = CardFsCache.estimateSize(data);\n        if (size <= CardFsCache.MAX_DATA_BYTES) {\n            await this.put(this.keyFor(`${doc.iuid}_data`), data);\n        }\n        else {\n            await this.delete(this.keyFor(`${doc.iuid}_data`));\n        }\n    }\n    /**\n     * Retrieve cached document data by filename.\n     */\n    async getByName(name) {\n        const normalizedName = CardFsCache.normalizeName(name);\n        if (!normalizedName)\n            return null;\n        const iuid = await this.getIuidForName(normalizedName);\n        if (!iuid)\n            return null;\n        const object = await this.get(this.keyFor(`${iuid}_object`));\n        if (!object)\n            return null;\n        const data = await this.get(this.keyFor(`${iuid}_data`));\n        return { iuid, object, data };\n    }\n    /**\n     * Retrieve cached document data by iuid.\n     */\n    async getByIuid(iuid) {\n        if (!iuid)\n            return null;\n        const object = await this.get(this.keyFor(`${iuid}_object`));\n        if (!object)\n            return null;\n        const data = await this.get(this.keyFor(`${iuid}_data`));\n        return { iuid, object, data };\n    }\n    /**\n     * Remove cached entries using a document name.\n     */\n    async deleteByName(name) {\n        const entry = await this.getByName(name);\n        await this.deleteNameLookupByName(name);\n        if (!entry)\n            return;\n        await this.delete(this.keyFor(`${entry.iuid}_object`));\n        await this.delete(this.keyFor(`${entry.iuid}_data`));\n    }\n    /**\n     * Remove cached entries using a document iuid.\n     */\n    async deleteByIuid(iuid, name) {\n        if (name) {\n            await this.deleteNameLookupByName(name);\n        }\n        await this.deleteNameLookupByIuid(iuid);\n        await this.delete(this.keyFor(`${iuid}_object`));\n        await this.delete(this.keyFor(`${iuid}_data`));\n    }\n    /**\n     * Cache a folder listing snapshot for the given folder.\n     */\n    async cacheFolderListing(folderName, entry) {\n        const db = await this.openDb();\n        if (!db)\n            return;\n        const key = this.folderListingKey(folderName ?? entry.folder_name);\n        const baseData = typeof entry.data === \"object\" && entry.data !== null\n            ? entry.data\n            : (Array.isArray(entry.documents) ? entry.documents : {});\n        const data = Array.isArray(baseData) ? { results: [...baseData] } : { ...baseData };\n        const payload = {\n            folder_name: key,\n            folder_iuid: entry.folder_iuid ?? null,\n            card_iuid: this.cardIuid,\n            time_last_fetch: Date.now(),\n            data,\n            last_index: entry.last_index ?? null,\n            last_page: entry.last_page ?? null,\n        };\n        await new Promise((resolve) => {\n            const tx = db.transaction(CardFsCache.FOLDER_CACHE_STORE, \"readwrite\");\n            const store = tx.objectStore(CardFsCache.FOLDER_CACHE_STORE);\n            store.put(payload, key).onsuccess = () => resolve();\n            tx.oncomplete = () => resolve();\n            tx.onerror = () => resolve();\n            tx.onabort = () => resolve();\n        });\n    }\n    /**\n     * Read a cached folder listing snapshot.\n     */\n    async getFolderListing(folderName) {\n        const db = await this.openDb();\n        if (!db)\n            return null;\n        const key = this.folderListingKey(folderName);\n        return new Promise((resolve) => {\n            const tx = db.transaction(CardFsCache.FOLDER_CACHE_STORE, \"readonly\");\n            const store = tx.objectStore(CardFsCache.FOLDER_CACHE_STORE);\n            const request = store.get(key);\n            request.onsuccess = () => resolve(request.result);\n            request.onerror = () => resolve(null);\n        });\n    }\n}\nCardFsCache.DB_VERSION = 3;\nCardFsCache.DATA_STORE = \"cardfs\";\nCardFsCache.NAME_LOOKUP_STORE = \"cardfs_name_iuid_lookup\";\nCardFsCache.INFO_STORE = \"info\";\nCardFsCache.FOLDER_CACHE_STORE = \"folder_cache\";\nCardFsCache.STORE_VERSION_KEY = \"ver\";\nCardFsCache.DEFAULT_FOLDER_KEY = \"/\";\nCardFsCache.MAX_DATA_BYTES = 5 * 1024 * 1024;\n/**\n * Use CardSdk to create webapp cards\n */\nexport class CardSdk extends DomeEmbeddedAppSdk {\n    buildCardFsMessagePayload(target, extra) {\n        return {\n            ...(target.name ? { name: target.name } : {}),\n            ...(target.iuid ? { iuid: target.iuid } : {}),\n            ...(extra ?? {}),\n        };\n    }\n    formatFolderPath(folderName) {\n        if (typeof folderName !== \"string\") {\n            return undefined;\n        }\n        let normalized = folderName.trim();\n        if (!normalized) {\n            return undefined;\n        }\n        normalized = normalized.replace(/^\\/+/, \"\");\n        if (!normalized) {\n            return undefined;\n        }\n        if (!normalized.endsWith(\"/\")) {\n            normalized += \"/\";\n        }\n        return normalized;\n    }\n    assertValidReadHandler(handler) {\n        if (!handler || typeof handler.next !== \"function\") {\n            throw new Error(\"cardFS.read requires a handler with a next() function\");\n        }\n        return handler;\n    }\n    assertValidListHandler(handler) {\n        if (!handler || typeof handler.next !== \"function\") {\n            throw new Error(\"cardFS.list requires a handler with a next() function\");\n        }\n        return handler;\n    }\n    invokeReadHandlerNext(handler, payload) {\n        try {\n            handler.next(payload);\n        }\n        catch (err) {\n            console.error(\"cardFS.read handler next() threw\", err);\n        }\n    }\n    invokeReadHandlerError(handler, error) {\n        if (!handler.error)\n            return;\n        try {\n            handler.error(error);\n        }\n        catch (err) {\n            console.error(\"cardFS.read handler error() threw\", err);\n        }\n    }\n    sanitizeReadData(data, contextLabel) {\n        if (data == null) {\n            return { value: data, stripped: false };\n        }\n        try {\n            const size = CardFsCache.estimateSize(data);\n            if (size > CardFsCache.MAX_DATA_BYTES) {\n                const label = contextLabel ? ` for ${contextLabel}` : \"\";\n                console.warn(`cardFS.read payload data exceeded ${CardFsCache.MAX_DATA_BYTES} bytes${label}; omitting data`);\n                return { value: undefined, stripped: true };\n            }\n        }\n        catch (err) {\n            console.warn(\"cardFS.read payload size estimation failed\", err);\n        }\n        return { value: data, stripped: false };\n    }\n    normalizeReadData(data, mimeType, fileType) {\n        if (data == null) {\n            return data;\n        }\n        const normalizedMimeType = typeof mimeType === \"string\" ? mimeType.toLowerCase() : \"\";\n        const normalizedFileType = typeof fileType === \"string\" ? fileType.toLowerCase() : \"\";\n        const isJson = normalizedMimeType.includes(\"application/json\") || normalizedMimeType.endsWith(\"+json\") || normalizedFileType === CardFsFileType.JSON;\n        const isText = normalizedMimeType.startsWith(\"text/\") || normalizedFileType === CardFsFileType.TEXT;\n        // Android will deliver CFS_FILE_DATA as ArrayBuffer; decode to text/JSON based on mimetype.\n        const isBinaryData = data instanceof ArrayBuffer || ArrayBuffer.isView(data);\n        // Convert raw bytes into a UTF-8 string when the mimetype indicates text/JSON.\n        const decodeBinaryToText = () => {\n            const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n            return new TextDecoder().decode(bytes);\n        };\n        // JSON payloads may arrive as objects, JSON strings, or raw bytes.\n        if (isJson) {\n            if (data && typeof data === \"object\" && !(data instanceof ArrayBuffer) && !ArrayBuffer.isView(data)) {\n                return data;\n            }\n            if (isBinaryData) {\n                try {\n                    return JSON.parse(decodeBinaryToText());\n                }\n                catch {\n                    return decodeBinaryToText();\n                }\n            }\n            if (typeof data === \"string\") {\n                try {\n                    return JSON.parse(data);\n                }\n                catch {\n                    return data;\n                }\n            }\n            return data;\n        }\n        // Text payloads may arrive as plain strings or raw bytes from Android.\n        if (isText) {\n            const textValue = isBinaryData ? decodeBinaryToText() : data;\n            if (typeof textValue === \"string\") {\n                try {\n                    return JSON.parse(textValue);\n                }\n                catch {\n                    return textValue;\n                }\n            }\n            return textValue;\n        }\n        return data;\n    }\n    encodeTextPayload(data) {\n        if (typeof data === \"string\")\n            return data;\n        if (data == null)\n            return \"\";\n        if (typeof data === \"object\") {\n            try {\n                return JSON.stringify(data);\n            }\n            catch {\n                return String(data);\n            }\n        }\n        return String(data);\n    }\n    encodeJsonPayload(data) {\n        if (typeof data === \"string\")\n            return data;\n        try {\n            return JSON.stringify(data ?? {});\n        }\n        catch {\n            return String(data ?? \"\");\n        }\n    }\n    normalizeWriteData(fileData, fileType) {\n        if (fileType === CardFsFileType.TEXT) {\n            return this.encodeTextPayload(fileData);\n        }\n        if (fileType === CardFsFileType.BINARY) {\n            return fileData;\n        }\n        return this.encodeJsonPayload(fileData);\n    }\n    base64EncodeBinaryData(fileData) {\n        const bytes = fileData instanceof ArrayBuffer\n            ? new Uint8Array(fileData)\n            : new Uint8Array(fileData.buffer, fileData.byteOffset, fileData.byteLength);\n        let binary = \"\";\n        for (let index = 0; index < bytes.length; index += 1) {\n            binary += String.fromCharCode(bytes[index]);\n        }\n        return btoa(binary);\n    }\n    getWriteDataSizeBytes(fileData) {\n        if (fileData == null) {\n            return 0;\n        }\n        if (typeof fileData === \"string\") {\n            return new TextEncoder().encode(fileData).length;\n        }\n        if (fileData instanceof ArrayBuffer) {\n            return fileData.byteLength;\n        }\n        if (ArrayBuffer.isView(fileData)) {\n            return fileData.byteLength;\n        }\n        if (typeof Blob !== \"undefined\" && fileData instanceof Blob) {\n            return fileData.size;\n        }\n        return 0;\n    }\n    getCardIuid() {\n        return this.dataStore?.iuid || null;\n    }\n    ensureCardFsCache() {\n        if (!this.shouldUseCardFsFallback()) {\n            return null;\n        }\n        if (!this.cardFsCache) {\n            const cardIuid = this.getCardIuid();\n            if (cardIuid) {\n                this.cardFsCache = new CardFsCache(cardIuid, this.containerIuid);\n            }\n        }\n        return this.cardFsCache;\n    }\n    supportsParentCardFs() {\n        const cardFs = this.parentCapabilities?.card_fs;\n        if (!cardFs?.ver)\n            return false;\n        return cardFs.ver === CARD_FS_VERSION;\n    }\n    shouldUseCardFsFallback() {\n        return !this.supportsParentCardFs();\n    }\n    constructor() {\n        super();\n        this.handler = null; // Handler instance for client messages\n        this.accessToken = '';\n        this.devMode = false;\n        this.permission = null;\n        this.userRole = null;\n        // Track in-flight FS operations by messageId so we can settle promises on callback\n        this.fsReadRequests = new Map();\n        this.fsWriteRequests = new Map();\n        this.fsListRequests = new Map();\n        this.cardFsCache = null;\n        this.pendingAcks = new Map();\n        this.consoleCaptureInstalled = false;\n        this.consoleCaptureEnabled = false;\n        this.consoleCaptureMinLevel = null;\n        this.consoleLogBuffer = new Array(CardSdk.MAX_CONSOLE_LOG_ENTRIES).fill(null);\n        this.consoleLogWriteIndex = 0;\n        this.consoleLogSize = 0;\n        // Sets up the message listener for cards to receive messages from the parent.\n        this.handleMessage = (type, data) => {\n            if (type === CardClientMessageType.INIT_ACK) {\n                this.updateParentContext(data?.host, data?.capabilities);\n            }\n            if (type === CardClientMessageType.CFS_ERROR) {\n                const responseId = data?.messageId;\n                const error = this.createCardFsError(data, \"Unknown cardFS error\");\n                if (responseId && this.pendingAcks.has(responseId)) {\n                    const pending = this.pendingAcks.get(responseId);\n                    clearTimeout(pending.timeout);\n                    this.pendingAcks.delete(responseId);\n                    pending.reject(error);\n                }\n                if (responseId) {\n                    if (this.fsReadRequests.has(responseId)) {\n                        // cardFS read failure routed by messageId\n                        this.failFsReadRequest(responseId, error);\n                        return;\n                    }\n                    if (this.fsWriteRequests.has(responseId)) {\n                        // cardFS write/list/delete failure routed by messageId\n                        this.failFsWriteRequest(responseId, error);\n                        return;\n                    }\n                    if (this.fsListRequests.has(responseId)) {\n                        this.failFsListRequest(responseId, error);\n                        return;\n                    }\n                }\n                console.warn(\"CardSdk: CFS_ERROR received but no matching fs request\", data?.messageId ?? data?.name);\n                return;\n            }\n            this.handleFsAckMessage(type, data);\n            const messageId = data?.messageId;\n            if (type === CardClientMessageType.CFS_LIST_FILES_ACK) {\n                if (messageId && this.fsListRequests.has(messageId)) {\n                    this.handleFsListDataMessage(messageId, data);\n                }\n                else {\n                    console.warn(\"CardSdk: CFS_LIST_FILES_ACK received but no matching fsList request\", data?.messageId ?? data?.name);\n                }\n                return;\n            }\n            // Check for ACK response with messageId\n            if (messageId && this.pendingAcks.has(messageId)) {\n                const pending = this.pendingAcks.get(messageId);\n                if (pending.ackType === type) {\n                    clearTimeout(pending.timeout);\n                    this.pendingAcks.delete(messageId);\n                    pending.resolve(data);\n                    return;\n                }\n            }\n            if (!messageId && this.resolvePendingAckByType(type, data)) {\n                return;\n            }\n            if (!this.handler) {\n                throw new Error(\"Message handler not found!\");\n            }\n            switch (type) {\n                case CardClientMessageType.INIT_ACK:\n                    // Parent sent INIT_ACK\n                    console.debug(\"CardSdk: INIT_ACK received\");\n                    this.applyLoggingConfig(data?.logging);\n                    this.dataStore.kw1 = data.key_wa1;\n                    this.dataStore.iuid = data.iuid;\n                    if (typeof data?.dev_mode === \"boolean\") {\n                        this.devMode = data.dev_mode;\n                        this.dataStore.dev_mode = data.dev_mode;\n                    }\n                    if (data.iuid) {\n                        if (this.shouldUseCardFsFallback()) {\n                            this.cardFsCache = new CardFsCache(data.iuid, this.containerIuid);\n                        }\n                        else {\n                            this.cardFsCache = null;\n                        }\n                    }\n                    else if (!this.shouldUseCardFsFallback()) {\n                        this.cardFsCache = null;\n                    }\n                    try {\n                        this.cryptoA01.decrypt(this.dataStore.denc, data.key_wa1 + this.dataStore.kw2, data.iuid)\n                            .then((decData) => {\n                            console.debug(\"CardSdk: INIT_ACK: decrypted data \", decData);\n                            const decryptedData = JSON.parse(decData);\n                            const decryptedContainerIuid = decryptedData?.container?.iuid;\n                            if (decryptedContainerIuid) {\n                                this.containerIuid = decryptedContainerIuid;\n                                if (this.shouldUseCardFsFallback() && this.dataStore?.iuid) {\n                                    this.cardFsCache = new CardFsCache(this.dataStore.iuid, this.containerIuid);\n                                }\n                            }\n                            const apiToken = typeof decryptedData?.api_token === \"string\" ? decryptedData.api_token.trim() : \"\";\n                            if (apiToken) {\n                                this.accessToken = apiToken;\n                                console.debug(\"CardSdk: Stored API token from INIT_ACK payload\");\n                            }\n                            else {\n                                console.warn(\"CardSdk: INIT_ACK payload missing api_token; fallback APIs may fail without auth\");\n                            }\n                            this.permission = decryptedData?.perms_v2 ?? null;\n                            this.userRole = decryptedData?.role ?? null;\n                            const userWithFullName = this.attachUserFullName(decryptedData?.user);\n                            if (this.handler)\n                                this.safeInvoke(\"onInit\", this.handler, { ...decryptedData, user: userWithFullName, ui: data.ui });\n                            // no need for orig enc data.. free to delete it\n                            delete this.dataStore.denc;\n                        })\n                            .catch((err) => {\n                            console.error(\"Final decrypt error\", err);\n                            throw err;\n                        });\n                    }\n                    catch (err) {\n                        console.error(\"Decryption failed!\", err);\n                        this.sendEventError('dec2_failed', err.message);\n                    }\n                    break;\n                case CardClientMessageType.INIT_ERROR:\n                    // Parent sent INIT_ERROR\n                    this.safeInvoke(\"onInitError\", this.handler, data);\n                    break;\n                case CardClientMessageType.CFS_FILE_DATA: {\n                    const responseId = data?.messageId;\n                    if (responseId && this.fsReadRequests.has(responseId)) {\n                        // cardFS.read payload from parent (cached or fresh)\n                        const { messageId: _ignored, ...payload } = data || {};\n                        this.handleFsReadDataMessage(responseId, payload);\n                        return;\n                    }\n                    console.warn(\"CardSdk: CFS_FILE_DATA received but no matching fsRead request\", data?.messageId ?? data?.name);\n                    break;\n                }\n                case CardClientMessageType.DATA_CHANGE:\n                    this.safeInvoke(\"onFileChange\", this.handler, data);\n                case CardClientMessageType.CFS_WRITE_SUCCESS: {\n                    const responseId = data?.messageId;\n                    if (responseId && this.fsWriteRequests.has(responseId)) {\n                        // cardFS write/list/delete success routed by messageId\n                        this.handleFsWriteSuccess(responseId, data);\n                        return;\n                    }\n                    console.warn(\"CardSdk: CFS_WRITE_SUCCESS received but no matching fsWrite request\", data?.messageId ?? data?.name);\n                    break;\n                }\n                case CardClientMessageType.ERROR: {\n                    // Parent sent an ERROR\n                    this.safeInvoke(\"onError\", this.handler, data);\n                    break;\n                }\n                case CardClientMessageType.REFRESH:\n                    // Asking for UI refresh\n                    this.safeInvoke(\"onRefreshRequest\", this.handler, data);\n                    break;\n                case CardClientMessageType.AF1_DATA_TOKEN_ACK:\n                    // Handled via sendMessageWithAck resolver (no-op here)\n                    break;\n                case CardClientMessageType.LOGGING_ENABLE:\n                    this.applyLoggingConfig({\n                        status: \"enabled\",\n                        level: data?.level ?? data?.logging?.level,\n                    });\n                    break;\n                case CardClientMessageType.LOGGING_DISABLE:\n                    this.consoleCaptureEnabled = false;\n                    break;\n                case CardClientMessageType.LOGGING_CLEAR:\n                    this.clearConsoleLogs();\n                    break;\n                case CardClientMessageType.LOGGING_GET:\n                    this.sendConsoleLogs();\n                    break;\n                case CardClientMessageType.CFS_READ_FILE_ACK:\n                case CardClientMessageType.CFS_WRITE_FILE_ACK:\n                case CardClientMessageType.CFS_DELETE_FILE_ACK:\n                    // These acks should be resolved earlier via messageId/pendingAck lookup.\n                    // No-op here so we don't log unnecessary warnings if an ack arrives late.\n                    break;\n                default:\n                    console.warn(`No handler found for message type: ${type}`);\n            }\n        };\n        this.cryptoA01 = new CryptoA01();\n        this.cardFS = {\n            read: (name, handler, allowStale = true) => {\n                this.cardFSRead(name, handler, allowStale);\n            },\n            readById: (iuid, handler, allowStale = true) => {\n                this.cardFSReadById(iuid, handler, allowStale);\n            },\n            write: (name, fileData, fileType, onUpdate) => this.cardFSWrite(name, fileData, fileType, onUpdate),\n            writeById: (iuid, fileData, fileType, onUpdate) => this.cardFSWriteById(iuid, fileData, fileType, onUpdate),\n            delete: (name, onUpdate) => this.cardFSDelete(name, onUpdate),\n            deleteById: (iuid, onUpdate) => this.cardFSDeleteById(iuid, onUpdate),\n            list: (folderName, handler) => this.cardFSList(folderName, handler),\n        };\n        console.debug(\"CardSdk::constructor: done\");\n    }\n    /**\n     * Static initialization method to get or create the singleton instance of CardSdk.\n     * @param secret - The card developer secret key\n     * @param handler - (Optional) Handler for different events emitted by the SDK\n     * @returns The singleton CardSdk instance\n     */\n    static async init(secret, handler, options) {\n        try {\n            console.debug(\"CardSdk::init\");\n            if (!CardSdk.instance) {\n                CardSdk.instance = new CardSdk();\n                // Initialize parent communication - REQUIRED!\n                CardSdk.instance.setupParentConnection()\n                    .then(() => {\n                    // Connection established with parents..\n                    // Initialize SDK in async\n                    CardSdk.instance.initializeCardSdk(secret);\n                })\n                    .catch((err) => {\n                    console.error(err);\n                });\n            }\n            else {\n                return CardSdk.instance;\n            }\n            // Setup handlers\n            if (handler) {\n                CardSdk.instance.setHandler(handler); // Set handler if provided during initialization\n            }\n            return CardSdk.instance;\n        }\n        catch (err) {\n            console.error(\"CardSdk: Unrecoverable error in init\", err);\n            throw err;\n        }\n    }\n    /**\n     * Method to set or update the handler object.\n     * @param handler - Custom handler for different message types\n     */\n    setHandler(handler) {\n        this.handler = handler;\n    }\n    isCardFsFallbackEnabled() {\n        return this.shouldUseCardFsFallback();\n    }\n    /**\n     * Sends a deep link request to the parent directly from the card.\n     */\n    openDeepLink(href) {\n        if (!this.emitDeepLink(href)) {\n            console.warn(\"openDeepLink ignored; provide a dome:// or intouchapp:// href\");\n        }\n    }\n    /**\n     * Checks if the user has the requested permission.\n     * @param permission - A value from CardPermission enum (e.g CardPermission.READ, CardPermission.WRITE)\n     * @returns Boolean based on the permission presence\n     */\n    hasPerm(permission) {\n        if (!permission) {\n            return false;\n        }\n        const abbr = this.userRole?.abbr;\n        if (!abbr) {\n            return true;\n        }\n        // If user role is \"Owner\" always return true\n        if (abbr === \"o\") {\n            return true;\n        }\n        const grantedPermissions = this.permission?.[abbr];\n        if (typeof grantedPermissions === \"string\") {\n            if (grantedPermissions.includes(\"*\")) {\n                return true;\n            }\n            return grantedPermissions.includes(permission);\n        }\n        return CardSdk.DEFAULT_ROLE_PERMISSIONS.includes(permission);\n    }\n    /**\n     * Checks if the permissions allow reading\n     * @returns - True if the permission string allows read access to user\n     */\n    canRead() {\n        return this.hasPerm(CardPermission.READ);\n    }\n    /**\n     * Checks if the permissions allow writing\n     * @returns - True if the permission string allows write access to user\n     */\n    canWrite() {\n        return this.hasPerm(CardPermission.WRITE);\n    }\n    deriveSecretSeed(token) {\n        const reversed = token.split('').reverse().join('');\n        const seed = reversed.substring(4, 25);\n        if (!seed) {\n            throw new Error('Cannot decrypt (1)');\n        }\n        return seed;\n    }\n    getCardIuidEnc(url) {\n        try {\n            const segments = url.pathname.split(\"/wa/\").filter(Boolean);\n            let token = null;\n            if (segments.length >= 2) {\n                token = segments[1]?.split(\"/\")[0] ?? null;\n            }\n            else {\n                console.warn(\"CardSdk: No seed token found for card URL. Trying GET param.\");\n                return null;\n            }\n            if (!token) {\n                // Check if token is passed in param \"cie\"\n                token = url.searchParams.get(\"cie\");\n            }\n            if (!token) {\n                console.error(\"CardSdk: No seed token found.\");\n            }\n            return token || null;\n        }\n        catch (err) {\n            console.warn(\"CardSdk: Failed to extract seed token\", err);\n            return null;\n        }\n    }\n    async requestAf1DataFromParent(requestToken) {\n        const ackPayload = await this.sendMessageWithAck(CardMessageType.AF1_DATA_TOKEN, { sdk: { ver: pkg.version } }, CardClientMessageType.AF1_DATA_TOKEN_ACK);\n        const { messageId: _ignored, ...payload } = ackPayload || {};\n        const { cie, ck, dev_token } = payload;\n        if (!cie || !ck || !dev_token) {\n            throw new Error(\"Invalid AF1 data token payload\");\n        }\n        const res = await this.fetchAf1Data(cie, ck, dev_token, requestToken);\n        const dataAf1 = res?.data_af1 ?? res?.data?.data_af1;\n        if (!dataAf1) {\n            throw new Error(\"AF1 data fetch returned empty payload\");\n        }\n        window.IT_DATA_AF1 = dataAf1;\n        if (res?.ver) {\n            window.IT_VERSION = res.ver;\n        }\n        if (res?.env) {\n            window.IT_ENV = res.env;\n        }\n        return { dataAf1, cie };\n    }\n    async fetchAf1Data(cie, ck, devToken, requestToken) {\n        if (!cie || !ck || !devToken || !requestToken) {\n            throw new Error(\"Invalid AF1 data fetch parameters\");\n        }\n        const endpoint = new URL(`https://dome.so/api/v1/cards/e/${encodeURIComponent(cie)}/data_af1/`);\n        endpoint.searchParams.set(\"dt\", devToken);\n        endpoint.searchParams.set(\"rt\", requestToken);\n        endpoint.searchParams.set(\"ck\", ck);\n        const response = await fetch(endpoint.toString(), { method: \"GET\" });\n        if (!response.ok) {\n            const message = await response.text().catch(() => response.statusText);\n            throw new Error(`AF1 data fetch failed: ${response.status} ${message}`);\n        }\n        return response.json();\n    }\n    // Function to initialize SDK after instance is created\n    async initializeCardSdk(secret) {\n        let TAG = \"CardSdk::initializeCardSdk:\";\n        try {\n            console.debug(TAG, \"enter\");\n            if (!secret) {\n                throw new Error(\"Invalid secret\");\n            }\n            const url = window.location.href;\n            console.debug(TAG, \"url:\", url);\n            const urlObject = new URL(url);\n            let cardIuidEnc = this.getCardIuidEnc(urlObject);\n            if (!cardIuidEnc) {\n                // Check if token is passed in param \"cie\"\n                cardIuidEnc = urlObject.searchParams.get(\"cie\");\n            }\n            let data_af1 = window.IT_DATA_AF1;\n            // console.debug(TAG, \"da1\", data_af1);\n            if (!data_af1) {\n                const requestToken = urlObject.searchParams.get(\"rt\");\n                if (!requestToken) {\n                    throw new Error('Missing request token');\n                }\n                console.debug(TAG, \"IT_DATA_AF1 missing. Requesting token via parent\");\n                const { dataAf1, cie } = await this.requestAf1DataFromParent(requestToken);\n                data_af1 = dataAf1;\n                cardIuidEnc = cie || cardIuidEnc;\n            }\n            if (!data_af1) {\n                console.error(TAG, \"No data\");\n                throw new Error('No data');\n            }\n            if (!cardIuidEnc) {\n                throw new Error('Cannot decrypt (missing seed)');\n            }\n            const ss = this.deriveSecretSeed(cardIuidEnc);\n            // console.debug(TAG, \"ss:\", ss);\n            try {\n                const decData = await this.cryptoA01.decrypt(data_af1, secret, ss);\n                const dataFromServer = JSON.parse(decData);\n                console.debug(\"CardSdk: dataFromServer:\", dataFromServer);\n                if (!dataFromServer.ite) {\n                    throw new Error(\"Invalid data\");\n                }\n                this.dataStore = {\n                    'denc': dataFromServer.d,\n                    'kw2': dataFromServer.kw2\n                };\n                CardSdk.instance.sendInit(dataFromServer.ite);\n            }\n            catch (err) {\n                console.error(TAG, \"Initial Decryption failed (2):\", err);\n                // console.debug(TAG, \"daf1:\", data_af1, \", s:\", secret, \", ss:\", ss);\n                throw err;\n            }\n            console.debug(TAG, \"done\");\n        }\n        catch (err) {\n            console.error(TAG, \"Init failed:\", err);\n            this.sendEventError('init_failed', err.message);\n        }\n    }\n    async sendInit(token) {\n        const payload = { token, sdk: { ver: pkg.version } };\n        const webappDetails = this.getWebappDetails();\n        if (webappDetails) {\n            payload.wa = webappDetails;\n        }\n        this.sendMessage(CardMessageType.INIT, payload);\n    }\n    getWebappDetails() {\n        if (typeof window === \"undefined\") {\n            return null;\n        }\n        let wa = {};\n        const version = window.IT_VERSION;\n        const env = window.IT_ENV;\n        if (version) {\n            wa.ver = String(version);\n        }\n        if (env) {\n            wa.env = String(env);\n        }\n        return Object.keys(wa).length ? wa : null;\n    }\n    sendMessageWithAck(type, data, ackType, timeoutMs = 15000, onMessageId, binaryData) {\n        const messageId = crypto.randomUUID();\n        if (onMessageId) {\n            try {\n                onMessageId(messageId);\n            }\n            catch (err) {\n                return Promise.reject(err);\n            }\n        }\n        return new Promise((resolve, reject) => {\n            const timeout = setTimeout(() => {\n                this.pendingAcks.delete(messageId);\n                const error = new Error(`${ackType} not received in time`);\n                if (this.isCardFsAckType(ackType)) {\n                    error.code = CardFsErrorCode.TIMEOUT;\n                }\n                reject(error);\n            }, timeoutMs);\n            this.pendingAcks.set(messageId, { resolve, reject, timeout, ackType });\n            this.sendMessage(type, { ...data, messageId }, binaryData);\n        });\n    }\n    resolvePendingAckByType(type, data) {\n        for (const [messageId, pending] of this.pendingAcks.entries()) {\n            if (pending.ackType !== type) {\n                continue;\n            }\n            clearTimeout(pending.timeout);\n            this.pendingAcks.delete(messageId);\n            pending.resolve(data);\n            return true;\n        }\n        return false;\n    }\n    // cardsSdk.cardFS.read implementation - streams updates only via handler callbacks\n    cardFSRead(name, handler, allowStale = true) {\n        const target = { name };\n        const resolvedHandler = this.assertValidReadHandler(handler);\n        this.cardFSReadInternal(target, resolvedHandler, allowStale, \"read\");\n    }\n    cardFSReadById(iuid, handler, allowStale = true) {\n        const target = { iuid };\n        const resolvedHandler = this.assertValidReadHandler(handler);\n        this.cardFSReadInternal(target, resolvedHandler, allowStale, \"readById\");\n    }\n    cardFSReadInternal(target, handler, allowStale, operation) {\n        if (this.shouldUseCardFsFallback()) {\n            console.debug(`cardFS.${operation} using fallback implementation for`, target);\n            void this.cardFSReadFallback(target, undefined, handler, allowStale).catch((err) => {\n                const error = err instanceof Error ? err : new Error(String(err));\n                this.invokeReadHandlerError(handler, this.toCardFsErrorPayload(error));\n            });\n            return;\n        }\n        console.debug(`cardFS.${operation} delegating to parent for`, target);\n        let registeredMessageId = null;\n        const targetLabel = target.name ? `\"${target.name}\"` : (target.iuid ? `iuid ${target.iuid}` : \"document\");\n        const registerRequest = (messageId) => {\n            registeredMessageId = messageId;\n            // Track this read so CFS_FILE_DATA updates can stream via handler callbacks\n            const request = {\n                name: targetLabel,\n                handler,\n                allowStale,\n                timeoutMessage: `cardFS.${operation} timed out for ${targetLabel}`,\n            };\n            this.fsReadRequests.set(messageId, request);\n        };\n        // Parent ACK provides a messageId that subsequent CFS_FILE_DATA responses will reuse\n        this.sendMessageWithAck(CardMessageType.CFS_READ_FILE, this.buildCardFsMessagePayload(target, { allow_stale: allowStale }), CardClientMessageType.CFS_READ_FILE_ACK, CardSdk.CARD_FS_ACK_TIMEOUT_MS, registerRequest).catch((err) => {\n            const error = err instanceof Error ? err : new Error(String(err));\n            if (registeredMessageId) {\n                this.failFsReadRequest(registeredMessageId, error);\n            }\n            else {\n                this.invokeReadHandlerError(handler, this.toCardFsErrorPayload(error));\n            }\n        });\n    }\n    isCardFsAckType(type) {\n        return (type === CardClientMessageType.CFS_READ_FILE_ACK ||\n            type === CardClientMessageType.CFS_WRITE_FILE_ACK ||\n            type === CardClientMessageType.CFS_DELETE_FILE_ACK ||\n            type === CardClientMessageType.CFS_LIST_FILES_ACK);\n    }\n    // cardsSdk.cardFS.write - resolves when host confirms write\n    cardFSWrite(name, fileData, fileType = CardFsFileType.JSON, onUpdate) {\n        const target = { name };\n        if (this.runtimeHost === \"android\" && fileType === CardFsFileType.BINARY && typeof Blob !== \"undefined\" && fileData instanceof Blob) {\n            return fileData.arrayBuffer().then((buffer) => this.cardFSWriteInternal(target, buffer, fileType, onUpdate, \"write\"));\n        }\n        return this.cardFSWriteInternal(target, fileData, fileType, onUpdate, \"write\");\n    }\n    cardFSWriteById(iuid, fileData, fileType = CardFsFileType.JSON, onUpdate) {\n        const target = { iuid };\n        if (this.runtimeHost === \"android\" && fileType === CardFsFileType.BINARY && typeof Blob !== \"undefined\" && fileData instanceof Blob) {\n            return fileData.arrayBuffer().then((buffer) => this.cardFSWriteInternal(target, buffer, fileType, onUpdate, \"writeById\"));\n        }\n        return this.cardFSWriteInternal(target, fileData, fileType, onUpdate, \"writeById\");\n    }\n    cardFSWriteInternal(target, fileData, fileType, onUpdate, operation) {\n        if (this.shouldUseCardFsFallback()) {\n            console.debug(`cardFS.${operation} using fallback implementation for`, target);\n            return this.cardFSWriteFallback(target, fileData, fileType)\n                .catch((err) => {\n                throw this.toCardFsErrorPayload(err);\n            });\n        }\n        console.debug(`cardFS.${operation} delegating to parent for`, target);\n        return new Promise((resolve, reject) => {\n            let registeredMessageId = null;\n            const targetLabel = target.name ? `\"${target.name}\"` : (target.iuid ? `iuid ${target.iuid}` : \"document\");\n            const registerRequest = (messageId) => {\n                registeredMessageId = messageId;\n                const request = {\n                    name: targetLabel,\n                    onUpdate,\n                    resolve,\n                    reject,\n                    timeoutMessage: `cardFS.${operation} timed out for ${targetLabel}`,\n                };\n                this.fsWriteRequests.set(messageId, request);\n            };\n            const normalizedData = this.normalizeWriteData(fileData, fileType);\n            const fileSize = this.getWriteDataSizeBytes(normalizedData);\n            const supportsCbor = this.parentCapabilities?.card_fs?.array_buffer === \"cbor\";\n            const shouldSendBinary = fileType === CardFsFileType.BINARY && this.runtimeHost === \"android\" && supportsCbor;\n            let payloadData = normalizedData;\n            if (fileType === CardFsFileType.BINARY && !shouldSendBinary) {\n                if (normalizedData instanceof ArrayBuffer || ArrayBuffer.isView(normalizedData)) {\n                    payloadData = this.base64EncodeBinaryData(normalizedData);\n                }\n                else {\n                    console.warn(\"cardFS.write binary payload is not ArrayBuffer/TypedArray; sending raw data\");\n                }\n            }\n            console.debug(\"cardFS.write sending\", {\n                name: target.name,\n                iuid: target.iuid,\n                file_type: fileType,\n                file_size: fileSize,\n                data: payloadData,\n            });\n            this.sendMessageWithAck(CardMessageType.CFS_WRITE_FILE, this.buildCardFsMessagePayload(target, {\n                data: shouldSendBinary ? null : payloadData,\n                file_type: fileType,\n                file_size: fileSize,\n            }), CardClientMessageType.CFS_WRITE_FILE_ACK, CardSdk.CARD_FS_ACK_TIMEOUT_MS, registerRequest, shouldSendBinary ? normalizedData : undefined).catch((err) => {\n                const error = err instanceof Error ? err : new Error(String(err));\n                if (registeredMessageId) {\n                    this.failFsWriteRequest(registeredMessageId, error);\n                }\n                else {\n                    reject(this.toCardFsErrorPayload(error));\n                }\n            });\n        });\n    }\n    // cardsSdk.cardFS.delete - simple request/ack flow\n    cardFSDelete(name, onResult) {\n        const target = { name };\n        return this.cardFSDeleteInternal(target, onResult, \"delete\");\n    }\n    cardFSDeleteById(iuid, onResult) {\n        const target = { iuid };\n        return this.cardFSDeleteInternal(target, onResult, \"deleteById\");\n    }\n    cardFSDeleteInternal(target, onResult, operation) {\n        if (this.shouldUseCardFsFallback()) {\n            console.debug(`cardFS.${operation} using fallback implementation for`, target);\n            return this.cardFSDeleteFallback(target)\n                .then((result) => {\n                try {\n                    onResult?.(result);\n                }\n                catch (callbackErr) {\n                    console.error(`cardFS.${operation} fallback callback threw`, callbackErr);\n                }\n                return result;\n            })\n                .catch((err) => {\n                throw this.toCardFsErrorPayload(err);\n            });\n        }\n        console.debug(`cardFS.${operation} delegating to parent for`, target);\n        return new Promise((resolve, reject) => {\n            this.sendMessageWithAck(CardMessageType.CFS_DELETE_FILE, this.buildCardFsMessagePayload(target), CardClientMessageType.CFS_DELETE_FILE_ACK, CardSdk.CARD_FS_ACK_TIMEOUT_MS)\n                .then((data) => {\n                const { messageId: _ignored, ...result } = data || {};\n                onResult?.(result);\n                resolve(result);\n            })\n                .catch((err) => {\n                reject(this.toCardFsErrorPayload(err));\n            });\n        });\n    }\n    // cardsSdk.cardFS.list - streams metadata list via handler callbacks\n    cardFSList(folderName, handler) {\n        const resolvedHandler = this.assertValidListHandler(handler);\n        const formattedFolderName = this.formatFolderPath(folderName);\n        if (this.shouldUseCardFsFallback()) {\n            console.debug(\"cardFS.list using fallback implementation\");\n            void this.cardFSListFallbackStream(formattedFolderName, resolvedHandler);\n            return;\n        }\n        console.debug(\"cardFS.list delegating to parent\");\n        const payload = formattedFolderName ? { name: formattedFolderName } : {};\n        const messageId = crypto.randomUUID();\n        const request = {\n            name: formattedFolderName ?? \"folder listing\",\n            handler: resolvedHandler,\n            timeoutMessage: \"cardFS.list timed out\",\n        };\n        this.fsListRequests.set(messageId, request);\n        this.resetFsListProgressTimeout(messageId);\n        this.sendMessage(CardMessageType.CFS_LIST_FILES, { ...payload, messageId });\n    }\n    async cardFSListFallbackStream(folderName, handler) {\n        const cache = this.ensureCardFsCache();\n        let payloadSent = false;\n        if (cache) {\n            try {\n                const cachedListing = await cache.getFolderListing(folderName);\n                if (cachedListing) {\n                    const cachedDocuments = Array.isArray(cachedListing.data?.results) ? cachedListing.data.results : [];\n                    handler.next(this.normalizeListResult({\n                        documents: cachedDocuments,\n                        folder_name: cachedListing.folder_name,\n                        folder_iuid: cachedListing.folder_iuid ?? undefined,\n                        last_index: cachedListing.last_index ?? null,\n                        last_page: cachedListing.last_page ?? null,\n                        from_cache: true,\n                        is_dirty: true,\n                        is_complete: false,\n                    }));\n                    payloadSent = true;\n                }\n            }\n            catch (err) {\n                console.warn(\"cardFS.list cache lookup failed\", err);\n            }\n        }\n        try {\n            const result = await this.cardFSListFallback(folderName);\n            handler.next(this.normalizeListResult({\n                ...result,\n                is_complete: true,\n            }));\n        }\n        catch (err) {\n            if (!payloadSent) {\n                handler.error?.(this.toCardFsErrorPayload(err));\n            }\n            else {\n                console.warn(\"cardFS.list fresh fetch failed\", err);\n            }\n        }\n    }\n    resetFsReadProgressTimeout(messageId) {\n        const request = this.fsReadRequests.get(messageId);\n        if (!request)\n            return;\n        if (request.progressTimeout) {\n            clearTimeout(request.progressTimeout);\n        }\n        request.progressTimeout = setTimeout(() => {\n            this.failFsReadRequest(messageId, {\n                code: CardFsErrorCode.TIMEOUT,\n                message: request.timeoutMessage,\n            });\n        }, CardSdk.FS_RESPONSE_TIMEOUT_MS);\n    }\n    resetFsWriteProgressTimeout(messageId) {\n        const request = this.fsWriteRequests.get(messageId);\n        if (!request)\n            return;\n        if (request.progressTimeout) {\n            clearTimeout(request.progressTimeout);\n        }\n        request.progressTimeout = setTimeout(() => {\n            this.failFsWriteRequest(messageId, {\n                code: CardFsErrorCode.TIMEOUT,\n                message: request.timeoutMessage,\n            });\n        }, CardSdk.FS_RESPONSE_TIMEOUT_MS);\n    }\n    resetFsListProgressTimeout(messageId) {\n        const request = this.fsListRequests.get(messageId);\n        if (!request)\n            return;\n        if (request.progressTimeout) {\n            clearTimeout(request.progressTimeout);\n        }\n        request.progressTimeout = setTimeout(() => {\n            this.failFsListRequest(messageId, {\n                code: CardFsErrorCode.TIMEOUT,\n                message: request.timeoutMessage,\n            });\n        }, CardSdk.FS_RESPONSE_TIMEOUT_MS);\n    }\n    // Handle CFS_FILE_DATA updates (cached + fresh) for cardFS.read\n    handleFsReadDataMessage(messageId, payload) {\n        const request = this.fsReadRequests.get(messageId);\n        if (!request)\n            return;\n        // Guard against oversized payloads even if parent misbehaves\n        let readData = payload?.data;\n        if (typeof readData === \"string\" && (payload?.encoding === \"base64\" || this.isBinaryReadPayload(payload))) {\n            readData = this.decodeBase64BinaryData(readData);\n        }\n        const sanitized = this.sanitizeReadData(readData, request.name);\n        const normalizedData = this.normalizeReadData(sanitized.value, payload?.object?.mimetype, payload?.file_type);\n        const fromCache = Boolean(payload?.from_cache ?? payload?.is_stale);\n        const normalizedPayload = {\n            name: payload?.name,\n            iuid: payload?.iuid ?? null,\n            object: payload?.object,\n            data: normalizedData,\n            is_dirty: typeof payload?.is_dirty === \"boolean\" ? payload.is_dirty : undefined,\n            is_stale: Boolean(payload?.is_stale ?? payload?.from_cache),\n            is_complete: typeof payload?.is_complete === \"boolean\"\n                ? payload.is_complete\n                : (!request.allowStale || !fromCache),\n        };\n        console.debug(\"cardFS.read received\", normalizedPayload);\n        this.invokeReadHandlerNext(request.handler, normalizedPayload);\n        if (normalizedPayload.is_complete && request.progressTimeout) {\n            clearTimeout(request.progressTimeout);\n            request.progressTimeout = undefined;\n        }\n        if (request.cleanupTimeout) {\n            clearTimeout(request.cleanupTimeout);\n        }\n        request.cleanupTimeout = setTimeout(() => {\n            this.clearFsReadRequest(messageId);\n        }, CardSdk.FS_READ_RETENTION_MS);\n    }\n    handleFsAckMessage(type, payload) {\n        const messageId = payload?.messageId;\n        if (!messageId)\n            return false;\n        if (type === CardClientMessageType.CFS_READ_FILE_ACK) {\n            const request = this.fsReadRequests.get(messageId);\n            if (!request)\n                return false;\n            this.resetFsReadProgressTimeout(messageId);\n            if (request.cleanupTimeout) {\n                clearTimeout(request.cleanupTimeout);\n            }\n            request.cleanupTimeout = setTimeout(() => {\n                this.clearFsReadRequest(messageId);\n            }, CardSdk.FS_READ_RETENTION_MS);\n            return true;\n        }\n        if (type === CardClientMessageType.CFS_WRITE_FILE_ACK) {\n            const request = this.fsWriteRequests.get(messageId);\n            if (!request)\n                return false;\n            const { messageId: _ignored, ...ackPayload } = payload || {};\n            if (typeof request.onUpdate === \"function\") {\n                try {\n                    request.onUpdate(ackPayload);\n                }\n                catch (err) {\n                    console.error(\"cardFS.write onUpdate callback threw\", err);\n                }\n            }\n            this.resetFsWriteProgressTimeout(messageId);\n            return true;\n        }\n        return false;\n    }\n    // Remove read request bookkeeping and clear timers\n    clearFsReadRequest(messageId) {\n        const request = this.fsReadRequests.get(messageId);\n        if (!request)\n            return undefined;\n        if (request.progressTimeout) {\n            clearTimeout(request.progressTimeout);\n        }\n        if (request.cleanupTimeout) {\n            clearTimeout(request.cleanupTimeout);\n        }\n        this.fsReadRequests.delete(messageId);\n        return request;\n    }\n    sendConsoleLogs() {\n        const payload = {\n            logs: this.getConsoleLogs().map((log) => ({\n                l: log.level,\n                ts: log.timestamp,\n                args: log.args,\n            })),\n            ver: LOGGER_VERSION,\n            sdk: { ver: pkg.version }\n        };\n        this.sendMessage(CardMessageType.LOGGING_GET_RET, payload);\n    }\n    setupConsoleCapture() {\n        if (this.consoleCaptureInstalled || typeof console === \"undefined\") {\n            return;\n        }\n        const methods = [\"log\", \"info\", \"warn\", \"error\", \"debug\"];\n        methods.forEach((method) => {\n            const original = console[method];\n            if (typeof original !== \"function\") {\n                return;\n            }\n            const boundOriginal = original.bind(console);\n            console[method] = (...args) => {\n                try {\n                    this.recordConsoleEntry(method, args);\n                }\n                catch {\n                    // Avoid breaking console output if serialization fails\n                }\n                boundOriginal(...args);\n            };\n        });\n        this.consoleCaptureInstalled = true;\n    }\n    applyLoggingConfig(logging) {\n        if (!logging) {\n            return;\n        }\n        if (logging.status === \"enabled\") {\n            this.consoleCaptureEnabled = true;\n            this.setupConsoleCapture();\n        }\n        else if (logging.status === \"disabled\") {\n            this.consoleCaptureEnabled = false;\n        }\n        const normalizedLevel = typeof logging.level === \"string\" ? logging.level.toLowerCase() : null;\n        if (normalizedLevel && this.isConsoleLogLevel(normalizedLevel)) {\n            this.consoleCaptureMinLevel = normalizedLevel;\n        }\n    }\n    isConsoleLogLevel(value) {\n        return value === \"log\" || value === \"info\" || value === \"warn\" || value === \"error\" || value === \"debug\";\n    }\n    shouldCaptureLevel(level) {\n        if (!this.consoleCaptureEnabled) {\n            return false;\n        }\n        if (!this.consoleCaptureMinLevel) {\n            return true;\n        }\n        const levelOrder = [\"debug\", \"log\", \"info\", \"warn\", \"error\"];\n        return levelOrder.indexOf(level) >= levelOrder.indexOf(this.consoleCaptureMinLevel);\n    }\n    recordConsoleEntry(level, args) {\n        if (!this.shouldCaptureLevel(level)) {\n            return;\n        }\n        const entry = {\n            level,\n            timestamp: new Date().toISOString(),\n            args: args.map((arg) => this.serializeConsoleArg(arg)),\n        };\n        this.consoleLogBuffer[this.consoleLogWriteIndex] = entry;\n        this.consoleLogWriteIndex = (this.consoleLogWriteIndex + 1) % CardSdk.MAX_CONSOLE_LOG_ENTRIES;\n        this.consoleLogSize = Math.min(this.consoleLogSize + 1, CardSdk.MAX_CONSOLE_LOG_ENTRIES);\n    }\n    clearConsoleLogs() {\n        this.consoleLogBuffer.fill(null);\n        this.consoleLogWriteIndex = 0;\n        this.consoleLogSize = 0;\n    }\n    getConsoleLogs() {\n        if (this.consoleLogSize === 0) {\n            return [];\n        }\n        if (this.consoleLogSize < CardSdk.MAX_CONSOLE_LOG_ENTRIES) {\n            return this.consoleLogBuffer\n                .slice(0, this.consoleLogSize)\n                .filter((entry) => entry !== null);\n        }\n        const logs = [];\n        for (let i = 0; i < CardSdk.MAX_CONSOLE_LOG_ENTRIES; i += 1) {\n            const index = (this.consoleLogWriteIndex + i) % CardSdk.MAX_CONSOLE_LOG_ENTRIES;\n            const entry = this.consoleLogBuffer[index];\n            if (entry) {\n                logs.push(entry);\n            }\n        }\n        return logs;\n    }\n    serializeConsoleArg(value) {\n        if (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n            return this.truncateSerializedArg(value);\n        }\n        if (value === undefined) {\n            return this.truncateSerializedArg({ type: \"undefined\" });\n        }\n        if (typeof value === \"bigint\") {\n            return this.truncateSerializedArg({ type: \"bigint\", value: value.toString() });\n        }\n        if (typeof value === \"symbol\") {\n            return this.truncateSerializedArg({ type: \"symbol\", value: value.toString() });\n        }\n        if (typeof value === \"function\") {\n            return this.truncateSerializedArg({ type: \"function\", name: value.name || null });\n        }\n        if (value instanceof Error) {\n            return this.truncateSerializedArg({\n                type: \"error\",\n                name: value.name,\n                message: value.message,\n                stack: value.stack ?? null,\n            });\n        }\n        try {\n            return this.truncateSerializedArg(JSON.parse(JSON.stringify(value)));\n        }\n        catch {\n            try {\n                return this.truncateSerializedArg({ type: \"object\", value: String(value) });\n            }\n            catch {\n                return this.truncateSerializedArg({ type: \"object\", value: \"[unserializable]\" });\n            }\n        }\n    }\n    truncateSerializedArg(value) {\n        try {\n            if (typeof value === \"string\") {\n                if (value.length > CardSdk.MAX_CONSOLE_ARG_CHARS) {\n                    return {\n                        type: \"truncated\",\n                        preview: value.slice(0, CardSdk.MAX_CONSOLE_ARG_CHARS),\n                        original_length: value.length,\n                    };\n                }\n                return value;\n            }\n            const serialized = JSON.stringify(value);\n            if (typeof serialized === \"string\" && serialized.length > CardSdk.MAX_CONSOLE_ARG_CHARS) {\n                return {\n                    type: \"truncated\",\n                    preview: this.buildTruncatedPreview(value),\n                    original_length: serialized.length,\n                };\n            }\n        }\n        catch {\n            // Ignore serialization errors; fall back to raw value\n        }\n        return value;\n    }\n    buildTruncatedPreview(value) {\n        const seen = new WeakSet();\n        const maxDepth = 3;\n        const maxEntries = 5;\n        const truncateString = (input) => {\n            if (input.length <= CardSdk.MAX_CONSOLE_STRING_PREVIEW_CHARS) {\n                return input;\n            }\n            return {\n                type: \"truncated\",\n                preview: input.slice(0, CardSdk.MAX_CONSOLE_STRING_PREVIEW_CHARS),\n                original_length: input.length,\n            };\n        };\n        const buildPreview = (input, depth) => {\n            if (typeof input === \"string\") {\n                return truncateString(input);\n            }\n            if (!input || typeof input !== \"object\") {\n                return input;\n            }\n            if (seen.has(input)) {\n                return { type: \"circular\" };\n            }\n            if (depth >= maxDepth) {\n                return { type: \"truncated\", reason: \"max_depth\" };\n            }\n            seen.add(input);\n            if (Array.isArray(input)) {\n                const preview = input.slice(0, maxEntries).map((item) => buildPreview(item, depth + 1));\n                if (input.length > maxEntries) {\n                    preview.push({ type: \"truncated\", remaining: input.length - maxEntries });\n                }\n                return preview;\n            }\n            const entries = Object.entries(input);\n            const preview = {};\n            for (const [key, entryValue] of entries.slice(0, maxEntries)) {\n                preview[key] = buildPreview(entryValue, depth + 1);\n            }\n            if (entries.length > maxEntries) {\n                preview.__truncated__ = { remaining: entries.length - maxEntries };\n            }\n            return preview;\n        };\n        return buildPreview(value, 0);\n    }\n    failFsReadRequest(messageId, error) {\n        const request = this.clearFsReadRequest(messageId);\n        if (request) {\n            this.invokeReadHandlerError(request.handler, this.toCardFsErrorPayload(error));\n        }\n    }\n    // Remove write request bookkeeping\n    clearFsWriteRequest(messageId) {\n        const request = this.fsWriteRequests.get(messageId);\n        if (!request)\n            return undefined;\n        if (request.progressTimeout) {\n            clearTimeout(request.progressTimeout);\n        }\n        this.fsWriteRequests.delete(messageId);\n        return request;\n    }\n    clearFsListRequest(messageId) {\n        const request = this.fsListRequests.get(messageId);\n        if (!request)\n            return undefined;\n        if (request.progressTimeout) {\n            clearTimeout(request.progressTimeout);\n        }\n        this.fsListRequests.delete(messageId);\n        return request;\n    }\n    failFsWriteRequest(messageId, error) {\n        const request = this.clearFsWriteRequest(messageId);\n        if (request) {\n            request.reject(this.toCardFsErrorPayload(error));\n        }\n    }\n    failFsListRequest(messageId, error) {\n        const request = this.clearFsListRequest(messageId);\n        if (request) {\n            request.handler.error?.(this.toCardFsErrorPayload(error));\n        }\n    }\n    // Resolve write/list/delete promise with payload\n    handleFsWriteSuccess(messageId, payload) {\n        const request = this.clearFsWriteRequest(messageId);\n        if (!request)\n            return;\n        const { messageId: _ignored, ...result } = payload || {};\n        console.debug(\"cardFS.write response\", result);\n        request.resolve(result);\n    }\n    handleFsListDataMessage(messageId, payload) {\n        const request = this.fsListRequests.get(messageId);\n        if (!request)\n            return;\n        this.resetFsListProgressTimeout(messageId);\n        const { messageId: _ignored, ...result } = payload || {};\n        const normalized = this.normalizeListResult(result);\n        request.handler.next(normalized);\n        if (normalized.is_complete) {\n            this.clearFsListRequest(messageId);\n        }\n    }\n    createCardFsError(payload, fallbackMessage) {\n        const errorMessage = payload?.message || fallbackMessage;\n        const error = new Error(errorMessage);\n        const code = payload?.error_code;\n        if (code && Object.values(CardFsErrorCode).includes(code)) {\n            error.code = code;\n        }\n        return error;\n    }\n    toCardFsErrorPayload(error, fallbackMessage = \"Unknown cardFS error\") {\n        const message = typeof error?.message === \"string\"\n            ? error.message\n            : (typeof error === \"string\" ? error : fallbackMessage);\n        const code = (error?.code ?? error?.error_code);\n        if (code && Object.values(CardFsErrorCode).includes(code)) {\n            return { code, message };\n        }\n        return { message };\n    }\n    async cardFSReadFallback(target, requestId, handler, allowStale = true) {\n        if (!this.shouldUseCardFsFallback()) {\n            throw new Error(\"cardFS.read fallback is disabled because parent supports card_fs\");\n        }\n        const cardIuid = this.getCardIuid();\n        if (!cardIuid) {\n            throw new Error(\"cardFS.read fallback failed: card not initialized\");\n        }\n        const cache = this.ensureCardFsCache();\n        let payloadSent = false;\n        let cachedPayload;\n        const targetLabel = target.name ? `\"${target.name}\"` : (target.iuid ? `iuid ${target.iuid}` : \"document\");\n        const emit = (object, data, fromCache, isComplete, explicitName, explicitIuid, options) => {\n            if (!object)\n                return null;\n            const payloadName = explicitName ?? target.name ?? object?.name ?? target.iuid ?? \"document\";\n            const payloadIuid = explicitIuid ?? object?.iuid ?? target.iuid ?? null;\n            const includeData = options?.includeData !== false;\n            const safeData = includeData ? this.sanitizeReadData(data, payloadName).value : undefined;\n            const normalizedData = includeData\n                ? this.normalizeReadData(safeData, object?.mimetype, object?.file_type ?? object?.fileType)\n                : undefined;\n            const messagePayload = {\n                name: payloadName,\n                iuid: payloadIuid,\n                object,\n                data: normalizedData,\n                is_dirty: typeof options?.isDirty === \"boolean\" ? options.isDirty : !fromCache,\n                is_stale: fromCache,\n                is_complete: isComplete,\n            };\n            if (requestId && this.fsReadRequests.has(requestId)) {\n                this.handleFsReadDataMessage(requestId, messagePayload);\n            }\n            else {\n                console.debug(\"cardFS.read received\", messagePayload);\n                this.invokeReadHandlerNext(handler, messagePayload);\n            }\n            payloadSent = true;\n            return messagePayload;\n        };\n        if (cache) {\n            try {\n                if (allowStale) {\n                    let cached = null;\n                    if (target.iuid) {\n                        cached = await cache.getByIuid(target.iuid);\n                    }\n                    if (!cached && target.name) {\n                        cached = await cache.getByName(target.name);\n                    }\n                    if (cached?.object) {\n                        const responseName = cached.object?.name ?? target.name ?? cached.iuid;\n                        emit(cached.object, cached.data, true, false, responseName, cached.iuid);\n                        cachedPayload = {\n                            iuid: cached.iuid,\n                            name: responseName,\n                            object: cached.object,\n                            data: cached.data,\n                        };\n                    }\n                }\n            }\n            catch (err) {\n                console.warn(\"cardFS.read cache lookup failed\", err);\n            }\n        }\n        try {\n            const freshPayload = await this.fetchDocumentPayload(cardIuid, target);\n            await cache?.cacheDocument(freshPayload.object, freshPayload.data);\n            const responseName = freshPayload.object?.name ?? target.name ?? target.iuid;\n            if (payloadSent) {\n                const cachedHash = cachedPayload?.object?.data_hash;\n                const freshHash = freshPayload.object?.data_hash;\n                const isSame = cachedHash !== undefined && freshHash !== undefined && cachedHash === freshHash;\n                emit(freshPayload.object, freshPayload.data, false, true, responseName, freshPayload.object?.iuid, {\n                    includeData: !isSame,\n                    isDirty: !isSame,\n                });\n            }\n            else {\n                emit(freshPayload.object, freshPayload.data, false, true, responseName, freshPayload.object?.iuid);\n            }\n        }\n        catch (err) {\n            const error = err instanceof Error ? err : new Error(String(err));\n            const errorCode = this.getCardFsErrorCode(error);\n            if (errorCode === CardFsErrorCode.NOT_FOUND && cache) {\n                try {\n                    const cachedIuid = cachedPayload?.iuid ?? target.iuid;\n                    const cachedName = cachedPayload?.name ?? target.name;\n                    if (cachedIuid) {\n                        await cache.deleteByIuid(cachedIuid, cachedName);\n                    }\n                    else if (cachedName) {\n                        await cache.deleteByName(cachedName);\n                    }\n                }\n                catch (cleanupError) {\n                    console.warn(\"cardFS.read cache cleanup failed\", cleanupError);\n                }\n            }\n            if (!payloadSent) {\n                const errorWithCode = Object.assign(new Error(error.message), { code: errorCode });\n                throw errorWithCode;\n            }\n            if (errorCode === CardFsErrorCode.NOT_FOUND || errorCode === CardFsErrorCode.NO_PERMISSION) {\n                const payload = { code: errorCode, message: error.message };\n                if (requestId && this.fsReadRequests.has(requestId)) {\n                    this.failFsReadRequest(requestId, payload);\n                }\n                else {\n                    this.invokeReadHandlerError(handler, payload);\n                }\n            }\n            else {\n                console.warn(\"cardFS.read fresh fetch failed\", err);\n            }\n        }\n        if (!payloadSent) {\n            throw new Error(`cardFS.read fallback could not locate ${targetLabel}`);\n        }\n    }\n    async cardFSWriteFallback(target, fileData, fileType, requestId) {\n        if (!this.shouldUseCardFsFallback()) {\n            throw new Error(\"cardFS.write fallback is disabled because parent supports card_fs\");\n        }\n        const cardIuid = this.getCardIuid();\n        if (!cardIuid) {\n            throw new Error(\"cardFS.write fallback failed: card not initialized\");\n        }\n        console.debug(\"cardFS.write fallback invoked for target\", target);\n        try {\n            const normalizedData = this.normalizeWriteData(fileData, fileType);\n            await this.upsertDocumentViaApi(cardIuid, target, normalizedData, fileType);\n            const payload = await this.fetchDocumentPayload(cardIuid, target);\n            await this.ensureCardFsCache()?.cacheDocument(payload.object, payload.data);\n            const enrichedPayload = {\n                name: payload.object?.name ?? target.name ?? null,\n                iuid: payload.object?.iuid ?? target.iuid ?? null,\n                object: payload.object,\n                data: payload.data,\n            };\n            if (requestId && this.fsWriteRequests.has(requestId)) {\n                this.handleFsWriteSuccess(requestId, enrichedPayload);\n            }\n            else {\n                console.debug(\"cardFS.write response\", enrichedPayload);\n            }\n            return enrichedPayload;\n        }\n        catch (err) {\n            const error = err instanceof Error ? err : new Error(String(err));\n            const existingCode = error?.code ?? error?.error_code;\n            const errorCode = existingCode && Object.values(CardFsErrorCode).includes(existingCode)\n                ? existingCode\n                : this.getCardFsErrorCode(error);\n            throw Object.assign(new Error(error.message), { code: errorCode });\n        }\n    }\n    async cardFSDeleteFallback(target) {\n        if (!this.shouldUseCardFsFallback()) {\n            throw new Error(\"cardFS.delete fallback is disabled because parent supports card_fs\");\n        }\n        const cardIuid = this.getCardIuid();\n        if (!cardIuid) {\n            throw new Error(\"cardFS.delete fallback failed: card not initialized\");\n        }\n        console.debug(\"cardFS.delete fallback invoked for target\", target);\n        try {\n            const cache = this.ensureCardFsCache();\n            const doc = await this.fetchDocumentMetadataByTarget(cardIuid, target).catch(() => null);\n            const deleteIuid = doc?.iuid ?? target.iuid ?? null;\n            const resolvedName = doc?.name ?? target.name ?? null;\n            if (!deleteIuid) {\n                if (target.name) {\n                    await cache?.deleteByName(target.name);\n                }\n                return { name: resolvedName, iuid: null, deleted: false };\n            }\n            const response = await fetch(`/api/v1/documents/${deleteIuid}/`, {\n                method: 'DELETE',\n                headers: this.authHeader(),\n            });\n            if (!response.ok && response.status !== 404) {\n                const message = await response.text().catch(() => 'delete failed');\n                throw new Error(`cardFS.delete fallback failed: ${message}`);\n            }\n            await cache?.deleteByIuid(deleteIuid, resolvedName ?? undefined);\n            const deleted = response.status !== 404;\n            return {\n                name: resolvedName ?? deleteIuid,\n                iuid: deleteIuid,\n                deleted,\n            };\n        }\n        catch (err) {\n            const error = err instanceof Error ? err : new Error(String(err));\n            const existingCode = error?.code ?? error?.error_code;\n            const errorCode = existingCode && Object.values(CardFsErrorCode).includes(existingCode)\n                ? existingCode\n                : this.getCardFsErrorCode(error);\n            throw Object.assign(new Error(error.message), { code: errorCode });\n        }\n    }\n    async cardFSListFallback(folderName) {\n        if (!this.shouldUseCardFsFallback()) {\n            throw new Error(\"cardFS.list fallback is disabled because parent supports card_fs\");\n        }\n        const cardIuid = this.getCardIuid();\n        if (!cardIuid) {\n            throw new Error(\"cardFS.list fallback failed: card not initialized\");\n        }\n        const cache = this.ensureCardFsCache();\n        const formattedFolderName = this.formatFolderPath(folderName);\n        const normalizedFolderName = formattedFolderName ?? \"/\";\n        try {\n            const listing = await this.fetchFolderListing(cardIuid, formattedFolderName);\n            if (cache) {\n                await cache.cacheFolderListing(formattedFolderName, {\n                    folder_name: listing.folder_name ?? normalizedFolderName,\n                    folder_iuid: listing.folder_iuid,\n                    last_index: listing.last_index ?? null,\n                    last_page: listing.last_page ?? null,\n                    data: listing.documents,\n                });\n                await Promise.all(listing.documents.map((doc) => cache.cacheDocument(doc, undefined)));\n            }\n            return {\n                documents: listing.documents,\n                folder_name: listing.folder_name ?? normalizedFolderName,\n                folder_iuid: listing.folder_iuid,\n                last_index: listing.last_index ?? null,\n                last_page: listing.last_page ?? null,\n                is_dirty: true,\n                is_complete: true,\n            };\n        }\n        catch (err) {\n            const cachedListing = await cache?.getFolderListing(formattedFolderName);\n            if (cachedListing) {\n                const cachedDocuments = Array.isArray(cachedListing.data?.results) ? cachedListing.data.results : [];\n                return {\n                    documents: cachedDocuments,\n                    folder_name: cachedListing.folder_name ?? normalizedFolderName,\n                    folder_iuid: cachedListing.folder_iuid ?? undefined,\n                    last_index: cachedListing.last_index ?? null,\n                    last_page: cachedListing.last_page ?? null,\n                    from_cache: true,\n                    is_dirty: true,\n                    is_complete: true,\n                };\n            }\n            const error = err instanceof Error ? err : new Error(String(err));\n            const existingCode = error?.code ?? error?.error_code;\n            const errorCode = existingCode && Object.values(CardFsErrorCode).includes(existingCode) ? existingCode : this.getCardFsErrorCode(error);\n            throw Object.assign(new Error(error.message), { code: errorCode });\n        }\n    }\n    authHeader() {\n        return this.accessToken ? { 'Authorization': `Bearer ${this.accessToken}` } : {};\n    }\n    async fetchDocumentMetadataByTarget(cardIuid, target) {\n        if (target.iuid) {\n            return this.fetchDocumentMetadataByIuid(target.iuid);\n        }\n        if (target.name) {\n            return this.fetchDocumentMetadataByName(cardIuid, target.name);\n        }\n        return null;\n    }\n    async fetchDocumentMetadataByIuid(iuid) {\n        const response = await fetch(`/api/v1/documents/${iuid}/`, {\n            method: 'GET',\n            headers: this.authHeader(),\n        });\n        if (response.status === 404) {\n            return null;\n        }\n        if (!response.ok) {\n            const message = await response.text().catch(() => 'metadata lookup failed');\n            throw new Error(`cardFS metadata fetch failed: ${message}`);\n        }\n        return response.json().catch(() => null);\n    }\n    normalizeDocumentsResponse(body) {\n        if (Array.isArray(body?.results)) {\n            return body.results;\n        }\n        if (Array.isArray(body)) {\n            return body;\n        }\n        return body ? [body] : [];\n    }\n    normalizeListResult(payload) {\n        const documents = Array.isArray(payload?.documents) ? payload.documents : [];\n        const isStale = Boolean(payload?.from_cache ?? payload?.is_stale);\n        const isComplete = typeof payload?.is_complete === \"boolean\" ? payload.is_complete : !isStale;\n        const isDirty = typeof payload?.is_dirty === \"boolean\" ? payload.is_dirty : true;\n        return {\n            ...payload,\n            documents,\n            is_stale: isStale,\n            is_complete: isComplete,\n            is_dirty: isDirty,\n        };\n    }\n    getCardFsErrorCode(error) {\n        if (!error) {\n            return CardFsErrorCode.UNKNOWN;\n        }\n        const status = error?.status ?? error?.statusCode;\n        if (status === 0) {\n            return CardFsErrorCode.NO_INTERNET;\n        }\n        if (status === 401 || status === 403) {\n            return CardFsErrorCode.NO_PERMISSION;\n        }\n        if (status === 404) {\n            return CardFsErrorCode.NOT_FOUND;\n        }\n        if (status === 500) {\n            return CardFsErrorCode.SERVER_ERROR;\n        }\n        const message = typeof error?.message === \"string\" ? error.message.toLowerCase() : \"\";\n        if (message.includes(\"not found\")) {\n            return CardFsErrorCode.NOT_FOUND;\n        }\n        if (message.includes(\"permission\") || message.includes(\"unauthorized\") || message.includes(\"forbidden\")) {\n            return CardFsErrorCode.NO_PERMISSION;\n        }\n        if (message.includes(\"network\") || message.includes(\"failed to fetch\") || message.includes(\"offline\")) {\n            return CardFsErrorCode.NO_INTERNET;\n        }\n        return CardFsErrorCode.UNKNOWN;\n    }\n    isBinaryReadPayload(payload) {\n        const fileType = payload?.file_type ?? payload?.object?.file_type ?? payload?.object?.fileType;\n        if (fileType === CardFsFileType.BINARY) {\n            return true;\n        }\n        const mimeType = payload?.object?.mimetype ?? payload?.object?.mime_type ?? payload?.object?.mimeType;\n        if (typeof mimeType === \"string\") {\n            const normalized = mimeType.toLowerCase();\n            if (normalized.startsWith(\"text/\") || normalized.includes(\"json\")) {\n                return false;\n            }\n            return true;\n        }\n        return false;\n    }\n    decodeBase64BinaryData(value) {\n        const binary = atob(value);\n        const bytes = new Uint8Array(binary.length);\n        for (let index = 0; index < binary.length; index += 1) {\n            bytes[index] = binary.charCodeAt(index);\n        }\n        return bytes.buffer;\n    }\n    async fetchDocumentMetadataByName(cardIuid, name) {\n        if (!name)\n            return null;\n        const response = await fetch(`/api/v1/documents/with_card/${cardIuid}/?name=${encodeURIComponent(name)}`, {\n            method: 'GET',\n            headers: this.authHeader(),\n        });\n        if (!response.ok) {\n            if (response.status === 404)\n                return null;\n            const message = await response.text().catch(() => 'metadata lookup failed');\n            throw new Error(`cardFS metadata fetch failed: ${message}`);\n        }\n        const body = await response.json().catch(() => null);\n        const documents = this.normalizeDocumentsResponse(body);\n        return documents.find((doc) => doc?.name === name) ?? documents[0] ?? null;\n    }\n    async fetchFolderListing(cardIuid, folderName) {\n        const search = folderName ? `?name=${encodeURIComponent(folderName)}` : \"\";\n        const response = await fetch(`/api/v1/documents/with_card/${cardIuid}/${search}`, {\n            method: 'GET',\n            headers: this.authHeader(),\n        });\n        if (!response.ok) {\n            const message = await response.text().catch(() => 'list failed');\n            throw new Error(`cardFS.list failed: ${message}`);\n        }\n        const body = await response.json().catch(() => null);\n        return {\n            documents: this.normalizeDocumentsResponse(body),\n            folder_name: folderName,\n            folder_iuid: undefined,\n            last_index: body?.last_index ?? body?.last_page ?? null,\n            last_page: body?.last_page ?? null,\n        };\n    }\n    async fetchDocumentPayload(cardIuid, target) {\n        const resolvedTarget = typeof target === \"string\" ? { name: target } : target;\n        const doc = await this.fetchDocumentMetadataByTarget(cardIuid, resolvedTarget);\n        if (!doc) {\n            const targetLabel = resolvedTarget.name ? `\"${resolvedTarget.name}\"` : (resolvedTarget.iuid ? `iuid ${resolvedTarget.iuid}` : \"document\");\n            throw new Error(`cardFS document not found: ${targetLabel}`);\n        }\n        const data = await this.fetchDocumentData(doc);\n        return { object: doc, data };\n    }\n    async fetchDocumentData(doc) {\n        if (doc?.data !== undefined) {\n            return doc.data;\n        }\n        const url = doc?.orig?.url || doc?.url?.original || doc?.url;\n        if (!url || typeof url !== 'string') {\n            return null;\n        }\n        const response = await fetch(url);\n        if (!response.ok) {\n            const message = await response.text().catch(() => 'download failed');\n            throw new Error(`cardFS data fetch failed: ${message}`);\n        }\n        const contentType = response.headers.get('Content-Type') || '';\n        if (contentType.includes('application/json')) {\n            return response.json();\n        }\n        if (contentType.startsWith('text/')) {\n            return response.text();\n        }\n        return response.arrayBuffer();\n    }\n    async buildFileFormData(name, fileData, fileType) {\n        let file;\n        if (fileData instanceof File) {\n            file = fileData;\n        }\n        else if (typeof Blob !== 'undefined' && fileData instanceof Blob) {\n            file = new File([fileData], name, { type: fileData.type || 'application/octet-stream' });\n        }\n        else {\n            const mimeType = fileType === CardFsFileType.TEXT ? 'text/plain' : (fileType === CardFsFileType.JSON ? 'application/json' : 'application/octet-stream');\n            file = new File([fileData], name, { type: mimeType });\n        }\n        const formData = new FormData();\n        formData.append('file', file);\n        return formData;\n    }\n    async upsertDocumentViaApi(cardIuid, target, fileData, fileType) {\n        if (target.iuid) {\n            let resolvedName = target.name;\n            if (!resolvedName) {\n                const metadata = await this.fetchDocumentMetadataByIuid(target.iuid).catch(() => null);\n                resolvedName = metadata?.name ?? target.iuid;\n            }\n            const formData = await this.buildFileFormData(resolvedName ?? target.iuid ?? 'document', fileData, fileType);\n            const response = await fetch(`/api/v1/documents/${target.iuid}/`, {\n                method: 'PUT',\n                headers: this.authHeader(),\n                body: formData,\n            });\n            if (!response.ok) {\n                const message = await response.text().catch(() => 'update failed');\n                throw new Error(`cardFS.write update failed: ${message}`);\n            }\n            return;\n        }\n        const formData = await this.buildFileFormData(target.name ?? target.iuid ?? 'document', fileData, fileType);\n        const existing = target.name\n            ? await this.fetchDocumentMetadataByName(cardIuid, target.name).catch(() => null)\n            : null;\n        if (existing?.iuid) {\n            const response = await fetch(`/api/v1/documents/${existing.iuid}/`, {\n                method: 'PUT',\n                headers: this.authHeader(),\n                body: formData,\n            });\n            if (!response.ok) {\n                const message = await response.text().catch(() => 'update failed');\n                throw new Error(`cardFS.write update failed: ${message}`);\n            }\n            return;\n        }\n        formData.append('parent_iuid', cardIuid);\n        formData.append('attached_to_iuid', cardIuid);\n        if (!target.name) {\n            throw new Error(`cardFS.write failed: \"name\" missing`);\n        }\n        formData.append('filename', target.name);\n        const uploadResponse = await fetch(`/api/v1/documents/`, {\n            method: 'POST',\n            headers: this.authHeader(),\n            body: formData,\n        });\n        if (!uploadResponse.ok) {\n            const message = await uploadResponse.text().catch(() => 'upload failed');\n            throw new Error(`cardFS.write upload failed: ${message}`);\n        }\n        // const uploadBody = await uploadResponse.json().catch(() => null);\n        // const uploadedDoc = Array.isArray(uploadBody?.results) ? uploadBody.results[0] : uploadBody;\n        // const newIuid = uploadedDoc?.iuid;\n        // if (!newIuid) {\n        //   throw new Error('cardFS.write upload failed: missing document iuid');\n        // }\n        // const attachResponse = await fetch(`/api/v1/documents/with_card/${cardIuid}/`, {\n        //   method: 'POST',\n        //   headers: this.jsonHeaders(),\n        //   body: JSON.stringify({ documents: [newIuid] }),\n        // });\n        // if (!attachResponse.ok) {\n        //   const message = await attachResponse.text().catch(() => 'attach failed');\n        //   throw new Error(`cardFS.write attach failed: ${message}`);\n        // }\n    }\n    // Send event on error (clients will get \"onError\" event)\n    formatErrorMessage(input) {\n        if (typeof input === \"string\" && input.trim()) {\n            return input;\n        }\n        if (input instanceof Error) {\n            return input.message || input.toString();\n        }\n        if (input && typeof input === \"object\") {\n            if (typeof input.message === \"string\") {\n                return input.message;\n            }\n            try {\n                return JSON.stringify(input);\n            }\n            catch {\n                return Object.prototype.toString.call(input);\n            }\n        }\n        if (input != null) {\n            return String(input);\n        }\n        return \"Unknown error\";\n    }\n    sendEventError(error_code, message, data = undefined) {\n        const data_to_send = {\n            message: this.formatErrorMessage(message),\n            error_code,\n            data: data ?? null,\n        };\n        if (this.handler)\n            this.safeInvoke(\"onError\", this.handler, data_to_send);\n    }\n    setFileDirty(data) {\n        this.sendMessage(CardMessageType.FILE_DIRTY, data);\n    }\n    // Get username string from user object received from parent\n    getUsername(userObj) {\n        const nameObj = userObj?.name;\n        if (nameObj && Object.values(nameObj).some(value => value)) {\n            return getNameString(nameObj);\n        }\n        return \"\";\n    }\n    attachUserFullName(userObj) {\n        if (!userObj || typeof userObj !== \"object\") {\n            return userObj;\n        }\n        return {\n            ...userObj,\n            getFullName() {\n                return getNameString(this?.name);\n            },\n        };\n    }\n}\n// How long we wait between parent progress ACKs before rejecting (ms)\nCardSdk.FS_RESPONSE_TIMEOUT_MS = 30000;\n// Keep read handlers alive briefly to allow cached+fresh events (ms)\nCardSdk.FS_READ_RETENTION_MS = 15000;\nCardSdk.CARD_FS_ACK_TIMEOUT_MS = 15000;\nCardSdk.MAX_CONSOLE_ARG_CHARS = 2000;\nCardSdk.MAX_CONSOLE_LOG_ENTRIES = 100;\nCardSdk.MAX_CONSOLE_STRING_PREVIEW_CHARS = 200;\nCardSdk.DEFAULT_ROLE_PERMISSIONS = \"r\";\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","decoder","src","srcEnd","TextDecoder","error","position","EMPTY_ARRAY","STOP_CODE","currentStructures","srcString","bundledStrings","referenceMap","packedValues","dataView","restoreMapsAsObject","maxArraySize","maxMapSize","strings","stringPosition","currentDecoder","srcStringStart","srcStringEnd","currentExtensions","currentExtensionRanges","defaultOptions","useRecords","mapsAsObjects","sequentialMode","inlineObjectReadThreshold","Function","Infinity","constructor","options","keyMap","_keyMap","undefined","getStructures","getShared","structures","uninitialized","this","mapKey","Map","k","v","entries","set","assign","decodeKey","encodeKey","encodeKeys","rec","map","decodeKeys","name","_mapKey","res","forEach","safeKey","has","mapDecode","source","end","decode","r","saveState","clearSource","length","DataView","buffer","byteOffset","byteLength","Uint8Array","Error","sharedValues","pack","Array","maxPrivatePackedValues","concat","checkedRead","decodeMultiple","values","lastPosition","size","value","defaultDecoder","push","result","read","postBundlePosition","incomplete","RangeError","message","startsWith","token","majorType","byte0","byte1","exponent","NaN","abs","u8Array","f32Array","getFloat16","getUint16","getFloat32","useFloat32","multiplier","mult10","getUint32","getFloat64","int64AsNumber","getBigUint64","array","i","join","Buffer","object","copyBuffers","slice","subarray","string","shortStringInJS","longStringInJS","readFixedString","structure","createStructureReader","readJustLength","id","recordDefinition","bundlePosition","bundleLength","dataPosition","readStringJS","position0","position1","readBundleExt","loadShared","extension","handlesRead","input","Tag","packedValue","getPackedValues","isNaN","validName","slowReads","compiledReader","propertyCount","next","test","JSON","stringify","toString","units","byte2","byte3","unit","fromCharCode","apply","String","start","bytes","byte","a","b","c","d","e","f","g","h","j","l","m","n","Float32Array","tag","dateString","Date","epochSec","Math","round","BigInt","fraction","exp","log","existingStructure","isShared","restoreStructures","data","glbl","RegExp","packedTable","newPackedValues","prefixes","suffixes","combine","target","startingPosition","refEntry","targetProperties","used","getPrototypeOf","Set","version","isLittleEndianMachine","Uint16Array","typedArrays","Uint8ClampedArray","Uint32Array","BigUint64Array","Int8Array","Int16Array","Int32Array","BigInt64Array","Float64Array","typedArrayTags","registerTypedArray","TypedArray","bytesPerElement","dvMethod","BYTES_PER_ELEMENT","littleEndian","sizeShift","dv","elements","ta","method","sharedData","updatedStructures","sharedVersion","splice","callback","savedSrcEnd","savedPosition","savedStringPosition","savedSrcStringStart","savedSrcStringEnd","savedSrcString","savedStrings","savedReferenceMap","savedBundledStrings","savedSrc","savedStructures","savedDecoder","savedSequentialMode","floor","textEncoder","extensions","extensionClasses","TextEncoder","globalThis","hasNodeBuffer","ByteArrayAllocate","allocUnsafeSlow","ByteArray","MAX_BUFFER_SIZE","throwOnIterable","targetView","safeEnd","hasNonLatin","RECORD_SYMBOL","Symbol","writeEntityLength","majorValue","setUint32","SharedData","writeArrayHeader","BlobConstructor","Blob","isBlob","toStringTag","findRepetitiveStrings","objectMap","maxValues","packedStatus","count","samplingPackedValues","status","includeKeys","encoder","console","typedArrayEncoder","encode","typedArray","offset","from","writeBuffer","makeRoom","writeBundles","writeStrings","ArrayBuffer","date","seconds","getTime","useTimestamp32","getMilliseconds","setFloat64","regex","flags","getTag","arrayBuffer","tagUint8Array","sharedStructures","valuesArray","packedObjectMap","create","sharedPackedObjectMap","definitions","unshift","defaultEncoder","hasSharedUpdate","super","encodeUtf8","utf8Write","maxBytes","encodeInto","written","hasSharedStructures","saveStructures","maxSharedStructures","isSequential","sequential","saveShared","recordIdsToRemove","transitionsCount","serializationsSinceTransitionRebuild","mapEncode","encodeOptions","_mapped","REUSE_BUFFER_MODE","useSelfDescribedHeader","structuredClone","bundleStrings","sharedStructuresLength","transitions","keys","nextTransition","transition","nextId","THROW_ON_ITERABLE","idsToInsert","serialized","distanceToMove","lastEnd","sort","referee","references","pop","copyWithin","insertIds","returnBuffer","updateSharedData","RESET_BUFFER_MODE","findCommonStringsToPack","threshold","type","packedPosition","headerSize","strLength","extStart","twoByte","c1","c2","strPosition","charCodeAt","alwaysUseFloat","xShifted","setFloat32","setUint16","writeObject","useTag259ForMaps","entryValue","iterator","iteratorNotHandled","entry","asyncIterator","useToJSON","toJSON","json","setBigUint64","largeBigIntToFloat","Number","reverse","variableMapSize","vals","objectOffset","skipValues","parentRecordId","newTransitions","recordId","__keys__","shift","newSize","min","max","newBuffer","copy","chunkThreshold","continuedChunkThreshold","encodeObjectAsIterable","iterateProperties","finalIterable","tryEncode","element","restartEncoding","restart","startEncoding","encodeIterable","async","encodeObjectAsAsyncIterable","encodedValue","reader","stream","getReader","done","asyncValue","encodeAsIterable","encodeAsAsyncIterable","useBuffer","clearSharedData","lastVersion","structuresCopy","saveResults","existingShared","NEVER","ALWAYS","DECIMAL_ROUND","DECIMAL_FIT","escapeHtml","replace","renderCriticalErrorPage","document","title","errorCode","lang","safeTitle","safeErrorCode","safeSupportLabel","safeLang","documentElement","body","createElement","appendChild","className","innerHTML","ALLOWED_DEEP_LINK_PROTOCOLS","ViewerMessageType","CommonSdkMessageType","CommonClientMessageType","ViewerClientMessageType","CardClientMessageType","CardMessageType","CardPermission","DomeEmbeddedAppSdk","targetOrigin","isAppReady","port2","runtimeHost","parentHostDetails","parentCapabilities","handleDeepLinkClick","event","Element","anchor","closest","href","getAttribute","emitDeepLink","preventDefault","info","detectHost","setupDeepLinkInterception","window","AndroidBridge","webkit","addEventListener","trim","warn","protocol","split","toLowerCase","sendMessage","OPEN_DEEPLINK","url","updateParentContext","host","capabilities","merged","nextCapabilities","host_type","hostType","getHost","binaryData","buildVersionedMessage","postMessage","messageHandlers","appHandler","binaryPayload","toUint8Array","dataWithBinary","payload","encodeCborMessage","sendAppInit","INIT","sdk","ver","safeInvoke","eventName","handlerObj","handler","setupParentConnection","Promise","resolve","reject","receiveFromAndroid","isView","decoded","decodeCborBuffer","handleMessage","connectTimeout","resolved","resolveOnce","clearTimeout","CONNECTION_SUCCESS","setupMessageChannelListener","INIT_MESSAGE_CHANNEL","setTimeout","receiveFromIOS","webConnectTimeout","resolvedWebConnect","resolveWebConnect","notifyConnectionSuccess","parent","onConnect","parse","CONNECT","ports","onmessage","handlePortMessage","removeEventListener","payloadData","nestedPayload","rawNestedData","nestedBinary","normalizeBinaryPayload","normalized","encoded","copyBufferView","view","isArray","getNameString","nameObj","prefix","given","middle","family","suffix","filter","namePart","ViewerSdk","pendingRequests","pendingInitAck","init","initialized","instance","then","initializeViewerSdk","err","catch","trace","setHandler","canRead","perms","includes","canWrite","requestInitialData","REQUEST_INITIAL_DATA","requestSave","doc","isDataDirty","requestId","crypto","randomUUID","generateUUID","REQUEST_SAVE","delete","handleOnSave","setDirty","isDirty","SET_DIRTY","sendClose","SEND_CLOSE","sendException","SEND_EXCEPTION","INIT_ACK","DATA_CHANGE","REQUEST_CLOSE","SAVE_SUCCESS","SAVE_ERROR","CryptoA01","subtleCrypto","subtle","decrypt","password","salt","tokenBytes","base64UrlDecode","iv","ciphertext","hmacFromToken","fullKey","deriveKey","hmacKey","aesKey","splitKey","hmacInput","sign","every","decrypted","iterations","keyMaterial","importKey","hash","rawKey","exportKey","base64","base64String","decodedString","atob","cardPermission","CardFsFileType","CardFsErrorCode","CARD_FS_VERSION","getKeyFromBlobStr","blobStr","getKeyFromBlob","blob","seed","obf","out","decodeCardKeyBlobV1","uint8ArrayToUtf8String","CardFsCache","cardIuid","containerIuid","openPromise","isSupported","indexedDB","openDb","openWithVersion","DB_VERSION","infoAction","request","open","onupgradeneeded","oldVersion","configureStores","onsuccess","db","hasRequiredStores","nextVersion","close","updateStoresMetadata","finally","onerror","objectStoreNames","contains","DATA_STORE","createObjectStore","NAME_LOOKUP_STORE","INFO_STORE","FOLDER_CACHE_STORE","stores","nowMicros","trunc","now","preserveExistingInfoTs","all","ensureStoreVersion","updateCardInfo","storeName","tx","transaction","store","objectStore","finalize","oncomplete","onabort","put","STORE_VERSION_KEY","preserveExistingTs","existingContainer","readInfoValue","existingTs","containerValue","timestampValue","writeInfoValue","keyFor","normalizeFolderName","folderName","DEFAULT_FOLDER_KEY","endsWith","folderListingKey","normalizeName","trimmed","hashName","cryptoRef","digest","encodeText","bufferToBase64","binary","btoa","getIuidForName","hashed","upsertNameLookup","iuid","openCursor","cursor","continue","deleteNameLookupByName","deleteNameLookupByIuid","estimateSize","cacheDocument","normalizedName","MAX_DATA_BYTES","getByName","getByIuid","deleteByName","deleteByIuid","cacheFolderListing","folder_name","baseData","documents","results","folder_iuid","card_iuid","time_last_fetch","last_index","last_page","getFolderListing","CardSdk","buildCardFsMessagePayload","extra","formatFolderPath","assertValidReadHandler","assertValidListHandler","invokeReadHandlerNext","invokeReadHandlerError","sanitizeReadData","contextLabel","stripped","label","normalizeReadData","mimeType","fileType","normalizedMimeType","normalizedFileType","isJson","isText","TEXT","isBinaryData","decodeBinaryToText","textValue","encodeTextPayload","encodeJsonPayload","normalizeWriteData","fileData","BINARY","base64EncodeBinaryData","index","getWriteDataSizeBytes","getCardIuid","dataStore","ensureCardFsCache","shouldUseCardFsFallback","cardFsCache","supportsParentCardFs","cardFs","card_fs","accessToken","devMode","permission","userRole","fsReadRequests","fsWriteRequests","fsListRequests","pendingAcks","consoleCaptureInstalled","consoleCaptureEnabled","consoleCaptureMinLevel","consoleLogBuffer","MAX_CONSOLE_LOG_ENTRIES","fill","consoleLogWriteIndex","consoleLogSize","CFS_ERROR","responseId","messageId","createCardFsError","pending","timeout","failFsReadRequest","failFsWriteRequest","failFsListRequest","handleFsAckMessage","CFS_LIST_FILES_ACK","ackType","resolvePendingAckByType","applyLoggingConfig","logging","kw1","key_wa1","dev_mode","cryptoA01","denc","kw2","decData","decryptedData","decryptedContainerIuid","container","apiToken","api_token","perms_v2","role","userWithFullName","attachUserFullName","user","ui","sendEventError","INIT_ERROR","CFS_FILE_DATA","_ignored","handleFsReadDataMessage","CFS_WRITE_SUCCESS","handleFsWriteSuccess","ERROR","REFRESH","AF1_DATA_TOKEN_ACK","LOGGING_ENABLE","level","LOGGING_DISABLE","LOGGING_CLEAR","clearConsoleLogs","LOGGING_GET","sendConsoleLogs","CFS_READ_FILE_ACK","CFS_WRITE_FILE_ACK","CFS_DELETE_FILE_ACK","handleFsListDataMessage","cardFS","allowStale","cardFSRead","readById","cardFSReadById","write","onUpdate","cardFSWrite","writeById","cardFSWriteById","cardFSDelete","deleteById","cardFSDeleteById","list","cardFSList","secret","initializeCardSdk","isCardFsFallbackEnabled","openDeepLink","hasPerm","abbr","grantedPermissions","DEFAULT_ROLE_PERMISSIONS","READ","WRITE","deriveSecretSeed","substring","getCardIuidEnc","segments","pathname","Boolean","searchParams","requestAf1DataFromParent","requestToken","ackPayload","sendMessageWithAck","AF1_DATA_TOKEN","cie","ck","dev_token","fetchAf1Data","dataAf1","data_af1","IT_DATA_AF1","IT_VERSION","env","IT_ENV","devToken","endpoint","URL","encodeURIComponent","response","fetch","ok","text","statusText","TAG","location","urlObject","cardIuidEnc","ss","dataFromServer","ite","sendInit","webappDetails","getWebappDetails","wa","timeoutMs","onMessageId","isCardFsAckType","code","TIMEOUT","resolvedHandler","cardFSReadInternal","operation","cardFSReadFallback","toCardFsErrorPayload","registeredMessageId","targetLabel","CFS_READ_FILE","allow_stale","CARD_FS_ACK_TIMEOUT_MS","timeoutMessage","cardFSWriteInternal","cardFSWriteFallback","normalizedData","fileSize","supportsCbor","array_buffer","shouldSendBinary","CFS_WRITE_FILE","file_type","file_size","onResult","cardFSDeleteInternal","cardFSDeleteFallback","callbackErr","CFS_DELETE_FILE","formattedFolderName","cardFSListFallbackStream","resetFsListProgressTimeout","CFS_LIST_FILES","cache","payloadSent","cachedListing","cachedDocuments","normalizeListResult","from_cache","is_dirty","is_complete","cardFSListFallback","resetFsReadProgressTimeout","progressTimeout","FS_RESPONSE_TIMEOUT_MS","resetFsWriteProgressTimeout","readData","encoding","isBinaryReadPayload","decodeBase64BinaryData","sanitized","mimetype","fromCache","is_stale","normalizedPayload","cleanupTimeout","clearFsReadRequest","FS_READ_RETENTION_MS","logs","getConsoleLogs","ts","timestamp","args","LOGGING_GET_RET","setupConsoleCapture","original","boundOriginal","bind","recordConsoleEntry","normalizedLevel","isConsoleLogLevel","shouldCaptureLevel","levelOrder","indexOf","toISOString","arg","serializeConsoleArg","truncateSerializedArg","stack","MAX_CONSOLE_ARG_CHARS","preview","original_length","buildTruncatedPreview","seen","WeakSet","buildPreview","depth","MAX_CONSOLE_STRING_PREVIEW_CHARS","truncateString","reason","add","item","remaining","__truncated__","clearFsWriteRequest","clearFsListRequest","fallbackMessage","error_code","cachedPayload","emit","isComplete","explicitName","explicitIuid","payloadName","payloadIuid","includeData","safeData","messagePayload","cached","responseName","freshPayload","fetchDocumentPayload","cachedHash","data_hash","freshHash","isSame","getCardFsErrorCode","NOT_FOUND","cachedIuid","cachedName","cleanupError","NO_PERMISSION","upsertDocumentViaApi","enrichedPayload","existingCode","fetchDocumentMetadataByTarget","deleteIuid","resolvedName","deleted","headers","authHeader","normalizedFolderName","listing","fetchFolderListing","fetchDocumentMetadataByIuid","fetchDocumentMetadataByName","normalizeDocumentsResponse","isStale","UNKNOWN","statusCode","NO_INTERNET","SERVER_ERROR","mime_type","find","search","resolvedTarget","fetchDocumentData","orig","contentType","buildFileFormData","file","File","formData","FormData","append","metadata","existing","uploadResponse","formatErrorMessage","data_to_send","setFileDirty","FILE_DIRTY","getUsername","userObj","some","getFullName"],"sourceRoot":""}