@sanoma-ai/workflows 0.9.1 → 0.10.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.
- package/README.md +167 -50
- 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 +7 -24
- package/dist/apps.js +51 -67
- 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 +24 -0
- package/dist/authentication.js +68 -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 +34 -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 +10 -6
- package/dist/client.js +96 -43
- 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 +9 -0
- package/dist/config.js +45 -9
- package/dist/config.js.map +1 -1
- package/dist/connection.d.ts +168 -0
- package/dist/connection.js +327 -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 +21 -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 +9 -177
- package/dist/describe.js +71 -34
- 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 +3 -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/index.d.ts +10 -2
- 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 +1 -16
- package/dist/lint.js.map +1 -1
- package/dist/load.d.ts +74 -0
- package/dist/load.js +357 -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 +10 -1
- package/dist/op.js +1 -1
- package/dist/op.js.map +1 -1
- package/dist/outline.js +13 -4
- package/dist/outline.js.map +1 -1
- package/dist/paths.d.ts +18 -0
- package/dist/paths.js +21 -3
- 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 +2 -0
- package/dist/run.js.map +1 -1
- package/dist/sandbox.d.ts +1 -1
- package/dist/sandbox.js +5 -2
- package/dist/sandbox.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/shared.d.ts +17 -11
- package/dist/shared.js +34 -7
- package/dist/shared.js.map +1 -1
- package/dist/sites.d.ts +4 -93
- package/dist/sites.js +61 -84
- package/dist/sites.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 +0 -5
- package/package.json +5 -1
- package/src/apply-steps.ts +5 -2
- package/src/apply.ts +54 -21
- package/src/approvals.ts +7 -1
- package/src/apps.ts +54 -85
- package/src/ast.ts +6 -6
- package/src/authentication.ts +74 -0
- package/src/call-workflow.ts +5 -4
- package/src/call.ts +53 -9
- package/src/cedar.ts +14 -1
- package/src/change-steps.ts +7 -4
- package/src/change.ts +10 -0
- package/src/client.ts +108 -41
- package/src/collection.ts +10 -2
- package/src/config.ts +62 -8
- package/src/connection.ts +446 -0
- package/src/credentials.ts +94 -281
- package/src/db.ts +21 -2
- package/src/define.ts +7 -2
- package/src/definitions.ts +31 -0
- package/src/deployment-key.ts +23 -0
- package/src/describe.ts +102 -230
- package/src/description.ts +426 -0
- package/src/direct.ts +3 -0
- package/src/drift.ts +10 -2
- package/src/env.ts +4 -2
- package/src/index.ts +42 -1
- package/src/ledger.ts +3 -1
- package/src/lint.ts +1 -16
- package/src/load.ts +437 -0
- package/src/lockfile.ts +10 -3
- package/src/op.ts +10 -1
- package/src/outline.ts +18 -5
- package/src/paths.ts +24 -2
- 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 +2 -0
- package/src/sandbox.ts +6 -2
- 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/shared.ts +35 -10
- package/src/sites.ts +70 -180
- 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/credentials.js
CHANGED
|
@@ -1,261 +1,98 @@
|
|
|
1
|
-
import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { CREDENTIALS_TABLE as TABLE, prepareDatabase } from "./db.js";
|
|
6
|
-
import { info, warn } from "./log.js";
|
|
7
|
-
import { errorMessage } from "./shared.js";
|
|
8
|
-
// Where the credentials set from the app live: one table in the config's database, beside DBOS's
|
|
9
|
-
// own (made by `prepareDatabase` in db.ts). A value is read here only, by the worker to load it
|
|
10
|
-
// into its environment or hand it to a driver (`storedSecrets`) and by the client to check it,
|
|
11
|
-
// and leaves none of them. The write (`storeCredential`, `ensureCredential`) and the read
|
|
12
|
-
// (`storedCredentials`) are the only places that touch `value`, which holds it encrypted
|
|
13
|
-
// (`encrypt`) under `SANOMA_SECRETS_KEY`.
|
|
14
|
-
/** Where a change is announced, with the variable's name as the payload. */
|
|
15
|
-
const CHANNEL = "sanoma_credentials";
|
|
16
|
-
/** The variable holding the key the stored values are encrypted with: 32 bytes, base64. */
|
|
1
|
+
import { createCipheriv, createDecipheriv, randomBytes, randomUUID } from "node:crypto";
|
|
2
|
+
import { CREDENTIALS_TABLE as TABLE } from "./db.js";
|
|
3
|
+
import { SecretAccess, SecretStoreError, } from "./secret-store.js";
|
|
4
|
+
import { deploymentKey } from "./deployment-key.js";
|
|
17
5
|
export const SECRETS_KEY = "SANOMA_SECRETS_KEY";
|
|
18
|
-
/** What starts an encrypted value; a value without it is a plaintext one stored before encryption, read as it is. */
|
|
19
6
|
const V1 = "v1:";
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const text = process.env[SECRETS_KEY];
|
|
25
|
-
if (!text) {
|
|
26
|
-
throw new Error(`${SECRETS_KEY} is not set: it encrypts the stored credentials; set it to 32 random bytes, base64 (\`openssl rand -base64 32\`)`);
|
|
27
|
-
}
|
|
28
|
-
const key = Buffer.from(text, "base64");
|
|
29
|
-
if (key.length !== 32)
|
|
30
|
-
throw new Error(`${SECRETS_KEY} must be 32 bytes, base64; it is ${key.length} bytes`);
|
|
31
|
-
return key;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* `name`'s value encrypted for the table: `v1:<iv, base64>:<ciphertext and tag, base64>`,
|
|
35
|
-
* AES-256-GCM, with the name as associated data, so a value moved to another row does not decrypt.
|
|
36
|
-
*/
|
|
37
|
-
export function encrypt(name, value) {
|
|
38
|
-
const iv = randomBytes(12);
|
|
39
|
-
const cipher = createCipheriv(CIPHER, secretsKey(), iv).setAAD(Buffer.from(name));
|
|
7
|
+
/** AES-256-GCM authenticated to the complete namespace/path identity. No plaintext format. */
|
|
8
|
+
export function encrypt(identity, value) {
|
|
9
|
+
const nonce = randomBytes(12);
|
|
10
|
+
const cipher = createCipheriv("aes-256-gcm", deploymentKey(SECRETS_KEY), nonce).setAAD(Buffer.from(identity));
|
|
40
11
|
const sealed = Buffer.concat([cipher.update(value, "utf8"), cipher.final(), cipher.getAuthTag()]);
|
|
41
|
-
return `${V1}${
|
|
12
|
+
return `${V1}${nonce.toString("base64")}:${sealed.toString("base64")}`;
|
|
42
13
|
}
|
|
43
|
-
|
|
44
|
-
export function decrypt(name, stored) {
|
|
14
|
+
export function decrypt(identity, stored) {
|
|
45
15
|
if (!stored.startsWith(V1))
|
|
46
|
-
|
|
47
|
-
const key =
|
|
48
|
-
const [iv = "", body = ""] = stored.slice(V1.length).split(":");
|
|
49
|
-
const sealed = Buffer.from(body, "base64");
|
|
16
|
+
throw new SecretStoreError("invalid_value");
|
|
17
|
+
const key = deploymentKey(SECRETS_KEY);
|
|
50
18
|
try {
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
19
|
+
const parts = stored.slice(V1.length).split(":");
|
|
20
|
+
if (parts.length !== 2)
|
|
21
|
+
throw new Error("format");
|
|
22
|
+
const nonce = Buffer.from(parts[0], "base64");
|
|
23
|
+
const sealed = Buffer.from(parts[1], "base64");
|
|
24
|
+
if (nonce.length !== 12 || sealed.length < 16)
|
|
25
|
+
throw new Error("format");
|
|
26
|
+
const decipher = createDecipheriv("aes-256-gcm", key, nonce).setAAD(Buffer.from(identity));
|
|
27
|
+
decipher.setAuthTag(sealed.subarray(-16));
|
|
28
|
+
return Buffer.concat([decipher.update(sealed.subarray(0, -16)), decipher.final()]).toString("utf8");
|
|
54
29
|
}
|
|
55
|
-
catch
|
|
56
|
-
throw new
|
|
30
|
+
catch {
|
|
31
|
+
throw new SecretStoreError("invalid_value");
|
|
57
32
|
}
|
|
58
33
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
`RETURNING name) SELECT pg_notify('${CHANNEL}', name) FROM stored`, [name, encrypt(name, value), setBy]);
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* The stored value of `name`; when there is none, `make()`'s, stored first and announced. Of two
|
|
72
|
-
* at once, the first stored wins, and both return it.
|
|
73
|
-
*/
|
|
74
|
-
export async function ensureCredential(db, { name, make, setBy }) {
|
|
75
|
-
const stored = (await storedCredentials(db, [name])).get(name);
|
|
76
|
-
if (stored)
|
|
77
|
-
return stored.value;
|
|
78
|
-
await db.query(`WITH stored AS (INSERT INTO ${TABLE} (name, value, set_by) VALUES ($1, $2, $3) ON CONFLICT (name) DO NOTHING ` +
|
|
79
|
-
`RETURNING name) SELECT pg_notify('${CHANNEL}', name) FROM stored`, [name, encrypt(name, make()), setBy]);
|
|
80
|
-
return (await storedCredentials(db, [name])).get(name).value;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* The secrets store a live driver is given (`CallContext.secrets`): a variable the environment
|
|
84
|
-
* sets wins, as it does for a driver's `env`; else the stored value. `ensure` stores what it
|
|
85
|
-
* makes as `setBy`.
|
|
86
|
-
*/
|
|
87
|
-
export function storedSecrets(db, setBy) {
|
|
34
|
+
const identity = ({ namespace, path }) => JSON.stringify([namespace, path]);
|
|
35
|
+
const decoded = (address, row) => ({
|
|
36
|
+
value: decrypt(identity(address), row.value),
|
|
37
|
+
version: row.version,
|
|
38
|
+
updatedBy: row.set_by,
|
|
39
|
+
updatedAt: row.set_at.toISOString(),
|
|
40
|
+
});
|
|
41
|
+
/** One company's database connection supplies authority; namespace separates deployments within it. */
|
|
42
|
+
export function postgresSecretStore(db) {
|
|
88
43
|
return {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
if (
|
|
138
|
-
|
|
139
|
-
else
|
|
140
|
-
process.env[name] = value;
|
|
141
|
-
const vendor = vendors.get(name);
|
|
142
|
-
counts.set(vendor, (counts.get(vendor) ?? 0) + 1);
|
|
143
|
-
}
|
|
144
|
-
const verb = first ? "loaded" : "reloaded";
|
|
145
|
-
for (const [vendor, n] of counts)
|
|
146
|
-
info(`credentials ${verb} for ${vendor} (${n} variable${n === 1 ? "" : "s"})`);
|
|
147
|
-
// At start, startWorker warns of an invalid one, naming it.
|
|
148
|
-
if (first)
|
|
149
|
-
return;
|
|
150
|
-
for (const list of credentialsOf(drivers, (name) => changed.includes(name) ? process.env[name] : undefined).values()) {
|
|
151
|
-
for (const c of list) {
|
|
152
|
-
if (c.status === "invalid")
|
|
153
|
-
warn(`the stored ${c.name} is invalid (${c.problem}): calls that read it will fail`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
function reload(first = false) {
|
|
158
|
-
if (loading) {
|
|
159
|
-
stale = true;
|
|
160
|
-
return loading;
|
|
161
|
-
}
|
|
162
|
-
loading = (async () => {
|
|
163
|
-
try {
|
|
164
|
-
do {
|
|
165
|
-
stale = false;
|
|
166
|
-
await load(first);
|
|
167
|
-
first = false;
|
|
168
|
-
} while (stale);
|
|
169
|
-
}
|
|
170
|
-
finally {
|
|
171
|
-
loading = undefined;
|
|
172
|
-
}
|
|
173
|
-
})();
|
|
174
|
-
return loading;
|
|
175
|
-
}
|
|
176
|
-
async function open(first) {
|
|
177
|
-
const conn = new Client({ connectionString: databaseUrl, keepAlive: true, connectionTimeoutMillis: 10_000 });
|
|
178
|
-
// Before anything can fail: an error nobody listens for ends the process.
|
|
179
|
-
conn.on("error", (err) => lost(conn, err));
|
|
180
|
-
// Before LISTEN, so no change announced from then on is missed.
|
|
181
|
-
conn.on("notification", () => {
|
|
182
|
-
if (!closed && conn === db) {
|
|
183
|
-
reload().catch((err) => warn(`could not reload the credentials: ${errorMessage(err)}`));
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
try {
|
|
187
|
-
if (first)
|
|
188
|
-
await prepareDatabase(databaseUrl);
|
|
189
|
-
await conn.connect();
|
|
190
|
-
if (closed) {
|
|
191
|
-
await conn.end();
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
db = conn;
|
|
195
|
-
await conn.query(`LISTEN ${CHANNEL}`);
|
|
196
|
-
await reload(first);
|
|
197
|
-
}
|
|
198
|
-
catch (err) {
|
|
199
|
-
if (db === conn)
|
|
200
|
-
db = undefined;
|
|
201
|
-
await conn.end().catch(() => undefined);
|
|
202
|
-
throw err;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
/** A connection that dropped: the one listening is replaced; one still connecting fails its own open. */
|
|
206
|
-
function lost(conn, err) {
|
|
207
|
-
if (closed || conn !== db)
|
|
208
|
-
return;
|
|
209
|
-
db = undefined;
|
|
210
|
-
void conn.end().catch(() => undefined);
|
|
211
|
-
warn(`the credentials listener failed (${errorMessage(err)}); reconnecting`);
|
|
212
|
-
void reconnect();
|
|
213
|
-
}
|
|
214
|
-
async function reconnect() {
|
|
215
|
-
if (reconnecting)
|
|
216
|
-
return;
|
|
217
|
-
reconnecting = true;
|
|
218
|
-
let wait = 1_000;
|
|
219
|
-
let warnedAt = 0;
|
|
220
|
-
try {
|
|
221
|
-
for (;;) {
|
|
222
|
-
await sleep(wait, undefined, { ref: false });
|
|
223
|
-
if (closed)
|
|
224
|
-
return;
|
|
225
|
-
try {
|
|
226
|
-
await open(false);
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
catch (err) {
|
|
230
|
-
if (Date.now() - warnedAt >= RETRY_MAX_MS) {
|
|
231
|
-
warnedAt = Date.now();
|
|
232
|
-
warn(`could not reconnect the credentials listener (${errorMessage(err)}); trying again`);
|
|
233
|
-
}
|
|
234
|
-
wait = Math.min(wait * 2, RETRY_MAX_MS);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
finally {
|
|
239
|
-
reconnecting = false;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
try {
|
|
243
|
-
await open(true);
|
|
244
|
-
}
|
|
245
|
-
catch (err) {
|
|
246
|
-
closed = true;
|
|
247
|
-
throw err;
|
|
248
|
-
}
|
|
249
|
-
return {
|
|
250
|
-
async close() {
|
|
251
|
-
closed = true;
|
|
252
|
-
await loading?.catch(() => undefined);
|
|
253
|
-
for (const name of names)
|
|
254
|
-
delete process.env[name];
|
|
255
|
-
const conn = db;
|
|
256
|
-
db = undefined;
|
|
257
|
-
await conn?.end();
|
|
44
|
+
id: "postgres",
|
|
45
|
+
capabilities: Object.freeze({
|
|
46
|
+
writable: true,
|
|
47
|
+
maxBytes: 65_536,
|
|
48
|
+
conditionalWrites: "atomic",
|
|
49
|
+
deletion: "destroy",
|
|
50
|
+
changeDetection: "read",
|
|
51
|
+
}),
|
|
52
|
+
async validate(namespace) {
|
|
53
|
+
if (!namespace)
|
|
54
|
+
throw new SecretStoreError("invalid_configuration");
|
|
55
|
+
deploymentKey(SECRETS_KEY);
|
|
56
|
+
await (await db()).query(`SELECT namespace FROM ${TABLE} LIMIT 0`);
|
|
57
|
+
},
|
|
58
|
+
async read(address) {
|
|
59
|
+
const { rows } = await (await db()).query(`SELECT value, version, set_by, set_at FROM ${TABLE} WHERE namespace = $1 AND name = $2`, [
|
|
60
|
+
address.namespace,
|
|
61
|
+
address.path,
|
|
62
|
+
]);
|
|
63
|
+
return rows[0] && decoded(address, rows[0]);
|
|
64
|
+
},
|
|
65
|
+
async write(address, value, { expectedVersion, by }) {
|
|
66
|
+
if (Buffer.byteLength(value) > 65_536)
|
|
67
|
+
throw new SecretStoreError("too_large");
|
|
68
|
+
const version = randomUUID();
|
|
69
|
+
const sealed = encrypt(identity(address), value);
|
|
70
|
+
const query = expectedVersion === null
|
|
71
|
+
? `INSERT INTO ${TABLE} (namespace,name,value,version,set_by) VALUES ($1,$2,$3,$4,$5) ON CONFLICT (namespace,name) DO NOTHING RETURNING value,version,set_by,set_at`
|
|
72
|
+
: `UPDATE ${TABLE} SET value=$3,version=$4,set_by=$5,set_at=now() WHERE namespace=$1 AND name=$2 AND version=$6 RETURNING value,version,set_by,set_at`;
|
|
73
|
+
const params = [
|
|
74
|
+
address.namespace,
|
|
75
|
+
address.path,
|
|
76
|
+
sealed,
|
|
77
|
+
version,
|
|
78
|
+
by,
|
|
79
|
+
...(expectedVersion === null ? [] : [expectedVersion]),
|
|
80
|
+
];
|
|
81
|
+
const { rows } = await (await db()).query(query, params);
|
|
82
|
+
if (!rows[0])
|
|
83
|
+
throw new SecretStoreError("conflict");
|
|
84
|
+
return decoded(address, rows[0]);
|
|
85
|
+
},
|
|
86
|
+
async delete(address, { expectedVersion }) {
|
|
87
|
+
const { rowCount } = await (await db()).query(`DELETE FROM ${TABLE} WHERE namespace=$1 AND name=$2 AND version=$3`, [
|
|
88
|
+
address.namespace,
|
|
89
|
+
address.path,
|
|
90
|
+
expectedVersion,
|
|
91
|
+
]);
|
|
92
|
+
if (!rowCount)
|
|
93
|
+
throw new SecretStoreError("conflict");
|
|
258
94
|
},
|
|
259
95
|
};
|
|
260
96
|
}
|
|
97
|
+
export const configuredSecrets = (config, db) => new SecretAccess(config, postgresSecretStore(db));
|
|
261
98
|
//# sourceMappingURL=credentials.js.map
|
package/dist/credentials.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
|
package/dist/db.js
CHANGED
|
@@ -21,10 +21,29 @@ export const CHATS_TABLE = "sanoma_chats";
|
|
|
21
21
|
export const CHAT_MESSAGES_TABLE = "sanoma_chat_messages";
|
|
22
22
|
/** The runtime's tables, each with the word the messages name it by. */
|
|
23
23
|
const TABLES = [
|
|
24
|
+
[
|
|
25
|
+
"connections",
|
|
26
|
+
`CREATE TABLE IF NOT EXISTS sanoma_connections (
|
|
27
|
+
id text PRIMARY KEY, vendor text NOT NULL, method text NOT NULL, owner text, rule text,
|
|
28
|
+
account text NOT NULL, scopes jsonb NOT NULL, revision text NOT NULL, definition text NOT NULL,
|
|
29
|
+
credential text, status text NOT NULL DEFAULT 'connected', updated_by text NOT NULL,
|
|
30
|
+
updated_at timestamptz NOT NULL DEFAULT now())`,
|
|
31
|
+
],
|
|
24
32
|
[
|
|
25
33
|
"credentials",
|
|
26
|
-
|
|
27
|
-
|
|
34
|
+
// A table from before 0.10.0 (one row per name, each value sealed to its name alone) holds
|
|
35
|
+
// nothing 0.10.0 can read: it goes, and its credentials are set again.
|
|
36
|
+
// One table for the look and the drop: the one the name resolves to.
|
|
37
|
+
`DO $$ BEGIN
|
|
38
|
+
IF to_regclass('${CREDENTIALS_TABLE}') IS NOT NULL AND NOT EXISTS (
|
|
39
|
+
SELECT FROM pg_attribute
|
|
40
|
+
WHERE attrelid = to_regclass('${CREDENTIALS_TABLE}') AND attname = 'namespace' AND NOT attisdropped
|
|
41
|
+
) THEN
|
|
42
|
+
DROP TABLE ${CREDENTIALS_TABLE};
|
|
43
|
+
END IF;
|
|
44
|
+
END $$; ` +
|
|
45
|
+
`CREATE TABLE IF NOT EXISTS ${CREDENTIALS_TABLE} (namespace text NOT NULL, name text NOT NULL, value text NOT NULL, ` +
|
|
46
|
+
"version text NOT NULL, set_by text NOT NULL, set_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY(namespace, name))",
|
|
28
47
|
],
|
|
29
48
|
[
|
|
30
49
|
"ledger",
|
package/dist/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU3C,mDAAmD;AACnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AACtD,mDAAmD;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAC5C,sHAAsH;AACtH,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AACxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAC5C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC;AAC1C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAE1D,wEAAwE;AACxE,MAAM,MAAM,GAA2C;IACrD;QACE,aAAa;QACb,8BAA8B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/define.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ConnectionRef } from "./connection.ts";
|
|
2
|
+
import type { WorkflowEntry } from "./description.ts";
|
|
1
3
|
import { z } from "zod";
|
|
2
4
|
import { type Op } from "./op.ts";
|
|
3
5
|
import { type DATA_VENDOR } from "./shared.ts";
|
|
@@ -14,7 +16,8 @@ export interface Principal {
|
|
|
14
16
|
onBehalfOf?: string;
|
|
15
17
|
}
|
|
16
18
|
export declare const Principal: z.ZodType<Principal>;
|
|
17
|
-
|
|
19
|
+
/** A built-in a workflow may call, as its description lists them. */
|
|
20
|
+
export type Builtin = WorkflowEntry["builtins"][number];
|
|
18
21
|
export type Use = Op | Builtin;
|
|
19
22
|
/** Who may decide an approval: one person, by `Principal.id`, or anyone in a group, by `Principal.groups`. */
|
|
20
23
|
export type Approver = string | {
|
|
@@ -56,6 +59,8 @@ export declare const ApprovalRequestSchema: z.ZodObject<{
|
|
|
56
59
|
}, z.core.$strip>;
|
|
57
60
|
/** One approval in a run, as the run sees it. Published as the run's "approvals" event. */
|
|
58
61
|
export interface ApprovalState extends Omit<ApprovalRequest, "covers"> {
|
|
62
|
+
/** Connection binding revision approved by this policy hold. */
|
|
63
|
+
connection?: string;
|
|
59
64
|
id: string;
|
|
60
65
|
title: string;
|
|
61
66
|
/** Who asked: the workflow (`ctx.approval`), or the policy holding an operation call. */
|
|
@@ -160,7 +165,9 @@ type VendorCtx<O extends Op, V> = {
|
|
|
160
165
|
vendor: V;
|
|
161
166
|
resource: R;
|
|
162
167
|
name: N;
|
|
163
|
-
}> extends Op<any, any, any, infer I, infer Out> ? (input: I, options?: StepOptions
|
|
168
|
+
}> extends Op<any, any, any, infer I, infer Out> ? (input: I, options?: StepOptions & {
|
|
169
|
+
connection?: ConnectionRef<Extract<V, string>>;
|
|
170
|
+
}) => Promise<Out> : never;
|
|
164
171
|
};
|
|
165
172
|
};
|
|
166
173
|
/**
|
package/dist/define.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** What `app.ts` declares: the source repository's URL, when the app was taken from one. */
|
|
2
|
+
export interface AppDefinition {
|
|
3
|
+
source?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Declares an app in its folder's `app.ts`, its default export: `defineApp({ source:
|
|
7
|
+
* "https://github.com/acme/crm" })`, the repository it was taken from; `defineApp({})` for an app
|
|
8
|
+
* the company made itself.
|
|
9
|
+
*/
|
|
10
|
+
export declare function defineApp(definition: AppDefinition): AppDefinition;
|
|
11
|
+
/** What a site's `site.ts` declares, as its default export; the app's `sanoma/site` types `icon` as a Lucide icon's name. */
|
|
12
|
+
export interface SiteDefinition {
|
|
13
|
+
title?: string;
|
|
14
|
+
icon?: string;
|
|
15
|
+
public?: boolean;
|
|
16
|
+
login?: string;
|
|
17
|
+
locales?: readonly [string, ...string[]];
|
|
18
|
+
}
|
|
19
|
+
/** Declares a site in its folder's `site.ts`, its default export: `defineSite({ title: "Help desk" })`. */
|
|
20
|
+
export declare function defineSite<S extends SiteDefinition>(site: S): Readonly<S>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// What an app's `app.ts` and a site's `site.ts` declare themselves with. Dependency-free: the
|
|
2
|
+
// loader (`load.ts`) serves these to those files as `sanoma` and `sanoma/site`, the browser-safe
|
|
3
|
+
// entry (`shared.ts`) re-exports `defineSite`, and the app's `sanoma/site` calls it.
|
|
4
|
+
/**
|
|
5
|
+
* Declares an app in its folder's `app.ts`, its default export: `defineApp({ source:
|
|
6
|
+
* "https://github.com/acme/crm" })`, the repository it was taken from; `defineApp({})` for an app
|
|
7
|
+
* the company made itself.
|
|
8
|
+
*/
|
|
9
|
+
export function defineApp(definition) {
|
|
10
|
+
return Object.freeze({ ...definition });
|
|
11
|
+
}
|
|
12
|
+
/** Declares a site in its folder's `site.ts`, its default export: `defineSite({ title: "Help desk" })`. */
|
|
13
|
+
export function defineSite(site) {
|
|
14
|
+
return Object.freeze({ ...site });
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,iGAAiG;AACjG,qFAAqF;AAOrF;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,UAAyB;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;AAC1C,CAAC;AAWD,2GAA2G;AAC3G,MAAM,UAAU,UAAU,CAA2B,IAAO;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
/** Bootstrap only: never resolves through the secret store that the key unlocks. */
|
|
3
|
+
export function deploymentKey(name, env = process.env) {
|
|
4
|
+
const value = env[name];
|
|
5
|
+
const file = env[`${name}_FILE`];
|
|
6
|
+
if (value && file)
|
|
7
|
+
throw new Error(`Set only one of ${name} and ${name}_FILE`);
|
|
8
|
+
let encoded = value;
|
|
9
|
+
if (file) {
|
|
10
|
+
try {
|
|
11
|
+
encoded = readFileSync(file, "utf8").trim();
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
throw new Error(`${name}_FILE could not be read`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (!encoded || !/^[A-Za-z0-9+/]{43}=$/.test(encoded) || Buffer.from(encoded, "base64").length !== 32) {
|
|
18
|
+
throw new Error(`${name} must be 32 random bytes in base64; supply ${name} or ${name}_FILE`);
|
|
19
|
+
}
|
|
20
|
+
return Buffer.from(encoded, "base64");
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=deployment-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-key.js","sourceRoot":"","sources":["../src/deployment-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAC3B,IAAiD,EACjD,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,QAAQ,IAAI,OAAO,CAAC,CAAC;IAC/E,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yBAAyB,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtG,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8CAA8C,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC"}
|