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.
Files changed (41) hide show
  1. package/dist/src/commands/agent-sessions.d.ts +26 -10
  2. package/dist/src/commands/agent-sessions.js +80 -83
  3. package/dist/src/commands/agent-sessions.js.map +1 -1
  4. package/dist/src/commands/init.js +101 -34
  5. package/dist/src/commands/init.js.map +1 -1
  6. package/dist/src/commands/locks.d.ts +5 -3
  7. package/dist/src/commands/locks.js +17 -61
  8. package/dist/src/commands/locks.js.map +1 -1
  9. package/dist/src/commands/rule-sets.d.ts +1 -1
  10. package/dist/src/commands/rule-sets.js +0 -1
  11. package/dist/src/commands/rule-sets.js.map +1 -1
  12. package/dist/src/commands/sync.d.ts +6 -0
  13. package/dist/src/commands/sync.js +129 -60
  14. package/dist/src/commands/sync.js.map +1 -1
  15. package/dist/src/lib/api-client.d.ts +6 -4
  16. package/dist/src/lib/api-client.js +4 -14
  17. package/dist/src/lib/api-client.js.map +1 -1
  18. package/dist/src/lib/function-typecheck.js +3 -0
  19. package/dist/src/lib/function-typecheck.js.map +1 -1
  20. package/dist/src/lib/generated-config-surfaces.d.ts +19 -2
  21. package/dist/src/lib/generated-config-surfaces.js +29 -2
  22. package/dist/src/lib/generated-config-surfaces.js.map +1 -1
  23. package/dist/src/lib/generated-sdk-types.d.ts +1 -1
  24. package/dist/src/lib/generated-sdk-types.js +1 -1
  25. package/dist/src/lib/generated-sdk-types.js.map +1 -1
  26. package/dist/src/lib/init-assets.d.ts +2 -6
  27. package/dist/src/lib/init-assets.js +11 -27
  28. package/dist/src/lib/init-assets.js.map +1 -1
  29. package/dist/src/lib/init-schema.d.ts +8 -0
  30. package/dist/src/lib/init-schema.js +31 -0
  31. package/dist/src/lib/init-schema.js.map +1 -1
  32. package/dist/src/lib/session-scope.d.ts +26 -0
  33. package/dist/src/lib/session-scope.js +58 -0
  34. package/dist/src/lib/session-scope.js.map +1 -0
  35. package/dist/src/lib/sync-resource-types.d.ts +54 -0
  36. package/dist/src/lib/sync-resource-types.js +92 -1
  37. package/dist/src/lib/sync-resource-types.js.map +1 -1
  38. package/dist/src/lib/template.d.ts +39 -3
  39. package/dist/src/lib/template.js +103 -14
  40. package/dist/src/lib/template.js.map +1 -1
  41. 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,q0vLAAq0vL,CAAC"}
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
- - \`models/models.toml\` — the model schema. ONE copy: its keys are the wire
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;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;CAatC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAGlC;IACC,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;IAEd,OAAO,KAAK,KAAK,CAAC,OAAO;;;;;;;;;;;;;;;;;EAiBzB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BL,CAAC;AACF,CAAC"}
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
- if (force || unchanged) {
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