primitive-admin 1.2.0-alpha.1 → 1.2.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/bin/primitive.js +22 -24
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/agent-sessions.d.ts +20 -0
- package/dist/src/commands/agent-sessions.js +275 -0
- package/dist/src/commands/agent-sessions.js.map +1 -0
- package/dist/src/commands/apps-children.d.ts +54 -0
- package/dist/src/commands/apps-children.js +578 -0
- package/dist/src/commands/apps-children.js.map +1 -0
- package/dist/src/commands/apps.js +88 -9
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth-sessions.d.ts +3 -3
- package/dist/src/commands/auth-sessions.js +117 -23
- package/dist/src/commands/auth-sessions.js.map +1 -1
- package/dist/src/commands/auth.js +248 -15
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/documents.d.ts +29 -0
- package/dist/src/commands/documents.js +676 -191
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/env.d.ts +9 -1
- package/dist/src/commands/env.js +158 -45
- package/dist/src/commands/env.js.map +1 -1
- package/dist/src/commands/functions.js +7 -1
- package/dist/src/commands/functions.js.map +1 -1
- package/dist/src/commands/init.js +2 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +14 -2
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/prompts.js +4 -0
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/scripts.js +1 -1
- package/dist/src/commands/scripts.js.map +1 -1
- package/dist/src/commands/sync-app-settings.d.ts +25 -7
- package/dist/src/commands/sync-app-settings.js +81 -20
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +107 -9
- package/dist/src/commands/sync.js +649 -300
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/users.js +77 -2
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +161 -5
- package/dist/src/lib/api-client.js +210 -49
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +9 -1
- package/dist/src/lib/app-settings-descriptor.js +22 -10
- package/dist/src/lib/app-settings-descriptor.js.map +1 -1
- package/dist/src/lib/auth-flow.d.ts +41 -1
- package/dist/src/lib/auth-flow.js +45 -16
- package/dist/src/lib/auth-flow.js.map +1 -1
- package/dist/src/lib/child-apps-local.d.ts +184 -0
- package/dist/src/lib/child-apps-local.js +282 -0
- package/dist/src/lib/child-apps-local.js.map +1 -0
- package/dist/src/lib/ci-session-request.d.ts +22 -0
- package/dist/src/lib/ci-session-request.js +51 -0
- package/dist/src/lib/ci-session-request.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +4 -1
- package/dist/src/lib/codegen-shared/generatedFiles.js +19 -13
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
- package/dist/src/lib/config-object-descriptor.js +5 -4
- package/dist/src/lib/config-object-descriptor.js.map +1 -1
- package/dist/src/lib/config-payload.js +2 -3
- package/dist/src/lib/config-payload.js.map +1 -1
- package/dist/src/lib/config-surface.d.ts +2 -1
- package/dist/src/lib/config-surface.js +7 -28
- package/dist/src/lib/config-surface.js.map +1 -1
- package/dist/src/lib/credentials-store.d.ts +17 -2
- package/dist/src/lib/credentials-store.js +72 -6
- package/dist/src/lib/credentials-store.js.map +1 -1
- package/dist/src/lib/document-export-lookups.d.ts +31 -0
- package/dist/src/lib/document-export-lookups.js +53 -0
- package/dist/src/lib/document-export-lookups.js.map +1 -0
- package/dist/src/lib/document-export-permissions.d.ts +7 -5
- package/dist/src/lib/document-export-permissions.js +7 -5
- package/dist/src/lib/document-export-permissions.js.map +1 -1
- package/dist/src/lib/env-resolver-core.d.ts +69 -1
- package/dist/src/lib/env-resolver-core.js +137 -20
- package/dist/src/lib/env-resolver-core.js.map +1 -1
- package/dist/src/lib/env-resolver.d.ts +14 -2
- package/dist/src/lib/env-resolver.js +32 -10
- package/dist/src/lib/env-resolver.js.map +1 -1
- package/dist/src/lib/function-run.d.ts +4 -1
- package/dist/src/lib/function-run.js +24 -4
- package/dist/src/lib/function-run.js.map +1 -1
- package/dist/src/lib/function-sync.d.ts +5 -2
- package/dist/src/lib/function-sync.js +7 -4
- package/dist/src/lib/function-sync.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +49 -52
- package/dist/src/lib/generated-config-surfaces.js +211 -140
- 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-adopt.js +12 -3
- package/dist/src/lib/init-adopt.js.map +1 -1
- package/dist/src/lib/local-state.d.ts +17 -1
- package/dist/src/lib/local-state.js +94 -15
- package/dist/src/lib/local-state.js.map +1 -1
- package/dist/src/lib/local-test-cases.d.ts +5 -2
- package/dist/src/lib/local-test-cases.js +7 -4
- package/dist/src/lib/local-test-cases.js.map +1 -1
- package/dist/src/lib/log-inspection.d.ts +25 -0
- package/dist/src/lib/log-inspection.js +24 -0
- package/dist/src/lib/log-inspection.js.map +1 -1
- package/dist/src/lib/logout-admin-session.d.ts +2 -1
- package/dist/src/lib/logout-admin-session.js +7 -1
- package/dist/src/lib/logout-admin-session.js.map +1 -1
- package/dist/src/lib/pull-write.d.ts +31 -0
- package/dist/src/lib/pull-write.js +49 -0
- package/dist/src/lib/pull-write.js.map +1 -0
- package/dist/src/lib/root-import-decision.d.ts +59 -0
- package/dist/src/lib/root-import-decision.js +95 -0
- package/dist/src/lib/root-import-decision.js.map +1 -0
- package/dist/src/lib/scope-request.d.ts +69 -0
- package/dist/src/lib/scope-request.js +188 -0
- package/dist/src/lib/scope-request.js.map +1 -0
- package/dist/src/lib/session-id.d.ts +9 -0
- package/dist/src/lib/session-id.js +28 -0
- package/dist/src/lib/session-id.js.map +1 -0
- package/dist/src/lib/snapshots.d.ts +17 -1
- package/dist/src/lib/snapshots.js +50 -2
- package/dist/src/lib/snapshots.js.map +1 -1
- package/dist/src/lib/sync-paths.d.ts +35 -0
- package/dist/src/lib/sync-paths.js +57 -5
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/transient-retry.d.ts +34 -0
- package/dist/src/lib/transient-retry.js +57 -0
- package/dist/src/lib/transient-retry.js.map +1 -0
- package/dist/src/types/index.d.ts +21 -4
- package/package.json +4 -3
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
* trip is therefore loud-and-lossy — push omits what it does not know, so
|
|
16
16
|
* the server keeps its stored values — never silently destructive.
|
|
17
17
|
*/
|
|
18
|
-
import { findUnknownGroupedTomlKeys, retiredConfigKey, type ConfigObjectSurface, type ConfigField, type ConfigTable } from "./generated-config-surfaces.js";
|
|
18
|
+
import { findUnknownGroupedTomlKeys, retiredConfigKey, retiredTomlKey, type ConfigObjectSurface, type ConfigField, type ConfigTable } from "./generated-config-surfaces.js";
|
|
19
19
|
export { retiredConfigKey };
|
|
20
|
+
export { retiredTomlKey };
|
|
20
21
|
export { findUnknownGroupedTomlKeys };
|
|
21
22
|
/** A surface by label. Throws rather than silently skipping checks. */
|
|
22
23
|
export declare function requireConfigSurface(label: string): ConfigObjectSurface;
|
|
@@ -15,11 +15,15 @@
|
|
|
15
15
|
* trip is therefore loud-and-lossy — push omits what it does not know, so
|
|
16
16
|
* the server keeps its stored values — never silently destructive.
|
|
17
17
|
*/
|
|
18
|
-
import { GENERATED_CONFIG_MODEL_FIELDS, acceptedTomlKeys, findUnknownGroupedTomlKeys, tomlGroupsOf, retiredConfigKey, findMisshapenTomlTables, findUnknownTomlDocumentKeys, getConfigSurface, getConfigTable, recognizedResponseKeys, } from "./generated-config-surfaces.js";
|
|
18
|
+
import { GENERATED_CONFIG_MODEL_FIELDS, acceptedTomlKeys, findUnknownGroupedTomlKeys, tomlGroupsOf, retiredConfigKey, retiredTomlKey, findMisshapenTomlTables, findUnknownTomlDocumentKeys, getConfigSurface, getConfigTable, recognizedResponseKeys, } from "./generated-config-surfaces.js";
|
|
19
19
|
// #2645/#2803 — the guidance for a key a definition deliberately RETIRED. Its
|
|
20
20
|
// text is vendored with the definitions so `config push` and the server's
|
|
21
21
|
// create/update handlers say the same thing about the same key.
|
|
22
22
|
export { retiredConfigKey };
|
|
23
|
+
// #3642 — the same guidance for `config push`, widened to spellings retired
|
|
24
|
+
// from TOML only (the flat chat keys under `[[configs]]`), which the request
|
|
25
|
+
// side must never see.
|
|
26
|
+
export { retiredTomlKey };
|
|
23
27
|
// #3626 — keys inside a `[configs.<group>]` block that no field declares
|
|
24
28
|
// under it. Re-exported beside `findUnknownTomlKeys` so a caller checking a
|
|
25
29
|
// table's keys needs one import for both halves of the same question.
|
|
@@ -186,16 +190,6 @@ function readTomlTable(value) {
|
|
|
186
190
|
? value
|
|
187
191
|
: undefined;
|
|
188
192
|
}
|
|
189
|
-
/**
|
|
190
|
-
* Is `key` a spelling this table still accepts but has superseded (#3626)?
|
|
191
|
-
*
|
|
192
|
-
* The nine flat chat keys are the first: declared in `tomlOnlyKeys` with
|
|
193
|
-
* `kind: "deprecated"` so an unmigrated prompt file keeps pushing, while the
|
|
194
|
-
* field itself is authored inside `[configs.chat]`.
|
|
195
|
-
*/
|
|
196
|
-
function isDeprecatedTomlKey(table, key) {
|
|
197
|
-
return table.tomlOnlyKeys?.[key]?.kind === "deprecated";
|
|
198
|
-
}
|
|
199
193
|
/**
|
|
200
194
|
* Every value in `tomlData` whose spelling does not match the type its field
|
|
201
195
|
* declares (#2880 criterion 5).
|
|
@@ -232,25 +226,10 @@ export function configDeclaredTypeErrors(filePath, tomlData, table) {
|
|
|
232
226
|
// mistyped `[configs.agent].temperature` names `agent`.
|
|
233
227
|
const groups = tomlGroupsOf(field);
|
|
234
228
|
const groupName = groups.find((name) => readTomlTable(entry.value[name])?.[field.tomlKey] !== undefined) ?? groups[0];
|
|
235
|
-
|
|
229
|
+
const container = readTomlTable(groupName
|
|
236
230
|
? entry.value[groupName]
|
|
237
231
|
: entry.value);
|
|
238
|
-
|
|
239
|
-
// #3626, CR3626-003 — a grouped key whose FLAT spelling the table still
|
|
240
|
-
// accepts as DEPRECATED is read where the file actually wrote it. The
|
|
241
|
-
// grouping moved the reader into the sub-table, which silently took the
|
|
242
|
-
// declared-type check away from every unmigrated file: a flat
|
|
243
|
-
// `temperature = "hot"` passed the preflight it used to fail and was
|
|
244
|
-
// hoisted into the payload unread. Accepting the old spelling has to mean
|
|
245
|
-
// accepting it on the same terms, so the root value is checked — and
|
|
246
|
-
// labelled at the root, because that is the line the author has to fix.
|
|
247
|
-
if (groupName &&
|
|
248
|
-
container?.[field.tomlKey] === undefined &&
|
|
249
|
-
isDeprecatedTomlKey(table, field.tomlKey) &&
|
|
250
|
-
entry.value[field.tomlKey] !== undefined) {
|
|
251
|
-
container = entry.value;
|
|
252
|
-
label = entry.label;
|
|
253
|
-
}
|
|
232
|
+
const label = groupName ? `${entry.label}.${groupName}` : entry.label;
|
|
254
233
|
if (!container)
|
|
255
234
|
continue;
|
|
256
235
|
const value = container[field.tomlKey];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-surface.js","sourceRoot":"","sources":["../../../src/lib/config-surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,0BAA0B,EAC1B,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,2BAA2B,EAC3B,gBAAgB,EAChB,cAAc,EACd,sBAAsB,GAIvB,MAAM,gCAAgC,CAAC;AAExC,8EAA8E;AAC9E,0EAA0E;AAC1E,gEAAgE;AAChE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,yEAAyE;AACzE,4EAA4E;AAC5E,sEAAsE;AACtE,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAEtC,uEAAuE;AACvE,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,sCAAsC,KAAK,KAAK;YAC9C,iDAAiD,CACpD,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,QAA2B;IAE3B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,sCAAsC,KAAK,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK;YACtE,iDAAiD,CACpD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAE3E,4EAA4E;AAC5E,2EAA2E;AAC3E,iDAAiD;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,aAAa,EAAE;IACjE,aAAa;CACd,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,cAAc,EAAE;IACnE,aAAa;CACd,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,gBAAgB,EAAE;IACvE,UAAU;CACX,CAAC,CAAC;AACH,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,UAAU,EAAE;IAClE,UAAU;CACX,CAAC,CAAC;AAEH,0EAA0E;AAC1E,8EAA8E;AAC9E,yEAAyE;AACzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACxF,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,mBAAmB,EAAE;IAC7E,iBAAiB;CAClB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,kBAAkB,CAC5D,wBAAwB,EACxB,CAAC,sBAAsB,CAAC,CACzB,CAAC;AACF,MAAM,CAAC,MAAM,8BAA8B,GAAG,kBAAkB,CAC9D,0BAA0B,EAC1B,CAAC,wBAAwB,CAAC,CAC3B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAkB,EAClB,KAAa;IAEb,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,aAAa,CAAC;AACpE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAkB;IAC7D,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC;AAClE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,iDAAiD,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,+DAA+D;AAC/D,SAAS,gBAAgB,CAAC,IAAyB;IACjD,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,wEAAwE;AACxE,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,gBAAgB,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,OAAO,OAAO,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,wBAAwB,CAC/B,KAAkB,EAClB,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,iEAAiE;YACjE,wEAAwE;YACxE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;QAChE,KAAK,QAAQ;YACX,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC3C,uEAAuE;YACvE,uEAAuE;YACvE,8DAA8D;YAC9D,OAAO,CACL,KAAK,CAAC,WAAW,KAAK,SAAS;gBAC/B,OAAO,KAAK,KAAK,QAAQ;gBACzB,mBAAmB,CAAC,KAAK,CAAC,CAC3B,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC3E;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"config-surface.js","sourceRoot":"","sources":["../../../src/lib/config-surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,6 +60,10 @@ export declare function allowGlobalCredentials(): void;
|
|
|
60
60
|
* boundary in one process, the way `resetEnvResolver()` does for the resolver.
|
|
61
61
|
*/
|
|
62
62
|
export declare function resetGlobalCredentialsAllowance(): void;
|
|
63
|
+
/** The variable a CI job puts its admin token in (#3890). */
|
|
64
|
+
export declare const PRIMITIVE_TOKEN_VAR = "PRIMITIVE_TOKEN";
|
|
65
|
+
/** The token in `PRIMITIVE_TOKEN`, or null when it is unset or blank. */
|
|
66
|
+
export declare function environmentToken(): string | null;
|
|
63
67
|
/**
|
|
64
68
|
* Reads credentials for the current environment (project mode) or the
|
|
65
69
|
* legacy global file. Returns the standard Credentials shape so existing
|
|
@@ -68,6 +72,10 @@ export declare function resetGlobalCredentialsAllowance(): void;
|
|
|
68
72
|
* In project mode, we blend the per-env stored creds with the serverUrl
|
|
69
73
|
* and appId from primitive/config.json to produce the Credentials the rest of
|
|
70
74
|
* the CLI expects.
|
|
75
|
+
*
|
|
76
|
+
* `PRIMITIVE_TOKEN` (#3890), when set, takes precedence over any stored
|
|
77
|
+
* login and no file is read. It does not loosen the outside-a-project
|
|
78
|
+
* refusal: the environment is resolved first, exactly as for a stored login.
|
|
71
79
|
*/
|
|
72
80
|
export declare function loadCredentialsStore(): Credentials | null;
|
|
73
81
|
/**
|
|
@@ -87,9 +95,16 @@ export declare function clearCredentialsStore(): void;
|
|
|
87
95
|
* Removes the credentials slot for the named environment in a specific
|
|
88
96
|
* project's credentials file. Used by `env remove` so stale tokens from a
|
|
89
97
|
* previously-removed environment can never be silently re-used if the same
|
|
90
|
-
* name is later added back. Never throws.
|
|
98
|
+
* name is later added back. Returns whether a slot was removed. Never throws.
|
|
99
|
+
*/
|
|
100
|
+
export declare function clearCredentialsForEnvInProject(projectRoot: string, envName: string): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Removes the credentials slot for the named environment in a specific
|
|
103
|
+
* project's credentials file. Returns false when there was no slot; throws
|
|
104
|
+
* when the slot exists and the file could not be rewritten, so a caller that
|
|
105
|
+
* must not lose track of a login can tell the two apart.
|
|
91
106
|
*/
|
|
92
|
-
export declare function
|
|
107
|
+
export declare function removeCredentialsSlotInProject(projectRoot: string, envName: string): boolean;
|
|
93
108
|
/**
|
|
94
109
|
* Writes the credentials slot for the named environment in a specific
|
|
95
110
|
* project's credentials file. Used by `primitive init` to carry the session
|
|
@@ -43,6 +43,7 @@ import { homedir } from "os";
|
|
|
43
43
|
import { join } from "path";
|
|
44
44
|
import { getCurrentEnvironment, getProjectConfig } from "./env-resolver.js";
|
|
45
45
|
import { missingConfigMessage, PrimitiveEnvError } from "./env-resolver-core.js";
|
|
46
|
+
import { DEFAULT_SERVER_URL } from "./constants.js";
|
|
46
47
|
export const PROJECT_LOCAL_DIR = ".primitive";
|
|
47
48
|
export const PROJECT_CREDENTIALS_FILENAME = "credentials.json";
|
|
48
49
|
/**
|
|
@@ -169,6 +170,7 @@ function legacyCredentialsRecord(credentials) {
|
|
|
169
170
|
role: credentials.role,
|
|
170
171
|
name: credentials.name,
|
|
171
172
|
globalAdminAppId: credentials.globalAdminAppId,
|
|
173
|
+
stepUp: credentials.stepUp,
|
|
172
174
|
};
|
|
173
175
|
}
|
|
174
176
|
/**
|
|
@@ -200,6 +202,47 @@ function writeProjectCredentialsFile(projectRoot, file) {
|
|
|
200
202
|
// Best-effort on Windows / weird filesystems
|
|
201
203
|
}
|
|
202
204
|
}
|
|
205
|
+
/** The variable a CI job puts its admin token in (#3890). */
|
|
206
|
+
export const PRIMITIVE_TOKEN_VAR = "PRIMITIVE_TOKEN";
|
|
207
|
+
/**
|
|
208
|
+
* The partition header the live test harness needs when no credentials file
|
|
209
|
+
* names one. Deployed servers ignore the header for admin identity.
|
|
210
|
+
*/
|
|
211
|
+
const PARTITION_VAR = "PRIMITIVE_GLOBAL_ADMIN_APP_ID";
|
|
212
|
+
/** The token in `PRIMITIVE_TOKEN`, or null when it is unset or blank. */
|
|
213
|
+
export function environmentToken() {
|
|
214
|
+
const value = process.env[PRIMITIVE_TOKEN_VAR]?.trim();
|
|
215
|
+
return value ? value : null;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Credentials made from `PRIMITIVE_TOKEN` for `serverUrl` (#3890): the token
|
|
219
|
+
* verbatim (an opaque CI token or a JWT), no refresh token, an expiry far
|
|
220
|
+
* enough away that no refresh is ever attempted, and no identity, which the
|
|
221
|
+
* server answers for. Null when the variable is unset or blank.
|
|
222
|
+
*/
|
|
223
|
+
function environmentCredentials(serverUrl) {
|
|
224
|
+
const token = environmentToken();
|
|
225
|
+
if (!token)
|
|
226
|
+
return null;
|
|
227
|
+
const partition = process.env[PARTITION_VAR]?.trim();
|
|
228
|
+
return {
|
|
229
|
+
source: "env",
|
|
230
|
+
serverUrl,
|
|
231
|
+
accessToken: token,
|
|
232
|
+
refreshToken: "",
|
|
233
|
+
expiresAt: "9999-12-31T23:59:59.000Z",
|
|
234
|
+
adminId: "",
|
|
235
|
+
email: "",
|
|
236
|
+
role: "admin",
|
|
237
|
+
...(partition ? { globalAdminAppId: partition } : {}),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/** Refuse to write credentials `PRIMITIVE_TOKEN` supplied. */
|
|
241
|
+
function assertStorable(credentials) {
|
|
242
|
+
if (credentials.source === "env") {
|
|
243
|
+
throw new Error("Credentials from PRIMITIVE_TOKEN are never written to disk.");
|
|
244
|
+
}
|
|
245
|
+
}
|
|
203
246
|
/**
|
|
204
247
|
* Reads credentials for the current environment (project mode) or the
|
|
205
248
|
* legacy global file. Returns the standard Credentials shape so existing
|
|
@@ -208,9 +251,16 @@ function writeProjectCredentialsFile(projectRoot, file) {
|
|
|
208
251
|
* In project mode, we blend the per-env stored creds with the serverUrl
|
|
209
252
|
* and appId from primitive/config.json to produce the Credentials the rest of
|
|
210
253
|
* the CLI expects.
|
|
254
|
+
*
|
|
255
|
+
* `PRIMITIVE_TOKEN` (#3890), when set, takes precedence over any stored
|
|
256
|
+
* login and no file is read. It does not loosen the outside-a-project
|
|
257
|
+
* refusal: the environment is resolved first, exactly as for a stored login.
|
|
211
258
|
*/
|
|
212
259
|
export function loadCredentialsStore() {
|
|
213
260
|
const env = resolveCurrentEnvironment();
|
|
261
|
+
const fromEnvironment = environmentCredentials(env ? env.config.apiUrl : DEFAULT_SERVER_URL.replace(/\/$/, ""));
|
|
262
|
+
if (fromEnvironment)
|
|
263
|
+
return fromEnvironment;
|
|
214
264
|
if (!env) {
|
|
215
265
|
return loadLegacyCredentials();
|
|
216
266
|
}
|
|
@@ -228,6 +278,7 @@ export function loadCredentialsStore() {
|
|
|
228
278
|
role: stored.role,
|
|
229
279
|
name: stored.name,
|
|
230
280
|
globalAdminAppId: stored.globalAdminAppId,
|
|
281
|
+
...(stored.stepUp ? { stepUp: stored.stepUp } : {}),
|
|
231
282
|
};
|
|
232
283
|
}
|
|
233
284
|
/**
|
|
@@ -238,6 +289,7 @@ export function loadCredentialsStore() {
|
|
|
238
289
|
* mode, and ignored in project mode (the env's apiUrl is canonical).
|
|
239
290
|
*/
|
|
240
291
|
export function saveCredentialsStore(credentials) {
|
|
292
|
+
assertStorable(credentials);
|
|
241
293
|
const env = resolveCurrentEnvironment();
|
|
242
294
|
if (!env) {
|
|
243
295
|
ensureDir(getLegacyConfigDir());
|
|
@@ -260,6 +312,7 @@ export function saveCredentialsStore(credentials) {
|
|
|
260
312
|
role: credentials.role,
|
|
261
313
|
name: credentials.name,
|
|
262
314
|
globalAdminAppId: credentials.globalAdminAppId,
|
|
315
|
+
stepUp: credentials.stepUp,
|
|
263
316
|
};
|
|
264
317
|
writeProjectCredentialsFile(env.projectRoot, file);
|
|
265
318
|
}
|
|
@@ -288,20 +341,31 @@ export function clearCredentialsStore() {
|
|
|
288
341
|
* Removes the credentials slot for the named environment in a specific
|
|
289
342
|
* project's credentials file. Used by `env remove` so stale tokens from a
|
|
290
343
|
* previously-removed environment can never be silently re-used if the same
|
|
291
|
-
* name is later added back. Never throws.
|
|
344
|
+
* name is later added back. Returns whether a slot was removed. Never throws.
|
|
292
345
|
*/
|
|
293
346
|
export function clearCredentialsForEnvInProject(projectRoot, envName) {
|
|
294
347
|
try {
|
|
295
|
-
|
|
296
|
-
if (file.environments[envName]) {
|
|
297
|
-
delete file.environments[envName];
|
|
298
|
-
writeProjectCredentialsFile(projectRoot, file);
|
|
299
|
-
}
|
|
348
|
+
return removeCredentialsSlotInProject(projectRoot, envName);
|
|
300
349
|
}
|
|
301
350
|
catch {
|
|
302
351
|
// Best-effort — removal is not a hard requirement for env removal to succeed.
|
|
352
|
+
return false;
|
|
303
353
|
}
|
|
304
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* Removes the credentials slot for the named environment in a specific
|
|
357
|
+
* project's credentials file. Returns false when there was no slot; throws
|
|
358
|
+
* when the slot exists and the file could not be rewritten, so a caller that
|
|
359
|
+
* must not lose track of a login can tell the two apart.
|
|
360
|
+
*/
|
|
361
|
+
export function removeCredentialsSlotInProject(projectRoot, envName) {
|
|
362
|
+
const file = loadProjectCredentialsFile(projectRoot);
|
|
363
|
+
if (!file.environments[envName])
|
|
364
|
+
return false;
|
|
365
|
+
delete file.environments[envName];
|
|
366
|
+
writeProjectCredentialsFile(projectRoot, file);
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
305
369
|
/**
|
|
306
370
|
* Writes the credentials slot for the named environment in a specific
|
|
307
371
|
* project's credentials file. Used by `primitive init` to carry the session
|
|
@@ -309,6 +373,7 @@ export function clearCredentialsForEnvInProject(projectRoot, envName) {
|
|
|
309
373
|
* in-project CLI command works without a second `primitive login`.
|
|
310
374
|
*/
|
|
311
375
|
export function seedCredentialsForEnvInProject(projectRoot, envName, credentials) {
|
|
376
|
+
assertStorable(credentials);
|
|
312
377
|
const file = loadProjectCredentialsFile(projectRoot);
|
|
313
378
|
file.environments[envName] = {
|
|
314
379
|
accessToken: credentials.accessToken,
|
|
@@ -319,6 +384,7 @@ export function seedCredentialsForEnvInProject(projectRoot, envName, credentials
|
|
|
319
384
|
role: credentials.role,
|
|
320
385
|
name: credentials.name,
|
|
321
386
|
globalAdminAppId: credentials.globalAdminAppId,
|
|
387
|
+
stepUp: credentials.stepUp,
|
|
322
388
|
};
|
|
323
389
|
writeProjectCredentialsFile(projectRoot, file);
|
|
324
390
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials-store.js","sourceRoot":"","sources":["../../../src/lib/credentials-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"credentials-store.js","sourceRoot":"","sources":["../../../src/lib/credentials-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The side reads `primitive documents export` makes for each document (#4149):
|
|
3
|
+
* its permissions, its pending invitations, its aliases and its blob list.
|
|
4
|
+
*
|
|
5
|
+
* Each one used to sit in a bare `catch {}`, so a 403, a 429 or a 5xx wrote an
|
|
6
|
+
* empty list and the export reported success. Aliases and blobs are what an
|
|
7
|
+
* import restores, so the loss carried straight into the migrated app. Only a
|
|
8
|
+
* documented "none" answer reads as empty here — a 404, or whatever extra
|
|
9
|
+
* statuses the caller names — exactly as the import's own existence check
|
|
10
|
+
* reads only a 404 as absence. A transient failure is retried through the
|
|
11
|
+
* CLI's shared retry; anything else fails the document.
|
|
12
|
+
*/
|
|
13
|
+
/** Options for {@link readExportLookup}. */
|
|
14
|
+
export interface ExportLookupOptions {
|
|
15
|
+
/** Statuses that mean "the document has none". Defaults to `[404]`. */
|
|
16
|
+
absentStatuses?: readonly number[];
|
|
17
|
+
/** The wait between tries; injectable so a test need not spend it. */
|
|
18
|
+
sleep?: (ms: number) => Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Read one of a document's export lookups, or `null` when it has none.
|
|
22
|
+
*
|
|
23
|
+
* Throws when the read fails with anything other than an absent status, after
|
|
24
|
+
* retrying a transient failure. The error names the document and the lookup,
|
|
25
|
+
* so a caller exporting many documents can report which one is incomplete.
|
|
26
|
+
*
|
|
27
|
+
* @param documentId - The document being exported, named in a failure.
|
|
28
|
+
* @param lookup - What is being read, as an operator reads it ("aliases").
|
|
29
|
+
* @param read - The read itself.
|
|
30
|
+
*/
|
|
31
|
+
export declare function readExportLookup<T>(documentId: string, lookup: string, read: () => Promise<T>, options?: ExportLookupOptions): Promise<T | null>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The side reads `primitive documents export` makes for each document (#4149):
|
|
3
|
+
* its permissions, its pending invitations, its aliases and its blob list.
|
|
4
|
+
*
|
|
5
|
+
* Each one used to sit in a bare `catch {}`, so a 403, a 429 or a 5xx wrote an
|
|
6
|
+
* empty list and the export reported success. Aliases and blobs are what an
|
|
7
|
+
* import restores, so the loss carried straight into the migrated app. Only a
|
|
8
|
+
* documented "none" answer reads as empty here — a 404, or whatever extra
|
|
9
|
+
* statuses the caller names — exactly as the import's own existence check
|
|
10
|
+
* reads only a 404 as absence. A transient failure is retried through the
|
|
11
|
+
* CLI's shared retry; anything else fails the document.
|
|
12
|
+
*/
|
|
13
|
+
import { failureStatus, withTransientRetry } from "./transient-retry.js";
|
|
14
|
+
/** An absent status, carried out of the retry so it is not retried. */
|
|
15
|
+
const ABSENT = Symbol("absent");
|
|
16
|
+
/**
|
|
17
|
+
* Read one of a document's export lookups, or `null` when it has none.
|
|
18
|
+
*
|
|
19
|
+
* Throws when the read fails with anything other than an absent status, after
|
|
20
|
+
* retrying a transient failure. The error names the document and the lookup,
|
|
21
|
+
* so a caller exporting many documents can report which one is incomplete.
|
|
22
|
+
*
|
|
23
|
+
* @param documentId - The document being exported, named in a failure.
|
|
24
|
+
* @param lookup - What is being read, as an operator reads it ("aliases").
|
|
25
|
+
* @param read - The read itself.
|
|
26
|
+
*/
|
|
27
|
+
export async function readExportLookup(documentId, lookup, read, options = {}) {
|
|
28
|
+
const absent = options.absentStatuses ?? [404];
|
|
29
|
+
let attempts = 0;
|
|
30
|
+
try {
|
|
31
|
+
const result = await withTransientRetry(async () => {
|
|
32
|
+
attempts++;
|
|
33
|
+
try {
|
|
34
|
+
return await read();
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const status = failureStatus(error);
|
|
38
|
+
if (status !== undefined && absent.includes(status))
|
|
39
|
+
return ABSENT;
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}, undefined, undefined, options.sleep);
|
|
43
|
+
return result === ABSENT ? null : result;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
const status = failureStatus(error);
|
|
47
|
+
const reason = `${error?.message || "no reason given"}${status !== undefined ? ` (${status})` : ""}`;
|
|
48
|
+
const tries = attempts > 1 ? ` after ${attempts} attempts` : "";
|
|
49
|
+
throw new Error(`Document ${documentId}: reading its ${lookup} failed${tries} — ` +
|
|
50
|
+
`${reason}. Its export would be incomplete, so it was not exported.`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=document-export-lookups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-export-lookups.js","sourceRoot":"","sources":["../../../src/lib/document-export-lookups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAUzE,uEAAuE;AACvE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,MAAc,EACd,IAAsB,EACtB,UAA+B,EAAE;IAEjC,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,KAAK,IAAI,EAAE;YACT,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,OAAO,MAAM,CAAC;gBACnE,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,EACD,SAAS,EACT,SAAS,EACT,OAAO,CAAC,KAAK,CACd,CAAC;QACF,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,GAAG,KAAK,EAAE,OAAO,IAAI,iBAAiB,GACnD,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAC1C,EAAE,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,YAAY,UAAU,iBAAiB,MAAM,UAAU,KAAK,KAAK;YAC/D,GAAG,MAAM,2DAA2D,CACvE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
* which returns a `{ items }` envelope of deferred grants the server has
|
|
10
10
|
* already filtered down to unresolved, unexpired, still-invited ones.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* An older server answers the pending read with 403 or 404; the caller reads
|
|
13
|
+
* either as "no pending invitations" and passes `null`, and the export still
|
|
14
|
+
* writes the permission rows. Any other failure fails the export (#4149).
|
|
15
15
|
*/
|
|
16
|
+
/** The pending-invitations statuses that mean "none": an older server's 403 or 404. */
|
|
17
|
+
export declare const PENDING_INVITATIONS_ABSENT_STATUSES: readonly number[];
|
|
16
18
|
export interface ExportedPermissionRow {
|
|
17
19
|
email: string;
|
|
18
20
|
permission: string;
|
|
@@ -24,7 +26,7 @@ export interface ExportedPermissionRow {
|
|
|
24
26
|
* Merge a document's permission rows and its pending deferred grants into the
|
|
25
27
|
* single email-keyed list `permissions.json` carries.
|
|
26
28
|
*
|
|
27
|
-
* @param permissionsResponse - `GET /documents/:id/permissions`, or `null` when the
|
|
28
|
-
* @param pendingResponse - `GET /documents/:id/pending-invitations`, or `null` when the
|
|
29
|
+
* @param permissionsResponse - `GET /documents/:id/permissions`, or `null` when the document has none.
|
|
30
|
+
* @param pendingResponse - `GET /documents/:id/pending-invitations`, or `null` when the server has none to report.
|
|
29
31
|
*/
|
|
30
32
|
export declare function buildPermissionsExport(permissionsResponse: unknown, pendingResponse: unknown): ExportedPermissionRow[];
|
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
* which returns a `{ items }` envelope of deferred grants the server has
|
|
10
10
|
* already filtered down to unresolved, unexpired, still-invited ones.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* An older server answers the pending read with 403 or 404; the caller reads
|
|
13
|
+
* either as "no pending invitations" and passes `null`, and the export still
|
|
14
|
+
* writes the permission rows. Any other failure fails the export (#4149).
|
|
15
15
|
*/
|
|
16
|
+
/** The pending-invitations statuses that mean "none": an older server's 403 or 404. */
|
|
17
|
+
export const PENDING_INVITATIONS_ABSENT_STATUSES = [403, 404];
|
|
16
18
|
/** Unwrap a list that may arrive bare, or under `items`, or under a named key. */
|
|
17
19
|
function rows(value, key) {
|
|
18
20
|
if (Array.isArray(value))
|
|
@@ -30,8 +32,8 @@ function rows(value, key) {
|
|
|
30
32
|
* Merge a document's permission rows and its pending deferred grants into the
|
|
31
33
|
* single email-keyed list `permissions.json` carries.
|
|
32
34
|
*
|
|
33
|
-
* @param permissionsResponse - `GET /documents/:id/permissions`, or `null` when the
|
|
34
|
-
* @param pendingResponse - `GET /documents/:id/pending-invitations`, or `null` when the
|
|
35
|
+
* @param permissionsResponse - `GET /documents/:id/permissions`, or `null` when the document has none.
|
|
36
|
+
* @param pendingResponse - `GET /documents/:id/pending-invitations`, or `null` when the server has none to report.
|
|
35
37
|
*/
|
|
36
38
|
export function buildPermissionsExport(permissionsResponse, pendingResponse) {
|
|
37
39
|
const granted = rows(permissionsResponse, "permissions")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-export-permissions.js","sourceRoot":"","sources":["../../../src/lib/document-export-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"document-export-permissions.js","sourceRoot":"","sources":["../../../src/lib/document-export-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,uFAAuF;AACvF,MAAM,CAAC,MAAM,mCAAmC,GAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAUjF,kFAAkF;AAClF,SAAS,IAAI,CAAC,KAAc,EAAE,GAAW;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAgC,CAAC;QAClD,KAAK,MAAM,SAAS,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAAE,OAAO,QAAQ,CAAC,SAAS,CAAU,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,mBAA4B,EAC5B,eAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAC;SACrD,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAChB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,SAAS,EAAE,CAAC,CAAC,SAAS;KACvB,CAAC,CAAC,CAAC;IAEN,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC;SACjD,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAChB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,MAAM,EAAE,YAAqB;QAC7B,MAAM,EAAE,SAAkB;KAC3B,CAAC,CAAC,CAAC;IAEN,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -28,6 +28,10 @@
|
|
|
28
28
|
* 3. .primitive/local.json (this machine's `primitive env use`)
|
|
29
29
|
* 4. defaultEnvironment (the committed team default)
|
|
30
30
|
* 5. the sole environment, if there is exactly one
|
|
31
|
+
*
|
|
32
|
+
* Steps 1–3 may also name a machine-local environment — an entry in the
|
|
33
|
+
* `environments` map of `.primitive/local.json` that shares a committed
|
|
34
|
+
* environment's tree (#4117). Steps 4 and 5 consider committed ones only.
|
|
31
35
|
*/
|
|
32
36
|
/** Schema version of `primitive/config.json` this core understands. */
|
|
33
37
|
export declare const PRIMITIVE_CONFIG_VERSION = 1;
|
|
@@ -172,6 +176,14 @@ export interface ResolvedPrimitiveEnv {
|
|
|
172
176
|
/** The app's web counterpart for the SELECTED environment, if it has one. */
|
|
173
177
|
webUrl?: string;
|
|
174
178
|
description?: string;
|
|
179
|
+
/**
|
|
180
|
+
* The committed environment whose `primitive/<tree>/` this one reads and
|
|
181
|
+
* writes: its own name for a committed environment, the entry's `tree` for
|
|
182
|
+
* a machine-local one (#4117).
|
|
183
|
+
*/
|
|
184
|
+
tree: string;
|
|
185
|
+
/** Whether this is a machine-local environment from `.primitive/local.json`. */
|
|
186
|
+
local: boolean;
|
|
175
187
|
source: PrimitiveEnvSource;
|
|
176
188
|
configPath: string;
|
|
177
189
|
localStatePath: string;
|
|
@@ -231,21 +243,77 @@ export declare function localStatePathForConfigPath(configPath: string): string;
|
|
|
231
243
|
* silent fallback to the wrong backend.
|
|
232
244
|
*/
|
|
233
245
|
export declare function readCoreProjectConfig(configPath: string): CoreProjectConfig;
|
|
246
|
+
/**
|
|
247
|
+
* A machine-local environment (#4117): an entry in the `environments` map of
|
|
248
|
+
* `.primitive/local.json`. It names its own app and server, like a committed
|
|
249
|
+
* environment, and `tree` names the committed environment whose
|
|
250
|
+
* `primitive/<tree>/` it reads and writes — a child app sharing its parent's
|
|
251
|
+
* configuration tree. It is never committed, so it carries no web
|
|
252
|
+
* counterpart, description or iOS app id of its own.
|
|
253
|
+
*/
|
|
254
|
+
export interface CoreLocalEnvironmentEntry {
|
|
255
|
+
apiUrl: string;
|
|
256
|
+
appId: string;
|
|
257
|
+
appName?: string;
|
|
258
|
+
tree: string;
|
|
259
|
+
}
|
|
260
|
+
/** What `.primitive/local.json` holds, read and validated. */
|
|
261
|
+
export interface CoreLocalState {
|
|
262
|
+
/** This machine's `primitive env use`, or null when nothing is selected. */
|
|
263
|
+
selectedEnvironment: string | null;
|
|
264
|
+
/** The machine-local environments, keyed by name. Empty when there are none. */
|
|
265
|
+
environments: Record<string, CoreLocalEnvironmentEntry>;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Reads `.primitive/local.json`: this machine's selection and its
|
|
269
|
+
* machine-local environments. Returns an empty state when there is no file;
|
|
270
|
+
* throws `corrupt-local-state` when the file exists but cannot be read as the
|
|
271
|
+
* shape the CLI writes.
|
|
272
|
+
*
|
|
273
|
+
* Every entry is validated here, at the read, whether or not it is the one
|
|
274
|
+
* selected: a broken entry is a broken file, and a reader that only checked
|
|
275
|
+
* the selected one would accept a file another reader then refuses. Given the
|
|
276
|
+
* committed config, an entry is also refused when its name is a committed
|
|
277
|
+
* environment's or its `tree` names none.
|
|
278
|
+
*/
|
|
279
|
+
export declare function readLocalState(configPath: string, config?: CoreProjectConfig): CoreLocalState;
|
|
280
|
+
/**
|
|
281
|
+
* Validates the `environments` map of `.primitive/local.json` — absent reads
|
|
282
|
+
* as empty — and returns its entries normalized (`apiUrl` without a trailing
|
|
283
|
+
* slash, `appId` and `tree` trimmed). Every failure is `corrupt-local-state`
|
|
284
|
+
* naming the entry and the field. Exported so the CLI's write side refuses
|
|
285
|
+
* exactly what this read refuses.
|
|
286
|
+
*/
|
|
287
|
+
export declare function parseLocalEnvironments(raw: unknown, path: string, config?: CoreProjectConfig): Record<string, CoreLocalEnvironmentEntry>;
|
|
288
|
+
/**
|
|
289
|
+
* Whether `name` is a committed environment: an own key of the parsed map, so
|
|
290
|
+
* a valid name like `constructor` is never mistaken for one through
|
|
291
|
+
* `Object.prototype`.
|
|
292
|
+
*/
|
|
293
|
+
export declare function isCommittedEnvironment(config: {
|
|
294
|
+
environments: Record<string, unknown>;
|
|
295
|
+
}, name: string): boolean;
|
|
234
296
|
/**
|
|
235
297
|
* Reads this machine's selection from `.primitive/local.json`. Returns null
|
|
236
298
|
* when there is no file or no selection in it; throws when the file exists but
|
|
237
|
-
* cannot be read as the shape
|
|
299
|
+
* cannot be read as the shape the CLI writes.
|
|
238
300
|
*/
|
|
239
301
|
export declare function readLocalSelection(configPath: string): string | null;
|
|
240
302
|
/**
|
|
241
303
|
* Applies the precedence to an already-loaded config. Exposed separately so
|
|
242
304
|
* the CLI wrapper can run its own field-level validation first and still share
|
|
243
305
|
* one ordering with every other reader.
|
|
306
|
+
*
|
|
307
|
+
* Machine-local environments take part in the three explicit steps — a name
|
|
308
|
+
* given, `PRIMITIVE_ENV`, this machine's selection — and never in the two
|
|
309
|
+
* fallbacks: `defaultEnvironment` is committed, and a local entry never
|
|
310
|
+
* changes what a project resolves when nothing is selected.
|
|
244
311
|
*/
|
|
245
312
|
export declare function selectEnvironmentName(config: CoreProjectConfig, options: {
|
|
246
313
|
explicitEnvName?: string | null;
|
|
247
314
|
envVarName?: string | null;
|
|
248
315
|
localSelection?: string | null;
|
|
316
|
+
localEnvironments?: Record<string, CoreLocalEnvironmentEntry>;
|
|
249
317
|
configPath?: string;
|
|
250
318
|
}): {
|
|
251
319
|
name: string;
|