@workglow/indexeddb 0.3.14 → 0.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/job-queue/IndexedDbRateLimiterStorage.d.ts +1 -3
- package/dist/job-queue/IndexedDbRateLimiterStorage.d.ts.map +1 -1
- package/dist/job-queue/browser.js +1 -20
- package/dist/job-queue/browser.js.map +3 -3
- package/dist/job-queue/node.js +1 -20
- package/dist/job-queue/node.js.map +3 -3
- package/dist/storage/IndexedDbTabularStorage.d.ts +34 -1
- package/dist/storage/IndexedDbTabularStorage.d.ts.map +1 -1
- package/dist/storage/IndexedDbVectorStorage.d.ts +20 -2
- package/dist/storage/IndexedDbVectorStorage.d.ts.map +1 -1
- package/dist/storage/browser.js +135 -42
- package/dist/storage/browser.js.map +4 -4
- package/dist/storage/node.js +135 -42
- package/dist/storage/node.js.map +4 -4
- package/package.json +9 -8
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { IRateLimiterStorage, PrefixColumn, RateLimiterStorageOptions, RateLimiterStorageScope } from "@workglow/job-queue";
|
|
7
7
|
export declare const INDEXED_DB_RATE_LIMITER_STORAGE: import("@workglow/util").ServiceToken<IRateLimiterStorage>;
|
|
8
|
-
export
|
|
9
|
-
}
|
|
8
|
+
export type IndexedDbRateLimiterStorageOptions = RateLimiterStorageOptions;
|
|
10
9
|
/**
|
|
11
10
|
* IndexedDB implementation of rate limiter storage.
|
|
12
11
|
* Manages execution records and next available times for rate limiting.
|
|
@@ -65,7 +64,6 @@ export declare class IndexedDbRateLimiterStorage implements IRateLimiterStorage
|
|
|
65
64
|
*/
|
|
66
65
|
tryReserveExecution(queueName: string, maxExecutions: number, windowMs: number): Promise<unknown | null>;
|
|
67
66
|
releaseExecution(queueName: string, token: unknown): Promise<void>;
|
|
68
|
-
recordExecution(queueName: string): Promise<void>;
|
|
69
67
|
getExecutionCount(queueName: string, windowStartTime: string): Promise<number>;
|
|
70
68
|
getOldestExecutionAtOffset(queueName: string, offset: number): Promise<string | undefined>;
|
|
71
69
|
getNextAvailableTime(queueName: string): Promise<string | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDbRateLimiterStorage.d.ts","sourceRoot":"","sources":["../../src/job-queue/IndexedDbRateLimiterStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAM7B,eAAO,MAAM,+BAA+B,4DAE3C,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"IndexedDbRateLimiterStorage.d.ts","sourceRoot":"","sources":["../../src/job-queue/IndexedDbRateLimiterStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAM7B,eAAO,MAAM,+BAA+B,4DAE3C,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,yBAAyB,CAAC;AAe3E;;;;;;;;GAQG;AACH,qBAAa,2BAA4B,YAAW,mBAAmB;IACrE;;;;OAIG;IACH,SAAgB,KAAK,EAAE,uBAAuB,CAAa;IAC3D,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IACrD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAE3E,YAAY,OAAO,GAAE,kCAAuC,EAY3D;IAED,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,kBAAkB;YAIZ,cAAc;YAMd,kBAAkB;IAMhC;;;;OAIG;IACI,aAAa,iDAMnB;IAED;;;;;;OAMG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBpC;IAED;;;;;;;;;;;;;OAaG;IACU,mBAAmB,CAC9B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAqEzB;IAEY,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9E;IAEY,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC1F;IAEY,0BAA0B,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiC7B;IAEY,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoBhF;IAEY,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B3F;IAEY,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCnD;CACF"}
|
|
@@ -1410,25 +1410,6 @@ class IndexedDbRateLimiterStorage {
|
|
|
1410
1410
|
tx.onerror = () => reject(tx.error);
|
|
1411
1411
|
});
|
|
1412
1412
|
}
|
|
1413
|
-
async recordExecution(queueName) {
|
|
1414
|
-
const db = await this.getExecutionDb();
|
|
1415
|
-
const tx = db.transaction(this.executionTableName, "readwrite");
|
|
1416
|
-
const store = tx.objectStore(this.executionTableName);
|
|
1417
|
-
const record = {
|
|
1418
|
-
id: crypto.randomUUID(),
|
|
1419
|
-
queue_name: queueName,
|
|
1420
|
-
executed_at: new Date().toISOString()
|
|
1421
|
-
};
|
|
1422
|
-
for (const [key, value] of Object.entries(this.prefixValues)) {
|
|
1423
|
-
record[key] = value;
|
|
1424
|
-
}
|
|
1425
|
-
return new Promise((resolve, reject) => {
|
|
1426
|
-
const request = store.add(record);
|
|
1427
|
-
tx.oncomplete = () => resolve();
|
|
1428
|
-
tx.onerror = () => reject(tx.error);
|
|
1429
|
-
request.onerror = () => reject(request.error);
|
|
1430
|
-
});
|
|
1431
|
-
}
|
|
1432
1413
|
async getExecutionCount(queueName, windowStartTime) {
|
|
1433
1414
|
const db = await this.getExecutionDb();
|
|
1434
1415
|
const tx = db.transaction(this.executionTableName, "readonly");
|
|
@@ -1576,4 +1557,4 @@ export {
|
|
|
1576
1557
|
INDEXED_DB_QUEUE_STORAGE
|
|
1577
1558
|
};
|
|
1578
1559
|
|
|
1579
|
-
//# debugId=
|
|
1560
|
+
//# debugId=F1BD9153372488C764756E2164756E21
|
|
@@ -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": "
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "F1BD9153372488C764756E2164756E21",
|
|
17
17
|
"names": []
|
|
18
18
|
}
|
package/dist/job-queue/node.js
CHANGED
|
@@ -1410,25 +1410,6 @@ class IndexedDbRateLimiterStorage {
|
|
|
1410
1410
|
tx.onerror = () => reject(tx.error);
|
|
1411
1411
|
});
|
|
1412
1412
|
}
|
|
1413
|
-
async recordExecution(queueName) {
|
|
1414
|
-
const db = await this.getExecutionDb();
|
|
1415
|
-
const tx = db.transaction(this.executionTableName, "readwrite");
|
|
1416
|
-
const store = tx.objectStore(this.executionTableName);
|
|
1417
|
-
const record = {
|
|
1418
|
-
id: crypto.randomUUID(),
|
|
1419
|
-
queue_name: queueName,
|
|
1420
|
-
executed_at: new Date().toISOString()
|
|
1421
|
-
};
|
|
1422
|
-
for (const [key, value] of Object.entries(this.prefixValues)) {
|
|
1423
|
-
record[key] = value;
|
|
1424
|
-
}
|
|
1425
|
-
return new Promise((resolve, reject) => {
|
|
1426
|
-
const request = store.add(record);
|
|
1427
|
-
tx.oncomplete = () => resolve();
|
|
1428
|
-
tx.onerror = () => reject(tx.error);
|
|
1429
|
-
request.onerror = () => reject(request.error);
|
|
1430
|
-
});
|
|
1431
|
-
}
|
|
1432
1413
|
async getExecutionCount(queueName, windowStartTime) {
|
|
1433
1414
|
const db = await this.getExecutionDb();
|
|
1434
1415
|
const tx = db.transaction(this.executionTableName, "readonly");
|
|
@@ -1576,4 +1557,4 @@ export {
|
|
|
1576
1557
|
INDEXED_DB_QUEUE_STORAGE
|
|
1577
1558
|
};
|
|
1578
1559
|
|
|
1579
|
-
//# debugId=
|
|
1560
|
+
//# debugId=4F7139DFE903533364756E2164756E21
|