@somewhere-tech/cli 0.37.17 → 0.37.19
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/dist/commands/cron.js +10 -2
- package/dist/commands/cron.js.map +1 -1
- package/dist/lib/init-agent-guide.js +12 -12
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
- package/runtime/DECLARED-DATA-VENDOR.json +11 -10
- package/runtime/declared-data.cjs +261 -43
package/dist/commands/cron.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { loadProjectConfig } from '../lib/config.js';
|
|
2
|
+
import { shellQuote } from '../lib/next-actions.js';
|
|
2
3
|
import { callPlatformTool } from '../lib/platform-tools.js';
|
|
3
4
|
import { compactRecord, isRecord, resolveProjectRef, truncateText, unwrapPlatformData, } from '../lib/platform-command.js';
|
|
4
5
|
import { dim, error, platformErrorEnvelope, printJson, printJsonError, success, table } from '../lib/output.js';
|
|
@@ -454,8 +455,9 @@ export function registerCron(program) {
|
|
|
454
455
|
.option('--json', 'Print the complete response as JSON')
|
|
455
456
|
.action(async (schedule, handler, opts) => {
|
|
456
457
|
try {
|
|
458
|
+
const project = resolveProjectRef(opts.project);
|
|
457
459
|
const args = compactRecord([
|
|
458
|
-
['project_id',
|
|
460
|
+
['project_id', project],
|
|
459
461
|
['schedule', schedule],
|
|
460
462
|
['handler', handler],
|
|
461
463
|
['name', opts.name],
|
|
@@ -465,7 +467,13 @@ export function registerCron(program) {
|
|
|
465
467
|
// so the CLI never converts an offset or second-guesses the name.
|
|
466
468
|
['timezone', opts.timezone],
|
|
467
469
|
]);
|
|
468
|
-
await runCronTool('cron_create', args, opts.json, (value) =>
|
|
470
|
+
await runCronTool('cron_create', args, opts.json, (value) => {
|
|
471
|
+
printCronMutation('Scheduled trigger created', value);
|
|
472
|
+
const data = unwrapPlatformData(value);
|
|
473
|
+
const id = isRecord(data) ? cronRowId(data) : null;
|
|
474
|
+
if (id)
|
|
475
|
+
console.log(dim(`Run it now; do not wait for its scheduled time:\n somewhere cron run ${shellQuote(id)} --project ${shellQuote(project)} --wait`));
|
|
476
|
+
});
|
|
469
477
|
}
|
|
470
478
|
catch (err) {
|
|
471
479
|
error(err instanceof Error ? err.message : String(err), err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/commands/cron.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/commands/cron.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,13 @@ import { SKILLS_DIR, skillNames } from './skills-pack.js';
|
|
|
4
4
|
// docs lint byte-compares this value when SOMEWHERE_CLI_REPO points here.
|
|
5
5
|
export const AGENT_WORKFLOW = `## Getting started — build, deploy, verify
|
|
6
6
|
|
|
7
|
-
\`somewhere init --name <slug>\`
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
\`init --catalog --json\` lists modules for \`--features\`. No account yet?
|
|
7
|
+
\`somewhere init --name <slug>\` creates a React + TypeScript starter without
|
|
8
|
+
logging in. The default has sign-in; minimal/bare omit it. The README maps
|
|
9
|
+
the files. \`init --catalog --json\` lists \`--features\` modules.
|
|
11
10
|
\`npx @somewhere-tech/cli deploy\` publishes a temporary app and prints its live
|
|
12
|
-
URL, claim URL
|
|
13
|
-
the email test inbox and cron. On a hosted VM,
|
|
14
|
-
|
|
11
|
+
URL, claim URL and expiry. Login is needed for account-owned operations,
|
|
12
|
+
the email test inbox and cron. On a hosted VM, \`somewhere login\` prints a code
|
|
13
|
+
for human approval in a browser; the machine stays signed in.
|
|
15
14
|
For a reference, use \`somewhere docs <topic> --section <id>\` (MCP: \`docs({ topic })\`, \`catalog\`).
|
|
16
15
|
|
|
17
16
|
After every change:
|
|
@@ -74,13 +73,14 @@ await sw.db.server.insert('entries', { user_id: profile.user_id, owner_email: pr
|
|
|
74
73
|
|
|
75
74
|
The owner comes from that lookup, never the body; the sender is not the
|
|
76
75
|
owner. Rate limits and the alert are in \`somewhere docs recipe-signed-in-app\`.
|
|
77
|
-
Use \`serverOnly()\` only when every operation needs a function's own access
|
|
78
|
-
check.
|
|
76
|
+
Use \`serverOnly()\` only when every operation needs a function's own access check.
|
|
79
77
|
Structured queries: \`sw.db.from\` / \`insert\` / \`update\` / \`remove\` return \`{ data: rows[], count,
|
|
80
78
|
changes }\`; \`where: { a: 1, b: { in: ids }, c: { gte: 2 }, d: null }\` (one
|
|
81
|
-
operator per column). Raw SQL
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
operator per column). Raw SQL uses a separate raw database, never managed tables.
|
|
80
|
+
For cross-user managed work, authorize the caller and use \`sw.db.server.from\` /
|
|
81
|
+
\`insert\` / \`update\` / \`remove\`; keep \`owner()\`/\`group()\`. Parallel reads: \`Promise.all\`.
|
|
82
|
+
|
|
83
|
+
Test schedules now: \`somewhere cron run <id> --wait\`. Do not wait for it to fire.`;
|
|
84
84
|
export const SKILLS_POINTER = `Skills: \`${SKILLS_DIR}/\` — `
|
|
85
85
|
+ skillNames(BUNDLED_SKILLS_PACK).map((name) => `\`${name}\``).join(', ')
|
|
86
86
|
+ '. Read the skill that matches the task. `somewhere skills status` inspects the installed pack; `somewhere skills update` updates unmodified files.';
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@somewhere-tech/cli",
|
|
3
|
-
"version": "0.37.
|
|
3
|
+
"version": "0.37.19",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@somewhere-tech/cli",
|
|
9
|
-
"version": "0.37.
|
|
9
|
+
"version": "0.37.19",
|
|
10
10
|
"bundleDependencies": [
|
|
11
11
|
"@modelcontextprotocol/sdk",
|
|
12
12
|
"chokidar",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@somewhere-tech/cli",
|
|
3
|
-
"version": "0.37.
|
|
3
|
+
"version": "0.37.19",
|
|
4
4
|
"description": "CLI for somewhere.tech — auth, projects, deploy, pull, promote, db, logs, env, MCP bridge.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"somewhere",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"build": "tsc",
|
|
38
38
|
"dev": "tsc --watch",
|
|
39
39
|
"prepublishOnly": "npm run build",
|
|
40
|
-
"test": "npm run build && node --test \"test/*.test.mjs\"",
|
|
40
|
+
"test": "npm run build && node --test --test-concurrency=1 \"test/*.test.mjs\"",
|
|
41
41
|
"test:roundtrip": "node scripts/e2e-roundtrip.mjs",
|
|
42
42
|
"prebuild": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\""
|
|
43
43
|
},
|
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"esbuild": "0.24.0",
|
|
3
3
|
"source_files": {
|
|
4
|
-
"worker/containers/compile/declared-data-contract.cjs": "
|
|
4
|
+
"worker/containers/compile/declared-data-contract.cjs": "abdf0a0f238f9d7ecccc8aa3ede7cd25778194d0b9c68cc6c44aa776de46d122",
|
|
5
5
|
"worker/containers/compile/groups-types.cjs": "f0f38ca6f160561f997b20af44763bd07232deb2668a536cd52c1974fcfed2c8",
|
|
6
|
-
"worker/containers/compile/runtime-types.cjs": "
|
|
7
|
-
"worker/containers/compile/schema-types.cjs": "
|
|
6
|
+
"worker/containers/compile/runtime-types.cjs": "b37bb3a251ef0dde6c699f7941de537c28088f180bb3850808d97db2f76c866c",
|
|
7
|
+
"worker/containers/compile/schema-types.cjs": "97941a4f80f50f4a48b828a6a2695f6f0c606ab6e74b4511fbb99e786dc4f0c4",
|
|
8
8
|
"worker/containers/compile/typed-data.cjs": "57b458e16a373e42d48a0e527317fcdf609299ae368eb539a8b582b9a47abb15",
|
|
9
9
|
"worker/containers/compile/typed-files.cjs": "a0b1818afbc7673f84583c76436a3b3ca1d1fdf63d8d8db138b36646103f0708",
|
|
10
10
|
"worker/src/services/jobs/limits.ts": "f806f045dcb92f7da1e830aab65b74185ebd3071aeade368db776f3a0546de38",
|
|
11
|
-
"worker/src/utils/authority/scope-enforcement.ts": "
|
|
11
|
+
"worker/src/utils/authority/scope-enforcement.ts": "b219c1b38b4d5ffa7067b0ab9349efec17c1001195a23c323ec40ae6fe4f7da6",
|
|
12
12
|
"worker/src/utils/db-schema-deploy/bigint-text.ts": "ef3f581daeecb234d2c1e288bc09495a6facd7b0354b300134918f6c0cf10cc2",
|
|
13
13
|
"worker/src/utils/db-schema-deploy/client-contract-source.ts": "25916e9e5174a3959e5b3f61ee1bc4a3ff3c0de01b155e19be97c836431cb8ec",
|
|
14
|
-
"worker/src/utils/db-schema-deploy/client-permissions.ts": "
|
|
15
|
-
"worker/src/utils/db-schema-deploy/extract-schema-app-roles.ts": "
|
|
14
|
+
"worker/src/utils/db-schema-deploy/client-permissions.ts": "9c0aecd4a9698a9813aa8ec3315c1a8c99ba2fd1150d6d820a86ea3ec7b9890b",
|
|
15
|
+
"worker/src/utils/db-schema-deploy/extract-schema-app-roles.ts": "7f0e6ce3e213d56b678a60de133d10ed6f51f3a42ba73071d821d42a48c676a2",
|
|
16
16
|
"worker/src/utils/db-schema-deploy/extract-schema-bindings.ts": "34a2bf98da533afa60cc3fe46c3ff029300f06fef0bfecd98e028bff181ca1b3",
|
|
17
17
|
"worker/src/utils/db-schema-deploy/extract-schema-files.ts": "dddbb2d914a112e2820598d64f9da781aecec55e121f10de3501c3a7b4238f36",
|
|
18
|
-
"worker/src/utils/db-schema-deploy/extract-schema-groups.ts": "
|
|
18
|
+
"worker/src/utils/db-schema-deploy/extract-schema-groups.ts": "f80b93121e1ece04f43fa728517b5baa72fed1d9c833c23cf87ca558f8ca0263",
|
|
19
|
+
"worker/src/utils/db-schema-deploy/extract-schema-links.ts": "91cd99fc90133e51cbbd92656d592714a8fd71e0ac1c869cf161ad4a07225b57",
|
|
19
20
|
"worker/src/utils/db-schema-deploy/extract-schema-options.ts": "0998748a953fa9df742a7bdcbbce01f4fc56f9735ddbe3adf9e01facd82f87ad",
|
|
20
21
|
"worker/src/utils/db-schema-deploy/extract-schema-parents.ts": "eaec77c4db2c9a1903bd07fb265fc4f3fa8941f23724ab568ccdbf9569dc7a78",
|
|
21
22
|
"worker/src/utils/db-schema-deploy/extract-schema-relations.ts": "3984683d3227e964845836079476687a7295e6907b525ef21b9eebc488825bf8",
|
|
22
23
|
"worker/src/utils/db-schema-deploy/extract-schema-roles.ts": "1b2d7c7279679c726053c5d1586221476587273fc24ce93bde72a4a8ef8e7582",
|
|
23
|
-
"worker/src/utils/db-schema-deploy/extract-schema-ts.ts": "
|
|
24
|
+
"worker/src/utils/db-schema-deploy/extract-schema-ts.ts": "af2065c22a1b2c736ca432e0b1855007a99c3239aefe5d0f9bff208d45201cd2",
|
|
24
25
|
"worker/src/utils/db-schema-deploy/schema-constants.ts": "07e648748409207fa4b97367b8942463c047a0bb0e27a36f16f696f90f2b550d",
|
|
25
26
|
"worker/src/utils/db-schema-deploy/schema-ownership.ts": "e6c811a87bc657707be3518dfe547c6d97718ac073108b126eb7f791c9c08202",
|
|
26
|
-
"worker/src/utils/managed-groups/errors.ts": "
|
|
27
|
+
"worker/src/utils/managed-groups/errors.ts": "4830b1ad7357a79760b0bcc68884e562cfbc07d12a37cc73651a6fcb256d682f",
|
|
27
28
|
"worker/src/utils/managed-groups/policy.ts": "2259a883645c8bfd607ead7c37387f3ffd42ac9dfb86722c72b224adb498511e"
|
|
28
29
|
},
|
|
29
|
-
"sha256": "
|
|
30
|
+
"sha256": "d9b4c27c75353337c46ac93abb2816cfb60a77930957778a1b52c5ded6e9128e"
|
|
30
31
|
}
|
|
@@ -68,7 +68,7 @@ var require_declared_data_contract = __commonJS({
|
|
|
68
68
|
}
|
|
69
69
|
if (value.k === "a" && keys === "k,p" && Array.isArray(value.p) && value.p.length === 2) {
|
|
70
70
|
const left = policy(value.p[0], label), right = policy(value.p[1], label);
|
|
71
|
-
if (left.k !== "o" ||
|
|
71
|
+
if (left.k !== "o" || !["m", "g", "r"].includes(right.k)) fail(label);
|
|
72
72
|
return { k: "a", p: [left, right] };
|
|
73
73
|
}
|
|
74
74
|
if (value.k === "g" && ["c,k,roles", "c,generation,k,roles"].includes(keys) && identifier.test(value.c)) {
|
|
@@ -130,7 +130,7 @@ var require_declared_data_contract = __commonJS({
|
|
|
130
130
|
const pk = table.clientPrimaryKey;
|
|
131
131
|
if (!seen.has(pk) || !["integer", "text"].includes(columns.find((column) => column.n === pk).t)) fail(`${name} primary key`);
|
|
132
132
|
const input = table.client;
|
|
133
|
-
if (Object.keys(input).some((key) => !["read", "publicRead", "create", "update", "delete", "identity"].includes(key))) fail(`${name} permissions`);
|
|
133
|
+
if (Object.keys(input).some((key) => !["read", "publicRead", "create", "update", "delete", "identity", "links"].includes(key))) fail(`${name} permissions`);
|
|
134
134
|
const read = typeof input.read === "boolean" ? input.read : fields(input.read, seen, `${name}.read`);
|
|
135
135
|
if (Array.isArray(read) && !read.includes(pk)) fail(`${name}.read must include the primary key`);
|
|
136
136
|
let publicRead = input.publicRead;
|
|
@@ -186,13 +186,31 @@ var require_declared_data_contract = __commonJS({
|
|
|
186
186
|
if (normalizedPolicy?.k === "g" && create !== null && !create.includes(normalizedPolicy.c)) fail(`${name}.policy group create`);
|
|
187
187
|
if (normalizedPolicy?.k === "a") {
|
|
188
188
|
owner = normalizedPolicy.p[0].c;
|
|
189
|
-
|
|
189
|
+
const branch = normalizedPolicy.p[1];
|
|
190
|
+
const fixed = branch.k === "m" ? branch.m.g : branch.k === "g" ? [branch.c] : [];
|
|
191
|
+
if ([...create || [], ...update || []].includes(owner) || (update || []).some((field) => fixed.includes(field))) fail(`${name}.policy identity writes`);
|
|
192
|
+
if (branch.k === "g" && create !== null && !create.includes(branch.c)) fail(`${name}.policy group create`);
|
|
190
193
|
}
|
|
191
194
|
if (normalizedPolicy?.k === "p" && create !== null && !create.includes(normalizedPolicy.v)) fail(`${name}.policy parent create`);
|
|
195
|
+
let links = null;
|
|
196
|
+
if (input.links !== void 0) {
|
|
197
|
+
record(input.links, `${name}.links`);
|
|
198
|
+
if (Object.keys(input.links).sort().join() !== "children,edit,maxDays,read") fail(`${name}.links`);
|
|
199
|
+
if (!(intent === "scoped" && !visitors) && normalizedPolicy?.k !== "a") fail(`${name}.links owner`);
|
|
200
|
+
const readable = read === true ? columns.filter((column) => column.n !== author).map((column) => column.n) : read || [];
|
|
201
|
+
const linkRead = fields(input.links.read, new Set(readable), `${name}.links.read`);
|
|
202
|
+
if (!linkRead.includes(pk)) fail(`${name}.links.read must include the primary key`);
|
|
203
|
+
const linkEdit = fields(input.links.edit, new Set(update || []), `${name}.links.edit`, true);
|
|
204
|
+
const children = input.links.children;
|
|
205
|
+
if (!Array.isArray(children) || children.some((child) => typeof child !== "string" || !identifier.test(child)) || new Set(children).size !== children.length) fail(`${name}.links.children`);
|
|
206
|
+
const maxDays = input.links.maxDays;
|
|
207
|
+
if (maxDays !== null && !(Number.isSafeInteger(maxDays) && maxDays >= 1 && maxDays <= 365)) fail(`${name}.links.maxDays`);
|
|
208
|
+
links = { read: linkRead, edit: linkEdit, children: [...children].sort(), maxDays };
|
|
209
|
+
}
|
|
192
210
|
tables.push({
|
|
193
211
|
name,
|
|
194
212
|
columns,
|
|
195
|
-
client: { identity: input.identity, read, publicRead, create, update, delete: input.delete },
|
|
213
|
+
client: { identity: input.identity, read, publicRead, create, update, delete: input.delete, ...links ? { links } : {} },
|
|
196
214
|
primaryKey: pk,
|
|
197
215
|
intent,
|
|
198
216
|
owner,
|
|
@@ -233,6 +251,13 @@ var require_declared_data_contract = __commonJS({
|
|
|
233
251
|
}
|
|
234
252
|
if (relations.length) table.relations = relations.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
|
|
235
253
|
}
|
|
254
|
+
for (const table of tables) {
|
|
255
|
+
for (const name of table.client.links ? table.client.links.children : []) {
|
|
256
|
+
const relation = (table.relations || []).find((item) => item.name === name);
|
|
257
|
+
const child = relation && tableByName.get(relation.table);
|
|
258
|
+
if (!relation || !child || child.policy?.k !== "p" || child.policy.v !== relation.fk || child.policy.t !== table.name) fail(`${table.name}.links.children`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
236
261
|
return JSON.stringify({ version: 1, tables });
|
|
237
262
|
}
|
|
238
263
|
function columnType(column) {
|
|
@@ -247,11 +272,14 @@ var require_declared_data_contract = __commonJS({
|
|
|
247
272
|
});
|
|
248
273
|
return values.length ? `{ ${values.join("; ")} }` : "Record<string, never>";
|
|
249
274
|
}
|
|
275
|
+
var LINK_CLIENT_RUNTIME = 'const b64url=s=>btoa(unescape(encodeURIComponent(s))).replace(/\\+/g,"-").replace(/\\//g,"_").replace(/=+$/,"");const createLink=async(table,id,options={})=>{const result=await invoke(table,"link_create",{id,access:options.access,...(options.expiresInDays===undefined?{}:{expires_in_days:options.expiresInDays})});const route=typeof options.returnTo==="string"?options.returnTo:location.pathname+location.search+location.hash;return{link_id:result.link_id,url:location.origin+"/__sw/link#"+result.secret+"."+b64url(route),expires_at:result.expires_at}};const linkDoor=async(path,init)=>{const response=await fetch(path,{credentials:"same-origin",cache:"no-store",...init});const payload=await response.json().catch(()=>({error:"INVALID_DATA_RESPONSE",message:"Link operation returned an invalid response"}));if(!response.ok)throw new DataError(response.status,payload);return payload};const links=Object.freeze({opened:()=>{try{const list=JSON.parse(sessionStorage.getItem("__sw_links_opened")||"[]");return Array.isArray(list)?list:[]}catch(_){return[]}},sessions:async()=>{const payload=await linkDoor("/__sw/link/sessions",{method:"GET"});return{data:payload.data}},forget:async linkId=>{await linkDoor("/__sw/link/forget",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(linkId===undefined?{}:{link_id:linkId})})}});const linkedView=spec=>link=>{if(typeof link!=="string"||!/^lnk_[0-9a-f]{32}$/.test(link))throw new DataError(400,{error:"DATA_INPUT_INVALID",message:"linked() needs a link id"});const view={};for(const[table,canUpdate,children]of spec){const relations={};const root={get:id=>invoke(table,"get",{id,link})};if(canUpdate)root.update=(id,values)=>invoke(table,"update",{id,values,link});for(const[relation,child,canCreate,canUpdateChild]of children){relations[relation]=Object.freeze({list:(parent_id,options={})=>invoke(table,"relation_list",{...options,relation,parent_id,link})});const childOps={};if(canCreate)childOps.create=values=>invoke(child,"create",{values,link});if(canUpdateChild)childOps.update=(id,values)=>invoke(child,"update",{id,values,link});if(canCreate||canUpdateChild)view[child]=Object.freeze(childOps)}if(children.length)root.relations=Object.freeze(relations);view[table]=Object.freeze(root)}return Object.freeze(view)};\n';
|
|
250
276
|
function describeDataClient2(authority, contract_digest) {
|
|
251
277
|
const canonical = authority ? canonicalize2(authority.schema, authority.intents, authority.scopes) : canonicalize2({}, {}, {});
|
|
252
278
|
const { tables } = JSON.parse(canonical);
|
|
253
279
|
const declarations = [];
|
|
254
280
|
const runtimeTables = [];
|
|
281
|
+
const linkedDeclarations = [];
|
|
282
|
+
const linkedSpec = [];
|
|
255
283
|
for (const table of tables) {
|
|
256
284
|
const { name, columns, client, primaryKey } = table;
|
|
257
285
|
const readable = client.read === true ? columns.filter((column) => column.n !== table.author).map((column) => column.n) : client.read || [];
|
|
@@ -306,9 +334,44 @@ var require_declared_data_contract = __commonJS({
|
|
|
306
334
|
relationNames.push(relation.name);
|
|
307
335
|
}
|
|
308
336
|
if (relationDeclarations.length) operations.push(`relations: { ${relationDeclarations.join("; ")} }`);
|
|
337
|
+
const links = client.links;
|
|
338
|
+
if (links) {
|
|
339
|
+
operations.push(`createLink(id: ${id}, options: { access: ${links.edit.length ? "'read' | 'edit'" : "'read'"}; expiresInDays?: number; returnTo?: string }): Promise<{ link_id: string; url: string; expires_at: number | null }>`);
|
|
340
|
+
operations.push(`links(id: ${id}): Promise<{ data: Array<{ link_id: string; access: 'read' | 'edit'; created_at: number; expires_at: number | null }> }>`);
|
|
341
|
+
operations.push(`revokeLink(id: ${id}, linkId: string): Promise<{ revoked: boolean }>`);
|
|
342
|
+
methods.push("createLink", "links", "revokeLink");
|
|
343
|
+
const linkRow = shape(columns, links.read, "read");
|
|
344
|
+
const rootOps = [`get(id: ${id}): Promise<{ data: ${linkRow} | null }>`];
|
|
345
|
+
if (links.edit.length) rootOps.push(`update(id: ${id}, values: ${shape(columns, links.edit, "update")}): Promise<{ data: ${linkRow} | null; count: number; changes: number }>`);
|
|
346
|
+
const childRelations = [];
|
|
347
|
+
const childSpecs = [];
|
|
348
|
+
for (const relationName of links.children) {
|
|
349
|
+
const relation = table.relations.find((item) => item.name === relationName);
|
|
350
|
+
const child = tables.find((candidate) => candidate.name === relation.table);
|
|
351
|
+
const childReadable = child.client.read === true ? child.columns.filter((column) => column.n !== child.author).map((column) => column.n) : child.client.read;
|
|
352
|
+
const childRow = shape(child.columns, childReadable, "read");
|
|
353
|
+
const childId = columnType(child.columns.find((column) => column.n === child.primaryKey));
|
|
354
|
+
childRelations.push(`${JSON.stringify(relationName)}: { list(parentId: ${id}, options?: { limit?: number; after?: ${childId} }): Promise<{ data: ${childRow}[]; next: ${childId} | null; has_more: boolean }> }`);
|
|
355
|
+
const childOps = [];
|
|
356
|
+
const canCreate = links.edit.length > 0 && child.client.create !== null;
|
|
357
|
+
const childUpdate = child.client.update ? child.client.update.filter((field) => field !== relation.fk) : [];
|
|
358
|
+
const canUpdate = links.edit.length > 0 && childUpdate.length > 0;
|
|
359
|
+
if (canCreate) childOps.push(`create(values: ${shape(child.columns, child.client.create, "create", /* @__PURE__ */ new Set([relation.fk]))}): Promise<{ data: ${childRow} | null; count: number; changes: number }>`);
|
|
360
|
+
if (canUpdate) childOps.push(`update(id: ${childId}, values: ${shape(child.columns, childUpdate, "update")}): Promise<{ data: ${childRow} | null; count: number; changes: number }>`);
|
|
361
|
+
if (childOps.length) linkedDeclarations.push(`${JSON.stringify(child.name)}: { ${childOps.join("; ")} }`);
|
|
362
|
+
childSpecs.push([relationName, child.name, canCreate, canUpdate]);
|
|
363
|
+
}
|
|
364
|
+
if (childRelations.length) rootOps.push(`relations: { ${childRelations.join("; ")} }`);
|
|
365
|
+
linkedDeclarations.push(`${JSON.stringify(name)}: { ${rootOps.join("; ")} }`);
|
|
366
|
+
linkedSpec.push([name, links.edit.length > 0, childSpecs]);
|
|
367
|
+
}
|
|
309
368
|
declarations.push(`${JSON.stringify(name)}: { ${operations.join("; ")} }`);
|
|
310
369
|
runtimeTables.push([name, methods, relationNames]);
|
|
311
370
|
}
|
|
371
|
+
if (linkedSpec.length) {
|
|
372
|
+
declarations.push(`links: { opened(): Array<{ link_id: string; table: string; row_id: string; access: 'read' | 'edit' }>; sessions(): Promise<{ data: Array<{ link_id: string; table: string; row_id: string; access: 'read' | 'edit'; expires_at: number }> }>; forget(linkId?: string): Promise<void> }`);
|
|
373
|
+
declarations.push(`linked(linkId: string): { ${linkedDeclarations.join("; ")} }`);
|
|
374
|
+
}
|
|
312
375
|
const declaration = `declare module ${JSON.stringify("somewhere:data")} {
|
|
313
376
|
export type Json = string | number | boolean | null | Json[] | { [key: string]: Json };
|
|
314
377
|
export class DataError extends Error { readonly status: number; readonly code: string | null; constructor(status: number, payload: unknown); }
|
|
@@ -318,7 +381,7 @@ var require_declared_data_contract = __commonJS({
|
|
|
318
381
|
const runtime = `const contract=${JSON.stringify(contract_digest)};
|
|
319
382
|
class DataError extends Error{constructor(status,payload){super(payload&&typeof payload.message==="string"?payload.message:payload&&typeof payload.error==="string"?payload.error:"Data operation failed");this.name="DataError";this.status=status;this.code=payload&&typeof payload.error==="string"?payload.error:null}}
|
|
320
383
|
const invoke=async(table,operation,input)=>{const response=await fetch("/__sw/data",{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({...input,contract,table,operation})});const payload=await response.json().catch(()=>{throw new DataError(response.status,{error:"INVALID_DATA_RESPONSE",message:"Data operation returned an invalid response"})});if(!response.ok)throw new DataError(response.status,payload);return payload};
|
|
321
|
-
const data=Object.freeze(Object.fromEntries(${JSON.stringify(runtimeTables)}.map(([table,operations,relations])=>{const entries=operations.map(operation=>[operation,operation==="list"||operation==="aggregate"?(options={})=>invoke(table,operation,options):operation==="create"?values=>invoke(table,operation,{values}):operation==="update"?(id,values)=>invoke(table,operation,{id,values}):id=>invoke(table,operation,{id})]);if(relations.length)entries.push(["relations",Object.freeze(Object.fromEntries(relations.map(relation=>[relation,Object.freeze({list:(parent_id,options={})=>invoke(table,"relation_list",{...options,relation,parent_id})})])))]);return[table,Object.freeze(Object.fromEntries(entries))];})));
|
|
384
|
+
${linkedSpec.length ? LINK_CLIENT_RUNTIME : ""}const data=Object.freeze(Object.fromEntries(${JSON.stringify(runtimeTables)}.map(([table,operations,relations])=>{const entries=operations.map(operation=>[operation,operation==="list"||operation==="aggregate"?(options={})=>invoke(table,operation,options):operation==="create"?values=>invoke(table,operation,{values}):operation==="update"?(id,values)=>invoke(table,operation,{id,values}):operation==="createLink"?(id,options)=>createLink(table,id,options):operation==="links"?id=>invoke(table,"link_list",{id}):operation==="revokeLink"?(id,link_id)=>invoke(table,"link_revoke",{id,link_id}):id=>invoke(table,operation,{id})]);if(relations.length)entries.push(["relations",Object.freeze(Object.fromEntries(relations.map(relation=>[relation,Object.freeze({list:(parent_id,options={})=>invoke(table,"relation_list",{...options,relation,parent_id})})])))]);return[table,Object.freeze(Object.fromEntries(entries))];}).concat(${linkedSpec.length ? `[["links",links],["linked",linkedView(${JSON.stringify(linkedSpec)})]]` : "[]"})));
|
|
322
385
|
export{data,DataError};
|
|
323
386
|
`;
|
|
324
387
|
return { contract_digest, declaration, runtime, manifest: { version: 1, contract_digest, tables, declaration } };
|
|
@@ -993,6 +1056,15 @@ interface SomewhereAuthRequestOptions {
|
|
|
993
1056
|
interface SomewhereAuthRequireOptions extends SomewhereAuthRequestOptions { role?: 'admin' }
|
|
994
1057
|
interface SomewhereAuthAnonSession { id: string; isAnon: true; expiresAt: number }
|
|
995
1058
|
interface SomewhereAuthModerationRevoked { revoked_sessions: number; revoked_refresh_tokens: number }
|
|
1059
|
+
// The app's own users under explicit server authority (deployed production
|
|
1060
|
+
// functions; not row-bound jobs). Check the caller first: this is not a
|
|
1061
|
+
// browser user list. ids: exact lookup (max 200, no limit/cursor); otherwise
|
|
1062
|
+
// pages ordered by (created_at, id), limit 1-200 (default 50). Banned and
|
|
1063
|
+
// agent accounts are not listed; absent ids are omitted.
|
|
1064
|
+
interface SomewhereAuthDirectoryUser { id: string; email: string; display_name: string | null; email_verified: boolean; created_at: number | null }
|
|
1065
|
+
interface SomewhereRuntimeAuthServer {
|
|
1066
|
+
listUsers(options?: { ids: readonly string[]; limit?: never; cursor?: never } | { ids?: never; limit?: number; cursor?: string }): Promise<{ users: SomewhereAuthDirectoryUser[]; next_cursor: string | null }>;
|
|
1067
|
+
}
|
|
996
1068
|
interface SomewhereRuntimeAuthModeration {
|
|
997
1069
|
ban(req: Request, userId: string, options?: { reason?: string | null } | null): Promise<SomewhereAuthModerationRevoked & {
|
|
998
1070
|
user: { id: string; email: string; banned: true; banned_reason: string | null };
|
|
@@ -1067,13 +1139,21 @@ interface SomewhereRuntimeAuth {
|
|
|
1067
1139
|
// Password change and account deletion end every session of the account; these clear the cookies.
|
|
1068
1140
|
updatePasswordWithCookie(req: Request, options: { new_password: string; current_password?: string }): Promise<{ updated: true }>;
|
|
1069
1141
|
deleteUserWithCookie(req: Request): Promise<{ deleted: true }>;
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1142
|
+
// Start Google/GitHub/Discord sign-in from a server handler: stages this attempt's HttpOnly
|
|
1143
|
+
// verifier cookie on the response and resolves the provider start URL (only its challenge travels).
|
|
1144
|
+
oauthStart(provider: 'google' | 'github' | 'discord', options: { redirect_uri: string }): Promise<string>;
|
|
1145
|
+
/** @deprecated Always throws OAUTH_START_REQUIRES_BINDING: sign-in is bound to the browser that starts it. Use: Response.redirect(await sw.auth.oauthStart('google', { redirect_uri }), 302). The parameter stays assignable so apps on older SDK types still typecheck. */
|
|
1146
|
+
googleUrl(options: { redirect_uri: string }): never;
|
|
1147
|
+
/** @deprecated Always throws OAUTH_START_REQUIRES_BINDING: sign-in is bound to the browser that starts it. Use: Response.redirect(await sw.auth.oauthStart('github', { redirect_uri }), 302). The parameter stays assignable so apps on older SDK types still typecheck. */
|
|
1148
|
+
githubUrl(options: { redirect_uri: string }): never;
|
|
1149
|
+
/** @deprecated Always throws OAUTH_START_REQUIRES_BINDING: sign-in is bound to the browser that starts it. Use: Response.redirect(await sw.auth.oauthStart('discord', { redirect_uri }), 302). The parameter stays assignable so apps on older SDK types still typecheck. */
|
|
1150
|
+
discordUrl(options: { redirect_uri: string }): never;
|
|
1151
|
+
// Exchanges take the callback's ?code= and its public ?attempt= (which selects this browser's attempt cookie).
|
|
1152
|
+
googleExchange(options: { code: string; attempt: string; redirect_uri?: string }): Promise<SomewhereAuthGoogleSession>;
|
|
1153
|
+
githubExchange(options: { code: string; attempt: string }): Promise<SomewhereAuthOAuthSession>;
|
|
1154
|
+
discordExchange(options: { code: string; attempt: string }): Promise<SomewhereAuthOAuthSession>;
|
|
1155
|
+
// Reads ?code and ?attempt, exchanges with that attempt's oauthStart verifier from this request,
|
|
1156
|
+
// stages the session cookies, clears that attempt, returns a 302 to redirectTo (default '/').
|
|
1077
1157
|
googleCallbackWithCookie(req: Request, redirectTo?: string): Promise<Response>;
|
|
1078
1158
|
githubCallbackWithCookie(req: Request, redirectTo?: string): Promise<Response>;
|
|
1079
1159
|
discordCallbackWithCookie(req: Request, redirectTo?: string): Promise<Response>;
|
|
@@ -1094,6 +1174,7 @@ interface SomewhereRuntimeAuth {
|
|
|
1094
1174
|
getAcceptedInvite(req: Request, id: string): Promise<SomewhereAuthInvite>;
|
|
1095
1175
|
anonSession(): Promise<SomewhereAuthAnonSession>;
|
|
1096
1176
|
readonly moderation: SomewhereRuntimeAuthModeration;
|
|
1177
|
+
readonly server: SomewhereRuntimeAuthServer;
|
|
1097
1178
|
}
|
|
1098
1179
|
interface SomewhereRuntimeCrypto {
|
|
1099
1180
|
// Lowercase hex HMAC-SHA256 of message keyed by secret.
|
|
@@ -3436,6 +3517,8 @@ var require_schema_types = __commonJS({
|
|
|
3436
3517
|
interface Scope { readonly __somewhereScope: unique symbol }
|
|
3437
3518
|
interface OwnerScope extends Scope { readonly __somewhereOwner: unique symbol }
|
|
3438
3519
|
interface MemberScope extends Scope { readonly __somewhereMember: unique symbol }
|
|
3520
|
+
interface GroupScope extends Scope { readonly __somewhereGroup: unique symbol }
|
|
3521
|
+
interface AppRoleScope extends Scope { readonly __somewhereAppRole: unique symbol }
|
|
3439
3522
|
interface ColumnOptions<Default> {
|
|
3440
3523
|
nullable?: boolean; default?: Default | null; unique?: boolean;
|
|
3441
3524
|
references?: string; onDelete?: 'cascade' | 'restrict'; renamedFrom?: string;
|
|
@@ -3443,6 +3526,10 @@ var require_schema_types = __commonJS({
|
|
|
3443
3526
|
interface ClientPermissions<Field extends string> {
|
|
3444
3527
|
identity?: 'authenticated' | 'visitor'; read?: boolean | readonly Field[]; publicRead?: boolean | { where: Partial<Record<Field, string | number | boolean | null>> };
|
|
3445
3528
|
create?: readonly Field[] | false | null; update?: readonly Field[] | false | null; delete?: boolean;
|
|
3529
|
+
links?: ClientLinkPermissions<Field>;
|
|
3530
|
+
}
|
|
3531
|
+
interface ClientLinkPermissions<Field extends string> {
|
|
3532
|
+
read: true | readonly Field[]; edit?: readonly Field[] | false; children?: readonly string[]; maxDays?: number;
|
|
3446
3533
|
}
|
|
3447
3534
|
interface FileCollection { readonly __somewhereFileCollection: unique symbol }
|
|
3448
3535
|
type FileOperation = 'read' | 'upload' | 'replace' | 'delete';
|
|
@@ -3486,11 +3573,11 @@ function removed(): SomewhereSchemaDeclaration.ColumnMarker;
|
|
|
3486
3573
|
function removedTable(): SomewhereSchemaDeclaration.TableMarker;
|
|
3487
3574
|
function exported(): SomewhereSchemaDeclaration.TableMarker;
|
|
3488
3575
|
`;
|
|
3489
|
-
var policySignatures = `function anyOf(owner: SomewhereSchemaDeclaration.OwnerScope,
|
|
3490
|
-
function anyOf(
|
|
3576
|
+
var policySignatures = `function anyOf(owner: SomewhereSchemaDeclaration.OwnerScope, other: SomewhereSchemaDeclaration.MemberScope | SomewhereSchemaDeclaration.GroupScope | SomewhereSchemaDeclaration.AppRoleScope): SomewhereSchemaDeclaration.Scope;
|
|
3577
|
+
function anyOf(other: SomewhereSchemaDeclaration.MemberScope | SomewhereSchemaDeclaration.GroupScope | SomewhereSchemaDeclaration.AppRoleScope, owner: SomewhereSchemaDeclaration.OwnerScope): SomewhereSchemaDeclaration.Scope;
|
|
3491
3578
|
function parent(options: { via: string; table?: string }): SomewhereSchemaDeclaration.Scope;
|
|
3492
|
-
function group(options?: { column?: string; roles?: Partial<Record<'read' | 'create' | 'update' | 'delete', string[]>> }): SomewhereSchemaDeclaration.
|
|
3493
|
-
function appRole(options: { roles: Partial<Record<'read' | 'create' | 'update' | 'delete', string[]>> }): SomewhereSchemaDeclaration.
|
|
3579
|
+
function group(options?: { column?: string; roles?: Partial<Record<'read' | 'create' | 'update' | 'delete', string[]>> }): SomewhereSchemaDeclaration.GroupScope;
|
|
3580
|
+
function appRole(options: { roles: Partial<Record<'read' | 'create' | 'update' | 'delete', string[]>> }): SomewhereSchemaDeclaration.AppRoleScope;
|
|
3494
3581
|
`;
|
|
3495
3582
|
var SCHEMA_DECLARATION2 = types + signatures.replace(/^function /gm, "declare function ") + `declare module 'somewhere/db' {
|
|
3496
3583
|
${(signatures + policySignatures).replace(/^function /gm, " export function ")}}
|
|
@@ -3533,7 +3620,7 @@ function parseClientPermissions(value, columns, scope) {
|
|
|
3533
3620
|
}
|
|
3534
3621
|
const input = value;
|
|
3535
3622
|
for (const key of Object.keys(input)) {
|
|
3536
|
-
if (!["identity", "read", "publicRead", "create", "update", "delete"].includes(key)) {
|
|
3623
|
+
if (!["identity", "read", "publicRead", "create", "update", "delete", "links"].includes(key)) {
|
|
3537
3624
|
return fail(`Unknown client permission "${key}".`);
|
|
3538
3625
|
}
|
|
3539
3626
|
}
|
|
@@ -3639,7 +3726,77 @@ function parseClientPermissions(value, columns, scope) {
|
|
|
3639
3726
|
}
|
|
3640
3727
|
}
|
|
3641
3728
|
}
|
|
3642
|
-
|
|
3729
|
+
let links;
|
|
3730
|
+
if (input.links !== void 0) {
|
|
3731
|
+
const parsed = parseLinkPermissions(input.links, read, writes.update, columns, scope);
|
|
3732
|
+
if (typeof parsed === "string") return fail(parsed);
|
|
3733
|
+
links = parsed;
|
|
3734
|
+
}
|
|
3735
|
+
return { ok: true, permissions: { identity, read, publicRead, ...writes, delete: remove, ...links ? { links } : {} } };
|
|
3736
|
+
}
|
|
3737
|
+
function authoredClientFromCanonical(client) {
|
|
3738
|
+
if (!client || typeof client !== "object" || Array.isArray(client)) return client;
|
|
3739
|
+
const links = client.links;
|
|
3740
|
+
if (!links || typeof links !== "object" || Array.isArray(links)) return client;
|
|
3741
|
+
const l = links;
|
|
3742
|
+
const keys = Object.keys(l).sort().join(",");
|
|
3743
|
+
if (keys !== "children,edit,maxDays,read" || !Array.isArray(l.read) || !Array.isArray(l.edit) || !Array.isArray(l.children) || !(l.maxDays === null || typeof l.maxDays === "number")) return client;
|
|
3744
|
+
const authored = { read: l.read, edit: l.edit.length === 0 ? false : l.edit, children: l.children };
|
|
3745
|
+
if (l.maxDays !== null) authored.maxDays = l.maxDays;
|
|
3746
|
+
return { ...client, links: authored };
|
|
3747
|
+
}
|
|
3748
|
+
function parseLinkPermissions(value, read, update, columns, scope) {
|
|
3749
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return "client.links must be an object: { read, edit?, children?, maxDays? }.";
|
|
3750
|
+
const input = value;
|
|
3751
|
+
for (const key2 of Object.keys(input)) {
|
|
3752
|
+
if (!["read", "edit", "children", "maxDays"].includes(key2)) return `Unknown client.links option "${key2}". Allowed: read, edit, children, maxDays.`;
|
|
3753
|
+
}
|
|
3754
|
+
const owned = scope.kind === "owner" && scope.visitors !== true || scope.kind === "policy" && typeof scope.column === "string";
|
|
3755
|
+
if (!owned) return "client.links needs rows with one signed-in owner: owner() (without visitors) or anyOf(owner(), ...).";
|
|
3756
|
+
if (read === false) return "client.links needs client.read: a link can only read fields the app data client reads.";
|
|
3757
|
+
const readable = read === true ? columns.filter((column) => column.helper !== "blob").map((column) => column.name) : read;
|
|
3758
|
+
const list = (raw, label, allowed, allowedLabel) => {
|
|
3759
|
+
if (!Array.isArray(raw)) return `client.links.${label} must list field names.`;
|
|
3760
|
+
const names = [];
|
|
3761
|
+
for (const entry of raw) {
|
|
3762
|
+
if (typeof entry !== "string") return `client.links.${label} fields must be column names.`;
|
|
3763
|
+
const name = entry.toLowerCase();
|
|
3764
|
+
if (!allowed.includes(name)) return `client.links.${label} names "${entry}", which is not in ${allowedLabel}.`;
|
|
3765
|
+
if (names.includes(name)) return `client.links.${label} declares field "${entry}" twice.`;
|
|
3766
|
+
names.push(name);
|
|
3767
|
+
}
|
|
3768
|
+
return names.sort();
|
|
3769
|
+
};
|
|
3770
|
+
const linkRead = input.read === true ? [...readable].sort() : list(input.read, "read", readable, "client.read");
|
|
3771
|
+
if (typeof linkRead === "string") return linkRead;
|
|
3772
|
+
if (linkRead.length === 0) return "client.links.read must name at least one field, or be true.";
|
|
3773
|
+
const key = columns.find((column) => column.helper === "id")?.name;
|
|
3774
|
+
if (!key || !linkRead.includes(key)) return "client.links.read must include the primary key.";
|
|
3775
|
+
let edit = [];
|
|
3776
|
+
if (input.edit !== void 0 && input.edit !== false) {
|
|
3777
|
+
if (!update) return "client.links.edit needs client.update: a link can only update fields the app data client updates.";
|
|
3778
|
+
const parsed = list(input.edit, "edit", update, "client.update");
|
|
3779
|
+
if (typeof parsed === "string") return parsed;
|
|
3780
|
+
if (parsed.length === 0) return "client.links.edit must name at least one field, or be false.";
|
|
3781
|
+
if (scope.column && parsed.includes(scope.column)) return `client.links.edit cannot write the owner field "${scope.column}".`;
|
|
3782
|
+
edit = parsed;
|
|
3783
|
+
}
|
|
3784
|
+
let children = [];
|
|
3785
|
+
if (input.children !== void 0) {
|
|
3786
|
+
if (!Array.isArray(input.children) || input.children.some((entry) => typeof entry !== "string" || !/^[A-Za-z_][A-Za-z0-9_]{0,63}$/.test(entry))) {
|
|
3787
|
+
return "client.links.children must list relation names declared on this table.";
|
|
3788
|
+
}
|
|
3789
|
+
children = [...new Set(input.children.map((entry) => entry.toLowerCase()))].sort();
|
|
3790
|
+
if (children.length !== input.children.length) return "client.links.children names a relation twice.";
|
|
3791
|
+
}
|
|
3792
|
+
let maxDays = null;
|
|
3793
|
+
if (input.maxDays !== void 0) {
|
|
3794
|
+
if (typeof input.maxDays !== "number" || !Number.isSafeInteger(input.maxDays) || input.maxDays < 1 || input.maxDays > 365) {
|
|
3795
|
+
return "client.links.maxDays must be a whole number of days from 1 to 365.";
|
|
3796
|
+
}
|
|
3797
|
+
maxDays = input.maxDays;
|
|
3798
|
+
}
|
|
3799
|
+
return { read: linkRead, edit, children, maxDays };
|
|
3643
3800
|
}
|
|
3644
3801
|
|
|
3645
3802
|
// worker/src/services/jobs/limits.ts
|
|
@@ -3928,7 +4085,7 @@ function bakedTableSchemaFromDeclared(declaredJson) {
|
|
|
3928
4085
|
const sc = scope;
|
|
3929
4086
|
if (typeof sc.kind !== "string") return null;
|
|
3930
4087
|
const policyIdentity = sc.kind === "policy" ? declaredPolicyIdentity(sc.policy) : {};
|
|
3931
|
-
const parsed = parseClientPermissions(shape.client, permissionColumns, {
|
|
4088
|
+
const parsed = parseClientPermissions(authoredClientFromCanonical(shape.client), permissionColumns, {
|
|
3932
4089
|
kind: sc.kind,
|
|
3933
4090
|
...visitors ? { visitors: true } : {},
|
|
3934
4091
|
...typeof sc.column === "string" ? { column: sc.column } : {},
|
|
@@ -3959,7 +4116,11 @@ function declaredPolicyIdentity(value) {
|
|
|
3959
4116
|
if (node.kind === "owner" && typeof node.column === "string") return { column: node.column };
|
|
3960
4117
|
if (node.kind === "member" && Array.isArray(node.group) && node.group.every((entry) => typeof entry === "string")) return { group: node.group };
|
|
3961
4118
|
if (node.kind === "any_of" && Array.isArray(node.policies)) {
|
|
3962
|
-
|
|
4119
|
+
const branchGroup = (child) => {
|
|
4120
|
+
const c = child;
|
|
4121
|
+
return c && c.kind === "group" && typeof c.column === "string" ? { group: [c.column] } : {};
|
|
4122
|
+
};
|
|
4123
|
+
return node.policies.reduce((all, child) => ({ ...all, ...declaredPolicyIdentity(child), ...branchGroup(child) }), {});
|
|
3963
4124
|
}
|
|
3964
4125
|
return {};
|
|
3965
4126
|
}
|
|
@@ -3974,9 +4135,10 @@ function bakedPolicyFromDeclared(value, depth = 0, edges = 0, underParent = fals
|
|
|
3974
4135
|
return member ? { k: "m", m: member } : null;
|
|
3975
4136
|
}
|
|
3976
4137
|
if (node.kind === "any_of" && Array.isArray(node.policies) && node.policies.length === 2) {
|
|
3977
|
-
|
|
4138
|
+
const second = node.policies[1]?.kind;
|
|
4139
|
+
if (depth !== 0 && !underParent || node.policies[0]?.kind !== "owner" || second !== "member" && second !== "group" && second !== "app_role") return null;
|
|
3978
4140
|
const left = bakedPolicyFromDeclared(node.policies[0], depth + 1);
|
|
3979
|
-
const right = bakedPolicyFromDeclared(node.policies[1], depth + 1);
|
|
4141
|
+
const right = bakedPolicyFromDeclared(node.policies[1], depth + 1, edges, second !== "member");
|
|
3980
4142
|
return left && right ? { k: "a", p: [left, right] } : null;
|
|
3981
4143
|
}
|
|
3982
4144
|
if (node.kind === "group") {
|
|
@@ -4414,6 +4576,43 @@ function validateDeclaredRelations(tables, tableByName, knownColumns, markedGone
|
|
|
4414
4576
|
}
|
|
4415
4577
|
}
|
|
4416
4578
|
|
|
4579
|
+
// worker/src/utils/db-schema-deploy/extract-schema-links.ts
|
|
4580
|
+
function validateRowLinks(tables, tableByName, errors) {
|
|
4581
|
+
const childOf = /* @__PURE__ */ new Map();
|
|
4582
|
+
for (const t of tables) {
|
|
4583
|
+
const links = t.client?.links;
|
|
4584
|
+
if (!links) continue;
|
|
4585
|
+
for (const name of links.children) {
|
|
4586
|
+
const relation = t.relations.find((r) => r.name === name);
|
|
4587
|
+
const child = relation ? tableByName.get(relation.table) : void 0;
|
|
4588
|
+
if (!relation || relation.kind !== "hasMany" || !child) {
|
|
4589
|
+
errors.push(`Table "${t.name}" lists "${name}" in client.links.children, which is not a hasMany relation declared on "${t.name}".`);
|
|
4590
|
+
continue;
|
|
4591
|
+
}
|
|
4592
|
+
const scope = child.scope;
|
|
4593
|
+
if (scope.kind !== "policy" || scope.policy.kind !== "parent" || scope.policy.table !== t.name || scope.policy.via !== relation.fk) {
|
|
4594
|
+
errors.push(`Table "${t.name}" lists "${name}" in client.links.children, but "${child.name}" is not scoped parent({ via: '${relation.fk}' }) on "${t.name}". A link reaches only rows that belong to the linked row.`);
|
|
4595
|
+
continue;
|
|
4596
|
+
}
|
|
4597
|
+
if (!child.client || child.client.read === false) {
|
|
4598
|
+
errors.push(`Table "${t.name}" lists "${name}" in client.links.children, but "${child.name}" declares no client.read.`);
|
|
4599
|
+
continue;
|
|
4600
|
+
}
|
|
4601
|
+
const earlier = childOf.get(child.name);
|
|
4602
|
+
if (earlier && earlier !== t.name) {
|
|
4603
|
+
errors.push(`Table "${child.name}" is a link child of both "${earlier}" and "${t.name}". Declare it as a link child of one table.`);
|
|
4604
|
+
continue;
|
|
4605
|
+
}
|
|
4606
|
+
childOf.set(child.name, t.name);
|
|
4607
|
+
}
|
|
4608
|
+
}
|
|
4609
|
+
for (const [child, parent] of childOf) {
|
|
4610
|
+
if (tableByName.get(child)?.client?.links) {
|
|
4611
|
+
errors.push(`Table "${child}" declares client.links and is also a link child of "${parent}". Links reach one level of children.`);
|
|
4612
|
+
}
|
|
4613
|
+
}
|
|
4614
|
+
}
|
|
4615
|
+
|
|
4417
4616
|
// worker/src/utils/db-schema-deploy/extract-schema-files.ts
|
|
4418
4617
|
var FILE_OPERATIONS = ["read", "upload", "replace", "delete"];
|
|
4419
4618
|
var MAX_FILE_COLLECTIONS = 20;
|
|
@@ -4869,10 +5068,13 @@ var sorted = (list) => [...list].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
|
4869
5068
|
function resolveGroupScopes(tables, vocabulary, errors) {
|
|
4870
5069
|
const allRoles = [...BUILT_IN_GROUP_ROLES2, ...vocabulary?.roles ?? []];
|
|
4871
5070
|
for (const t of tables) {
|
|
4872
|
-
if (t.scope.kind !== "policy"
|
|
4873
|
-
const
|
|
5071
|
+
if (t.scope.kind !== "policy") continue;
|
|
5072
|
+
const branch = t.scope.policy.kind === "any_of" ? t.scope.policy.policies.find((p) => p.kind === "group") : void 0;
|
|
5073
|
+
const node = t.scope.policy.kind === "group" ? t.scope.policy : branch?.kind === "group" ? branch : null;
|
|
5074
|
+
if (!node) continue;
|
|
4874
5075
|
const declared = declaredGroupRoles.get(node);
|
|
4875
5076
|
if (!declared) continue;
|
|
5077
|
+
const omitted = branch ? [] : allRoles;
|
|
4876
5078
|
const where = `line ${declared.line}: `;
|
|
4877
5079
|
const column = t.columns.find((c) => c.name === node.column);
|
|
4878
5080
|
if (!column) {
|
|
@@ -4881,7 +5083,7 @@ function resolveGroupScopes(tables, vocabulary, errors) {
|
|
|
4881
5083
|
errors.push(`${where}Table "${t.name}" uses group({ column: '${node.column}' }), which must be a non-nullable text() column: every row belongs to exactly one group.`);
|
|
4882
5084
|
}
|
|
4883
5085
|
for (const op of GROUP_OPERATIONS) {
|
|
4884
|
-
const list = declared.explicit[op] ??
|
|
5086
|
+
const list = declared.explicit[op] ?? omitted;
|
|
4885
5087
|
for (const role of list) {
|
|
4886
5088
|
if (!allRoles.includes(role)) {
|
|
4887
5089
|
errors.push(`${where}group({ roles: { ${op} } }) on table "${t.name}" names "${role}", which is not a group role. Use owner, admin, member, or a role declared in groups.roles.`);
|
|
@@ -4895,10 +5097,12 @@ function resolveGroupScopes(tables, vocabulary, errors) {
|
|
|
4895
5097
|
errors.push(`${where}group() on table "${t.name}" lets ${missing.join(", ")} ${op} rows they cannot read. A role that may ${op} must also read, because the write returns the row.`);
|
|
4896
5098
|
}
|
|
4897
5099
|
}
|
|
5100
|
+
if (branch && GROUP_OPERATIONS.every((op) => node.roles[op].length === 0)) {
|
|
5101
|
+
errors.push(`${where}group() inside anyOf() on table "${t.name}" grants no operation. List the group roles that may read, update or delete every row of the group.`);
|
|
5102
|
+
}
|
|
4898
5103
|
if (t.client?.create && !t.client.create.includes(node.column)) {
|
|
4899
5104
|
errors.push(`${where}Table "${t.name}" uses group() and client.create must include "${node.column}" so every new row names the group it belongs to.`);
|
|
4900
5105
|
}
|
|
4901
|
-
declaredGroupRoles.delete(node);
|
|
4902
5106
|
}
|
|
4903
5107
|
}
|
|
4904
5108
|
function groupLeafOf(t) {
|
|
@@ -5001,8 +5205,10 @@ function readAppRoleScope(r, tableName, line, fail) {
|
|
|
5001
5205
|
function resolveAppRoleScopes(tables, appRoles, errors) {
|
|
5002
5206
|
const vocabulary = new Set((appRoles ?? []).map((role) => role.name));
|
|
5003
5207
|
for (const t of tables) {
|
|
5004
|
-
if (t.scope.kind !== "policy"
|
|
5005
|
-
const
|
|
5208
|
+
if (t.scope.kind !== "policy") continue;
|
|
5209
|
+
const root = t.scope.policy;
|
|
5210
|
+
const node = root.kind === "app_role" ? root : root.kind === "any_of" ? root.policies.find((p) => p.kind === "app_role") : void 0;
|
|
5211
|
+
if (!node) continue;
|
|
5006
5212
|
const declared = declaredLines.get(node);
|
|
5007
5213
|
if (!declared) continue;
|
|
5008
5214
|
for (const { op, name, line } of declared.names) {
|
|
@@ -5016,6 +5222,9 @@ function resolveAppRoleScopes(tables, appRoles, errors) {
|
|
|
5016
5222
|
errors.push(`line ${declared.line}: appRole() on table "${t.name}" lets ${missing.join(", ")} ${op} rows they cannot read. A role that may ${op} must also read, because the write returns the row.`);
|
|
5017
5223
|
}
|
|
5018
5224
|
}
|
|
5225
|
+
if (root.kind === "any_of" && APP_ROLE_OPERATIONS.every((op) => node.roles[op].length === 0)) {
|
|
5226
|
+
errors.push(`line ${declared.line}: appRole() inside anyOf() on table "${t.name}" grants no operation. List the app roles that may read, update or delete every row.`);
|
|
5227
|
+
}
|
|
5019
5228
|
declaredLines.delete(node);
|
|
5020
5229
|
}
|
|
5021
5230
|
}
|
|
@@ -5412,7 +5621,7 @@ function readClientPermissions(r) {
|
|
|
5412
5621
|
}
|
|
5413
5622
|
out[key.name] = fields;
|
|
5414
5623
|
} else {
|
|
5415
|
-
out[key.name] = r.readLiteral(`for client.${key.name}`);
|
|
5624
|
+
out[key.name] = key.name === "links" && r.peek().kind === "punct" && r.peek().value === "{" ? readClientPermissions(r) : r.readLiteral(`for client.${key.name}`);
|
|
5416
5625
|
}
|
|
5417
5626
|
if (!r.tryPunct(",")) {
|
|
5418
5627
|
r.expectPunct("}", "closing client permissions");
|
|
@@ -5713,23 +5922,30 @@ function readPolicyMember(r, tableName, line) {
|
|
|
5713
5922
|
if (scope.kind !== "member") throw new SchemaTsError(`line ${line}: invalid member() policy.`);
|
|
5714
5923
|
return scope;
|
|
5715
5924
|
}
|
|
5925
|
+
var ANY_OF_FORMS = "anyOf() accepts exactly one owner() and one member(), group() or appRole().";
|
|
5926
|
+
function readAnyOfBranch(r, tableName, which) {
|
|
5927
|
+
const tok = r.expectIdent(`for the ${which} policy in anyOf() on table "${tableName}"`);
|
|
5928
|
+
const failAt = (at, message) => {
|
|
5929
|
+
throw new SchemaTsError(`line ${at}: ${message}`);
|
|
5930
|
+
};
|
|
5931
|
+
if (tok.value === "owner") return readPolicyOwner(r, tableName, tok.line);
|
|
5932
|
+
if (tok.value === "member") return readPolicyMember(r, tableName, tok.line);
|
|
5933
|
+
if (tok.value === "group") return readGroupScope(r, tableName, tok.line, failAt);
|
|
5934
|
+
if (tok.value === "appRole") return readAppRoleScope(r, tableName, tok.line, failAt);
|
|
5935
|
+
throw new SchemaTsError(`line ${tok.line}: ${ANY_OF_FORMS}`);
|
|
5936
|
+
}
|
|
5716
5937
|
function readAnyOfScope(r, tableName, line) {
|
|
5717
5938
|
r.expectPunct("(", 'after "anyOf"');
|
|
5718
|
-
const
|
|
5719
|
-
const firstPolicy = first.value === "owner" ? readPolicyOwner(r, tableName, first.line) : first.value === "member" ? readPolicyMember(r, tableName, first.line) : null;
|
|
5720
|
-
if (!firstPolicy) throw new SchemaTsError(`line ${first.line}: anyOf() only accepts owner() and member().`);
|
|
5939
|
+
const firstPolicy = readAnyOfBranch(r, tableName, "first");
|
|
5721
5940
|
r.expectPunct(",", `between the two policies in anyOf() on table "${tableName}"`);
|
|
5722
|
-
const
|
|
5723
|
-
const secondPolicy = second.value === "owner" ? readPolicyOwner(r, tableName, second.line) : second.value === "member" ? readPolicyMember(r, tableName, second.line) : null;
|
|
5724
|
-
if (!secondPolicy) throw new SchemaTsError(`line ${second.line}: anyOf() only accepts owner() and member().`);
|
|
5941
|
+
const secondPolicy = readAnyOfBranch(r, tableName, "second");
|
|
5725
5942
|
r.tryPunct(",");
|
|
5726
5943
|
r.expectPunct(")", "closing anyOf()");
|
|
5727
|
-
|
|
5728
|
-
|
|
5729
|
-
|
|
5730
|
-
const
|
|
5731
|
-
|
|
5732
|
-
return { kind: "policy", policy: { kind: "any_of", policies: [owner, member] } };
|
|
5944
|
+
const owners = [firstPolicy, secondPolicy].filter((p) => p.kind === "owner");
|
|
5945
|
+
if (owners.length !== 1) throw new SchemaTsError(`line ${line}: ${ANY_OF_FORMS}`);
|
|
5946
|
+
const owner = owners[0];
|
|
5947
|
+
const other = firstPolicy.kind === "owner" ? secondPolicy : firstPolicy;
|
|
5948
|
+
return { kind: "policy", policy: { kind: "any_of", policies: [owner, other] } };
|
|
5733
5949
|
}
|
|
5734
5950
|
function readParentScope(r, tableName, line) {
|
|
5735
5951
|
r.expectPunct("(", 'after "parent"');
|
|
@@ -6061,11 +6277,12 @@ function readTable(r, rawName, nameLine) {
|
|
|
6061
6277
|
if (columns.filter((column) => column.helper === "id").length !== 1) {
|
|
6062
6278
|
throw new SchemaTsError(`line ${nameLine}: table "${rawName}": client operations require exactly one id() column.`);
|
|
6063
6279
|
}
|
|
6064
|
-
const
|
|
6280
|
+
const branch = scope.kind === "policy" && scope.policy.kind === "any_of" ? scope.policy.policies.find((node) => node.kind === "member" || node.kind === "group") : void 0;
|
|
6281
|
+
const branchGroup = branch?.kind === "member" ? branch.group : branch?.kind === "group" ? [branch.column] : void 0;
|
|
6065
6282
|
const parsed = parseClientPermissions(clientInput, columns, {
|
|
6066
6283
|
...scope,
|
|
6067
6284
|
...managedOwner ? { column: managedOwner.column } : {},
|
|
6068
|
-
...
|
|
6285
|
+
...branchGroup ? { group: branchGroup } : {}
|
|
6069
6286
|
});
|
|
6070
6287
|
if (!parsed.ok) throw new SchemaTsError(`line ${nameLine}: table "${rawName}": ${parsed.message}`);
|
|
6071
6288
|
const key = columns.find((column) => column.helper === "id").name;
|
|
@@ -6215,6 +6432,7 @@ function extractSchemaTs(source) {
|
|
|
6215
6432
|
}
|
|
6216
6433
|
}
|
|
6217
6434
|
validateDeclaredRelations(tables, tableByName, knownColumns, (table) => removedTables.includes(table) ? "removedTable()" : exportedTables.includes(table) ? "exported()" : null, errors);
|
|
6435
|
+
validateRowLinks(tables, tableByName, errors);
|
|
6218
6436
|
if (fileCollections) {
|
|
6219
6437
|
errors.push(...fileErrors);
|
|
6220
6438
|
validateFileCollections(fileCollections, (name) => {
|