dome-embedded-app-sdk 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://domeSdk/webpack/universalModuleDefinition","webpack://domeSdk/webpack/bootstrap","webpack://domeSdk/webpack/runtime/define property getters","webpack://domeSdk/webpack/runtime/hasOwnProperty shorthand","webpack://domeSdk/webpack/runtime/make namespace object","webpack://domeSdk/./node_modules/cbor-x/decode.js","webpack://domeSdk/./node_modules/cbor-x/encode.js","webpack://domeSdk/./src/critical-error.ts","webpack://domeSdk/./src/dome-sdk.ts","webpack://domeSdk/./src/types/card-sdk.types.ts","webpack://domeSdk/./src/utils.ts","webpack://domeSdk/./src/viewer-sdk.ts","webpack://domeSdk/./src/crypto.ts","webpack://domeSdk/./src/card-sdk.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"domeSdk\"] = factory();\n\telse\n\t\troot[\"domeSdk\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","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 full-document critical error page written by renderCriticalErrorPage().\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: grid;\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\t `;\n// Escape dynamic values before injecting them into the HTML template string.\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 the current document with a self-contained critical error page.\n// Used when the SDK cannot establish required host communication (Android timeout path).\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 // Full document replacement is intentional to prevent host app markup from remaining visible.\n const pageHtml = `\n<!DOCTYPE html>\n<html lang=\"${safeLang}\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>${safeTitle}</title>\n <style>${CRITICAL_ERROR_STYLES}</style>\n </head>\n <body class=\"dome-sdk-critical-error\">\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 </body>\n</html>\n `;\n document.open();\n document.write(pageHtml);\n document.close();\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.\");\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 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 if (segments.length < 2) {\n return null;\n }\n const token = segments[1]?.split(\"/\")[0] ?? null;\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 const requestToken = urlObject.searchParams.get(\"rt\");\n if (!requestToken) {\n throw new Error('Missing request token');\n }\n let cardIuidEnc = this.getCardIuidEnc(urlObject);\n let data_af1 = window.IT_DATA_AF1;\n if (!data_af1) {\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 const decData = await this.cryptoA01.decrypt(data_af1, secret, ss);\n try {\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(\"Initial Decryption failed (2):\", err);\n throw err;\n }\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":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","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","Decoder","constructor","options","keyMap","_keyMap","undefined","getStructures","getShared","structures","uninitialized","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","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","writeEntityLength","majorValue","setUint32","SharedData","writeArrayHeader","BlobConstructor","Blob","isBlob","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","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","document","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","title","errorCode","lang","safeTitle","safeErrorCode","safeSupportLabel","pageHtml","open","write","close","renderCriticalErrorPage","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","getKeyFromBlob","blob","seed","obf","out","decodeCardKeyBlobV1","uint8ArrayToUtf8String","CardFsCache","cardIuid","containerIuid","openPromise","isSupported","indexedDB","openDb","openWithVersion","DB_VERSION","infoAction","request","onupgradeneeded","oldVersion","configureStores","onsuccess","db","hasRequiredStores","nextVersion","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","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","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","searchParams","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","body","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":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://domeSdk/webpack/universalModuleDefinition","webpack://domeSdk/webpack/bootstrap","webpack://domeSdk/webpack/runtime/define property getters","webpack://domeSdk/webpack/runtime/hasOwnProperty shorthand","webpack://domeSdk/webpack/runtime/make namespace object","webpack://domeSdk/./node_modules/cbor-x/decode.js","webpack://domeSdk/./node_modules/cbor-x/encode.js","webpack://domeSdk/./src/critical-error.ts","webpack://domeSdk/./src/dome-sdk.ts","webpack://domeSdk/./src/types/card-sdk.types.ts","webpack://domeSdk/./src/utils.ts","webpack://domeSdk/./src/viewer-sdk.ts","webpack://domeSdk/./src/crypto.ts","webpack://domeSdk/./src/card-sdk.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"domeSdk\"] = factory();\n\telse\n\t\troot[\"domeSdk\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","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 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 if (segments.length < 2) {\n return null;\n }\n const token = segments[1]?.split(\"/\")[0] ?? null;\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 const requestToken = urlObject.searchParams.get(\"rt\");\n if (!requestToken) {\n throw new Error('Missing request token');\n }\n let cardIuidEnc = this.getCardIuidEnc(urlObject);\n let data_af1 = window.IT_DATA_AF1;\n if (!data_af1) {\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 const decData = await this.cryptoA01.decrypt(data_af1, secret, ss);\n try {\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(\"Initial Decryption failed (2):\", err);\n throw err;\n }\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":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","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","Decoder","constructor","options","keyMap","_keyMap","undefined","getStructures","getShared","structures","uninitialized","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","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","writeEntityLength","majorValue","setUint32","SharedData","writeArrayHeader","BlobConstructor","Blob","isBlob","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","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","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","searchParams","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":""}