@seedprotocol/sdk 0.7.2 → 0.7.3-next.654.g52217f6
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/{BasePathResolver-BdxCSIzn.js → BasePathResolver-CfSfMW5_.js} +7 -10
- package/dist/BasePathResolver-CfSfMW5_.js.map +1 -0
- package/dist/{ClientManager-ClCwwhwo.js → ClientManager-C-QXqUK9.js} +438 -153
- package/dist/ClientManager-C-QXqUK9.js.map +1 -0
- package/dist/{Item-B9Y4VuK1.js → Item-C7sUUu2B.js} +291 -105
- package/dist/Item-C7sUUu2B.js.map +1 -0
- package/dist/{ModelProperty-BMePcicQ.js → ModelProperty-DJxeOOrc.js} +28 -27
- package/dist/ModelProperty-DJxeOOrc.js.map +1 -0
- package/dist/{Schema-COsEXXaR.js → Schema-fXtvd-yL.js} +30 -30
- package/dist/{Schema-COsEXXaR.js.map → Schema-fXtvd-yL.js.map} +1 -1
- package/dist/{SchemaValidationService-DabGMzSE.js → SchemaValidationService-CvRS2HSO.js} +10 -9
- package/dist/{SchemaValidationService-DabGMzSE.js.map → SchemaValidationService-CvRS2HSO.js.map} +1 -1
- package/dist/{backfillMetadataPropertyIds-Ck6fumnm.js → backfillMetadataPropertyIds-SXW-8C64.js} +4 -4
- package/dist/{backfillMetadataPropertyIds-Ck6fumnm.js.map → backfillMetadataPropertyIds-SXW-8C64.js.map} +1 -1
- package/dist/cjs/{ModelProperty-BT6Un_MB.js → ModelProperty-DXZ39Wyv.js} +24 -23
- package/dist/cjs/{ModelProperty-BT6Un_MB.js.map → ModelProperty-DXZ39Wyv.js.map} +1 -1
- package/dist/cjs/{Schema-BXhXdUsA.js → Schema-DdP109QD.js} +26 -25
- package/dist/cjs/{Schema-BXhXdUsA.js.map → Schema-DdP109QD.js.map} +1 -1
- package/dist/cjs/{SchemaValidationService-CC18QDfc.js → SchemaValidationService-CSXxx7sQ.js} +5 -4
- package/dist/cjs/{SchemaValidationService-CC18QDfc.js.map → SchemaValidationService-CSXxx7sQ.js.map} +1 -1
- package/dist/cjs/{backfillMetadataPropertyIds-DEHC9ejq.js → backfillMetadataPropertyIds-CPYoaMl4.js} +6 -5
- package/dist/cjs/{backfillMetadataPropertyIds-DEHC9ejq.js.map → backfillMetadataPropertyIds-CPYoaMl4.js.map} +1 -1
- package/dist/cjs/{eas-C3CL0l7l.js → eas-B2YDQssV.js} +6 -5
- package/dist/cjs/{eas-C3CL0l7l.js.map → eas-B2YDQssV.js.map} +1 -1
- package/dist/cjs/{getItem-CrwWYCkj.js → getItem-DgnaQzbE.js} +5 -4
- package/dist/cjs/{getItem-CrwWYCkj.js.map → getItem-DgnaQzbE.js.map} +1 -1
- package/dist/cjs/{getPublishPayload-DRJh7WR0.js → getPublishPayload-CqlqRdot.js} +12 -11
- package/dist/cjs/{getPublishPayload-DRJh7WR0.js.map → getPublishPayload-CqlqRdot.js.map} +1 -1
- package/dist/cjs/getPublishUploads-DsXY9S4U.js +872 -0
- package/dist/cjs/getPublishUploads-DsXY9S4U.js.map +1 -0
- package/dist/cjs/{index-BA1RIYFG.js → index-BHaWOwNF.js} +6 -5
- package/dist/cjs/index-BHaWOwNF.js.map +1 -0
- package/dist/cjs/{index-Dls7aMjr.js → index-C4XlgCJ4.js} +1200 -528
- package/dist/cjs/index-C4XlgCJ4.js.map +1 -0
- package/dist/cjs/{property-ZerTWizX.js → property-fa0iju0J.js} +8 -7
- package/dist/cjs/{property-ZerTWizX.js.map → property-fa0iju0J.js.map} +1 -1
- package/dist/cjs/{publishDraftGraph-CPOAcQFf.js → publishDraftGraph-3ASwAlD7.js} +4 -4
- package/dist/cjs/{publishDraftGraph-CPOAcQFf.js.map → publishDraftGraph-3ASwAlD7.js.map} +1 -1
- package/dist/cjs/{resetAmbiguousLegacyItemData-adDl4LcT.js → resetAmbiguousLegacyItemData-Bu_MBBYt.js} +5 -4
- package/dist/cjs/{resetAmbiguousLegacyItemData-adDl4LcT.js.map → resetAmbiguousLegacyItemData-Bu_MBBYt.js.map} +1 -1
- package/dist/cjs/{resolveModelForSyncedSeed-DoNThPdL.js → resolveModelForSyncedSeed-BANIiuFU.js} +2 -2
- package/dist/cjs/{resolveModelForSyncedSeed-DoNThPdL.js.map → resolveModelForSyncedSeed-BANIiuFU.js.map} +1 -1
- package/dist/cjs/{syncDbWithEas-CYfPkus9.js → syncDbWithEas-CrmxxmUW.js} +10 -9
- package/dist/cjs/{syncDbWithEas-CYfPkus9.js.map → syncDbWithEas-CrmxxmUW.js.map} +1 -1
- package/dist/{configurePlatform-xU3Hsno3.js → configurePlatform-BRw2j0ZN.js} +7 -4
- package/dist/{configurePlatform-xU3Hsno3.js.map → configurePlatform-BRw2j0ZN.js.map} +1 -1
- package/dist/{db-W1g29qsM.js → db-D9K_f5cF.js} +14 -14
- package/dist/{db-W1g29qsM.js.map → db-D9K_f5cF.js.map} +1 -1
- package/dist/{eas-CSwV6MvB.js → eas-DHxfswCt.js} +8 -5
- package/dist/eas-DHxfswCt.js.map +1 -0
- package/dist/{getItem-BYQeM3DY.js → getItem-d6N_aM6S.js} +8 -5
- package/dist/{getItem-BYQeM3DY.js.map → getItem-d6N_aM6S.js.map} +1 -1
- package/dist/{getPublishPayload-D5CQZd-y.js → getPublishPayload-BHrxVtzY.js} +16 -16
- package/dist/{getPublishPayload-D5CQZd-y.js.map → getPublishPayload-BHrxVtzY.js.map} +1 -1
- package/dist/getPublishUploads-BEqRiKIS.js +657 -0
- package/dist/getPublishUploads-BEqRiKIS.js.map +1 -0
- package/dist/{index-Bev-hZF-.js → index-CiMEoGu3.js} +12 -11
- package/dist/index-CiMEoGu3.js.map +1 -0
- package/dist/{index-CSOQFAOn.js → index-DglvthOk.js} +2 -2
- package/dist/index-DglvthOk.js.map +1 -0
- package/dist/{index-DRXC5Mra.js → index-s15q14rm.js} +29 -29
- package/dist/{index-DRXC5Mra.js.map → index-s15q14rm.js.map} +1 -1
- package/dist/{index.browser-DO20vYuP.js → index.browser-Cm06tP4X.js} +553 -165
- package/dist/index.browser-Cm06tP4X.js.map +1 -0
- package/dist/{index.node-C4iyOhdo.js → index.node-C30dmFgn.js} +5 -5
- package/dist/{index.node-C4iyOhdo.js.map → index.node-C30dmFgn.js.map} +1 -1
- package/dist/main.cjs +4 -3
- package/dist/main.cjs.map +1 -1
- package/dist/main.js +32 -44
- package/dist/main.js.map +1 -1
- package/dist/mimeTypes-DHAHC4eZ.js +204 -0
- package/dist/mimeTypes-DHAHC4eZ.js.map +1 -0
- package/dist/node.js +13 -12
- package/dist/node.js.map +1 -1
- package/dist/platform.browser.js +9 -7
- package/dist/platform.browser.js.map +1 -1
- package/dist/platform.node.js +3 -3
- package/dist/{property-BT1zDSkd.js → property-DhmmYAvQ.js} +12 -9
- package/dist/property-DhmmYAvQ.js.map +1 -0
- package/dist/{publishDraftGraph-Bcfrdj7-.js → publishDraftGraph-yYP74WRt.js} +8 -8
- package/dist/{publishDraftGraph-Bcfrdj7-.js.map → publishDraftGraph-yYP74WRt.js.map} +1 -1
- package/dist/{resetAmbiguousLegacyItemData-Ci6PM_vC.js → resetAmbiguousLegacyItemData-Bk0QyDW8.js} +2 -2
- package/dist/{resetAmbiguousLegacyItemData-Ci6PM_vC.js.map → resetAmbiguousLegacyItemData-Bk0QyDW8.js.map} +1 -1
- package/dist/{resolveModelForSyncedSeed-CLlumTBq.js → resolveModelForSyncedSeed-8cAzvUFd.js} +2 -2
- package/dist/{resolveModelForSyncedSeed-CLlumTBq.js.map → resolveModelForSyncedSeed-8cAzvUFd.js.map} +1 -1
- package/dist/src/Item/Item.d.ts +1 -1
- package/dist/src/Item/Item.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +1 -1
- package/dist/src/browser/helpers/FileManager.d.ts +4 -1
- package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
- package/dist/src/browser/helpers/tolerantWebAccess.d.ts +79 -4
- package/dist/src/browser/helpers/tolerantWebAccess.d.ts.map +1 -1
- package/dist/src/browser/workers/FileDownloader.d.ts +19 -4
- package/dist/src/browser/workers/FileDownloader.d.ts.map +1 -1
- package/dist/src/browser/workers/filesDownload.d.ts.map +1 -1
- package/dist/src/client/clientManagerMachine.d.ts.map +1 -1
- package/dist/src/db/migrateLegacyItemStorageRows.d.ts +57 -0
- package/dist/src/db/migrateLegacyItemStorageRows.d.ts.map +1 -0
- package/dist/src/db/read/getCompositeChildPaths.d.ts +13 -0
- package/dist/src/db/read/getCompositeChildPaths.d.ts.map +1 -0
- package/dist/src/db/read/getItems.d.ts.map +1 -1
- package/dist/src/db/read/getPublishUploads.d.ts +32 -3
- package/dist/src/db/read/getPublishUploads.d.ts.map +1 -1
- package/dist/src/db/read/summarizePublishWork.d.ts.map +1 -1
- package/dist/src/db/write/convertVerbatimItemStorageRow.d.ts +44 -0
- package/dist/src/db/write/convertVerbatimItemStorageRow.d.ts.map +1 -0
- package/dist/src/db/write/createNewItem.d.ts.map +1 -1
- package/dist/src/events/files/download.d.ts.map +1 -1
- package/dist/src/helpers/FileManager/BaseFileManager.d.ts +3 -3
- package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
- package/dist/src/helpers/FileManager/IFileManager.d.ts +25 -1
- package/dist/src/helpers/FileManager/IFileManager.d.ts.map +1 -1
- package/dist/src/helpers/arweaveContentTags.d.ts +33 -0
- package/dist/src/helpers/arweaveContentTags.d.ts.map +1 -0
- package/dist/src/helpers/compositeUpload.d.ts +28 -0
- package/dist/src/helpers/compositeUpload.d.ts.map +1 -0
- package/dist/src/helpers/itemStorageFile.d.ts +57 -0
- package/dist/src/helpers/itemStorageFile.d.ts.map +1 -0
- package/dist/src/helpers/mapWithConcurrency.d.ts +7 -0
- package/dist/src/helpers/mapWithConcurrency.d.ts.map +1 -0
- package/dist/src/helpers/mimeTypes.d.ts +43 -0
- package/dist/src/helpers/mimeTypes.d.ts.map +1 -0
- package/dist/src/helpers/ownership.d.ts +19 -3
- package/dist/src/helpers/ownership.d.ts.map +1 -1
- package/dist/src/helpers/storageDir.d.ts +16 -0
- package/dist/src/helpers/storageDir.d.ts.map +1 -0
- package/dist/src/helpers/tabCoordinator.d.ts +5 -1
- package/dist/src/helpers/tabCoordinator.d.ts.map +1 -1
- package/dist/src/helpers/tabEvents.d.ts +23 -2
- package/dist/src/helpers/tabEvents.d.ts.map +1 -1
- package/dist/src/helpers/tabLocks.d.ts +11 -1
- package/dist/src/helpers/tabLocks.d.ts.map +1 -1
- package/dist/src/index.d.ts +6 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/types/fileManager.d.ts +3 -14
- package/dist/src/types/fileManager.d.ts.map +1 -1
- package/dist/src/types/publish.d.ts +14 -0
- package/dist/src/types/publish.d.ts.map +1 -1
- package/dist/{syncDbWithEas-BQsXjGhe.js → syncDbWithEas--HUA9WNb.js} +15 -14
- package/dist/syncDbWithEas--HUA9WNb.js.map +1 -0
- package/dist/{tabEvents-C9qUKx_z.js → tabEvents-DguZpCCv.js} +338 -60
- package/dist/tabEvents-DguZpCCv.js.map +1 -0
- package/dist/tolerantWebAccess-BZYWt09Y.js +551 -0
- package/dist/tolerantWebAccess-BZYWt09Y.js.map +1 -0
- package/dist/{updateSeedRevokedAt-D6q0h7pj.js → updateSeedRevokedAt-D_EG-q3b.js} +3 -3
- package/dist/{updateSeedRevokedAt-D6q0h7pj.js.map → updateSeedRevokedAt-D_EG-q3b.js.map} +1 -1
- package/package.json +5 -5
- package/dist/BasePathResolver-BdxCSIzn.js.map +0 -1
- package/dist/ClientManager-ClCwwhwo.js.map +0 -1
- package/dist/Item-B9Y4VuK1.js.map +0 -1
- package/dist/ModelProperty-BMePcicQ.js.map +0 -1
- package/dist/cjs/getPublishUploads-Bh22D3zJ.js +0 -495
- package/dist/cjs/getPublishUploads-Bh22D3zJ.js.map +0 -1
- package/dist/cjs/index-BA1RIYFG.js.map +0 -1
- package/dist/cjs/index-Dls7aMjr.js.map +0 -1
- package/dist/eas-CSwV6MvB.js.map +0 -1
- package/dist/getPublishUploads-BGpDsrBp.js +0 -484
- package/dist/getPublishUploads-BGpDsrBp.js.map +0 -1
- package/dist/index-Bev-hZF-.js.map +0 -1
- package/dist/index-CSOQFAOn.js.map +0 -1
- package/dist/index.browser-DO20vYuP.js.map +0 -1
- package/dist/property-BT1zDSkd.js.map +0 -1
- package/dist/syncDbWithEas-BQsXjGhe.js.map +0 -1
- package/dist/tabEvents-C9qUKx_z.js.map +0 -1
- package/dist/tolerantWebAccess-B-9bwxbw.js +0 -160
- package/dist/tolerantWebAccess-B-9bwxbw.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.browser-DO20vYuP.js","sources":["../../src/browser/helpers/PathResolver.ts","../../src/db/write/addExcludedTransactions.ts","../../src/browser/workers/filesDownload.ts","../../src/browser/workers/FileDownloader.ts","../../src/browser/workers/imageResize.ts","../../src/browser/workers/ImageResizer.ts","../../src/browser/helpers/opfsErrors.ts","../../src/browser/helpers/FileManager.ts","../../src/browser/db/drizzleFiles.ts","../../src/browser/db/embeddedMigrations.ts","../../src/browser/db/sqliteBusyRetry.ts","../../src/browser/db/createSqlocalDrizzle.ts","../../src/browser/db/Db.ts","../../src/browser/helpers/ArweaveClient.ts","../../src/browser/helpers/EasClient.ts","../../src/browser/helpers/QueryClient.ts","../../src/platform/index.browser.ts"],"sourcesContent":["import type { IPathResolver } from '@/helpers/PathResolver/IPathResolver'\nimport { BasePathResolver } from '@/helpers/PathResolver/BasePathResolver'\n\nexport class BrowserPathResolver implements IPathResolver {\n /** @deprecated Prefer BasePathResolver static methods or configure(). */\n static getInstance(): IPathResolver {\n return BasePathResolver.getInstance()\n }\n\n /**\n * Gets the root directory containing node_modules\n * Note: In browser, this returns a virtual path based on OPFS\n */\n getRootWithNodeModules(): string {\n // In browser, we use OPFS which doesn't have traditional paths\n // Return a virtual root path\n return '/'\n }\n\n /**\n * Gets the SDK root directory\n * Note: In browser, this returns a virtual path\n */\n getSdkRootDir(): string {\n // In browser, SDK is bundled, so we return a virtual path\n return '/sdk'\n }\n\n getNodeModulesDir(): string {\n // In browser, node_modules don't exist in the traditional sense\n return '/node_modules'\n }\n\n /**\n * Gets the .seed directory path\n * Note: In browser, this returns the OPFS path where .seed data is stored\n */\n getDotSeedDir(schemaFileDir?: string): string {\n // In browser, .seed directory is stored in OPFS\n // The actual path is handled by the FileManager\n return '/.seed'\n }\n\n /**\n * Finds the Seed Protocol config file\n * Note: In browser, config files are not accessible via filesystem\n */\n findConfigFile(searchDir?: string): string | null {\n // In browser, config files are typically embedded in the bundle\n // or loaded via fetch/import\n return null\n }\n\n /**\n * Gets paths for app-specific directories\n * Note: In browser, these are virtual paths for OPFS\n */\n getAppPaths(schemaFileDir?: string | undefined) {\n const dotSeedDir = this.getDotSeedDir(schemaFileDir)\n\n return {\n sdkRootDir: this.getSdkRootDir(),\n dotSeedDir,\n nodeModulesDir: this.getNodeModulesDir(),\n appSchemaDir: `${dotSeedDir}/schema`,\n appDbDir: `${dotSeedDir}/db`,\n appMetaDir: `${dotSeedDir}/db/meta`,\n }\n }\n}\n\n/** @deprecated Prefer BrowserPathResolver. */\nexport const PathResolver = BrowserPathResolver\n\nBasePathResolver.configure(new BrowserPathResolver())\n\nconst _check: IPathResolver = new BrowserPathResolver()\nvoid _check\n","import { eq } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { appState } from '@/seedSchema'\nimport { withDbTabLock } from '@/helpers/tabCoordinator'\n\nconst KEY = 'excludedTransactions'\n\n/**\n * Adds transaction ids to the `excludedTransactions` app_state list (txs no gateway could serve).\n * Reads, merges and writes under a cross-tab lock: writing a whole list read earlier lost the ids\n * another tab or download had added in between.\n */\nexport async function addExcludedTransactions(transactionIds: Iterable<string>): Promise<void> {\n const additions = [...transactionIds]\n if (additions.length === 0) return\n\n await withDbTabLock('excluded-transactions', async () => {\n const appDb = BaseDb.getAppDb()\n const rows = await appDb.select().from(appState).where(eq(appState.key, KEY)).limit(1)\n\n const merged = new Set<string>()\n try {\n for (const id of JSON.parse(rows[0]?.value ?? '[]') as string[]) merged.add(id)\n } catch {\n // Unreadable list: start over with the new ids.\n }\n const sizeBefore = merged.size\n for (const id of additions) merged.add(id)\n if (merged.size === sizeBefore && rows.length > 0) return\n\n const value = JSON.stringify([...merged])\n await appDb\n .insert(appState)\n .values({ key: KEY, value })\n .onConflictDoUpdate({ target: appState.key, set: { value } })\n })\n}\n","export default `(\n ${\n function () {\n\nconst identifyString = (str: string) => {\n try {\n JSON.parse(str)\n return 'json'\n } catch (e) {\n // Not JSON\n }\n\n if (!str) {\n return\n }\n\n if (str.trim().startsWith('<') && str.trim().endsWith('>')) {\n return 'html'\n }\n\n // Simple markdown checks (very naive)\n if (/^#{1,6}\\s|^-{3,}|\\*{3,}|^-{1,2}\\s|\\*\\s/.test(str)) {\n return 'markdown'\n }\n\n if (/^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/.test(str)) {\n return 'base64'\n }\n\n // Default to plain text if unsure\n return 'text'\n}\n\nconst getMimeType = (base64: string) => {\n if (!base64) {\n return null\n }\n const result = base64.match(/^data:([a-zA-Z0-9]+\\/[a-zA-Z0-9-.+]+).*,/)\n\n if (result && result.length > 1) {\n return result[1]\n } else {\n return null // MIME type could not be determined\n }\n}\n\nconst getDataTypeFromString = (\n data: string,\n): 'imageBase64' | 'base64' | 'url' | null => {\n const nonImageBase64Regex =\n /^(?!data:image\\/(?:jpeg|png|gif|bmp|webp);base64,)[A-Za-z0-9+/=]+$/\n\n if (nonImageBase64Regex.test(data)) {\n return 'base64'\n }\n\n // Regular expression for base64 (simple version, checking for base64 format)\n const imageBase64Regex = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/\n\n if (imageBase64Regex.test(data)) {\n return 'imageBase64'\n }\n\n // Regular expression for URL (simple version, checking for common URL format)\n const urlRegex =\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$/\n\n if (urlRegex.test(data)) {\n return 'url'\n }\n\n return null\n}\n\nconst isBinary = (arrayBuffer: ArrayBuffer): boolean => {\n const view = new Uint8Array(arrayBuffer);\n\n let nonTextCount = 0;\n const threshold = 0.2; // Adjust as needed (e.g., 20% non-text implies binary)\n\n for (let i = 0; i < view.length; i++) {\n const byte = view[i];\n\n // ASCII printable characters (32-126) and common whitespace (9, 10, 13)\n if (\n (byte >= 32 && byte <= 126) || // Printable ASCII\n byte === 9 || byte === 10 || byte === 13 // Tab, LF, CR\n ) {\n continue;\n }\n\n nonTextCount++;\n if (nonTextCount / view.length > threshold) {\n return true; // More than threshold are non-text bytes\n }\n }\n\n return false; // Fewer than threshold are non-text bytes\n}\n\nconst saveBufferToOPFS = async (filePath: string, buffer: Uint8Array): Promise<void> => {\n // Access the OPFS root directory\n const rootHandle = await navigator.storage.getDirectory();\n\n // Split the filePath into directory segments and file name\n const segments = filePath.split('/').filter(Boolean);\n const fileName = segments.pop(); // Extract the file name\n if (!fileName) {\n throw new Error('Invalid file path: No file name provided.');\n }\n\n // Traverse or create directories as needed\n let currentDirHandle = rootHandle;\n for (const segment of segments) {\n currentDirHandle = await currentDirHandle.getDirectoryHandle(segment, { create: true });\n }\n\n // Create or open the file in OPFS\n const fileHandleAsync = await currentDirHandle.getFileHandle(fileName, { create: true });\n\n const write = async () => {\n const fileHandle = await fileHandleAsync.createSyncAccessHandle();\n try {\n // Drop any previous, longer contents before writing from the start\n fileHandle.truncate(0);\n fileHandle.write(buffer, { at: 0 });\n fileHandle.flush();\n } finally {\n // A leaked handle keeps the file locked for the worker's lifetime\n fileHandle.close();\n }\n }\n\n // A sync access handle is exclusive: a download of the same file in another tab or worker would\n // make createSyncAccessHandle throw, so writers of one path take turns.\n if (navigator.locks) {\n await navigator.locks.request(`seed:opfs-write:${filePath}`, write);\n } else {\n await write();\n }\n\n // Written past ZenFS: the page refreshes its cache for this path and tells other tabs.\n globalThis.postMessage({ message: 'fileSaved', filePath });\n}\n\nconst getFilesPath = (filesRoot: string, ...parts: string[]) => {\n const root = filesRoot.replace(/\\/$/, '')\n return [root, ...parts].filter(Boolean).join('/').replace(/\\/+/g, '/')\n}\n\nconst toBaseUrl = (hostOrUrl: string): string => {\n const h = (hostOrUrl || '').trim().replace(/\\/$/, '')\n if (!h) return ''\n if (h.startsWith('http://') || h.startsWith('https://')) return h\n const protocol =\n h.startsWith('127.0.0.1') || h.startsWith('localhost') || h.includes(':1984')\n ? 'http'\n : 'https'\n return `${protocol}://${h}`\n}\n\n/**\n * GET /raw/{id} from each gateway in order. `networkFailedEverywhere` is true only when no gateway\n * answered at all; a non-2xx (e.g. not yet propagated) is not a reason to exclude the transaction.\n */\nconst fetchRaw = async (\n baseUrls: string[],\n transactionId: string,\n): Promise<{ arrayBuffer?: ArrayBuffer; networkFailedEverywhere: boolean }> => {\n let answered = false\n for (const base of baseUrls) {\n try {\n const response = await fetch(`${base}/raw/${transactionId}`)\n answered = true\n if (!response.ok) continue\n const arrayBuffer = await response.arrayBuffer()\n if (arrayBuffer.byteLength > 0) {\n return { arrayBuffer, networkFailedEverywhere: false }\n }\n } catch (error) {\n /* next gateway */\n }\n }\n return { networkFailedEverywhere: !answered }\n}\n\nconst downloadFiles = async ({\n transactionIds,\n arweaveHost,\n arweaveBaseUrls,\n filesRoot = '/files',\n}: {\n transactionIds: string[],\n arweaveHost: string,\n arweaveBaseUrls?: string[],\n filesRoot?: string,\n}) => {\n\n // Preferred / resolved gateways first, then the configured host; deduped.\n const baseUrls: string[] = []\n for (const candidate of (arweaveBaseUrls || []).concat([arweaveHost])) {\n const base = toBaseUrl(candidate)\n if (base && baseUrls.indexOf(base) === -1) {\n baseUrls.push(base)\n }\n }\n\n for (const transactionId of transactionIds) {\n const { arrayBuffer, networkFailedEverywhere } = await fetchRaw(baseUrls, transactionId)\n\n if (!arrayBuffer) {\n if (networkFailedEverywhere) {\n globalThis.postMessage({\n message: 'excludeTransaction',\n transactionId,\n })\n }\n continue\n }\n\n let dataString\n const isBinaryData = isBinary(arrayBuffer)\n\n if (!isBinaryData) {\n const decoder = new TextDecoder('utf-8')\n const text = decoder.decode(arrayBuffer)\n dataString = text\n }\n\n if (dataString && dataString.startsWith('===FILE_SEPARATOR===')) {\n const dataStringParts = dataString\n .split('===FILE_SEPARATOR===')\n .slice(1)\n\n if (dataStringParts.length % 2 !== 0) {\n throw new Error('Input array must have an even number of elements.')\n }\n\n for (let i = 0; i < dataStringParts.length; i += 2) {\n const contentType = dataStringParts[i]\n const content = dataStringParts[i + 1]\n const encoder = new TextEncoder()\n if (contentType === 'html') {\n const fileName = `${transactionId}.html`\n const buffer = encoder.encode(content)\n await saveBufferToOPFS(getFilesPath(filesRoot, 'html', fileName), buffer)\n }\n if (contentType === 'json') {\n const fileName = `${transactionId}.json`\n const buffer = encoder.encode(content)\n await saveBufferToOPFS(getFilesPath(filesRoot, 'json', fileName), buffer)\n }\n }\n\n continue\n }\n\n if (!dataString && arrayBuffer) {\n await saveBufferToOPFS(\n getFilesPath(filesRoot, 'images', transactionId),\n new Uint8Array(arrayBuffer),\n )\n continue\n }\n\n if (!dataString) {\n continue\n }\n\n let contentType = identifyString(dataString)\n\n if (\n contentType !== 'json' &&\n contentType !== 'base64' &&\n contentType !== 'html'\n ) {\n const possibleImageType = getDataTypeFromString(dataString)\n if (!possibleImageType) {\n continue\n }\n\n contentType = possibleImageType\n }\n\n if (contentType === 'url') {\n const url = dataString as string\n\n let buffer: ArrayBuffer | undefined\n\n try {\n const response = await fetch(url)\n if (!response.ok) {\n continue\n }\n\n buffer = await response.arrayBuffer()\n\n } catch(error) {\n globalThis.postMessage({\n message: 'excludeTransaction',\n transactionId,\n })\n continue\n }\n\n const bufferUint8Array = new Uint8Array(buffer)\n\n // Extract the file extension from the URL\n const extensionMatch = url.match(/\\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i)\n if (!extensionMatch) {\n throw new Error(\n 'Unable to determine the file extension from the URL.',\n )\n }\n const fileExtension = extensionMatch[0] // e.g., \".jpg\"\n\n // Set the file name (you can customize this)\n // const fileNameFromUrl = `${transactionId}${fileExtension}`\n\n await saveBufferToOPFS(\n getFilesPath(filesRoot, 'images', transactionId),\n bufferUint8Array,\n )\n\n continue\n }\n\n const mimeType = getMimeType(dataString as string)\n let fileExtension = mimeType\n\n if (fileExtension && fileExtension?.startsWith('image')) {\n fileExtension = fileExtension.replace('image/', '')\n }\n\n let fileName = transactionId\n\n if (contentType === 'base64') {\n if (fileExtension) {\n fileName += `.${fileExtension}`\n }\n\n // Remove the Base64 header if it exists (e.g., \"data:image/png;base64,\")\n const base64Data = dataString.split(',').pop() || ''\n\n // Decode the Base64 string to binary\n const binaryString = atob(base64Data)\n const length = binaryString.length\n const binaryData = new Uint8Array(length)\n\n for (let i = 0; i < length; i++) {\n binaryData[i] = binaryString.charCodeAt(i)\n }\n\n await saveBufferToOPFS(getFilesPath(filesRoot, 'images', fileName), binaryData)\n\n }\n\n if (contentType === 'html') {\n fileName += '.html'\n const encoder = new TextEncoder()\n const buffer = encoder.encode(dataString)\n await saveBufferToOPFS(getFilesPath(filesRoot, 'html', fileName), buffer)\n }\n\n if (contentType === 'json') {\n fileName += '.json'\n const encoder = new TextEncoder()\n const buffer = encoder.encode(dataString)\n await saveBufferToOPFS(getFilesPath(filesRoot, 'json', fileName), buffer)\n }\n }\n}\n\nonmessage = async (e) => {\n const { debug, filesRoot } = e.data\n if (!debug) {\n console.log = () => {}\n }\n await downloadFiles({ ...e.data, filesRoot });\n globalThis.postMessage({\n message: 'filesDownload onmessage done',\n done: true,\n })\n \n}\n}.toString()\n}\n)()`","import { addExcludedTransactions } from '@/db/write/addExcludedTransactions';\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager';\nimport filesDownload from './filesDownload'\nimport { notifyFilesWrittenOutsideCache } from '@/helpers/tabEvents'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:browser:workers:FileDownloader')\n\nexport class FileDownloader {\n private cores: number\n private workersArchive: Worker[] = []\n private workerBlobUrl: string\n\n constructor() {\n this.cores = Math.min(navigator.hardwareConcurrency || 4, 4);\n\n this.workerBlobUrl = globalThis.URL.createObjectURL(\n new Blob([filesDownload], { type: 'application/javascript' })\n )\n }\n\n public downloadAll = async ({transactionIds, arweaveHost, arweaveBaseUrls, excludedTransactions}: DownloadAllFilesParams): Promise<void> => {\n\n if (this.workersArchive.length > 0) {\n for (let i = 0; i < this.workersArchive.length; i++) {\n this.workersArchive[i].terminate()\n delete this.workersArchive[i]\n }\n this.workersArchive = []\n }\n\n const worker = new Worker(this.workerBlobUrl);\n\n this.workersArchive.push(worker)\n\n const localExcludedTransactions = new Set(excludedTransactions)\n const savedPaths: string[] = []\n\n return new Promise((resolve, reject) => {\n worker.onmessage = (e) => {\n logger('filesDownload main thread onmessage', e.data);\n\n if (e.data.message === 'excludeTransaction') {\n localExcludedTransactions.add(e.data.transactionId)\n }\n\n if (e.data.message === 'fileSaved') {\n savedPaths.push(e.data.filePath)\n }\n\n if (e.data.done) {\n addExcludedTransactions(localExcludedTransactions)\n // The worker wrote to OPFS directly; refresh caches here and in other tabs.\n .then(() => notifyFilesWrittenOutsideCache(savedPaths))\n .then(() => {\n resolve(e.data)\n })\n .catch((error) => {\n reject(error)\n })\n }\n if (e.data.error) {\n reject(e.data.error)\n }\n }\n \n worker.postMessage({\n transactionIds,\n arweaveHost,\n arweaveBaseUrls,\n debug: logger.enabled,\n filesRoot: BaseFileManager.getWorkingDir(),\n });\n })\n }\n}\n","type BrowserImageResizerConfigBase = {\n\t/**\n\t * Algorithm used for downscaling\n\t * \n\t * * `null`: Just resize with `drawImage()`. The best quality and fastest.\n\t * * `bilinear`: Better quality, slower. Comes from upstream (ericnogralesbrowser-image-resizer).\n\t * * `hermite`: Worse quality, faster. Comes from [viliusle/Hermite-resize](https://github.com/viliusle/Hermite-resize). Will dispatch workers for better performance.\n\t * * `hermite_single`: Worse quality, faster. Single-threaded.\n\t * \n\t * default: null\n\t */\n\talgorithm: 'bilinear' | 'hermite' | 'hermite_single' | 'null' | null;\n\n\t/**\n\t * Whether to process downscaling by `drawImage(source, 0, 0, source.width / 2, source.height / 2)`\n\t * until the size is smaller than twice the target size.\n\t *\n\t * There seems to be no situation where it is necessary to change to false.\n\t * \n\t * default: true\n\t */\n\tprocessByHalf: boolean;\n\n\tmaxWidth: number;\n\tmaxHeight: number;\n\tmaxSize?: number; // ???\n\n\t/**\n\t * Scale ratio. Strictly limited to maxWidth.\n\t */\n\tscaleRatio?: number;\n\n\t/**\n\t * Output logs to console\n\t */\n\tdebug: boolean;\n}\n\n\ntype BrowserImageResizerConfigWithConvertedOutput = BrowserImageResizerConfigBase & {\n\tquality: number;\n\tmimeType: string;\n};\n\ntype BrowserImageResizerConfigWithOffscreenCanvasOutput = BrowserImageResizerConfigBase & {\n\tmimeType: null;\n}\n\ntype BrowserImageResizerConfig = BrowserImageResizerConfigWithConvertedOutput | BrowserImageResizerConfigWithOffscreenCanvasOutput;\n\ntype WorkerSouceData = {\n source: ImageData;\n startY: number;\n height: number;\n}\n\nexport default `(\n ${\n function () {\n\nconst getFileHandle = async (path: string, rootHandle: FileSystemDirectoryHandle | null = null): Promise<FileSystemFileHandle> => {\n // Split the path into segments\n const segments = path.split('/').filter(Boolean);\n\n // Start from the root directory if not provided\n if (!rootHandle) {\n rootHandle = await navigator.storage.getDirectory();\n }\n\n let currentHandle = rootHandle;\n\n // Traverse the path segments\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const isLastSegment = i === segments.length - 1;\n\n try {\n\n for await (const [name, handle] of currentHandle.entries()) {\n if (name !== segment) {\n continue\n }\n\n if (isLastSegment) {\n if (handle.kind === 'file') {\n return handle as FileSystemFileHandle; // Return the file handle if found\n } else {\n throw new Error(`Path '${path}' refers to a directory, not a file.`);\n }\n } else if (handle.kind === 'directory') {\n currentHandle = handle as FileSystemDirectoryHandle; // Traverse into the directory\n } else {\n throw new Error(`Invalid path segment '${segment}'`);\n }\n }\n } catch (err) {\n if (err instanceof Error && err.name === 'NotFoundError') {\n throw new Error(`Path '${path}' does not exist.`);\n } else {\n throw err;\n }\n }\n }\n\n throw new Error(`Path '${path}' could not be resolved.`);\n}\n\nasync function getFileFromOPFS(path: string): Promise<File> {\n\n const fileHandleAsync = await getFileHandle(path);\n const file = await fileHandleAsync.getFile();\n return file;\n\n}\n\n/** Infer MIME from magic bytes. OPFS File may have empty type, causing createImageBitmap to fail. */\nasync function getBlobWithInferredMime(file: File): Promise<Blob> {\n const buf = await file.arrayBuffer();\n const bytes = new Uint8Array(buf);\n let mime = file.type;\n if (!mime || mime === '') {\n if (bytes[0] === 0xff && bytes[1] === 0xd8) mime = 'image/jpeg';\n else if (bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47) mime = 'image/png';\n else if (bytes[0] === 0x52 && bytes[1] === 0x49 && bytes[2] === 0x46 && bytes[3] === 0x52 && bytes[8] === 0x57 && bytes[9] === 0x45 && bytes[10] === 0x42 && bytes[11] === 0x50) mime = 'image/webp';\n else if (bytes[0] === 0x47 && bytes[1] === 0x49 && bytes[2] === 0x46) mime = 'image/gif';\n else if (bytes[0] === 0x42 && bytes[1] === 0x4d) mime = 'image/bmp';\n else if (bytes[4] === 0x66 && bytes[5] === 0x74 && bytes[6] === 0x79 && bytes[7] === 0x70 && bytes[8] === 0x61 && bytes[9] === 0x76 && bytes[10] === 0x69 && bytes[11] === 0x66) mime = 'image/avif';\n else if (bytes[4] === 0x66 && bytes[5] === 0x74 && bytes[6] === 0x79 && bytes[7] === 0x70 && bytes[8] === 0x68 && bytes[9] === 0x65 && bytes[10] === 0x69 && bytes[11] === 0x63) mime = 'image/heic';\n else mime = 'image/jpeg';\n }\n return new Blob([buf], { type: mime });\n}\n\nconst DEFAULT_CONFIG = {\n\targorithm: 'null',\n\tprocessByHalf: true,\n\tquality: 0.5,\n\tmaxWidth: 800,\n\tmaxHeight: 600,\n\tdebug: false,\n\tmimeType: 'image/jpeg',\n} as const;\n\nfunction isIos() {\n\tif (typeof navigator === 'undefined') return false;\n\tif (!navigator.userAgent) return false;\n\treturn /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nconst getTargetHeight = (srcHeight: number, scale: number, config: BrowserImageResizerConfig) => {\n\treturn Math.min(Math.floor(srcHeight * scale), config.maxHeight);\n}\n\nconst findMaxWidth = (config: BrowserImageResizerConfig, canvas: { width: number; height: number }) => {\n\t//Let's find the max available width for scaled image\n\tconst ratio = canvas.width / canvas.height;\n\tlet mWidth = Math.min(\n\t\tcanvas.width,\n\t\tconfig.maxWidth,\n\t\tratio * config.maxHeight\n\t);\n\tif (\n\t\tconfig.maxSize &&\n\t\tconfig.maxSize > 0 &&\n\t\tconfig.maxSize < (canvas.width * canvas.height) / 1000\n\t)\n\t\tmWidth = Math.min(\n\t\t\tmWidth,\n\t\t\tMath.floor((config.maxSize * 1000) / canvas.height)\n\t\t);\n\tif (!!config.scaleRatio)\n\t\tmWidth = Math.min(mWidth, Math.floor(config.scaleRatio * canvas.width));\n\n\tconst rHeight = getTargetHeight(canvas.height, mWidth / canvas.width, config);\n\n // console.log(\n // 'browser-image-resizer: original image size = ' +\n // canvas.width +\n // ' px (width) X ' +\n // canvas.height +\n // ' px (height)'\n // );\n // console.log(\n // 'browser-image-resizer: scaled image size = ' +\n // mWidth +\n // ' px (width) X ' +\n // rHeight +\n // ' px (height)'\n // );\n\tif (mWidth <= 0) {\n\t\tmWidth = 1;\n\t\tconsole.warn(\"browser-image-resizer: image size is too small\");\n\t}\n\n\tif (isIos() && mWidth * rHeight > 167777216) {\n\t\tconsole.error(\"browser-image-resizer: image size is too large for iOS WebKit.\", mWidth, rHeight);\n\t\tthrow new Error(\"browser-image-resizer: image size is too large for iOS WebKit.\");\n\t}\n\n\treturn mWidth;\n}\n\n /**\n * Hermite resize, multicore version - fast image resize/resample using Hermite filter.\n */\n const resample = (srcCanvas: OffscreenCanvas, destCanvas: OffscreenCanvas, config: { debug?: boolean }) => {\n return new Promise<void>((resolve, reject) => {\n\n const ratio_h = srcCanvas.height / destCanvas.height;\n const cores = Math.min(navigator.hardwareConcurrency || 4, 4)\n\n //prepare source and target data for workers\n const ctx = srcCanvas.getContext('2d');\n if (!ctx) return reject('Canvas is empty (resample)');\n\n const data_part: WorkerSouceData[] = [];\n const block_height = Math.ceil(srcCanvas.height / cores / 2) * 2;\n let end_y = -1;\n for (let c = 0; c < cores; c++) {\n //source\n const offset_y = end_y + 1;\n if (offset_y >= srcCanvas.height) {\n //size too small, nothing left for this core\n continue;\n }\n\n end_y = Math.min(offset_y + block_height - 1, srcCanvas.height - 1);\n\n const current_block_height = Math.min(block_height, srcCanvas.height - offset_y);\n\n data_part.push({\n source: ctx.getImageData(0, offset_y, srcCanvas.width, block_height),\n startY: Math.ceil(offset_y / ratio_h),\n height: current_block_height\n });\n }\n\n //start\n const destCtx = destCanvas.getContext('2d');\n if (!destCtx) return reject('Canvas is empty (resample dest)');\n let workers_in_use = data_part.length;\n for (let c = 0; c < data_part.length; c++) {\n\n //draw\n const height_part = Math.ceil(data_part[c].height / ratio_h);\n const target = destCtx.createImageData(destCanvas.width, height_part);\n // target.data.set(event.data.target);\n destCtx.putImageData(target, 0, data_part[c].startY);\n\n }\n });\n};\n\n /**\n * Hermite resize - fast image resize/resample using Hermite filter. 1 cpu version!\n */\n const resampleSingle = (srcCanvasData: ImageData, destCanvasData: ImageData,) => {\n const ratio_w = srcCanvasData.width / destCanvasData.width;\n const ratio_h = srcCanvasData.height / destCanvasData.height;\n const ratio_w_half = Math.ceil(ratio_w / 2);\n const ratio_h_half = Math.ceil(ratio_h / 2);\n\n const data = srcCanvasData.data;\n const data2 = destCanvasData.data;\n\n for (let j = 0; j < destCanvasData.height; j++) {\n for (let i = 0; i < destCanvasData.width; i++) {\n const x2 = (i + j * destCanvasData.width) * 4;\n let weight = 0;\n let weights = 0;\n let weights_alpha = 0;\n let gx_r = 0;\n let gx_g = 0;\n let gx_b = 0;\n let gx_a = 0;\n const center_y = j * ratio_h;\n\n const xx_start = Math.floor(i * ratio_w);\n const xx_stop = Math.min(Math.ceil((i + 1) * ratio_w), srcCanvasData.width);\n const yy_start = Math.floor(j * ratio_h);\n const yy_stop = Math.min(Math.ceil((j + 1) * ratio_h), srcCanvasData.height);\n\n for (let yy = yy_start; yy < yy_stop; yy++) {\n let dy = Math.abs(center_y - yy) / ratio_h_half;\n let center_x = i * ratio_w;\n let w0 = dy * dy; //pre-calc part of w\n for (let xx = xx_start; xx < xx_stop; xx++) {\n let dx = Math.abs(center_x - xx) / ratio_w_half;\n let w = Math.sqrt(w0 + dx * dx);\n if (w >= 1) {\n //pixel too far\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n let pos_x = 4 * (xx + yy * srcCanvasData.width);\n //alpha\n gx_a += weight * data[pos_x + 3];\n weights_alpha += weight;\n //colors\n if (data[pos_x + 3] < 255)\n weight = weight * data[pos_x + 3] / 250;\n gx_r += weight * data[pos_x];\n gx_g += weight * data[pos_x + 1];\n gx_b += weight * data[pos_x + 2];\n weights += weight;\n }\n }\n data2[x2] = gx_r / weights;\n data2[x2 + 1] = gx_g / weights;\n data2[x2 + 2] = gx_b / weights;\n data2[x2 + 3] = gx_a / weights_alpha;\n }\n }\n};\n\n /**\n * Hermite resize. Detect cpu count and use best option for user.\n */\n const resampleAuto = (srcCanvas: OffscreenCanvas, destCanvas: OffscreenCanvas, config: { debug?: boolean, argorithm?: string }) => {\n if (!!globalThis.Worker && navigator.hardwareConcurrency > 1 && config?.argorithm !== 'hermite_single') {\n //workers supported and we have at least 2 cpu cores - using multithreading\n return resample(srcCanvas, destCanvas, config);\n } else {\n //1 cpu version\n const { srcImgData, destImgData } = getImageData(srcCanvas, destCanvas);\n resampleSingle(srcImgData, destImgData);\n destCanvas.getContext('2d')!.putImageData(destImgData, 0, 0);\n return;\n }\n};\n\n\nasync function scaleCanvasWithAlgorithm(canvas: OffscreenCanvas, config: BrowserImageResizerConfig & { outputWidth: number }) {\n\tconst scale = config.outputWidth / canvas.width;\n\n\tconst scaled = new OffscreenCanvas(Math.floor(config.outputWidth), getTargetHeight(canvas.height, scale, config));\n\n\tswitch (config.algorithm) {\n\t\tcase 'hermite': {\n\t\t\tawait resampleAuto(canvas, scaled, config as BrowserImageResizerConfig & { algorithm: 'hermite' | 'hermite_single' });\n\t\t\tbreak;\n\t\t} case 'hermite_single': {\n\t\t\tconst { srcImgData, destImgData } = getImageData(canvas, scaled);\n\t\t\tresampleSingle(srcImgData, destImgData,);\n\t\t\tscaled?.getContext('2d')?.putImageData(destImgData, 0, 0);\n\t\t\tbreak;\n\t\t} case 'bilinear': {\n\t\t\t// const { srcImgData, destImgData } = getImageData(canvas, scaled);\n\t\t\t// bilinear(srcImgData, destImgData, scale);\n\t\t\t// scaled?.getContext('2d')?.putImageData(destImgData, 0, 0);\n\t\t\tbreak;\n\t\t} default: {\n\t\t\tscaled.getContext('2d')?.drawImage(canvas, 0, 0, scaled.width, scaled.height);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn scaled;\n}\n\nconst getHalfScaleCanvas = (src: OffscreenCanvas | HTMLCanvasElement) => {\n\tconst half = new OffscreenCanvas(src.width / 2, src.height / 2);\n\n\thalf\n\t\t?.getContext('2d')\n\t\t?.drawImage(src, 0, 0, half.width, half.height);\n\n\treturn half;\n}\n\nconst getImageData = (canvas: OffscreenCanvas, scaled: OffscreenCanvas) => {\n\tconst srcImgData = canvas\n\t\t?.getContext('2d')\n\t\t?.getImageData(0, 0, canvas.width, canvas.height);\n\tconst destImgData = scaled\n\t\t?.getContext('2d')\n\t\t?.createImageData(scaled.width, scaled.height);\n\n\tif (!srcImgData || !destImgData) throw Error('Canvas is empty (scaleCanvasWithAlgorithm). You should run this script after the document is ready.');\n\n\treturn { srcImgData, destImgData };\n}\n\nasync function saveBlobToOPFS(filePath: string, blob: Blob): Promise<void> {\n // Access the OPFS root directory\n const rootHandle = await navigator.storage.getDirectory();\n\n // Split the filePath into directory segments and file name\n const segments = filePath.split('/').filter(Boolean);\n const fileName = segments.pop(); // Extract the file name\n if (!fileName) {\n throw new Error('Invalid file path: No file name provided.');\n }\n\n // Traverse or create directories as needed\n let currentDirHandle = rootHandle;\n for (const segment of segments) {\n currentDirHandle = await currentDirHandle.getDirectoryHandle(segment, { create: true });\n }\n\n // Create or open the file in OPFS\n const fileHandle = await currentDirHandle.getFileHandle(fileName, { create: true });\n\n // Write the Blob to the file\n const writableStream = await fileHandle.createWritable();\n try {\n await writableStream.write(blob);\n } catch (error) {\n // Discard the partial write and release the file's lock\n await writableStream.abort().catch(() => {});\n throw error;\n }\n await writableStream.close();\n}\n\n\nconst imageResize = async (filePath: string, width: number, height: number) => {\n const config: BrowserImageResizerConfig = {\n ...DEFAULT_CONFIG,\n algorithm: 'hermite_single' as const,\n mimeType: 'image/webp',\n maxWidth: width,\n maxHeight: height,\n }\n\n const file = await getFileFromOPFS(filePath);\n\n const blobWithMime = await getBlobWithInferredMime(file);\n const imageBitmap = await createImageBitmap(blobWithMime);\n\n let converting: OffscreenCanvas\n\n if (isIos() && imageBitmap.width * imageBitmap.height > 16777216) {\n const scale = Math.sqrt(16777216 / (imageBitmap.width * imageBitmap.height));\n converting = new OffscreenCanvas(Math.floor(imageBitmap.width * scale), Math.floor(imageBitmap.height * scale));\n converting.getContext('2d')?.drawImage(imageBitmap, 0, 0, converting.width, converting.height);\n } else {\n converting = new OffscreenCanvas(imageBitmap.width, imageBitmap.height);\n converting.getContext('2d')?.drawImage(imageBitmap, 0, 0);\n }\n\n const maxWidth = findMaxWidth(config, converting);\n\n\tif (!maxWidth){ \n throw Error(`browser-image-resizer: maxWidth is ${maxWidth}!!`)\n };\n\n\twhile (config.processByHalf && converting.width >= 2 * maxWidth) {\n\t\tconverting = getHalfScaleCanvas(converting);\n\t}\n\n\tif (converting.width > maxWidth) {\n\t\tconverting = await scaleCanvasWithAlgorithm(\n\t\t\tconverting,\n\t\t\tObject.assign(config, { outputWidth: maxWidth }),\n\t\t);\n\t}\n\n\tif (config.mimeType === null) {\n\t\treturn converting;\n\t}\n\tconst resizedBlob = await converting.convertToBlob({ type: config.mimeType, quality: config.quality });\n\n const pathSegments = filePath.split('/');\n const fileName = pathSegments.pop();\n if (!fileName) {\n throw Error('Invalid file path: No file name provided.');\n }\n const newSegments = [\n ...pathSegments,\n width,\n ]\n const fileNameParts = fileName.split('.')\n const newFileName = `${fileNameParts[0]}.webp`\n const newDirPath = newSegments.join('/');\n const newFilePath = `${newDirPath}/${newFileName}`;\n\n await saveBlobToOPFS(newFilePath, resizedBlob)\n globalThis.postMessage({\n done: true,\n filePath: newFilePath,\n })\n\n}\n\nonmessage = async (e) => {\n const { filePath, width, height, debug } = e.data\n if (!debug) {\n console.log = () => {}\n }\n try {\n await imageResize(filePath, width, height)\n } catch (err) {\n globalThis.postMessage({ error: err instanceof Error ? err.message : String(err) });\n }\n}\n}.toString()\n}\n)()`\n","import imageResize from './imageResize'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager';\nimport { notifyFilesWrittenOutsideCache } from '@/helpers/tabEvents'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:browser:workers:ImageResizer')\n\n\nexport class ImageResizer {\n private cores: number\n private workersArchive: Map<string, Worker> = new Map()\n private workerBlobUrl: string\n\n constructor() {\n this.cores = Math.min(navigator.hardwareConcurrency || 4, 4);\n\n this.workerBlobUrl = globalThis.URL.createObjectURL(\n new Blob([imageResize], { type: 'application/javascript' })\n )\n }\n\n public async resize({filePath, width, height}: ResizeImageParams) {\n if (this.workersArchive.has(filePath)) {\n const savedWorker = this.workersArchive.get(filePath)\n savedWorker?.terminate()\n logger('[ImageResizer.resize] Terminated worker for filePath due to incoming request', filePath)\n this.workersArchive.delete(filePath)\n }\n\n const worker = new Worker(this.workerBlobUrl);\n\n this.workersArchive.set(filePath, worker)\n\n return new Promise((resolve, reject) => {\n worker.onmessage = (e) => {\n logger('[ImageResizer.resize] main thread onmessage', e.data);\n if (e.data.done) {\n const savedWorker = this.workersArchive.get(filePath)\n savedWorker?.terminate()\n logger('[ImageResizer.resize] Terminated worker for filePath due to done', filePath)\n this.workersArchive.delete(filePath)\n // The worker wrote the variant to OPFS directly; refresh caches here and in other tabs.\n notifyFilesWrittenOutsideCache([e.data.filePath]).then(\n () => resolve(e.data),\n () => resolve(e.data),\n )\n }\n\n if (e.data.error) {\n reject(e.data.error)\n }\n }\n\n worker.onerror = (err) => {\n reject(err)\n }\n \n worker.postMessage({\n filePath,\n width,\n height,\n debug: logger.enabled,\n });\n })\n }\n\n public async resizeAll({width, height}: ResizeAllImagesParams) {\n\n const fs = await BaseFileManager.getFs()\n\n const imageDir = BaseFileManager.getFilesPath('images')\n let imageFilesStats = await fs.promises.readdir(imageDir, {\n withFileTypes: true\n })\n\n imageFilesStats = imageFilesStats.filter((file: any) => file.isFile())\n\n const imageFiles = imageFilesStats.map((file: any) => file.path)\n\n const widthDir = `${imageDir}/${width}`\n\n await BaseFileManager.createDirIfNotExists(widthDir)\n\n for (const imageFile of imageFiles) {\n const resizedImageExists = await BaseFileManager.pathExists(`${widthDir}/${imageFile}`)\n if (!resizedImageExists) {\n await this.resize({filePath: `${imageDir}/${imageFile}`, width, height})\n }\n }\n\n \n }\n}\n","/**\n * Errors Chromium throws for a single OPFS entry that another context is using: the entry was\n * removed between listing and reading (SQLite journals come and go per transaction), or it is\n * held by a sync access handle in another tab or a not-yet-terminated worker.\n */\nconst SKIPPABLE_ENTRY_ERRORS = new Set([\n 'NotFoundError',\n 'InvalidStateError',\n 'NoModificationAllowedError',\n 'NotReadableError',\n])\n\nexport function isSkippableOpfsEntryError(error: unknown): boolean {\n return error instanceof DOMException && SKIPPABLE_ENTRY_ERRORS.has(error.name)\n}\n","import { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport type {\n DownloadAllFilesParams,\n IFileManager,\n ResizeAllImagesParams,\n ResizeImageParams,\n} from '@/helpers/FileManager/IFileManager'\nimport { FileDownloader } from '../workers/FileDownloader'\nimport { ImageResizer } from '../workers/ImageResizer'\nimport { FileSystemLockedError } from '@/helpers/FileManager/errors'\nimport { isSkippableOpfsEntryError } from './opfsErrors'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:browser:helpers:FileManager')\n\n/**\n * Browser-safe path helpers for SDK virtual file paths.\n * We intentionally avoid Node/CJS path polyfills here to keep browser bundles ESM-safe.\n * Provides the subset of Node path APIs used via BaseFileManager.getPathModule().\n */\nconst pathCompat = {\n dirname(filePath: string): string {\n if (!filePath) return '.'\n const normalized = filePath.replace(/\\\\/g, '/')\n if (normalized === '/') return '/'\n const trimmed = normalized.endsWith('/') && normalized.length > 1\n ? normalized.slice(0, -1)\n : normalized\n const lastSlash = trimmed.lastIndexOf('/')\n if (lastSlash === -1) return '.'\n if (lastSlash === 0) return '/'\n return trimmed.slice(0, lastSlash)\n },\n\n basename(filePath: string): string {\n if (!filePath) return ''\n const normalized = filePath.replace(/\\\\/g, '/')\n if (normalized === '/') return '/'\n const trimmed = normalized.endsWith('/') && normalized.length > 1\n ? normalized.slice(0, -1)\n : normalized\n const lastSlash = trimmed.lastIndexOf('/')\n return lastSlash === -1 ? trimmed : trimmed.slice(lastSlash + 1)\n },\n\n isAbsolute(filePath: string): boolean {\n if (!filePath) return false\n const normalized = filePath.replace(/\\\\/g, '/')\n return normalized.startsWith('/')\n },\n\n join(...segments: string[]): string {\n if (segments.length === 0) return '.'\n const joined = segments\n .filter((s) => s != null && s !== '')\n .map((s) => String(s).replace(/\\\\/g, '/'))\n .join('/')\n return pathCompat.normalize(joined)\n },\n\n resolve(...segments: string[]): string {\n // POSIX-like resolve for virtual paths: walk right-to-left until absolute.\n let resolved = ''\n let absolute = false\n for (let i = segments.length - 1; i >= 0 && !absolute; i--) {\n const segment = segments[i]\n if (segment == null || segment === '') continue\n const normalized = String(segment).replace(/\\\\/g, '/')\n resolved = resolved ? `${normalized}/${resolved}` : normalized\n absolute = pathCompat.isAbsolute(normalized)\n }\n // Browser has no process.cwd(); treat unresolved relative paths as root-relative.\n if (!absolute) {\n resolved = `/${resolved}`\n }\n return pathCompat.normalize(resolved)\n },\n\n normalize(filePath: string): string {\n if (!filePath) return '.'\n const normalized = filePath.replace(/\\\\/g, '/')\n const absolute = normalized.startsWith('/')\n const parts = normalized.split('/')\n const stack: string[] = []\n for (const part of parts) {\n if (!part || part === '.') continue\n if (part === '..') {\n if (stack.length > 0 && stack[stack.length - 1] !== '..') {\n stack.pop()\n } else if (!absolute) {\n stack.push('..')\n }\n continue\n }\n stack.push(part)\n }\n const result = stack.join('/')\n if (absolute) return `/${result}`\n return result || '.'\n },\n}\n\n/**\n * Chromium OPFS: the mount walk hit an entry another context is using (reload, other tab,\n * leftover sync access handle, a SQLite journal removed mid-walk).\n */\nfunction isBusyOpfsMountError(error: unknown): boolean {\n if (isSkippableOpfsEntryError(error)) {\n return true\n }\n const message = error instanceof Error ? error.message : String(error)\n return message.includes('state cached in an interface object')\n}\n\n/** Waits between mount attempts; about 2 s in total. */\nconst MOUNT_RETRY_DELAYS_MS = [50, 150, 300, 600, 1000]\n\n/** OPFS / ZenFS can throw NotReadableError while a file is still settling after write. */\nfunction isTransientOpfsReadError(error: unknown): boolean {\n if (error instanceof DOMException && error.name === 'NotReadableError') {\n return true\n }\n const message = error instanceof Error ? error.message : String(error)\n // Chromium wording when getFile/read races a writer or stale handle\n if (message.includes('permission problems') && message.includes('reference')) {\n return true\n }\n return false\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport class BrowserFileManager implements IFileManager {\n private zenfsCache: any = null\n\n async getFs() {\n if (!this.zenfsCache) {\n this.zenfsCache = await import('@zenfs/core')\n }\n return this.zenfsCache\n }\n\n getFsSync() {\n if (!this.zenfsCache) {\n throw new Error('File system not initialized. Call getFs() or initializeFileSystem() first.')\n }\n return this.zenfsCache\n }\n\n async getContentUrlFromPath( path: string ): Promise<string | undefined> {\n\n const fileExists = await this.pathExists(path)\n if ( fileExists ) {\n const file = await this.readFile(path)\n return URL.createObjectURL(file)\n }\n }\n\n async initializeFileSystem(_workingDir?: string): Promise<void> {\n\n const zenfs = await this.getFs()\n const { TolerantWebAccess } = await import('./tolerantWebAccess')\n const {configureSingle} = zenfs\n\n const configureRoot = async () => {\n const handle = await navigator.storage.getDirectory()\n await configureSingle({\n backend: TolerantWebAccess,\n handle,\n })\n }\n\n // TolerantWebAccess skips busy entries, so what reaches here is the walk failing above them\n // (e.g. a stale root handle). Retry without deleting OPFS data; BaseFileManager resets its\n // flags if every attempt fails.\n for (let attempt = 0; ; attempt++) {\n try {\n await configureRoot()\n return\n } catch (error) {\n if (!isBusyOpfsMountError(error)) {\n throw error\n }\n if (attempt === MOUNT_RETRY_DELAYS_MS.length) {\n throw new FileSystemLockedError(error)\n }\n logger(`OPFS mount attempt ${attempt + 1} failed (${(error as Error)?.name}); retrying`)\n await sleep(MOUNT_RETRY_DELAYS_MS[attempt])\n }\n }\n }\n\n async downloadAllFiles( {\n transactionIds,\n arweaveHost,\n arweaveBaseUrls,\n excludedTransactions,\n }: DownloadAllFilesParams ): Promise<void> {\n const fileDownloader = new FileDownloader()\n await fileDownloader.downloadAll({ transactionIds, arweaveHost, arweaveBaseUrls, excludedTransactions })\n }\n\n async resizeImage( { filePath, width, height }: ResizeImageParams ): Promise<void> {\n const imageResizer = new ImageResizer()\n await imageResizer.resize({ filePath, width, height })\n }\n\n async resizeAllImages( { width, height }: ResizeAllImagesParams ): Promise<void> {\n const imageResizer = new ImageResizer()\n await imageResizer.resizeAll({ width, height })\n }\n\n async listImageFiles(): Promise<string[]> {\n return this.listFiles('images')\n }\n\n async listFiles(dir: string): Promise<string[]> {\n const targetDir = BaseFileManager.getFilesPath(dir)\n const exists = await this.pathExists(targetDir)\n if (!exists) {\n return []\n }\n const zenfs = await this.getFs()\n const entries = await zenfs.promises.readdir(targetDir, { withFileTypes: true })\n return entries.filter((entry: { isFile: () => boolean }) => entry.isFile()).map((entry: { name: string }) => entry.name)\n }\n\n async invalidateCachedPaths(filePaths: string[]): Promise<void> {\n const { mounts } = await this.getFs()\n const { TolerantWebAccessFS } = await import('./tolerantWebAccess')\n const mounted = mounts.get('/')\n if (!(mounted instanceof TolerantWebAccessFS)) return\n for (const filePath of filePaths) {\n const absolute = filePath.startsWith('/') ? filePath : `/${filePath}`\n try {\n await mounted.invalidate(absolute)\n } catch (error) {\n logger(`could not refresh cached ${absolute}`, error)\n }\n }\n }\n\n async pathExists(filePath: string): Promise<boolean> {\n try {\n const zenfs = await this.getFs()\n await zenfs.promises.access(filePath, zenfs.constants.F_OK)\n return true\n } catch (error: any) {\n // ENOENT means the file doesn't exist, which is expected\n if (error?.code === 'ENOENT' || error?.errno === -2) {\n return false\n }\n // For other errors, re-throw them\n throw error\n }\n }\n\n async getFileSize(filePath: string): Promise<number | null> {\n try {\n const zenfs = await this.getFs()\n const stat = await zenfs.promises.stat(filePath)\n return typeof stat?.size === 'number' ? stat.size : null\n } catch {\n return null\n }\n }\n\n async createDirIfNotExists(filePath: string): Promise<void> {\n if (!(await this.pathExists(filePath))) {\n try {\n const zenfs = await this.getFs()\n await zenfs.promises.mkdir(filePath, { recursive: true })\n } catch (error) {\n // This is a no-op. We tried to create a directory that already exists.\n logger('Attempted to create a directory that already exists')\n }\n }\n }\n\n /**\n * Waits for a file to exist at the specified path.\n * @param {string} filePath - The path of the file to check.\n * @param {number} interval - The interval in milliseconds between checks (default: 500ms).\n * @param {number} timeout - The timeout in milliseconds to wait for the file to exist (default: 10s).\n * @returns {Promise<boolean>} - Resolves to true if the file exists within the timeout period, otherwise false.\n */\n async waitForFile(filePath: string, interval: number = 1000, timeout: number = 60000): Promise<boolean> {\n\n // const fs = await this.getFs()\n // const fsNode = await import('node:fs')\n const pathExists = await this.pathExists(filePath)\n\n if (pathExists) {\n return true\n }\n\n return new Promise((resolve, reject) => {\n const startTime = Date.now()\n\n let isBusy = false\n\n const cancelableInterval = new CancelableInterval(async (stop) => {\n logger('waitForFile', filePath)\n if (isBusy) {\n return\n }\n isBusy = true\n // // TODO: Needs to read from OPFS\n // const exists = await BaseFileManager.pathExists(filePath)\n // if (exists) {\n // stop()\n // resolve(true)\n // }\n\n const pathExists = await this.pathExists(filePath)\n if (pathExists) {\n stop()\n resolve(true)\n }\n\n if (Date.now() - startTime >= timeout) {\n stop()\n reject(new Error('Timeout exceeded while waiting for file'))\n }\n isBusy = false\n }, interval)\n\n cancelableInterval.start()\n \n // const _interval = setInterval(async () => {\n // logger('waitForFile', filePath)\n // if (isBusy) {\n // return\n // }\n // isBusy = true\n // // TODO: Needs to read from OPFS\n // if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {\n // clearInterval(_interval)\n // resolve(true)\n // }\n\n // const pathExists = await this.pathExists(filePath)\n // if (pathExists) {\n // clearInterval(_interval)\n // resolve(true)\n // }\n\n // if (Date.now() - startTime >= timeout) {\n // clearInterval(_interval)\n // reject(new Error('Timeout exceeded while waiting for file'))\n // }\n // isBusy = false\n // }, interval)\n \n // retry(\n // {\n // times: Math.ceil(timeout / interval),\n // interval: interval,\n // },\n // (callback: Function) => {\n // if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {\n // return callback(null, true) // File exists, finish with success\n // }\n // if (Date.now() - startTime >= timeout) {\n // return callback(new Error('Timeout exceeded while waiting for file'))\n // }\n // callback(new Error('File does not exist yet')) // Retry with this error\n // },\n // (err: Error, result: boolean) => {\n // if (err) {\n // return resolve(false) // Resolve as false if timeout or error occurs\n // }\n // resolve(result) // Resolve as true if file exists\n // },\n // )\n })\n }\n\n /**\n * Waits for a file to exist and have content (non-zero size).\n * This is important for browser/OPFS where writes may not be immediately readable.\n * @param {string} filePath - The path of the file to check.\n * @param {number} interval - The interval in milliseconds between checks (default: 100ms).\n * @param {number} timeout - The timeout in milliseconds to wait (default: 5s).\n * @returns {Promise<boolean>} - Resolves to true if the file exists with content within the timeout period.\n */\n async waitForFileWithContent(filePath: string, interval: number = 100, timeout: number = 5000): Promise<boolean> {\n // First wait for file to exist\n await this.waitForFile(filePath, interval, timeout)\n\n // Usually readable at once: polling first cost every saveFile 100ms. Any read error falls\n // through to the polling below, which decides whether it is transient.\n try {\n if ((await this.readFile(filePath)).size > 0) return true\n } catch {\n // handled by polling\n }\n\n // Now wait for file to have content\n return new Promise((resolve, reject) => {\n const startTime = Date.now()\n let isBusy = false\n\n const cancelableInterval = new CancelableInterval(async (stop) => {\n logger('waitForFileWithContent', filePath)\n if (isBusy) {\n return\n }\n isBusy = true\n\n try {\n // Try to read the file to check if it has content\n const file = await this.readFile(filePath)\n if (file.size > 0) {\n stop()\n resolve(true)\n return\n }\n // File exists but is 0 bytes, continue waiting\n } catch (error: any) {\n // If error is about file being 0 bytes, not readable, or I/O error, continue waiting\n const errorMessage = error?.message || String(error)\n if (\n errorMessage.includes('0 bytes') ||\n errorMessage.includes('ENOENT') ||\n errorMessage.includes('EIO') ||\n errorMessage.includes('Input/output error') ||\n isTransientOpfsReadError(error)\n ) {\n // Continue waiting - file write may still be in progress\n } else {\n // Other errors should be thrown\n stop()\n reject(error)\n return\n }\n }\n\n if (Date.now() - startTime >= timeout) {\n stop()\n reject(new Error(`Timeout exceeded while waiting for file ${filePath} to have content`))\n return\n }\n isBusy = false\n }, interval)\n\n cancelableInterval.start()\n })\n }\n\n async saveFile(filePath: string, content: string | Blob | ArrayBuffer): Promise<void> {\n const zenfs = await this.getFs()\n \n // Convert content to a format that zenfs.writeFile accepts\n let writeContent: string | Uint8Array\n if (typeof content === 'string') {\n writeContent = content\n } else if (content instanceof Blob) {\n const arrayBuffer = await content.arrayBuffer()\n writeContent = new Uint8Array(arrayBuffer)\n } else if (content instanceof ArrayBuffer) {\n writeContent = new Uint8Array(content)\n } else {\n throw new Error('Unsupported content type')\n }\n \n await zenfs.writeFile(filePath, writeContent)\n await this.waitForFileWithContent(filePath, 100, 5000)\n // try {\n // // Get a handle to the OPFS root directory\n // const root = await navigator.storage.getDirectory();\n \n // // Split the file path into directory and file name\n // const pathParts = filePath.split('/');\n // const fileName = pathParts.pop();\n // if (!fileName) throw new Error('Invalid file path');\n\n // // Traverse directories and create them if they don't exist\n // let currentDir = root;\n // for (const part of pathParts) {\n // if (part !== '') {\n // currentDir = await currentDir.getDirectoryHandle(part, { create: true });\n // }\n // }\n\n // // Get the file handle and create the file if it doesn't exist\n // const fileHandle = await currentDir.getFileHandle(fileName, { create: true });\n\n // // Create a writable stream and write the content\n // const writable = await fileHandle.createWritable();\n \n // if (typeof content === 'string' || content instanceof Uint8Array) {\n // await writable.write(content);\n // } else if (content instanceof Blob) {\n // await writable.write(content);\n // } else if (content instanceof ArrayBuffer) {\n // await writable.write(new Blob([content]));\n // } else {\n // throw new Error('Unsupported content type');\n // }\n\n // await writable.close();\n // logger(`File written successfully: ${filePath}`);\n // } catch (error) {\n // console.error(`Error writing to OPFS: ${error.message}`);\n // }\n }\n\n saveFileSync(filePath: string, content: string | Blob | ArrayBuffer): void {\n // Note: This is a synchronous wrapper, but zenfs operations may still be async under the hood\n // For true sync operations in browser, we'd need to use OPFS sync access handles\n // For now, we'll use zenfs.writeFileSync which should be available\n const zenfs = this.getFsSync()\n \n // Convert content to a format that zenfs.writeFileSync accepts\n let writeContent: string | Uint8Array\n if (typeof content === 'string') {\n writeContent = content\n } else if (content instanceof Blob) {\n // Blob cannot be converted synchronously - throw error\n throw new Error('Blob content not supported in saveFileSync. Use saveFile() instead or convert to ArrayBuffer first.')\n } else if (content instanceof ArrayBuffer) {\n writeContent = new Uint8Array(content)\n } else {\n throw new Error('Unsupported content type')\n }\n \n zenfs.writeFileSync(filePath, writeContent)\n }\n\n async readFile(filePath: string): Promise<File> {\n const zenfs = await this.getFs()\n const maxAttempts = 3\n const baseDelayMs = 50\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n const data = await zenfs.promises.readFile(filePath)\n return new File([new Uint8Array(data)], filePath)\n } catch (error) {\n if (!isTransientOpfsReadError(error) || attempt === maxAttempts - 1) {\n throw error\n }\n await sleep(baseDelayMs * (attempt + 1))\n }\n }\n throw new Error('readFile: exhausted retries')\n // try {\n // // Get a handle to the OPFS root directory\n // const root = await navigator.storage.getDirectory();\n \n // // Split the file path into directory and file name\n // const pathParts = filePath.split('/');\n // const fileName = pathParts.pop();\n // if (!fileName) throw new Error('Invalid file path');\n \n // // Traverse directories to reach the target file\n // let currentDir = root;\n // for (const part of pathParts) {\n // if (part !== '') {\n // currentDir = await currentDir.getDirectoryHandle(part, { create: false });\n // }\n // }\n \n // // Get the file handle\n // const fileHandle = await currentDir.getFileHandle(fileName, { create: false });\n \n // // Get the file and read it as an ArrayBuffer\n // return await fileHandle.getFile();\n // } catch (error) {\n // console.error(`Error reading from OPFS: ${error.message}`);\n // throw error;\n // }\n }\n\n readFileSync(filePath: string): File {\n // Note: This is a synchronous wrapper, but zenfs operations may still be async under the hood\n // For true sync operations in browser, we'd need to use OPFS sync access handles\n // For now, we'll use zenfs.readFileSync which should be available\n const zenfs = this.getFsSync()\n const file = zenfs.readFileSync(filePath)\n return new File([new Uint8Array(file)], filePath)\n }\n\n async readFileAsBuffer(filePath: string): Promise<Blob> {\n try {\n // Get the file and read it as an ArrayBuffer\n const file = await this.readFile(filePath)\n const arrayBuffer = await file.arrayBuffer();\n\n // Convert ArrayBuffer to Blob\n return new Blob([arrayBuffer]);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n console.error(`Error reading from OPFS: ${errorMessage}`);\n throw error;\n }\n }\n\n async readFileAsString(filePath: string): Promise<string> {\n const blob = await this.readFileAsBuffer(filePath)\n return blob.text()\n }\n\n getParentDirPath(filePath: string): string {\n return pathCompat.dirname(filePath)\n }\n\n getFilenameFromPath(filePath: string): string {\n return pathCompat.basename(filePath)\n }\n\n getPathModule(): any {\n return pathCompat\n }\n}\n\ntype AsyncTask = (stop: () => void) => Promise<void>\n\n\nclass CancelableInterval {\n private intervalId: number | null = null;\n private currentTaskAbortController: AbortController | null = null;\n\n constructor(private task: AsyncTask, private interval: number) {}\n\n start() {\n this.intervalId = window.setInterval(async () => {\n if (this.currentTaskAbortController) {\n // Cancel the previous running task\n this.currentTaskAbortController.abort();\n }\n\n // Create a new abort controller for the current task\n this.currentTaskAbortController = new AbortController();\n const signal = this.currentTaskAbortController.signal;\n\n try {\n await this.taskWithCancellation(signal);\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n logger('Previous task was canceled.');\n } else {\n console.error('Task error:', error);\n }\n this.stop()\n }\n }, this.interval);\n }\n\n private async taskWithCancellation(signal: AbortSignal) {\n await this.task(() => this.stop())\n if (signal.aborted) {\n throw new DOMException('Task was aborted', 'AbortError');\n }\n }\n\n stop() {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n if (this.currentTaskAbortController) {\n this.currentTaskAbortController.abort();\n }\n }\n}\n\n/** @deprecated Prefer BrowserFileManager */\nexport const FileManager = BrowserFileManager\n\nBaseFileManager.configure(new BrowserFileManager())\n\nconst _check: IFileManager = new BrowserFileManager()\nvoid _check\n","// This file embeds the drizzle migration files as strings for browser runtime\n// These files are copied from packages/sdk/src/db/drizzle at build time\n\n// Individual migration SQL files\nexport const migrationSql_0000_married_malice = `CREATE TABLE \\`appState\\` (\n\t\\`key\\` text,\n\t\\`value\\` text,\n\t\\`created_at\\` integer,\n\t\\`updated_at\\` integer\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX \\`appState_key_unique\\` ON \\`appState\\` (\\`key\\`);--> statement-breakpoint\nCREATE TABLE \\`config\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`key\\` text NOT NULL,\n\t\\`text\\` text,\n\t\\`json\\` text,\n\t\\`blob\\` blob\n);\n--> statement-breakpoint\nCREATE TABLE \\`metadata\\` (\n\t\\`local_id\\` text,\n\t\\`uid\\` text,\n\t\\`property_name\\` text,\n\t\\`property_value\\` text,\n\t\\`schema_uid\\` text,\n\t\\`model_type\\` text,\n\t\\`seed_local_id\\` text,\n\t\\`seed_uid\\` text,\n\t\\`version_local_id\\` text,\n\t\\`version_uid\\` text,\n\t\\`eas_data_type\\` text,\n\t\\`ref_value_type\\` text,\n\t\\`ref_schema_uid\\` text,\n\t\\`ref_seed_type\\` text,\n\t\\`ref_resolved_value\\` text,\n\t\\`ref_resolved_display_value\\` text,\n\t\\`local_storage_dir\\` text,\n\t\\`attestation_raw\\` text,\n\t\\`attestation_created_at\\` integer,\n\t\\`content_hash\\` text,\n\t\\`created_at\\` integer,\n\t\\`updated_at\\` integer\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX \\`metadata_local_id_unique\\` ON \\`metadata\\` (\\`local_id\\`);--> statement-breakpoint\nCREATE TABLE \\`models\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`name\\` text NOT NULL,\n\t\\`schema_file_id\\` text\n);\n--> statement-breakpoint\nCREATE TABLE \\`properties\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`name\\` text NOT NULL,\n\t\\`data_type\\` text NOT NULL,\n\t\\`model_id\\` integer NOT NULL,\n\t\\`ref_model_id\\` integer,\n\t\\`ref_value_type\\` text,\n\t\\`schema_file_id\\` text,\n\tFOREIGN KEY (\\`model_id\\`) REFERENCES \\`models\\`(\\`id\\`) ON UPDATE no action ON DELETE no action,\n\tFOREIGN KEY (\\`ref_model_id\\`) REFERENCES \\`models\\`(\\`id\\`) ON UPDATE no action ON DELETE no action\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX \\`unique_name_model_id\\` ON \\`properties\\` (\\`name\\`,\\`model_id\\`);--> statement-breakpoint\nCREATE TABLE \\`model_schemas\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`model_id\\` integer,\n\t\\`schema_id\\` integer,\n\tFOREIGN KEY (\\`model_id\\`) REFERENCES \\`models\\`(\\`id\\`) ON UPDATE no action ON DELETE no action,\n\tFOREIGN KEY (\\`schema_id\\`) REFERENCES \\`schemas\\`(\\`id\\`) ON UPDATE no action ON DELETE no action\n);\n--> statement-breakpoint\nCREATE TABLE \\`model_uids\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`uid\\` text NOT NULL,\n\t\\`model_id\\` integer NOT NULL,\n\tFOREIGN KEY (\\`model_id\\`) REFERENCES \\`models\\`(\\`id\\`) ON UPDATE no action ON DELETE no action\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX \\`model_uids_model_id_unique\\` ON \\`model_uids\\` (\\`model_id\\`);--> statement-breakpoint\nCREATE TABLE \\`property_uids\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`uid\\` text NOT NULL,\n\t\\`property_id\\` integer NOT NULL,\n\tFOREIGN KEY (\\`property_id\\`) REFERENCES \\`models\\`(\\`id\\`) ON UPDATE no action ON DELETE no action\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX \\`property_uids_property_id_unique\\` ON \\`property_uids\\` (\\`property_id\\`);--> statement-breakpoint\nCREATE TABLE \\`schemas\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`name\\` text NOT NULL,\n\t\\`version\\` integer NOT NULL,\n\t\\`schema_file_id\\` text,\n\t\\`created_at\\` integer,\n\t\\`updated_at\\` integer\n);\n--> statement-breakpoint\nCREATE TABLE \\`seeds\\` (\n\t\\`local_id\\` text,\n\t\\`uid\\` text,\n\t\\`schema_uid\\` text,\n\t\\`type\\` text,\n\t\\`attestation_raw\\` text,\n\t\\`attestation_created_at\\` integer,\n\t\\`created_at\\` integer,\n\t\\`updated_at\\` integer,\n\t\\`_marked_for_deletion\\` integer\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX \\`seeds_local_id_unique\\` ON \\`seeds\\` (\\`local_id\\`);--> statement-breakpoint\nCREATE TABLE \\`versions\\` (\n\t\\`local_id\\` text,\n\t\\`uid\\` text,\n\t\\`seed_local_id\\` text,\n\t\\`seed_uid\\` text,\n\t\\`seed_type\\` text,\n\t\\`note\\` text,\n\t\\`created_at\\` integer,\n\t\\`updated_at\\` integer,\n\t\\`attestation_created_at\\` integer,\n\t\\`attestation_raw\\` text\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX \\`versions_local_id_unique\\` ON \\`versions\\` (\\`local_id\\`);`\n\nexport const migrationSql_0001_sweet_bruce_banner = `ALTER TABLE \\`schemas\\` ADD \\`schema_data\\` text;--> statement-breakpoint\nALTER TABLE \\`schemas\\` ADD \\`is_draft\\` integer;`\n\nexport const migrationSql_0002_bitter_proudstar = `CREATE UNIQUE INDEX \\`unique_schema_file_id\\` ON \\`models\\` (\\`schema_file_id\\`);--> statement-breakpoint\nCREATE UNIQUE INDEX \\`unique_property_schema_file_id\\` ON \\`properties\\` (\\`schema_file_id\\`);--> statement-breakpoint\nCREATE UNIQUE INDEX \\`unique_schema_schema_file_id\\` ON \\`schemas\\` (\\`schema_file_id\\`);`\n\nexport const migrationSql_0003_cultured_senator_kelly = `ALTER TABLE \\`models\\` ADD \\`is_edited\\` integer;--> statement-breakpoint\nALTER TABLE \\`properties\\` ADD \\`is_edited\\` integer;--> statement-breakpoint\nALTER TABLE \\`schemas\\` ADD \\`is_edited\\` integer;`\n\nexport const migrationSql_0004_add_publisher_to_seeds = `ALTER TABLE \\`seeds\\` ADD \\`publisher\\` text;`\n\nexport const migrationSql_0005_bright_lily_hollister = `CREATE TABLE \\`publish_processes\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`seed_local_id\\` text NOT NULL,\n\t\\`model_name\\` text NOT NULL,\n\t\\`schema_id\\` text,\n\t\\`status\\` text NOT NULL,\n\t\\`started_at\\` integer NOT NULL,\n\t\\`completed_at\\` integer,\n\t\\`error_message\\` text,\n\t\\`error_step\\` text,\n\t\\`error_details\\` text,\n\t\\`persisted_snapshot\\` text NOT NULL,\n\t\\`seed_id\\` text,\n\t\\`existing_seed_uid\\` text,\n\t\\`created_at\\` integer,\n\t\\`updated_at\\` integer\n);\n--> statement-breakpoint\nCREATE TABLE \\`upload_processes\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`reimbursement_confirmed\\` integer NOT NULL,\n\t\\`reimbursement_transaction_id\\` text,\n\t\\`transaction_keys\\` text,\n\t\\`persisted_snapshot\\` text NOT NULL,\n\t\\`created_at\\` integer,\n\t\\`updated_at\\` integer\n);\n`\n\nexport const migrationSql_0006_add_publisher_to_versions_and_metadata = `ALTER TABLE \\`versions\\` ADD \\`publisher\\` text;\n--> statement-breakpoint\nALTER TABLE \\`metadata\\` ADD \\`publisher\\` text;\n`\n\nexport const migrationSql_0007_add_required_to_properties = `ALTER TABLE \\`properties\\` ADD \\`required\\` integer DEFAULT 0;\n`\n\nexport const migrationSql_0008_add_revoked_at_to_seeds = `ALTER TABLE \\`seeds\\` ADD \\`revoked_at\\` integer;\n`\n\nexport const migrationSql_0009_happy_namor = `PRAGMA foreign_keys=OFF;--> statement-breakpoint\nCREATE TABLE \\`__new_property_uids\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`uid\\` text NOT NULL,\n\t\\`property_id\\` integer NOT NULL,\n\tFOREIGN KEY (\\`property_id\\`) REFERENCES \\`properties\\`(\\`id\\`) ON UPDATE no action ON DELETE no action\n);\n--> statement-breakpoint\nINSERT INTO \\`__new_property_uids\\`(\"id\", \"uid\", \"property_id\") SELECT \"id\", \"uid\", \"property_id\" FROM \\`property_uids\\`;--> statement-breakpoint\nDROP TABLE \\`property_uids\\`;--> statement-breakpoint\nALTER TABLE \\`__new_property_uids\\` RENAME TO \\`property_uids\\`;--> statement-breakpoint\nPRAGMA foreign_keys=ON;--> statement-breakpoint\nCREATE UNIQUE INDEX \\`property_uids_property_id_unique\\` ON \\`property_uids\\` (\\`property_id\\`);--> statement-breakpoint\nALTER TABLE \\`metadata\\` ADD \\`property_id\\` integer REFERENCES properties(id);`\n\nexport const migrationSql_0010_add_arweave_l1_finalize_jobs = `CREATE TABLE \\`arweave_l1_finalize_jobs\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`seed_local_id\\` text NOT NULL,\n\t\\`data_item_id\\` text NOT NULL,\n\t\\`l1_transaction_id\\` text,\n\t\\`bundle_id\\` text,\n\t\\`version_local_id\\` text,\n\t\\`item_property_name\\` text,\n\t\\`phase\\` text NOT NULL,\n\t\\`status_json\\` text,\n\t\\`error_message\\` text,\n\t\\`created_at\\` integer NOT NULL,\n\t\\`updated_at\\` integer NOT NULL\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX \\`arweave_l1_finalize_jobs_data_item_id_unique\\` ON \\`arweave_l1_finalize_jobs\\` (\\`data_item_id\\`);\n`\n\nexport const migrationSql_0011_normalize_placeholder_uids = `UPDATE \\`versions\\` SET \\`uid\\` = NULL WHERE \\`uid\\` = 'NULL';\n--> statement-breakpoint\nUPDATE \\`versions\\` SET \\`seed_uid\\` = NULL WHERE \\`seed_uid\\` = 'NULL';\n--> statement-breakpoint\nUPDATE \\`metadata\\` SET \\`uid\\` = NULL WHERE \\`uid\\` = 'NULL';\n--> statement-breakpoint\nUPDATE \\`metadata\\` SET \\`version_uid\\` = NULL WHERE \\`version_uid\\` = 'NULL';\n--> statement-breakpoint\nUPDATE \\`seeds\\` SET \\`uid\\` = NULL WHERE \\`uid\\` = 'NULL';\n`\n\nexport const migrationSql_0012_html_embedded_image_co_publish = `CREATE TABLE \\`html_embedded_image_co_publish\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`parent_seed_local_id\\` text NOT NULL,\n\t\\`html_seed_local_id\\` text NOT NULL,\n\t\\`image_seed_local_id\\` text NOT NULL,\n\t\\`stable_key\\` text NOT NULL,\n\t\\`created_at\\` integer NOT NULL\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX \\`html_embed_co_pub_parent_html_stable\\` ON \\`html_embedded_image_co_publish\\` (\\`parent_seed_local_id\\`,\\`html_seed_local_id\\`,\\`stable_key\\`);\n`\n\nexport const migrationSql_0013_eas_sync_processes = `CREATE TABLE \\`eas_sync_processes\\` (\n\t\\`id\\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n\t\\`status\\` text NOT NULL,\n\t\\`started_at\\` integer NOT NULL,\n\t\\`completed_at\\` integer,\n\t\\`request_payload\\` text NOT NULL,\n\t\\`error_message\\` text,\n\t\\`error_details\\` text,\n\t\\`persisted_snapshot\\` text NOT NULL,\n\t\\`created_at\\` integer,\n\t\\`updated_at\\` integer\n);\n`\n\nexport const migrationSql_0014_add_error_code_to_publish_processes = `ALTER TABLE \\`publish_processes\\` ADD \\`error_code\\` text;\n`\n\nexport const migrationSql_0015_add_model_file_id_to_seeds = `ALTER TABLE \\`seeds\\` ADD \\`model_file_id\\` text;\n--> statement-breakpoint\nUPDATE \\`seeds\\` SET \\`model_file_id\\` = (\n\tSELECT \\`models\\`.\\`schema_file_id\\`\n\tFROM \\`metadata\\`\n\tINNER JOIN \\`properties\\` ON \\`properties\\`.\\`id\\` = \\`metadata\\`.\\`property_id\\`\n\tINNER JOIN \\`models\\` ON \\`models\\`.\\`id\\` = \\`properties\\`.\\`model_id\\`\n\tWHERE \\`metadata\\`.\\`seed_local_id\\` = \\`seeds\\`.\\`local_id\\`\n\t\tAND \\`models\\`.\\`schema_file_id\\` IS NOT NULL\n\tLIMIT 1\n) WHERE \\`model_file_id\\` IS NULL;\n`\n\nexport const migrationSql_0016_add_revoked_at_to_metadata = `ALTER TABLE \\`metadata\\` ADD \\`revoked_at\\` integer;\n`\n\nexport const migrationSql_0017_add_revoked_at_to_versions = `ALTER TABLE \\`versions\\` ADD \\`revoked_at\\` integer;`\n\nexport const migrationSql_0018_add_storage_settings_to_properties = `ALTER TABLE \\`properties\\` ADD \\`storage_type\\` text;\n--> statement-breakpoint\nALTER TABLE \\`properties\\` ADD \\`local_storage_dir\\` text;\n--> statement-breakpoint\nALTER TABLE \\`properties\\` ADD \\`filename_suffix\\` text;\n--> statement-breakpoint\nUPDATE \\`properties\\` SET (\\`storage_type\\`, \\`local_storage_dir\\`, \\`filename_suffix\\`) = (\n\tSELECT\n\t\tCASE\n\t\t\tWHEN json_type(\\`p\\`.\\`def\\`, '$.storage') = 'object' THEN\n\t\t\t\tCASE WHEN json_extract(\\`p\\`.\\`def\\`, '$.storage.type') = 'ItemStorage' THEN 'ItemStorage' ELSE 'PropertyStorage' END\n\t\t\tELSE json_extract(\\`p\\`.\\`def\\`, '$.storageType')\n\t\tEND,\n\t\tCASE\n\t\t\tWHEN json_type(\\`p\\`.\\`def\\`, '$.storage') = 'object' THEN json_extract(\\`p\\`.\\`def\\`, '$.storage.path')\n\t\t\tELSE json_extract(\\`p\\`.\\`def\\`, '$.localStorageDir')\n\t\tEND,\n\t\tCASE\n\t\t\tWHEN json_type(\\`p\\`.\\`def\\`, '$.storage') = 'object' THEN json_extract(\\`p\\`.\\`def\\`, '$.storage.extension')\n\t\t\tELSE json_extract(\\`p\\`.\\`def\\`, '$.filenameSuffix')\n\t\tEND\n\tFROM (\n\t\tSELECT json_extract(\n\t\t\t\\`schemas\\`.\\`schema_data\\`,\n\t\t\t'$.models.\"' || \\`models\\`.\\`name\\` || '\".properties.\"' || \\`properties\\`.\\`name\\` || '\"'\n\t\t) AS \\`def\\`\n\t\tFROM \\`models\\`\n\t\tINNER JOIN \\`model_schemas\\` ON \\`model_schemas\\`.\\`model_id\\` = \\`models\\`.\\`id\\`\n\t\tINNER JOIN \\`schemas\\` ON \\`schemas\\`.\\`id\\` = \\`model_schemas\\`.\\`schema_id\\`\n\t\tWHERE \\`models\\`.\\`id\\` = \\`properties\\`.\\`model_id\\`\n\t\t\tAND \\`models\\`.\\`name\\` NOT LIKE '%\"%'\n\t\t\tAND json_valid(\\`schemas\\`.\\`schema_data\\`)\n\t\t\tAND json_type(\n\t\t\t\t\\`schemas\\`.\\`schema_data\\`,\n\t\t\t\t'$.models.\"' || \\`models\\`.\\`name\\` || '\".properties.\"' || \\`properties\\`.\\`name\\` || '\"'\n\t\t\t) = 'object'\n\t\tORDER BY \\`schemas\\`.\\`id\\` DESC\n\t\tLIMIT 1\n\t) AS \\`p\\`\n) WHERE \\`storage_type\\` IS NULL\n\tAND \\`name\\` NOT LIKE '%\"%'\n\tAND EXISTS (\n\t\tSELECT 1 FROM \\`models\\`\n\t\tINNER JOIN \\`model_schemas\\` ON \\`model_schemas\\`.\\`model_id\\` = \\`models\\`.\\`id\\`\n\t\tINNER JOIN \\`schemas\\` ON \\`schemas\\`.\\`id\\` = \\`model_schemas\\`.\\`schema_id\\`\n\t\tWHERE \\`models\\`.\\`id\\` = \\`properties\\`.\\`model_id\\`\n\t\t\tAND \\`models\\`.\\`name\\` NOT LIKE '%\"%'\n\t\t\tAND json_valid(\\`schemas\\`.\\`schema_data\\`)\n\t\t\tAND json_type(\n\t\t\t\t\\`schemas\\`.\\`schema_data\\`,\n\t\t\t\t'$.models.\"' || \\`models\\`.\\`name\\` || '\".properties.\"' || \\`properties\\`.\\`name\\` || '\"'\n\t\t\t) = 'object'\n\t);\n`\n\nexport const migrationSql_0019_add_derived_from_uid_to_metadata = `ALTER TABLE \\`metadata\\` ADD \\`derived_from_uid\\` text;\n--> statement-breakpoint\nUPDATE \\`metadata\\` SET\n\t\\`derived_from_uid\\` = (\n\t\tSELECT \\`source\\`.\\`uid\\`\n\t\tFROM \\`metadata\\` AS \\`source\\`\n\t\tWHERE \\`source\\`.\\`version_uid\\` = \\`metadata\\`.\\`version_uid\\`\n\t\t\tAND \\`source\\`.\\`property_name\\` = 'storageTransactionId'\n\t\t\tAND \\`source\\`.\\`uid\\` IS NOT NULL\n\t\t\tAND \\`source\\`.\\`property_value\\` = \\`metadata\\`.\\`property_value\\`\n\t\tORDER BY COALESCE(\\`source\\`.\\`attestation_created_at\\`, \\`source\\`.\\`created_at\\`) DESC\n\t\tLIMIT 1\n\t),\n\t\\`attestation_created_at\\` = COALESCE(\\`attestation_created_at\\`, (\n\t\tSELECT \\`source\\`.\\`attestation_created_at\\`\n\t\tFROM \\`metadata\\` AS \\`source\\`\n\t\tWHERE \\`source\\`.\\`version_uid\\` = \\`metadata\\`.\\`version_uid\\`\n\t\t\tAND \\`source\\`.\\`property_name\\` = 'storageTransactionId'\n\t\t\tAND \\`source\\`.\\`uid\\` IS NOT NULL\n\t\t\tAND \\`source\\`.\\`property_value\\` = \\`metadata\\`.\\`property_value\\`\n\t\tORDER BY COALESCE(\\`source\\`.\\`attestation_created_at\\`, \\`source\\`.\\`created_at\\`) DESC\n\t\tLIMIT 1\n\t))\nWHERE \\`uid\\` IS NULL\n\tAND \\`ref_value_type\\` = 'file'\n\tAND \\`version_uid\\` IS NOT NULL\n\tAND \\`derived_from_uid\\` IS NULL\n\tAND EXISTS (\n\t\tSELECT 1\n\t\tFROM \\`metadata\\` AS \\`source\\`\n\t\tWHERE \\`source\\`.\\`version_uid\\` = \\`metadata\\`.\\`version_uid\\`\n\t\t\tAND \\`source\\`.\\`property_name\\` = 'storageTransactionId'\n\t\t\tAND \\`source\\`.\\`uid\\` IS NOT NULL\n\t\t\tAND \\`source\\`.\\`property_value\\` = \\`metadata\\`.\\`property_value\\`\n\t);\n`\n\n// Journal JSON file\nexport const journalJson = `{\n \"version\": \"7\",\n \"dialect\": \"sqlite\",\n \"entries\": [\n {\n \"idx\": 0,\n \"version\": \"6\",\n \"when\": 1765976502903,\n \"tag\": \"0000_married_malice\",\n \"breakpoints\": true\n },\n {\n \"idx\": 1,\n \"version\": \"6\",\n \"when\": 1766010851770,\n \"tag\": \"0001_sweet_bruce_banner\",\n \"breakpoints\": true\n },\n {\n \"idx\": 2,\n \"version\": \"6\",\n \"when\": 1767621120087,\n \"tag\": \"0002_bitter_proudstar\",\n \"breakpoints\": true\n },\n {\n \"idx\": 3,\n \"version\": \"6\",\n \"when\": 1768415440282,\n \"tag\": \"0003_cultured_senator_kelly\",\n \"breakpoints\": true\n },\n {\n \"idx\": 4,\n \"version\": \"6\",\n \"when\": 1768500000000,\n \"tag\": \"0004_add_publisher_to_seeds\",\n \"breakpoints\": true\n },\n {\n \"idx\": 5,\n \"version\": \"6\",\n \"when\": 1772489937031,\n \"tag\": \"0005_bright_lily_hollister\",\n \"breakpoints\": true\n },\n {\n \"idx\": 6,\n \"version\": \"6\",\n \"when\": 1772600000000,\n \"tag\": \"0006_add_publisher_to_versions_and_metadata\",\n \"breakpoints\": true\n },\n {\n \"idx\": 7,\n \"version\": \"6\",\n \"when\": 1772700000000,\n \"tag\": \"0007_add_required_to_properties\",\n \"breakpoints\": true\n },\n {\n \"idx\": 8,\n \"version\": \"6\",\n \"when\": 1772800000000,\n \"tag\": \"0008_add_revoked_at_to_seeds\",\n \"breakpoints\": true\n },\n {\n \"idx\": 9,\n \"version\": \"6\",\n \"when\": 1773924021107,\n \"tag\": \"0009_happy_namor\",\n \"breakpoints\": true\n },\n {\n \"idx\": 10,\n \"version\": \"6\",\n \"when\": 1774000000000,\n \"tag\": \"0010_add_arweave_l1_finalize_jobs\",\n \"breakpoints\": true\n },\n {\n \"idx\": 11,\n \"version\": \"6\",\n \"when\": 1774100000000,\n \"tag\": \"0011_normalize_placeholder_uids\",\n \"breakpoints\": true\n },\n {\n \"idx\": 12,\n \"version\": \"6\",\n \"when\": 1774200000000,\n \"tag\": \"0012_html_embedded_image_co_publish\",\n \"breakpoints\": true\n },\n {\n \"idx\": 13,\n \"version\": \"6\",\n \"when\": 1774300000000,\n \"tag\": \"0013_eas_sync_processes\",\n \"breakpoints\": true\n },\n {\n \"idx\": 14,\n \"version\": \"6\",\n \"when\": 1774400000000,\n \"tag\": \"0014_add_error_code_to_publish_processes\",\n \"breakpoints\": true\n },\n {\n \"idx\": 15,\n \"version\": \"6\",\n \"when\": 1774500000000,\n \"tag\": \"0015_add_model_file_id_to_seeds\",\n \"breakpoints\": true\n },\n {\n \"idx\": 16,\n \"version\": \"6\",\n \"when\": 1774600000000,\n \"tag\": \"0016_add_revoked_at_to_metadata\",\n \"breakpoints\": true\n },\n {\n \"idx\": 17,\n \"version\": \"6\",\n \"when\": 1774700000000,\n \"tag\": \"0017_add_revoked_at_to_versions\",\n \"breakpoints\": true\n },\n {\n \"idx\": 18,\n \"version\": \"6\",\n \"when\": 1774800000000,\n \"tag\": \"0018_add_storage_settings_to_properties\",\n \"breakpoints\": true\n },\n {\n \"idx\": 19,\n \"version\": \"6\",\n \"when\": 1774900000000,\n \"tag\": \"0019_add_derived_from_uid_to_metadata\",\n \"breakpoints\": true\n }\n ]\n}`\n\n// Snapshot JSON file - this is large, so we'll import it dynamically if needed\n// For now, we'll read it from the actual file if ?raw works, otherwise we'll need to embed it\nexport const snapshotJson = `{\n \"version\": \"6\",\n \"dialect\": \"sqlite\",\n \"id\": \"dd5a777b-e1a9-4b35-82c6-b0c2c7a8ef4d\",\n \"prevId\": \"ab739b16-741c-4ac4-b3bc-a894ef2582a1\",\n \"tables\": {\n \"appState\": {\n \"name\": \"appState\",\n \"columns\": {\n \"key\": {\n \"name\": \"key\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"value\": {\n \"name\": \"value\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"updated_at\": {\n \"name\": \"updated_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"appState_key_unique\": {\n \"name\": \"appState_key_unique\",\n \"columns\": [\n \"key\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"arweave_l1_finalize_jobs\": {\n \"name\": \"arweave_l1_finalize_jobs\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"seed_local_id\": {\n \"name\": \"seed_local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"data_item_id\": {\n \"name\": \"data_item_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"l1_transaction_id\": {\n \"name\": \"l1_transaction_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"bundle_id\": {\n \"name\": \"bundle_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"version_local_id\": {\n \"name\": \"version_local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"item_property_name\": {\n \"name\": \"item_property_name\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"phase\": {\n \"name\": \"phase\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"status_json\": {\n \"name\": \"status_json\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"error_message\": {\n \"name\": \"error_message\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"updated_at\": {\n \"name\": \"updated_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"arweave_l1_finalize_jobs_data_item_id_unique\": {\n \"name\": \"arweave_l1_finalize_jobs_data_item_id_unique\",\n \"columns\": [\n \"data_item_id\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"config\": {\n \"name\": \"config\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"key\": {\n \"name\": \"key\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"text\": {\n \"name\": \"text\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"json\": {\n \"name\": \"json\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"blob\": {\n \"name\": \"blob\",\n \"type\": \"blob\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {},\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"eas_sync_processes\": {\n \"name\": \"eas_sync_processes\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"status\": {\n \"name\": \"status\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"started_at\": {\n \"name\": \"started_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"completed_at\": {\n \"name\": \"completed_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"request_payload\": {\n \"name\": \"request_payload\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"error_message\": {\n \"name\": \"error_message\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"error_details\": {\n \"name\": \"error_details\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"persisted_snapshot\": {\n \"name\": \"persisted_snapshot\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"updated_at\": {\n \"name\": \"updated_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {},\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"html_embedded_image_co_publish\": {\n \"name\": \"html_embedded_image_co_publish\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"parent_seed_local_id\": {\n \"name\": \"parent_seed_local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"html_seed_local_id\": {\n \"name\": \"html_seed_local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"image_seed_local_id\": {\n \"name\": \"image_seed_local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"stable_key\": {\n \"name\": \"stable_key\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"html_embed_co_pub_parent_html_stable\": {\n \"name\": \"html_embed_co_pub_parent_html_stable\",\n \"columns\": [\n \"parent_seed_local_id\",\n \"html_seed_local_id\",\n \"stable_key\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"metadata\": {\n \"name\": \"metadata\",\n \"columns\": {\n \"local_id\": {\n \"name\": \"local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"uid\": {\n \"name\": \"uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"property_id\": {\n \"name\": \"property_id\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"property_name\": {\n \"name\": \"property_name\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"property_value\": {\n \"name\": \"property_value\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"schema_uid\": {\n \"name\": \"schema_uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"model_type\": {\n \"name\": \"model_type\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"seed_local_id\": {\n \"name\": \"seed_local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"seed_uid\": {\n \"name\": \"seed_uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"version_local_id\": {\n \"name\": \"version_local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"version_uid\": {\n \"name\": \"version_uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"eas_data_type\": {\n \"name\": \"eas_data_type\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"ref_value_type\": {\n \"name\": \"ref_value_type\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"ref_schema_uid\": {\n \"name\": \"ref_schema_uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"ref_seed_type\": {\n \"name\": \"ref_seed_type\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"ref_resolved_value\": {\n \"name\": \"ref_resolved_value\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"ref_resolved_display_value\": {\n \"name\": \"ref_resolved_display_value\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"local_storage_dir\": {\n \"name\": \"local_storage_dir\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"attestation_raw\": {\n \"name\": \"attestation_raw\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"attestation_created_at\": {\n \"name\": \"attestation_created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"content_hash\": {\n \"name\": \"content_hash\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"updated_at\": {\n \"name\": \"updated_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"publisher\": {\n \"name\": \"publisher\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"revoked_at\": {\n \"name\": \"revoked_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"derived_from_uid\": {\n \"name\": \"derived_from_uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"metadata_local_id_unique\": {\n \"name\": \"metadata_local_id_unique\",\n \"columns\": [\n \"local_id\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {\n \"metadata_property_id_properties_id_fk\": {\n \"name\": \"metadata_property_id_properties_id_fk\",\n \"tableFrom\": \"metadata\",\n \"tableTo\": \"properties\",\n \"columnsFrom\": [\n \"property_id\"\n ],\n \"columnsTo\": [\n \"id\"\n ],\n \"onDelete\": \"no action\",\n \"onUpdate\": \"no action\"\n }\n },\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"models\": {\n \"name\": \"models\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"name\": {\n \"name\": \"name\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"schema_file_id\": {\n \"name\": \"schema_file_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"is_edited\": {\n \"name\": \"is_edited\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"unique_schema_file_id\": {\n \"name\": \"unique_schema_file_id\",\n \"columns\": [\n \"schema_file_id\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"properties\": {\n \"name\": \"properties\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"name\": {\n \"name\": \"name\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"data_type\": {\n \"name\": \"data_type\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"model_id\": {\n \"name\": \"model_id\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"ref_model_id\": {\n \"name\": \"ref_model_id\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"ref_value_type\": {\n \"name\": \"ref_value_type\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"schema_file_id\": {\n \"name\": \"schema_file_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"is_edited\": {\n \"name\": \"is_edited\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"required\": {\n \"name\": \"required\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"storage_type\": {\n \"name\": \"storage_type\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"local_storage_dir\": {\n \"name\": \"local_storage_dir\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"filename_suffix\": {\n \"name\": \"filename_suffix\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"unique_name_model_id\": {\n \"name\": \"unique_name_model_id\",\n \"columns\": [\n \"name\",\n \"model_id\"\n ],\n \"isUnique\": true\n },\n \"unique_property_schema_file_id\": {\n \"name\": \"unique_property_schema_file_id\",\n \"columns\": [\n \"schema_file_id\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {\n \"properties_model_id_models_id_fk\": {\n \"name\": \"properties_model_id_models_id_fk\",\n \"tableFrom\": \"properties\",\n \"tableTo\": \"models\",\n \"columnsFrom\": [\n \"model_id\"\n ],\n \"columnsTo\": [\n \"id\"\n ],\n \"onDelete\": \"no action\",\n \"onUpdate\": \"no action\"\n },\n \"properties_ref_model_id_models_id_fk\": {\n \"name\": \"properties_ref_model_id_models_id_fk\",\n \"tableFrom\": \"properties\",\n \"tableTo\": \"models\",\n \"columnsFrom\": [\n \"ref_model_id\"\n ],\n \"columnsTo\": [\n \"id\"\n ],\n \"onDelete\": \"no action\",\n \"onUpdate\": \"no action\"\n }\n },\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"model_schemas\": {\n \"name\": \"model_schemas\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"model_id\": {\n \"name\": \"model_id\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"schema_id\": {\n \"name\": \"schema_id\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {},\n \"foreignKeys\": {\n \"model_schemas_model_id_models_id_fk\": {\n \"name\": \"model_schemas_model_id_models_id_fk\",\n \"tableFrom\": \"model_schemas\",\n \"tableTo\": \"models\",\n \"columnsFrom\": [\n \"model_id\"\n ],\n \"columnsTo\": [\n \"id\"\n ],\n \"onDelete\": \"no action\",\n \"onUpdate\": \"no action\"\n },\n \"model_schemas_schema_id_schemas_id_fk\": {\n \"name\": \"model_schemas_schema_id_schemas_id_fk\",\n \"tableFrom\": \"model_schemas\",\n \"tableTo\": \"schemas\",\n \"columnsFrom\": [\n \"schema_id\"\n ],\n \"columnsTo\": [\n \"id\"\n ],\n \"onDelete\": \"no action\",\n \"onUpdate\": \"no action\"\n }\n },\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"model_uids\": {\n \"name\": \"model_uids\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"uid\": {\n \"name\": \"uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"model_id\": {\n \"name\": \"model_id\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"model_uids_model_id_unique\": {\n \"name\": \"model_uids_model_id_unique\",\n \"columns\": [\n \"model_id\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {\n \"model_uids_model_id_models_id_fk\": {\n \"name\": \"model_uids_model_id_models_id_fk\",\n \"tableFrom\": \"model_uids\",\n \"tableTo\": \"models\",\n \"columnsFrom\": [\n \"model_id\"\n ],\n \"columnsTo\": [\n \"id\"\n ],\n \"onDelete\": \"no action\",\n \"onUpdate\": \"no action\"\n }\n },\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"property_uids\": {\n \"name\": \"property_uids\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"uid\": {\n \"name\": \"uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"property_id\": {\n \"name\": \"property_id\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"property_uids_property_id_unique\": {\n \"name\": \"property_uids_property_id_unique\",\n \"columns\": [\n \"property_id\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {\n \"property_uids_property_id_properties_id_fk\": {\n \"name\": \"property_uids_property_id_properties_id_fk\",\n \"tableFrom\": \"property_uids\",\n \"tableTo\": \"properties\",\n \"columnsFrom\": [\n \"property_id\"\n ],\n \"columnsTo\": [\n \"id\"\n ],\n \"onDelete\": \"no action\",\n \"onUpdate\": \"no action\"\n }\n },\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"publish_processes\": {\n \"name\": \"publish_processes\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"seed_local_id\": {\n \"name\": \"seed_local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"model_name\": {\n \"name\": \"model_name\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"schema_id\": {\n \"name\": \"schema_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"status\": {\n \"name\": \"status\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"started_at\": {\n \"name\": \"started_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"completed_at\": {\n \"name\": \"completed_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"error_message\": {\n \"name\": \"error_message\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"error_step\": {\n \"name\": \"error_step\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"error_details\": {\n \"name\": \"error_details\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"error_code\": {\n \"name\": \"error_code\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"persisted_snapshot\": {\n \"name\": \"persisted_snapshot\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"seed_id\": {\n \"name\": \"seed_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"existing_seed_uid\": {\n \"name\": \"existing_seed_uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"updated_at\": {\n \"name\": \"updated_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {},\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"schemas\": {\n \"name\": \"schemas\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"name\": {\n \"name\": \"name\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"version\": {\n \"name\": \"version\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"schema_file_id\": {\n \"name\": \"schema_file_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"schema_data\": {\n \"name\": \"schema_data\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"is_draft\": {\n \"name\": \"is_draft\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"is_edited\": {\n \"name\": \"is_edited\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"updated_at\": {\n \"name\": \"updated_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"unique_schema_schema_file_id\": {\n \"name\": \"unique_schema_schema_file_id\",\n \"columns\": [\n \"schema_file_id\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"seeds\": {\n \"name\": \"seeds\",\n \"columns\": {\n \"local_id\": {\n \"name\": \"local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"uid\": {\n \"name\": \"uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"schema_uid\": {\n \"name\": \"schema_uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"type\": {\n \"name\": \"type\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"model_file_id\": {\n \"name\": \"model_file_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"publisher\": {\n \"name\": \"publisher\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"attestation_raw\": {\n \"name\": \"attestation_raw\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"attestation_created_at\": {\n \"name\": \"attestation_created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"updated_at\": {\n \"name\": \"updated_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"_marked_for_deletion\": {\n \"name\": \"_marked_for_deletion\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"revoked_at\": {\n \"name\": \"revoked_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"seeds_local_id_unique\": {\n \"name\": \"seeds_local_id_unique\",\n \"columns\": [\n \"local_id\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"upload_processes\": {\n \"name\": \"upload_processes\",\n \"columns\": {\n \"id\": {\n \"name\": \"id\",\n \"type\": \"integer\",\n \"primaryKey\": true,\n \"notNull\": true,\n \"autoincrement\": true\n },\n \"reimbursement_confirmed\": {\n \"name\": \"reimbursement_confirmed\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"reimbursement_transaction_id\": {\n \"name\": \"reimbursement_transaction_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"transaction_keys\": {\n \"name\": \"transaction_keys\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"persisted_snapshot\": {\n \"name\": \"persisted_snapshot\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": true,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"updated_at\": {\n \"name\": \"updated_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {},\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n },\n \"versions\": {\n \"name\": \"versions\",\n \"columns\": {\n \"local_id\": {\n \"name\": \"local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"uid\": {\n \"name\": \"uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"seed_local_id\": {\n \"name\": \"seed_local_id\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"seed_uid\": {\n \"name\": \"seed_uid\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"seed_type\": {\n \"name\": \"seed_type\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"note\": {\n \"name\": \"note\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"created_at\": {\n \"name\": \"created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"updated_at\": {\n \"name\": \"updated_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"attestation_created_at\": {\n \"name\": \"attestation_created_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"attestation_raw\": {\n \"name\": \"attestation_raw\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"publisher\": {\n \"name\": \"publisher\",\n \"type\": \"text\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n },\n \"revoked_at\": {\n \"name\": \"revoked_at\",\n \"type\": \"integer\",\n \"primaryKey\": false,\n \"notNull\": false,\n \"autoincrement\": false\n }\n },\n \"indexes\": {\n \"versions_local_id_unique\": {\n \"name\": \"versions_local_id_unique\",\n \"columns\": [\n \"local_id\"\n ],\n \"isUnique\": true\n }\n },\n \"foreignKeys\": {},\n \"compositePrimaryKeys\": {},\n \"uniqueConstraints\": {},\n \"checkConstraints\": {}\n }\n },\n \"views\": {},\n \"enums\": {},\n \"_meta\": {\n \"schemas\": {},\n \"tables\": {},\n \"columns\": {}\n },\n \"internal\": {\n \"indexes\": {}\n }\n}`\n","import { sha256 } from '@noble/hashes/sha256'\nimport { bytesToHex, utf8ToBytes } from '@noble/hashes/utils'\nimport { sql } from 'drizzle-orm'\nimport type { SqliteRemoteDatabase } from 'drizzle-orm/sqlite-proxy'\nimport * as drizzleFiles from './drizzleFiles'\nimport { journalJson } from './drizzleFiles'\n\nexport type EmbeddedMigration = {\n sql: string[]\n folderMillis: number\n hash: string\n bps: boolean\n}\n\ntype JournalEntry = {\n idx: number\n tag: string\n when: number\n breakpoints?: boolean\n}\n\n/**\n * Build drizzle migration metadata from embedded SQL strings.\n * Avoids `drizzle-orm/migrator` (Node fs / path / crypto) on the browser graph.\n */\nexport function getEmbeddedMigrations(): EmbeddedMigration[] {\n const journal = JSON.parse(journalJson) as { entries?: JournalEntry[] }\n const entries = journal.entries ?? []\n return entries.map((entry) => {\n const varName = `migrationSql_${entry.tag}` as keyof typeof drizzleFiles\n const query = drizzleFiles[varName]\n if (typeof query !== 'string') {\n throw new Error(`No embedded migration content for ${entry.tag}`)\n }\n const trimmed = query.trim()\n return {\n sql: trimmed.split('--> statement-breakpoint'),\n bps: Boolean(entry.breakpoints),\n folderMillis: entry.when,\n hash: bytesToHex(sha256(utf8ToBytes(trimmed))),\n }\n })\n}\n\n/**\n * Applies one migration's statements, including the row that records it in the migrations table.\n * Pass an atomic runner (a transaction) so a crash or a racing tab can't leave it half-applied.\n */\nexport type MigrationRunner = (queries: string[], migration: EmbeddedMigration) => Promise<void>\n\n/** SQLite ignores `PRAGMA foreign_keys` inside a transaction, so such migrations must run outside one. */\nexport function canRunInTransaction(migration: EmbeddedMigration): boolean {\n return !migration.sql.some((query) => /^\\s*PRAGMA\\s+foreign_keys\\b/im.test(query))\n}\n\n/**\n * Same apply loop as drizzle-orm/sqlite-proxy/migrator, with in-memory migrations. Callers sharing\n * the database across tabs must hold a cross-tab lock: the read of the last applied migration and\n * the writes that follow aren't atomic.\n */\nexport async function applyEmbeddedMigrations(\n db: SqliteRemoteDatabase<Record<string, unknown>>,\n migrations: EmbeddedMigration[],\n migrationsTable = '__drizzle_migrations',\n runMigration?: MigrationRunner,\n): Promise<void> {\n await db.run(sql`\n\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\tid SERIAL PRIMARY KEY,\n\t\t\thash text NOT NULL,\n\t\t\tcreated_at numeric\n\t\t)\n\t`)\n\n const dbMigrations = await db.values(\n sql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n )\n const lastDbMigration = dbMigrations[0] ?? undefined\n\n const runSequentially: MigrationRunner = async (queries) => {\n for (const query of queries) {\n await db.run(sql.raw(query))\n }\n }\n\n for (const migration of migrations) {\n if (!lastDbMigration || Number(lastDbMigration[2]) < migration.folderMillis) {\n const queries = [\n ...migration.sql,\n `INSERT INTO \\`${migrationsTable}\\` (\"hash\", \"created_at\") VALUES('${migration.hash}', '${migration.folderMillis}')`,\n ]\n await (runMigration ?? runSequentially)(queries, migration)\n }\n }\n}\n","import debug from 'debug'\n\nconst logger = debug('seedSdk:browser:db:sqliteBusyRetry')\n\n/** Waits between attempts; about 1 s in total. */\nexport const SQLITE_BUSY_RETRY_DELAYS_MS = [25, 75, 150, 300, 450]\n\n/**\n * Another connection (usually another tab) holds the database lock. SQLite reports this as\n * SQLITE_BUSY (\"database is locked\") or SQLITE_LOCKED (\"database table is locked\").\n */\nexport function isSqliteBusyError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error)\n return /SQLITE_BUSY|SQLITE_LOCKED|database (table )?is locked/i.test(message)\n}\n\n/**\n * Retries a statement another tab's lock rejected. Safe for the SDK's writes because each is a\n * single autocommit statement: one that failed with SQLITE_BUSY didn't apply. Don't use this for\n * statements inside a transaction, where a retry would replay part of it.\n */\nexport function withSqliteBusyRetry<Args extends unknown[], R>(\n driver: (...args: Args) => Promise<R>,\n delaysMs: number[] = SQLITE_BUSY_RETRY_DELAYS_MS,\n): (...args: Args) => Promise<R> {\n return async (...args: Args) => {\n for (let attempt = 0; ; attempt++) {\n try {\n return await driver(...args)\n } catch (error) {\n if (!isSqliteBusyError(error) || attempt >= delaysMs.length) throw error\n logger(`database busy (attempt ${attempt + 1}); retrying`)\n await new Promise((resolve) => setTimeout(resolve, delaysMs[attempt]))\n }\n }\n }\n}\n","import debug from 'debug'\n\nconst logger = debug('seedSdk:browser:db:createSqlocalDrizzle')\n\n/** First sqlocal work can include sqlite-wasm fetch; keep this long to avoid false positives. */\nexport const SQLOCAL_FIRST_QUERY_TIMEOUT_MS = 90_000\n\nconst HTTP_MODULE_WORKER_URL = /^https?:/i\n\nexport function shouldBlobWrapModuleWorker(\n scriptURL: string | URL,\n options?: WorkerOptions,\n): boolean {\n const type = options?.type ?? 'classic'\n if (type !== 'module') return false\n return HTTP_MODULE_WORKER_URL.test(String(scriptURL))\n}\n\nexport function createBlobModuleWorkerSource(scriptURL: string | URL): string {\n return `import ${JSON.stringify(String(scriptURL))};`\n}\n\nexport type CreatedSqlocalDrizzle<T> = {\n instance: T\n workerFailed: Promise<never>\n}\n\n/**\n * Construct SQLocal while starting its HTTPS module worker from a blob that\n * only imports the bundled worker URL. Some Chrome profiles kill\n * `new Worker(https://…/worker-HASH.js, { type: 'module' })` as an entry\n * script; importing the same URL from a blob worker reaches connect.\n *\n * The `Worker` patch is scoped to `factory()` so Vite still sees sqlocal's\n * own `new Worker(new URL('./worker', import.meta.url))` and emits a real\n * worker chunk.\n */\nexport function createSqlocalDrizzle<T>(factory: () => T): CreatedSqlocalDrizzle<T> {\n let rejectFailed: ((error: Error) => void) | undefined\n const workerFailed = new Promise<never>((_, reject) => {\n rejectFailed = reject\n })\n // Avoid an unhandled rejection if the caller throws before racing this promise.\n workerFailed.catch(() => {})\n\n const restore = installModuleWorkerBlobWrap((error) => {\n rejectFailed?.(error)\n })\n\n try {\n return { instance: factory(), workerFailed }\n } finally {\n restore()\n }\n}\n\nexport async function raceSqlocalStartup<T>(\n work: Promise<T>,\n workerFailed: Promise<never>,\n timeoutMs: number = SQLOCAL_FIRST_QUERY_TIMEOUT_MS,\n): Promise<T> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n const timedOut = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => {\n reject(\n new Error(\n `sqlocal database failed to become ready within ${timeoutMs}ms`,\n ),\n )\n }, timeoutMs)\n })\n\n try {\n return await Promise.race([work, workerFailed, timedOut])\n } finally {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId)\n }\n }\n}\n\nfunction installModuleWorkerBlobWrap(\n onWorkerFailed: (error: Error) => void,\n): () => void {\n const OriginalWorker = globalThis.Worker\n if (typeof OriginalWorker === 'undefined') {\n return () => {}\n }\n\n function WrappedWorker(\n this: Worker,\n scriptURL: string | URL,\n options?: WorkerOptions,\n ): Worker {\n const worker = shouldBlobWrapModuleWorker(scriptURL, options)\n ? new OriginalWorker(\n URL.createObjectURL(\n new Blob([createBlobModuleWorkerSource(scriptURL)], {\n type: 'text/javascript',\n }),\n ),\n { ...options, type: 'module' },\n )\n : new OriginalWorker(scriptURL, options)\n\n const fail = (event: Event) => {\n const filename =\n 'filename' in event && typeof event.filename === 'string'\n ? event.filename\n : ''\n const message =\n 'message' in event && typeof event.message === 'string'\n ? event.message\n : event.type\n const error = new Error(\n filename\n ? `sqlocal worker failed to start (${event.type}): ${message} [${filename}]`\n : `sqlocal worker failed to start (${event.type}): ${message}`,\n )\n logger('[createSqlocalDrizzle] worker failed', error.message)\n onWorkerFailed(error)\n }\n\n worker.addEventListener('error', fail)\n worker.addEventListener('messageerror', fail)\n return worker\n }\n\n WrappedWorker.prototype = OriginalWorker.prototype\n Object.setPrototypeOf(WrappedWorker, OriginalWorker)\n globalThis.Worker = WrappedWorker as unknown as typeof Worker\n\n return () => {\n globalThis.Worker = OriginalWorker\n }\n}\n","import { BaseDb } from \"@/db/Db/BaseDb\";\nimport { IDb } from \"@/interfaces/IDb\";\nimport debug from \"debug\";\nimport { drizzle, SqliteRemoteDatabase } from \"drizzle-orm/sqlite-proxy\";\nimport { applyEmbeddedMigrations, canRunInTransaction, getEmbeddedMigrations } from \"./embeddedMigrations\"\nimport { withSqliteBusyRetry } from \"./sqliteBusyRetry\"\nimport { withSeedDbLock } from \"@/helpers/tabLocks\"\nimport { sql } from \"drizzle-orm\"\nimport { BROWSER_FS_TOP_DIR } from \"@/client/constants\";\nimport { BaseFileManager } from \"@/helpers\";\nimport * as schema from '@/seedSchema'\n// @ts-ignore - sqlocal/drizzle types may not be available during build\nimport { SQLocalDrizzle } from 'sqlocal/drizzle'\nimport {} from 'sqlocal'\nimport * as drizzleFiles from './drizzleFiles'\nimport { journalJson, snapshotJson } from './drizzleFiles'\nimport { createSqlocalDrizzle, raceSqlocalStartup } from './createSqlocalDrizzle'\nimport { Observable, distinctUntilChanged } from 'rxjs'\nconst logger = debug('seedSdk:browser:db:Db')\n\n\nexport class BrowserDb implements IDb {\n\n sqliteWasmClient: any\n filesDir: string | undefined\n pathToDb: string | undefined\n dbId: string | undefined\n appDb: SqliteRemoteDatabase<Record<string, unknown>> | undefined\n sqlocalInstance: SQLocalDrizzle | undefined\n\n\n getAppDb() {\n return this.appDb\n }\n\n isAppDbReady() {\n return !!this.appDb\n }\n\n async prepareDb(filesDir: string) {\n\n logger('[Db.prepareDb] preparing database')\n\n this.filesDir = filesDir\n\n // Another tab may be preparing the same database: run file copies, migrations and the\n // one-time data fixes one tab at a time. See docs/MULTI_TAB.md.\n return withSeedDbLock('migrate', filesDir, () => this.prepareDbLocked(filesDir))\n }\n\n private async prepareDbLocked(filesDir: string) {\n try {\n // Copy drizzle migration files from src/db/drizzle to filesDir/db\n await this.copyDrizzleFiles(filesDir)\n\n // Ensure meta directory exists\n const metaDirPath = `${filesDir}/db/meta`\n await BaseFileManager.createDirIfNotExists(metaDirPath)\n\n // Ensure _journal.json file exists in meta directory\n const journalFilePath = `${metaDirPath}/_journal.json`\n const journalExists = await BaseFileManager.pathExists(journalFilePath)\n if (!journalExists) {\n await BaseFileManager.saveFile(journalFilePath, JSON.stringify({\n version: 1,\n dialect: 'sqlite',\n entries: [],\n }, null, 2))\n }\n\n // Wait for journal file to be fully written before proceeding with migration\n // This is critical in browser/OPFS where writes may not be immediately readable\n logger('[Db.prepareDb] waiting for journal file to be fully written...')\n await BaseFileManager.waitForFileWithContent(journalFilePath, 100, 5000)\n logger('[Db.prepareDb] journal file is ready')\n\n // Initialize SQLocalDrizzle with reactive: true to enable reactive queries.\n // Blob-wrap sqlocal's HTTPS module worker so Chrome profiles that kill\n // `new Worker(https://…/worker-HASH.js, { type: 'module' })` as an entry\n // still reach connect via `import` of the same URL.\n const { instance: sqlocalDrizzle, workerFailed } = createSqlocalDrizzle(\n () => new SQLocalDrizzle({\n databasePath: `${this.filesDir}/db/seed.db`,\n reactive: true,\n }),\n )\n\n const { batchDriver } = sqlocalDrizzle\n const driver = withSqliteBusyRetry(sqlocalDrizzle.driver)\n\n // Store SQLocalDrizzle instance for reactive queries\n this.sqlocalInstance = sqlocalDrizzle\n\n // Create db instance but do NOT set this.appDb yet. restoreFromDb (and other\n // callers of getAppDb()) must not see the db until migrations have completed,\n // otherwise they may query tables (e.g. publish_processes) that don't exist yet.\n const db = drizzle(\n driver,\n batchDriver,\n {\n schema,\n }\n )\n\n logger('[Db.prepareDb] database prepared')\n\n await raceSqlocalStartup((async () => {\n await this.runMigrations(db)\n\n this.appDb = db\n\n const { backfillMetadataPropertyIds } = await import('@/db/backfillMetadataPropertyIds')\n await backfillMetadataPropertyIds()\n\n // One-time: clear item data whose model can't be determined (seeds.model_file_id, migration 0015)\n const { resetAmbiguousLegacyItemData } = await import('@/db/resetAmbiguousLegacyItemData')\n await resetAmbiguousLegacyItemData()\n })(), workerFailed)\n\n return this.appDb\n } catch (error) {\n logger('[Db.prepareDb] error', JSON.stringify(error))\n throw error\n }\n }\n\n // static async prepareDb(filesDir: string) {\n // console.log('prepareDb', filesDir)\n // if (Db.sqliteWasmClient) {\n // return this.dbId\n // }\n\n // this.filesDir = filesDir\n // this.pathToDb = `${filesDir}/db/${DB_NAME_APP}.db`\n\n // if (typeof document === 'undefined') {\n // return\n // }\n\n // let promiser\n\n // try {\n\n // let sqlite3Worker1Promiser\n\n // const sqliteWasm = await import('@sqlite.org/sqlite-wasm')\n\n // if (sqliteWasm && sqliteWasm.sqlite3Worker1Promiser) {\n // sqlite3Worker1Promiser = sqliteWasm.sqlite3Worker1Promiser\n // }\n\n // if (!sqlite3Worker1Promiser && window.sqlite3Worker1Promiser) {\n // sqlite3Worker1Promiser = window.sqlite3Worker1Promiser\n // }\n\n // if (!sqlite3Worker1Promiser) {\n // throw new Error('Failed to load sqlite3Worker1Promiser')\n // }\n\n // promiser = await new Promise<(event: string, config: Record<string, unknown>) => Promise<any>>((resolve) => {\n // const _promiser = sqlite3Worker1Promiser({\n // onready: () => {\n // resolve(_promiser);\n // },\n // });\n // }).catch((error) => {\n // console.error('Error from sqlite proxy server: ', JSON.stringify(error))\n // });\n\n // } catch ( e ) {\n // console.error('Error from sqlite proxy server: ', JSON.stringify(e))\n // }\n\n\n // if (!promiser) {\n // throw new Error('Failed to create promiser')\n // }\n\n // this.sqliteWasmClient = promiser\n\n // const responseGet = await this.sqliteWasmClient('config-get', {});\n\n // logger('[Db.prepareDb] Running SQLite3 version', responseGet.result.version.libVersion);\n\n // const responseOpen = await this.sqliteWasmClient('open', {\n // filename: `file:${filesDir}/db/${DB_NAME_APP}.db?vfs=opfs`,\n // });\n // const { dbId } = responseOpen;\n // logger(\n // '[Db.prepareDb] OPFS is available, created persisted database at',\n // responseOpen.result.filename.replace(/^file:(.*?)\\?vfs=opfs/, '$1'),\n // );\n\n // logger('[Db.prepareDb] dbId', dbId)\n \n // this.dbId = dbId\n \n // await this.migrate()\n // }\n\n async connectToDb(filesDir: string,): Promise<string | undefined> {\n\n\n\n return this.dbId\n }\n\n async copyDrizzleFiles(filesDir: string): Promise<void> {\n logger('[Db.copyDrizzleFiles] copying drizzle migration files')\n\n try {\n // Ensure db directory exists\n const dbDirPath = `${filesDir}/db`\n await BaseFileManager.createDirIfNotExists(dbDirPath)\n\n // Ensure meta directory exists\n const metaDirPath = `${dbDirPath}/meta`\n await BaseFileManager.createDirIfNotExists(metaDirPath)\n\n // Parse journal JSON to get all migration entries\n const journal = JSON.parse(journalJson)\n const entries = journal.entries || []\n\n if (entries.length === 0) {\n logger('[Db.copyDrizzleFiles] no migration entries found in journal')\n return\n }\n\n // Copy each migration SQL file (always overwrite to ensure they're up-to-date)\n // Each migration is exported as a separate variable (e.g., migrationSql_0000_married_malice)\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n const tag = entry.tag // e.g., \"0000_married_malice\"\n const migrationFileName = `${tag}.sql`\n const migrationPath = `${dbDirPath}/${migrationFileName}`\n \n // Get the SQL for this migration from the exported variable\n const migrationVarName = `migrationSql_${tag}` as keyof typeof drizzleFiles\n const migrationContent = drizzleFiles[migrationVarName] as string | undefined\n \n if (!migrationContent) {\n logger(`[Db.copyDrizzleFiles] ERROR: No migration content found for ${migrationFileName} (variable: ${migrationVarName})`)\n throw new Error(`No migration content found for ${migrationFileName}. Expected variable: ${migrationVarName}`)\n }\n \n await BaseFileManager.saveFile(migrationPath, migrationContent.trim())\n logger(`[Db.copyDrizzleFiles] copied/updated migration SQL file: ${migrationFileName}`)\n }\n\n // Copy journal JSON file (always overwrite to ensure it's up-to-date with all migrations)\n const journalPath = `${metaDirPath}/_journal.json`\n await BaseFileManager.saveFile(journalPath, journalJson)\n logger('[Db.copyDrizzleFiles] copied/updated journal JSON file')\n\n // Copy snapshot JSON file (use the latest snapshot based on the highest idx in journal)\n // Snapshot files are named like: 0000_snapshot.json, 0001_snapshot.json, etc.\n // The tag format is like \"0000_married_malice\", so we extract the numeric prefix\n const latestEntry = entries[entries.length - 1]\n const tagPrefixMatch = latestEntry.tag.match(/^(\\d+_)/)\n const tagPrefix = tagPrefixMatch ? tagPrefixMatch[1] : '0000_'\n const snapshotFileName = `${tagPrefix}snapshot.json`\n const snapshotPath = `${metaDirPath}/${snapshotFileName}`\n // Always overwrite snapshot to ensure it's up-to-date\n await BaseFileManager.saveFile(snapshotPath, snapshotJson)\n logger(`[Db.copyDrizzleFiles] copied/updated snapshot JSON file: ${snapshotFileName}`)\n\n logger('[Db.copyDrizzleFiles] drizzle files copied successfully')\n } catch (error) {\n logger('[Db.copyDrizzleFiles] error copying drizzle files', error)\n // Don't throw - the files might already exist or migration might work without them\n // The migration will fail later if the files are truly needed\n }\n }\n\n /** Internal migration runner. Used by prepareDb before appDb is set. */\n private async runMigrations(\n db: SqliteRemoteDatabase<Record<string, unknown>>,\n _pathToDbDir?: string\n ): Promise<void> {\n try {\n const migrations = getEmbeddedMigrations()\n logger('[Db.runMigrations] embedded migrations', migrations.length)\n await applyEmbeddedMigrations(db, migrations, undefined, (queries, migration) =>\n this.runMigrationQueries(db, queries, canRunInTransaction(migration)),\n )\n logger('[Db.runMigrations] migrations completed')\n } catch (error) {\n logger('[Db.runMigrations] error', JSON.stringify(error))\n throw error\n }\n }\n\n /** Applies a migration atomically through SQLocal's transaction (exclusive across tabs) when SQLite allows. */\n private async runMigrationQueries(\n db: SqliteRemoteDatabase<Record<string, unknown>>,\n queries: string[],\n atomic: boolean,\n ): Promise<void> {\n const statements = queries.filter((query) => query.trim() !== '')\n if (!atomic || !this.sqlocalInstance) {\n for (const query of statements) {\n await db.run(sql.raw(query))\n }\n return\n }\n type TransactionQuery = (statement: { sql: string; params: unknown[] }) => Promise<unknown>\n await this.sqlocalInstance.transaction(async (tx: { query: TransactionQuery }) => {\n for (const query of statements) {\n await tx.query({ sql: query, params: [] })\n }\n })\n }\n\n async migrate(pathToDbDir: string, _dbName: string, _dbId: string): Promise<void> {\n const targetDb = this.appDb\n if (!targetDb) {\n throw new Error('Database not prepared')\n }\n await this.runMigrations(targetDb, pathToDbDir)\n }\n\n // Legacy commented migrate/exec implementation archived at\n // docs/archive/commented/browser-Db-legacy-migrate.ts.txt\n\n /**\n * Execute a reactive query that emits new results whenever the underlying data changes.\n * \n * Supports two usage patterns:\n * 1. SQL tag function: liveQuery((sql) => sql`SELECT * FROM models`)\n * 2. Drizzle query builder: liveQuery(db.select().from(models))\n * \n * @param query - SQL query function or Drizzle query builder\n * @returns Observable that emits arrays of query results\n * \n * @example\n * ```typescript\n * // Using SQL tag function\n * const models$ = Db.liveQuery<ModelRow>(\n * (sql) => sql`SELECT * FROM models WHERE schema_file_id = ${schemaId}`\n * )\n * \n * // Using Drizzle query builder\n * const models$ = Db.liveQuery<ModelRow>(\n * appDb.select().from(models).where(eq(models.schemaFileId, schemaId))\n * )\n * \n * models$.subscribe(models => {\n * console.log('Models updated:', models)\n * })\n * ```\n */\n liveQuery<T>(\n query: ((sql: any) => any) | any\n ): Observable<T[]> {\n if (!this.sqlocalInstance) {\n throw new Error('Database not initialized. Call prepareDb first.')\n }\n \n if (!this.sqlocalInstance.reactiveQuery) {\n throw new Error('Reactive queries not enabled. Initialize SQLocalDrizzle with reactive: true.')\n }\n\n const baseObservable = new Observable<T[]>((subscriber) => {\n const reactiveQueryResult = this.sqlocalInstance!.reactiveQuery(query)\n\n const subscription = reactiveQueryResult.subscribe(\n (data: Record<string, any>[]) => {\n subscriber.next(data as T[])\n },\n (err: Error) => {\n console.error('[BaseDb.liveQuery] SQLocal reactiveQuery error:', err)\n subscriber.error(err)\n }\n )\n\n return () => {\n subscription.unsubscribe()\n }\n })\n\n // Compare stable JSON snapshots via keySelector. SQLocal may reuse one array reference\n // and mutate rows in place; comparing (prev, curr) on the same reference makes\n // JSON.stringify(prev) === JSON.stringify(curr) after mutation and suppresses emissions.\n return baseObservable.pipe(\n distinctUntilChanged(\n (a, b) => a === b,\n (x: T[]) => JSON.stringify(x)\n )\n )\n }\n}\n\n/** @deprecated Prefer BrowserDb */\nexport const Db = BrowserDb\n\nBaseDb.configure(new BrowserDb())\n\nconst _check: IDb = new BrowserDb()\nvoid _check\n","import { BaseArweaveClient } from \"@/helpers/ArweaveClient/BaseArweaveClient\";\nimport type { IArweaveClient } from \"@seedprotocol/arweave\";\nimport { GraphQLClient } from \"graphql-request\";\nimport Arweave from \"arweave\";\nimport type {\n TransactionStatus,\n TransactionTag,\n GetDataOptions,\n DownloadFilesParams,\n DownloadResult,\n CreateTransactionOptions,\n} from \"@/types/arweave\";\nimport {\n GET_TRANSACTION_TAGS,\n fetchArweaveRawFromBaseUrl,\n getPreferredArweaveReadBaseUrls,\n} from '@seedprotocol/arweave'\nimport debug from \"debug\";\n\nconst logger = debug(\"seedSdk:browser:ArweaveClient\");\n\n// Cached Arweave instance (keyed by gateway so setHost / protocol changes apply)\nlet _arweaveInstance: Arweave | null = null;\nlet _arweaveGatewayKey: string | null = null;\n\n/**\n * Get or create the Arweave instance for browser\n */\nconst getArweaveInstance = (): Arweave => {\n const gatewayKey = `${BaseArweaveClient.getProtocol()}://${BaseArweaveClient.getHost()}`;\n if (_arweaveInstance && _arweaveGatewayKey === gatewayKey) {\n return _arweaveInstance;\n }\n\n _arweaveGatewayKey = gatewayKey;\n\n const apiConfig = BaseArweaveClient.getArweaveJsApiConfig();\n\n // Handle both ES modules and CommonJS exports from arweave package\n if (\"default\" in Arweave && typeof (Arweave as any).default?.init === \"function\") {\n _arweaveInstance = (Arweave as any).default.init(apiConfig);\n } else {\n _arweaveInstance = Arweave.init(apiConfig);\n }\n\n return _arweaveInstance!;\n};\n\nexport class BrowserArweaveClient implements IArweaveClient {\n getArweaveClient(): GraphQLClient {\n return new GraphQLClient(BaseArweaveClient.getEndpoint());\n }\n\n async getTransactionStatus(transactionId: string): Promise<TransactionStatus> {\n const url = BaseArweaveClient.getStatusUrl(transactionId);\n\n try {\n const response = await fetch(url);\n\n if (response.status === 404) {\n return {\n status: 404,\n confirmed: null,\n };\n }\n\n if (!response.ok) {\n return {\n status: response.status,\n confirmed: null,\n };\n }\n\n if (response.body) {\n await response.body.cancel();\n }\n\n return {\n status: 200,\n confirmed: null,\n };\n } catch (error) {\n logger(\"Error fetching transaction status:\", error);\n return {\n status: 500,\n confirmed: null,\n };\n }\n }\n\n async getTransactionData(\n transactionId: string,\n options?: GetDataOptions\n ): Promise<Uint8Array | string> {\n // Preferred gateways (usually the one the item was uploaded through) serve it before L1 does.\n // `/raw` is already decoded, so skip them when the caller asked for undecoded data.\n const preferred = options?.decode === false ? [] : getPreferredArweaveReadBaseUrls();\n for (const base of preferred) {\n const response = await fetchArweaveRawFromBaseUrl(base, transactionId);\n if (!response) continue;\n try {\n if (options?.string) {\n return await response.text();\n }\n return new Uint8Array(await response.arrayBuffer());\n } catch (error) {\n logger(\"Error reading preferred gateway response:\", error);\n }\n }\n\n // Path-prefixed proxies (app-server Hyper proxy) are not supported by arweave.init host;\n // fetch via getRawUrl so /api/seed-gateway/... works.\n if (BaseArweaveClient.getGatewayPath()) {\n const response = await fetch(BaseArweaveClient.getRawUrl(transactionId));\n if (!response.ok) {\n throw new Error(`Failed to fetch transaction data: HTTP ${response.status}`);\n }\n if (options?.string) {\n return response.text();\n }\n return new Uint8Array(await response.arrayBuffer());\n }\n\n const arweave = getArweaveInstance();\n\n try {\n const data = await arweave.transactions.getData(transactionId, {\n decode: options?.decode ?? true,\n string: options?.string ?? false,\n });\n\n if (options?.string && typeof data === \"string\") {\n return data;\n }\n\n // Ensure we return Uint8Array\n if (data instanceof Uint8Array) {\n return data;\n }\n\n // Handle string data when not requesting string\n if (typeof data === \"string\") {\n return new TextEncoder().encode(data);\n }\n\n return data as Uint8Array;\n } catch (error) {\n logger(\"Error fetching transaction data:\", error);\n throw error;\n }\n }\n\n async getTransactionTags(transactionId: string): Promise<TransactionTag[]> {\n const client = this.getArweaveClient();\n \n try {\n const result = await client.request(GET_TRANSACTION_TAGS, { transactionId });\n \n if (!result.tags?.tags) {\n return [];\n }\n\n return result.tags.tags.map((tag: { name: string; value: string }) => ({\n name: tag.name,\n value: tag.value,\n }));\n } catch (error) {\n logger(\"Error fetching transaction tags:\", error);\n return [];\n }\n }\n\n async createTransaction(\n data: string | Uint8Array,\n options?: CreateTransactionOptions\n ): Promise<any> {\n const arweave = getArweaveInstance();\n\n const tx = await arweave.createTransaction({\n data,\n });\n\n // Add tags if provided\n if (options?.tags) {\n for (const tag of options.tags) {\n tx.addTag(tag.name, tag.value);\n }\n }\n\n return tx;\n }\n\n async downloadFiles(params: DownloadFilesParams): Promise<DownloadResult[]> {\n const { transactionIds, excludedTransactions } = params;\n const results: DownloadResult[] = [];\n const baseUrl = BaseArweaveClient.getBaseUrl();\n\n for (const transactionId of transactionIds) {\n // Skip excluded transactions\n if (excludedTransactions?.has(transactionId)) {\n continue;\n }\n\n try {\n const url = `${baseUrl}/raw/${transactionId}`;\n const response = await fetch(url);\n\n if (!response.ok) {\n results.push({\n transactionId,\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`,\n });\n continue;\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const data = new Uint8Array(arrayBuffer);\n\n // Detect content type\n const contentType = response.headers.get(\"content-type\") || undefined;\n\n results.push({\n transactionId,\n success: true,\n contentType,\n data,\n });\n } catch (error) {\n logger(`Error downloading transaction ${transactionId}:`, error);\n results.push({\n transactionId,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return results;\n }\n}\n\n/** @deprecated Prefer BrowserArweaveClient */\nexport const ArweaveClient = BrowserArweaveClient;\n\nBaseArweaveClient.configure(new BrowserArweaveClient());\n","import { BaseEasClient } from '@/helpers/EasClient/BaseEasClient'\nimport { getEasEndpoint, type IEasClient } from '@seedprotocol/eas'\nimport { GraphQLClient } from 'graphql-request'\n\nexport class BrowserEasClient implements IEasClient {\n private easClient: { url: string; client: GraphQLClient } | undefined\n\n /** Reads the endpoint per call so SDK / publish chain config applied after import takes effect. */\n getEasClient(): GraphQLClient {\n const url = getEasEndpoint()\n if (this.easClient?.url !== url) {\n this.easClient = { url, client: new GraphQLClient(url) }\n }\n return this.easClient.client\n }\n}\n\n/** @deprecated Prefer BrowserEasClient */\nexport const EasClient = BrowserEasClient\n\nBaseEasClient.configure(new BrowserEasClient())\n","import { BaseQueryClient } from \"@/helpers/QueryClient/BaseQueryClient\";\nimport { NetworkMode, QueryClient as ReactQueryClient, } from \"@tanstack/react-query\";\nimport type { IQueryClient } from \"@/interfaces/IQueryClient\";\nimport type { IQueryClientFactory } from \"@seedprotocol/eas\";\n\n/**\n * Cached results are only reused within a query's staleTime (0 unless the caller sets one), so\n * they don't need to outlive that by much. Nothing persists this cache.\n */\nconst QUERY_GC_TIME_MS = 1000 * 60 * 5\n\nexport class BrowserQueryClient implements IQueryClientFactory {\n // One client per page, so concurrent requests with the same key share one fetch and a caller's\n // staleTime / removeQueries apply to later calls. Every query key must include its variables.\n private queryClient: IQueryClient | undefined\n\n getQueryClient(): IQueryClient {\n if (this.queryClient) return this.queryClient\n\n const reactQueryClient = new ReactQueryClient({\n defaultOptions: {\n queries: {\n networkMode: 'offlineFirst' as NetworkMode,\n gcTime: QUERY_GC_TIME_MS,\n },\n },\n })\n\n const queryClient: IQueryClient = {\n fetchQuery: async (options) => {\n const { queryKey, queryFn, networkMode, staleTime } = options\n return reactQueryClient.query({\n queryKey,\n queryFn,\n networkMode: networkMode as NetworkMode | undefined,\n staleTime,\n } as any) as Promise<any>\n },\n getQueryData: (queryKey: any) => {\n return reactQueryClient.getQueryData(queryKey)\n },\n removeQueries: async (filters) => {\n await reactQueryClient.removeQueries(filters)\n },\n }\n this.queryClient = queryClient\n return queryClient\n }\n}\n\n/** @deprecated Prefer BrowserQueryClient */\nexport const QueryClient = BrowserQueryClient\n\nBaseQueryClient.configure(new BrowserQueryClient())\n","import { BrowserPathResolver } from '@/browser/helpers/PathResolver'\nimport { BrowserFileManager } from '@/browser/helpers/FileManager'\nimport { BrowserDb } from '@/browser/db/Db'\nimport { BrowserArweaveClient } from '@/browser/helpers/ArweaveClient'\nimport { BrowserEasClient } from '@/browser/helpers/EasClient'\nimport { BrowserQueryClient } from '@/browser/helpers/QueryClient'\nimport type { PlatformServices } from './types'\n\nexport function createPlatformServices(): PlatformServices {\n return {\n pathResolver: new BrowserPathResolver(),\n fileManager: new BrowserFileManager(),\n db: new BrowserDb(),\n arweaveClient: new BrowserArweaveClient(),\n easClient: new BrowserEasClient(),\n queryClient: new BrowserQueryClient(),\n }\n}\n"],"names":["logger","ReactQueryClient"],"mappings":"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"}
|