@workglow/indexeddb 0.3.14 → 0.3.15

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.
@@ -9,10 +9,10 @@
9
9
  "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n IClaim,\n IMessageQueue,\n JobStorageFormat,\n MessageId,\n QueueChangePayload,\n QueueStorageScope,\n QueueSubscribeOptions,\n SendOptions,\n} from \"@workglow/job-queue\";\nimport { IndexedDbQueueStorage } from \"./IndexedDbQueueStorage\";\n\nclass IndexedDbClaim<Input, Output> implements IClaim<JobStorageFormat<Input, Output>> {\n constructor(\n private readonly core: IndexedDbQueueStorage<Input, Output>,\n public readonly id: MessageId,\n public readonly body: JobStorageFormat<Input, Output>,\n public readonly attempts: number,\n private readonly workerId: string\n ) {}\n\n async ack(result?: unknown): Promise<void> {\n const current = (await this.core.get(this.id)) ?? this.body;\n const output = result !== undefined ? result : (current.output ?? null);\n await this.core.finalize(this.id, {\n output: output as Output | null,\n error: null,\n error_code: null,\n status: \"COMPLETED\",\n completed_at: current.completed_at ?? new Date().toISOString(),\n });\n }\n\n async retry(opts?: { delaySeconds?: number }): Promise<void> {\n const delay = opts?.delaySeconds ?? 0;\n const current = (await this.core.get(this.id)) ?? this.body;\n await this.core.complete({\n ...current,\n status: \"PENDING\",\n lease_owner: null,\n lease_expires_at: null,\n visible_at: new Date(Date.now() + delay * 1000).toISOString(),\n progress: 0,\n progress_message: \"\",\n progress_details: null,\n });\n }\n\n async fail(opts?: {\n error?: string | null;\n errorCode?: string | null;\n abortRequested?: boolean;\n permanent?: boolean;\n }): Promise<void> {\n void opts?.permanent;\n const current = (await this.core.get(this.id)) ?? this.body;\n const error = opts?.error !== undefined ? opts.error : (current.error ?? null);\n const errorCode = opts?.errorCode !== undefined ? opts.errorCode : (current.error_code ?? null);\n const abortRequested = opts?.abortRequested === true;\n await this.core.finalize(this.id, {\n error,\n error_code: errorCode,\n abort_requested_at: abortRequested\n ? (current.abort_requested_at ?? new Date().toISOString())\n : (current.abort_requested_at ?? null),\n status: \"FAILED\",\n completed_at: current.completed_at ?? new Date().toISOString(),\n });\n }\n\n async extendLease(ms: number): Promise<void> {\n await this.core.extendLease(this.id, this.workerId, ms);\n }\n\n async disable(): Promise<void> {\n const current = await this.core.get(this.id);\n const completedAt = current?.completed_at ?? new Date().toISOString();\n await this.core.finalize(this.id, {\n status: \"DISABLED\",\n completed_at: completedAt,\n lease_owner: null,\n progress: 0,\n progress_message: \"\",\n progress_details: null,\n });\n }\n}\n\nexport class IndexedDbMessageQueue<Input, Output> implements IMessageQueue<\n JobStorageFormat<Input, Output>\n> {\n public readonly scope: QueueStorageScope = \"process\";\n\n /** @internal — shared with the paired job store */\n public readonly core: IndexedDbQueueStorage<Input, Output>;\n\n constructor(core: IndexedDbQueueStorage<Input, Output>) {\n this.core = core;\n }\n\n async send(body: JobStorageFormat<Input, Output>, opts?: SendOptions): Promise<MessageId> {\n return this.core.add(applySendOptions(body, opts));\n }\n\n async sendBatch(\n bodies: readonly JobStorageFormat<Input, Output>[],\n opts?: SendOptions\n ): Promise<readonly MessageId[]> {\n const ids: MessageId[] = [];\n for (const body of bodies) {\n ids.push(await this.send(body, opts));\n }\n return ids;\n }\n\n async receive(opts: {\n workerId: string;\n leaseMs: number;\n max?: number;\n }): Promise<readonly IClaim<JobStorageFormat<Input, Output>>[]> {\n const max = Math.max(1, opts.max ?? 1);\n const claims: IClaim<JobStorageFormat<Input, Output>>[] = [];\n while (claims.length < max) {\n const job = await this.core.next(opts.workerId, { leaseMs: opts.leaseMs });\n if (!job) break;\n claims.push(\n new IndexedDbClaim<Input, Output>(this.core, job.id, job, job.attempts ?? 0, opts.workerId)\n );\n }\n return claims;\n }\n\n async releaseClaim(id: MessageId): Promise<void> {\n await this.core.releaseClaim(id);\n }\n\n async migrate(): Promise<void> {\n await this.core.migrate();\n }\n\n getMigrations(): ReadonlyArray<unknown> {\n return this.core.getMigrations();\n }\n\n subscribeToChanges(\n callback: (change: QueueChangePayload<any, any>) => void,\n options?: QueueSubscribeOptions\n ): () => void {\n return this.core.subscribeToChanges(callback, options);\n }\n}\n\nfunction applySendOptions<Input, Output>(\n body: JobStorageFormat<Input, Output>,\n opts?: SendOptions\n): JobStorageFormat<Input, Output> {\n if (!opts) return body;\n const out: JobStorageFormat<Input, Output> = { ...body };\n if (opts.delaySeconds != null) {\n out.visible_at = new Date(Date.now() + opts.delaySeconds * 1000).toISOString();\n }\n if (opts.timeoutSeconds != null) {\n out.deadline_at = new Date(Date.now() + opts.timeoutSeconds * 1000).toISOString();\n }\n if (opts.fingerprint != null) out.fingerprint = opts.fingerprint;\n if (opts.jobRunId != null) out.job_run_id = opts.jobRunId;\n if (opts.maxAttempts != null) out.max_attempts = opts.maxAttempts;\n return out;\n}\n",
10
10
  "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n IJobStore,\n JobRecord,\n JobStatus,\n JobStorageFormat,\n MessageId,\n SendOptions,\n} from \"@workglow/job-queue\";\nimport type { IndexedDbQueueStorage } from \"./IndexedDbQueueStorage\";\n\nexport class IndexedDbJobStore<Input, Output> implements IJobStore<Input, Output> {\n /** @internal — shared with the paired message queue */\n public readonly core: IndexedDbQueueStorage<Input, Output>;\n\n constructor(core: IndexedDbQueueStorage<Input, Output>) {\n this.core = core;\n }\n\n get(id: MessageId): Promise<JobRecord<Input, Output> | undefined> {\n return this.core.get(id);\n }\n\n async peek(status?: JobStatus, num?: number): Promise<readonly JobRecord<Input, Output>[]> {\n return this.core.peek(status as any, num);\n }\n\n size(status?: JobStatus): Promise<number> {\n return this.core.size(status as any);\n }\n\n async getByRunId(runId: string): Promise<readonly JobRecord<Input, Output>[]> {\n return this.core.getByRunId(runId);\n }\n\n outputForInput(input: Input): Promise<Output | null> {\n return this.core.outputForInput(input);\n }\n\n async saveProgress(\n id: MessageId,\n progress: number,\n message: string,\n details: Record<string, any> | null\n ): Promise<void> {\n await this.core.saveProgress(id, progress, message, details);\n }\n\n async deleteByStatusAndAge(status: JobStatus, olderThanMs: number): Promise<void> {\n await this.core.deleteJobsByStatusAndAge(status, olderThanMs);\n }\n\n async delete(id: MessageId): Promise<void> {\n await this.core.delete(id);\n }\n\n async deleteAll(): Promise<void> {\n await this.core.deleteAll();\n }\n\n async abort(id: MessageId): Promise<void> {\n await this.core.abort(id);\n }\n\n async saveStatus(id: MessageId, status: JobStatus): Promise<void> {\n await this.core.saveStatus(id, status);\n }\n\n async create(body: JobStorageFormat<Input, Output>, opts: SendOptions): Promise<MessageId> {\n const enriched = {\n ...body,\n fingerprint: opts.fingerprint ?? body.fingerprint,\n job_run_id: opts.jobRunId ?? body.job_run_id,\n max_attempts: opts.maxAttempts ?? body.max_attempts,\n deadline_at:\n opts.timeoutSeconds != null\n ? new Date(Date.now() + opts.timeoutSeconds * 1000).toISOString()\n : body.deadline_at,\n } as JobStorageFormat<Input, Output>;\n return this.core.add(enriched);\n }\n\n async findActiveByFingerprint(\n fingerprint: string,\n _queueName: string\n ): Promise<JobRecord<Input, Output> | undefined> {\n const [pending, processing] = await Promise.all([\n this.core.peek(\"PENDING\" as any),\n this.core.peek(\"PROCESSING\" as any),\n ]);\n return [...pending, ...processing].find((j) => j.fingerprint === fingerprint);\n }\n\n async getMany(\n ids: readonly MessageId[]\n ): Promise<readonly (JobRecord<Input, Output> | undefined)[]> {\n return Promise.all(ids.map((id) => this.core.get(id)));\n }\n\n async completeWithResult(id: MessageId, result: Output): Promise<void> {\n await this.core.finalize(id, {\n output: result,\n error: null,\n error_code: null,\n status: \"COMPLETED\",\n completed_at: new Date().toISOString(),\n });\n }\n\n async failWithError(\n id: MessageId,\n opts: {\n readonly error?: string | null;\n readonly errorCode?: string | null;\n readonly abortRequested?: boolean;\n }\n ): Promise<void> {\n const current = await this.core.get(id);\n const now = new Date().toISOString();\n const abortRequestedAt =\n opts.abortRequested === true\n ? (current?.abort_requested_at ?? now)\n : (current?.abort_requested_at ?? null);\n await this.core.finalize(id, {\n ...(\"error\" in opts ? { error: opts.error ?? null } : {}),\n ...(\"errorCode\" in opts ? { error_code: opts.errorCode ?? null } : {}),\n abort_requested_at: abortRequestedAt,\n status: \"FAILED\",\n completed_at: current?.completed_at ?? now,\n });\n }\n\n async markDisabled(id: MessageId): Promise<void> {\n await this.core.markDisabled(id);\n }\n\n async markEnqueueDeferred(\n id: MessageId,\n opts: { readonly visible_at: Date; readonly errorCode: string }\n ): Promise<void> {\n await this.core.finalize(id, {\n visible_at: opts.visible_at.toISOString(),\n error_code: opts.errorCode,\n });\n }\n}\n",
11
11
  "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IndexedDbJobStore } from \"./IndexedDbJobStore\";\nimport { IndexedDbMessageQueue } from \"./IndexedDbMessageQueue\";\nimport { IndexedDbQueueStorage, type IndexedDbQueueStorageOptions } from \"./IndexedDbQueueStorage\";\n\n/**\n * Factory for the paired IndexedDB message queue and job store. Both\n * facades share a single underlying {@link IndexedDbQueueStorage} so writes\n * through one are observable through the other.\n */\nexport function createIndexedDbQueue<Input, Output>(\n queueName: string,\n opts?: IndexedDbQueueStorageOptions\n): {\n messageQueue: IndexedDbMessageQueue<Input, Output>;\n jobStore: IndexedDbJobStore<Input, Output>;\n} {\n const core = new IndexedDbQueueStorage<Input, Output>(queueName, opts);\n return {\n messageQueue: new IndexedDbMessageQueue<Input, Output>(core),\n jobStore: new IndexedDbJobStore<Input, Output>(core),\n };\n}\n",
12
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n IRateLimiterStorage,\n PrefixColumn,\n RateLimiterStorageOptions,\n RateLimiterStorageScope,\n} from \"@workglow/job-queue\";\nimport { createServiceToken } from \"@workglow/util\";\nimport { runIndexedDbMigrationGroups } from \"../migrations/IndexedDbMigrationRunner\";\nimport { indexedDbRateLimiterMigrationGroups } from \"../migrations/indexedDbRateLimiterMigrations\";\nimport { openIdb } from \"../storage/openIdb\";\n\nexport const INDEXED_DB_RATE_LIMITER_STORAGE = createServiceToken<IRateLimiterStorage>(\n \"ratelimiter.storage.indexedDb\"\n);\n\nexport interface IndexedDbRateLimiterStorageOptions extends RateLimiterStorageOptions {}\n\ninterface ExecutionRecord {\n readonly id?: string;\n readonly queue_name: string;\n readonly executed_at: string;\n readonly [key: string]: unknown;\n}\n\ninterface NextAvailableRecord {\n readonly queue_name: string;\n readonly next_available_at: string;\n readonly [key: string]: unknown;\n}\n\n/**\n * IndexedDB implementation of rate limiter storage.\n * Manages execution records and next available times for rate limiting.\n *\n * Atomicity is `\"process\"`-scoped (browser tab) and the `next_available_at`\n * pre-check inside {@link tryReserveExecution} runs in a separate IDB\n * transaction from the count-and-insert. See {@link tryReserveExecution} for\n * the full caveat — do not assume cross-store atomicity.\n */\nexport class IndexedDbRateLimiterStorage implements IRateLimiterStorage {\n /**\n * `\"process\"` — IndexedDB is per-origin and shared across tabs but not across\n * processes (different machines, server processes). Within a single tab the\n * `readwrite` transaction below provides atomicity.\n */\n public readonly scope: RateLimiterStorageScope = \"process\";\n private executionDb: IDBDatabase | undefined;\n private nextAvailableDb: IDBDatabase | undefined;\n private readonly executionTableName: string;\n private readonly nextAvailableTableName: string;\n protected readonly prefixes: readonly PrefixColumn[];\n protected readonly prefixValues: Readonly<Record<string, string | number>>;\n\n constructor(options: IndexedDbRateLimiterStorageOptions = {}) {\n this.prefixes = options.prefixes ?? [];\n this.prefixValues = options.prefixValues ?? {};\n\n if (this.prefixes.length > 0) {\n const prefixNames = this.prefixes.map((p) => p.name).join(\"_\");\n this.executionTableName = `rate_limit_executions_${prefixNames}`;\n this.nextAvailableTableName = `rate_limit_next_available_${prefixNames}`;\n } else {\n this.executionTableName = \"rate_limit_executions\";\n this.nextAvailableTableName = \"rate_limit_next_available\";\n }\n }\n\n private getPrefixColumnNames(): string[] {\n return this.prefixes.map((p) => p.name);\n }\n\n private matchesPrefixes(record: Record<string, unknown>): boolean {\n for (const [key, value] of Object.entries(this.prefixValues)) {\n if (record[key] !== value) {\n return false;\n }\n }\n return true;\n }\n\n private getPrefixKeyValues(): Array<string | number> {\n return this.prefixes.map((p) => this.prefixValues[p.name]);\n }\n\n private async getExecutionDb(): Promise<IDBDatabase> {\n if (this.executionDb) return this.executionDb;\n await this.migrate();\n return this.executionDb!;\n }\n\n private async getNextAvailableDb(): Promise<IDBDatabase> {\n if (this.nextAvailableDb) return this.nextAvailableDb;\n await this.migrate();\n return this.nextAvailableDb!;\n }\n\n /**\n * Returns the versioned migration groups (one per IndexedDB database) that\n * the rate-limiter's tables depend on. The execution and next-available\n * stores live in separate databases, so this returns two groups.\n */\n public getMigrations() {\n return indexedDbRateLimiterMigrationGroups(\n this.executionTableName,\n this.nextAvailableTableName,\n this.prefixes\n );\n }\n\n /**\n * Applies any pending migrations for the rate limiter's two IndexedDB\n * databases, then opens long-lived connections at the migrated versions.\n * Idempotent — a second call closes any prior handles (so they don't pin\n * the pre-migration versions or block another tab's upgrade), reruns the\n * runner (no-op if everything is recorded as applied), and reopens.\n */\n public async migrate(): Promise<void> {\n if (this.executionDb) {\n try {\n this.executionDb.close();\n } catch {\n // ignore — close is best-effort\n }\n this.executionDb = undefined;\n }\n if (this.nextAvailableDb) {\n try {\n this.nextAvailableDb.close();\n } catch {\n // ignore — close is best-effort\n }\n this.nextAvailableDb = undefined;\n }\n await runIndexedDbMigrationGroups(this.getMigrations());\n this.executionDb = await openIdb(this.executionTableName);\n this.nextAvailableDb = await openIdb(this.nextAvailableTableName);\n }\n\n /**\n * Atomically reserves an execution slot in IndexedDB.\n *\n * Atomicity caveat: this implementation only serializes the `count + insert`\n * pair (under a single `readwrite` IDB transaction over the executions\n * store). The `next_available_at` lookup is a soft pre-check performed\n * BEFORE the tx, because the executions and next-available object stores\n * live in separate `IDBDatabase` instances by design (one\n * `ensureIndexedDbTable` call each) and IDB transaction scope cannot cross\n * databases. This is acceptable for IndexedDB's `\"process\"` scope: rate-\n * limit overshoot from a stale next-available read is bounded by single-\n * tab serial execution, and the stricter count check is what protects the\n * primary maxExecutions invariant.\n */\n public async tryReserveExecution(\n queueName: string,\n maxExecutions: number,\n windowMs: number\n ): Promise<unknown | null> {\n // Soft pre-check against external backoff. Done before opening the tx\n // because next-available lives in a separate IDBDatabase.\n const nextIso = await this.getNextAvailableTime(queueName);\n if (nextIso && new Date(nextIso).getTime() > Date.now()) {\n return null;\n }\n\n const execDb = await this.getExecutionDb();\n const prefixKeyValues = this.getPrefixKeyValues();\n const windowStartIso = new Date(Date.now() - windowMs).toISOString();\n const execTx = execDb.transaction(this.executionTableName, \"readwrite\");\n const execStore = execTx.objectStore(this.executionTableName);\n const insertedId = crypto.randomUUID();\n\n return new Promise<unknown | null>((resolve, reject) => {\n let liveCount = 0;\n let didInsert = false;\n const liveRange = IDBKeyRange.bound(\n [...prefixKeyValues, queueName, windowStartIso],\n [...prefixKeyValues, queueName, \"￿\"],\n true,\n false\n );\n const cursorReq = execStore.index(\"queue_executed_at\").openCursor(liveRange);\n\n cursorReq.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;\n if (cursor) {\n const record = cursor.value as ExecutionRecord;\n if (this.matchesPrefixes(record)) {\n liveCount++;\n }\n cursor.continue();\n return;\n }\n\n if (liveCount >= maxExecutions) {\n // Aborting fires execTx.onabort below, which resolves with `false`.\n // No INSERT happened, so capacity is preserved.\n execTx.abort();\n return;\n }\n\n const record: ExecutionRecord = {\n id: insertedId,\n queue_name: queueName,\n executed_at: new Date().toISOString(),\n };\n for (const [k, v] of Object.entries(this.prefixValues)) {\n (record as Record<string, unknown>)[k] = v;\n }\n const addReq = execStore.add(record);\n didInsert = true;\n addReq.onerror = () => {\n try {\n execTx.abort();\n } catch {\n // already aborted\n }\n reject(addReq.error);\n };\n };\n\n cursorReq.onerror = () => reject(cursorReq.error);\n execTx.oncomplete = () => resolve(didInsert ? insertedId : null);\n execTx.onerror = () => reject(execTx.error);\n execTx.onabort = () => resolve(null);\n });\n }\n\n public async releaseExecution(queueName: string, token: unknown): Promise<void> {\n if (token === null || token === undefined) return;\n const db = await this.getExecutionDb();\n const tx = db.transaction(this.executionTableName, \"readwrite\");\n const store = tx.objectStore(this.executionTableName);\n return new Promise<void>((resolve, reject) => {\n // Delete by id — NEVER by recency. Two concurrent acquirers can hold\n // tokens for different rows; deleting \"the most recent\" would release\n // the other worker's slot.\n const req = store.delete(token as IDBValidKey);\n req.onerror = () => reject(req.error);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n }\n\n public async recordExecution(queueName: string): Promise<void> {\n const db = await this.getExecutionDb();\n const tx = db.transaction(this.executionTableName, \"readwrite\");\n const store = tx.objectStore(this.executionTableName);\n\n const record: ExecutionRecord = {\n id: crypto.randomUUID(),\n queue_name: queueName,\n executed_at: new Date().toISOString(),\n };\n\n for (const [key, value] of Object.entries(this.prefixValues)) {\n (record as Record<string, unknown>)[key] = value;\n }\n\n return new Promise((resolve, reject) => {\n const request = store.add(record);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n request.onerror = () => reject(request.error);\n });\n }\n\n public async getExecutionCount(queueName: string, windowStartTime: string): Promise<number> {\n const db = await this.getExecutionDb();\n const tx = db.transaction(this.executionTableName, \"readonly\");\n const store = tx.objectStore(this.executionTableName);\n const index = store.index(\"queue_executed_at\");\n const prefixKeyValues = this.getPrefixKeyValues();\n\n return new Promise((resolve, reject) => {\n let count = 0;\n const keyRange = IDBKeyRange.bound(\n [...prefixKeyValues, queueName, windowStartTime],\n [...prefixKeyValues, queueName, \"\\uffff\"],\n true, // exclude lower bound (windowStartTime)\n false\n );\n const request = index.openCursor(keyRange);\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;\n if (cursor) {\n const record = cursor.value as ExecutionRecord;\n if (this.matchesPrefixes(record)) {\n count++;\n }\n cursor.continue();\n }\n };\n\n tx.oncomplete = () => resolve(count);\n tx.onerror = () => reject(tx.error);\n request.onerror = () => reject(request.error);\n });\n }\n\n public async getOldestExecutionAtOffset(\n queueName: string,\n offset: number\n ): Promise<string | undefined> {\n const db = await this.getExecutionDb();\n const tx = db.transaction(this.executionTableName, \"readonly\");\n const store = tx.objectStore(this.executionTableName);\n const index = store.index(\"queue_executed_at\");\n const prefixKeyValues = this.getPrefixKeyValues();\n\n return new Promise((resolve, reject) => {\n const executions: string[] = [];\n const keyRange = IDBKeyRange.bound(\n [...prefixKeyValues, queueName, \"\"],\n [...prefixKeyValues, queueName, \"\\uffff\"]\n );\n const request = index.openCursor(keyRange);\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;\n if (cursor) {\n const record = cursor.value as ExecutionRecord;\n if (this.matchesPrefixes(record)) {\n executions.push(record.executed_at);\n }\n cursor.continue();\n }\n };\n\n tx.oncomplete = () => {\n executions.sort();\n resolve(executions[offset]);\n };\n tx.onerror = () => reject(tx.error);\n request.onerror = () => reject(request.error);\n });\n }\n\n public async getNextAvailableTime(queueName: string): Promise<string | undefined> {\n const db = await this.getNextAvailableDb();\n const tx = db.transaction(this.nextAvailableTableName, \"readonly\");\n const store = tx.objectStore(this.nextAvailableTableName);\n const prefixKeyValues = this.getPrefixKeyValues();\n const key = [...prefixKeyValues, queueName].join(\"_\");\n\n return new Promise((resolve, reject) => {\n const request = store.get(key);\n request.onsuccess = () => {\n const record = request.result as NextAvailableRecord | undefined;\n if (record && this.matchesPrefixes(record)) {\n resolve(record.next_available_at);\n } else {\n resolve(undefined);\n }\n };\n request.onerror = () => reject(request.error);\n tx.onerror = () => reject(tx.error);\n });\n }\n\n public async setNextAvailableTime(queueName: string, nextAvailableAt: string): Promise<void> {\n const db = await this.getNextAvailableDb();\n const tx = db.transaction(this.nextAvailableTableName, \"readwrite\");\n const store = tx.objectStore(this.nextAvailableTableName);\n const prefixKeyValues = this.getPrefixKeyValues();\n const key = [...prefixKeyValues, queueName].join(\"_\");\n\n const record: NextAvailableRecord & { [key: string]: unknown } = {\n queue_name: queueName,\n next_available_at: nextAvailableAt,\n };\n\n for (const [k, value] of Object.entries(this.prefixValues)) {\n record[k] = value;\n }\n\n (record as Record<string, unknown>)[\n this.getPrefixColumnNames().concat([\"queue_name\"]).join(\"_\")\n ] = key;\n\n return new Promise((resolve, reject) => {\n const request = store.put(record);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n request.onerror = () => reject(request.error);\n });\n }\n\n public async clear(queueName: string): Promise<void> {\n const execDb = await this.getExecutionDb();\n const execTx = execDb.transaction(this.executionTableName, \"readwrite\");\n const execStore = execTx.objectStore(this.executionTableName);\n const execIndex = execStore.index(\"queue_executed_at\");\n const prefixKeyValues = this.getPrefixKeyValues();\n\n await new Promise<void>((resolve, reject) => {\n const keyRange = IDBKeyRange.bound(\n [...prefixKeyValues, queueName, \"\"],\n [...prefixKeyValues, queueName, \"\\uffff\"]\n );\n const request = execIndex.openCursor(keyRange);\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;\n if (cursor) {\n const record = cursor.value as ExecutionRecord;\n if (this.matchesPrefixes(record)) {\n cursor.delete();\n }\n cursor.continue();\n }\n };\n\n execTx.oncomplete = () => resolve();\n execTx.onerror = () => reject(execTx.error);\n request.onerror = () => reject(request.error);\n });\n\n const nextDb = await this.getNextAvailableDb();\n const nextTx = nextDb.transaction(this.nextAvailableTableName, \"readwrite\");\n const nextStore = nextTx.objectStore(this.nextAvailableTableName);\n const key = [...prefixKeyValues, queueName].join(\"_\");\n\n await new Promise<void>((resolve, reject) => {\n const request = nextStore.delete(key);\n nextTx.oncomplete = () => resolve();\n nextTx.onerror = () => reject(nextTx.error);\n request.onerror = () => reject(request.error);\n });\n }\n}\n",
12
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n IRateLimiterStorage,\n PrefixColumn,\n RateLimiterStorageOptions,\n RateLimiterStorageScope,\n} from \"@workglow/job-queue\";\nimport { createServiceToken } from \"@workglow/util\";\nimport { runIndexedDbMigrationGroups } from \"../migrations/IndexedDbMigrationRunner\";\nimport { indexedDbRateLimiterMigrationGroups } from \"../migrations/indexedDbRateLimiterMigrations\";\nimport { openIdb } from \"../storage/openIdb\";\n\nexport const INDEXED_DB_RATE_LIMITER_STORAGE = createServiceToken<IRateLimiterStorage>(\n \"ratelimiter.storage.indexedDb\"\n);\n\nexport type IndexedDbRateLimiterStorageOptions = RateLimiterStorageOptions;\n\ninterface ExecutionRecord {\n readonly id?: string;\n readonly queue_name: string;\n readonly executed_at: string;\n readonly [key: string]: unknown;\n}\n\ninterface NextAvailableRecord {\n readonly queue_name: string;\n readonly next_available_at: string;\n readonly [key: string]: unknown;\n}\n\n/**\n * IndexedDB implementation of rate limiter storage.\n * Manages execution records and next available times for rate limiting.\n *\n * Atomicity is `\"process\"`-scoped (browser tab) and the `next_available_at`\n * pre-check inside {@link tryReserveExecution} runs in a separate IDB\n * transaction from the count-and-insert. See {@link tryReserveExecution} for\n * the full caveat — do not assume cross-store atomicity.\n */\nexport class IndexedDbRateLimiterStorage implements IRateLimiterStorage {\n /**\n * `\"process\"` — IndexedDB is per-origin and shared across tabs but not across\n * processes (different machines, server processes). Within a single tab the\n * `readwrite` transaction below provides atomicity.\n */\n public readonly scope: RateLimiterStorageScope = \"process\";\n private executionDb: IDBDatabase | undefined;\n private nextAvailableDb: IDBDatabase | undefined;\n private readonly executionTableName: string;\n private readonly nextAvailableTableName: string;\n protected readonly prefixes: readonly PrefixColumn[];\n protected readonly prefixValues: Readonly<Record<string, string | number>>;\n\n constructor(options: IndexedDbRateLimiterStorageOptions = {}) {\n this.prefixes = options.prefixes ?? [];\n this.prefixValues = options.prefixValues ?? {};\n\n if (this.prefixes.length > 0) {\n const prefixNames = this.prefixes.map((p) => p.name).join(\"_\");\n this.executionTableName = `rate_limit_executions_${prefixNames}`;\n this.nextAvailableTableName = `rate_limit_next_available_${prefixNames}`;\n } else {\n this.executionTableName = \"rate_limit_executions\";\n this.nextAvailableTableName = \"rate_limit_next_available\";\n }\n }\n\n private getPrefixColumnNames(): string[] {\n return this.prefixes.map((p) => p.name);\n }\n\n private matchesPrefixes(record: Record<string, unknown>): boolean {\n for (const [key, value] of Object.entries(this.prefixValues)) {\n if (record[key] !== value) {\n return false;\n }\n }\n return true;\n }\n\n private getPrefixKeyValues(): Array<string | number> {\n return this.prefixes.map((p) => this.prefixValues[p.name]);\n }\n\n private async getExecutionDb(): Promise<IDBDatabase> {\n if (this.executionDb) return this.executionDb;\n await this.migrate();\n return this.executionDb!;\n }\n\n private async getNextAvailableDb(): Promise<IDBDatabase> {\n if (this.nextAvailableDb) return this.nextAvailableDb;\n await this.migrate();\n return this.nextAvailableDb!;\n }\n\n /**\n * Returns the versioned migration groups (one per IndexedDB database) that\n * the rate-limiter's tables depend on. The execution and next-available\n * stores live in separate databases, so this returns two groups.\n */\n public getMigrations() {\n return indexedDbRateLimiterMigrationGroups(\n this.executionTableName,\n this.nextAvailableTableName,\n this.prefixes\n );\n }\n\n /**\n * Applies any pending migrations for the rate limiter's two IndexedDB\n * databases, then opens long-lived connections at the migrated versions.\n * Idempotent — a second call closes any prior handles (so they don't pin\n * the pre-migration versions or block another tab's upgrade), reruns the\n * runner (no-op if everything is recorded as applied), and reopens.\n */\n public async migrate(): Promise<void> {\n if (this.executionDb) {\n try {\n this.executionDb.close();\n } catch {\n // ignore — close is best-effort\n }\n this.executionDb = undefined;\n }\n if (this.nextAvailableDb) {\n try {\n this.nextAvailableDb.close();\n } catch {\n // ignore — close is best-effort\n }\n this.nextAvailableDb = undefined;\n }\n await runIndexedDbMigrationGroups(this.getMigrations());\n this.executionDb = await openIdb(this.executionTableName);\n this.nextAvailableDb = await openIdb(this.nextAvailableTableName);\n }\n\n /**\n * Atomically reserves an execution slot in IndexedDB.\n *\n * Atomicity caveat: this implementation only serializes the `count + insert`\n * pair (under a single `readwrite` IDB transaction over the executions\n * store). The `next_available_at` lookup is a soft pre-check performed\n * BEFORE the tx, because the executions and next-available object stores\n * live in separate `IDBDatabase` instances by design (one\n * `ensureIndexedDbTable` call each) and IDB transaction scope cannot cross\n * databases. This is acceptable for IndexedDB's `\"process\"` scope: rate-\n * limit overshoot from a stale next-available read is bounded by single-\n * tab serial execution, and the stricter count check is what protects the\n * primary maxExecutions invariant.\n */\n public async tryReserveExecution(\n queueName: string,\n maxExecutions: number,\n windowMs: number\n ): Promise<unknown | null> {\n // Soft pre-check against external backoff. Done before opening the tx\n // because next-available lives in a separate IDBDatabase.\n const nextIso = await this.getNextAvailableTime(queueName);\n if (nextIso && new Date(nextIso).getTime() > Date.now()) {\n return null;\n }\n\n const execDb = await this.getExecutionDb();\n const prefixKeyValues = this.getPrefixKeyValues();\n const windowStartIso = new Date(Date.now() - windowMs).toISOString();\n const execTx = execDb.transaction(this.executionTableName, \"readwrite\");\n const execStore = execTx.objectStore(this.executionTableName);\n const insertedId = crypto.randomUUID();\n\n return new Promise<unknown | null>((resolve, reject) => {\n let liveCount = 0;\n let didInsert = false;\n const liveRange = IDBKeyRange.bound(\n [...prefixKeyValues, queueName, windowStartIso],\n [...prefixKeyValues, queueName, \"￿\"],\n true,\n false\n );\n const cursorReq = execStore.index(\"queue_executed_at\").openCursor(liveRange);\n\n cursorReq.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;\n if (cursor) {\n const record = cursor.value as ExecutionRecord;\n if (this.matchesPrefixes(record)) {\n liveCount++;\n }\n cursor.continue();\n return;\n }\n\n if (liveCount >= maxExecutions) {\n // Aborting fires execTx.onabort below, which resolves with `false`.\n // No INSERT happened, so capacity is preserved.\n execTx.abort();\n return;\n }\n\n const record: ExecutionRecord = {\n id: insertedId,\n queue_name: queueName,\n executed_at: new Date().toISOString(),\n };\n for (const [k, v] of Object.entries(this.prefixValues)) {\n (record as Record<string, unknown>)[k] = v;\n }\n const addReq = execStore.add(record);\n didInsert = true;\n addReq.onerror = () => {\n try {\n execTx.abort();\n } catch {\n // already aborted\n }\n reject(addReq.error);\n };\n };\n\n cursorReq.onerror = () => reject(cursorReq.error);\n execTx.oncomplete = () => resolve(didInsert ? insertedId : null);\n execTx.onerror = () => reject(execTx.error);\n execTx.onabort = () => resolve(null);\n });\n }\n\n public async releaseExecution(queueName: string, token: unknown): Promise<void> {\n if (token === null || token === undefined) return;\n const db = await this.getExecutionDb();\n const tx = db.transaction(this.executionTableName, \"readwrite\");\n const store = tx.objectStore(this.executionTableName);\n return new Promise<void>((resolve, reject) => {\n // Delete by id — NEVER by recency. Two concurrent acquirers can hold\n // tokens for different rows; deleting \"the most recent\" would release\n // the other worker's slot.\n const req = store.delete(token as IDBValidKey);\n req.onerror = () => reject(req.error);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n }\n\n public async getExecutionCount(queueName: string, windowStartTime: string): Promise<number> {\n const db = await this.getExecutionDb();\n const tx = db.transaction(this.executionTableName, \"readonly\");\n const store = tx.objectStore(this.executionTableName);\n const index = store.index(\"queue_executed_at\");\n const prefixKeyValues = this.getPrefixKeyValues();\n\n return new Promise((resolve, reject) => {\n let count = 0;\n const keyRange = IDBKeyRange.bound(\n [...prefixKeyValues, queueName, windowStartTime],\n [...prefixKeyValues, queueName, \"\\uffff\"],\n true, // exclude lower bound (windowStartTime)\n false\n );\n const request = index.openCursor(keyRange);\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;\n if (cursor) {\n const record = cursor.value as ExecutionRecord;\n if (this.matchesPrefixes(record)) {\n count++;\n }\n cursor.continue();\n }\n };\n\n tx.oncomplete = () => resolve(count);\n tx.onerror = () => reject(tx.error);\n request.onerror = () => reject(request.error);\n });\n }\n\n public async getOldestExecutionAtOffset(\n queueName: string,\n offset: number\n ): Promise<string | undefined> {\n const db = await this.getExecutionDb();\n const tx = db.transaction(this.executionTableName, \"readonly\");\n const store = tx.objectStore(this.executionTableName);\n const index = store.index(\"queue_executed_at\");\n const prefixKeyValues = this.getPrefixKeyValues();\n\n return new Promise((resolve, reject) => {\n const executions: string[] = [];\n const keyRange = IDBKeyRange.bound(\n [...prefixKeyValues, queueName, \"\"],\n [...prefixKeyValues, queueName, \"\\uffff\"]\n );\n const request = index.openCursor(keyRange);\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;\n if (cursor) {\n const record = cursor.value as ExecutionRecord;\n if (this.matchesPrefixes(record)) {\n executions.push(record.executed_at);\n }\n cursor.continue();\n }\n };\n\n tx.oncomplete = () => {\n executions.sort();\n resolve(executions[offset]);\n };\n tx.onerror = () => reject(tx.error);\n request.onerror = () => reject(request.error);\n });\n }\n\n public async getNextAvailableTime(queueName: string): Promise<string | undefined> {\n const db = await this.getNextAvailableDb();\n const tx = db.transaction(this.nextAvailableTableName, \"readonly\");\n const store = tx.objectStore(this.nextAvailableTableName);\n const prefixKeyValues = this.getPrefixKeyValues();\n const key = [...prefixKeyValues, queueName].join(\"_\");\n\n return new Promise((resolve, reject) => {\n const request = store.get(key);\n request.onsuccess = () => {\n const record = request.result as NextAvailableRecord | undefined;\n if (record && this.matchesPrefixes(record)) {\n resolve(record.next_available_at);\n } else {\n resolve(undefined);\n }\n };\n request.onerror = () => reject(request.error);\n tx.onerror = () => reject(tx.error);\n });\n }\n\n public async setNextAvailableTime(queueName: string, nextAvailableAt: string): Promise<void> {\n const db = await this.getNextAvailableDb();\n const tx = db.transaction(this.nextAvailableTableName, \"readwrite\");\n const store = tx.objectStore(this.nextAvailableTableName);\n const prefixKeyValues = this.getPrefixKeyValues();\n const key = [...prefixKeyValues, queueName].join(\"_\");\n\n const record: NextAvailableRecord & { [key: string]: unknown } = {\n queue_name: queueName,\n next_available_at: nextAvailableAt,\n };\n\n for (const [k, value] of Object.entries(this.prefixValues)) {\n record[k] = value;\n }\n\n (record as Record<string, unknown>)[\n this.getPrefixColumnNames().concat([\"queue_name\"]).join(\"_\")\n ] = key;\n\n return new Promise((resolve, reject) => {\n const request = store.put(record);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n request.onerror = () => reject(request.error);\n });\n }\n\n public async clear(queueName: string): Promise<void> {\n const execDb = await this.getExecutionDb();\n const execTx = execDb.transaction(this.executionTableName, \"readwrite\");\n const execStore = execTx.objectStore(this.executionTableName);\n const execIndex = execStore.index(\"queue_executed_at\");\n const prefixKeyValues = this.getPrefixKeyValues();\n\n await new Promise<void>((resolve, reject) => {\n const keyRange = IDBKeyRange.bound(\n [...prefixKeyValues, queueName, \"\"],\n [...prefixKeyValues, queueName, \"\\uffff\"]\n );\n const request = execIndex.openCursor(keyRange);\n\n request.onsuccess = (event) => {\n const cursor = (event.target as IDBRequest<IDBCursorWithValue>).result;\n if (cursor) {\n const record = cursor.value as ExecutionRecord;\n if (this.matchesPrefixes(record)) {\n cursor.delete();\n }\n cursor.continue();\n }\n };\n\n execTx.oncomplete = () => resolve();\n execTx.onerror = () => reject(execTx.error);\n request.onerror = () => reject(request.error);\n });\n\n const nextDb = await this.getNextAvailableDb();\n const nextTx = nextDb.transaction(this.nextAvailableTableName, \"readwrite\");\n const nextStore = nextTx.objectStore(this.nextAvailableTableName);\n const key = [...prefixKeyValues, queueName].join(\"_\");\n\n await new Promise<void>((resolve, reject) => {\n const request = nextStore.delete(key);\n nextTx.oncomplete = () => resolve();\n nextTx.onerror = () => reject(nextTx.error);\n request.onerror = () => reject(request.error);\n });\n }\n}\n",
13
13
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { PrefixColumn } from \"@workglow/job-queue\";\nimport type { IndexedDbMigration, IndexedDbMigrationGroup } from \"./IndexedDbMigrationRunner\";\n\n/**\n * Initial migrations for the IndexedDB rate-limiter execution table.\n *\n * Schema: an object store keyed by `id` (autoincrement-style; we generate\n * UUIDs at the storage layer) plus a compound index `queue_executed_at` for\n * windowed counts. Prefix columns are prepended to every index key path.\n */\nexport function indexedDbRateLimiterExecutionMigrations(\n executionTableName: string,\n prefixes: readonly PrefixColumn[]\n): IndexedDbMigration[] {\n const component = `rate-limiter:indexeddb:${executionTableName}`;\n const prefixCols = prefixes.map((p) => p.name);\n const k = (cols: string[]): string[] => [...prefixCols, ...cols];\n\n return [\n {\n component,\n version: 1,\n description: \"Create rate-limiter execution object store + indexes\",\n up({ db }) {\n if (!db.objectStoreNames.contains(executionTableName)) {\n const store = db.createObjectStore(executionTableName, { keyPath: \"id\" });\n store.createIndex(\"queue_executed_at\", k([\"queue_name\", \"executed_at\"]), {\n unique: false,\n });\n }\n },\n },\n ];\n}\n\n/**\n * Initial migrations for the IndexedDB rate-limiter `next_available` table.\n *\n * Schema: object store keyed by a single synthetic field whose name is\n * `prefixCols.concat([\"queue_name\"]).join(\"_\")`. The storage layer writes\n * a record where this field holds `prefixValues.concat([queueName]).join(\"_\")`\n * — i.e. tenant-qualified — so the same physical store can hold rows for\n * multiple tenants without collisions. Without this, two tenants with the\n * same queue name would silently overwrite each other's row (the\n * `next_available_at` of one would be returned for the other).\n *\n * No `queue_name = \"myqueue\"` index is created because the storage's read\n * path (`store.get(syntheticKey)`) goes through the primary key directly.\n */\nexport function indexedDbRateLimiterNextAvailableMigrations(\n nextAvailableTableName: string,\n prefixes: readonly PrefixColumn[]\n): IndexedDbMigration[] {\n const component = `rate-limiter:indexeddb:${nextAvailableTableName}`;\n const prefixCols = prefixes.map((p) => p.name);\n // The keyPath is a single field whose name encodes the prefix-qualified\n // identifier. With no prefixes this collapses to `\"queue_name\"`, matching\n // the legacy single-tenant layout.\n const keyField = [...prefixCols, \"queue_name\"].join(\"_\");\n\n return [\n {\n component,\n version: 1,\n description: \"Create rate-limiter next_available object store\",\n up({ db }) {\n if (!db.objectStoreNames.contains(nextAvailableTableName)) {\n db.createObjectStore(nextAvailableTableName, { keyPath: keyField });\n }\n },\n },\n ];\n}\n\n/**\n * Returns the rate-limiter migrations packaged as IDB migration groups —\n * one group per database, since `IndexedDbRateLimiterStorage` keeps the\n * execution and next-available tables in separate databases.\n */\nexport function indexedDbRateLimiterMigrationGroups(\n executionTableName: string,\n nextAvailableTableName: string,\n prefixes: readonly PrefixColumn[]\n): IndexedDbMigrationGroup[] {\n return [\n {\n dbName: executionTableName,\n migrations: indexedDbRateLimiterExecutionMigrations(executionTableName, prefixes),\n },\n {\n dbName: nextAvailableTableName,\n migrations: indexedDbRateLimiterNextAvailableMigrations(nextAvailableTableName, prefixes),\n },\n ];\n}\n"
14
14
  ],
15
- "mappings": "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",
16
- "debugId": "F777E500B49B750264756E2164756E21",
15
+ "mappings": "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",
16
+ "debugId": "4F7139DFE903533364756E2164756E21",
17
17
  "names": []
18
18
  }
@@ -46,11 +46,16 @@ export declare class IndexedDbTabularStorage<Schema extends DataPortSchemaObject
46
46
  * while each array creates a compound index with columns in the specified order.
47
47
  * @param migrationOptions - Options for handling database schema migrations
48
48
  * @param clientProvidedKeys - How to handle client-provided values for auto-generated keys
49
+ * @param tabularMigrations - Declarative migrations evolving the store schema
50
+ * @param uniqueIndexes - Compound column tuples enforced as native IDB UNIQUE
51
+ * indexes (`store.createIndex(..., { unique: true })`).
52
+ * A `put` whose tuple collides with another record's
53
+ * rejects with a `ConstraintError`.
49
54
  */
50
55
  constructor(table: string | undefined, schema: Schema, primaryKeyNames: PrimaryKeyNames, indexes?: readonly (keyof NoInfer<Entity> | readonly (keyof NoInfer<Entity>)[])[], migrationOptions?: MigrationOptions & {
51
56
  readonly useBroadcastChannel?: boolean;
52
57
  readonly backupPollingIntervalMs?: number;
53
- }, clientProvidedKeys?: ClientProvidedKeysOption, tabularMigrations?: ReadonlyArray<ITabularMigration>);
58
+ }, clientProvidedKeys?: ClientProvidedKeysOption, tabularMigrations?: ReadonlyArray<ITabularMigration>, uniqueIndexes?: readonly (readonly (keyof NoInfer<Entity>)[])[]);
54
59
  private getDb;
55
60
  /**
56
61
  * Sets up the IndexedDB database table with the required schema and indexes.
@@ -79,6 +84,16 @@ export declare class IndexedDbTabularStorage<Schema extends DataPortSchemaObject
79
84
  * only generates UUID keys client-side.
80
85
  */
81
86
  protected generateKeyValue(columnName: string, strategy: KeyGenerationStrategy): string | number;
87
+ /**
88
+ * Resolve client-side key-generation policy for a single record and return
89
+ * the entity the caller should hand to `store.put`. Shared by {@link put}
90
+ * and {@link putBulkInTransaction} so the autoincrement / UUID /
91
+ * clientProvidedKeys rules stay in one place.
92
+ *
93
+ * Throws synchronously on `clientProvidedKeys: "always"` without a key,
94
+ * so the failure surfaces before any IDB transaction opens.
95
+ */
96
+ protected prepareRecordForPut(record: InsertType): Entity;
82
97
  /**
83
98
  * @emits put - Emitted when the value is successfully stored
84
99
  */
@@ -87,6 +102,24 @@ export declare class IndexedDbTabularStorage<Schema extends DataPortSchemaObject
87
102
  * @emits put - Emitted for each record successfully stored
88
103
  */
89
104
  putBulk(records: InsertType[]): Promise<Entity[]>;
105
+ /**
106
+ * Atomic batch put: stages every record into a single `readwrite`
107
+ * transaction and only emits per-row `put` events after `tx.oncomplete`,
108
+ * so a failure on any record aborts the whole batch and no subscriber
109
+ * observes uncommitted rows. Used by vector storages (which need an
110
+ * all-or-nothing guarantee for chunk ingestion) — the inherited
111
+ * Promise.all-based `putBulk` opens one transaction per row and can
112
+ * leave the store half-written if the second or later request errors.
113
+ *
114
+ * Per-row `put` events fire from `tx.oncomplete`, which means subscribers
115
+ * to {@link put} see batched commits as a burst after the transaction
116
+ * succeeds rather than interleaved with the IDB requests.
117
+ *
118
+ * Wraps the transaction-open in a single retry to absorb the
119
+ * `InvalidStateError` that fires when an `onversionchange` close races a
120
+ * brand-new transaction.
121
+ */
122
+ protected putBulkInTransaction(records: InsertType[]): Promise<Entity[]>;
90
123
  protected getPrimaryKeyAsOrderedArray(key: PrimaryKey): (string | number | boolean | Uint8Array<ArrayBufferLike> | null)[];
91
124
  private getIndexedKey;
92
125
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedDbTabularStorage.d.ts","sourceRoot":"","sources":["../../src/storage/IndexedDbTabularStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IndexedDbTabularStorage.d.ts","sourceRoot":"","sources":["../../src/storage/IndexedDbTabularStorage.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import type { AnyVectorStorage, ClientProvidedKeysOption, IVectorStorage, VectorSearchOptions } from "@workglow/storage";
6
+ import type { AnyVectorStorage, AutoGeneratedKeys, ClientProvidedKeysOption, InsertEntity, IVectorStorage, VectorSearchOptions } from "@workglow/storage";
7
7
  import type { DataPortSchemaObject, FromSchema, TypedArray, TypedArrayConstructor, TypedArraySchemaOptions } from "@workglow/util/schema";
8
8
  import type { MigrationOptions } from "./IndexedDbTable";
9
9
  import { IndexedDbTabularStorage } from "./IndexedDbTabularStorage";
@@ -21,12 +21,30 @@ export declare const IDB_VECTOR_REPOSITORY: import("@workglow/util").ServiceToke
21
21
  * @template VectorCtor - Constructor for stored vectors (default {@link typeof Float32Array})
22
22
  * @template Entity - The entity type
23
23
  */
24
- export declare class IndexedDbVectorStorage<Schema extends DataPortSchemaObject, PrimaryKeyNames extends ReadonlyArray<keyof Schema["properties"]>, Metadata extends Record<string, unknown> = Record<string, unknown>, Entity = FromSchema<Schema, TypedArraySchemaOptions>> extends IndexedDbTabularStorage<Schema, PrimaryKeyNames, Entity> implements IVectorStorage<Metadata, Schema, Entity, PrimaryKeyNames> {
24
+ export declare class IndexedDbVectorStorage<Schema extends DataPortSchemaObject, PrimaryKeyNames extends ReadonlyArray<keyof Schema["properties"]>, Metadata extends Record<string, unknown> = Record<string, unknown>, Entity = FromSchema<Schema, TypedArraySchemaOptions>, InsertType extends InsertEntity<Entity, AutoGeneratedKeys<Schema>> = InsertEntity<Entity, AutoGeneratedKeys<Schema>>> extends IndexedDbTabularStorage<Schema, PrimaryKeyNames, Entity> implements IVectorStorage<Metadata, Schema, Entity, PrimaryKeyNames> {
25
25
  private vectorDimensions;
26
26
  private vectorPropertyName;
27
27
  private metadataPropertyName;
28
28
  constructor(table: string | undefined, schema: Schema, primaryKeyNames: PrimaryKeyNames, indexes: readonly (keyof NoInfer<Entity> | readonly (keyof NoInfer<Entity>)[])[] | undefined, dimensions: number, _vectorCtor?: TypedArrayConstructor, migrationOptions?: MigrationOptions, clientProvidedKeys?: ClientProvidedKeysOption);
29
29
  getVectorDimensions(): number;
30
+ /**
31
+ * Validate vector shape SYNCHRONOUSLY before any IDB transaction opens.
32
+ * The throw propagates through the awaited Promise; no IDB request is ever
33
+ * created, so a malformed put cannot leak a corrupt row into the object store.
34
+ */
35
+ put(record: InsertType): Promise<Entity>;
36
+ /**
37
+ * Validate every entry up front so a single malformed vector aborts the
38
+ * whole batch before any row is written, then route through a single IDB
39
+ * `readwrite` transaction for atomicity. The inherited tabular `putBulk`
40
+ * opens one transaction per row via `Promise.all`, so a duplicate-key or
41
+ * quota error on the second or later record can leave earlier rows
42
+ * committed — breaking the all-or-nothing guarantee vector ingestion (RAG
43
+ * chunk upserts) depends on. The single-transaction path defers `put` event
44
+ * emission to `tx.oncomplete`, which means subscribers see a successful
45
+ * batch as a burst rather than interleaved with the per-record IDB requests.
46
+ */
47
+ putBulk(records: InsertType[]): Promise<Entity[]>;
30
48
  similaritySearch(query: TypedArray, options?: VectorSearchOptions<Record<string, unknown>>): Promise<(Entity & {
31
49
  score: number;
32
50
  })[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedDbVectorStorage.d.ts","sourceRoot":"","sources":["../../src/storage/IndexedDbVectorStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,eAAO,MAAM,qBAAqB,yDAEjC,CAAC;AAWF;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAsB,CACjC,MAAM,SAAS,oBAAoB,EACnC,eAAe,SAAS,aAAa,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,EACjE,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAEpD,SAAQ,uBAAuB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAC/D,YAAW,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC;IAEpE,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,kBAAkB,CAAe;IACzC,OAAO,CAAC,oBAAoB,CAA2B;IAEvD,YACE,KAAK,EAAE,MAAM,YAAY,EACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,SAAS,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAK,EACrF,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,qBAAoC,EACjD,gBAAgB,GAAE,gBAAqB,EACvC,kBAAkB,GAAE,wBAAuC,EAY5D;IAED,mBAAmB,IAAI,MAAM,CAE5B;IAEK,gBAAgB,CACpB,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;eAGnB,MAAM;UA+B9C;CACF"}
1
+ {"version":3,"file":"IndexedDbVectorStorage.d.ts","sourceRoot":"","sources":["../../src/storage/IndexedDbVectorStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,eAAO,MAAM,qBAAqB,yDAEjC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAsB,CACjC,MAAM,SAAS,oBAAoB,EACnC,eAAe,SAAS,aAAa,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,EACjE,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,uBAAuB,CAAC,EACpD,UAAU,SAAS,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAC/E,MAAM,EACN,iBAAiB,CAAC,MAAM,CAAC,CAC1B,CAED,SAAQ,uBAAuB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAC/D,YAAW,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC;IAEpE,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,kBAAkB,CAAe;IACzC,OAAO,CAAC,oBAAoB,CAA2B;IAEvD,YACE,KAAK,EAAE,MAAM,YAAY,EACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,SAAS,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAK,EACrF,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,qBAAoC,EACjD,gBAAgB,GAAE,gBAAqB,EACvC,kBAAkB,GAAE,wBAAuC,EAY5D;IAED,mBAAmB,IAAI,MAAM,CAE5B;IAED;;;;OAIG;IACY,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAOtD;IAED;;;;;;;;;;OAUG;IACY,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAO/D;IAEK,gBAAgB,CACpB,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;eAInB,MAAM;UA+B9C;CACF"}