@trigger.dev/core 4.3.2 → 4.3.3
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/commonjs/v3/apiClient/index.js +32 -8
- package/dist/commonjs/v3/apiClient/index.js.map +1 -1
- package/dist/commonjs/v3/apiClient/streamBatchItems.test.js +39 -0
- package/dist/commonjs/v3/apiClient/streamBatchItems.test.js.map +1 -1
- package/dist/commonjs/v3/idempotency-key-catalog/catalog.d.ts +9 -0
- package/dist/commonjs/v3/idempotency-key-catalog/catalog.js +3 -0
- package/dist/commonjs/v3/idempotency-key-catalog/catalog.js.map +1 -0
- package/dist/commonjs/v3/idempotency-key-catalog/index.d.ts +9 -0
- package/dist/commonjs/v3/idempotency-key-catalog/index.js +33 -0
- package/dist/commonjs/v3/idempotency-key-catalog/index.js.map +1 -0
- package/dist/commonjs/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.d.ts +8 -0
- package/dist/commonjs/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.js +35 -0
- package/dist/commonjs/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.js.map +1 -0
- package/dist/commonjs/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.test.d.ts +1 -0
- package/dist/commonjs/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.test.js +161 -0
- package/dist/commonjs/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.test.js.map +1 -0
- package/dist/commonjs/v3/idempotency-key-catalog-api.d.ts +3 -0
- package/dist/commonjs/v3/idempotency-key-catalog-api.js +9 -0
- package/dist/commonjs/v3/idempotency-key-catalog-api.js.map +1 -0
- package/dist/commonjs/v3/idempotencyKeys.d.ts +51 -4
- package/dist/commonjs/v3/idempotencyKeys.js +97 -5
- package/dist/commonjs/v3/idempotencyKeys.js.map +1 -1
- package/dist/commonjs/v3/imports/superjson-cjs.cjs.map +1 -0
- package/dist/commonjs/v3/imports/superjson.d.ts +1 -0
- package/dist/commonjs/v3/imports/superjson.js +13 -0
- package/dist/commonjs/v3/runEngineWorker/supervisor/http.d.ts +61 -60
- package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.d.ts +191 -184
- package/dist/commonjs/v3/runEngineWorker/workload/http.d.ts +46 -45
- package/dist/commonjs/v3/runEngineWorker/workload/schemas.d.ts +163 -156
- package/dist/commonjs/v3/schemas/api.d.ts +246 -56
- package/dist/commonjs/v3/schemas/api.js +14 -3
- package/dist/commonjs/v3/schemas/api.js.map +1 -1
- package/dist/commonjs/v3/schemas/checkpoints.d.ts +66 -66
- package/dist/commonjs/v3/schemas/common.d.ts +215 -177
- package/dist/commonjs/v3/schemas/common.js +6 -0
- package/dist/commonjs/v3/schemas/common.js.map +1 -1
- package/dist/commonjs/v3/schemas/messages.d.ts +2149 -2032
- package/dist/commonjs/v3/schemas/runEngine.d.ts +157 -150
- package/dist/commonjs/v3/schemas/schemas.d.ts +281 -262
- package/dist/commonjs/v3/schemas/webhooks.d.ts +68 -68
- package/dist/commonjs/v3/serverOnly/idempotencyKeys.d.ts +36 -0
- package/dist/commonjs/v3/serverOnly/idempotencyKeys.js +58 -0
- package/dist/commonjs/v3/serverOnly/idempotencyKeys.js.map +1 -0
- package/dist/commonjs/v3/serverOnly/index.d.ts +1 -0
- package/dist/commonjs/v3/serverOnly/index.js +1 -0
- package/dist/commonjs/v3/serverOnly/index.js.map +1 -1
- package/dist/commonjs/v3/types/tools.js +2 -2
- package/dist/commonjs/v3/types/tools.js.map +1 -1
- package/dist/commonjs/v3/utils/flattenAttributes.d.ts +2 -2
- package/dist/commonjs/v3/utils/flattenAttributes.js +24 -13
- package/dist/commonjs/v3/utils/flattenAttributes.js.map +1 -1
- package/dist/commonjs/v3/utils/globals.d.ts +2 -0
- package/dist/commonjs/v3/utils/globals.js.map +1 -1
- package/dist/commonjs/v3/utils/ioSerialization.js +15 -27
- package/dist/commonjs/v3/utils/ioSerialization.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/apiClient/index.js +32 -8
- package/dist/esm/v3/apiClient/index.js.map +1 -1
- package/dist/esm/v3/apiClient/streamBatchItems.test.js +39 -0
- package/dist/esm/v3/apiClient/streamBatchItems.test.js.map +1 -1
- package/dist/esm/v3/idempotency-key-catalog/catalog.d.ts +9 -0
- package/dist/esm/v3/idempotency-key-catalog/catalog.js +2 -0
- package/dist/esm/v3/idempotency-key-catalog/catalog.js.map +1 -0
- package/dist/esm/v3/idempotency-key-catalog/index.d.ts +9 -0
- package/dist/esm/v3/idempotency-key-catalog/index.js +29 -0
- package/dist/esm/v3/idempotency-key-catalog/index.js.map +1 -0
- package/dist/esm/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.d.ts +8 -0
- package/dist/esm/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.js +31 -0
- package/dist/esm/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.js.map +1 -0
- package/dist/esm/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.test.d.ts +1 -0
- package/dist/esm/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.test.js +159 -0
- package/dist/esm/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.test.js.map +1 -0
- package/dist/esm/v3/idempotency-key-catalog-api.d.ts +3 -0
- package/dist/esm/v3/idempotency-key-catalog-api.js +6 -0
- package/dist/esm/v3/idempotency-key-catalog-api.js.map +1 -0
- package/dist/esm/v3/idempotencyKeys.d.ts +51 -4
- package/dist/esm/v3/idempotencyKeys.js +96 -5
- package/dist/esm/v3/idempotencyKeys.js.map +1 -1
- package/dist/esm/v3/imports/superjson.d.ts +2 -0
- package/dist/esm/v3/imports/superjson.js +10 -0
- package/dist/esm/v3/imports/superjson.js.map +1 -0
- package/dist/esm/v3/runEngineWorker/supervisor/http.d.ts +61 -60
- package/dist/esm/v3/runEngineWorker/supervisor/schemas.d.ts +191 -184
- package/dist/esm/v3/runEngineWorker/workload/http.d.ts +46 -45
- package/dist/esm/v3/runEngineWorker/workload/schemas.d.ts +163 -156
- package/dist/esm/v3/schemas/api.d.ts +246 -56
- package/dist/esm/v3/schemas/api.js +11 -0
- package/dist/esm/v3/schemas/api.js.map +1 -1
- package/dist/esm/v3/schemas/checkpoints.d.ts +66 -66
- package/dist/esm/v3/schemas/common.d.ts +215 -177
- package/dist/esm/v3/schemas/common.js +6 -0
- package/dist/esm/v3/schemas/common.js.map +1 -1
- package/dist/esm/v3/schemas/messages.d.ts +2149 -2032
- package/dist/esm/v3/schemas/runEngine.d.ts +157 -150
- package/dist/esm/v3/schemas/schemas.d.ts +281 -262
- package/dist/esm/v3/schemas/webhooks.d.ts +68 -68
- package/dist/esm/v3/serverOnly/idempotencyKeys.d.ts +36 -0
- package/dist/esm/v3/serverOnly/idempotencyKeys.js +51 -0
- package/dist/esm/v3/serverOnly/idempotencyKeys.js.map +1 -0
- package/dist/esm/v3/serverOnly/index.d.ts +1 -0
- package/dist/esm/v3/serverOnly/index.js +1 -0
- package/dist/esm/v3/serverOnly/index.js.map +1 -1
- package/dist/esm/v3/types/tools.js +2 -2
- package/dist/esm/v3/types/tools.js.map +1 -1
- package/dist/esm/v3/utils/flattenAttributes.d.ts +2 -2
- package/dist/esm/v3/utils/flattenAttributes.js +24 -13
- package/dist/esm/v3/utils/flattenAttributes.js.map +1 -1
- package/dist/esm/v3/utils/globals.d.ts +2 -0
- package/dist/esm/v3/utils/globals.js.map +1 -1
- package/dist/esm/v3/utils/ioSerialization.js +9 -24
- package/dist/esm/v3/utils/ioSerialization.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const API_NAME = "idempotency-key-catalog";
|
|
2
|
+
import { getGlobal, registerGlobal } from "../utils/globals.js";
|
|
3
|
+
import { LRUIdempotencyKeyCatalog } from "./lruIdempotencyKeyCatalog.js";
|
|
4
|
+
export class IdempotencyKeyCatalogAPI {
|
|
5
|
+
static _instance;
|
|
6
|
+
constructor() { }
|
|
7
|
+
static getInstance() {
|
|
8
|
+
if (!this._instance) {
|
|
9
|
+
this._instance = new IdempotencyKeyCatalogAPI();
|
|
10
|
+
}
|
|
11
|
+
return this._instance;
|
|
12
|
+
}
|
|
13
|
+
registerKeyOptions(hash, options) {
|
|
14
|
+
this.#getCatalog().registerKeyOptions(hash, options);
|
|
15
|
+
}
|
|
16
|
+
getKeyOptions(hash) {
|
|
17
|
+
return this.#getCatalog().getKeyOptions(hash);
|
|
18
|
+
}
|
|
19
|
+
#getCatalog() {
|
|
20
|
+
let catalog = getGlobal(API_NAME);
|
|
21
|
+
if (!catalog) {
|
|
22
|
+
// Auto-initialize with LRU catalog on first access
|
|
23
|
+
catalog = new LRUIdempotencyKeyCatalog();
|
|
24
|
+
registerGlobal(API_NAME, catalog, true);
|
|
25
|
+
}
|
|
26
|
+
return catalog;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/v3/idempotency-key-catalog/index.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,OAAO,wBAAwB;IAC3B,MAAM,CAAC,SAAS,CAA4B;IAEpD,gBAAuB,CAAC;IAEjB,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,kBAAkB,CAAC,IAAY,EAAE,OAA8B;QACpE,IAAI,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAEM,aAAa,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,WAAW;QACT,IAAI,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,mDAAmD;YACnD,OAAO,GAAG,IAAI,wBAAwB,EAAE,CAAC;YACzC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IdempotencyKeyCatalog, IdempotencyKeyOptions } from "./catalog.js";
|
|
2
|
+
export declare class LRUIdempotencyKeyCatalog implements IdempotencyKeyCatalog {
|
|
3
|
+
private cache;
|
|
4
|
+
private readonly maxSize;
|
|
5
|
+
constructor(maxSize?: number);
|
|
6
|
+
registerKeyOptions(hash: string, options: IdempotencyKeyOptions): void;
|
|
7
|
+
getKeyOptions(hash: string): IdempotencyKeyOptions | undefined;
|
|
8
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export class LRUIdempotencyKeyCatalog {
|
|
2
|
+
cache;
|
|
3
|
+
maxSize;
|
|
4
|
+
constructor(maxSize = 1_000) {
|
|
5
|
+
this.cache = new Map();
|
|
6
|
+
// Clamp to non-negative to prevent infinite loop in eviction
|
|
7
|
+
this.maxSize = Math.max(0, maxSize);
|
|
8
|
+
}
|
|
9
|
+
registerKeyOptions(hash, options) {
|
|
10
|
+
// Delete and re-add to update position (most recently used)
|
|
11
|
+
this.cache.delete(hash);
|
|
12
|
+
this.cache.set(hash, options);
|
|
13
|
+
// Evict oldest entries if over capacity
|
|
14
|
+
while (this.cache.size > this.maxSize) {
|
|
15
|
+
const oldest = this.cache.keys().next().value;
|
|
16
|
+
if (oldest !== undefined) {
|
|
17
|
+
this.cache.delete(oldest);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
getKeyOptions(hash) {
|
|
22
|
+
const options = this.cache.get(hash);
|
|
23
|
+
if (options) {
|
|
24
|
+
// Move to end (most recently used)
|
|
25
|
+
this.cache.delete(hash);
|
|
26
|
+
this.cache.set(hash, options);
|
|
27
|
+
}
|
|
28
|
+
return options;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=lruIdempotencyKeyCatalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lruIdempotencyKeyCatalog.js","sourceRoot":"","sources":["../../../../src/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,wBAAwB;IAC3B,KAAK,CAAqC;IACjC,OAAO,CAAS;IAEjC,YAAY,UAAkB,KAAK;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,6DAA6D;QAC7D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,kBAAkB,CAAC,IAAY,EAAE,OAA8B;QAC7D,4DAA4D;QAC5D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE9B,wCAAwC;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC9C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa,CAAC,IAAY;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,mCAAmC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { LRUIdempotencyKeyCatalog } from "./lruIdempotencyKeyCatalog.js";
|
|
3
|
+
describe("LRUIdempotencyKeyCatalog", () => {
|
|
4
|
+
describe("registerKeyOptions and getKeyOptions", () => {
|
|
5
|
+
it("should store and retrieve options", () => {
|
|
6
|
+
const catalog = new LRUIdempotencyKeyCatalog();
|
|
7
|
+
const options = { key: "my-key", scope: "global" };
|
|
8
|
+
catalog.registerKeyOptions("hash1", options);
|
|
9
|
+
expect(catalog.getKeyOptions("hash1")).toEqual(options);
|
|
10
|
+
});
|
|
11
|
+
it("should return undefined for non-existent keys", () => {
|
|
12
|
+
const catalog = new LRUIdempotencyKeyCatalog();
|
|
13
|
+
expect(catalog.getKeyOptions("non-existent")).toBeUndefined();
|
|
14
|
+
});
|
|
15
|
+
it("should store multiple keys", () => {
|
|
16
|
+
const catalog = new LRUIdempotencyKeyCatalog();
|
|
17
|
+
const options1 = { key: "key1", scope: "global" };
|
|
18
|
+
const options2 = { key: "key2", scope: "run" };
|
|
19
|
+
const options3 = { key: "key3", scope: "attempt" };
|
|
20
|
+
catalog.registerKeyOptions("hash1", options1);
|
|
21
|
+
catalog.registerKeyOptions("hash2", options2);
|
|
22
|
+
catalog.registerKeyOptions("hash3", options3);
|
|
23
|
+
expect(catalog.getKeyOptions("hash1")).toEqual(options1);
|
|
24
|
+
expect(catalog.getKeyOptions("hash2")).toEqual(options2);
|
|
25
|
+
expect(catalog.getKeyOptions("hash3")).toEqual(options3);
|
|
26
|
+
});
|
|
27
|
+
it("should update options when registering same key twice", () => {
|
|
28
|
+
const catalog = new LRUIdempotencyKeyCatalog();
|
|
29
|
+
const options1 = { key: "key1", scope: "global" };
|
|
30
|
+
const options2 = { key: "key1-updated", scope: "run" };
|
|
31
|
+
catalog.registerKeyOptions("hash1", options1);
|
|
32
|
+
catalog.registerKeyOptions("hash1", options2);
|
|
33
|
+
expect(catalog.getKeyOptions("hash1")).toEqual(options2);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe("LRU eviction", () => {
|
|
37
|
+
it("should evict oldest entry when over capacity", () => {
|
|
38
|
+
const catalog = new LRUIdempotencyKeyCatalog(3);
|
|
39
|
+
catalog.registerKeyOptions("hash1", { key: "key1", scope: "global" });
|
|
40
|
+
catalog.registerKeyOptions("hash2", { key: "key2", scope: "global" });
|
|
41
|
+
catalog.registerKeyOptions("hash3", { key: "key3", scope: "global" });
|
|
42
|
+
// All three should exist
|
|
43
|
+
expect(catalog.getKeyOptions("hash1")).toBeDefined();
|
|
44
|
+
expect(catalog.getKeyOptions("hash2")).toBeDefined();
|
|
45
|
+
expect(catalog.getKeyOptions("hash3")).toBeDefined();
|
|
46
|
+
// After the gets above, the LRU order from oldest to newest is: hash1, hash2, hash3
|
|
47
|
+
// (each get moves the key to the most recent position)
|
|
48
|
+
// Add a fourth - hash1 should be evicted (it was accessed first, so it's the oldest)
|
|
49
|
+
catalog.registerKeyOptions("hash4", { key: "key4", scope: "global" });
|
|
50
|
+
expect(catalog.getKeyOptions("hash1")).toBeUndefined();
|
|
51
|
+
expect(catalog.getKeyOptions("hash2")).toBeDefined();
|
|
52
|
+
expect(catalog.getKeyOptions("hash3")).toBeDefined();
|
|
53
|
+
expect(catalog.getKeyOptions("hash4")).toBeDefined();
|
|
54
|
+
});
|
|
55
|
+
it("should evict least recently registered entry when capacity exceeded", () => {
|
|
56
|
+
const catalog = new LRUIdempotencyKeyCatalog(3);
|
|
57
|
+
catalog.registerKeyOptions("hash1", { key: "key1", scope: "global" });
|
|
58
|
+
catalog.registerKeyOptions("hash2", { key: "key2", scope: "global" });
|
|
59
|
+
catalog.registerKeyOptions("hash3", { key: "key3", scope: "global" });
|
|
60
|
+
// Adding fourth should evict hash1 (oldest)
|
|
61
|
+
catalog.registerKeyOptions("hash4", { key: "key4", scope: "global" });
|
|
62
|
+
expect(catalog.getKeyOptions("hash1")).toBeUndefined();
|
|
63
|
+
expect(catalog.getKeyOptions("hash2")).toBeDefined();
|
|
64
|
+
expect(catalog.getKeyOptions("hash3")).toBeDefined();
|
|
65
|
+
expect(catalog.getKeyOptions("hash4")).toBeDefined();
|
|
66
|
+
});
|
|
67
|
+
it("should evict multiple entries when adding many at once would exceed capacity", () => {
|
|
68
|
+
const catalog = new LRUIdempotencyKeyCatalog(2);
|
|
69
|
+
catalog.registerKeyOptions("hash1", { key: "key1", scope: "global" });
|
|
70
|
+
catalog.registerKeyOptions("hash2", { key: "key2", scope: "global" });
|
|
71
|
+
catalog.registerKeyOptions("hash3", { key: "key3", scope: "global" });
|
|
72
|
+
catalog.registerKeyOptions("hash4", { key: "key4", scope: "global" });
|
|
73
|
+
// Only hash3 and hash4 should remain
|
|
74
|
+
expect(catalog.getKeyOptions("hash1")).toBeUndefined();
|
|
75
|
+
expect(catalog.getKeyOptions("hash2")).toBeUndefined();
|
|
76
|
+
expect(catalog.getKeyOptions("hash3")).toBeDefined();
|
|
77
|
+
expect(catalog.getKeyOptions("hash4")).toBeDefined();
|
|
78
|
+
});
|
|
79
|
+
it("should work with maxSize of 1", () => {
|
|
80
|
+
const catalog = new LRUIdempotencyKeyCatalog(1);
|
|
81
|
+
catalog.registerKeyOptions("hash1", { key: "key1", scope: "global" });
|
|
82
|
+
expect(catalog.getKeyOptions("hash1")).toBeDefined();
|
|
83
|
+
catalog.registerKeyOptions("hash2", { key: "key2", scope: "global" });
|
|
84
|
+
expect(catalog.getKeyOptions("hash1")).toBeUndefined();
|
|
85
|
+
expect(catalog.getKeyOptions("hash2")).toBeDefined();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe("LRU ordering", () => {
|
|
89
|
+
it("should move accessed key to most recent position", () => {
|
|
90
|
+
const catalog = new LRUIdempotencyKeyCatalog(3);
|
|
91
|
+
catalog.registerKeyOptions("hash1", { key: "key1", scope: "global" });
|
|
92
|
+
catalog.registerKeyOptions("hash2", { key: "key2", scope: "global" });
|
|
93
|
+
catalog.registerKeyOptions("hash3", { key: "key3", scope: "global" });
|
|
94
|
+
// Access hash1, moving it to most recent
|
|
95
|
+
catalog.getKeyOptions("hash1");
|
|
96
|
+
// Add hash4 - should evict hash2 (now the oldest)
|
|
97
|
+
catalog.registerKeyOptions("hash4", { key: "key4", scope: "global" });
|
|
98
|
+
expect(catalog.getKeyOptions("hash1")).toBeDefined();
|
|
99
|
+
expect(catalog.getKeyOptions("hash2")).toBeUndefined();
|
|
100
|
+
expect(catalog.getKeyOptions("hash3")).toBeDefined();
|
|
101
|
+
expect(catalog.getKeyOptions("hash4")).toBeDefined();
|
|
102
|
+
});
|
|
103
|
+
it("should move re-registered key to most recent position", () => {
|
|
104
|
+
const catalog = new LRUIdempotencyKeyCatalog(3);
|
|
105
|
+
catalog.registerKeyOptions("hash1", { key: "key1", scope: "global" });
|
|
106
|
+
catalog.registerKeyOptions("hash2", { key: "key2", scope: "global" });
|
|
107
|
+
catalog.registerKeyOptions("hash3", { key: "key3", scope: "global" });
|
|
108
|
+
// Re-register hash1, moving it to most recent
|
|
109
|
+
catalog.registerKeyOptions("hash1", { key: "key1-updated", scope: "run" });
|
|
110
|
+
// Add hash4 - should evict hash2 (now the oldest)
|
|
111
|
+
catalog.registerKeyOptions("hash4", { key: "key4", scope: "global" });
|
|
112
|
+
expect(catalog.getKeyOptions("hash1")).toEqual({ key: "key1-updated", scope: "run" });
|
|
113
|
+
expect(catalog.getKeyOptions("hash2")).toBeUndefined();
|
|
114
|
+
expect(catalog.getKeyOptions("hash3")).toBeDefined();
|
|
115
|
+
expect(catalog.getKeyOptions("hash4")).toBeDefined();
|
|
116
|
+
});
|
|
117
|
+
it("should not affect order when getting non-existent key", () => {
|
|
118
|
+
const catalog = new LRUIdempotencyKeyCatalog(2);
|
|
119
|
+
catalog.registerKeyOptions("hash1", { key: "key1", scope: "global" });
|
|
120
|
+
catalog.registerKeyOptions("hash2", { key: "key2", scope: "global" });
|
|
121
|
+
// Try to get non-existent key
|
|
122
|
+
catalog.getKeyOptions("non-existent");
|
|
123
|
+
// Add hash3 - should still evict hash1 (oldest)
|
|
124
|
+
catalog.registerKeyOptions("hash3", { key: "key3", scope: "global" });
|
|
125
|
+
expect(catalog.getKeyOptions("hash1")).toBeUndefined();
|
|
126
|
+
expect(catalog.getKeyOptions("hash2")).toBeDefined();
|
|
127
|
+
expect(catalog.getKeyOptions("hash3")).toBeDefined();
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe("default maxSize", () => {
|
|
131
|
+
it("should use default maxSize of 1000", () => {
|
|
132
|
+
const catalog = new LRUIdempotencyKeyCatalog();
|
|
133
|
+
// Register 1001 entries
|
|
134
|
+
for (let i = 0; i < 1001; i++) {
|
|
135
|
+
catalog.registerKeyOptions(`hash${i}`, { key: `key${i}`, scope: "global" });
|
|
136
|
+
}
|
|
137
|
+
// First entry should be evicted
|
|
138
|
+
expect(catalog.getKeyOptions("hash0")).toBeUndefined();
|
|
139
|
+
// Last entry should exist
|
|
140
|
+
expect(catalog.getKeyOptions("hash1000")).toBeDefined();
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe("edge cases", () => {
|
|
144
|
+
it("should handle negative maxSize by clamping to 0", () => {
|
|
145
|
+
const catalog = new LRUIdempotencyKeyCatalog(-5);
|
|
146
|
+
// With maxSize clamped to 0, nothing should be stored
|
|
147
|
+
catalog.registerKeyOptions("hash1", { key: "key1", scope: "global" });
|
|
148
|
+
// Should be immediately evicted since maxSize is 0
|
|
149
|
+
expect(catalog.getKeyOptions("hash1")).toBeUndefined();
|
|
150
|
+
});
|
|
151
|
+
it("should handle maxSize of 0", () => {
|
|
152
|
+
const catalog = new LRUIdempotencyKeyCatalog(0);
|
|
153
|
+
catalog.registerKeyOptions("hash1", { key: "key1", scope: "global" });
|
|
154
|
+
// Should be immediately evicted since maxSize is 0
|
|
155
|
+
expect(catalog.getKeyOptions("hash1")).toBeUndefined();
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=lruIdempotencyKeyCatalog.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lruIdempotencyKeyCatalog.test.js","sourceRoot":"","sources":["../../../../src/v3/idempotency-key-catalog/lruIdempotencyKeyCatalog.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Split module-level variable definition into separate files to allow
|
|
2
|
+
// tree-shaking on each api instance.
|
|
3
|
+
import { IdempotencyKeyCatalogAPI } from "./idempotency-key-catalog/index.js";
|
|
4
|
+
/** Entrypoint for idempotency key catalog API */
|
|
5
|
+
export const idempotencyKeyCatalog = IdempotencyKeyCatalogAPI.getInstance();
|
|
6
|
+
//# sourceMappingURL=idempotency-key-catalog-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency-key-catalog-api.js","sourceRoot":"","sources":["../../../src/v3/idempotency-key-catalog-api.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,qCAAqC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,iDAAiD;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,WAAW,EAAE,CAAC"}
|
|
@@ -1,5 +1,21 @@
|
|
|
1
|
+
import type { IdempotencyKeyOptions, IdempotencyKeyScope } from "./idempotency-key-catalog/catalog.js";
|
|
1
2
|
import { IdempotencyKey } from "./types/idempotencyKeys.js";
|
|
2
3
|
import type { ZodFetchOptions } from "./apiClient/core.js";
|
|
4
|
+
export type { IdempotencyKeyScope, IdempotencyKeyOptions } from "./idempotency-key-catalog/catalog.js";
|
|
5
|
+
/**
|
|
6
|
+
* Extracts the user-provided key and scope from an idempotency key created with `idempotencyKeys.create()`.
|
|
7
|
+
*
|
|
8
|
+
* @param idempotencyKey The idempotency key to extract options from
|
|
9
|
+
* @returns The original key and scope, or undefined if the key doesn't have attached options
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const key = await idempotencyKeys.create("my-key", { scope: "global" });
|
|
14
|
+
* const options = getIdempotencyKeyOptions(key);
|
|
15
|
+
* // options = { key: "my-key", scope: "global" }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function getIdempotencyKeyOptions(idempotencyKey: IdempotencyKey | string): IdempotencyKeyOptions | undefined;
|
|
3
19
|
export declare function isIdempotencyKey(value: string | string[] | IdempotencyKey): value is IdempotencyKey;
|
|
4
20
|
export declare function flattenIdempotencyKey(idempotencyKey?: IdempotencyKey | string | string[] | (undefined | IdempotencyKey | string | string[])[]): IdempotencyKey | string | string[] | undefined;
|
|
5
21
|
export declare function makeIdempotencyKey(idempotencyKey?: IdempotencyKey | string | string[]): Promise<IdempotencyKey | undefined>;
|
|
@@ -39,7 +55,7 @@ export declare function makeIdempotencyKey(idempotencyKey?: IdempotencyKey | str
|
|
|
39
55
|
* ```
|
|
40
56
|
*/
|
|
41
57
|
export declare function createIdempotencyKey(key: string | string[], options?: {
|
|
42
|
-
scope?:
|
|
58
|
+
scope?: IdempotencyKeyScope;
|
|
43
59
|
}): Promise<IdempotencyKey>;
|
|
44
60
|
type AttemptKeyMaterial = {
|
|
45
61
|
run: {
|
|
@@ -51,8 +67,39 @@ type AttemptKeyMaterial = {
|
|
|
51
67
|
};
|
|
52
68
|
/** Creates a unique key for each attempt. */
|
|
53
69
|
export declare function attemptKey(ctx: AttemptKeyMaterial): string;
|
|
54
|
-
|
|
55
|
-
|
|
70
|
+
export type ResetIdempotencyKeyOptions = {
|
|
71
|
+
scope?: IdempotencyKeyScope;
|
|
72
|
+
/** Required if scope is "run" or "attempt" to reconstruct the hash */
|
|
73
|
+
parentRunId?: string;
|
|
74
|
+
/** Required if scope is "attempt" to reconstruct the hash */
|
|
75
|
+
attemptNumber?: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Resets an idempotency key, effectively deleting it from the associated task.
|
|
79
|
+
*
|
|
80
|
+
* @param taskIdentifier The task identifier (e.g., "my-task")
|
|
81
|
+
* @param idempotencyKey The idempotency key to reset. Can be:
|
|
82
|
+
* - An `IdempotencyKey` created with `idempotencyKeys.create()` (options are extracted automatically)
|
|
83
|
+
* - A string or string array (requires `options.scope` and potentially `options.parentRunId`)
|
|
84
|
+
* @param options Options for reconstructing the hash if needed
|
|
85
|
+
* @param requestOptions Optional fetch options
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* // Using a key created with idempotencyKeys.create() - options are extracted automatically
|
|
90
|
+
* const key = await idempotencyKeys.create("my-key", { scope: "global" });
|
|
91
|
+
* await idempotencyKeys.reset("my-task", key);
|
|
92
|
+
*
|
|
93
|
+
* // Using a raw string with global scope
|
|
94
|
+
* await idempotencyKeys.reset("my-task", "my-key", { scope: "global" });
|
|
95
|
+
*
|
|
96
|
+
* // Using a raw string with run scope (requires parentRunId)
|
|
97
|
+
* await idempotencyKeys.reset("my-task", "my-key", {
|
|
98
|
+
* scope: "run",
|
|
99
|
+
* parentRunId: "run_abc123"
|
|
100
|
+
* });
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export declare function resetIdempotencyKey(taskIdentifier: string, idempotencyKey: IdempotencyKey | string | string[], options?: ResetIdempotencyKeyOptions, requestOptions?: ZodFetchOptions): Promise<{
|
|
56
104
|
id: string;
|
|
57
105
|
}>;
|
|
58
|
-
export {};
|
|
@@ -1,9 +1,34 @@
|
|
|
1
1
|
import { apiClientManager } from "./apiClientManager-api.js";
|
|
2
|
+
import { idempotencyKeyCatalog } from "./idempotency-key-catalog-api.js";
|
|
2
3
|
import { taskContext } from "./task-context-api.js";
|
|
3
4
|
import { digestSHA256 } from "./utils/crypto.js";
|
|
5
|
+
/**
|
|
6
|
+
* Extracts the user-provided key and scope from an idempotency key created with `idempotencyKeys.create()`.
|
|
7
|
+
*
|
|
8
|
+
* @param idempotencyKey The idempotency key to extract options from
|
|
9
|
+
* @returns The original key and scope, or undefined if the key doesn't have attached options
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const key = await idempotencyKeys.create("my-key", { scope: "global" });
|
|
14
|
+
* const options = getIdempotencyKeyOptions(key);
|
|
15
|
+
* // options = { key: "my-key", scope: "global" }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function getIdempotencyKeyOptions(idempotencyKey) {
|
|
19
|
+
// Look up options from the catalog using the hash string
|
|
20
|
+
if (typeof idempotencyKey === "string") {
|
|
21
|
+
return idempotencyKeyCatalog.getKeyOptions(idempotencyKey);
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
4
25
|
export function isIdempotencyKey(value) {
|
|
5
26
|
// Cannot check the brand at runtime because it doesn't exist (it's a TypeScript-only construct)
|
|
6
|
-
|
|
27
|
+
// Check for primitive strings only (we no longer use String objects)
|
|
28
|
+
if (typeof value === "string") {
|
|
29
|
+
return value.length === 64;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
7
32
|
}
|
|
8
33
|
export function flattenIdempotencyKey(idempotencyKey) {
|
|
9
34
|
if (!idempotencyKey) {
|
|
@@ -70,7 +95,13 @@ export async function makeIdempotencyKey(idempotencyKey) {
|
|
|
70
95
|
* ```
|
|
71
96
|
*/
|
|
72
97
|
export async function createIdempotencyKey(key, options) {
|
|
73
|
-
const
|
|
98
|
+
const scope = options?.scope ?? "run";
|
|
99
|
+
const keyArray = Array.isArray(key) ? key : [key];
|
|
100
|
+
const userKey = keyArray.join("-");
|
|
101
|
+
const idempotencyKey = await generateIdempotencyKey(keyArray.concat(injectScope(scope)));
|
|
102
|
+
// Register the original key and scope in the catalog for later extraction
|
|
103
|
+
idempotencyKeyCatalog.registerKeyOptions(idempotencyKey, { key: userKey, scope });
|
|
104
|
+
// Return primitive string cast as IdempotencyKey
|
|
74
105
|
return idempotencyKey;
|
|
75
106
|
}
|
|
76
107
|
function injectScope(scope) {
|
|
@@ -97,9 +128,69 @@ async function generateIdempotencyKey(keyMaterial) {
|
|
|
97
128
|
export function attemptKey(ctx) {
|
|
98
129
|
return `${ctx.run.id}-${ctx.attempt.number}`;
|
|
99
130
|
}
|
|
100
|
-
/**
|
|
101
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Resets an idempotency key, effectively deleting it from the associated task.
|
|
133
|
+
*
|
|
134
|
+
* @param taskIdentifier The task identifier (e.g., "my-task")
|
|
135
|
+
* @param idempotencyKey The idempotency key to reset. Can be:
|
|
136
|
+
* - An `IdempotencyKey` created with `idempotencyKeys.create()` (options are extracted automatically)
|
|
137
|
+
* - A string or string array (requires `options.scope` and potentially `options.parentRunId`)
|
|
138
|
+
* @param options Options for reconstructing the hash if needed
|
|
139
|
+
* @param requestOptions Optional fetch options
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* // Using a key created with idempotencyKeys.create() - options are extracted automatically
|
|
144
|
+
* const key = await idempotencyKeys.create("my-key", { scope: "global" });
|
|
145
|
+
* await idempotencyKeys.reset("my-task", key);
|
|
146
|
+
*
|
|
147
|
+
* // Using a raw string with global scope
|
|
148
|
+
* await idempotencyKeys.reset("my-task", "my-key", { scope: "global" });
|
|
149
|
+
*
|
|
150
|
+
* // Using a raw string with run scope (requires parentRunId)
|
|
151
|
+
* await idempotencyKeys.reset("my-task", "my-key", {
|
|
152
|
+
* scope: "run",
|
|
153
|
+
* parentRunId: "run_abc123"
|
|
154
|
+
* });
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export async function resetIdempotencyKey(taskIdentifier, idempotencyKey, options, requestOptions) {
|
|
102
158
|
const client = apiClientManager.clientOrThrow();
|
|
103
|
-
|
|
159
|
+
// If the key is already a 64-char hash, use it directly
|
|
160
|
+
if (typeof idempotencyKey === "string" && idempotencyKey.length === 64) {
|
|
161
|
+
return client.resetIdempotencyKey(taskIdentifier, idempotencyKey, requestOptions);
|
|
162
|
+
}
|
|
163
|
+
// Try to extract options from an IdempotencyKey created with idempotencyKeys.create()
|
|
164
|
+
const attachedOptions = typeof idempotencyKey === "string"
|
|
165
|
+
? getIdempotencyKeyOptions(idempotencyKey)
|
|
166
|
+
: undefined;
|
|
167
|
+
const scope = attachedOptions?.scope ?? options?.scope ?? "run";
|
|
168
|
+
const keyArray = Array.isArray(idempotencyKey)
|
|
169
|
+
? idempotencyKey
|
|
170
|
+
: [attachedOptions?.key ?? String(idempotencyKey)];
|
|
171
|
+
// Build scope suffix based on scope type
|
|
172
|
+
let scopeSuffix = [];
|
|
173
|
+
switch (scope) {
|
|
174
|
+
case "run": {
|
|
175
|
+
const parentRunId = options?.parentRunId ?? taskContext?.ctx?.run.id;
|
|
176
|
+
if (!parentRunId) {
|
|
177
|
+
throw new Error("resetIdempotencyKey: parentRunId is required for 'run' scope when called outside a task context");
|
|
178
|
+
}
|
|
179
|
+
scopeSuffix = [parentRunId];
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case "attempt": {
|
|
183
|
+
const parentRunId = options?.parentRunId ?? taskContext?.ctx?.run.id;
|
|
184
|
+
const attemptNumber = options?.attemptNumber ?? taskContext?.ctx?.attempt.number;
|
|
185
|
+
if (!parentRunId || attemptNumber === undefined) {
|
|
186
|
+
throw new Error("resetIdempotencyKey: parentRunId and attemptNumber are required for 'attempt' scope when called outside a task context");
|
|
187
|
+
}
|
|
188
|
+
scopeSuffix = [parentRunId, attemptNumber.toString()];
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Generate the hash using the same algorithm as createIdempotencyKey
|
|
193
|
+
const hash = await generateIdempotencyKey(keyArray.concat(scopeSuffix));
|
|
194
|
+
return client.resetIdempotencyKey(taskIdentifier, hash, requestOptions);
|
|
104
195
|
}
|
|
105
196
|
//# sourceMappingURL=idempotencyKeys.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idempotencyKeys.js","sourceRoot":"","sources":["../../../src/v3/idempotencyKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"idempotencyKeys.js","sourceRoot":"","sources":["../../../src/v3/idempotencyKeys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import superjson from "superjson";
|
|
3
|
+
superjson.registerCustom({
|
|
4
|
+
isApplicable: (v) => typeof Buffer === "function" && Buffer.isBuffer(v),
|
|
5
|
+
serialize: (v) => [...v],
|
|
6
|
+
deserialize: (v) => Buffer.from(v),
|
|
7
|
+
}, "buffer");
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
export default superjson;
|
|
10
|
+
//# sourceMappingURL=superjson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"superjson.js","sourceRoot":"","sources":["../../../../src/v3/imports/superjson.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,SAAS,CAAC,cAAc,CACtB;IACE,YAAY,EAAE,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpF,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CACnC,EACD,QAAQ,CACT,CAAC;AAEF,aAAa;AACb,eAAe,SAAS,CAAC"}
|