@sanoma-ai/workflows 0.10.11 → 0.10.12

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/README.md CHANGED
@@ -496,19 +496,24 @@ export const outbound = collection({
496
496
 
497
497
  A field is `"text"`, `"number"`, `"boolean"`, `"date"` (ISO 8601: a date, or a date and time with its offset) or `"person"` (a person's id), `{ type, optional: true }`, or `{ enum: [...] }` (optional too). A record is typed by them (`RecordOf<typeof outbound.fields>`), and `save` refuses a field that is not declared. The config's `collections` lists them; `sanoma` adds every collection `resources/data.ts` exports when it loads the config, so a company's config lists none.
498
498
 
499
- `resources/data.ts` is the data file the runtime imports as well as loads: the launcher imports it, and so does a workflow that names a collection's operations (`import { outbound } from "../resources/data.ts"`, the one file outside `workflows/` or `policies/` the workflow lint lets them import, found by its real path). So it holds collections only, `collection` imported from `sanoma/data` (or `@sanoma-ai/workflows/data`): a resource declared there, or a collection declared in another data file, is a [problem](#data-files). Their operations are of the vendor `data` (`DATA_VENDOR`, which no connector may take): `data.outbound.get` (`{ key }`: the record, or `null`), `.list` (`{ where?, order?, limit? }`: fields equal to a value or within `{ gt, gte, lt, lte }`, sorted by a field, or `-field` for descending, with missing values last, else by key; values compare as their field's type, text byte by byte (Postgres's `COLLATE "C"`, whatever the database's collation), and one of another type counts as missing; 1 to 1000 records, 100 by default), `.save` (`{ record, ifAbsent? }`: added, or replacing the one with its key unless `ifAbsent` is true) and `.delete` (`{ key }`: `{ deleted }`). `get` and `list` are effect `read`, `save` and `delete` `write`, all idempotent, and the policy's `target` is `data:outbound/<key>` (`data:outbound` for a list). A workflow names them in `uses` and calls them on `ctx`, as any operation:
499
+ `resources/data.ts` is the data file the runtime imports as well as loads: the launcher imports it, and so does a workflow that names a collection's operations (`import { outbound } from "../resources/data.ts"`, the one file outside `workflows/` or `policies/` the workflow lint lets them import, found by its real path). So it holds collections only, `collection` imported from `sanoma/data` (or `@sanoma-ai/workflows/data`): a resource declared there, or a collection declared in another data file, is a [problem](#data-files). Their operations are of the vendor `data` (`DATA_VENDOR`, which no connector may take): `data.outbound.get` (`{ key }`: the record, or `null`), `.list` (`{ where?, order?, limit? }`: fields equal to a value or within `{ gt, gte, lt, lte }`, sorted by a field, or `-field` for descending, with missing values last, else by key; values compare as their field's type, text byte by byte (Postgres's `COLLATE "C"`, whatever the database's collation), and one of another type counts as missing; 1 to 1000 records, 100 by default), `.save` (`{ record, ifAbsent?, ifRecord? }`: added or replaced, optionally guarded by an absent key or matching record) and `.delete` (`{ key }`: `{ deleted }`). `get` and `list` are effect `read`, `save` and `delete` `write`, all idempotent, and the policy's `target` is `data:outbound/<key>` (`data:outbound` for a list). A workflow names them in `uses` and calls them on `ctx`, as any operation:
500
500
 
501
501
  ```ts
502
502
  uses: [outbound.get, outbound.save],
503
503
  async run(ctx, { company }) {
504
504
  const lead = await ctx.data.outbound.get({ key: company });
505
- if (lead) await ctx.data.outbound.save({ record: { ...lead.record, stage: "contacted" } });
505
+ if (lead) await ctx.data.outbound.save({
506
+ record: { ...lead.record, stage: "contacted" },
507
+ ifRecord: lead.record,
508
+ });
506
509
  },
507
510
  ```
508
511
 
509
512
  Use `save({ record, ifAbsent: true })` to claim a key atomically before creating external resources. An absent key is inserted. If the stored JSON record and `updatedBy` already match, the call returns the original `Saved` receipt, including its timestamp, so a retry after a lost response can recover. A different record or actor is refused with a non-retryable `DriverError` (`vendorCode: "record_exists"`, status `409`). Object-property order and omitted `undefined` fields do not change JSON equality; the sandbox fake follows the same rule.
510
513
 
511
- For a claim belonging to one provisioning run, declare a text field such as `claimRun` and include `claimRun: ctx.runId` in the initial record. Keep that value stable on retries and complete the claim before vendor effects. A separate run then cannot reuse the claim merely by submitting the same company details. This guards initial creation; later updates still need their own ownership checks. Omitting `ifAbsent` keeps ordinary replacement behavior.
514
+ Use `save({ record: next, ifRecord: previous.record })` to replace an existing record only while its full JSON still matches the record read earlier. A missing or changed record is refused with a non-retryable `DriverError` (`vendorCode: "record_changed"`, status `409`). An already-written `next` record from the same actor returns its original receipt, allowing recovery after a lost response. Do not combine `ifRecord` with `ifAbsent`. Omitting both keeps ordinary replacement behavior. A conflict does not automatically reload and overwrite the winner.
515
+
516
+ For a claim belonging to one provisioning run, declare a text field such as `claimRun` and include `claimRun: ctx.runId` in the initial record. Keep that value stable on retries and complete the claim before vendor effects. Subsequent transitions must check ownership and conditionally save the full prior record, retaining a run or generation identifier so a later transition cannot look like an earlier one. `ifRecord` compares contents; it is not a monotonic revision, expiring lease or lock held across vendor calls. Managed Cloud consumer integration and lifecycle verification remain separate work in [#532](https://github.com/Sanoma-AI/sanoma/issues/532).
512
517
 
513
518
  `get`, `list` and `save` answer `Saved` records, `{ key, record, updatedAt, updatedBy }`, where `updatedBy` is who the call was made as (`CallContext.by`: `run:<id>` inside a run, the person's id for a [direct call](#direct-calls)). The records are JSON rows of one table the runtime creates beside the ledger, `sanoma_data` (`collection`, `key`, `record`, `updated_at`, `updated_by`), in the config's database. A declaration changes with no migration: a record saved under an older one comes back as it is stored, with `issues` (`{ path, message }`) where the fields no longer accept it. A sandbox run keeps the records in memory, in a fake that starts empty: a scenario seeds a record as it seeds a resource, `Given data.outbound "Acme" has` with a table of fields (the key is the quoted name, and what the table leaves out is made up), and removes one with `Given data.outbound "Acme" is gone`. `describeConfig` lists them as `collections`, each `{ name, title?, key, fields, record, ops, declared? }`, `record` being the JSON Schema `save` accepts, with `$id` `sanoma:collection/<name>`, and `declared` where `resources/data.ts` declares it (`{ id, file, name, at }`, as `loadDataFiles` reads it), whose declaration the app's Hosting page opens. `@sanoma-ai/workflows/shared` exports `DATA_VENDOR` and the `Saved` and `ListQuery` types.
514
519
 
@@ -62,6 +62,7 @@ export interface Collection<N extends string = string, F extends Record<string,
62
62
  readonly save: Op<typeof DATA_VENDOR, N, "save", {
63
63
  record: RecordOf<F>;
64
64
  ifAbsent?: boolean;
65
+ ifRecord?: Record<string, unknown>;
65
66
  }, Saved<RecordOf<F>>>;
66
67
  readonly delete: Op<typeof DATA_VENDOR, N, "delete", {
67
68
  key: string;
@@ -109,7 +109,11 @@ function specsOf(name, key, fields, record) {
109
109
  effect: "write",
110
110
  idempotent: true,
111
111
  description: `Save a record of ${name}: added, or replacing the one with its ${key}; ifAbsent refuses a different existing record`,
112
- input: z.object({ record, ifAbsent: z.boolean().optional() }),
112
+ input: z
113
+ .object({ record, ifAbsent: z.boolean().optional(), ifRecord: z.record(z.string(), z.unknown()).optional() })
114
+ .refine((input) => !(input.ifAbsent && input.ifRecord !== undefined), {
115
+ message: "Choose ifAbsent or ifRecord, not both",
116
+ }),
113
117
  output: SAVED,
114
118
  target: ({ record: r }) => at(r[key]),
115
119
  },
@@ -151,6 +155,12 @@ export function collectionsConnector(list) {
151
155
  }
152
156
  const COLUMNS = "key, record, updated_at, updated_by";
153
157
  const recordExists = () => new DriverError("Collection record already exists", { retryable: false, status: 409, vendorCode: "record_exists" });
158
+ const recordChanged = () => new DriverError("Collection record changed or is missing", {
159
+ retryable: false,
160
+ status: 409,
161
+ vendorCode: "record_changed",
162
+ });
163
+ const sameJson = (a, b) => isDeepStrictEqual(JSON.parse(JSON.stringify(a)), JSON.parse(JSON.stringify(b)));
154
164
  const RANGE = { gt: ">", gte: ">=", lt: "<", lte: "<=" };
155
165
  /**
156
166
  * The collections' driver: their records in `DATA_TABLE` of the database `store` is on, through
@@ -174,7 +184,21 @@ export function collectionsDriver(list, store) {
174
184
  return row ? saved(row) : null;
175
185
  },
176
186
  list: async (listing) => (await query(...listSql(c, listing))).rows.map(saved),
177
- save: async ({ record, ifAbsent }, call) => {
187
+ save: async ({ record, ifAbsent, ifRecord }, call) => {
188
+ if (ifRecord !== undefined) {
189
+ // PostgreSQL locks and rechecks the predicate on a concurrent update. A lost-response
190
+ // retry may recover its own identical result, but never overwrite another actor's state.
191
+ const retry = "record = $3::jsonb AND updated_by = $4";
192
+ const sql = `UPDATE ${DATA_TABLE} SET record = $3::jsonb,
193
+ updated_at = CASE WHEN ${retry} THEN updated_at ELSE now() END, updated_by = $4
194
+ WHERE collection = $1 AND key = $2 AND (record = $5::jsonb OR (${retry}))
195
+ RETURNING ${COLUMNS}`;
196
+ const params = [c.name, record[c.key], JSON.stringify(record), updatedBy(call), JSON.stringify(ifRecord)];
197
+ const row = (await query(sql, params)).rows[0];
198
+ if (!row)
199
+ throw recordChanged();
200
+ return saved(row);
201
+ }
178
202
  // The conflict row is locked by Postgres: never implement an insert-only claim as get + save.
179
203
  // An identical retry by the same actor keeps the first receipt and never overwrites later progress.
180
204
  const conflict = ifAbsent
@@ -302,13 +326,21 @@ export function collectionsFake(list) {
302
326
  .toSorted(byOrder(order, types))
303
327
  .slice(0, limit)
304
328
  .map(saved),
305
- save: async ({ record, ifAbsent }, call) => {
329
+ save: async ({ record, ifAbsent, ifRecord }, call) => {
306
330
  const key = record[c.key];
331
+ if (ifRecord !== undefined) {
332
+ const previous = Object.hasOwn(records(), key) ? records()[key] : undefined;
333
+ if (!previous)
334
+ throw recordChanged();
335
+ if (previous.updatedBy === updatedBy(call) && sameJson(previous.record, record))
336
+ return saved(previous);
337
+ if (!sameJson(previous.record, ifRecord))
338
+ throw recordChanged();
339
+ }
307
340
  if (ifAbsent && Object.hasOwn(records(), key)) {
308
341
  const previous = records()[key];
309
342
  // Postgres jsonb ignores property order and omitted undefined fields.
310
- if (previous.updatedBy !== updatedBy(call) ||
311
- !isDeepStrictEqual(JSON.parse(JSON.stringify(previous.record)), JSON.parse(JSON.stringify(record))))
343
+ if (previous.updatedBy !== updatedBy(call) || !sameJson(previous.record, record))
312
344
  throw recordExists();
313
345
  return saved(previous);
314
346
  }
@@ -1 +1 @@
1
- {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
package/dist/shared.d.ts CHANGED
@@ -360,6 +360,7 @@ export interface CollectionApi<R> {
360
360
  save: OpFn<{
361
361
  record: R;
362
362
  ifAbsent?: boolean;
363
+ ifRecord?: Record<string, unknown>;
363
364
  }, Saved<R>>;
364
365
  delete: OpFn<{
365
366
  key: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanoma-ai/workflows",
3
- "version": "0.10.11",
3
+ "version": "0.10.12",
4
4
  "description": "Business processes as TypeScript functions, run durably on DBOS",
5
5
  "keywords": [
6
6
  "approvals",
package/src/collection.ts CHANGED
@@ -83,7 +83,13 @@ export interface Collection<
83
83
  readonly title?: string;
84
84
  readonly get: Op<typeof DATA_VENDOR, N, "get", { key: string }, Saved<RecordOf<F>> | null>;
85
85
  readonly list: Op<typeof DATA_VENDOR, N, "list", ListQuery<RecordOf<F>>, Saved<RecordOf<F>>[]>;
86
- readonly save: Op<typeof DATA_VENDOR, N, "save", { record: RecordOf<F>; ifAbsent?: boolean }, Saved<RecordOf<F>>>;
86
+ readonly save: Op<
87
+ typeof DATA_VENDOR,
88
+ N,
89
+ "save",
90
+ { record: RecordOf<F>; ifAbsent?: boolean; ifRecord?: Record<string, unknown> },
91
+ Saved<RecordOf<F>>
92
+ >;
87
93
  readonly delete: Op<typeof DATA_VENDOR, N, "delete", { key: string }, { deleted: boolean }>;
88
94
  }
89
95
 
@@ -205,7 +211,11 @@ function specsOf(name: string, key: string, fields: Record<string, Field>, recor
205
211
  effect: "write",
206
212
  idempotent: true,
207
213
  description: `Save a record of ${name}: added, or replacing the one with its ${key}; ifAbsent refuses a different existing record`,
208
- input: z.object({ record, ifAbsent: z.boolean().optional() }),
214
+ input: z
215
+ .object({ record, ifAbsent: z.boolean().optional(), ifRecord: z.record(z.string(), z.unknown()).optional() })
216
+ .refine((input) => !(input.ifAbsent && input.ifRecord !== undefined), {
217
+ message: "Choose ifAbsent or ifRecord, not both",
218
+ }),
209
219
  output: SAVED,
210
220
  target: ({ record: r }: { record: Record<string, string> }) => at(r[key]!),
211
221
  },
@@ -259,6 +269,15 @@ export function collectionsConnector(list: readonly Collection[]): Connector<typ
259
269
  const COLUMNS = "key, record, updated_at, updated_by";
260
270
  const recordExists = () =>
261
271
  new DriverError("Collection record already exists", { retryable: false, status: 409, vendorCode: "record_exists" });
272
+ const recordChanged = () =>
273
+ new DriverError("Collection record changed or is missing", {
274
+ retryable: false,
275
+ status: 409,
276
+ vendorCode: "record_changed",
277
+ });
278
+ const sameJson = (a: Record<string, unknown>, b: Record<string, unknown>) =>
279
+ isDeepStrictEqual(JSON.parse(JSON.stringify(a)), JSON.parse(JSON.stringify(b)));
280
+ type SaveInput = { record: Record<string, unknown>; ifAbsent?: boolean; ifRecord?: Record<string, unknown> };
262
281
  const RANGE = { gt: ">", gte: ">=", lt: "<", lte: "<=" } as const;
263
282
 
264
283
  interface Row {
@@ -298,7 +317,20 @@ export function collectionsDriver(list: readonly Collection[], store: { db(): Pr
298
317
  return row ? saved(row) : null;
299
318
  },
300
319
  list: async (listing: Listing) => (await query(...listSql(c, listing))).rows.map(saved),
301
- save: async ({ record, ifAbsent }: { record: Record<string, unknown>; ifAbsent?: boolean }, call) => {
320
+ save: async ({ record, ifAbsent, ifRecord }: SaveInput, call) => {
321
+ if (ifRecord !== undefined) {
322
+ // PostgreSQL locks and rechecks the predicate on a concurrent update. A lost-response
323
+ // retry may recover its own identical result, but never overwrite another actor's state.
324
+ const retry = "record = $3::jsonb AND updated_by = $4";
325
+ const sql = `UPDATE ${DATA_TABLE} SET record = $3::jsonb,
326
+ updated_at = CASE WHEN ${retry} THEN updated_at ELSE now() END, updated_by = $4
327
+ WHERE collection = $1 AND key = $2 AND (record = $5::jsonb OR (${retry}))
328
+ RETURNING ${COLUMNS}`;
329
+ const params = [c.name, record[c.key], JSON.stringify(record), updatedBy(call), JSON.stringify(ifRecord)];
330
+ const row = (await query(sql, params)).rows[0];
331
+ if (!row) throw recordChanged();
332
+ return saved(row);
333
+ }
302
334
  // The conflict row is locked by Postgres: never implement an insert-only claim as get + save.
303
335
  // An identical retry by the same actor keeps the first receipt and never overwrites later progress.
304
336
  const conflict = ifAbsent
@@ -444,16 +476,18 @@ export function collectionsFake(list: readonly Collection[]): Fake<CollectionsSt
444
476
  .toSorted(byOrder(order, types))
445
477
  .slice(0, limit)
446
478
  .map(saved),
447
- save: async ({ record, ifAbsent }: { record: Record<string, unknown>; ifAbsent?: boolean }, call) => {
479
+ save: async ({ record, ifAbsent, ifRecord }: SaveInput, call) => {
448
480
  const key = record[c.key] as string;
481
+ if (ifRecord !== undefined) {
482
+ const previous = Object.hasOwn(records(), key) ? records()[key]! : undefined;
483
+ if (!previous) throw recordChanged();
484
+ if (previous.updatedBy === updatedBy(call) && sameJson(previous.record, record)) return saved(previous);
485
+ if (!sameJson(previous.record, ifRecord)) throw recordChanged();
486
+ }
449
487
  if (ifAbsent && Object.hasOwn(records(), key)) {
450
488
  const previous = records()[key]!;
451
489
  // Postgres jsonb ignores property order and omitted undefined fields.
452
- if (
453
- previous.updatedBy !== updatedBy(call) ||
454
- !isDeepStrictEqual(JSON.parse(JSON.stringify(previous.record)), JSON.parse(JSON.stringify(record)))
455
- )
456
- throw recordExists();
490
+ if (previous.updatedBy !== updatedBy(call) || !sameJson(previous.record, record)) throw recordExists();
457
491
  return saved(previous);
458
492
  }
459
493
  const stored = {
package/src/shared.ts CHANGED
@@ -613,6 +613,6 @@ export type OpFn<I, O> = (input: I) => Promise<O>;
613
613
  export interface CollectionApi<R> {
614
614
  get: OpFn<{ key: string }, Saved<R> | null>;
615
615
  list(query?: ListQuery<R>): Promise<Saved<R>[]>;
616
- save: OpFn<{ record: R; ifAbsent?: boolean }, Saved<R>>;
616
+ save: OpFn<{ record: R; ifAbsent?: boolean; ifRecord?: Record<string, unknown> }, Saved<R>>;
617
617
  delete: OpFn<{ key: string }, { deleted: boolean }>;
618
618
  }