@zhivex-ai/core 0.7.0 → 0.8.0

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 (77) hide show
  1. package/README.md +5 -0
  2. package/dist/advanced-tool-registry.d.ts +112 -0
  3. package/dist/advanced-tool-registry.d.ts.map +1 -0
  4. package/dist/advanced-tool-registry.js +407 -0
  5. package/dist/advanced-tool-registry.js.map +1 -0
  6. package/dist/agent-evaluation.d.ts +176 -0
  7. package/dist/agent-evaluation.d.ts.map +1 -0
  8. package/dist/agent-evaluation.js +334 -0
  9. package/dist/agent-evaluation.js.map +1 -0
  10. package/dist/agent-store.d.ts.map +1 -1
  11. package/dist/agent-store.js +226 -8
  12. package/dist/agent-store.js.map +1 -1
  13. package/dist/agent-trace.d.ts +127 -0
  14. package/dist/agent-trace.d.ts.map +1 -0
  15. package/dist/agent-trace.js +331 -0
  16. package/dist/agent-trace.js.map +1 -0
  17. package/dist/agent.d.ts +12 -1
  18. package/dist/agent.d.ts.map +1 -1
  19. package/dist/agent.js +469 -36
  20. package/dist/agent.js.map +1 -1
  21. package/dist/api-stability.d.ts +9 -0
  22. package/dist/api-stability.d.ts.map +1 -0
  23. package/dist/api-stability.js +261 -0
  24. package/dist/api-stability.js.map +1 -0
  25. package/dist/artifact.d.ts +165 -0
  26. package/dist/artifact.d.ts.map +1 -0
  27. package/dist/artifact.js +994 -0
  28. package/dist/artifact.js.map +1 -0
  29. package/dist/errors.d.ts +2 -0
  30. package/dist/errors.d.ts.map +1 -1
  31. package/dist/errors.js +2 -0
  32. package/dist/errors.js.map +1 -1
  33. package/dist/generate-text.d.ts.map +1 -1
  34. package/dist/generate-text.js +6 -2
  35. package/dist/generate-text.js.map +1 -1
  36. package/dist/index.d.ts +27 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +14 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/live-agent.d.ts.map +1 -1
  41. package/dist/live-agent.js +7 -1
  42. package/dist/live-agent.js.map +1 -1
  43. package/dist/provider-parity.d.ts +63 -0
  44. package/dist/provider-parity.d.ts.map +1 -0
  45. package/dist/provider-parity.js +175 -0
  46. package/dist/provider-parity.js.map +1 -0
  47. package/dist/runner.d.ts +111 -0
  48. package/dist/runner.d.ts.map +1 -0
  49. package/dist/runner.js +635 -0
  50. package/dist/runner.js.map +1 -0
  51. package/dist/safety-policy.d.ts +65 -0
  52. package/dist/safety-policy.d.ts.map +1 -0
  53. package/dist/safety-policy.js +308 -0
  54. package/dist/safety-policy.js.map +1 -0
  55. package/dist/types.d.ts +119 -3
  56. package/dist/types.d.ts.map +1 -1
  57. package/dist/workflow-artifacts.d.ts +28 -0
  58. package/dist/workflow-artifacts.d.ts.map +1 -0
  59. package/dist/workflow-artifacts.js +86 -0
  60. package/dist/workflow-artifacts.js.map +1 -0
  61. package/dist/workflow-evaluation-diff.d.ts +51 -0
  62. package/dist/workflow-evaluation-diff.d.ts.map +1 -0
  63. package/dist/workflow-evaluation-diff.js +141 -0
  64. package/dist/workflow-evaluation-diff.js.map +1 -0
  65. package/dist/workflow-evaluation.d.ts +94 -0
  66. package/dist/workflow-evaluation.d.ts.map +1 -0
  67. package/dist/workflow-evaluation.js +210 -0
  68. package/dist/workflow-evaluation.js.map +1 -0
  69. package/dist/workflow-state-service.d.ts +67 -0
  70. package/dist/workflow-state-service.d.ts.map +1 -0
  71. package/dist/workflow-state-service.js +498 -0
  72. package/dist/workflow-state-service.js.map +1 -0
  73. package/dist/workflow.d.ts +206 -0
  74. package/dist/workflow.d.ts.map +1 -0
  75. package/dist/workflow.js +727 -0
  76. package/dist/workflow.js.map +1 -0
  77. package/package.json +1 -1
@@ -0,0 +1,498 @@
1
+ import { promises as fs } from "node:fs";
2
+ import path from "node:path";
3
+ import { ConflictError, ValidationError } from "./errors.js";
4
+ import { normalizeWorkflowRunState, WORKFLOW_RUN_STATE_SCHEMA_VERSION } from "./workflow.js";
5
+ const cloneJson = (value) => JSON.parse(JSON.stringify(value));
6
+ const identifierPattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
7
+ export const WORKFLOW_STATE_RECORD_SCHEMA_VERSION = 1;
8
+ const workflowStateKey = (input) => `${input.appName}:${input.userId}:${input.sessionId}:${input.workflowKey}`;
9
+ const fileNameForWorkflowState = (input) => [input.appName, input.userId, input.sessionId, input.workflowKey].map((part) => encodeURIComponent(part)).join("__") + ".json";
10
+ export const normalizeWorkflowStateRecord = (value) => {
11
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
12
+ throw new ValidationError("WorkflowStateRecord must be an object.");
13
+ }
14
+ const record = value;
15
+ if (record.schemaVersion !== undefined && record.schemaVersion > WORKFLOW_STATE_RECORD_SCHEMA_VERSION) {
16
+ throw new ValidationError(`Unsupported WorkflowStateRecord schemaVersion ${record.schemaVersion}.`);
17
+ }
18
+ if (typeof record.appName !== "string" ||
19
+ typeof record.userId !== "string" ||
20
+ typeof record.sessionId !== "string" ||
21
+ typeof record.workflowKey !== "string" ||
22
+ typeof record.runId !== "string" ||
23
+ typeof record.status !== "string" ||
24
+ typeof record.createdAt !== "number" ||
25
+ typeof record.updatedAt !== "number" ||
26
+ !record.state) {
27
+ throw new ValidationError("WorkflowStateRecord is missing required fields.");
28
+ }
29
+ return {
30
+ schemaVersion: WORKFLOW_STATE_RECORD_SCHEMA_VERSION,
31
+ revision: typeof record.revision === "number" ? record.revision : 1,
32
+ appName: record.appName,
33
+ userId: record.userId,
34
+ sessionId: record.sessionId,
35
+ workflowKey: record.workflowKey,
36
+ state: normalizeWorkflowRunState(record.state),
37
+ status: record.status,
38
+ runId: record.runId,
39
+ createdAt: record.createdAt,
40
+ updatedAt: record.updatedAt
41
+ };
42
+ };
43
+ export const migrateWorkflowStateRecord = (value, targetVersion = WORKFLOW_STATE_RECORD_SCHEMA_VERSION) => {
44
+ if (targetVersion !== WORKFLOW_STATE_RECORD_SCHEMA_VERSION) {
45
+ throw new ValidationError(`Unsupported WorkflowStateRecord migration target ${targetVersion}.`);
46
+ }
47
+ return normalizeWorkflowStateRecord(value);
48
+ };
49
+ const assertExpectedRevision = (current, expectedRevision) => {
50
+ if (expectedRevision !== undefined && (current?.revision ?? 0) !== expectedRevision) {
51
+ throw new ConflictError("WorkflowStateRecord revision conflict.");
52
+ }
53
+ };
54
+ const sqliteMutationCount = (result) => {
55
+ if (!result || typeof result !== "object") {
56
+ return undefined;
57
+ }
58
+ const record = result;
59
+ const value = record.changes ?? record.changeset ?? record.rowCount;
60
+ return typeof value === "number" ? value : undefined;
61
+ };
62
+ const cloneRecord = (record) => cloneJson(normalizeWorkflowStateRecord(record));
63
+ const createRecord = (input, existing) => {
64
+ const now = Date.now();
65
+ const state = normalizeWorkflowRunState(input.state);
66
+ return {
67
+ schemaVersion: WORKFLOW_STATE_RECORD_SCHEMA_VERSION,
68
+ revision: existing ? existing.revision + 1 : 1,
69
+ appName: input.appName,
70
+ userId: input.userId,
71
+ sessionId: input.sessionId,
72
+ workflowKey: input.workflowKey,
73
+ state: cloneJson({ ...state, schemaVersion: WORKFLOW_RUN_STATE_SCHEMA_VERSION }),
74
+ status: state.status,
75
+ runId: state.runId,
76
+ createdAt: existing?.createdAt ?? now,
77
+ updatedAt: now
78
+ };
79
+ };
80
+ const matchesListInput = (record, input) => record.appName === input.appName &&
81
+ record.userId === input.userId &&
82
+ (input.sessionId === undefined || record.sessionId === input.sessionId) &&
83
+ (input.workflowKey === undefined || record.workflowKey === input.workflowKey) &&
84
+ (input.status === undefined || record.status === input.status);
85
+ const validateIdentifier = (value, fieldName) => {
86
+ if (!identifierPattern.test(value)) {
87
+ throw new ValidationError(`The "${fieldName}" option must match the SQL identifier pattern [A-Za-z_][A-Za-z0-9_]*.`);
88
+ }
89
+ return value;
90
+ };
91
+ const getRecordField = (value, candidates) => {
92
+ if (!value || typeof value !== "object") {
93
+ return undefined;
94
+ }
95
+ const record = value;
96
+ for (const candidate of candidates) {
97
+ if (candidate in record) {
98
+ return record[candidate];
99
+ }
100
+ }
101
+ return undefined;
102
+ };
103
+ const parseWorkflowStateJson = (value) => {
104
+ if (!value) {
105
+ return undefined;
106
+ }
107
+ if (typeof value === "string") {
108
+ return normalizeWorkflowStateRecord(JSON.parse(value));
109
+ }
110
+ return normalizeWorkflowStateRecord(value);
111
+ };
112
+ const prepareSqliteStatement = (db, sql) => {
113
+ if (typeof db.prepare === "function") {
114
+ return db.prepare(sql);
115
+ }
116
+ if (typeof db.query === "function") {
117
+ return db.query(sql);
118
+ }
119
+ throw new ValidationError('The "db" option must expose either a "prepare()" or "query()" method.');
120
+ };
121
+ const ensurePostgresTable = (() => {
122
+ const initializedTables = new WeakMap();
123
+ return async (client, tableName, createSql) => {
124
+ let tables = initializedTables.get(client);
125
+ if (!tables) {
126
+ tables = new Map();
127
+ initializedTables.set(client, tables);
128
+ }
129
+ let initialization = tables.get(tableName);
130
+ if (!initialization) {
131
+ initialization = Promise.resolve(client.query(createSql, [])).then(() => undefined);
132
+ tables.set(tableName, initialization);
133
+ }
134
+ await initialization;
135
+ };
136
+ })();
137
+ export const createInMemoryWorkflowStateService = () => {
138
+ const states = new Map();
139
+ return {
140
+ saveWorkflowState(input) {
141
+ const existing = states.get(workflowStateKey(input));
142
+ assertExpectedRevision(existing, input.expectedRevision);
143
+ const record = createRecord(input, existing);
144
+ states.set(workflowStateKey(input), cloneRecord(record));
145
+ return cloneRecord(record);
146
+ },
147
+ loadWorkflowState(input) {
148
+ const record = states.get(workflowStateKey(input));
149
+ return record ? cloneRecord(record) : undefined;
150
+ },
151
+ listWorkflowStates(input) {
152
+ return [...states.values()]
153
+ .filter((record) => matchesListInput(record, input))
154
+ .sort((left, right) => left.updatedAt - right.updatedAt || left.workflowKey.localeCompare(right.workflowKey))
155
+ .map(cloneRecord);
156
+ },
157
+ deleteWorkflowState(input) {
158
+ states.delete(workflowStateKey(input));
159
+ }
160
+ };
161
+ };
162
+ export const createFileWorkflowStateService = (options) => {
163
+ const filePath = (input) => path.join(options.directory, fileNameForWorkflowState(input));
164
+ const load = async (input) => {
165
+ try {
166
+ return normalizeWorkflowStateRecord(JSON.parse(await fs.readFile(filePath(input), "utf8")));
167
+ }
168
+ catch (error) {
169
+ if (error.code === "ENOENT") {
170
+ return undefined;
171
+ }
172
+ throw error;
173
+ }
174
+ };
175
+ return {
176
+ async saveWorkflowState(input) {
177
+ const existing = await load(input);
178
+ assertExpectedRevision(existing, input.expectedRevision);
179
+ const record = createRecord(input, existing);
180
+ await fs.mkdir(options.directory, { recursive: true });
181
+ await fs.writeFile(filePath(input), JSON.stringify(record, null, 2), "utf8");
182
+ return cloneRecord(record);
183
+ },
184
+ loadWorkflowState(input) {
185
+ return load(input);
186
+ },
187
+ async listWorkflowStates(input) {
188
+ let entries;
189
+ try {
190
+ entries = await fs.readdir(options.directory);
191
+ }
192
+ catch (error) {
193
+ if (error.code === "ENOENT") {
194
+ return [];
195
+ }
196
+ throw error;
197
+ }
198
+ const records = [];
199
+ for (const entry of entries) {
200
+ if (!entry.endsWith(".json")) {
201
+ continue;
202
+ }
203
+ const record = normalizeWorkflowStateRecord(JSON.parse(await fs.readFile(path.join(options.directory, entry), "utf8")));
204
+ if (matchesListInput(record, input)) {
205
+ records.push(cloneRecord(record));
206
+ }
207
+ }
208
+ return records.sort((left, right) => left.updatedAt - right.updatedAt || left.workflowKey.localeCompare(right.workflowKey));
209
+ },
210
+ async deleteWorkflowState(input) {
211
+ try {
212
+ await fs.unlink(filePath(input));
213
+ }
214
+ catch (error) {
215
+ if (error.code !== "ENOENT") {
216
+ throw error;
217
+ }
218
+ }
219
+ }
220
+ };
221
+ };
222
+ export const pruneFileWorkflowStateStore = async (options) => {
223
+ const now = options.now ?? Date.now();
224
+ const dryRun = options.dryRun ?? true;
225
+ let entries;
226
+ try {
227
+ entries = await fs.readdir(options.directory);
228
+ }
229
+ catch (error) {
230
+ if (error.code === "ENOENT") {
231
+ return { directory: options.directory, dryRun, deletedWorkflowStateKeys: [], keptWorkflowStateKeys: [] };
232
+ }
233
+ throw error;
234
+ }
235
+ const records = [];
236
+ for (const entry of entries) {
237
+ if (!entry.endsWith(".json")) {
238
+ continue;
239
+ }
240
+ const filePath = path.join(options.directory, entry);
241
+ const record = normalizeWorkflowStateRecord(JSON.parse(await fs.readFile(filePath, "utf8")));
242
+ records.push({
243
+ filePath,
244
+ key: workflowStateKey(record),
245
+ updatedAt: record.updatedAt
246
+ });
247
+ }
248
+ const sorted = records.sort((left, right) => right.updatedAt - left.updatedAt || left.key.localeCompare(right.key));
249
+ const keepByCount = new Set(options.keepLast === undefined ? [] : sorted.slice(0, Math.max(0, options.keepLast)).map((record) => record.key));
250
+ const shouldDelete = (record) => !keepByCount.has(record.key) &&
251
+ (options.olderThanMs !== undefined ? now - record.updatedAt > options.olderThanMs : options.keepLast !== undefined);
252
+ const deleted = sorted.filter(shouldDelete);
253
+ if (!dryRun) {
254
+ for (const record of deleted) {
255
+ await fs.unlink(record.filePath);
256
+ }
257
+ }
258
+ return {
259
+ directory: options.directory,
260
+ dryRun,
261
+ deletedWorkflowStateKeys: deleted.map((record) => record.key),
262
+ keptWorkflowStateKeys: sorted.filter((record) => !shouldDelete(record)).map((record) => record.key)
263
+ };
264
+ };
265
+ export const createSqliteWorkflowStateService = (options) => {
266
+ const tableName = validateIdentifier(options.tableName ?? "zhivex_workflow_states", "tableName");
267
+ options.db.exec(`
268
+ CREATE TABLE IF NOT EXISTS ${tableName} (
269
+ workflow_state_key TEXT PRIMARY KEY,
270
+ app_name TEXT NOT NULL,
271
+ user_id TEXT NOT NULL,
272
+ session_id TEXT NOT NULL,
273
+ workflow_key TEXT NOT NULL,
274
+ run_id TEXT NOT NULL,
275
+ status TEXT NOT NULL,
276
+ state_json TEXT NOT NULL,
277
+ created_at_ms INTEGER NOT NULL,
278
+ updated_at_ms INTEGER NOT NULL
279
+ )
280
+ `);
281
+ const loadStatement = prepareSqliteStatement(options.db, `SELECT state_json FROM ${tableName} WHERE workflow_state_key = ?`);
282
+ const listStatement = prepareSqliteStatement(options.db, `SELECT state_json FROM ${tableName}
283
+ WHERE app_name = ?
284
+ AND user_id = ?
285
+ AND (? IS NULL OR session_id = ?)
286
+ AND (? IS NULL OR workflow_key = ?)
287
+ AND (? IS NULL OR status = ?)
288
+ ORDER BY updated_at_ms ASC, workflow_key ASC`);
289
+ const saveStatement = prepareSqliteStatement(options.db, `
290
+ INSERT INTO ${tableName} (
291
+ workflow_state_key, app_name, user_id, session_id, workflow_key, run_id, status, state_json, created_at_ms, updated_at_ms
292
+ )
293
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
294
+ ON CONFLICT(workflow_state_key) DO UPDATE SET
295
+ app_name = excluded.app_name,
296
+ user_id = excluded.user_id,
297
+ session_id = excluded.session_id,
298
+ workflow_key = excluded.workflow_key,
299
+ run_id = excluded.run_id,
300
+ status = excluded.status,
301
+ state_json = excluded.state_json,
302
+ updated_at_ms = excluded.updated_at_ms
303
+ `);
304
+ const updateCasStatement = prepareSqliteStatement(options.db, `
305
+ UPDATE ${tableName}
306
+ SET app_name = ?,
307
+ user_id = ?,
308
+ session_id = ?,
309
+ workflow_key = ?,
310
+ run_id = ?,
311
+ status = ?,
312
+ state_json = ?,
313
+ updated_at_ms = ?
314
+ WHERE workflow_state_key = ?
315
+ AND updated_at_ms = ?
316
+ `);
317
+ const deleteStatement = prepareSqliteStatement(options.db, `DELETE FROM ${tableName} WHERE workflow_state_key = ?`);
318
+ const load = (input) => parseWorkflowStateJson(getRecordField(loadStatement.get([workflowStateKey(input)]), ["state_json", "stateJson"]));
319
+ const save = (record, options) => {
320
+ if (options?.expectedRevision !== undefined && options.existing) {
321
+ const result = updateCasStatement.run([
322
+ record.appName,
323
+ record.userId,
324
+ record.sessionId,
325
+ record.workflowKey,
326
+ record.runId,
327
+ record.status,
328
+ JSON.stringify(record),
329
+ record.updatedAt,
330
+ workflowStateKey(record),
331
+ options.existing.updatedAt
332
+ ]);
333
+ if (sqliteMutationCount(result) === 0) {
334
+ throw new ConflictError("WorkflowStateRecord revision conflict.");
335
+ }
336
+ }
337
+ else {
338
+ saveStatement.run([
339
+ workflowStateKey(record),
340
+ record.appName,
341
+ record.userId,
342
+ record.sessionId,
343
+ record.workflowKey,
344
+ record.runId,
345
+ record.status,
346
+ JSON.stringify(record),
347
+ record.createdAt,
348
+ record.updatedAt
349
+ ]);
350
+ }
351
+ return cloneRecord(record);
352
+ };
353
+ return {
354
+ saveWorkflowState(input) {
355
+ const existing = load(input);
356
+ assertExpectedRevision(existing, input.expectedRevision);
357
+ return save(createRecord(input, existing), {
358
+ existing,
359
+ expectedRevision: input.expectedRevision
360
+ });
361
+ },
362
+ loadWorkflowState(input) {
363
+ return load(input);
364
+ },
365
+ listWorkflowStates(input) {
366
+ const params = [
367
+ input.appName,
368
+ input.userId,
369
+ input.sessionId ?? null,
370
+ input.sessionId ?? null,
371
+ input.workflowKey ?? null,
372
+ input.workflowKey ?? null,
373
+ input.status ?? null,
374
+ input.status ?? null
375
+ ];
376
+ const rows = listStatement.all?.(params) ?? [];
377
+ return rows.flatMap((row) => {
378
+ const record = parseWorkflowStateJson(getRecordField(row, ["state_json", "stateJson"]));
379
+ return record ? [record] : [];
380
+ });
381
+ },
382
+ deleteWorkflowState(input) {
383
+ deleteStatement.run([workflowStateKey(input)]);
384
+ }
385
+ };
386
+ };
387
+ export const createPostgresWorkflowStateService = (options) => {
388
+ const tableName = validateIdentifier(options.tableName ?? "zhivex_workflow_states", "tableName");
389
+ const createSql = `
390
+ CREATE TABLE IF NOT EXISTS ${tableName} (
391
+ workflow_state_key TEXT PRIMARY KEY,
392
+ app_name TEXT NOT NULL,
393
+ user_id TEXT NOT NULL,
394
+ session_id TEXT NOT NULL,
395
+ workflow_key TEXT NOT NULL,
396
+ run_id TEXT NOT NULL,
397
+ status TEXT NOT NULL,
398
+ state_json JSONB NOT NULL,
399
+ created_at_ms BIGINT NOT NULL,
400
+ updated_at_ms BIGINT NOT NULL
401
+ )
402
+ `;
403
+ const load = async (input) => {
404
+ await ensurePostgresTable(options.client, tableName, createSql);
405
+ const result = await options.client.query(`SELECT state_json FROM ${tableName} WHERE workflow_state_key = $1`, [workflowStateKey(input)]);
406
+ return parseWorkflowStateJson(getRecordField(result.rows[0], ["state_json", "stateJson"]));
407
+ };
408
+ const save = async (record, saveOptions) => {
409
+ await ensurePostgresTable(options.client, tableName, createSql);
410
+ if (saveOptions?.expectedRevision !== undefined && saveOptions.existing) {
411
+ const result = await options.client.query(`UPDATE ${tableName}
412
+ SET app_name = $2,
413
+ user_id = $3,
414
+ session_id = $4,
415
+ workflow_key = $5,
416
+ run_id = $6,
417
+ status = $7,
418
+ state_json = $8::jsonb,
419
+ updated_at_ms = $9
420
+ WHERE workflow_state_key = $1
421
+ AND updated_at_ms = $10
422
+ RETURNING state_json`, [
423
+ workflowStateKey(record),
424
+ record.appName,
425
+ record.userId,
426
+ record.sessionId,
427
+ record.workflowKey,
428
+ record.runId,
429
+ record.status,
430
+ JSON.stringify(record),
431
+ record.updatedAt,
432
+ saveOptions.existing.updatedAt
433
+ ]);
434
+ if (result.rows.length === 0) {
435
+ throw new ConflictError("WorkflowStateRecord revision conflict.");
436
+ }
437
+ }
438
+ else {
439
+ await options.client.query(`INSERT INTO ${tableName} (
440
+ workflow_state_key, app_name, user_id, session_id, workflow_key, run_id, status, state_json, created_at_ms, updated_at_ms
441
+ )
442
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8::jsonb, $9, $10)
443
+ ON CONFLICT(workflow_state_key) DO UPDATE SET
444
+ app_name = EXCLUDED.app_name,
445
+ user_id = EXCLUDED.user_id,
446
+ session_id = EXCLUDED.session_id,
447
+ workflow_key = EXCLUDED.workflow_key,
448
+ run_id = EXCLUDED.run_id,
449
+ status = EXCLUDED.status,
450
+ state_json = EXCLUDED.state_json,
451
+ updated_at_ms = EXCLUDED.updated_at_ms`, [
452
+ workflowStateKey(record),
453
+ record.appName,
454
+ record.userId,
455
+ record.sessionId,
456
+ record.workflowKey,
457
+ record.runId,
458
+ record.status,
459
+ JSON.stringify(record),
460
+ record.createdAt,
461
+ record.updatedAt
462
+ ]);
463
+ }
464
+ return cloneRecord(record);
465
+ };
466
+ return {
467
+ async saveWorkflowState(input) {
468
+ const existing = await load(input);
469
+ assertExpectedRevision(existing, input.expectedRevision);
470
+ return save(createRecord(input, existing), {
471
+ existing,
472
+ expectedRevision: input.expectedRevision
473
+ });
474
+ },
475
+ loadWorkflowState(input) {
476
+ return load(input);
477
+ },
478
+ async listWorkflowStates(input) {
479
+ await ensurePostgresTable(options.client, tableName, createSql);
480
+ const result = await options.client.query(`SELECT state_json FROM ${tableName}
481
+ WHERE app_name = $1
482
+ AND user_id = $2
483
+ AND ($3::text IS NULL OR session_id = $3)
484
+ AND ($4::text IS NULL OR workflow_key = $4)
485
+ AND ($5::text IS NULL OR status = $5)
486
+ ORDER BY updated_at_ms ASC, workflow_key ASC`, [input.appName, input.userId, input.sessionId ?? null, input.workflowKey ?? null, input.status ?? null]);
487
+ return result.rows.flatMap((row) => {
488
+ const record = parseWorkflowStateJson(getRecordField(row, ["state_json", "stateJson"]));
489
+ return record ? [record] : [];
490
+ });
491
+ },
492
+ async deleteWorkflowState(input) {
493
+ await ensurePostgresTable(options.client, tableName, createSql);
494
+ await options.client.query(`DELETE FROM ${tableName} WHERE workflow_state_key = $1`, [workflowStateKey(input)]);
495
+ }
496
+ };
497
+ };
498
+ //# sourceMappingURL=workflow-state-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-state-service.js","sourceRoot":"","sources":["../src/workflow-state-service.ts"],"names":[],"mappings":"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"}