@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.
- package/README.md +193 -50
- package/SECRET-SUPPORT.md +33 -0
- package/dist/apply-steps.js +5 -2
- package/dist/apply-steps.js.map +1 -1
- package/dist/apply.d.ts +3 -0
- package/dist/apply.js +27 -13
- package/dist/apply.js.map +1 -1
- package/dist/approvals.d.ts +1 -0
- package/dist/approvals.js +6 -1
- package/dist/approvals.js.map +1 -1
- package/dist/apps.d.ts +13 -24
- package/dist/apps.js +69 -68
- package/dist/apps.js.map +1 -1
- package/dist/ast.d.ts +9 -7
- package/dist/ast.js +2 -0
- package/dist/ast.js.map +1 -1
- package/dist/authentication.d.ts +54 -0
- package/dist/authentication.js +138 -0
- package/dist/authentication.js.map +1 -0
- package/dist/call-workflow.d.ts +5 -0
- package/dist/call-workflow.js +4 -3
- package/dist/call-workflow.js.map +1 -1
- package/dist/call.d.ts +3 -2
- package/dist/call.js +36 -7
- package/dist/call.js.map +1 -1
- package/dist/cedar.js +14 -1
- package/dist/cedar.js.map +1 -1
- package/dist/change-steps.js +7 -5
- package/dist/change-steps.js.map +1 -1
- package/dist/change.d.ts +7 -0
- package/dist/change.js +7 -0
- package/dist/change.js.map +1 -1
- package/dist/client.d.ts +62 -10
- package/dist/client.js +272 -47
- package/dist/client.js.map +1 -1
- package/dist/collection.d.ts +7 -0
- package/dist/collection.js +5 -2
- package/dist/collection.js.map +1 -1
- package/dist/config.d.ts +16 -4
- package/dist/config.js +89 -21
- package/dist/config.js.map +1 -1
- package/dist/connection.d.ts +389 -0
- package/dist/connection.js +657 -0
- package/dist/connection.js.map +1 -0
- package/dist/credentials.d.ts +7 -53
- package/dist/credentials.js +84 -247
- package/dist/credentials.js.map +1 -1
- package/dist/db.js +34 -2
- package/dist/db.js.map +1 -1
- package/dist/define.d.ts +9 -2
- package/dist/define.js.map +1 -1
- package/dist/definitions.d.ts +20 -0
- package/dist/definitions.js +16 -0
- package/dist/definitions.js.map +1 -0
- package/dist/deployment-key.d.ts +2 -0
- package/dist/deployment-key.js +22 -0
- package/dist/deployment-key.js.map +1 -0
- package/dist/describe.d.ts +15 -175
- package/dist/describe.js +122 -35
- package/dist/describe.js.map +1 -1
- package/dist/description.d.ts +532 -0
- package/dist/description.js +381 -0
- package/dist/description.js.map +1 -0
- package/dist/direct.js +7 -0
- package/dist/direct.js.map +1 -1
- package/dist/drift.d.ts +1 -1
- package/dist/drift.js +1 -1
- package/dist/drift.js.map +1 -1
- package/dist/env.d.ts +2 -0
- package/dist/env.js +2 -2
- package/dist/env.js.map +1 -1
- package/dist/fake.d.ts +13 -1
- package/dist/fake.js +70 -0
- package/dist/fake.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/ledger.d.ts +2 -0
- package/dist/ledger.js +1 -1
- package/dist/ledger.js.map +1 -1
- package/dist/lint.d.ts +0 -9
- package/dist/lint.js +2 -17
- package/dist/lint.js.map +1 -1
- package/dist/load.d.ts +85 -0
- package/dist/load.js +391 -0
- package/dist/load.js.map +1 -0
- package/dist/lockfile.d.ts +2 -0
- package/dist/lockfile.js +8 -3
- package/dist/lockfile.js.map +1 -1
- package/dist/op.d.ts +22 -5
- package/dist/op.js +20 -2
- package/dist/op.js.map +1 -1
- package/dist/outline.d.ts +5 -0
- package/dist/outline.js +46 -5
- package/dist/outline.js.map +1 -1
- package/dist/paths.d.ts +18 -2
- package/dist/paths.js +19 -7
- package/dist/paths.js.map +1 -1
- package/dist/plugin.d.ts +0 -11
- package/dist/plugin.js +3 -18
- package/dist/plugin.js.map +1 -1
- package/dist/policy.d.ts +2 -0
- package/dist/policy.js.map +1 -1
- package/dist/resource.d.ts +10 -4
- package/dist/resource.js +11 -4
- package/dist/resource.js.map +1 -1
- package/dist/resources.d.ts +33 -76
- package/dist/resources.js +219 -227
- package/dist/resources.js.map +1 -1
- package/dist/run.d.ts +4 -0
- package/dist/run.js.map +1 -1
- package/dist/sandbox.d.ts +5 -2
- package/dist/sandbox.js +56 -7
- package/dist/sandbox.js.map +1 -1
- package/dist/scenario.d.ts +5 -0
- package/dist/scenario.js +3 -2
- package/dist/scenario.js.map +1 -1
- package/dist/scenarios.js +7 -1
- package/dist/scenarios.js.map +1 -1
- package/dist/schema.js +8 -0
- package/dist/schema.js.map +1 -1
- package/dist/secret-store-check.d.ts +11 -0
- package/dist/secret-store-check.js +76 -0
- package/dist/secret-store-check.js.map +1 -0
- package/dist/secret-store.d.ts +106 -0
- package/dist/secret-store.js +228 -0
- package/dist/secret-store.js.map +1 -0
- package/dist/secret.d.ts +2 -0
- package/dist/secret.js +32 -0
- package/dist/secret.js.map +1 -1
- package/dist/shared.d.ts +21 -11
- package/dist/shared.js +41 -7
- package/dist/shared.js.map +1 -1
- package/dist/sites.d.ts +4 -93
- package/dist/sites.js +76 -84
- package/dist/sites.js.map +1 -1
- package/dist/steps.d.ts +3 -0
- package/dist/steps.js.map +1 -1
- package/dist/version.d.ts +2 -1
- package/dist/version.js +2 -1
- package/dist/version.js.map +1 -1
- package/dist/wakeup-driver.js +15 -6
- package/dist/wakeup-driver.js.map +1 -1
- package/dist/worker.js +12 -8
- package/dist/worker.js.map +1 -1
- package/dist/writer.d.ts +53 -14
- package/dist/writer.js +113 -43
- package/dist/writer.js.map +1 -1
- package/oxlint.json +1 -5
- package/package.json +6 -1
- package/src/apply-steps.ts +5 -2
- package/src/apply.ts +54 -21
- package/src/approvals.ts +7 -1
- package/src/apps.ts +71 -86
- package/src/ast.ts +6 -6
- package/src/authentication.ts +191 -0
- package/src/call-workflow.ts +5 -4
- package/src/call.ts +52 -9
- package/src/cedar.ts +14 -1
- package/src/change-steps.ts +7 -4
- package/src/change.ts +10 -0
- package/src/client.ts +346 -45
- package/src/collection.ts +10 -2
- package/src/config.ts +107 -19
- package/src/connection.ts +912 -0
- package/src/credentials.ts +94 -281
- package/src/db.ts +34 -2
- package/src/define.ts +7 -2
- package/src/definitions.ts +31 -0
- package/src/deployment-key.ts +23 -0
- package/src/describe.ts +150 -227
- package/src/description.ts +426 -0
- package/src/direct.ts +7 -0
- package/src/drift.ts +10 -2
- package/src/env.ts +4 -2
- package/src/fake.ts +71 -0
- package/src/index.ts +53 -1
- package/src/ledger.ts +3 -1
- package/src/lint.ts +2 -17
- package/src/load.ts +466 -0
- package/src/lockfile.ts +10 -3
- package/src/op.ts +41 -7
- package/src/outline.ts +53 -7
- package/src/paths.ts +21 -6
- package/src/plugin.ts +3 -24
- package/src/policy.ts +2 -0
- package/src/resource.ts +24 -6
- package/src/resources.ts +246 -301
- package/src/run.ts +4 -0
- package/src/sandbox.ts +61 -7
- package/src/scenario.ts +24 -6
- package/src/scenarios.ts +7 -1
- package/src/schema.ts +10 -0
- package/src/secret-store-check.ts +93 -0
- package/src/secret-store.ts +314 -0
- package/src/secret.ts +29 -0
- package/src/shared.ts +44 -10
- package/src/sites.ts +85 -179
- package/src/steps.ts +3 -2
- package/src/version.ts +2 -1
- package/src/wakeup-driver.ts +22 -6
- package/src/worker.ts +12 -8
- package/src/writer.ts +145 -56
- package/dist/datafile.d.ts +0 -97
- package/dist/datafile.js +0 -479
- package/dist/datafile.js.map +0 -1
- 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 {
|
|
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
|
|
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`).
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
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
|
|
35
|
-
*
|
|
36
|
-
*
|
|
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
|
|
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
|
|
57
|
-
*
|
|
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
|
-
/**
|
|
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
|
-
|
|
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
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
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" &&
|
|
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
|
-
|
|
133
|
-
|
|
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
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
|
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
|
|
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;
|
package/dist/writer.js.map
CHANGED
|
@@ -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.
|
|
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"
|
package/src/apply-steps.ts
CHANGED
|
@@ -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
|
|
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) => ({
|
|
373
|
-
|
|
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)
|
|
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 [
|
|
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(
|
|
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(
|
|
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
|
-
|
|
574
|
-
|
|
575
|
-
|
|
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
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
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")
|
|
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 && {
|
|
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: [],
|