@trigger.dev/core 4.3.0 → 4.3.2

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.
Files changed (47) hide show
  1. package/dist/commonjs/v3/apiClient/errors.d.ts +25 -0
  2. package/dist/commonjs/v3/apiClient/errors.js +29 -1
  3. package/dist/commonjs/v3/apiClient/errors.js.map +1 -1
  4. package/dist/commonjs/v3/apiClient/index.d.ts +54 -2
  5. package/dist/commonjs/v3/apiClient/index.js +280 -0
  6. package/dist/commonjs/v3/apiClient/index.js.map +1 -1
  7. package/dist/commonjs/v3/apiClient/streamBatchItems.test.d.ts +1 -0
  8. package/dist/commonjs/v3/apiClient/streamBatchItems.test.js +369 -0
  9. package/dist/commonjs/v3/apiClient/streamBatchItems.test.js.map +1 -0
  10. package/dist/commonjs/v3/idempotencyKeys.d.ts +5 -0
  11. package/dist/commonjs/v3/idempotencyKeys.js +10 -1
  12. package/dist/commonjs/v3/idempotencyKeys.js.map +1 -1
  13. package/dist/commonjs/v3/schemas/api.d.ts +372 -7
  14. package/dist/commonjs/v3/schemas/api.js +100 -4
  15. package/dist/commonjs/v3/schemas/api.js.map +1 -1
  16. package/dist/commonjs/v3/schemas/messages.d.ts +2 -2
  17. package/dist/commonjs/v3/schemas/runEngine.d.ts +1 -0
  18. package/dist/commonjs/v3/schemas/runEngine.js +1 -0
  19. package/dist/commonjs/v3/schemas/runEngine.js.map +1 -1
  20. package/dist/commonjs/v3/types/tasks.d.ts +53 -4
  21. package/dist/commonjs/v3/zodSocket.js +1 -1
  22. package/dist/commonjs/v3/zodSocket.js.map +1 -1
  23. package/dist/commonjs/version.js +1 -1
  24. package/dist/esm/v3/apiClient/errors.d.ts +25 -0
  25. package/dist/esm/v3/apiClient/errors.js +27 -0
  26. package/dist/esm/v3/apiClient/errors.js.map +1 -1
  27. package/dist/esm/v3/apiClient/index.d.ts +54 -2
  28. package/dist/esm/v3/apiClient/index.js +282 -2
  29. package/dist/esm/v3/apiClient/index.js.map +1 -1
  30. package/dist/esm/v3/apiClient/streamBatchItems.test.d.ts +1 -0
  31. package/dist/esm/v3/apiClient/streamBatchItems.test.js +367 -0
  32. package/dist/esm/v3/apiClient/streamBatchItems.test.js.map +1 -0
  33. package/dist/esm/v3/idempotencyKeys.d.ts +5 -0
  34. package/dist/esm/v3/idempotencyKeys.js +9 -1
  35. package/dist/esm/v3/idempotencyKeys.js.map +1 -1
  36. package/dist/esm/v3/schemas/api.d.ts +372 -7
  37. package/dist/esm/v3/schemas/api.js +97 -1
  38. package/dist/esm/v3/schemas/api.js.map +1 -1
  39. package/dist/esm/v3/schemas/messages.d.ts +2 -2
  40. package/dist/esm/v3/schemas/runEngine.d.ts +1 -0
  41. package/dist/esm/v3/schemas/runEngine.js +1 -0
  42. package/dist/esm/v3/schemas/runEngine.js.map +1 -1
  43. package/dist/esm/v3/types/tasks.d.ts +53 -4
  44. package/dist/esm/v3/zodSocket.js +1 -1
  45. package/dist/esm/v3/zodSocket.js.map +1 -1
  46. package/dist/esm/version.js +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,367 @@
1
+ import { describe, it, expect, vi, afterEach } from "vitest";
2
+ import { ApiClient } from "./index.js";
3
+ import { BatchNotSealedError } from "./errors.js";
4
+ vi.setConfig({ testTimeout: 10_000 });
5
+ describe("streamBatchItems unsealed handling", () => {
6
+ const originalFetch = globalThis.fetch;
7
+ afterEach(() => {
8
+ globalThis.fetch = originalFetch;
9
+ vi.restoreAllMocks();
10
+ });
11
+ /**
12
+ * Helper to create a mock fetch that properly consumes the request body stream.
13
+ * This is necessary because streamBatchItems sends a ReadableStream body.
14
+ * Important: We must release the reader lock after consuming, just like real fetch does.
15
+ */
16
+ function createMockFetch(responses) {
17
+ let callIndex = 0;
18
+ return vi.fn().mockImplementation(async (_url, init) => {
19
+ // Consume the request body stream to prevent hanging
20
+ if (init?.body && init.body instanceof ReadableStream) {
21
+ const reader = init.body.getReader();
22
+ // Drain the stream
23
+ try {
24
+ while (true) {
25
+ const { done } = await reader.read();
26
+ if (done)
27
+ break;
28
+ }
29
+ }
30
+ finally {
31
+ // Release the lock so the stream can be cancelled later (like real fetch does)
32
+ reader.releaseLock();
33
+ }
34
+ }
35
+ const responseData = responses[Math.min(callIndex, responses.length - 1)];
36
+ callIndex++;
37
+ return {
38
+ ok: true,
39
+ json: () => Promise.resolve(responseData),
40
+ };
41
+ });
42
+ }
43
+ it("throws BatchNotSealedError when sealed=false after retries exhausted", async () => {
44
+ const mockFetch = createMockFetch([
45
+ {
46
+ id: "batch_test123",
47
+ itemsAccepted: 5,
48
+ itemsDeduplicated: 0,
49
+ sealed: false,
50
+ enqueuedCount: 5,
51
+ expectedCount: 10,
52
+ },
53
+ ]);
54
+ globalThis.fetch = mockFetch;
55
+ const client = new ApiClient("http://localhost:3030", "tr_test_key");
56
+ const error = await client
57
+ .streamBatchItems("batch_test123", [{ index: 0, task: "test-task", payload: "{}" }], {
58
+ retry: { maxAttempts: 2, minTimeoutInMs: 10, maxTimeoutInMs: 50 },
59
+ })
60
+ .catch((e) => e);
61
+ expect(error).toBeInstanceOf(BatchNotSealedError);
62
+ expect(error.batchId).toBe("batch_test123");
63
+ expect(error.enqueuedCount).toBe(5);
64
+ expect(error.expectedCount).toBe(10);
65
+ expect(error.itemsAccepted).toBe(5);
66
+ expect(error.itemsDeduplicated).toBe(0);
67
+ // Should have retried (2 attempts total based on maxAttempts)
68
+ expect(mockFetch).toHaveBeenCalledTimes(2);
69
+ });
70
+ it("retries when sealed=false and succeeds when sealed=true on retry", async () => {
71
+ const mockFetch = createMockFetch([
72
+ // First response: not sealed
73
+ {
74
+ id: "batch_test123",
75
+ itemsAccepted: 5,
76
+ itemsDeduplicated: 0,
77
+ sealed: false,
78
+ enqueuedCount: 5,
79
+ expectedCount: 10,
80
+ },
81
+ // Second response: sealed
82
+ {
83
+ id: "batch_test123",
84
+ itemsAccepted: 5,
85
+ itemsDeduplicated: 0,
86
+ sealed: true,
87
+ },
88
+ ]);
89
+ globalThis.fetch = mockFetch;
90
+ const client = new ApiClient("http://localhost:3030", "tr_test_key");
91
+ const result = await client.streamBatchItems("batch_test123", [{ index: 0, task: "test-task", payload: "{}" }], { retry: { maxAttempts: 3, minTimeoutInMs: 10, maxTimeoutInMs: 50 } });
92
+ expect(result.sealed).toBe(true);
93
+ // Should have been called twice (first unsealed, second sealed)
94
+ expect(mockFetch).toHaveBeenCalledTimes(2);
95
+ });
96
+ it("succeeds immediately when sealed=true on first attempt", async () => {
97
+ const mockFetch = createMockFetch([
98
+ {
99
+ id: "batch_test123",
100
+ itemsAccepted: 10,
101
+ itemsDeduplicated: 0,
102
+ sealed: true,
103
+ },
104
+ ]);
105
+ globalThis.fetch = mockFetch;
106
+ const client = new ApiClient("http://localhost:3030", "tr_test_key");
107
+ const result = await client.streamBatchItems("batch_test123", [
108
+ { index: 0, task: "test-task", payload: "{}" },
109
+ ]);
110
+ expect(result.sealed).toBe(true);
111
+ expect(result.itemsAccepted).toBe(10);
112
+ // Should only be called once
113
+ expect(mockFetch).toHaveBeenCalledTimes(1);
114
+ });
115
+ it("BatchNotSealedError has descriptive message", async () => {
116
+ const mockFetch = createMockFetch([
117
+ {
118
+ id: "batch_abc123",
119
+ itemsAccepted: 7,
120
+ itemsDeduplicated: 2,
121
+ sealed: false,
122
+ enqueuedCount: 9,
123
+ expectedCount: 15,
124
+ },
125
+ ]);
126
+ globalThis.fetch = mockFetch;
127
+ const client = new ApiClient("http://localhost:3030", "tr_test_key");
128
+ const error = await client
129
+ .streamBatchItems("batch_abc123", [{ index: 0, task: "test-task", payload: "{}" }], {
130
+ retry: { maxAttempts: 1, minTimeoutInMs: 10, maxTimeoutInMs: 50 },
131
+ })
132
+ .catch((e) => e);
133
+ expect(error).toBeInstanceOf(BatchNotSealedError);
134
+ expect(error.message).toContain("batch_abc123");
135
+ expect(error.message).toContain("9 of 15");
136
+ expect(error.message).toContain("accepted: 7");
137
+ expect(error.message).toContain("deduplicated: 2");
138
+ });
139
+ it("handles missing enqueuedCount and expectedCount gracefully", async () => {
140
+ // Simulate older server response that might not include these fields
141
+ const mockFetch = createMockFetch([
142
+ {
143
+ id: "batch_test123",
144
+ itemsAccepted: 5,
145
+ itemsDeduplicated: 0,
146
+ sealed: false,
147
+ // No enqueuedCount or expectedCount
148
+ },
149
+ ]);
150
+ globalThis.fetch = mockFetch;
151
+ const client = new ApiClient("http://localhost:3030", "tr_test_key");
152
+ const error = await client
153
+ .streamBatchItems("batch_test123", [{ index: 0, task: "test-task", payload: "{}" }], {
154
+ retry: { maxAttempts: 1, minTimeoutInMs: 10, maxTimeoutInMs: 50 },
155
+ })
156
+ .catch((e) => e);
157
+ expect(error).toBeInstanceOf(BatchNotSealedError);
158
+ // Should default to 0 when not provided
159
+ expect(error.enqueuedCount).toBe(0);
160
+ expect(error.expectedCount).toBe(0);
161
+ });
162
+ });
163
+ describe("streamBatchItems stream cancellation on retry", () => {
164
+ const originalFetch = globalThis.fetch;
165
+ afterEach(() => {
166
+ globalThis.fetch = originalFetch;
167
+ vi.restoreAllMocks();
168
+ });
169
+ /**
170
+ * Helper to consume a stream and release the lock (simulating fetch behavior).
171
+ */
172
+ async function consumeAndRelease(stream) {
173
+ const reader = stream.getReader();
174
+ try {
175
+ while (true) {
176
+ const { done } = await reader.read();
177
+ if (done)
178
+ break;
179
+ }
180
+ }
181
+ finally {
182
+ reader.releaseLock();
183
+ }
184
+ }
185
+ it("cancels forRequest stream when retrying due to HTTP error", async () => {
186
+ // Track cancel calls
187
+ let cancelCallCount = 0;
188
+ let callIndex = 0;
189
+ const mockFetch = vi.fn().mockImplementation(async (_url, init) => {
190
+ const currentAttempt = callIndex;
191
+ callIndex++;
192
+ if (init?.body && init.body instanceof ReadableStream) {
193
+ const originalCancel = init.body.cancel.bind(init.body);
194
+ init.body.cancel = async (reason) => {
195
+ cancelCallCount++;
196
+ return originalCancel(reason);
197
+ };
198
+ // Consume stream and release lock (like real fetch does)
199
+ await consumeAndRelease(init.body);
200
+ }
201
+ // First attempt: return 500 error (retryable)
202
+ if (currentAttempt === 0) {
203
+ return {
204
+ ok: false,
205
+ status: 500,
206
+ text: () => Promise.resolve("Server error"),
207
+ headers: new Headers(),
208
+ };
209
+ }
210
+ // Second attempt: success
211
+ return {
212
+ ok: true,
213
+ json: () => Promise.resolve({
214
+ id: "batch_test123",
215
+ itemsAccepted: 10,
216
+ itemsDeduplicated: 0,
217
+ sealed: true,
218
+ }),
219
+ };
220
+ });
221
+ globalThis.fetch = mockFetch;
222
+ const client = new ApiClient("http://localhost:3030", "tr_test_key");
223
+ const result = await client.streamBatchItems("batch_test123", [{ index: 0, task: "test-task", payload: "{}" }], { retry: { maxAttempts: 3, minTimeoutInMs: 10, maxTimeoutInMs: 50 } });
224
+ expect(result.sealed).toBe(true);
225
+ expect(mockFetch).toHaveBeenCalledTimes(2);
226
+ // forRequest should be cancelled once (before first retry)
227
+ // forRetry should be cancelled once (after success)
228
+ // Total: 2 cancel calls
229
+ expect(cancelCallCount).toBeGreaterThanOrEqual(1);
230
+ });
231
+ it("cancels forRequest stream when retrying due to batch not sealed", async () => {
232
+ let cancelCallCount = 0;
233
+ let callIndex = 0;
234
+ const mockFetch = vi.fn().mockImplementation(async (_url, init) => {
235
+ const currentAttempt = callIndex;
236
+ callIndex++;
237
+ if (init?.body && init.body instanceof ReadableStream) {
238
+ const originalCancel = init.body.cancel.bind(init.body);
239
+ init.body.cancel = async (reason) => {
240
+ cancelCallCount++;
241
+ return originalCancel(reason);
242
+ };
243
+ await consumeAndRelease(init.body);
244
+ }
245
+ // First attempt: not sealed (triggers retry)
246
+ if (currentAttempt === 0) {
247
+ return {
248
+ ok: true,
249
+ json: () => Promise.resolve({
250
+ id: "batch_test123",
251
+ itemsAccepted: 5,
252
+ itemsDeduplicated: 0,
253
+ sealed: false,
254
+ enqueuedCount: 5,
255
+ expectedCount: 10,
256
+ }),
257
+ };
258
+ }
259
+ // Second attempt: sealed
260
+ return {
261
+ ok: true,
262
+ json: () => Promise.resolve({
263
+ id: "batch_test123",
264
+ itemsAccepted: 5,
265
+ itemsDeduplicated: 5,
266
+ sealed: true,
267
+ }),
268
+ };
269
+ });
270
+ globalThis.fetch = mockFetch;
271
+ const client = new ApiClient("http://localhost:3030", "tr_test_key");
272
+ const result = await client.streamBatchItems("batch_test123", [{ index: 0, task: "test-task", payload: "{}" }], { retry: { maxAttempts: 3, minTimeoutInMs: 10, maxTimeoutInMs: 50 } });
273
+ expect(result.sealed).toBe(true);
274
+ expect(mockFetch).toHaveBeenCalledTimes(2);
275
+ // forRequest cancelled before retry + forRetry cancelled after success
276
+ expect(cancelCallCount).toBeGreaterThanOrEqual(1);
277
+ });
278
+ it("cancels forRequest stream when retrying due to connection error", async () => {
279
+ let cancelCallCount = 0;
280
+ let callIndex = 0;
281
+ const mockFetch = vi.fn().mockImplementation(async (_url, init) => {
282
+ const currentAttempt = callIndex;
283
+ callIndex++;
284
+ if (init?.body && init.body instanceof ReadableStream) {
285
+ const originalCancel = init.body.cancel.bind(init.body);
286
+ init.body.cancel = async (reason) => {
287
+ cancelCallCount++;
288
+ return originalCancel(reason);
289
+ };
290
+ // Always consume and release - even for error case
291
+ // This simulates what happens when fetch partially reads before failing
292
+ // The important thing is the stream lock is released so cancel() can work
293
+ await consumeAndRelease(init.body);
294
+ }
295
+ // First attempt: connection error (simulate by throwing after consuming)
296
+ if (currentAttempt === 0) {
297
+ throw new TypeError("Failed to fetch");
298
+ }
299
+ // Second attempt: success
300
+ return {
301
+ ok: true,
302
+ json: () => Promise.resolve({
303
+ id: "batch_test123",
304
+ itemsAccepted: 10,
305
+ itemsDeduplicated: 0,
306
+ sealed: true,
307
+ }),
308
+ };
309
+ });
310
+ globalThis.fetch = mockFetch;
311
+ const client = new ApiClient("http://localhost:3030", "tr_test_key");
312
+ const result = await client.streamBatchItems("batch_test123", [{ index: 0, task: "test-task", payload: "{}" }], { retry: { maxAttempts: 3, minTimeoutInMs: 10, maxTimeoutInMs: 50 } });
313
+ expect(result.sealed).toBe(true);
314
+ expect(mockFetch).toHaveBeenCalledTimes(2);
315
+ // forRequest should be cancelled before retry
316
+ expect(cancelCallCount).toBeGreaterThanOrEqual(1);
317
+ });
318
+ it("does not leak memory by leaving tee branches unconsumed during multiple retries", async () => {
319
+ let cancelCallCount = 0;
320
+ let callIndex = 0;
321
+ const mockFetch = vi.fn().mockImplementation(async (_url, init) => {
322
+ const currentAttempt = callIndex;
323
+ callIndex++;
324
+ if (init?.body && init.body instanceof ReadableStream) {
325
+ const originalCancel = init.body.cancel.bind(init.body);
326
+ init.body.cancel = async (reason) => {
327
+ cancelCallCount++;
328
+ return originalCancel(reason);
329
+ };
330
+ await consumeAndRelease(init.body);
331
+ }
332
+ // First two attempts: not sealed
333
+ if (currentAttempt < 2) {
334
+ return {
335
+ ok: true,
336
+ json: () => Promise.resolve({
337
+ id: "batch_test123",
338
+ itemsAccepted: 5,
339
+ itemsDeduplicated: 0,
340
+ sealed: false,
341
+ enqueuedCount: 5,
342
+ expectedCount: 10,
343
+ }),
344
+ };
345
+ }
346
+ // Third attempt: sealed
347
+ return {
348
+ ok: true,
349
+ json: () => Promise.resolve({
350
+ id: "batch_test123",
351
+ itemsAccepted: 5,
352
+ itemsDeduplicated: 5,
353
+ sealed: true,
354
+ }),
355
+ };
356
+ });
357
+ globalThis.fetch = mockFetch;
358
+ const client = new ApiClient("http://localhost:3030", "tr_test_key");
359
+ const result = await client.streamBatchItems("batch_test123", [{ index: 0, task: "test-task", payload: "{}" }], { retry: { maxAttempts: 5, minTimeoutInMs: 10, maxTimeoutInMs: 50 } });
360
+ expect(result.sealed).toBe(true);
361
+ expect(mockFetch).toHaveBeenCalledTimes(3);
362
+ // Each retry should cancel forRequest, plus final forRetry cancel
363
+ // With 2 retries: 2 forRequest cancels + 1 forRetry cancel = 3 total
364
+ expect(cancelCallCount).toBeGreaterThanOrEqual(2);
365
+ });
366
+ });
367
+ //# sourceMappingURL=streamBatchItems.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamBatchItems.test.js","sourceRoot":"","sources":["../../../../src/v3/apiClient/streamBatchItems.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;AAEtC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;QACjC,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH;;;;OAIG;IACH,SAAS,eAAe,CACtB,SAOE;QAEF,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAY,EAAE,IAAkB,EAAE,EAAE;YAC3E,qDAAqD;YACrD,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,cAAc,EAAE,CAAC;gBACtD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrC,mBAAmB;gBACnB,IAAI,CAAC;oBACH,OAAO,IAAI,EAAE,CAAC;wBACZ,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;wBACrC,IAAI,IAAI;4BAAE,MAAM;oBAClB,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,+EAA+E;oBAC/E,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1E,SAAS,EAAE,CAAC;YAEZ,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;aAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,SAAS,GAAG,eAAe,CAAC;YAChC;gBACE,EAAE,EAAE,eAAe;gBACnB,aAAa,EAAE,CAAC;gBAChB,iBAAiB,EAAE,CAAC;gBACpB,MAAM,EAAE,KAAK;gBACb,aAAa,EAAE,CAAC;gBAChB,aAAa,EAAE,EAAE;aAClB;SACF,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;QAErE,MAAM,KAAK,GAAG,MAAM,MAAM;aACvB,gBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;YACnF,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;SAClE,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnB,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAClD,MAAM,CAAE,KAA6B,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrE,MAAM,CAAE,KAA6B,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAE,KAA6B,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAE,KAA6B,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAE,KAA6B,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjE,8DAA8D;QAC9D,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,SAAS,GAAG,eAAe,CAAC;YAChC,6BAA6B;YAC7B;gBACE,EAAE,EAAE,eAAe;gBACnB,aAAa,EAAE,CAAC;gBAChB,iBAAiB,EAAE,CAAC;gBACpB,MAAM,EAAE,KAAK;gBACb,aAAa,EAAE,CAAC;gBAChB,aAAa,EAAE,EAAE;aAClB;YACD,0BAA0B;YAC1B;gBACE,EAAE,EAAE,eAAe;gBACnB,aAAa,EAAE,CAAC;gBAChB,iBAAiB,EAAE,CAAC;gBACpB,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC1C,eAAe,EACf,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAChD,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CACtE,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,gEAAgE;QAChE,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,SAAS,GAAG,eAAe,CAAC;YAChC;gBACE,EAAE,EAAE,eAAe;gBACnB,aAAa,EAAE,EAAE;gBACjB,iBAAiB,EAAE,CAAC;gBACpB,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE;YAC5D,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE;SAC/C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,6BAA6B;QAC7B,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,SAAS,GAAG,eAAe,CAAC;YAChC;gBACE,EAAE,EAAE,cAAc;gBAClB,aAAa,EAAE,CAAC;gBAChB,iBAAiB,EAAE,CAAC;gBACpB,MAAM,EAAE,KAAK;gBACb,aAAa,EAAE,CAAC;gBAChB,aAAa,EAAE,EAAE;aAClB;SACF,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;QAErE,MAAM,KAAK,GAAG,MAAM,MAAM;aACvB,gBAAgB,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;YAClF,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;SAClE,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnB,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,qEAAqE;QACrE,MAAM,SAAS,GAAG,eAAe,CAAC;YAChC;gBACE,EAAE,EAAE,eAAe;gBACnB,aAAa,EAAE,CAAC;gBAChB,iBAAiB,EAAE,CAAC;gBACpB,MAAM,EAAE,KAAK;gBACb,oCAAoC;aACrC;SACF,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;QAErE,MAAM,KAAK,GAAG,MAAM,MAAM;aACvB,gBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;YACnF,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;SAClE,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnB,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAClD,wCAAwC;QACxC,MAAM,CAAE,KAA6B,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAE,KAA6B,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;QACjC,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,KAAK,UAAU,iBAAiB,CAAC,MAA2B;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACrC,IAAI,IAAI;oBAAE,MAAM;YAClB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,qBAAqB;QACrB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAY,EAAE,IAAkB,EAAE,EAAE;YACtF,MAAM,cAAc,GAAG,SAAS,CAAC;YACjC,SAAS,EAAE,CAAC;YAEZ,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,cAAc,EAAE,CAAC;gBACtD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,MAAY,EAAE,EAAE;oBACxC,eAAe,EAAE,CAAC;oBAClB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC,CAAC;gBAEF,yDAAyD;gBACzD,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAED,8CAA8C;YAC9C,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC3C,OAAO,EAAE,IAAI,OAAO,EAAE;iBACvB,CAAC;YACJ,CAAC;YAED,0BAA0B;YAC1B,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,OAAO,CAAC;oBACd,EAAE,EAAE,eAAe;oBACnB,aAAa,EAAE,EAAE;oBACjB,iBAAiB,EAAE,CAAC;oBACpB,MAAM,EAAE,IAAI;iBACb,CAAC;aACL,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC1C,eAAe,EACf,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAChD,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CACtE,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,2DAA2D;QAC3D,oDAAoD;QACpD,wBAAwB;QACxB,MAAM,CAAC,eAAe,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAY,EAAE,IAAkB,EAAE,EAAE;YACtF,MAAM,cAAc,GAAG,SAAS,CAAC;YACjC,SAAS,EAAE,CAAC;YAEZ,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,cAAc,EAAE,CAAC;gBACtD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,MAAY,EAAE,EAAE;oBACxC,eAAe,EAAE,CAAC;oBAClB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC,CAAC;gBAEF,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAED,6CAA6C;YAC7C,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,OAAO,CAAC;wBACd,EAAE,EAAE,eAAe;wBACnB,aAAa,EAAE,CAAC;wBAChB,iBAAiB,EAAE,CAAC;wBACpB,MAAM,EAAE,KAAK;wBACb,aAAa,EAAE,CAAC;wBAChB,aAAa,EAAE,EAAE;qBAClB,CAAC;iBACL,CAAC;YACJ,CAAC;YAED,yBAAyB;YACzB,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,OAAO,CAAC;oBACd,EAAE,EAAE,eAAe;oBACnB,aAAa,EAAE,CAAC;oBAChB,iBAAiB,EAAE,CAAC;oBACpB,MAAM,EAAE,IAAI;iBACb,CAAC;aACL,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC1C,eAAe,EACf,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAChD,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CACtE,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,uEAAuE;QACvE,MAAM,CAAC,eAAe,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAY,EAAE,IAAkB,EAAE,EAAE;YACtF,MAAM,cAAc,GAAG,SAAS,CAAC;YACjC,SAAS,EAAE,CAAC;YAEZ,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,cAAc,EAAE,CAAC;gBACtD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,MAAY,EAAE,EAAE;oBACxC,eAAe,EAAE,CAAC;oBAClB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC,CAAC;gBAEF,mDAAmD;gBACnD,wEAAwE;gBACxE,0EAA0E;gBAC1E,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAED,yEAAyE;YACzE,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC;YACzC,CAAC;YAED,0BAA0B;YAC1B,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,OAAO,CAAC;oBACd,EAAE,EAAE,eAAe;oBACnB,aAAa,EAAE,EAAE;oBACjB,iBAAiB,EAAE,CAAC;oBACpB,MAAM,EAAE,IAAI;iBACb,CAAC;aACL,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC1C,eAAe,EACf,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAChD,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CACtE,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,8CAA8C;QAC9C,MAAM,CAAC,eAAe,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAY,EAAE,IAAkB,EAAE,EAAE;YACtF,MAAM,cAAc,GAAG,SAAS,CAAC;YACjC,SAAS,EAAE,CAAC;YAEZ,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,cAAc,EAAE,CAAC;gBACtD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,MAAY,EAAE,EAAE;oBACxC,eAAe,EAAE,CAAC;oBAClB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC,CAAC;gBAEF,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAED,iCAAiC;YACjC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,OAAO,CAAC;wBACd,EAAE,EAAE,eAAe;wBACnB,aAAa,EAAE,CAAC;wBAChB,iBAAiB,EAAE,CAAC;wBACpB,MAAM,EAAE,KAAK;wBACb,aAAa,EAAE,CAAC;wBAChB,aAAa,EAAE,EAAE;qBAClB,CAAC;iBACL,CAAC;YACJ,CAAC;YAED,wBAAwB;YACxB,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,OAAO,CAAC;oBACd,EAAE,EAAE,eAAe;oBACnB,aAAa,EAAE,CAAC;oBAChB,iBAAiB,EAAE,CAAC;oBACpB,MAAM,EAAE,IAAI;iBACb,CAAC;aACL,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC1C,eAAe,EACf,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAChD,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CACtE,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,kEAAkE;QAClE,qEAAqE;QACrE,MAAM,CAAC,eAAe,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { IdempotencyKey } from "./types/idempotencyKeys.js";
2
+ import type { ZodFetchOptions } from "./apiClient/core.js";
2
3
  export declare function isIdempotencyKey(value: string | string[] | IdempotencyKey): value is IdempotencyKey;
3
4
  export declare function flattenIdempotencyKey(idempotencyKey?: IdempotencyKey | string | string[] | (undefined | IdempotencyKey | string | string[])[]): IdempotencyKey | string | string[] | undefined;
4
5
  export declare function makeIdempotencyKey(idempotencyKey?: IdempotencyKey | string | string[]): Promise<IdempotencyKey | undefined>;
@@ -50,4 +51,8 @@ type AttemptKeyMaterial = {
50
51
  };
51
52
  /** Creates a unique key for each attempt. */
52
53
  export declare function attemptKey(ctx: AttemptKeyMaterial): string;
54
+ /** Resets an idempotency key, effectively deleting it from the associated task.*/
55
+ export declare function resetIdempotencyKey(taskIdentifier: string, idempotencyKey: string, requestOptions?: ZodFetchOptions): Promise<{
56
+ id: string;
57
+ }>;
53
58
  export {};
@@ -1,3 +1,4 @@
1
+ import { apiClientManager } from "./apiClientManager-api.js";
1
2
  import { taskContext } from "./task-context-api.js";
2
3
  import { digestSHA256 } from "./utils/crypto.js";
3
4
  export function isIdempotencyKey(value) {
@@ -29,7 +30,9 @@ export async function makeIdempotencyKey(idempotencyKey) {
29
30
  if (isIdempotencyKey(idempotencyKey)) {
30
31
  return idempotencyKey;
31
32
  }
32
- return await createIdempotencyKey(idempotencyKey, { scope: "global" });
33
+ return await createIdempotencyKey(idempotencyKey, {
34
+ scope: "run",
35
+ });
33
36
  }
34
37
  /**
35
38
  * Creates a deterministic idempotency key based on the provided key material.
@@ -94,4 +97,9 @@ async function generateIdempotencyKey(keyMaterial) {
94
97
  export function attemptKey(ctx) {
95
98
  return `${ctx.run.id}-${ctx.attempt.number}`;
96
99
  }
100
+ /** Resets an idempotency key, effectively deleting it from the associated task.*/
101
+ export async function resetIdempotencyKey(taskIdentifier, idempotencyKey, requestOptions) {
102
+ const client = apiClientManager.clientOrThrow();
103
+ return client.resetIdempotencyKey(taskIdentifier, idempotencyKey, requestOptions);
104
+ }
97
105
  //# sourceMappingURL=idempotencyKeys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"idempotencyKeys.js","sourceRoot":"","sources":["../../../src/v3/idempotencyKeys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idempotencyKeys.js","sourceRoot":"","sources":["../../../src/v3/idempotencyKeys.ts"],"names":[],"mappings":"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"}