{"version":3,"file":"index.mjs","sources":["../../../@hive/s3-storage/dist/index.mjs"],"sourcesContent":["import { ObjectNotFoundError, S3Client } from \"./_chunks/s3-client-CTMc7zi4.mjs\";\nimport { createWriteStream } from \"node:fs\";\nimport { access, constants, mkdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { Database } from \"@hive/sdk/database\";\nimport { ResourceExistsError, ResourceNotFoundError, serializeError } from \"@hive/sdk/errors\";\nimport { ResourceGetContentsEvent, ResourceGetMetadataEvent, ResourceSetContentsEvent, ResourceTransactionEvent, StorageCreateEvent, StorageDeleteEvent, StorageFreeEvent, StorageGetEvent, StorageHasEvent, StorageListEvent, StorageStartEvent, StorageStopEvent, UnexpectedErrorEvent } from \"@hive/sdk/events\";\nimport { formatDuration } from \"@hive/sdk/format\";\nimport { Namespace } from \"@hive/sdk/namespace\";\nimport { Operation } from \"@hive/sdk/operation\";\nimport { Selector } from \"@hive/sdk/selector\";\nimport { SQLITE_FIXTURE } from \"@hive/sdk/sqlite\";\nimport { Storage } from \"@hive/sdk/storage\";\nimport { isWrite } from \"@hive/sdk/transaction\";\nimport { ByteStream, binaryToByteStream, byteStreamToBinary } from \"@hive/streams\";\nimport { Index } from \"@hive/sdk/index\";\n\n//#region src/lib/index.ts\nconst S3_STORAGE_INDEX_ROW_SCHEMA = {\n\tkey: \"TEXT\",\n\tid: \"TEXT\",\n\ttype: \"TEXT\",\n\tparent: \"TEXT\",\n\tsize: \"INTEGER\",\n\tindexed_at: \"INTEGER\",\n\tcreated_at: \"INTEGER\",\n\tmodified_at: \"INTEGER\",\n\tscheduled_at: \"INTEGER\",\n\tsynchronized_at: \"INTEGER\"\n};\nconst parseDatabaseMetadata = (metadata) => ({\n\tkey: metadata.key,\n\ttype: metadata.type,\n\tparent: metadata.parent,\n\tsize: metadata.size,\n\tindexedAt: new Date(metadata.indexed_at),\n\tcreatedAt: metadata.created_at ? new Date(metadata.created_at) : null,\n\tmodifiedAt: metadata.modified_at ? new Date(metadata.modified_at) : null,\n\tscheduledAt: metadata.scheduled_at ? new Date(metadata.scheduled_at) : null,\n\tsynchronizedAt: metadata.synchronized_at ? new Date(metadata.synchronized_at) : null\n});\nconst parseNamespaceMetadata = (metadata) => ({\n\tkey: metadata.key,\n\ttype: metadata.type,\n\tparent: metadata.parent,\n\tindexedAt: new Date(metadata.indexed_at),\n\tcreatedAt: metadata.created_at ? new Date(metadata.created_at) : null,\n\tmodifiedAt: metadata.modified_at ? new Date(metadata.modified_at) : null,\n\tscheduledAt: metadata.scheduled_at ? new Date(metadata.scheduled_at) : null,\n\tsynchronizedAt: metadata.synchronized_at ? new Date(metadata.synchronized_at) : null\n});\nvar S3StorageIndex = class extends Index {\n\tstart = async (opts) => {\n\t\tif (this.pending.start) return this.pending.start;\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tthis.pending.start = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tconst [{ rows: columns }] = await this.connection.query({\n\t\t\t\t\tmode: \"DEFERRED\",\n\t\t\t\t\tstatements: [{\n\t\t\t\t\t\tsql: \"PRAGMA table_info(resources);\",\n\t\t\t\t\t\tparams: [],\n\t\t\t\t\t\tmethod: \"all\"\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t\tif (!columns.length || Object.entries(S3_STORAGE_INDEX_ROW_SCHEMA).some(([name, type]) => !columns.some((column) => column.name === name && column.type === type))) {\n\t\t\t\t\tthis.logger?.info(\"index is missing or does not match expected schema, performing refresh\", {\n\t\t\t\t\t\tmodule: Index.name,\n\t\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t\t});\n\t\t\t\t\tawait this.refresh({ trace: operation.trace });\n\t\t\t\t\treturn resolve$1(this);\n\t\t\t\t}\n\t\t\t\treturn resolve$1(this);\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t} finally {\n\t\t\t\tthis.pending.start = null;\n\t\t\t}\n\t\t});\n\t\treturn this.pending.start;\n\t};\n\tstop = async (opts) => {\n\t\tif (this.pending.stop) return this.pending.stop;\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tthis.pending.stop = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tawait this.connection.close();\n\t\t\t\tthis.logger?.info(\"closed index\", {\n\t\t\t\t\tmodule: Index.name,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tresolve$1(this);\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t} finally {\n\t\t\t\tthis.pending.stop = null;\n\t\t\t}\n\t\t});\n\t\treturn this.pending.stop;\n\t};\n\trefresh = async (opts) => {\n\t\tif (this.pending.refresh) return this.pending.refresh;\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tconst run = crypto.randomUUID().replace(/-/g, \"\");\n\t\tawait this.connection.query({\n\t\t\tmode: \"DEFERRED\",\n\t\t\tstatements: [{\n\t\t\t\tsql: `\n            CREATE TABLE IF NOT EXISTS resources_${run} (\n              key TEXT PRIMARY KEY,\n              id TEXT,\n              type TEXT NOT NULL,\n              parent TEXT,\n              size INTEGER,\n              indexed_at INTEGER NOT NULL,\n              created_at INTEGER,\n              modified_at INTEGER,\n              scheduled_at INTEGER,\n              synchronized_at INTEGER\n            );`,\n\t\t\t\tparams: null,\n\t\t\t\tmethod: \"all\"\n\t\t\t}]\n\t\t});\n\t\t/**\n\t\t* Helper function to recursively index the children of a Resource.\n\t\t*\n\t\t* @param parent Parent Resource to index the children of. If `null`,\n\t\t* indexing will begin at the root level.\n\t\t*/\n\t\tconst indexChildren = async (parent) => {\n\t\t\tconst children = await this.storage.list({\n\t\t\t\tparent,\n\t\t\t\ttrace: operation.trace,\n\t\t\t\temit: false,\n\t\t\t\tindex: false\n\t\t\t});\n\t\t\tawait this.connection.query({\n\t\t\t\tmode: \"DEFERRED\",\n\t\t\t\tstatements: children.map((child) => {\n\t\t\t\t\tconst selector = new Selector(child.key);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: `INSERT INTO resources_${run} (id, type, key, parent, size, indexed_at, created_at, modified_at, scheduled_at, synchronized_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`,\n\t\t\t\t\t\tparams: [\n\t\t\t\t\t\t\tselector.id,\n\t\t\t\t\t\t\tselector.type,\n\t\t\t\t\t\t\tselector.key,\n\t\t\t\t\t\t\tselector.parent?.key ?? null,\n\t\t\t\t\t\t\tselector.type === \"namespace\" ? null : 0,\n\t\t\t\t\t\t\tDate.now(),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t],\n\t\t\t\t\t\tmethod: \"all\"\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t});\n\t\t\tawait Promise.all(children.map((child) => {\n\t\t\t\tconst selector = new Selector(child.key);\n\t\t\t\treturn selector.type === \"namespace\" || selector.type === \"database\" ? indexChildren(selector) : Promise.resolve();\n\t\t\t}));\n\t\t};\n\t\tawait indexChildren(opts?.parent ?? null);\n\t\tawait this.connection.query({\n\t\t\tmode: \"DEFERRED\",\n\t\t\tstatements: [\n\t\t\t\t{\n\t\t\t\t\tsql: \"DROP TABLE IF EXISTS resources;\",\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsql: \"DROP INDEX IF EXISTS idx_resources_key;\",\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsql: \"DROP INDEX IF EXISTS idx_resources_parent;\",\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsql: \"DROP INDEX IF EXISTS idx_resources_scheduled_at;\",\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsql: \"DROP INDEX IF EXISTS idx_resources_synchronized_at;\",\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsql: `ALTER TABLE resources_${run} RENAME TO resources;`,\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsql: \"CREATE INDEX IF NOT EXISTS idx_resources_key ON resources (key);\",\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsql: \"CREATE INDEX IF NOT EXISTS idx_resources_parent ON resources (parent);\",\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsql: \"CREATE INDEX IF NOT EXISTS idx_resources_scheduled_at ON resources (scheduled_at);\",\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsql: \"CREATE INDEX IF NOT EXISTS idx_resources_synchronized_at ON resources (synchronized_at);\",\n\t\t\t\t\tparams: [],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tthis.logger?.info(\"refreshed index\", {\n\t\t\tmodule: Index.name,\n\t\t\ttrace: operation.trace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\treturn this;\n\t};\n\tlist = async (opts) => {\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tconst parent = opts?.parent ?? null;\n\t\tif (parent) {\n\t\t\tconst parentExists = await this.connection.query({\n\t\t\t\tmode: \"DEFERRED\",\n\t\t\t\tstatements: [{\n\t\t\t\t\tsql: \"SELECT * FROM resources WHERE key = ?;\",\n\t\t\t\t\tparams: [parent?.key ?? null],\n\t\t\t\t\tmethod: \"all\"\n\t\t\t\t}]\n\t\t\t}).then(([{ rows }]) => rows[0] ?? null);\n\t\t\tif (parent && !parentExists) throw new ResourceNotFoundError(parent);\n\t\t}\n\t\tconst [{ rows: res }] = await this.connection.query({\n\t\t\tmode: \"DEFERRED\",\n\t\t\tstatements: [{\n\t\t\t\tsql: `SELECT * FROM resources WHERE parent ${parent ? \"= ?\" : \"IS NULL\"};`,\n\t\t\t\tparams: parent ? [parent.key] : [],\n\t\t\t\tmethod: \"all\"\n\t\t\t}]\n\t\t});\n\t\tthis.logger?.debug(\"listed resources\", {\n\t\t\tmodule: Index.name,\n\t\t\ttrace: operation.trace,\n\t\t\tdur: formatDuration(operation.duration),\n\t\t\tparent: parent?.key ?? null,\n\t\t\tresults: res.length.toString()\n\t\t});\n\t\treturn res.map((row) => row.type === \"namespace\" ? parseNamespaceMetadata(row) : parseDatabaseMetadata(row));\n\t};\n\tget = async (selector, opts) => {\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tconst res = await this.connection.query({\n\t\t\tmode: \"DEFERRED\",\n\t\t\tstatements: [{\n\t\t\t\tsql: \"SELECT * FROM resources WHERE key = ?;\",\n\t\t\t\tparams: [selector.key],\n\t\t\t\tmethod: \"all\"\n\t\t\t}]\n\t\t}).then(([{ rows }]) => rows[0] ?? null);\n\t\tif (!res) throw new ResourceNotFoundError(selector);\n\t\tthis.logger?.debug(\"retrieved resource from index\", {\n\t\t\tmodule: Index.name,\n\t\t\ttrace: operation.trace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\treturn selector.type === \"namespace\" ? parseNamespaceMetadata(res) : parseDatabaseMetadata(res);\n\t};\n\tadd = async (selector, metadata, opts) => {\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tawait this.connection.query({\n\t\t\tmode: \"DEFERRED\",\n\t\t\tstatements: [{\n\t\t\t\tsql: \"INSERT INTO resources (id, type, key, parent, size, indexed_at, created_at, modified_at, scheduled_at, synchronized_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);\",\n\t\t\t\tparams: [\n\t\t\t\t\tselector.id,\n\t\t\t\t\tselector.type,\n\t\t\t\t\tselector.key,\n\t\t\t\t\tselector.parent?.key ?? null,\n\t\t\t\t\tselector.type === \"namespace\" ? null : metadata.size,\n\t\t\t\t\tDate.now(),\n\t\t\t\t\tmetadata.createdAt?.getTime() ?? null,\n\t\t\t\t\tmetadata.modifiedAt?.getTime() ?? null,\n\t\t\t\t\tnull,\n\t\t\t\t\tnull\n\t\t\t\t],\n\t\t\t\tmethod: \"all\"\n\t\t\t}]\n\t\t});\n\t\tthis.logger?.debug(\"added resource to index\", {\n\t\t\tmodule: Index.name,\n\t\t\ttrace: operation.trace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\treturn this;\n\t};\n\tupdate = async (selector, metadata, opts) => {\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tconst updates = {};\n\t\tif (\"modifiedAt\" in metadata) updates.modified_at = metadata.modifiedAt?.getTime() ?? null;\n\t\tif (\"size\" in metadata) updates.size = metadata.size;\n\t\tif (\"scheduledAt\" in metadata) updates.scheduled_at = metadata.scheduledAt?.getTime() ?? null;\n\t\tif (\"synchronizedAt\" in metadata) updates.synchronized_at = metadata.synchronizedAt?.getTime() ?? null;\n\t\tconst res = await this.connection.query({\n\t\t\tmode: \"DEFERRED\",\n\t\t\tstatements: [{\n\t\t\t\tsql: `UPDATE resources SET ${Object.keys(updates).map((key) => `${key} = ?`).join(\", \")} WHERE key = ? RETURNING *;`,\n\t\t\t\tparams: [...Object.values(updates).map((value) => value instanceof Date ? value.getTime() : value), selector.key],\n\t\t\t\tmethod: \"all\"\n\t\t\t}]\n\t\t}).then(([{ rows }]) => rows[0] ?? null);\n\t\tif (!res) throw new ResourceNotFoundError(selector);\n\t\tthis.logger?.debug(\"updated resource in index\", {\n\t\t\tmodule: Index.name,\n\t\t\ttrace: operation.trace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\treturn selector.type === \"namespace\" ? parseNamespaceMetadata(res) : parseDatabaseMetadata(res);\n\t};\n\tremove = async (selector, opts) => {\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tconst res = await this.connection.query({\n\t\t\tmode: \"DEFERRED\",\n\t\t\tstatements: [{\n\t\t\t\tsql: \"DELETE FROM resources WHERE key = ? RETURNING *;\",\n\t\t\t\tparams: [selector.key],\n\t\t\t\tmethod: \"all\"\n\t\t\t}]\n\t\t}).then(([{ rows }]) => rows[0] ?? null);\n\t\tif (!res) throw new ResourceNotFoundError(selector);\n\t\tthis.logger?.debug(\"removed resource from index\", {\n\t\t\tmodule: Index.name,\n\t\t\ttrace: operation.trace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t};\n};\n\n//#endregion\n//#region src/index.ts\nconst exists = (path) => access(path, constants.F_OK).then(() => true).catch(() => false);\nvar S3Storage = class S3Storage extends Storage {\n\tstatic name = \"s3-storage\";\n\t/**\n\t* Directory to use for caching Resource contents on the local filesystem.\n\t*/\n\tdir;\n\t/**\n\t* `S3Client` instance to use for interacting with the S3 API.\n\t*/\n\tclient;\n\t/**\n\t* Whether to enable seamless handover of existing state to the next instance.\n\t*/\n\thandover = false;\n\t/**\n\t* Driver instance wrapping a runtime-specific implementation of SQLite.\n\t*/\n\tdriver = null;\n\t/**\n\t* EventEmitter instance to use for emitting events.\n\t*/\n\tevents = null;\n\t/**\n\t* Logger instance to use for logging.\n\t*/\n\tlogger = null;\n\t/**\n\t* Error handler to invoke with any errors which might occur during\n\t* background tasks.\n\t*/\n\tonError = null;\n\t/**\n\t* Interval in milliseconds at which open Resources shall be synchronized\n\t* with S3.\n\t*/\n\tsyncInterval;\n\t/**\n\t* Index instance to use for managing the index of Resources.\n\t*/\n\tindex = null;\n\t/**\n\t* Map containing references to all currently open Resources.\n\t*/\n\topen = new Map();\n\t/**\n\t* Reference to the Promise of a running start operation.\n\t*/\n\tstarting = null;\n\t/**\n\t* Reference to the Promise of a running stop operation.\n\t*/\n\tstopping = null;\n\t/**\n\t* Reference to the Promise of a running index synchronization operation.\n\t*/\n\tindexSynchronize = null;\n\t/**\n\t* Map containing a set of pending operations for each Resource.\n\t*/\n\tpending;\n\t/**\n\t* Map keeping track of all Resource which currently have synchronizations\n\t* scheduled for them.\n\t*/\n\tscheduled = new Map();\n\tconstructor(config) {\n\t\tsuper();\n\t\tthis.dir = config.dir;\n\t\tthis.handover = config.handover ?? false;\n\t\tthis.syncInterval = config.syncInterval ?? 15 * 60 * 1e3;\n\t\tthis.starting = null;\n\t\tthis.stopping = null;\n\t\tthis.pending = {\n\t\t\tsynchronize: new Map(),\n\t\t\thas: new Map(),\n\t\t\tcreate: new Map(),\n\t\t\tget: new Map(),\n\t\t\tgetMetadata: new Map(),\n\t\t\tgetContents: new Map(),\n\t\t\tsetContents: new Map(),\n\t\t\tquery: new Map(),\n\t\t\tfree: new Map(),\n\t\t\tdelete: new Map()\n\t\t};\n\t\tthis.client = new S3Client({\n\t\t\tlogger: this.logger,\n\t\t\t...config.s3\n\t\t});\n\t}\n\t/**\n\t* Synchronize a specific Resource that has been modified since its last\n\t* synchronization with S3.\n\t*\n\t* If the specified Resource has not been modified since the last\n\t* synchronization, synchronization will be skipped.\n\t*\n\t* @param selector Selector of the Resource to synchronize.\n\t* @param opts Options for synchronizing the Resource.\n\t*\n\t* @returns Promise resolving when the Resource has been synchronized.\n\t*/\n\tasync synchronizeResource(selector, opts) {\n\t\tconst pending = this.pending.synchronize.get(selector.key);\n\t\tif (pending) return pending;\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tconst promise = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tconst setContentsPending = this.pending.setContents.get(selector.key);\n\t\t\t\tif (setContentsPending) await Promise.allSettled(setContentsPending);\n\t\t\t\tconst open = this.open.get(selector.key);\n\t\t\t\tif (!open) return resolve$1();\n\t\t\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\t\t\tconst scheduled = this.scheduled.get(selector.key);\n\t\t\t\tif (!scheduled && !opts?.force) return resolve$1();\n\t\t\t\tswitch (selector.type) {\n\t\t\t\t\tcase \"database\":\n\t\t\t\t\tcase \"snapshot\":\n\t\t\t\t\tcase \"branch\": {\n\t\t\t\t\t\tconst synchronizedAt = new Date();\n\t\t\t\t\t\tconst [contents, metadata] = await Promise.all([open.connection.getContents(), this.index.get(selector)]);\n\t\t\t\t\t\tawait Promise.all([this.client.putObject({ key: `${selector.path}/db.sqlite` }, contents, { trace: operation.trace }), this.client.putObject({ key: `${selector.path}/metadata.json` }, binaryToByteStream(new TextEncoder().encode(JSON.stringify(metadata))), { trace: operation.trace })]);\n\t\t\t\t\t\tawait writeFile(resolve(this.dir, selector.path, \"metadata.json\"), JSON.stringify(metadata));\n\t\t\t\t\t\tawait this.index.update(selector, {\n\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\tsynchronizedAt\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"namespace\": {\n\t\t\t\t\t\tconst synchronizedAt = new Date();\n\t\t\t\t\t\tconst metadata = await this.index.get(selector);\n\t\t\t\t\t\tawait this.client.putObject({ key: `${selector.path}/metadata.json` }, binaryToByteStream(new TextEncoder().encode(JSON.stringify(metadata))), { trace: operation.trace });\n\t\t\t\t\t\tawait this.index.update(selector, {\n\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\tsynchronizedAt\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclearTimeout(scheduled);\n\t\t\t\tthis.scheduled.delete(selector.key);\n\t\t\t\tthis.logger?.info(\"synchronized resource\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\tresource: selector.key,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tresolve$1();\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\tthis.pending.synchronize.delete(selector.key);\n\t\t\t}\n\t\t});\n\t\tthis.pending.synchronize.set(selector.key, promise);\n\t\treturn promise;\n\t}\n\t/**\n\t* Schedule the synchronization of a specific Resource.\n\t*\n\t* No-op if the Resource is already scheduled for synchronization.\n\t*\n\t* @param selector Selector of the Resource to schedule the synchronization of.\n\t* @param opts Options for scheduling the synchronization of the Resource.\n\t*\n\t* @returns Promise resolving when the Resource has been scheduled for synchronization.\n\t*/\n\tasync scheduleResource(selector, opts) {\n\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\tif (this.scheduled.has(selector.key)) return;\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tthis.scheduled.set(selector.key, setTimeout(() => this.synchronizeResource(selector, { trace: operation.trace }).catch(async (err) => {\n\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\tthis.logger?.error(`error synchronizing resource (${error.message})`, {\n\t\t\t\tmodule: S3Storage.name,\n\t\t\t\tresource: selector.key,\n\t\t\t\ttrace: operation.trace,\n\t\t\t\tdur: formatDuration(operation.duration),\n\t\t\t\terr: JSON.stringify(serializeError(error))\n\t\t\t});\n\t\t\tthis.onError?.(new UnexpectedErrorEvent({\n\t\t\t\ttrace: operation.trace,\n\t\t\t\terror\n\t\t\t}));\n\t\t\tthis.scheduled.delete(selector.key);\n\t\t\tawait this.scheduleResource(selector, { trace: operation.trace });\n\t\t}), this.syncInterval));\n\t\tawait this.index.update(selector, { scheduledAt: new Date() });\n\t\tthis.logger?.info(\"scheduled resource for synchronization\", {\n\t\t\tmodule: S3Storage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace: operation.trace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t}\n\t/**\n\t* Synchronize the state of the Index with S3.\n\t*\n\t* @param opts Options for synchronizing the Index.\n\t*\n\t* @returns Promise resolving when the Index has been synchronized.\n\t*/\n\tasync synchronizeIndex(opts) {\n\t\tif (this.indexSynchronize) return this.indexSynchronize;\n\t\tconst operation = new Operation({ trace: opts?.trace ?? crypto.randomUUID() });\n\t\tthis.indexSynchronize = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tif (!this.index) return resolve$1();\n\t\t\t\tconst contents = await this.index.connection.getContents();\n\t\t\t\tawait this.client.putObject({ key: \"index.sqlite\" }, contents, { trace: operation.trace });\n\t\t\t\tthis.logger?.info(\"synchronized index with s3\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tresolve$1();\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t} finally {\n\t\t\t\tthis.indexSynchronize = null;\n\t\t\t}\n\t\t});\n\t\treturn this.indexSynchronize;\n\t}\n\t/**\n\t* Start the `S3Storage` instance.\n\t*\n\t* @param opts Options for starting the `S3Storage` instance.\n\t*\n\t* @returns Promise resolving with the `S3Storage` instance once it\n\t* has finished starting.\n\t*\n\t* @throws `Error` if an error prevents the `S3Storage` from starting.\n\t*\n\t* @emits `StorageStartEvent` when the `S3Storage` instance has started.\n\t*/\n\tasync start(opts) {\n\t\tif (this.starting) return this.starting;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageStartEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tif (!opts.driver) throw new Error(\"A Driver instance is required by the S3Storage. Please provide it when initializing the Hive instance.\");\n\t\tif (!opts.events) throw new Error(\"An EventEmitter instance is required by the S3Storage. Please provide it when initializing the Hive instance.\");\n\t\tthis.driver = opts.driver;\n\t\tthis.events = opts.events;\n\t\tthis.logger = opts.logger ?? null;\n\t\tthis.onError = opts.onError ?? null;\n\t\tconst emit = opts?.emit ?? true;\n\t\tthis.starting = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tawait mkdir(this.dir, { recursive: true });\n\t\t\t\tconst indexPath = resolve(this.dir, \"index.sqlite\");\n\t\t\t\tif (!this.index) {\n\t\t\t\t\tif (!await exists(indexPath)) await this.client.getObject({ key: \"index.sqlite\" }, { trace: operation.trace }).then((res) => writeFile(indexPath, new Uint8Array()).then(() => {\n\t\t\t\t\t\tconst writer = createWriteStream(indexPath);\n\t\t\t\t\t\treturn pipeline(Readable.fromWeb(res.stream), writer);\n\t\t\t\t\t})).catch(async (err) => {\n\t\t\t\t\t\tif (err instanceof ObjectNotFoundError) {\n\t\t\t\t\t\t\tthis.logger?.info(\"no previous index state found\", {\n\t\t\t\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tawait writeFile(indexPath, SQLITE_FIXTURE);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t});\n\t\t\t\t\tthis.index = new S3StorageIndex({\n\t\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\t\tstorage: this,\n\t\t\t\t\t\tconnection: await this.driver.open(indexPath, { trace: operation.trace })\n\t\t\t\t\t});\n\t\t\t\t\tawait this.index.start({\n\t\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\t\temit: false\n\t\t\t\t\t});\n\t\t\t\t\tawait this.synchronizeIndex({\n\t\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\t\temit: false\n\t\t\t\t\t});\n\t\t\t\t\tconst [{ rows: scheduled }] = await this.index.connection.query({\n\t\t\t\t\t\tmode: \"DEFERRED\",\n\t\t\t\t\t\tstatements: [{\n\t\t\t\t\t\t\tsql: \"SELECT * FROM resources WHERE scheduled_at IS NOT NULL;\",\n\t\t\t\t\t\t\tparams: [],\n\t\t\t\t\t\t\tmethod: \"all\"\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tawait Promise.all(scheduled.map((row) => this.scheduleResource(new Selector(row.key))));\n\t\t\t\t}\n\t\t\t\tthis.logger?.info(\"initialized storage instance\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(StorageStartEvent.type, new StorageStartEvent({ trace: operation.trace }));\n\t\t\t\tresolve$1(this);\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t} finally {\n\t\t\t\tthis.starting = null;\n\t\t\t}\n\t\t});\n\t\treturn this.starting;\n\t}\n\t/**\n\t* Stop the `S3Storage` instance.\n\t*\n\t* @param opts Options for stopping the `S3Storage` instance.\n\t*\n\t* @returns Promise resolving with the `S3Storage` instance once it\n\t* has finished stopping.\n\t*\n\t* @throws `Error` if an error prevents the `S3Storage` from stopping.\n\t*\n\t* @emits `StorageStopEvent` when the `S3Storage` instance has stopped.\n\t*/\n\tasync stop(opts) {\n\t\tif (this.stopping) return this.stopping;\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageStopEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tthis.stopping = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tawait Promise.all(Array.from(this.scheduled.keys()).map((key) => new Selector(key)).map((selector) => this.synchronizeResource(selector, { trace: operation.trace })));\n\t\t\t\tawait this.synchronizeIndex({\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\temit: false\n\t\t\t\t});\n\t\t\t\tif (!this.handover) {\n\t\t\t\t\tawait this.index?.stop();\n\t\t\t\t\tthis.index = null;\n\t\t\t\t}\n\t\t\t\tthis.logger?.info(\"closed storage instance\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(StorageStopEvent.type, new StorageStopEvent({ trace: operation.trace }));\n\t\t\t\tresolve$1(this);\n\t\t\t} catch (err) {\n\t\t\t\treject(err);\n\t\t\t} finally {\n\t\t\t\tthis.stopping = null;\n\t\t\t}\n\t\t});\n\t\treturn this.stopping;\n\t}\n\t/**\n\t* Create a new Resource.\n\t*\n\t* @param selector Selector of the Resource to create.\n\t* @param opts Options for creating the Resource.\n\t*\n\t* @returns Promise resolving with the created Resource.\n\t*\n\t* @throws `ResourceNotFoundError` if the parent Resource does not exist.\n\t* @throws `ResourceExistsError` if the Resource already exists.\n\t*\n\t* @emits `StorageCreateEvent` when the Resource has been created.\n\t*/\n\tasync create(selector, opts) {\n\t\tif (this.starting) await this.starting;\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to create Resource while instance is stopping.\");\n\t\tconst pending = this.pending.create.get(selector.key);\n\t\tif (pending) return pending;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageCreateEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst parent = selector.parent;\n\t\tconst promise = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\t\t\tif (parent && !await this.has(parent, {\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\temit: false\n\t\t\t\t})) throw new ResourceNotFoundError(parent);\n\t\t\t\tif (await this.has(selector, {\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\temit: false\n\t\t\t\t})) throw new ResourceExistsError(selector);\n\t\t\t\tlet resource;\n\t\t\t\tlet metadata;\n\t\t\t\tswitch (selector.type) {\n\t\t\t\t\tcase \"database\":\n\t\t\t\t\tcase \"snapshot\":\n\t\t\t\t\tcase \"branch\": {\n\t\t\t\t\t\tconst contents = opts?.contents ?? SQLITE_FIXTURE;\n\t\t\t\t\t\tswitch (true) {\n\t\t\t\t\t\t\tcase contents instanceof ByteStream: {\n\t\t\t\t\t\t\t\tmetadata = {\n\t\t\t\t\t\t\t\t\tkey: selector.key,\n\t\t\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\t\t\tparent: selector.parent?.key ?? null,\n\t\t\t\t\t\t\t\t\tsize: contents.length,\n\t\t\t\t\t\t\t\t\tindexedAt: new Date(),\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\tmodifiedAt: null,\n\t\t\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\t\t\tsynchronizedAt: null\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst dir = resolve(this.dir, selector.path);\n\t\t\t\t\t\t\t\tawait mkdir(dir, { recursive: true });\n\t\t\t\t\t\t\t\tawait Promise.all([writeFile(resolve(dir, \"db.sqlite\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(dir, \"db.sqlite\"));\n\t\t\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(contents.stream), writer);\n\t\t\t\t\t\t\t\t}), writeFile(resolve(dir, \"metadata.json\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(dir, \"metadata.json\"));\n\t\t\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(binaryToByteStream(new TextEncoder().encode(JSON.stringify(metadata))).stream), writer);\n\t\t\t\t\t\t\t\t})]);\n\t\t\t\t\t\t\t\tresource = selector instanceof Database ? selector : new Database({\n\t\t\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tresource.storage = this;\n\t\t\t\t\t\t\t\tawait this.index.add(selector, metadata);\n\t\t\t\t\t\t\t\tawait this.scheduleResource(selector, { trace: operation.trace });\n\t\t\t\t\t\t\t\tmetadata = await this.index.get(selector);\n\t\t\t\t\t\t\t\tthis.open.set(selector.key, {\n\t\t\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\t\t\tconnection: await this.driver.open(resolve(dir, \"db.sqlite\"), { trace: operation.trace })\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase contents instanceof Uint8Array: {\n\t\t\t\t\t\t\t\tmetadata = {\n\t\t\t\t\t\t\t\t\tkey: selector.key,\n\t\t\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\t\t\tparent: selector.parent?.key ?? null,\n\t\t\t\t\t\t\t\t\tsize: contents.length,\n\t\t\t\t\t\t\t\t\tindexedAt: new Date(),\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\tmodifiedAt: null,\n\t\t\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\t\t\tsynchronizedAt: null\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconst dir = resolve(this.dir, selector.path);\n\t\t\t\t\t\t\t\tawait mkdir(dir, { recursive: true });\n\t\t\t\t\t\t\t\tconst stream = binaryToByteStream(contents);\n\t\t\t\t\t\t\t\tawait Promise.all([writeFile(resolve(dir, \"db.sqlite\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(dir, \"db.sqlite\"));\n\t\t\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(stream.stream), writer);\n\t\t\t\t\t\t\t\t}), writeFile(resolve(dir, \"metadata.json\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(dir, \"metadata.json\"));\n\t\t\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(binaryToByteStream(new TextEncoder().encode(JSON.stringify(metadata))).stream), writer);\n\t\t\t\t\t\t\t\t})]);\n\t\t\t\t\t\t\t\tresource = selector instanceof Database ? selector : new Database({\n\t\t\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tresource.storage = this;\n\t\t\t\t\t\t\t\tawait this.index.add(selector, metadata);\n\t\t\t\t\t\t\t\tawait this.scheduleResource(selector, { trace: operation.trace });\n\t\t\t\t\t\t\t\tmetadata = await this.index.get(selector);\n\t\t\t\t\t\t\t\tthis.open.set(selector.key, {\n\t\t\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\t\t\tconnection: await this.driver.open(resolve(dir, \"db.sqlite\"), { trace: operation.trace })\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase contents instanceof Selector: {\n\t\t\t\t\t\t\t\tif (this.open.has(contents.key)) {\n\t\t\t\t\t\t\t\t\tconst binary = await readFile(resolve(this.dir, contents.path, \"db.sqlite\"));\n\t\t\t\t\t\t\t\t\tconst dir = resolve(this.dir, selector.path);\n\t\t\t\t\t\t\t\t\tawait mkdir(dir, { recursive: true });\n\t\t\t\t\t\t\t\t\tmetadata = {\n\t\t\t\t\t\t\t\t\t\tkey: selector.key,\n\t\t\t\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\t\t\t\tparent: selector.parent?.key ?? null,\n\t\t\t\t\t\t\t\t\t\tsize: binary.length,\n\t\t\t\t\t\t\t\t\t\tindexedAt: new Date(),\n\t\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\t\tmodifiedAt: null,\n\t\t\t\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\t\t\t\tsynchronizedAt: null\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tawait Promise.all([writeFile(resolve(dir, \"db.sqlite\"), binary), writeFile(resolve(dir, \"metadata.json\"), JSON.stringify(metadata))]);\n\t\t\t\t\t\t\t\t\tresource = selector instanceof Database ? selector : new Database({\n\t\t\t\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tresource.storage = this;\n\t\t\t\t\t\t\t\t\tawait this.index.add(selector, metadata);\n\t\t\t\t\t\t\t\t\tawait this.scheduleResource(selector, { trace: operation.trace });\n\t\t\t\t\t\t\t\t\tmetadata = await this.index.get(selector);\n\t\t\t\t\t\t\t\t\tthis.open.set(selector.key, {\n\t\t\t\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\t\t\t\tconnection: await this.driver.open(resolve(dir, \"db.sqlite\"), { trace: operation.trace })\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tconst found = await this.index.get(contents);\n\t\t\t\t\t\t\t\t\tmetadata = {\n\t\t\t\t\t\t\t\t\t\tkey: selector.key,\n\t\t\t\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\t\t\t\tparent: selector.parent?.key ?? null,\n\t\t\t\t\t\t\t\t\t\tsize: found.size,\n\t\t\t\t\t\t\t\t\t\tindexedAt: new Date(),\n\t\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\t\tmodifiedAt: null,\n\t\t\t\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\t\t\t\tsynchronizedAt: null\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tawait Promise.all([this.client.copyObject({\n\t\t\t\t\t\t\t\t\t\tbucket: this.client.bucket,\n\t\t\t\t\t\t\t\t\t\tkey: `${contents.path}/db.sqlite`\n\t\t\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\t\t\tbucket: this.client.bucket,\n\t\t\t\t\t\t\t\t\t\tkey: `${selector.path}/db.sqlite`\n\t\t\t\t\t\t\t\t\t}, { trace: operation.trace }), this.client.copyObject({\n\t\t\t\t\t\t\t\t\t\tbucket: this.client.bucket,\n\t\t\t\t\t\t\t\t\t\tkey: `${contents.path}/metadata.json`\n\t\t\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\t\t\tbucket: this.client.bucket,\n\t\t\t\t\t\t\t\t\t\tkey: `${selector.path}/metadata.json`\n\t\t\t\t\t\t\t\t\t}, { trace: operation.trace })]);\n\t\t\t\t\t\t\t\t\tresource = selector instanceof Database ? selector : new Database({\n\t\t\t\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tresource.storage = this;\n\t\t\t\t\t\t\t\t\tawait this.index.add(selector, metadata);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: throw new Error(\"Contents must be provided either as `ByteStream`, `Uint8Array`, or `Selector`\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"namespace\": {\n\t\t\t\t\t\tconst dir = resolve(this.dir, selector.path);\n\t\t\t\t\t\tmetadata = {\n\t\t\t\t\t\t\tkey: selector.key,\n\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\tparent: selector.parent?.key ?? null,\n\t\t\t\t\t\t\tindexedAt: new Date(),\n\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\tmodifiedAt: null,\n\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\tsynchronizedAt: null\n\t\t\t\t\t\t};\n\t\t\t\t\t\tawait mkdir(dir, { recursive: true });\n\t\t\t\t\t\tawait writeFile(resolve(dir, \"metadata.json\"), JSON.stringify(metadata));\n\t\t\t\t\t\tresource = selector instanceof Namespace ? selector : new Namespace({\n\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t});\n\t\t\t\t\t\tresource.storage = this;\n\t\t\t\t\t\tawait this.index.add(selector, metadata);\n\t\t\t\t\t\tawait this.scheduleResource(selector, { trace: operation.trace });\n\t\t\t\t\t\tmetadata = await this.index.get(selector);\n\t\t\t\t\t\tthis.open.set(selector.key, {\n\t\t\t\t\t\t\tresource,\n\t\t\t\t\t\t\tconnection: null\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.logger?.info(\"created resource\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\tresource: resource.key,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(StorageCreateEvent.type, new StorageCreateEvent({\n\t\t\t\t\tresource,\n\t\t\t\t\ttrace: operation.trace\n\t\t\t\t}));\n\t\t\t\treturn resolve$1({\n\t\t\t\t\tresource,\n\t\t\t\t\tmetadata\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\tthis.pending.create.delete(selector.key);\n\t\t\t}\n\t\t});\n\t\tthis.pending.create.set(selector.key, promise);\n\t\treturn promise;\n\t}\n\t/**\n\t* List all Resources.\n\t*\n\t* @param opts Options for listing the Resources.\n\t*\n\t* @returns Promise resolving an Array containing the Metadata for the\n\t* listed Resources.\n\t*\n\t* @throws `ResourceNotFoundError` if the parent Resource does not exist.\n\t*\n\t* @emits `StorageListEvent` when the Resources have been listed.\n\t*/\n\tasync list(opts) {\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to list Resources while instance is stopping.\");\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst index = opts?.index ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageListEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\tconst parent = opts?.parent ?? null;\n\t\tif (parent && !await this.has(parent, {\n\t\t\ttrace: operation.trace,\n\t\t\temit: false\n\t\t})) throw new ResourceNotFoundError(parent);\n\t\tlet res = new Array();\n\t\tif (index) res = await this.index.list({\n\t\t\tparent,\n\t\t\ttrace: operation.trace\n\t\t});\n\t\telse await Promise.all((!parent || parent.type === \"namespace\" ? [{\n\t\t\tsegment: \"namespaces\",\n\t\t\ttype: \"namespace\"\n\t\t}, {\n\t\t\tsegment: \"databases\",\n\t\t\ttype: \"database\"\n\t\t}] : [{\n\t\t\tsegment: \"snapshots\",\n\t\t\ttype: \"snapshot\"\n\t\t}, {\n\t\t\tsegment: \"branches\",\n\t\t\ttype: \"branch\"\n\t\t}]).map(async ({ segment }) => {\n\t\t\tconst prefix = parent ? `${parent.path}/${segment}/` : `${segment}/`;\n\t\t\tconst paths = await this.client.listObjects(prefix, \"/\", { trace: operation.trace });\n\t\t\tawait Promise.all(paths.map(async (path) => {\n\t\t\t\tconst parts = (path.endsWith(\"/\") ? path.slice(0, -1) : path).split(\"/\");\n\t\t\t\tif (parts.length === 0) return;\n\t\t\t\tconst id = parts.at(-1) ? decodeURIComponent(parts.at(-1)) : null;\n\t\t\t\tif (!id) return;\n\t\t\t\tconst metadata = await this.client.getObject({ key: `${prefix}${id}/metadata.json` }, { trace: operation.trace }).then(byteStreamToBinary).then((binary) => JSON.parse(new TextDecoder().decode(binary))).catch((err) => {\n\t\t\t\t\tif (err instanceof ObjectNotFoundError) return null;\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t\t\tif (!metadata) return;\n\t\t\t\tres.push(metadata);\n\t\t\t}));\n\t\t}));\n\t\tthis.logger?.info(\"listed resources\", {\n\t\t\tmodule: S3Storage.name,\n\t\t\ttrace: operation.trace,\n\t\t\tdur: formatDuration(operation.duration),\n\t\t\tparent: parent?.key ?? null,\n\t\t\tresults: res.length.toString()\n\t\t});\n\t\tif (emit) this.events?.emit(StorageListEvent.type, new StorageListEvent({\n\t\t\ttrace: operation.trace,\n\t\t\tparent: parent ?? null,\n\t\t\tresults: res.length\n\t\t}));\n\t\treturn res;\n\t}\n\t/**\n\t* Check if a specific Resource exists.\n\t*\n\t* @param selector Selector of the Resource to check.\n\t* @param opts Options for checking the Resource.\n\t*\n\t* @returns Promise resolving with a boolean indicating whether the Resource\n\t* exists.\n\t*\n\t* @emits `StorageHasEvent` when the Resource has been checked.\n\t*/\n\tasync has(selector, opts) {\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to check if Resource exists while instance is stopping.\");\n\t\tconst pending = this.pending.has.get(selector.key);\n\t\tif (pending) return pending;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageHasEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst index = opts?.index ?? true;\n\t\tconst promise = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\t\t\tconst resourceExists = this.open.has(selector.key) || index ? await this.index.get(selector).then(() => true).catch((err) => {\n\t\t\t\t\tif (err instanceof ResourceNotFoundError) return false;\n\t\t\t\t\tthrow err;\n\t\t\t\t}) : await exists(resolve(this.dir, selector.path, selector.type === \"namespace\" ? \"metadata.json\" : \"db.sqlite\")) || await this.client.getObject({ key: `${selector.path}/metadata.json` }, { trace: operation.trace }).then(() => true).catch((err) => {\n\t\t\t\t\tif (err instanceof ObjectNotFoundError) return false;\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t\t\tthis.logger?.info(\"checked resource\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\tresource: selector.key,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(StorageHasEvent.type, new StorageHasEvent({\n\t\t\t\t\tresource: selector,\n\t\t\t\t\ttrace: operation.trace\n\t\t\t\t}));\n\t\t\t\tresolve$1(resourceExists);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\tthis.pending.has.delete(selector.key);\n\t\t\t}\n\t\t});\n\t\tthis.pending.has.set(selector.key, promise);\n\t\treturn promise;\n\t}\n\t/**\n\t* Get a specific Resource.\n\t*\n\t* @param selector Selector of the Resource to get.\n\t*\n\t* @param opts Options for getting the Resource.\n\t*\n\t* @returns Promise resolving with the requested Resource and its metadata.\n\t*\n\t* @throws `ResourceNotFoundError` if the Resource was not found.\n\t*\n\t* @emits `StorageGetEvent` when the Resource has been retrieved.\n\t*/\n\tasync get(selector, opts) {\n\t\tif (this.starting) await this.starting;\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to get Resource while instance is stopping.\");\n\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\tconst pending = this.pending.get.get(selector.key);\n\t\tif (pending) return pending;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageGetEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst metadata = await this.index.get(selector, { trace: operation.trace });\n\t\tif (!metadata) throw new ResourceNotFoundError(selector);\n\t\tconst open = this.open.get(selector.key);\n\t\tif (open) return {\n\t\t\tresource: open.resource,\n\t\t\tmetadata\n\t\t};\n\t\tconst promise = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tconst dir = resolve(this.dir, selector.path);\n\t\t\t\tlet res = null;\n\t\t\t\tswitch (selector.type) {\n\t\t\t\t\tcase \"database\":\n\t\t\t\t\tcase \"snapshot\":\n\t\t\t\t\tcase \"branch\": {\n\t\t\t\t\t\tif (await exists(resolve(dir, \"db.sqlite\"))) {\n\t\t\t\t\t\t\tres = selector instanceof Database ? selector : new Database({\n\t\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tres.storage = this;\n\t\t\t\t\t\t\tthis.open.set(selector.key, {\n\t\t\t\t\t\t\t\tresource: res,\n\t\t\t\t\t\t\t\tconnection: await this.driver.open(resolve(dir, \"db.sqlite\"), { trace: operation.trace })\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst [contentsStream, metadataStream] = await Promise.all([this.client.getObject({ key: `${selector.path}/db.sqlite` }, { trace: operation.trace }).catch((err) => {\n\t\t\t\t\t\t\tif (err instanceof ObjectNotFoundError) throw new ResourceNotFoundError(selector);\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t}), this.client.getObject({ key: `${selector.path}/metadata.json` }, { trace: operation.trace }).catch((err) => {\n\t\t\t\t\t\t\tif (err instanceof ObjectNotFoundError) throw new ResourceNotFoundError(selector);\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t})]);\n\t\t\t\t\t\tawait mkdir(dir, { recursive: true });\n\t\t\t\t\t\tawait Promise.all([writeFile(resolve(dir, \"db.sqlite\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(dir, \"db.sqlite\"));\n\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(contentsStream.stream), writer);\n\t\t\t\t\t\t}), writeFile(resolve(dir, \"metadata.json\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(dir, \"metadata.json\"));\n\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(metadataStream.stream), writer);\n\t\t\t\t\t\t})]);\n\t\t\t\t\t\tres = selector instanceof Database ? selector : new Database({\n\t\t\t\t\t\t\ttype: selector.type,\n\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres.storage = this;\n\t\t\t\t\t\tthis.open.set(selector.key, {\n\t\t\t\t\t\t\tresource: res,\n\t\t\t\t\t\t\tconnection: await this.driver.open(resolve(dir, \"db.sqlite\"), { trace: operation.trace })\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"namespace\": {\n\t\t\t\t\t\tif (await exists(resolve(dir, \"metadata.json\"))) {\n\t\t\t\t\t\t\tres = selector instanceof Namespace ? selector : new Namespace({\n\t\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tres.storage = this;\n\t\t\t\t\t\t\tthis.open.set(selector.key, {\n\t\t\t\t\t\t\t\tresource: res,\n\t\t\t\t\t\t\t\tconnection: null\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst metadataStream = await this.client.getObject({ key: `${selector.path}/metadata.json` }, { trace: operation.trace }).catch((err) => {\n\t\t\t\t\t\t\tif (err instanceof ObjectNotFoundError) throw new ResourceNotFoundError(selector);\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait mkdir(dir, { recursive: true });\n\t\t\t\t\t\tawait writeFile(resolve(dir, \"metadata.json\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(dir, \"metadata.json\"));\n\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(metadataStream.stream), writer);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres = selector instanceof Namespace ? selector : new Namespace({\n\t\t\t\t\t\t\tid: selector.id,\n\t\t\t\t\t\t\tparent: selector.parent,\n\t\t\t\t\t\t\tstorage: this\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres.storage = this;\n\t\t\t\t\t\tthis.open.set(selector.key, {\n\t\t\t\t\t\t\tresource: res,\n\t\t\t\t\t\t\tconnection: null\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.logger?.info(\"retrieved resource\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\tresource: res.key,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(StorageGetEvent.type, new StorageGetEvent({\n\t\t\t\t\tresource: res,\n\t\t\t\t\ttrace: operation.trace\n\t\t\t\t}));\n\t\t\t\treturn resolve$1({\n\t\t\t\t\tresource: res,\n\t\t\t\t\tmetadata\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\tthis.pending.get.delete(selector.key);\n\t\t\t}\n\t\t});\n\t\tthis.pending.get.set(selector.key, promise);\n\t\treturn promise;\n\t}\n\t/**\n\t* Retrieve the metadata of a specific Resource.\n\t*\n\t* @param selector Selector of the Resource to retrieve the metadata of.\n\t* @param opts Options for retrieving the metadata of the Resource.\n\t*\n\t* @returns Promise resolving with the metadata of the Resource.\n\t*\n\t* @throws `ResourceNotFoundError` if the Resource was not found.\n\t*\n\t* @emits `ResourceGetMetadataEvent` when the metadata of the Resource has\n\t* been retrieved.\n\t*/\n\tasync getMetadata(selector, opts) {\n\t\tif (this.starting) await this.starting;\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to get metadata of Resource while instance is stopping.\");\n\t\tconst pending = this.pending.getMetadata.get(selector.key);\n\t\tif (pending) return pending;\n\t\tconst operation = new Operation({\n\t\t\ttype: ResourceGetMetadataEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst promise = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\t\t\tconst metadata = await this.index.get(selector);\n\t\t\t\tthis.logger?.info(\"retrieved resource metadata\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\tresource: selector.key,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(ResourceGetMetadataEvent.type, new ResourceGetMetadataEvent({\n\t\t\t\t\tresource: selector,\n\t\t\t\t\ttrace: operation.trace\n\t\t\t\t}));\n\t\t\t\tresolve$1(metadata);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\tthis.pending.getMetadata.delete(selector.key);\n\t\t\t}\n\t\t});\n\t\tthis.pending.getMetadata.set(selector.key, promise);\n\t\treturn promise;\n\t}\n\t/**\n\t* Get the contents of a specific Resource.\n\t*\n\t* @param selector Selector of the Resource to get the contents of.\n\t* @param opts Options for getting the contents of the Resource.\n\t*\n\t* @returns Promise resolving with the contents of the Resource.\n\t*\n\t* @throws `ResourceNotFoundError` if the Resource was not found.\n\t*\n\t* @emits `ResourceGetContentsEvent` when the contents of the Resource have been retrieved.\n\t*/\n\tasync getContents(selector, opts) {\n\t\tif (this.starting) await this.starting;\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to get contents of Resource while instance is stopping.\");\n\t\tconst operation = new Operation({\n\t\t\ttype: ResourceGetContentsEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst queue = this.pending.getContents.get(selector.key) ?? new Set();\n\t\tthis.pending.getContents.set(selector.key, queue);\n\t\tconst promise = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\t\t\tconst metadata = await this.index.get(selector);\n\t\t\t\tconst open = this.open.get(selector.key);\n\t\t\t\tif (open) {\n\t\t\t\t\tconst contents$1 = await open.connection.getContents();\n\t\t\t\t\tthis.logger?.info(\"retrieved resource contents\", {\n\t\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\t\tresource: selector.key,\n\t\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\t\tdur: formatDuration(operation.duration),\n\t\t\t\t\t\tsize: contents$1.length.toString()\n\t\t\t\t\t});\n\t\t\t\t\tif (emit) this.events?.emit(ResourceGetContentsEvent.type, new ResourceGetContentsEvent({\n\t\t\t\t\t\tresource: selector,\n\t\t\t\t\t\ttrace: operation.trace\n\t\t\t\t\t}));\n\t\t\t\t\treturn resolve$1({\n\t\t\t\t\t\tcontents: contents$1,\n\t\t\t\t\t\tmetadata\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst contents = await this.client.getObject({ key: `${selector.path}/db.sqlite` }, { trace: operation.trace });\n\t\t\t\tthis.logger?.info(\"retrieved resource contents\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\tresource: selector.key,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration),\n\t\t\t\t\tsize: contents.length.toString()\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(ResourceGetContentsEvent.type, new ResourceGetContentsEvent({\n\t\t\t\t\tresource: selector,\n\t\t\t\t\ttrace: operation.trace\n\t\t\t\t}));\n\t\t\t\treturn resolve$1({\n\t\t\t\t\tcontents,\n\t\t\t\t\tmetadata\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\tqueue.delete(promise);\n\t\t\t}\n\t\t});\n\t\tqueue.add(promise);\n\t\treturn promise;\n\t}\n\t/**\n\t* Set the contents of a specific Resource.\n\t*\n\t* @param selector Selector of the Resource to set the contents of.\n\t* @param source Contents to set.\n\t* @param opts Options for setting the contents of the Resource.\n\t*\n\t* @returns Promise resolving when the contents of the Resource have been set.\n\t*\n\t* @throws `ResourceNotFoundError` if the Resource was not found.\n\t*\n\t* @emits `ResourceSetContentsEvent` when the contents of the Resource have been set.\n\t*/\n\tasync setContents(selector, source, opts) {\n\t\tif (this.starting) await this.starting;\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to set contents of Resource while instance is stopping.\");\n\t\tconst pending = this.pending.setContents.get(selector.key);\n\t\tif (pending) await Promise.allSettled(pending);\n\t\tconst getContentsPending = this.pending.getContents.get(selector.key);\n\t\tif (getContentsPending) await Promise.allSettled(getContentsPending);\n\t\tconst operation = new Operation({\n\t\t\ttype: ResourceSetContentsEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst queue = this.pending.setContents.get(selector.key) ?? new Set();\n\t\tthis.pending.setContents.set(selector.key, queue);\n\t\tconst promise = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\t\t\tconst metadata = await this.index.get(selector);\n\t\t\t\tconst open = this.open.get(selector.key);\n\t\t\t\tconst dir = resolve(this.dir, selector.path);\n\t\t\t\tconst path = resolve(dir, \"db.sqlite\");\n\t\t\t\tif (open) {\n\t\t\t\t\tawait open.connection?.close();\n\t\t\t\t\topen.connection = null;\n\t\t\t\t}\n\t\t\t\tswitch (true) {\n\t\t\t\t\tcase source instanceof ByteStream:\n\t\t\t\t\tcase source instanceof Uint8Array: {\n\t\t\t\t\t\tconst stream = source instanceof ByteStream ? source : binaryToByteStream(source);\n\t\t\t\t\t\tif (open) {\n\t\t\t\t\t\t\tconst modifiedAt = new Date();\n\t\t\t\t\t\t\tconst size = stream.length;\n\t\t\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t\t\trm(path),\n\t\t\t\t\t\t\t\trm(`${path}-wal`).catch(() => {}),\n\t\t\t\t\t\t\t\trm(`${path}-shm`).catch(() => {})\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tawait Promise.all([writeFile(path, new Uint8Array()).then(() => {\n\t\t\t\t\t\t\t\tconst writer = createWriteStream(path);\n\t\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(stream.stream), writer);\n\t\t\t\t\t\t\t}), writeFile(resolve(dir, \"metadata.json\"), JSON.stringify({\n\t\t\t\t\t\t\t\t...metadata,\n\t\t\t\t\t\t\t\tsize,\n\t\t\t\t\t\t\t\tmodifiedAt\n\t\t\t\t\t\t\t}))]);\n\t\t\t\t\t\t\tawait this.index.update(selector, {\n\t\t\t\t\t\t\t\tmodifiedAt,\n\t\t\t\t\t\t\t\tsize\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tawait this.scheduleResource(selector, { trace: operation.trace });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst modifiedAt = new Date();\n\t\t\t\t\t\t\tconst size = stream.length;\n\t\t\t\t\t\t\tconst synchronizedAt = new Date();\n\t\t\t\t\t\t\tawait Promise.all([this.client.putObject({ key: `${selector.path}/db.sqlite` }, stream, { trace: operation.trace }), this.client.putObject({ key: `${selector.path}/metadata.json` }, binaryToByteStream(new TextEncoder().encode(JSON.stringify({\n\t\t\t\t\t\t\t\t...metadata,\n\t\t\t\t\t\t\t\tmodifiedAt,\n\t\t\t\t\t\t\t\tsize\n\t\t\t\t\t\t\t}))), { trace: operation.trace })]);\n\t\t\t\t\t\t\tawait this.index.update(selector, {\n\t\t\t\t\t\t\t\tmodifiedAt,\n\t\t\t\t\t\t\t\tsize,\n\t\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\t\tsynchronizedAt\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase source instanceof Selector:\n\t\t\t\t\t\tawait this.index.get(source);\n\t\t\t\t\t\tif (this.open.has(source.key)) {\n\t\t\t\t\t\t\tconst { contents } = await this.getContents(source, {\n\t\t\t\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\t\t\t\temit: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (open) {\n\t\t\t\t\t\t\t\tconst modifiedAt = new Date();\n\t\t\t\t\t\t\t\tconst size = contents.length;\n\t\t\t\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t\t\t\trm(path),\n\t\t\t\t\t\t\t\t\trm(`${path}-wal`).catch(() => {}),\n\t\t\t\t\t\t\t\t\trm(`${path}-shm`).catch(() => {})\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\tawait Promise.all([writeFile(path, new Uint8Array()).then(() => {\n\t\t\t\t\t\t\t\t\tconst writer = createWriteStream(path);\n\t\t\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(contents.stream), writer);\n\t\t\t\t\t\t\t\t}), writeFile(resolve(dir, \"metadata.json\"), JSON.stringify({\n\t\t\t\t\t\t\t\t\t...metadata,\n\t\t\t\t\t\t\t\t\tmodifiedAt,\n\t\t\t\t\t\t\t\t\tsize\n\t\t\t\t\t\t\t\t}))]);\n\t\t\t\t\t\t\t\tawait this.index.update(selector, {\n\t\t\t\t\t\t\t\t\tmodifiedAt,\n\t\t\t\t\t\t\t\t\tsize\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tawait this.scheduleResource(selector, { trace: operation.trace });\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst modifiedAt = new Date();\n\t\t\t\t\t\t\t\tconst size = contents.length;\n\t\t\t\t\t\t\t\tconst synchronizedAt = new Date();\n\t\t\t\t\t\t\t\tawait Promise.all([this.client.putObject({ key: `${selector.path}/db.sqlite` }, contents, { trace: operation.trace }), this.client.putObject({ key: `${selector.path}/metadata.json` }, binaryToByteStream(new TextEncoder().encode(JSON.stringify({\n\t\t\t\t\t\t\t\t\t...metadata,\n\t\t\t\t\t\t\t\t\tmodifiedAt,\n\t\t\t\t\t\t\t\t\tsize,\n\t\t\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\t\t\tsynchronizedAt\n\t\t\t\t\t\t\t\t}))), { trace: operation.trace })]);\n\t\t\t\t\t\t\t\tawait this.index.update(selector, {\n\t\t\t\t\t\t\t\t\tmodifiedAt,\n\t\t\t\t\t\t\t\t\tsize,\n\t\t\t\t\t\t\t\t\tscheduledAt: null,\n\t\t\t\t\t\t\t\t\tsynchronizedAt\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (open) {\n\t\t\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t\t\trm(path),\n\t\t\t\t\t\t\t\trm(`${path}-wal`).catch(() => {}),\n\t\t\t\t\t\t\t\trm(`${path}-shm`).catch(() => {})\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tawait this.client.copyObject({ key: `${source.path}/db.sqlite` }, { key: `${selector.path}/db.sqlite` }, { trace: operation.trace });\n\t\t\t\t\t\t\tconst contents = await this.client.getObject({ key: `${selector.path}/db.sqlite` }, { trace: operation.trace });\n\t\t\t\t\t\t\tawait writeFile(resolve(this.dir, selector.path, \"db.sqlite\"), new Uint8Array()).then(() => {\n\t\t\t\t\t\t\t\tconst writer = createWriteStream(resolve(this.dir, selector.path, \"db.sqlite\"));\n\t\t\t\t\t\t\t\treturn pipeline(Readable.fromWeb(contents.stream), writer);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tawait this.index.update(selector, {\n\t\t\t\t\t\t\t\tmodifiedAt: new Date(),\n\t\t\t\t\t\t\t\tsize: contents.length\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tawait this.scheduleResource(selector, { trace: operation.trace });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait this.client.copyObject({ key: `${source.path}/db.sqlite` }, { key: `${selector.path}/db.sqlite` }, { trace: operation.trace });\n\t\t\t\t\t\t\tconst sourceMetadata = await this.index.get(source);\n\t\t\t\t\t\t\tawait this.index.update(selector, {\n\t\t\t\t\t\t\t\tmodifiedAt: new Date(),\n\t\t\t\t\t\t\t\tsize: sourceMetadata.size\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: throw new Error(\"Contents must be provided either as `ByteStream`, `Uint8Array` or `Selector`\");\n\t\t\t\t}\n\t\t\t\tif (open) open.connection = await this.driver.open(resolve(this.dir, selector.path, \"db.sqlite\"), { trace: operation.trace });\n\t\t\t\tthis.logger?.info(\"updated resource contents\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\tresource: selector.key,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(ResourceSetContentsEvent.type, new ResourceSetContentsEvent({\n\t\t\t\t\tresource: selector,\n\t\t\t\t\ttrace: operation.trace\n\t\t\t\t}));\n\t\t\t\tresolve$1();\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\tqueue.delete(promise);\n\t\t\t}\n\t\t});\n\t\tqueue.add(promise);\n\t\treturn promise;\n\t}\n\t/**\n\t* Apply a Transaction to a specific Resource.\n\t*\n\t* @param selector Selector of the Resource to apply the Transaction to.\n\t* @param transaction Transaction to apply.\n\t* @param opts Options for applying the Transaction.\n\t*\n\t* @returns Promise resolving with the results of the Transaction.\n\t*\n\t* @throws `ResourceNotFoundError` if the Resource was not found.\n\t*\n\t* @emits `ResourceTransactionEvent` when the Transaction has been applied.\n\t* @returns\n\t*/\n\tasync query(selector, transaction, opts) {\n\t\tif (this.starting) await this.starting;\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to apply Transaction to Resource while instance is stopping.\");\n\t\tconst setContentsQueue = this.pending.setContents.get(selector.key);\n\t\tif (setContentsQueue) await Promise.allSettled(setContentsQueue);\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: ResourceTransactionEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tconst writes = transaction.statements.some(isWrite);\n\t\tconst tail = this.pending.query.get(selector.key) ?? Promise.resolve();\n\t\tconst promise = tail.catch(() => {}).then(async () => {\n\t\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\t\tawait this.get(selector, {\n\t\t\t\ttrace: operation.trace,\n\t\t\t\temit: false\n\t\t\t});\n\t\t\tconst open = this.open.get(selector.key);\n\t\t\tconst res = await open.connection.query(transaction, { trace: operation.trace });\n\t\t\tif (writes) {\n\t\t\t\tawait this.scheduleResource(selector, { trace: operation.trace });\n\t\t\t\tconst size = await stat(resolve(this.dir, selector.path, \"db.sqlite\")).then(({ size: size$1 }) => size$1);\n\t\t\t\tthis.index.update(selector, {\n\t\t\t\t\tmodifiedAt: new Date(),\n\t\t\t\t\tsize\n\t\t\t\t}).catch((err) => {\n\t\t\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\t\t\tthis.logger?.error(\"failed updating resource metadata after transaction was applied\", {\n\t\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\t\tresource: selector.key,\n\t\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\t\terr: JSON.stringify(serializeError(error))\n\t\t\t\t\t});\n\t\t\t\t\tthis.onError?.(new UnexpectedErrorEvent({\n\t\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\t\terror\n\t\t\t\t\t}));\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.logger?.info(\"applied transaction\", {\n\t\t\t\tmodule: S3Storage.name,\n\t\t\t\tresource: selector.key,\n\t\t\t\ttrace: operation.trace,\n\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t});\n\t\t\tif (emit) this.events?.emit(ResourceTransactionEvent.type, new ResourceTransactionEvent({\n\t\t\t\tresource: selector,\n\t\t\t\ttransaction,\n\t\t\t\ttrace: operation.trace\n\t\t\t}));\n\t\t\treturn res;\n\t\t}).finally(() => {\n\t\t\tif (this.pending.query.get(selector.key) === promise) this.pending.query.delete(selector.key);\n\t\t});\n\t\tthis.pending.query.set(selector.key, promise);\n\t\treturn promise;\n\t}\n\t/**\n\t* Free up locally replicate state for a specific Resource.\n\t*\n\t* @param selector Selector of the Resource to free up locally replicate state for.\n\t* @param opts Options for freeing up locally replicate state for the Resource.\n\t*\n\t* @returns Promise resolving when the locally replicate state for the Resource has been freed.\n\t*\n\t* @throws `ResourceNotFoundError` if the Resource was not found.\n\t*\n\t* @emits `StorageFreeEvent` when the locally replicate state for the Resource has been freed.\n\t*/\n\tasync free(selector, opts) {\n\t\tif (this.starting) await this.starting;\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to free Resource while instance is stopping.\");\n\t\tconst pending = this.pending.free.get(selector.key);\n\t\tif (pending) return pending;\n\t\tconst queryPending = this.pending.query.get(selector.key);\n\t\tif (queryPending) await queryPending.catch(() => {});\n\t\tconst setContentsPending = this.pending.setContents.get(selector.key);\n\t\tif (setContentsPending) await Promise.allSettled(setContentsPending);\n\t\tconst getContentsPending = this.pending.getContents.get(selector.key);\n\t\tif (getContentsPending) await Promise.allSettled(getContentsPending);\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageFreeEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst promise = new Promise(async (resolve$1, reject) => {\n\t\t\ttry {\n\t\t\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\t\t\tawait this.index.get(selector);\n\t\t\t\tconst open = this.open.get(selector.key);\n\t\t\t\tif (open) {\n\t\t\t\t\tawait this.synchronizeResource(selector, {\n\t\t\t\t\t\tforce: true,\n\t\t\t\t\t\ttrace: operation.trace\n\t\t\t\t\t});\n\t\t\t\t\tawait open.connection?.close();\n\t\t\t\t\tthis.open.delete(selector.key);\n\t\t\t\t\tawait Promise.all([selector.type === \"namespace\" ? Promise.resolve() : rm(resolve(this.dir, selector.path, \"db.sqlite\")), rm(resolve(this.dir, selector.path, \"metadata.json\"))]);\n\t\t\t\t}\n\t\t\t\tthis.logger?.info(\"freed resource\", {\n\t\t\t\t\tmodule: S3Storage.name,\n\t\t\t\t\tresource: selector.key,\n\t\t\t\t\ttrace: operation.trace,\n\t\t\t\t\tdur: formatDuration(operation.duration)\n\t\t\t\t});\n\t\t\t\tif (emit) this.events?.emit(StorageFreeEvent.type, new StorageFreeEvent({\n\t\t\t\t\tresource: selector,\n\t\t\t\t\ttrace: operation.trace\n\t\t\t\t}));\n\t\t\t\tresolve$1();\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\tthis.pending.free.delete(selector.key);\n\t\t\t}\n\t\t});\n\t\tthis.pending.free.set(selector.key, promise);\n\t\treturn promise;\n\t}\n\t/**\n\t* Delete a specific Resource.\n\t*\n\t* This will also cause all children Resources to be deleted!\n\t*\n\t* All files associated with the Resource and its children will be deleted both\n\t* locally and in S3.\n\t*\n\t* @param selector Selector of the Resource to delete.\n\t* @param opts Options for deleting the Resource.\n\t*\n\t* @returns Promise resolving when the Resource and its children have\n\t* been deleted.\n\t*\n\t* @throws `ResourceNotFoundError` if the Resource to delete was not found.\n\t*\n\t* @emits `StorageDeleteEvent` when the Resource and its children have been\n\t* deleted.\n\t*/\n\tasync delete(selector, opts) {\n\t\tif (this.starting) await this.starting;\n\t\tif (this.stopping && !this.handover) throw new Error(\"Unable to delete Resource while instance is stopping.\");\n\t\tconst pending = this.pending.delete.get(selector.key);\n\t\tif (pending) return pending;\n\t\tconst synchronizePending = this.pending.synchronize.get(selector.key);\n\t\tif (synchronizePending) await synchronizePending;\n\t\tclearTimeout(this.scheduled.get(selector.key));\n\t\tthis.scheduled.delete(selector.key);\n\t\tconst queryPending = this.pending.query.get(selector.key);\n\t\tif (queryPending) await queryPending.catch(() => {});\n\t\tconst setContentsPending = this.pending.setContents.get(selector.key);\n\t\tif (setContentsPending) await Promise.allSettled(setContentsPending);\n\t\tconst emit = opts?.emit ?? true;\n\t\tconst operation = new Operation({\n\t\t\ttype: StorageDeleteEvent.type,\n\t\t\ttrace: opts?.trace ?? crypto.randomUUID()\n\t\t});\n\t\tif (!this.index) throw new Error(`Index has not been initialized. Please initialize the ${S3Storage.name} instance first by invoking the '.start' method.`);\n\t\tawait this.index.get(selector);\n\t\tconst children = await this.index.list({ parent: selector });\n\t\tawait Promise.all(children.map(({ key }) => new Selector(key)).map((selector$1) => this.delete(selector$1, {\n\t\t\ttrace: operation.trace,\n\t\t\temit: false\n\t\t})));\n\t\tconst open = this.open.get(selector.key);\n\t\tif (open) {\n\t\t\tawait open.connection?.close();\n\t\t\tthis.open.delete(selector.key);\n\t\t\tconst dir = resolve(this.dir, selector.path);\n\t\t\tif (selector.type === \"namespace\") await rm(resolve(dir, \"metadata.json\"));\n\t\t\telse await Promise.all([\n\t\t\t\trm(resolve(dir, \"db.sqlite\")),\n\t\t\t\trm(resolve(dir, \"db.sqlite-wal\")).catch(() => {}),\n\t\t\t\trm(resolve(dir, \"db.sqlite-shm\")).catch(() => {}),\n\t\t\t\trm(resolve(dir, \"metadata.json\"))\n\t\t\t]);\n\t\t}\n\t\tawait Promise.all([selector.type === \"namespace\" ? Promise.resolve() : this.client.deleteObject({ key: `${selector.path}/db.sqlite` }, { trace: operation.trace }), this.client.deleteObject({ key: `${selector.path}/metadata.json` }, { trace: operation.trace })]);\n\t\tawait this.index.remove(selector);\n\t\tthis.logger?.info(\"deleted resource\", {\n\t\t\tmodule: S3Storage.name,\n\t\t\tresource: selector.key,\n\t\t\ttrace: operation.trace,\n\t\t\tdur: formatDuration(operation.duration)\n\t\t});\n\t\tif (emit) this.events?.emit(StorageDeleteEvent.type, new StorageDeleteEvent({\n\t\t\tresource: selector,\n\t\t\ttrace: operation.trace\n\t\t}));\n\t}\n};\n\n//#endregion\nexport { S3Storage };"],"names":["S3Storage"],"mappings":"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"}