@sanoma-ai/workflows 0.9.1 → 0.10.1

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 (207) hide show
  1. package/README.md +193 -50
  2. package/SECRET-SUPPORT.md +33 -0
  3. package/dist/apply-steps.js +5 -2
  4. package/dist/apply-steps.js.map +1 -1
  5. package/dist/apply.d.ts +3 -0
  6. package/dist/apply.js +27 -13
  7. package/dist/apply.js.map +1 -1
  8. package/dist/approvals.d.ts +1 -0
  9. package/dist/approvals.js +6 -1
  10. package/dist/approvals.js.map +1 -1
  11. package/dist/apps.d.ts +13 -24
  12. package/dist/apps.js +69 -68
  13. package/dist/apps.js.map +1 -1
  14. package/dist/ast.d.ts +9 -7
  15. package/dist/ast.js +2 -0
  16. package/dist/ast.js.map +1 -1
  17. package/dist/authentication.d.ts +54 -0
  18. package/dist/authentication.js +138 -0
  19. package/dist/authentication.js.map +1 -0
  20. package/dist/call-workflow.d.ts +5 -0
  21. package/dist/call-workflow.js +4 -3
  22. package/dist/call-workflow.js.map +1 -1
  23. package/dist/call.d.ts +3 -2
  24. package/dist/call.js +36 -7
  25. package/dist/call.js.map +1 -1
  26. package/dist/cedar.js +14 -1
  27. package/dist/cedar.js.map +1 -1
  28. package/dist/change-steps.js +7 -5
  29. package/dist/change-steps.js.map +1 -1
  30. package/dist/change.d.ts +7 -0
  31. package/dist/change.js +7 -0
  32. package/dist/change.js.map +1 -1
  33. package/dist/client.d.ts +62 -10
  34. package/dist/client.js +272 -47
  35. package/dist/client.js.map +1 -1
  36. package/dist/collection.d.ts +7 -0
  37. package/dist/collection.js +5 -2
  38. package/dist/collection.js.map +1 -1
  39. package/dist/config.d.ts +16 -4
  40. package/dist/config.js +89 -21
  41. package/dist/config.js.map +1 -1
  42. package/dist/connection.d.ts +389 -0
  43. package/dist/connection.js +657 -0
  44. package/dist/connection.js.map +1 -0
  45. package/dist/credentials.d.ts +7 -53
  46. package/dist/credentials.js +84 -247
  47. package/dist/credentials.js.map +1 -1
  48. package/dist/db.js +34 -2
  49. package/dist/db.js.map +1 -1
  50. package/dist/define.d.ts +9 -2
  51. package/dist/define.js.map +1 -1
  52. package/dist/definitions.d.ts +20 -0
  53. package/dist/definitions.js +16 -0
  54. package/dist/definitions.js.map +1 -0
  55. package/dist/deployment-key.d.ts +2 -0
  56. package/dist/deployment-key.js +22 -0
  57. package/dist/deployment-key.js.map +1 -0
  58. package/dist/describe.d.ts +15 -175
  59. package/dist/describe.js +122 -35
  60. package/dist/describe.js.map +1 -1
  61. package/dist/description.d.ts +532 -0
  62. package/dist/description.js +381 -0
  63. package/dist/description.js.map +1 -0
  64. package/dist/direct.js +7 -0
  65. package/dist/direct.js.map +1 -1
  66. package/dist/drift.d.ts +1 -1
  67. package/dist/drift.js +1 -1
  68. package/dist/drift.js.map +1 -1
  69. package/dist/env.d.ts +2 -0
  70. package/dist/env.js +2 -2
  71. package/dist/env.js.map +1 -1
  72. package/dist/fake.d.ts +13 -1
  73. package/dist/fake.js +70 -0
  74. package/dist/fake.js.map +1 -1
  75. package/dist/index.d.ts +11 -3
  76. package/dist/index.js +10 -2
  77. package/dist/index.js.map +1 -1
  78. package/dist/ledger.d.ts +2 -0
  79. package/dist/ledger.js +1 -1
  80. package/dist/ledger.js.map +1 -1
  81. package/dist/lint.d.ts +0 -9
  82. package/dist/lint.js +2 -17
  83. package/dist/lint.js.map +1 -1
  84. package/dist/load.d.ts +85 -0
  85. package/dist/load.js +391 -0
  86. package/dist/load.js.map +1 -0
  87. package/dist/lockfile.d.ts +2 -0
  88. package/dist/lockfile.js +8 -3
  89. package/dist/lockfile.js.map +1 -1
  90. package/dist/op.d.ts +22 -5
  91. package/dist/op.js +20 -2
  92. package/dist/op.js.map +1 -1
  93. package/dist/outline.d.ts +5 -0
  94. package/dist/outline.js +46 -5
  95. package/dist/outline.js.map +1 -1
  96. package/dist/paths.d.ts +18 -2
  97. package/dist/paths.js +19 -7
  98. package/dist/paths.js.map +1 -1
  99. package/dist/plugin.d.ts +0 -11
  100. package/dist/plugin.js +3 -18
  101. package/dist/plugin.js.map +1 -1
  102. package/dist/policy.d.ts +2 -0
  103. package/dist/policy.js.map +1 -1
  104. package/dist/resource.d.ts +10 -4
  105. package/dist/resource.js +11 -4
  106. package/dist/resource.js.map +1 -1
  107. package/dist/resources.d.ts +33 -76
  108. package/dist/resources.js +219 -227
  109. package/dist/resources.js.map +1 -1
  110. package/dist/run.d.ts +4 -0
  111. package/dist/run.js.map +1 -1
  112. package/dist/sandbox.d.ts +5 -2
  113. package/dist/sandbox.js +56 -7
  114. package/dist/sandbox.js.map +1 -1
  115. package/dist/scenario.d.ts +5 -0
  116. package/dist/scenario.js +3 -2
  117. package/dist/scenario.js.map +1 -1
  118. package/dist/scenarios.js +7 -1
  119. package/dist/scenarios.js.map +1 -1
  120. package/dist/schema.js +8 -0
  121. package/dist/schema.js.map +1 -1
  122. package/dist/secret-store-check.d.ts +11 -0
  123. package/dist/secret-store-check.js +76 -0
  124. package/dist/secret-store-check.js.map +1 -0
  125. package/dist/secret-store.d.ts +106 -0
  126. package/dist/secret-store.js +228 -0
  127. package/dist/secret-store.js.map +1 -0
  128. package/dist/secret.d.ts +2 -0
  129. package/dist/secret.js +32 -0
  130. package/dist/secret.js.map +1 -1
  131. package/dist/shared.d.ts +21 -11
  132. package/dist/shared.js +41 -7
  133. package/dist/shared.js.map +1 -1
  134. package/dist/sites.d.ts +4 -93
  135. package/dist/sites.js +76 -84
  136. package/dist/sites.js.map +1 -1
  137. package/dist/steps.d.ts +3 -0
  138. package/dist/steps.js.map +1 -1
  139. package/dist/version.d.ts +2 -1
  140. package/dist/version.js +2 -1
  141. package/dist/version.js.map +1 -1
  142. package/dist/wakeup-driver.js +15 -6
  143. package/dist/wakeup-driver.js.map +1 -1
  144. package/dist/worker.js +12 -8
  145. package/dist/worker.js.map +1 -1
  146. package/dist/writer.d.ts +53 -14
  147. package/dist/writer.js +113 -43
  148. package/dist/writer.js.map +1 -1
  149. package/oxlint.json +1 -5
  150. package/package.json +6 -1
  151. package/src/apply-steps.ts +5 -2
  152. package/src/apply.ts +54 -21
  153. package/src/approvals.ts +7 -1
  154. package/src/apps.ts +71 -86
  155. package/src/ast.ts +6 -6
  156. package/src/authentication.ts +191 -0
  157. package/src/call-workflow.ts +5 -4
  158. package/src/call.ts +52 -9
  159. package/src/cedar.ts +14 -1
  160. package/src/change-steps.ts +7 -4
  161. package/src/change.ts +10 -0
  162. package/src/client.ts +346 -45
  163. package/src/collection.ts +10 -2
  164. package/src/config.ts +107 -19
  165. package/src/connection.ts +912 -0
  166. package/src/credentials.ts +94 -281
  167. package/src/db.ts +34 -2
  168. package/src/define.ts +7 -2
  169. package/src/definitions.ts +31 -0
  170. package/src/deployment-key.ts +23 -0
  171. package/src/describe.ts +150 -227
  172. package/src/description.ts +426 -0
  173. package/src/direct.ts +7 -0
  174. package/src/drift.ts +10 -2
  175. package/src/env.ts +4 -2
  176. package/src/fake.ts +71 -0
  177. package/src/index.ts +53 -1
  178. package/src/ledger.ts +3 -1
  179. package/src/lint.ts +2 -17
  180. package/src/load.ts +466 -0
  181. package/src/lockfile.ts +10 -3
  182. package/src/op.ts +41 -7
  183. package/src/outline.ts +53 -7
  184. package/src/paths.ts +21 -6
  185. package/src/plugin.ts +3 -24
  186. package/src/policy.ts +2 -0
  187. package/src/resource.ts +24 -6
  188. package/src/resources.ts +246 -301
  189. package/src/run.ts +4 -0
  190. package/src/sandbox.ts +61 -7
  191. package/src/scenario.ts +24 -6
  192. package/src/scenarios.ts +7 -1
  193. package/src/schema.ts +10 -0
  194. package/src/secret-store-check.ts +93 -0
  195. package/src/secret-store.ts +314 -0
  196. package/src/secret.ts +29 -0
  197. package/src/shared.ts +44 -10
  198. package/src/sites.ts +85 -179
  199. package/src/steps.ts +3 -2
  200. package/src/version.ts +2 -1
  201. package/src/wakeup-driver.ts +22 -6
  202. package/src/worker.ts +12 -8
  203. package/src/writer.ts +145 -56
  204. package/dist/datafile.d.ts +0 -97
  205. package/dist/datafile.js +0 -479
  206. package/dist/datafile.js.map +0 -1
  207. package/src/datafile.ts +0 -601
package/dist/writer.js CHANGED
@@ -1,8 +1,40 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- import { parse } from "./ast.js";
4
- import { isReference, keyName, readDataFile, SECRET_ENTRIES, } from "./datafile.js";
3
+ import { keyName, parse } from "./ast.js";
4
+ import { SECRET_ENTRIES } from "./paths.js";
5
5
  import { isSecret } from "./secret.js";
6
+ // The data-file writer: what the app's Adopt and its forms' Save, and setting up a company, write
7
+ // into a company's files. A file is changed in place, one declaration at a time, and everything
8
+ // outside that declaration is kept byte for byte; what is written is formatted with oxfmt, under
9
+ // the repository's own options, so it reads as if a person had written it and formatted it. Files
10
+ // are read by loading them; the writer parses, and changes only what is written out as a literal.
11
+ /** A name in a data file that refers to a declared resource: one imported from a data file, or exported by this one. */
12
+ export class Reference {
13
+ name;
14
+ constructor(name) {
15
+ this.name = name;
16
+ }
17
+ }
18
+ const REFERENCE = Symbol.for("sanoma.reference");
19
+ Object.defineProperty(Reference.prototype, REFERENCE, { value: true });
20
+ /** True for a `Reference`, made by any copy of this package: read by a registered symbol, not `instanceof`. */
21
+ export const isReference = (value) => typeof value === "object" && value !== null && REFERENCE in value;
22
+ /**
23
+ * Why `setFields` will not write a field: the file computes what is there (a name, a call, a
24
+ * spread), or the declaration is not an object literal, so only a person editing the code can
25
+ * change it. `reason` says which, for the form that asked.
26
+ */
27
+ export class NotLiteral extends Error {
28
+ reason;
29
+ /** The field the file computes, by dotted path; absent when the declaration itself is no object literal. */
30
+ field;
31
+ constructor(reason, field) {
32
+ super(reason);
33
+ this.name = "NotLiteral";
34
+ this.reason = reason;
35
+ this.field = field;
36
+ }
37
+ }
6
38
  /**
7
39
  * oxfmt's options from `<root>/.oxfmtrc.json`, what `oxfmt` itself reads there, less what only
8
40
  * its CLI uses (`ignorePatterns`, `overrides`); none, oxfmt's defaults, without the file.
@@ -21,19 +53,22 @@ export function formatOptions(root) {
21
53
  return options;
22
54
  }
23
55
  /**
24
- * `source`, a data file's text, with fields of its resource `exportName` set to new values:
56
+ * `source`, a company file's text, with fields of its declaration `exportName` set to new values:
25
57
  * `fields` by dotted path, a list item's with its index, as a drift report names them
26
- * (`required_pull_request_reviews.0.dismiss_stale_reviews`). A field the declaration does not
27
- * have is added at the end of the object that should hold it. Only that `export const` changes:
28
- * it is formatted with oxfmt under `options` (`formatOptions`), and every other byte of the file
29
- * stays as it was.
58
+ * (`required_pull_request_reviews.0.dismiss_stale_reviews`). The declaration is the object
59
+ * literal of `export const <exportName> = …` (or `export default …` for `"default"`): the object
60
+ * itself, or the first argument of the call it is (`github.repository({ … })`,
61
+ * `defineSite({ … })`). A field the declaration does not have is added at the end of the object
62
+ * that should hold it. Only that statement changes: it is formatted with oxfmt under `options`
63
+ * (`formatOptions`), and every other byte of the file stays as it was.
30
64
  *
31
65
  * A value naming a secret adds `import { secret } from "sanoma/resources"` after the file's
32
66
  * imports when it has none.
33
67
  *
34
- * Throws when the file does not parse, declares no such resource, or a path cannot be set: it
35
- * runs through a value that is not an object or a list, or ends at a reference to another
36
- * resource (a person changes a reference; a vendor's value never replaces one).
68
+ * Throws `NotLiteral` when the declaration is not an object literal, or a path reaches a value the
69
+ * file computes (a name, such as a reference to another resource, a call, a spread): a person
70
+ * changes those in the code. Throws an `Error` when the file does not parse, has no such export,
71
+ * or a path runs through a literal that is not an object or a list.
37
72
  */
38
73
  export async function setFields(source, exportName, fields, options = {}) {
39
74
  let text = source;
@@ -49,13 +84,12 @@ export async function setFields(source, exportName, fields, options = {}) {
49
84
  const formatted = await format(text.slice(start, end), options);
50
85
  return text.slice(0, start) + formatted.trimEnd() + text.slice(end);
51
86
  }
52
- /** What a data file imports `secret` from when it names one (`readDataFile` lists no such import). */
87
+ /** What a data file imports `secret` from when it names one. */
53
88
  const SECRET_IMPORT = { source: "sanoma/resources", imported: "secret", local: "secret" };
54
89
  /**
55
90
  * A whole data file: the imports, one per source, then each resource as `export const`, then
56
- * `export default` naming them all, formatted with oxfmt under `options`. `readDataFile` reads it
57
- * back as it was given: what `readDataFile` returns renders the file again. A file whose values
58
- * name a secret also imports `secret` from "sanoma/resources".
91
+ * `export default` naming them all, formatted with oxfmt under `options`: loaded, it declares
92
+ * what it was given. A file whose values name a secret also imports `secret` from "sanoma/resources".
59
93
  */
60
94
  export async function renderDataFile({ imports, exports }, options = {}) {
61
95
  const names = new Map();
@@ -69,9 +103,9 @@ export async function renderDataFile({ imports, exports }, options = {}) {
69
103
  const parts = [
70
104
  [...names].map(([source, list]) => `import { ${list.join(", ")} } from ${JSON.stringify(source)};`).join("\n"),
71
105
  // The top-level object on lines of its own, so oxfmt keeps it expanded as people write it.
72
- ...exports.map(({ name, vendor, type, desired }) => {
106
+ ...exports.map(({ name, vendor, type, desired, connection }) => {
73
107
  const body = Object.entries(desired).map(([key, value]) => `${keyOf(key)}: ${literal(value)},\n`);
74
- return `export const ${name} = ${vendor}.${type}({${body.length ? `\n${body.join("")}` : ""}});`;
108
+ return `export const ${name} = ${vendor}.${type}({${body.length ? `\n${body.join("")}` : ""}}${connection ? `, ${JSON.stringify({ connection })}` : ""});`;
75
109
  }),
76
110
  `export default [${exports.map((e) => e.name).join(", ")}];`,
77
111
  ];
@@ -88,18 +122,35 @@ function withSecretImport(text) {
88
122
  const line = `import { ${SECRET_IMPORT.local} } from ${JSON.stringify(SECRET_IMPORT.source)};`;
89
123
  return at ? `${text.slice(0, at)}\n${line}${text.slice(at)}` : `${line}\n${text}`;
90
124
  }
91
- /** The `export const` of the resource `name` in `text`, and the object literal its constructor takes. */
125
+ /**
126
+ * The statement that exports `name` in `text` (`export const <name> = …`, or `export default …`
127
+ * for `"default"`), and the object literal it declares: the value itself, or the first argument
128
+ * of the call it is.
129
+ */
92
130
  function declarationOf(text, name) {
93
- // The name is never resolved, and a relative import is checked against the file's own directory.
94
- const filename = "/data-file.ts";
95
- const { program, errors } = parse(filename, text);
131
+ const { program, errors } = parse("/data-file.ts", text);
96
132
  if (errors.length)
97
133
  throw new Error(`The data file does not parse: ${errors[0].message}`);
98
- const found = readDataFile(program, filename).exports.find((e) => e.name === name);
99
- if (!found)
100
- throw new Error(`The data file declares no resource ${name}`);
101
- const statement = program.body.find((s) => s.start === found.start);
102
- return { statement, object: statement.declaration.declarations[0].init.arguments[0] };
134
+ for (const statement of program.body) {
135
+ const value = exportedValue(statement, name);
136
+ if (value === undefined)
137
+ continue;
138
+ const object = value?.type === "CallExpression" ? value.arguments[0] : value;
139
+ if (object?.type !== "ObjectExpression")
140
+ throw new NotLiteral(`${name} is not an object literal: edit it in code`);
141
+ return { statement, object };
142
+ }
143
+ throw new Error(`The data file declares no resource ${name}`);
144
+ }
145
+ /** The value `statement` exports as `name` (null for `export let x;`), or undefined when it exports no such name. */
146
+ function exportedValue(statement, name) {
147
+ if (name === "default")
148
+ return statement.type === "ExportDefaultDeclaration" ? statement.declaration : undefined;
149
+ if (statement.type !== "ExportNamedDeclaration" || statement.declaration?.type !== "VariableDeclaration") {
150
+ return undefined;
151
+ }
152
+ const declarator = statement.declaration.declarations.find((d) => d.id.type === "Identifier" && d.id.name === name);
153
+ return declarator && declarator.init;
103
154
  }
104
155
  /**
105
156
  * What setting `path` to `value` in `object` replaces, and with what. A key may hold a dot
@@ -110,7 +161,8 @@ function editAt(object, path, value) {
110
161
  const keys = path.split(".");
111
162
  let node = object;
112
163
  for (let i = 0; i < keys.length;) {
113
- if (node.type === "ObjectExpression") {
164
+ // A spread may hold the field, or move the list's items: what is there is the code's.
165
+ if (node.type === "ObjectExpression" && !node.properties.some(isSpread)) {
114
166
  const names = new Map(node.properties.map((p) => [fieldName(p), p]));
115
167
  let j = keys.length;
116
168
  while (j > i && !names.has(keys.slice(i, j).join(".")))
@@ -120,32 +172,50 @@ function editAt(object, path, value) {
120
172
  node = names.get(keys.slice(i, j).join(".")).value;
121
173
  i = j;
122
174
  }
123
- else if (node.type === "ArrayExpression" && /^\d+$/.test(keys[i]) && node.elements[Number(keys[i])]) {
175
+ else if (node.type === "ArrayExpression" &&
176
+ !node.elements.some(isSpread) &&
177
+ /^\d+$/.test(keys[i]) &&
178
+ node.elements[Number(keys[i])]) {
124
179
  node = node.elements[Number(keys[i])];
125
180
  i++;
126
181
  }
182
+ else if (computed(node)) {
183
+ throw computedAt(keys.slice(0, Math.max(i, 1)).join("."));
184
+ }
127
185
  else {
128
186
  const at = keys.slice(0, i).join(".");
129
187
  throw new Error(`Cannot set ${path}: ${at} is not an object or a list with item ${keys[i]}`);
130
188
  }
131
189
  }
132
- const named = referenceIn(node);
133
- if (named) {
134
- throw new Error(`Cannot set ${path}: it names the resource ${named}; change a reference in the file itself`);
135
- }
190
+ if (computed(node))
191
+ throw computedAt(path);
136
192
  return { start: node.start, end: node.end, replacement: literal(value) };
137
193
  }
138
- /** The first resource a value names, itself or anywhere inside it: a vendor's value never replaces one. */
139
- function referenceIn(node) {
140
- if (node.type === "Identifier")
141
- return node.name;
142
- const items = node.type === "ArrayExpression" ? node.elements : node.type === "ObjectExpression" ? node.properties : [];
143
- for (const item of items) {
144
- const named = item && referenceIn(item.type === "Property" ? item.value : item);
145
- if (named)
146
- return named;
194
+ /** The refusal of a field whose value the file computes. */
195
+ const computedAt = (field) => new NotLiteral(`the value of ${field} is computed in the file`, field);
196
+ const isSpread = (node) => node?.type === "SpreadElement";
197
+ /**
198
+ * True when a value is (or holds) code rather than a literal: a name (a reference to another
199
+ * resource, a constant), a call other than `secret(…)`, a spread, a template with expressions.
200
+ * A person changes those in the file; a form's or a vendor's value never replaces one.
201
+ */
202
+ function computed(node) {
203
+ switch (node.type) {
204
+ case "Literal":
205
+ return false;
206
+ case "TemplateLiteral":
207
+ return node.expressions.length > 0;
208
+ case "UnaryExpression":
209
+ return !["-", "+"].includes(node.operator) || node.argument.type !== "Literal";
210
+ case "ArrayExpression":
211
+ return node.elements.some((item) => item === null || computed(item));
212
+ case "ObjectExpression":
213
+ return node.properties.some((p) => p.type !== "Property" || p.computed || p.kind !== "init" || p.method || computed(p.value));
214
+ case "CallExpression":
215
+ return !(node.callee.type === "Identifier" && node.callee.name === "secret" && !node.arguments.some(computed));
216
+ default:
217
+ return true;
147
218
  }
148
- return undefined;
149
219
  }
150
220
  /**
151
221
  * The edit that adds `keys` (the first missing, then any under it) with `value` at the end of
@@ -162,14 +232,14 @@ function added(object, [key, ...under], path, value) {
162
232
  ? { start: last.end, end: last.end, replacement: `, ${field}` }
163
233
  : { start: object.start, end: object.end, replacement: `{ ${field} }` };
164
234
  }
165
- /** A property's name, as `readDataFile` reads it. */
235
+ /** A property's name: undefined for a computed key or a spread. */
166
236
  const fieldName = (p) => (p.type === "Property" && !p.computed ? keyName(p.key) : undefined);
167
237
  /** A field's name in source: bare when it can be, else a string. */
168
238
  const keyOf = (key) => (/^[A-Za-z_$][\w$]*$/.test(key) ? key : JSON.stringify(key));
169
239
  /** True when a value names a secret, itself or anywhere inside it. */
170
240
  const holdsSecret = (value) => isSecret(value) ||
171
241
  (typeof value === "object" && value !== null && !isReference(value) && Object.values(value).some(holdsSecret));
172
- /** A value in the data-file subset, as source, on one line: oxfmt lays it out. */
242
+ /** A value as source, on one line: oxfmt lays it out. */
173
243
  function literal(value) {
174
244
  if (isReference(value))
175
245
  return value.name;
@@ -1 +1 @@
1
- {"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"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"}
package/oxlint.json CHANGED
@@ -94,6 +94,7 @@
94
94
  "@sanoma-ai/connector-*/fake",
95
95
  "@sanoma-ai/connector-*/driver",
96
96
  "@sanoma-ai/connector-*/remote",
97
+ "@sanoma-ai/connector-*/vault",
97
98
  "@sanoma-ai/workflows/describe",
98
99
  "@sanoma-ai/workflows/fake",
99
100
  "@sanoma-ai/workflows/plugin",
@@ -107,11 +108,6 @@
107
108
  }
108
109
  ]
109
110
  }
110
- },
111
- {
112
- "files": ["resources/**", "apps/*/resources/**"],
113
- "jsPlugins": ["./dist/plugin.js"],
114
- "rules": { "sanoma/data-file": "error" }
115
111
  }
116
112
  ]
117
113
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanoma-ai/workflows",
3
- "version": "0.9.1",
3
+ "version": "0.10.1",
4
4
  "description": "Business processes as TypeScript functions, run durably on DBOS",
5
5
  "keywords": [
6
6
  "approvals",
@@ -24,6 +24,7 @@
24
24
  "!src/AGENTS.md",
25
25
  "oxlint.json",
26
26
  "README.md",
27
+ "SECRET-SUPPORT.md",
27
28
  "LICENSE"
28
29
  ],
29
30
  "type": "module",
@@ -43,6 +44,10 @@
43
44
  "types": "./dist/describe.d.ts",
44
45
  "default": "./dist/describe.js"
45
46
  },
47
+ "./description": {
48
+ "types": "./dist/description.d.ts",
49
+ "default": "./dist/description.js"
50
+ },
46
51
  "./fake": {
47
52
  "types": "./dist/fake.d.ts",
48
53
  "default": "./dist/fake.js"
@@ -69,11 +69,14 @@ export function applySteps(
69
69
  DBOS.runStep(
70
70
  async (): Promise<Approver | undefined> => {
71
71
  const run = runNow();
72
- for (const { op: id, input } of calls) {
72
+ for (const { op: id, input, connection } of calls) {
73
73
  const op = run.state.ops.get(id)!;
74
74
  // Parsed as the call will be, so the policy sees the same input with its defaults.
75
75
  const parsed = op.input.safeParse(input);
76
- const decision = await decide(run, op, parsed.success ? parsed.data : input);
76
+ const selected = run.sandbox
77
+ ? undefined
78
+ : await run.state.connections?.select(op.vendor, connection, run.actor.id);
79
+ const decision = await decide(run, op, parsed.success ? parsed.data : input, selected);
77
80
  if (decision.kind === "approve") return decision.approver;
78
81
  }
79
82
  return undefined;
package/src/apply.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { ConnectionRef } from "./connection.ts";
1
2
  import { z } from "zod";
2
3
  import { type Approver, defineWorkflow, type WorkflowDefinition } from "./define.ts";
3
4
  import {
@@ -63,7 +64,7 @@ export type ApplyInput = z.infer<typeof ApplyInput>;
63
64
  * object its identity `found` or the input `given`, ask about a `gone` object or an `orphan`ed
64
65
  * binding (unless `answer`ed), or `none`.
65
66
  */
66
- export type PlanStep = { id: string; vendor: string; type: string } & (
67
+ export type PlanStep = { id: string; vendor: string; type: string; connection?: ConnectionRef } & (
67
68
  | { action: "create"; planned: Record<string, unknown>; unknown: string[] }
68
69
  | { action: "update" | "replace"; binding: string; fields: DriftField[]; replace: string[] }
69
70
  | { action: "bind"; binding: string; source: "found" | "given" }
@@ -114,6 +115,7 @@ export interface ApplyDeclared extends DriftDeclared {
114
115
  export interface PlannedCall {
115
116
  op: string;
116
117
  input: unknown;
118
+ connection?: ConnectionRef;
117
119
  }
118
120
 
119
121
  /** What apply does that is no vendor call, each a step of its own (`apply-steps.ts`). */
@@ -155,7 +157,7 @@ type DeleteOp = Op<string, string, "delete", { id: string }, { id: string; gone:
155
157
  type ApplyUse = ImportOp | PlanOp | CreateOp | UpdateOp | DeleteOp | ResolveOp | "approval" | "sleep";
156
158
 
157
159
  /** An operation as `ctx` gives it, called by its id. */
158
- type Call = (input: unknown) => Promise<unknown>;
160
+ type Call = (input: unknown, options?: { connection?: ConnectionRef }) => Promise<unknown>;
159
161
 
160
162
  /** What a step's resource is called in a problem: its file, and its export. */
161
163
  const problemOf = (id: string, message: string): ResourceProblem => ({
@@ -369,13 +371,24 @@ function writesOf(
369
371
  const made = { id: `new:${at}`, export: exportOf(keyOf(step)) };
370
372
  const after = (types.get(at)?.afterCreate ?? [])
371
373
  .filter((hook) => ops.get(hook.op)?.effect === "write")
372
- .map((hook) => ({ op: hook.op, input: hook.input(made) }));
373
- return [{ op: `${at}.create`, input: { desired: desired.get(step.id) } }, ...after];
374
+ .map((hook) => ({
375
+ op: hook.op,
376
+ input: hook.input(made),
377
+ ...(hook.op.startsWith(`${step.vendor}.`) && step.connection && { connection: step.connection }),
378
+ }));
379
+ return [{ op: `${at}.create`, connection: step.connection, input: { desired: desired.get(step.id) } }, ...after];
374
380
  }
375
- if (run === "delete" && "binding" in step) return [{ op: `${at}.delete`, input: { id: step.binding } }];
381
+ if (run === "delete" && "binding" in step)
382
+ return [{ op: `${at}.delete`, connection: step.connection, input: { id: step.binding } }];
376
383
  if (run !== "update" || (step.action !== "update" && step.action !== "replace")) return [];
377
384
  const expect = { action: step.action, replace: step.replace };
378
- return [{ op: `${at}.update`, input: { id: step.binding, desired: desired.get(step.id), expect } }];
385
+ return [
386
+ {
387
+ op: `${at}.update`,
388
+ connection: step.connection,
389
+ input: { id: step.binding, desired: desired.get(step.id), expect },
390
+ },
391
+ ];
379
392
  });
380
393
  }
381
394
 
@@ -474,7 +487,12 @@ export function applyWorkflow(
474
487
  if (!("id" in by)) found.set(resource.id, by);
475
488
  else {
476
489
  try {
477
- found.set(resource.id, observed(await ctx[resource.vendor]![resource.type]!.import({ id: by.id })));
490
+ found.set(
491
+ resource.id,
492
+ observed(
493
+ await ctx[resource.vendor]![resource.type]!.import({ id: by.id }, { connection: resource.connection }),
494
+ ),
495
+ );
478
496
  } catch (err) {
479
497
  if (isRunControlError(err)) throw err;
480
498
  found.set(resource.id, { error: errorMessage(err) });
@@ -529,7 +547,11 @@ export function applyWorkflow(
529
547
  : decide(resource, result, found.get(resource.id)!, input, desired.get(resource.id)!, types, usable);
530
548
  if (next.ask !== undefined) {
531
549
  try {
532
- const answer = fromPlan(resource, result, await ctx[resource.vendor]![resource.type]!.plan(next.ask));
550
+ const answer = fromPlan(
551
+ resource,
552
+ result,
553
+ await ctx[resource.vendor]![resource.type]!.plan(next.ask, { connection: resource.connection }),
554
+ );
533
555
  if (answer.step) planned.push(answer.step);
534
556
  if (answer.problem) problems.push(answer.problem);
535
557
  } catch (err) {
@@ -547,6 +569,8 @@ export function applyWorkflow(
547
569
  steps: [...planned, ...orphaned.steps],
548
570
  };
549
571
 
572
+ for (const step of plan.steps)
573
+ step.connection = declarations.get(step.id)?.connection ?? locked[keyOf(step)]?.connection;
550
574
  const writes = writesOf(plan, desired, types, ops);
551
575
  const approver = writes.length ? await steps.holds(writes) : undefined;
552
576
  if (approver !== undefined) {
@@ -569,24 +593,31 @@ export function applyWorkflow(
569
593
  let state: State | undefined;
570
594
  try {
571
595
  if (todo === "create") {
572
- const made = await ctx[step.vendor]![step.type]!.create({
573
- desired: desiredOf(declared!, types, bindings, hosts, urls),
574
- });
575
- bindings[key] = { type, id: made.id };
596
+ const made = await ctx[step.vendor]![step.type]!.create(
597
+ {
598
+ desired: desiredOf(declared!, types, bindings, hosts, urls),
599
+ },
600
+ { connection: step.connection },
601
+ );
602
+ bindings[key] = { type, id: made.id, ...(step.connection && { connection: step.connection }) };
576
603
  state = made.state;
577
604
  } else if (todo === "update" && (step.action === "update" || step.action === "replace")) {
578
605
  const expect = { action: step.action, replace: step.replace };
579
- const changed = await ctx[step.vendor]![step.type]!.update({
580
- id: binding,
581
- desired: desiredOf(declared!, types, bindings, hosts, urls),
582
- expect,
583
- });
584
- bindings[key] = { type, id: changed.id };
606
+ const changed = await ctx[step.vendor]![step.type]!.update(
607
+ {
608
+ id: binding,
609
+ desired: desiredOf(declared!, types, bindings, hosts, urls),
610
+ expect,
611
+ },
612
+ { connection: step.connection },
613
+ );
614
+ bindings[key] = { type, id: changed.id, ...(step.connection && { connection: step.connection }) };
585
615
  state = changed.state;
586
616
  } else if (todo === "delete") {
587
- await ctx[step.vendor]![step.type]!.delete({ id: binding });
617
+ await ctx[step.vendor]![step.type]!.delete({ id: binding }, { connection: step.connection });
588
618
  delete bindings[key];
589
- } else if (todo === "bind") bindings[key] = { type, id: binding };
619
+ } else if (todo === "bind")
620
+ bindings[key] = { type, id: binding, ...(step.connection && { connection: step.connection }) };
590
621
  else if (todo === "forget") delete bindings[key];
591
622
  if (state && declared) answersAt(declared, state);
592
623
  const after = bindings[key];
@@ -615,7 +646,9 @@ export function applyWorkflow(
615
646
  ) {
616
647
  if (call > 0) await ctx.sleep({ seconds: AFTER_CREATE_SECONDS });
617
648
  try {
618
- output = await (ctx[vendor]![group] as unknown as Record<string, Call>)[name]!(given);
649
+ output = await (ctx[vendor]![group] as unknown as Record<string, Call>)[name]!(given, {
650
+ connection: vendor === step.vendor ? step.connection : undefined,
651
+ });
619
652
  failed = undefined;
620
653
  } catch (err) {
621
654
  if (isRunControlError(err) || !hook.until) throw err;
package/src/approvals.ts CHANGED
@@ -82,6 +82,7 @@ export interface HeldCall {
82
82
  op: string;
83
83
  seq?: number;
84
84
  input: unknown;
85
+ connection?: string;
85
86
  reasons?: string[] | undefined;
86
87
  }
87
88
 
@@ -109,7 +110,12 @@ export async function awaitApproval(
109
110
  ...(req.details === undefined ? {} : { details: req.details }),
110
111
  requestedBy: held ? "policy" : "workflow",
111
112
  covers,
112
- ...(held && { op: held.op, ...heldOf(held), input: held.input }),
113
+ ...(held && {
114
+ op: held.op,
115
+ ...heldOf(held),
116
+ input: held.input,
117
+ ...(held.connection && { connection: held.connection }),
118
+ }),
113
119
  status: "pending",
114
120
  requestedAt: 0,
115
121
  refused: [],