primitive-admin 1.2.0-alpha.10 → 1.2.0-alpha.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/commands/agent-sessions.d.ts +26 -10
- package/dist/src/commands/agent-sessions.js +80 -83
- package/dist/src/commands/agent-sessions.js.map +1 -1
- package/dist/src/commands/init.js +101 -34
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/locks.d.ts +5 -3
- package/dist/src/commands/locks.js +17 -61
- package/dist/src/commands/locks.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +1 -1
- package/dist/src/commands/rule-sets.js +0 -1
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/sync.d.ts +6 -0
- package/dist/src/commands/sync.js +129 -60
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +6 -4
- package/dist/src/lib/api-client.js +4 -14
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/function-typecheck.js +3 -0
- package/dist/src/lib/function-typecheck.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +19 -2
- package/dist/src/lib/generated-config-surfaces.js +29 -2
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/generated-sdk-types.d.ts +1 -1
- package/dist/src/lib/generated-sdk-types.js +1 -1
- package/dist/src/lib/generated-sdk-types.js.map +1 -1
- package/dist/src/lib/init-assets.d.ts +2 -6
- package/dist/src/lib/init-assets.js +11 -27
- package/dist/src/lib/init-assets.js.map +1 -1
- package/dist/src/lib/init-schema.d.ts +8 -0
- package/dist/src/lib/init-schema.js +31 -0
- package/dist/src/lib/init-schema.js.map +1 -1
- package/dist/src/lib/session-scope.d.ts +26 -0
- package/dist/src/lib/session-scope.js +58 -0
- package/dist/src/lib/session-scope.js.map +1 -0
- package/dist/src/lib/sync-resource-types.d.ts +54 -0
- package/dist/src/lib/sync-resource-types.js +92 -1
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/template.d.ts +39 -3
- package/dist/src/lib/template.js +103 -14
- package/dist/src/lib/template.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated-sdk-types.js","sourceRoot":"","sources":["../../../src/lib/generated-sdk-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"generated-sdk-types.js","sourceRoot":"","sources":["../../../src/lib/generated-sdk-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,yq+bAAyq+b,CAAC"}
|
|
@@ -18,12 +18,6 @@ export declare function platformLabel(platform: Platform): string;
|
|
|
18
18
|
* file is the cheapest place for a reader to find that rule.
|
|
19
19
|
*/
|
|
20
20
|
export declare const CANONICAL_SCHEMA_HEADER = "# The model schema for this app \u2014 ONE copy, shared by every client.\n#\n# The TOML keys here are the wire field names, so a second copy that drifts\n# orphans the other one's records. Every client reads THIS file:\n# - the web client's codegen input points at it, and its generated barrel\n# imports it directly\n# - the Swift client names it in `bao-codegen.json` beside its sources\n# Add or change a model here, then re-run each client's codegen.\n";
|
|
21
|
-
/**
|
|
22
|
-
* A starter schema for the rare composition that has no template starter to
|
|
23
|
-
* adopt. The scaffolded clients normally supply their own, which is what a
|
|
24
|
-
* composed repo promotes to the root.
|
|
25
|
-
*/
|
|
26
|
-
export declare const FALLBACK_STARTER_SCHEMA = "[models.user_prefs.fields.id]\ntype = \"id\"\nauto_assign = true\nindexed = true\nrequired = true\n\n[models.user_prefs.fields.key]\ntype = \"string\"\nindexed = true\nunique = true\n\n[models.user_prefs.fields.value]\ntype = \"string\"\n";
|
|
27
21
|
/**
|
|
28
22
|
* The app-wide `AGENTS.md` for a repository with several clients.
|
|
29
23
|
*
|
|
@@ -36,4 +30,6 @@ export declare function rootAgentsMarkdown(input: {
|
|
|
36
30
|
platform: Platform;
|
|
37
31
|
dir: string;
|
|
38
32
|
}>;
|
|
33
|
+
/** Whether the repository has `models/models.toml`; the layout names it only then. */
|
|
34
|
+
schema?: boolean;
|
|
39
35
|
}): string;
|
|
@@ -18,25 +18,6 @@ export const CANONICAL_SCHEMA_HEADER = `# The model schema for this app — ONE
|
|
|
18
18
|
# - the Swift client names it in \`bao-codegen.json\` beside its sources
|
|
19
19
|
# Add or change a model here, then re-run each client's codegen.
|
|
20
20
|
`;
|
|
21
|
-
/**
|
|
22
|
-
* A starter schema for the rare composition that has no template starter to
|
|
23
|
-
* adopt. The scaffolded clients normally supply their own, which is what a
|
|
24
|
-
* composed repo promotes to the root.
|
|
25
|
-
*/
|
|
26
|
-
export const FALLBACK_STARTER_SCHEMA = `[models.user_prefs.fields.id]
|
|
27
|
-
type = "id"
|
|
28
|
-
auto_assign = true
|
|
29
|
-
indexed = true
|
|
30
|
-
required = true
|
|
31
|
-
|
|
32
|
-
[models.user_prefs.fields.key]
|
|
33
|
-
type = "string"
|
|
34
|
-
indexed = true
|
|
35
|
-
unique = true
|
|
36
|
-
|
|
37
|
-
[models.user_prefs.fields.value]
|
|
38
|
-
type = "string"
|
|
39
|
-
`;
|
|
40
21
|
/**
|
|
41
22
|
* The app-wide `AGENTS.md` for a repository with several clients.
|
|
42
23
|
*
|
|
@@ -44,13 +25,20 @@ type = "string"
|
|
|
44
25
|
* own file is never replaced by init.
|
|
45
26
|
*/
|
|
46
27
|
export function rootAgentsMarkdown(input) {
|
|
28
|
+
const schema = input.schema ?? true;
|
|
47
29
|
const rows = input.clients
|
|
48
30
|
.map((client) => `- \`${client.dir}/\` — ${platformLabel(client.platform)} client`)
|
|
49
31
|
.join("\n");
|
|
32
|
+
const schemaRow = schema
|
|
33
|
+
? `- \`models/models.toml\` — the model schema. ONE copy: its keys are the wire
|
|
34
|
+
field names, so a second copy that drifts orphans the other's records. Each
|
|
35
|
+
client's codegen reads this file in place; never copy it into a client.
|
|
36
|
+
`
|
|
37
|
+
: "";
|
|
50
38
|
return `# ${input.appName}
|
|
51
39
|
|
|
52
40
|
One Primitive app, several clients. The app is the shared thing: one app ID,
|
|
53
|
-
one set of environments, one exported server config, one model schema. Each
|
|
41
|
+
one set of environments, one exported server config${schema ? ", one model schema" : ""}. Each
|
|
54
42
|
client is an independent project in its own directory — there is no workspace
|
|
55
43
|
file and no root \`package.json\`.
|
|
56
44
|
|
|
@@ -61,10 +49,7 @@ file and no root \`package.json\`.
|
|
|
61
49
|
- \`primitive/<env>/\` — the exported server config (workflows,
|
|
62
50
|
database type configs, app settings) that \`primitive config diff\` and
|
|
63
51
|
\`primitive config push\` read and write.
|
|
64
|
-
|
|
65
|
-
field names, so a second copy that drifts orphans the other's records. Each
|
|
66
|
-
client's codegen reads this file in place; never copy it into a client.
|
|
67
|
-
${rows}
|
|
52
|
+
${schemaRow}${rows}
|
|
68
53
|
|
|
69
54
|
## Per app vs per client
|
|
70
55
|
|
|
@@ -72,8 +57,7 @@ ${rows}
|
|
|
72
57
|
| --- | --- |
|
|
73
58
|
| Environments and app ID | Generated code |
|
|
74
59
|
| Exported server config | Dependencies and build config |
|
|
75
|
-
| Model schema | Runtime connection settings |
|
|
76
|
-
| Secrets | Deploy configuration |
|
|
60
|
+
${schema ? "| Model schema | Runtime connection settings |\n| Secrets | Deploy configuration |" : "| Secrets | Runtime connection settings |\n| — | Deploy configuration |"}
|
|
77
61
|
| — | Its own \`AGENTS.md\` |
|
|
78
62
|
|
|
79
63
|
## Running commands
|
|
@@ -90,7 +74,7 @@ primitive init <dir> --platform <web|ios>
|
|
|
90
74
|
\`\`\`
|
|
91
75
|
|
|
92
76
|
Run from inside this repository, that adds a client to THIS app: it reuses this
|
|
93
|
-
config, wires the new client to \`models/models.toml\`, and creates no second
|
|
77
|
+
config, ${schema ? "wires the new client to \`models/models.toml\`, " : ""}and creates no second
|
|
94
78
|
\`.primitive/\` and no second git repository.
|
|
95
79
|
`;
|
|
96
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-assets.js","sourceRoot":"","sources":["../../../src/lib/init-assets.ts"],"names":[],"mappings":"AAWA,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,OAAO,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;CAQtC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"init-assets.js","sourceRoot":"","sources":["../../../src/lib/init-assets.ts"],"names":[],"mappings":"AAWA,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,OAAO,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;CAQtC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAKlC;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO;SACvB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,GAAG,SAAS,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;SAClF,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,SAAS,GAAG,MAAM;QACtB,CAAC,CAAC;;;CAGL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,KAAK,KAAK,CAAC,OAAO;;;qDAG0B,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;EAWrF,SAAS,GAAG,IAAI;;;;;;;;EAQhB,MAAM,CAAC,CAAC,CAAC,oFAAoF,CAAC,CAAC,CAAC,yEAAyE;;;;;;;;;;;;;;;;;UAiBjK,MAAM,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,EAAE;;CAEzE,CAAC;AACF,CAAC"}
|
|
@@ -11,6 +11,14 @@ export declare function relativeSchemaPath(fromDir: string, toFile: string): str
|
|
|
11
11
|
* none (the Swift starter is comment-only but the file is still there).
|
|
12
12
|
*/
|
|
13
13
|
export declare function findClientSchema(clientDir: string, platform: Platform): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Why a root client with no schema where either template keeps one cannot
|
|
16
|
+
* join a composed app, or null when it can: a web client whose codegen script
|
|
17
|
+
* feeds `js-bao-codegen-v2` a schema file that exists keeps it somewhere this
|
|
18
|
+
* run does not recognize. A client that reads no schema file joins with
|
|
19
|
+
* nothing moved (#4929).
|
|
20
|
+
*/
|
|
21
|
+
export declare function misplacedClientSchema(clientDir: string): string | null;
|
|
14
22
|
/** The Swift target's source directory (`Sources/<AppName>`), if there is one. */
|
|
15
23
|
export declare function findSwiftTargetDir(clientDir: string): string | null;
|
|
16
24
|
/**
|
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
* Every function here reports what it changed rather than throwing on a shape
|
|
21
21
|
* it does not recognize, so a caller can say precisely what it did and did not
|
|
22
22
|
* rewire.
|
|
23
|
+
*
|
|
24
|
+
* A web client with no `src/models/models.toml` (the template since the
|
|
25
|
+
* fold-in, #4929, which generates its models from `primitive/<env>/db3-types/`)
|
|
26
|
+
* reads no schema, so it has nothing to check and nothing to wire.
|
|
23
27
|
*/
|
|
24
28
|
import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync, } from "fs";
|
|
25
29
|
import { createHash } from "crypto";
|
|
@@ -52,6 +56,29 @@ export function findClientSchema(clientDir, platform) {
|
|
|
52
56
|
}
|
|
53
57
|
return findSwiftSchema(clientDir);
|
|
54
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Why a root client with no schema where either template keeps one cannot
|
|
61
|
+
* join a composed app, or null when it can: a web client whose codegen script
|
|
62
|
+
* feeds `js-bao-codegen-v2` a schema file that exists keeps it somewhere this
|
|
63
|
+
* run does not recognize. A client that reads no schema file joins with
|
|
64
|
+
* nothing moved (#4929).
|
|
65
|
+
*/
|
|
66
|
+
export function misplacedClientSchema(clientDir) {
|
|
67
|
+
const packageJsonPath = join(clientDir, "package.json");
|
|
68
|
+
if (!existsSync(packageJsonPath))
|
|
69
|
+
return null;
|
|
70
|
+
let codegen;
|
|
71
|
+
try {
|
|
72
|
+
codegen = JSON.parse(readFileSync(packageJsonPath, "utf-8")).scripts?.codegen;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const input = typeof codegen === "string" ? codegen.match(/js-bao-codegen-v2\b[^&|;]*?\s-i\s+(\S+)/)?.[1] : null;
|
|
78
|
+
return input && existsSync(join(clientDir, input))
|
|
79
|
+
? `${packageJsonPath}'s codegen script reads ${input}`
|
|
80
|
+
: null;
|
|
81
|
+
}
|
|
55
82
|
/** `Sources/<AppName>/Models/models.toml`, whatever the app is called. */
|
|
56
83
|
function findSwiftSchema(clientDir) {
|
|
57
84
|
const sources = join(clientDir, "Sources");
|
|
@@ -189,6 +216,8 @@ export function checkClientWiring(clientDir, platform, schemaPath) {
|
|
|
189
216
|
: checkSwiftWiring(clientDir, schemaPath);
|
|
190
217
|
}
|
|
191
218
|
function checkWebWiring(clientDir, schemaPath) {
|
|
219
|
+
if (!existsSync(join(clientDir, WEB_SCHEMA_RELATIVE)))
|
|
220
|
+
return null;
|
|
192
221
|
const packageJsonPath = join(clientDir, "package.json");
|
|
193
222
|
if (!existsSync(packageJsonPath)) {
|
|
194
223
|
return `no package.json in ${clientDir}`;
|
|
@@ -235,6 +264,8 @@ function checkSwiftWiring(clientDir, schemaPath) {
|
|
|
235
264
|
return null;
|
|
236
265
|
}
|
|
237
266
|
function wireWebClient(clientDir, schemaPath) {
|
|
267
|
+
if (!existsSync(join(clientDir, WEB_SCHEMA_RELATIVE)))
|
|
268
|
+
return { rewired: [] };
|
|
238
269
|
const rewired = [];
|
|
239
270
|
const packageJsonPath = join(clientDir, "package.json");
|
|
240
271
|
// The codegen input: `-i src/models/models.toml` -> `-i ../models/models.toml`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-schema.js","sourceRoot":"","sources":["../../../src/lib/init-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,MAAM,EACN,aAAa,GACd,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG1E,iEAAiE;AACjE,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAEvE,sEAAsE;AACtE,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAEjE,+DAA+D;AAC/D,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAE9D,6DAA6D;AAC7D,MAAM,oBAAoB,GAAG,8CAA8C,CAAC;AAE5E;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,MAAc;IAChE,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,QAAkB;IAElB,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAClD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC,CAAC;IACD,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,0EAA0E;AAC1E,SAAS,eAAe,CAAC,SAAiB;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChE,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,MAAM;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACtE,CAAC,CAAC,WAAW,EAAE,CAChB,CAAC;QACF,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,qCAAqC,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,IAAY,EAAQ,EAAE;QACnD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;gBACvC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC,CAAC,IAAI,CAAC;YACT,IAAI,OAAO;gBAAE,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC;YACpD,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,0EAA0E;QAC1E,oEAAoE;QACpE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,GAAG,IAAI,IAAI,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC;QACpD,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAKpC;IACC,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE7C,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YACvC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QAClG,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAYD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,QAAkB,EAClB,UAAkB;IAElB,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnE,IAAI,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACpD,OAAO,QAAQ,KAAK,KAAK;QACvB,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC;QACtC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,QAAkB,EAClB,UAAkB;IAElB,OAAO,QAAQ,KAAK,KAAK;QACvB,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC;QACvC,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB,EAAE,UAAkB;IAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,OAAO,sBAAsB,SAAS,EAAE,CAAC;IAC3C,CAAC;IAED,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,mBAAmB,eAAe,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9D,CAAC;IACD,MAAM,OAAO,GAAuB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;IACzD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACvD,OAAO,gCAAgC,eAAe,EAAE,CAAC;IAC3D,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,8EAA8E;IAC9E,6DAA6D;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjF,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,OAAO,CACL,GAAG,UAAU,qEAAqE;YAClF,8BAA8B,UAAU,oCAAoC,CAC7E,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,UAAkB;IAC7D,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,kCAAkC,SAAS,EAAE,CAAC;IACvD,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,8DAA8D;IAC9D,MAAM,cAAc,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,cAAc,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,oBAAoB,CACnC,SAAS,EACT,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,EACnC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAChC,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CACL,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,cAAc,8BAA8B;gBAC/E,wBAAwB,UAAU,oCAAoC,CACvE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB,EAAE,UAAkB;IAC1D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAExD,gFAAgF;IAChF,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACjE,MAAM,GAAG,GAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjF,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CACnC,cAAc,EACd,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,cAAc,EAAE,CAC7D,CAAC;IACF,aAAa,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE9B,iEAAiE;IACjE,0EAA0E;IAC1E,iCAAiC;IACjC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAC9B,oBAAoB,EACpB,KAAK,eAAe,IAAI,CACzB,CAAC;QACF,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,6EAA6E;IAC7E,oEAAoE;IACpE,+EAA+E;IAC/E,6EAA6E;IAC7E,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CACV,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACzD,IAAI,OAA2B,CAAC;IAChC,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,CAAC;QACpB,OAAO,GAAG,WAAW,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,SAAiB,EAAE,aAAqB;IACrE,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC;SACrC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;SAC9B,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,gCAAgC,EAAE,mBAAmB,WAAW,EAAE,CAAC,CAAC;QACjG,IAAI,KAAK,KAAK,MAAM;YAAE,SAAS;QAC/B,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,UAAkB;IAC5D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAE,CAAC;IAEjD,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEzB,6EAA6E;IAC7E,4CAA4C;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAChC,yBAAyB,EACzB,CAAC,MAAc,EAAE,KAAa,EAAE,EAAE,CAChC,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAC1F,CAAC;YACF,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC3B,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,4EAA4E;IAC5E,wEAAwE;IACxE,EAAE;IACF,2EAA2E;IAC3E,wEAAwE;IACxE,6EAA6E;IAC7E,wCAAwC;IACxC,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAClB,SAAS,EACT,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,EAChC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAChC,CACF,CAAC;IACJ,CAAC;IAED,IAAI,OAA2B,CAAC;IAChC,IAAI,WAAW,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,CAAC;QACpB,OAAO,GAAG,WAAW,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,OAAe;IACtE,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"init-schema.js","sourceRoot":"","sources":["../../../src/lib/init-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Credentials } from "../types/index.js";
|
|
2
|
+
/** The app a request is for, and its parent: a pin on either reaches it. */
|
|
3
|
+
export interface ScopeTarget {
|
|
4
|
+
appId: string;
|
|
5
|
+
parentAppId?: string | null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Whether a token holding `held` (undefined: unscoped, every scope) and
|
|
9
|
+
* pinned to `apps` can use `scope` on an app route of `target`, as the
|
|
10
|
+
* server's reach check decides: a pinned token reaches only its pinned apps
|
|
11
|
+
* and their children, and an unpinned token holding `admin` reaches only
|
|
12
|
+
* platform routes.
|
|
13
|
+
*/
|
|
14
|
+
export declare function tokenReachesScope(token: {
|
|
15
|
+
scope?: unknown;
|
|
16
|
+
apps?: unknown;
|
|
17
|
+
}, scope: string, target: ScopeTarget): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Whether `credentials` can use `scope` on `target`: the login's own token
|
|
20
|
+
* can (a token with no `scope` claim is unscoped and holds every scope), or
|
|
21
|
+
* an unexpired step-up stored beside it can, as the API client retries a
|
|
22
|
+
* request refused for `admin` with that step-up. Either must also reach the
|
|
23
|
+
* app ({@link tokenReachesScope}). Null when the login's token has no claims
|
|
24
|
+
* to read (an opaque CI token) and no step-up can.
|
|
25
|
+
*/
|
|
26
|
+
export declare function sessionHoldsScope(credentials: Credentials, scope: string, target: ScopeTarget, now?: number): boolean | null;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether the stored admin session holds a scope, read from its token's
|
|
3
|
+
* claims and the step-up stored beside it, with no request. The server is the
|
|
4
|
+
* judge of every request; this lets a command refuse up front what the server
|
|
5
|
+
* would refuse partway through.
|
|
6
|
+
*/
|
|
7
|
+
import { isCiToken } from "./session-id.js";
|
|
8
|
+
function claimsOf(token) {
|
|
9
|
+
try {
|
|
10
|
+
const payload = JSON.parse(Buffer.from(token.split(".")[1] ?? "", "base64url").toString("utf-8"));
|
|
11
|
+
return payload && typeof payload === "object" ? payload : null;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Whether a token holding `held` (undefined: unscoped, every scope) and
|
|
19
|
+
* pinned to `apps` can use `scope` on an app route of `target`, as the
|
|
20
|
+
* server's reach check decides: a pinned token reaches only its pinned apps
|
|
21
|
+
* and their children, and an unpinned token holding `admin` reaches only
|
|
22
|
+
* platform routes.
|
|
23
|
+
*/
|
|
24
|
+
export function tokenReachesScope(token, scope, target) {
|
|
25
|
+
if (token.scope === undefined)
|
|
26
|
+
return true;
|
|
27
|
+
const held = Array.isArray(token.scope) ? token.scope : [];
|
|
28
|
+
if (!held.includes(scope))
|
|
29
|
+
return false;
|
|
30
|
+
const apps = Array.isArray(token.apps) ? token.apps : [];
|
|
31
|
+
if (apps.length === 0)
|
|
32
|
+
return !held.includes("admin");
|
|
33
|
+
return (apps.includes(target.appId) ||
|
|
34
|
+
(!!target.parentAppId && apps.includes(target.parentAppId)));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether `credentials` can use `scope` on `target`: the login's own token
|
|
38
|
+
* can (a token with no `scope` claim is unscoped and holds every scope), or
|
|
39
|
+
* an unexpired step-up stored beside it can, as the API client retries a
|
|
40
|
+
* request refused for `admin` with that step-up. Either must also reach the
|
|
41
|
+
* app ({@link tokenReachesScope}). Null when the login's token has no claims
|
|
42
|
+
* to read (an opaque CI token) and no step-up can.
|
|
43
|
+
*/
|
|
44
|
+
export function sessionHoldsScope(credentials, scope, target, now = Date.now()) {
|
|
45
|
+
const stepUp = credentials.stepUp;
|
|
46
|
+
if (stepUp &&
|
|
47
|
+
new Date(stepUp.expiresAt).getTime() > now &&
|
|
48
|
+
tokenReachesScope(stepUp, scope, target)) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
if (isCiToken(credentials.accessToken))
|
|
52
|
+
return null;
|
|
53
|
+
const claims = claimsOf(credentials.accessToken);
|
|
54
|
+
if (!claims)
|
|
55
|
+
return null;
|
|
56
|
+
return tokenReachesScope(claims, scope, target);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=session-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-scope.js","sourceRoot":"","sources":["../../../src/lib/session-scope.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CACtE,CAAC;QACF,OAAO,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA0C,EAC1C,KAAa,EACb,MAAmB;IAEnB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAwB,EACxB,KAAa,EACb,MAAmB,EACnB,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAClC,IACE,MAAM;QACN,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG;QAC1C,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -360,6 +360,12 @@ export interface PushPruneSpec {
|
|
|
360
360
|
* fail-safe no shipped spec uses since #2762 wired the last one.
|
|
361
361
|
*/
|
|
362
362
|
deleteEntity: ((client: ApiClient, appId: string, address: string) => Promise<void>) | null;
|
|
363
|
+
/**
|
|
364
|
+
* The delete is a hard delete (`?hard=true`), which needs the `admin` scope;
|
|
365
|
+
* a session without it is refused before the push applies anything
|
|
366
|
+
* ({@link pruneAdminScopeRefusal}).
|
|
367
|
+
*/
|
|
368
|
+
deleteNeedsAdmin?: boolean;
|
|
363
369
|
/**
|
|
364
370
|
* A consequence of deleting this type the prune plan must state before the
|
|
365
371
|
* operator confirms — printed under the item's "will delete" line, in
|
|
@@ -481,6 +487,10 @@ export type PushPruneDecision =
|
|
|
481
487
|
* live `modifiedAt` matches prior state (or under `--force`). A 404 means the
|
|
482
488
|
* work is already done (drop the stale state). Any other read failure, a missing
|
|
483
489
|
* address, or a type without a delete surface leaves everything untouched.
|
|
490
|
+
*
|
|
491
|
+
* An archived row is still pending deletion, whatever its `modifiedAt`: it
|
|
492
|
+
* keeps its key, and archiving is what moved the timestamp. Status is
|
|
493
|
+
* server-owned and not in TOML, so the move is not drift.
|
|
484
494
|
*/
|
|
485
495
|
export declare function decidePushPruneCandidate(input: {
|
|
486
496
|
spec: PushPruneSpec;
|
|
@@ -489,6 +499,28 @@ export declare function decidePushPruneCandidate(input: {
|
|
|
489
499
|
fetch: PushPruneFetch;
|
|
490
500
|
force: boolean;
|
|
491
501
|
}): PushPruneDecision;
|
|
502
|
+
/** One candidate of a push-prune plan and what to do with it. */
|
|
503
|
+
export interface PushPrunePlanItem {
|
|
504
|
+
spec: PushPruneSpec;
|
|
505
|
+
key: string;
|
|
506
|
+
entry: any;
|
|
507
|
+
address?: string;
|
|
508
|
+
decision: PushPruneDecision;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Plan a push-prune over `specs`: every prior-state key no local file declares
|
|
512
|
+
* and `includes` selects, each confirmed by a point read and decided by
|
|
513
|
+
* {@link decidePushPruneCandidate}. Reads only.
|
|
514
|
+
*/
|
|
515
|
+
export declare function planPushPrune(input: {
|
|
516
|
+
specs: readonly PushPruneSpec[];
|
|
517
|
+
configDir: string;
|
|
518
|
+
entities: Record<string, any> | undefined;
|
|
519
|
+
includes: (label: string, key: string) => boolean;
|
|
520
|
+
client: ApiClient;
|
|
521
|
+
appId: string;
|
|
522
|
+
force: boolean;
|
|
523
|
+
}): Promise<PushPrunePlanItem[]>;
|
|
492
524
|
/**
|
|
493
525
|
* What a failed prune DELETE call means for the entity's sync-state slot.
|
|
494
526
|
*
|
|
@@ -530,6 +562,28 @@ export declare function formatPrunePlan(items: Array<{
|
|
|
530
562
|
key: string;
|
|
531
563
|
decision: PushPruneDecision;
|
|
532
564
|
}>): PrunePlanLine[];
|
|
565
|
+
/** The step-up a prune's hard deletes need, valid for 15 minutes. */
|
|
566
|
+
export declare const PRUNE_STEP_UP_COMMAND = "primitive login --step-up --scope write,admin";
|
|
567
|
+
/**
|
|
568
|
+
* The refusal for a prune plan that hard-deletes, from a session without the
|
|
569
|
+
* `admin` scope: it names each hard delete, the missing scope and the step-up.
|
|
570
|
+
* A candidate whose point read failed is named too: the plan `config push`
|
|
571
|
+
* rebuilds after applying could find it and delete it. Null when the plan
|
|
572
|
+
* deletes nothing that needs `admin`. `config push` checks it before applying
|
|
573
|
+
* anything, so the push does not land halfway and then have its deletes
|
|
574
|
+
* refused one by one.
|
|
575
|
+
*/
|
|
576
|
+
export declare function pruneAdminScopeRefusal(items: Array<{
|
|
577
|
+
spec: PushPruneSpec;
|
|
578
|
+
key: string;
|
|
579
|
+
decision: PushPruneDecision;
|
|
580
|
+
}>): string | null;
|
|
581
|
+
/**
|
|
582
|
+
* The refusal for a prune plan that hard-deletes when the session's scope
|
|
583
|
+
* could not be read: the push stops rather than assume `admin` and apply
|
|
584
|
+
* everything else before the deletes are refused.
|
|
585
|
+
*/
|
|
586
|
+
export declare function pruneScopeUnknownRefusal(reason: string): string;
|
|
533
587
|
/**
|
|
534
588
|
* Remove a pruned block's sidecar `<key>.tests/` directory and its
|
|
535
589
|
* `entities.testCases` state records. The main file is already gone (that is
|
|
@@ -636,6 +636,7 @@ export const PUSH_PRUNE_SPECS = [
|
|
|
636
636
|
deleteEntity: async (c, a, id) => {
|
|
637
637
|
await c.deleteIntegration(a, id, { hard: true });
|
|
638
638
|
},
|
|
639
|
+
deleteNeedsAdmin: true,
|
|
639
640
|
},
|
|
640
641
|
{
|
|
641
642
|
resourceType: pruneTypeFor("blob-bucket"),
|
|
@@ -661,6 +662,7 @@ export const PUSH_PRUNE_SPECS = [
|
|
|
661
662
|
deleteEntity: async (c, a, id) => {
|
|
662
663
|
await c.deletePrompt(a, id, true);
|
|
663
664
|
},
|
|
665
|
+
deleteNeedsAdmin: true,
|
|
664
666
|
},
|
|
665
667
|
{
|
|
666
668
|
// #3179 — server functions. Hard-delete rather than archive, following the
|
|
@@ -677,6 +679,7 @@ export const PUSH_PRUNE_SPECS = [
|
|
|
677
679
|
deleteEntity: async (c, a, id) => {
|
|
678
680
|
await c.deleteFunction(a, id, { hard: true });
|
|
679
681
|
},
|
|
682
|
+
deleteNeedsAdmin: true,
|
|
680
683
|
},
|
|
681
684
|
{
|
|
682
685
|
resourceType: pruneTypeFor("rule-set"),
|
|
@@ -821,6 +824,10 @@ export function collectPushPruneCandidates(input) {
|
|
|
821
824
|
* live `modifiedAt` matches prior state (or under `--force`). A 404 means the
|
|
822
825
|
* work is already done (drop the stale state). Any other read failure, a missing
|
|
823
826
|
* address, or a type without a delete surface leaves everything untouched.
|
|
827
|
+
*
|
|
828
|
+
* An archived row is still pending deletion, whatever its `modifiedAt`: it
|
|
829
|
+
* keeps its key, and archiving is what moved the timestamp. Status is
|
|
830
|
+
* server-owned and not in TOML, so the move is not drift.
|
|
824
831
|
*/
|
|
825
832
|
export function decidePushPruneCandidate(input) {
|
|
826
833
|
const { spec, address, priorModifiedAt, fetch: fetchOutcome, force } = input;
|
|
@@ -833,7 +840,8 @@ export function decidePushPruneCandidate(input) {
|
|
|
833
840
|
const unchanged = !!priorModifiedAt &&
|
|
834
841
|
!!serverModifiedAt &&
|
|
835
842
|
serverModifiedAt === priorModifiedAt;
|
|
836
|
-
|
|
843
|
+
const archived = fetchOutcome.detail?.status === "archived";
|
|
844
|
+
if (force || unchanged || archived) {
|
|
837
845
|
return { action: "delete", address, serverModifiedAt };
|
|
838
846
|
}
|
|
839
847
|
return { action: "skip", reason: "drift", serverModifiedAt };
|
|
@@ -844,6 +852,51 @@ export function decidePushPruneCandidate(input) {
|
|
|
844
852
|
return { action: "drop-state" };
|
|
845
853
|
return { action: "skip", reason: "unconfirmed" };
|
|
846
854
|
}
|
|
855
|
+
/**
|
|
856
|
+
* Plan a push-prune over `specs`: every prior-state key no local file declares
|
|
857
|
+
* and `includes` selects, each confirmed by a point read and decided by
|
|
858
|
+
* {@link decidePushPruneCandidate}. Reads only.
|
|
859
|
+
*/
|
|
860
|
+
export async function planPushPrune(input) {
|
|
861
|
+
const { configDir, entities, includes, client, appId, force } = input;
|
|
862
|
+
const items = [];
|
|
863
|
+
for (const spec of input.specs) {
|
|
864
|
+
const candidates = collectPushPruneCandidates({
|
|
865
|
+
spec,
|
|
866
|
+
configDir,
|
|
867
|
+
priorEntities: entities?.[spec.resourceType.stateSlot],
|
|
868
|
+
}).filter(({ key }) => includes(spec.resourceType.label, key));
|
|
869
|
+
for (const { key, entry } of candidates) {
|
|
870
|
+
const address = spec.addressOf(key, entry);
|
|
871
|
+
// Behavior 4: skip the point read for a candidate we could not
|
|
872
|
+
// delete anyway — no usable address (for metadata-category-configs
|
|
873
|
+
// that includes a state key that is not a `resourceType#category`
|
|
874
|
+
// pair, #2762), or a spec with no delete surface.
|
|
875
|
+
let fetchOutcome = { ok: false };
|
|
876
|
+
if (address && spec.deleteEntity) {
|
|
877
|
+
// Point read: confirm live presence + drift. Fail closed — any
|
|
878
|
+
// non-404 error leaves the entity and its state slot untouched.
|
|
879
|
+
try {
|
|
880
|
+
fetchOutcome = { ok: true, detail: await spec.fetchDetail(client, appId, address) };
|
|
881
|
+
}
|
|
882
|
+
catch (err) {
|
|
883
|
+
if (err?.statusCode === 404) {
|
|
884
|
+
fetchOutcome = { ok: false, status: 404 };
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
const decision = decidePushPruneCandidate({
|
|
889
|
+
spec,
|
|
890
|
+
address,
|
|
891
|
+
priorModifiedAt: entry?.modifiedAt,
|
|
892
|
+
fetch: fetchOutcome,
|
|
893
|
+
force,
|
|
894
|
+
});
|
|
895
|
+
items.push({ spec, key, entry, address, decision });
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
return items;
|
|
899
|
+
}
|
|
847
900
|
/**
|
|
848
901
|
* Classify an error thrown by a prune delete — one arm for every type.
|
|
849
902
|
*
|
|
@@ -896,6 +949,44 @@ export function formatPrunePlan(items) {
|
|
|
896
949
|
};
|
|
897
950
|
});
|
|
898
951
|
}
|
|
952
|
+
/** The step-up a prune's hard deletes need, valid for 15 minutes. */
|
|
953
|
+
export const PRUNE_STEP_UP_COMMAND = "primitive login --step-up --scope write,admin";
|
|
954
|
+
/**
|
|
955
|
+
* The refusal for a prune plan that hard-deletes, from a session without the
|
|
956
|
+
* `admin` scope: it names each hard delete, the missing scope and the step-up.
|
|
957
|
+
* A candidate whose point read failed is named too: the plan `config push`
|
|
958
|
+
* rebuilds after applying could find it and delete it. Null when the plan
|
|
959
|
+
* deletes nothing that needs `admin`. `config push` checks it before applying
|
|
960
|
+
* anything, so the push does not land halfway and then have its deletes
|
|
961
|
+
* refused one by one.
|
|
962
|
+
*/
|
|
963
|
+
export function pruneAdminScopeRefusal(items) {
|
|
964
|
+
const needsAdmin = items.filter(({ spec }) => spec.deleteNeedsAdmin);
|
|
965
|
+
const hard = needsAdmin.filter(({ decision }) => decision.action === "delete");
|
|
966
|
+
const unconfirmed = needsAdmin.filter(({ decision }) => decision.action === "skip" && decision.reason === "unconfirmed");
|
|
967
|
+
if (hard.length === 0 && unconfirmed.length === 0)
|
|
968
|
+
return null;
|
|
969
|
+
const names = (list) => list.map(({ spec, key }) => `${spec.resourceType.label} ${key}`).join(", ");
|
|
970
|
+
const what = [
|
|
971
|
+
...(hard.length > 0 ? [`permanently deletes ${names(hard)}`] : []),
|
|
972
|
+
...(unconfirmed.length > 0
|
|
973
|
+
? [`may permanently delete ${names(unconfirmed)} (the read that would confirm it failed)`]
|
|
974
|
+
: []),
|
|
975
|
+
].join(" and ");
|
|
976
|
+
return (`The prune plan ${what}, which needs the \`admin\` scope ` +
|
|
977
|
+
`this session lacks. Nothing was applied. Run \`${PRUNE_STEP_UP_COMMAND}\` ` +
|
|
978
|
+
`for a 15-minute step-up, then push again.`);
|
|
979
|
+
}
|
|
980
|
+
/**
|
|
981
|
+
* The refusal for a prune plan that hard-deletes when the session's scope
|
|
982
|
+
* could not be read: the push stops rather than assume `admin` and apply
|
|
983
|
+
* everything else before the deletes are refused.
|
|
984
|
+
*/
|
|
985
|
+
export function pruneScopeUnknownRefusal(reason) {
|
|
986
|
+
return (`Could not confirm this session holds the \`admin\` scope the prune plan's ` +
|
|
987
|
+
`permanent deletes need: ${reason}. Nothing was applied. Push again, or run ` +
|
|
988
|
+
`\`${PRUNE_STEP_UP_COMMAND}\` for a 15-minute step-up first.`);
|
|
989
|
+
}
|
|
899
990
|
/**
|
|
900
991
|
* Remove a pruned block's sidecar `<key>.tests/` directory and its
|
|
901
992
|
* `entities.testCases` state records. The main file is already gone (that is
|