dome-embedded-app-sdk 0.3.4 → 0.3.5-experimental.2
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/card-sdk.d.ts +15 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types/card-sdk.types.d.ts +5 -0
- package/docs/card-sdk.md +14 -10
- package/package.json +1 -1
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/./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};","import pkg from \"../package.json\";\nconst ALLOWED_DEEP_LINK_PROTOCOLS = new Set([\"dome\", \"intouchapp\"]);\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) {\n const message = { type, data: data ?? null };\n switch (this.runtimeHost) {\n case \"android\":\n window.AndroidBridge?.sendMessage(JSON.stringify(message));\n break;\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 if (this.port2) {\n this.port2.postMessage(message);\n }\n else {\n console.error(\"Web connection is not established.\");\n }\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 this.handleMessage(message.type, message.data);\n };\n resolve();\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 const handleMessage = (event) => {\n const { type } = event.data || {};\n if (type !== CommonClientMessageType.CONNECT)\n return;\n if (event.ports && event.ports.length > 0) {\n this.port2 = event.ports[0];\n this.port2.onmessage = (e) => this.handlePortMessage(e);\n window.removeEventListener(\"message\", handleMessage);\n this.notifyConnectionSuccess();\n resolve();\n }\n };\n window.addEventListener(\"message\", handleMessage);\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 break;\n default:\n console.error(\"Unknown host.\");\n reject(\"Unknown host\");\n }\n });\n }\n notifyConnectionSuccess() {\n this.sendMessage(ViewerMessageType.CONNECTION_SUCCESS);\n }\n handlePortMessage(event) {\n const { type, data } = event.data || {};\n if (!type)\n return;\n this.handleMessage(type, data);\n }\n handleMessage(type, data) {\n throw new Error(\"Subclasses must implement handleMessage.\");\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;\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, CardPermission } from \"./types/card-sdk.types\";\nexport { CardFsErrorCode, CardPermission, cardPermission } from \"./types/card-sdk.types\";\nconst CARD_FS_VERSION = \"1.0.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_LISTING_STORE)) {\n db.createObjectStore(CardFsCache.FOLDER_LISTING_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_LISTING_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_LISTING_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 \"/\";\n let normalized = folderName.trim();\n if (!normalized)\n return \"/\";\n normalized = normalized.replace(/^\\/+/, \"\");\n if (!normalized)\n return \"/\";\n if (!normalized.endsWith(\"/\")) {\n normalized += \"/\";\n }\n return normalized;\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 payload = {\n folder_name: CardFsCache.normalizeFolderName(entry.folder_name ?? folderName),\n folder_iuid: entry.folder_iuid,\n last_index: entry.last_index ?? null,\n last_page: entry.last_page ?? null,\n documents: Array.isArray(entry.documents) ? entry.documents : [],\n };\n await new Promise((resolve) => {\n const tx = db.transaction(CardFsCache.FOLDER_LISTING_STORE, \"readwrite\");\n const store = tx.objectStore(CardFsCache.FOLDER_LISTING_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_LISTING_STORE, \"readonly\");\n const store = tx.objectStore(CardFsCache.FOLDER_LISTING_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_LISTING_STORE = \"cardfs_folder_listings\";\nCardFsCache.STORE_VERSION_KEY = \"ver\";\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 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 return !!this.parentCapabilities?.card_fs;\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.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 }\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 // Check for ACK response with messageId\n const messageId = data?.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 case CardClientMessageType.CFS_LIST_FILES_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, onUpdate) => this.cardFSWrite(name, fileData, onUpdate),\n writeById: (iuid, fileData, onUpdate) => this.cardFSWriteById(iuid, fileData, 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) {\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 });\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, onUpdate) {\n const target = { name };\n return this.cardFSWriteInternal(target, fileData, onUpdate, \"write\");\n }\n cardFSWriteById(iuid, fileData, onUpdate) {\n const target = { iuid };\n return this.cardFSWriteInternal(target, fileData, onUpdate, \"writeById\");\n }\n cardFSWriteInternal(target, fileData, onUpdate, operation) {\n if (this.shouldUseCardFsFallback()) {\n console.debug(`cardFS.${operation} using fallback implementation for`, target);\n return this.cardFSWriteFallback(target, fileData)\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 this.sendMessageWithAck(CardMessageType.CFS_WRITE_FILE, this.buildCardFsMessagePayload(target, { data: fileData }), CardClientMessageType.CFS_WRITE_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.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 this.cardFSListFallback(formattedFolderName)\n .then((result) => {\n resolvedHandler.next(this.normalizeListResult(result));\n })\n .catch((err) => {\n resolvedHandler.error?.(this.toCardFsErrorPayload(err));\n });\n return;\n }\n console.debug(\"cardFS.list delegating to parent\");\n const payload = formattedFolderName ? { name: formattedFolderName } : {};\n this.sendMessageWithAck(CardMessageType.CFS_LIST_FILES, payload, CardClientMessageType.CFS_LIST_FILES_ACK, CardSdk.CARD_FS_ACK_TIMEOUT_MS)\n .then((data) => {\n const { messageId: _ignored, ...result } = data || {};\n resolvedHandler.next(this.normalizeListResult(result));\n })\n .catch((err) => {\n resolvedHandler.error?.(this.toCardFsErrorPayload(err));\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 // 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 const sanitized = this.sanitizeReadData(payload?.data, request.name);\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: sanitized.value,\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 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: serialized.slice(0, CardSdk.MAX_CONSOLE_ARG_CHARS),\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 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 failFsWriteRequest(messageId, error) {\n const request = this.clearFsWriteRequest(messageId);\n if (request) {\n request.reject(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 request.resolve(result);\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 firstPayload = null;\n const targetLabel = target.name ? `\"${target.name}\"` : (target.iuid ? `iuid ${target.iuid}` : \"document\");\n const emit = (object, data, fromCache, isComplete, explicitName, explicitIuid) => {\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 { value: safeData } = this.sanitizeReadData(data, payloadName);\n const messagePayload = {\n name: payloadName,\n iuid: payloadIuid,\n object,\n data: safeData,\n is_dirty: !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 this.invokeReadHandlerNext(handler, messagePayload);\n }\n if (!firstPayload) {\n firstPayload = messagePayload;\n }\n return messagePayload;\n };\n let lastCachedPayload = null;\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 lastCachedPayload = emit(cached.object, cached.data, true, false, cached.object?.name ?? target.name, cached.iuid);\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 if (freshPayload) {\n await cache?.cacheDocument(freshPayload.object, freshPayload.data);\n emit(freshPayload.object, freshPayload.data, false, true, freshPayload.object?.name, freshPayload.object?.iuid);\n }\n else if (allowStale && lastCachedPayload) {\n // Host served data; cached entry kept in sync\n emit(lastCachedPayload.object, lastCachedPayload.data, true, true, lastCachedPayload.name, lastCachedPayload.iuid ?? undefined);\n }\n }\n catch (err) {\n if (!firstPayload) {\n const error = err instanceof Error ? err : new Error(String(err));\n throw error;\n }\n console.warn(\"cardFS.read fresh fetch failed\", err);\n if (allowStale && lastCachedPayload) {\n // Fresh fetch failed but we have cache — mark it complete and return data\n emit(lastCachedPayload.object, lastCachedPayload.data, true, true, lastCachedPayload.name, lastCachedPayload.iuid ?? undefined);\n }\n }\n if (!firstPayload) {\n throw new Error(`cardFS.read fallback could not locate ${targetLabel}`);\n }\n }\n async cardFSWriteFallback(target, fileData, 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 await this.upsertDocumentViaApi(cardIuid, target, fileData);\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 return enrichedPayload;\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 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 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 documents: 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 return {\n documents: cachedListing.documents ?? [],\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 throw err;\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 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 // Normalizes arbitrary card data into a File so it can be uploaded via FormData.\n async buildFileFormData(name, fileData) {\n let file;\n // Helper to copy any buffer-like input into a standalone binary blob.\n const toBinaryBlob = (input) => {\n if (input instanceof ArrayBuffer) {\n return new Blob([input.slice(0)], { type: 'application/octet-stream' });\n }\n if (typeof SharedArrayBuffer !== 'undefined' && input instanceof SharedArrayBuffer) {\n const viewFromShared = new Uint8Array(input);\n const copy = new Uint8Array(viewFromShared.length);\n copy.set(viewFromShared);\n return new Blob([copy.buffer], { type: 'application/octet-stream' });\n }\n if (ArrayBuffer.isView(input)) {\n const view = new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n const copy = new Uint8Array(view.length);\n copy.set(view);\n return new Blob([copy.buffer], { type: 'application/octet-stream' });\n }\n const arrayBufferLike = input;\n const view = new Uint8Array(arrayBufferLike);\n const copy = new Uint8Array(view.length);\n copy.set(view);\n return new Blob([copy.buffer], { type: 'application/octet-stream' });\n };\n if (fileData instanceof File) {\n // Already a File from the host page – use as-is.\n file = fileData;\n }\n else if (typeof Blob !== 'undefined' && fileData instanceof Blob) {\n // Blob without a name; wrap it into a File.\n file = new File([fileData], name, { type: fileData.type || 'application/octet-stream' });\n }\n else if (typeof SharedArrayBuffer !== 'undefined' && fileData instanceof SharedArrayBuffer) {\n // SharedArrayBuffer (e.g., from workers) cannot be sent directly; clone the bytes first.\n const blob = toBinaryBlob(fileData);\n file = new File([blob], name, { type: blob.type });\n }\n else if (fileData instanceof ArrayBuffer) {\n // Raw ArrayBuffer data from fetch APIs.\n const blob = toBinaryBlob(fileData);\n file = new File([blob], name, { type: blob.type });\n }\n else if (ArrayBuffer.isView(fileData)) {\n // Typed arrays/DataViews share an ArrayBuffer – copy the view before upload.\n const blob = toBinaryBlob(fileData);\n file = new File([blob], name, { type: blob.type });\n }\n else if (typeof fileData === 'string') {\n // Plain text payload.\n const blob = new Blob([fileData], { type: 'text/plain' });\n file = new File([blob], name, { type: blob.type });\n }\n else {\n // Fallback: JSON stringify structured data.\n const jsonString = JSON.stringify(fileData ?? {});\n const blob = new Blob([jsonString], { type: 'application/json' });\n file = new File([blob], name, { type: blob.type });\n }\n const formData = new FormData();\n formData.append('file', file);\n return formData;\n }\n async upsertDocumentViaApi(cardIuid, target, fileData) {\n const formData = await this.buildFileFormData(target.name ?? target.iuid ?? 'document', fileData);\n if (target.iuid) {\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 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 = 1000;\nCardSdk.MAX_CONSOLE_LOG_ENTRIES = 100;\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","ALLOWED_DEEP_LINK_PROTOCOLS","Set","ViewerMessageType","CommonSdkMessageType","CommonClientMessageType","ViewerClientMessageType","CardClientMessageType","CardMessageType","CardPermission","DomeEmbeddedAppSdk","constructor","targetOrigin","isAppReady","port2","runtimeHost","parentHostDetails","parentCapabilities","handleDeepLinkClick","event","target","Element","anchor","closest","href","getAttribute","emitDeepLink","preventDefault","console","info","detectHost","setupDeepLinkInterception","window","AndroidBridge","webkit","document","addEventListener","trim","warn","protocol","split","toLowerCase","has","sendMessage","OPEN_DEEPLINK","url","updateParentContext","host","capabilities","merged","type","nextCapabilities","host_type","hostType","getHost","data","message","JSON","stringify","messageHandlers","appHandler","postMessage","error","sendAppInit","INIT","sdk","ver","safeInvoke","eventName","handlerObj","handler","String","setupParentConnection","Promise","resolve","reject","receiveFromAndroid","handleMessage","receiveFromIOS","CONNECT","ports","length","onmessage","e","handlePortMessage","removeEventListener","notifyConnectionSuccess","parent","INIT_MESSAGE_CHANNEL","CONNECTION_SUCCESS","Error","getNameString","nameObj","prefix","given","middle","family","suffix","filter","namePart","join","ViewerSdk","super","pendingRequests","Map","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","set","setTimeout","delete","handleOnSave","status","setDirty","isDirty","SET_DIRTY","sendClose","SEND_CLOSE","sendException","SEND_EXCEPTION","INIT_ACK","DATA_CHANGE","REQUEST_CLOSE","SAVE_SUCCESS","SAVE_ERROR","CryptoA01","subtleCrypto","subtle","decrypt","token","password","salt","tokenBytes","base64UrlDecode","slice","iv","ciphertext","hmacFromToken","fullKey","deriveKey","hmacKey","aesKey","splitKey","hmacInput","Uint8Array","sign","every","byte","i","decrypted","name","TextDecoder","decode","log","iterations","encoder","TextEncoder","keyMaterial","importKey","encode","hash","rawKey","exportKey","base64","base64String","replace","decodedString","atob","map","c","charCodeAt","cardPermission","CardFsErrorCode","getKeyFromBlob","blob","decoded","v","seed","obf","out","decodeCardKeyBlobV1","fromCharCode","uint8ArrayToUtf8String","CardFsCache","cardIuid","containerIuid","openPromise","isSupported","indexedDB","openDb","openWithVersion","DB_VERSION","version","infoAction","request","open","onupgradeneeded","oldVersion","configureStores","result","onsuccess","db","hasRequiredStores","nextVersion","close","updateStoresMetadata","finally","onerror","objectStoreNames","contains","DATA_STORE","createObjectStore","NAME_LOOKUP_STORE","INFO_STORE","FOLDER_LISTING_STORE","stores","nowMicros","Math","trunc","Date","now","preserveExistingInfoTs","all","ensureStoreVersion","updateCardInfo","storeName","tx","transaction","store","objectStore","finalize","oncomplete","onabort","put","STORE_VERSION_KEY","preserveExistingTs","existingContainer","readInfoValue","existingTs","undefined","containerValue","timestampValue","writeInfoValue","keyFor","normalizeFolderName","folderName","normalized","endsWith","folderListingKey","normalizeName","trimmed","hashName","cryptoRef","globalThis","digest","encoded","encodeText","bufferToBase64","buffer","binary","bytes","btoa","getIuidForName","hashed","upsertNameLookup","iuid","openCursor","cursor","continue","deleteNameLookupByName","deleteNameLookupByIuid","estimateSize","Blob","size","ArrayBuffer","byteLength","isView","cacheDocument","normalizedName","MAX_DATA_BYTES","getByName","object","getByIuid","deleteByName","entry","deleteByIuid","cacheFolderListing","folder_name","payload","folder_iuid","last_index","last_page","documents","Array","isArray","getFolderListing","CardSdk","buildCardFsMessagePayload","extra","formatFolderPath","assertValidReadHandler","next","assertValidListHandler","invokeReadHandlerNext","invokeReadHandlerError","sanitizeReadData","contextLabel","stripped","label","getCardIuid","dataStore","ensureCardFsCache","shouldUseCardFsFallback","cardFsCache","supportsParentCardFs","card_fs","accessToken","devMode","permission","userRole","fsReadRequests","fsWriteRequests","pendingAcks","consoleCaptureInstalled","consoleCaptureEnabled","consoleCaptureMinLevel","consoleLogBuffer","MAX_CONSOLE_LOG_ENTRIES","fill","consoleLogWriteIndex","consoleLogSize","CFS_ERROR","responseId","messageId","createCardFsError","pending","clearTimeout","timeout","failFsReadRequest","failFsWriteRequest","handleFsAckMessage","ackType","resolvePendingAckByType","applyLoggingConfig","logging","kw1","key_wa1","dev_mode","cryptoA01","denc","kw2","decData","decryptedData","parse","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","CFS_LIST_FILES_ACK","cardFS","read","allowStale","cardFSRead","readById","cardFSReadById","write","fileData","onUpdate","cardFSWrite","writeById","cardFSWriteById","cardFSDelete","deleteById","cardFSDeleteById","list","cardFSList","secret","options","initializeCardSdk","isCardFsFallbackEnabled","openDeepLink","hasPerm","abbr","grantedPermissions","DEFAULT_ROLE_PERMISSIONS","READ","WRITE","deriveSecretSeed","reverse","substring","getCardIuidEnc","segments","pathname","Boolean","requestAf1DataFromParent","requestToken","ackPayload","sendMessageWithAck","AF1_DATA_TOKEN","cie","ck","dev_token","res","fetchAf1Data","dataAf1","data_af1","IT_DATA_AF1","IT_VERSION","env","IT_ENV","devToken","endpoint","URL","encodeURIComponent","searchParams","response","fetch","toString","method","ok","text","statusText","json","TAG","location","urlObject","cardIuidEnc","ss","dataFromServer","ite","d","sendInit","webappDetails","getWebappDetails","wa","keys","timeoutMs","onMessageId","isCardFsAckType","code","TIMEOUT","entries","resolvedHandler","cardFSReadInternal","operation","cardFSReadFallback","toCardFsErrorPayload","registeredMessageId","targetLabel","CFS_READ_FILE","allow_stale","CARD_FS_ACK_TIMEOUT_MS","timeoutMessage","cardFSWriteInternal","cardFSWriteFallback","CFS_WRITE_FILE","onResult","cardFSDeleteInternal","cardFSDeleteFallback","callbackErr","CFS_DELETE_FILE","formattedFolderName","cardFSListFallback","normalizeListResult","CFS_LIST_FILES","resetFsReadProgressTimeout","progressTimeout","FS_RESPONSE_TIMEOUT_MS","resetFsWriteProgressTimeout","sanitized","fromCache","from_cache","is_stale","normalizedPayload","is_dirty","is_complete","cleanupTimeout","clearFsReadRequest","FS_READ_RETENTION_MS","logs","getConsoleLogs","l","ts","timestamp","args","LOGGING_GET_RET","setupConsoleCapture","forEach","original","boundOriginal","bind","recordConsoleEntry","normalizedLevel","isConsoleLogLevel","shouldCaptureLevel","levelOrder","indexOf","toISOString","arg","serializeConsoleArg","min","index","push","truncateSerializedArg","stack","MAX_CONSOLE_ARG_CHARS","preview","original_length","serialized","clearFsWriteRequest","fallbackMessage","error_code","values","cache","firstPayload","emit","isComplete","explicitName","explicitIuid","payloadName","payloadIuid","safeData","messagePayload","lastCachedPayload","cached","freshPayload","fetchDocumentPayload","upsertDocumentViaApi","enrichedPayload","fetchDocumentMetadataByTarget","deleteIuid","resolvedName","deleted","headers","authHeader","normalizedFolderName","listing","fetchFolderListing","cachedListing","fetchDocumentMetadataByIuid","fetchDocumentMetadataByName","normalizeDocumentsResponse","body","results","isStale","find","search","resolvedTarget","fetchDocumentData","orig","contentType","startsWith","arrayBuffer","buildFileFormData","file","toBinaryBlob","input","SharedArrayBuffer","viewFromShared","copy","view","byteOffset","File","jsonString","formData","FormData","append","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/./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};","import pkg from \"../package.json\";\nconst ALLOWED_DEEP_LINK_PROTOCOLS = new Set([\"dome\", \"intouchapp\"]);\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) {\n const message = { type, data: data ?? null };\n switch (this.runtimeHost) {\n case \"android\":\n window.AndroidBridge?.sendMessage(JSON.stringify(message));\n break;\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 if (this.port2) {\n this.port2.postMessage(message);\n }\n else {\n console.error(\"Web connection is not established.\");\n }\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 this.handleMessage(message.type, message.data);\n };\n resolve();\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 const handleMessage = (event) => {\n const { type } = event.data || {};\n if (type !== CommonClientMessageType.CONNECT)\n return;\n if (event.ports && event.ports.length > 0) {\n this.port2 = event.ports[0];\n this.port2.onmessage = (e) => this.handlePortMessage(e);\n window.removeEventListener(\"message\", handleMessage);\n this.notifyConnectionSuccess();\n resolve();\n }\n };\n window.addEventListener(\"message\", handleMessage);\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 break;\n default:\n console.error(\"Unknown host.\");\n reject(\"Unknown host\");\n }\n });\n }\n notifyConnectionSuccess() {\n this.sendMessage(ViewerMessageType.CONNECTION_SUCCESS);\n }\n handlePortMessage(event) {\n const { type, data } = event.data || {};\n if (!type)\n return;\n this.handleMessage(type, data);\n }\n handleMessage(type, data) {\n throw new Error(\"Subclasses must implement handleMessage.\");\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_LISTING_STORE)) {\n db.createObjectStore(CardFsCache.FOLDER_LISTING_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_LISTING_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_LISTING_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 \"/\";\n let normalized = folderName.trim();\n if (!normalized)\n return \"/\";\n normalized = normalized.replace(/^\\/+/, \"\");\n if (!normalized)\n return \"/\";\n if (!normalized.endsWith(\"/\")) {\n normalized += \"/\";\n }\n return normalized;\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 payload = {\n folder_name: CardFsCache.normalizeFolderName(entry.folder_name ?? folderName),\n folder_iuid: entry.folder_iuid,\n last_index: entry.last_index ?? null,\n last_page: entry.last_page ?? null,\n documents: Array.isArray(entry.documents) ? entry.documents : [],\n };\n await new Promise((resolve) => {\n const tx = db.transaction(CardFsCache.FOLDER_LISTING_STORE, \"readwrite\");\n const store = tx.objectStore(CardFsCache.FOLDER_LISTING_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_LISTING_STORE, \"readonly\");\n const store = tx.objectStore(CardFsCache.FOLDER_LISTING_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_LISTING_STORE = \"cardfs_folder_listings\";\nCardFsCache.STORE_VERSION_KEY = \"ver\";\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) {\n if (data == null) {\n return data;\n }\n const normalizedMimeType = typeof mimeType === \"string\" ? mimeType.toLowerCase() : \"\";\n if (!normalizedMimeType) {\n return data;\n }\n const isJson = normalizedMimeType.includes(\"application/json\") || normalizedMimeType.endsWith(\"+json\");\n const isText = normalizedMimeType.startsWith(\"text/\");\n if (isJson) {\n if (data && typeof data === \"object\" && !(data instanceof ArrayBuffer) && !ArrayBuffer.isView(data)) {\n return data;\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 if (isText) {\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 return data;\n }\n encodeTextPayload(data) {\n if (typeof data === \"string\") {\n return data;\n }\n if (data == null) {\n return \"\";\n }\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 }\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 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) {\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 });\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 return this.cardFSWriteInternal(target, fileData, fileType, onUpdate, \"write\");\n }\n cardFSWriteById(iuid, fileData, fileType = CardFsFileType.JSON, onUpdate) {\n const target = { iuid };\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 console.debug(\"cardFS.write sending\", {\n name: target.name,\n iuid: target.iuid,\n file_type: fileType,\n data: normalizedData,\n });\n this.sendMessageWithAck(CardMessageType.CFS_WRITE_FILE, this.buildCardFsMessagePayload(target, { data: normalizedData, file_type: fileType }), CardClientMessageType.CFS_WRITE_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.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 this.cardFSListFallback(formattedFolderName)\n .then((result) => {\n resolvedHandler.next(this.normalizeListResult(result));\n })\n .catch((err) => {\n resolvedHandler.error?.(this.toCardFsErrorPayload(err));\n });\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 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 const sanitized = this.sanitizeReadData(payload?.data, request.name);\n const normalizedData = this.normalizeReadData(sanitized.value, payload?.object?.mimetype);\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 firstPayload = null;\n const targetLabel = target.name ? `\"${target.name}\"` : (target.iuid ? `iuid ${target.iuid}` : \"document\");\n const emit = (object, data, fromCache, isComplete, explicitName, explicitIuid) => {\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 { value: safeData } = this.sanitizeReadData(data, payloadName);\n const normalizedData = this.normalizeReadData(safeData, object?.mimetype);\n const messagePayload = {\n name: payloadName,\n iuid: payloadIuid,\n object,\n data: normalizedData,\n is_dirty: !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 if (!firstPayload) {\n firstPayload = messagePayload;\n }\n return messagePayload;\n };\n let lastCachedPayload = null;\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 lastCachedPayload = emit(cached.object, cached.data, true, false, cached.object?.name ?? target.name, cached.iuid);\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 if (freshPayload) {\n await cache?.cacheDocument(freshPayload.object, freshPayload.data);\n emit(freshPayload.object, freshPayload.data, false, true, freshPayload.object?.name, freshPayload.object?.iuid);\n }\n else if (allowStale && lastCachedPayload) {\n // Host served data; cached entry kept in sync\n emit(lastCachedPayload.object, lastCachedPayload.data, true, true, lastCachedPayload.name, lastCachedPayload.iuid ?? undefined);\n }\n }\n catch (err) {\n if (!firstPayload) {\n const error = err instanceof Error ? err : new Error(String(err));\n throw error;\n }\n console.warn(\"cardFS.read fresh fetch failed\", err);\n if (allowStale && lastCachedPayload) {\n // Fresh fetch failed but we have cache — mark it complete and return data\n emit(lastCachedPayload.object, lastCachedPayload.data, true, true, lastCachedPayload.name, lastCachedPayload.iuid ?? undefined);\n }\n }\n if (!firstPayload) {\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 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 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 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 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 documents: 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 return {\n documents: cachedListing.documents ?? [],\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 throw err;\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 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 const formData = await this.buildFileFormData(target.name ?? target.iuid ?? 'document', fileData, fileType);\n if (target.iuid) {\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 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","ALLOWED_DEEP_LINK_PROTOCOLS","Set","ViewerMessageType","CommonSdkMessageType","CommonClientMessageType","ViewerClientMessageType","CardClientMessageType","CardMessageType","CardPermission","DomeEmbeddedAppSdk","constructor","targetOrigin","isAppReady","port2","runtimeHost","parentHostDetails","parentCapabilities","handleDeepLinkClick","event","target","Element","anchor","closest","href","getAttribute","emitDeepLink","preventDefault","console","info","detectHost","setupDeepLinkInterception","window","AndroidBridge","webkit","debug","document","addEventListener","trim","warn","protocol","split","toLowerCase","has","sendMessage","OPEN_DEEPLINK","url","updateParentContext","host","capabilities","merged","type","nextCapabilities","host_type","hostType","getHost","data","message","JSON","stringify","messageHandlers","appHandler","postMessage","error","sendAppInit","INIT","sdk","ver","safeInvoke","eventName","handlerObj","handler","String","setupParentConnection","Promise","resolve","reject","receiveFromAndroid","handleMessage","receiveFromIOS","CONNECT","ports","length","onmessage","e","handlePortMessage","removeEventListener","notifyConnectionSuccess","parent","INIT_MESSAGE_CHANNEL","CONNECTION_SUCCESS","Error","getNameString","nameObj","prefix","given","middle","family","suffix","filter","namePart","join","ViewerSdk","super","pendingRequests","Map","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","set","setTimeout","delete","handleOnSave","status","setDirty","isDirty","SET_DIRTY","sendClose","SEND_CLOSE","sendException","SEND_EXCEPTION","INIT_ACK","DATA_CHANGE","REQUEST_CLOSE","SAVE_SUCCESS","SAVE_ERROR","CryptoA01","subtleCrypto","subtle","decrypt","token","password","salt","tokenBytes","base64UrlDecode","slice","iv","ciphertext","hmacFromToken","fullKey","deriveKey","hmacKey","aesKey","splitKey","hmacInput","Uint8Array","sign","every","byte","i","decrypted","name","TextDecoder","decode","log","iterations","encoder","TextEncoder","keyMaterial","importKey","encode","hash","rawKey","exportKey","base64","base64String","replace","decodedString","atob","map","c","charCodeAt","cardPermission","CardFsFileType","CardFsErrorCode","CARD_FS_VERSION","getKeyFromBlob","blob","decoded","v","seed","obf","out","decodeCardKeyBlobV1","fromCharCode","uint8ArrayToUtf8String","CardFsCache","cardIuid","containerIuid","openPromise","isSupported","indexedDB","openDb","openWithVersion","DB_VERSION","version","infoAction","request","open","onupgradeneeded","oldVersion","configureStores","result","onsuccess","db","hasRequiredStores","nextVersion","close","updateStoresMetadata","finally","onerror","objectStoreNames","contains","DATA_STORE","createObjectStore","NAME_LOOKUP_STORE","INFO_STORE","FOLDER_LISTING_STORE","stores","nowMicros","Math","trunc","Date","now","preserveExistingInfoTs","all","ensureStoreVersion","updateCardInfo","storeName","tx","transaction","store","objectStore","finalize","oncomplete","onabort","put","STORE_VERSION_KEY","preserveExistingTs","existingContainer","readInfoValue","existingTs","undefined","containerValue","timestampValue","writeInfoValue","keyFor","normalizeFolderName","folderName","normalized","endsWith","folderListingKey","normalizeName","trimmed","hashName","cryptoRef","globalThis","digest","encoded","encodeText","bufferToBase64","buffer","binary","bytes","btoa","getIuidForName","hashed","upsertNameLookup","iuid","openCursor","cursor","continue","deleteNameLookupByName","deleteNameLookupByIuid","estimateSize","Blob","size","ArrayBuffer","byteLength","isView","cacheDocument","normalizedName","MAX_DATA_BYTES","getByName","object","getByIuid","deleteByName","entry","deleteByIuid","cacheFolderListing","folder_name","payload","folder_iuid","last_index","last_page","documents","Array","isArray","getFolderListing","CardSdk","buildCardFsMessagePayload","extra","formatFolderPath","assertValidReadHandler","next","assertValidListHandler","invokeReadHandlerNext","invokeReadHandlerError","sanitizeReadData","contextLabel","stripped","label","normalizeReadData","mimeType","normalizedMimeType","isJson","isText","startsWith","parse","encodeTextPayload","encodeJsonPayload","normalizeWriteData","fileData","fileType","TEXT","BINARY","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","clearTimeout","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","read","allowStale","cardFSRead","readById","cardFSReadById","write","onUpdate","cardFSWrite","writeById","cardFSWriteById","cardFSDelete","deleteById","cardFSDeleteById","list","cardFSList","secret","options","initializeCardSdk","isCardFsFallbackEnabled","openDeepLink","hasPerm","abbr","grantedPermissions","DEFAULT_ROLE_PERMISSIONS","READ","WRITE","deriveSecretSeed","reverse","substring","getCardIuidEnc","segments","pathname","Boolean","requestAf1DataFromParent","requestToken","ackPayload","sendMessageWithAck","AF1_DATA_TOKEN","cie","ck","dev_token","res","fetchAf1Data","dataAf1","data_af1","IT_DATA_AF1","IT_VERSION","env","IT_ENV","devToken","endpoint","URL","encodeURIComponent","searchParams","response","fetch","toString","method","ok","text","statusText","json","TAG","location","urlObject","cardIuidEnc","ss","dataFromServer","ite","d","sendInit","webappDetails","getWebappDetails","wa","keys","timeoutMs","onMessageId","isCardFsAckType","code","TIMEOUT","entries","resolvedHandler","cardFSReadInternal","operation","cardFSReadFallback","toCardFsErrorPayload","registeredMessageId","targetLabel","CFS_READ_FILE","allow_stale","CARD_FS_ACK_TIMEOUT_MS","timeoutMessage","cardFSWriteInternal","cardFSWriteFallback","normalizedData","file_type","CFS_WRITE_FILE","onResult","cardFSDeleteInternal","cardFSDeleteFallback","callbackErr","CFS_DELETE_FILE","formattedFolderName","cardFSListFallback","normalizeListResult","resetFsListProgressTimeout","CFS_LIST_FILES","resetFsReadProgressTimeout","progressTimeout","FS_RESPONSE_TIMEOUT_MS","resetFsWriteProgressTimeout","sanitized","mimetype","fromCache","from_cache","is_stale","normalizedPayload","is_dirty","is_complete","cleanupTimeout","clearFsReadRequest","FS_READ_RETENTION_MS","logs","getConsoleLogs","l","ts","timestamp","args","LOGGING_GET_RET","setupConsoleCapture","forEach","original","boundOriginal","bind","recordConsoleEntry","normalizedLevel","isConsoleLogLevel","shouldCaptureLevel","levelOrder","indexOf","toISOString","arg","serializeConsoleArg","min","index","push","truncateSerializedArg","stack","MAX_CONSOLE_ARG_CHARS","preview","original_length","serialized","buildTruncatedPreview","seen","WeakSet","buildPreview","input","depth","MAX_CONSOLE_STRING_PREVIEW_CHARS","truncateString","reason","add","item","remaining","entryValue","__truncated__","clearFsWriteRequest","clearFsListRequest","fallbackMessage","error_code","values","cache","firstPayload","emit","isComplete","explicitName","explicitIuid","payloadName","payloadIuid","safeData","messagePayload","lastCachedPayload","cached","freshPayload","fetchDocumentPayload","upsertDocumentViaApi","enrichedPayload","fetchDocumentMetadataByTarget","deleteIuid","resolvedName","deleted","headers","authHeader","normalizedFolderName","listing","fetchFolderListing","cachedListing","fetchDocumentMetadataByIuid","fetchDocumentMetadataByName","normalizeDocumentsResponse","body","results","isStale","find","search","resolvedTarget","fetchDocumentData","orig","contentType","arrayBuffer","buildFileFormData","file","File","formData","FormData","append","existing","uploadResponse","formatErrorMessage","data_to_send","setFileDirty","FILE_DIRTY","getUsername","userObj","some","getFullName"],"sourceRoot":""}
|