@asturiu/v0-sdk 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +82 -2
- package/contract/assertion-vectors.json +90 -0
- package/contract/schemas/branding.schema.json +46 -0
- package/contract/schemas/definitions.schema.json +376 -0
- package/contract/schemas/portal.schema.json +56 -0
- package/contract/tenant-api-routes.json +165 -0
- package/dist/branding.d.ts +131 -0
- package/dist/branding.d.ts.map +1 -0
- package/dist/branding.js +206 -0
- package/dist/branding.js.map +1 -0
- package/dist/changesets.d.ts +58 -0
- package/dist/changesets.d.ts.map +1 -0
- package/dist/changesets.js +18 -0
- package/dist/changesets.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +12 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/changesets.d.ts +14 -0
- package/dist/cli/changesets.d.ts.map +1 -0
- package/dist/cli/changesets.js +252 -0
- package/dist/cli/changesets.js.map +1 -0
- package/dist/cli/cli.d.ts +37 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +415 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/context.d.ts +147 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +258 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/engine.d.ts +59 -0
- package/dist/cli/engine.d.ts.map +1 -0
- package/dist/cli/engine.js +85 -0
- package/dist/cli/engine.js.map +1 -0
- package/dist/cli/feedback.d.ts +40 -0
- package/dist/cli/feedback.d.ts.map +1 -0
- package/dist/cli/feedback.js +420 -0
- package/dist/cli/feedback.js.map +1 -0
- package/dist/cli/files.d.ts +83 -0
- package/dist/cli/files.d.ts.map +1 -0
- package/dist/cli/files.js +389 -0
- package/dist/cli/files.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/overview.d.ts +6 -0
- package/dist/cli/overview.d.ts.map +1 -0
- package/dist/cli/overview.js +379 -0
- package/dist/cli/overview.js.map +1 -0
- package/dist/cli/parts.d.ts +5 -0
- package/dist/cli/parts.d.ts.map +1 -0
- package/dist/cli/parts.js +414 -0
- package/dist/cli/parts.js.map +1 -0
- package/dist/cli/sources.d.ts +37 -0
- package/dist/cli/sources.d.ts.map +1 -0
- package/dist/cli/sources.js +91 -0
- package/dist/cli/sources.js.map +1 -0
- package/dist/cli/terminal.d.ts +135 -0
- package/dist/cli/terminal.d.ts.map +1 -0
- package/dist/cli/terminal.js +353 -0
- package/dist/cli/terminal.js.map +1 -0
- package/dist/cli/ui-page.d.ts +8 -0
- package/dist/cli/ui-page.d.ts.map +1 -0
- package/dist/cli/ui-page.js +216 -0
- package/dist/cli/ui-page.js.map +1 -0
- package/dist/cli/ui.d.ts +54 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +251 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/client.d.ts +88 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +165 -0
- package/dist/client.js.map +1 -0
- package/dist/contacts.d.ts +43 -0
- package/dist/contacts.d.ts.map +1 -0
- package/dist/contacts.js +46 -0
- package/dist/contacts.js.map +1 -0
- package/dist/definition-set.d.ts +731 -0
- package/dist/definition-set.d.ts.map +1 -0
- package/dist/definition-set.js +659 -0
- package/dist/definition-set.js.map +1 -0
- package/dist/definitions.d.ts +42 -0
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +154 -0
- package/dist/definitions.js.map +1 -0
- package/dist/enrolment.d.ts +9 -0
- package/dist/enrolment.d.ts.map +1 -0
- package/dist/enrolment.js +8 -0
- package/dist/enrolment.js.map +1 -0
- package/dist/fill.d.ts +73 -0
- package/dist/fill.d.ts.map +1 -0
- package/dist/fill.js +46 -0
- package/dist/fill.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications.d.ts +33 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +36 -0
- package/dist/notifications.js.map +1 -0
- package/dist/oidc.d.ts +122 -0
- package/dist/oidc.d.ts.map +1 -0
- package/dist/oidc.js +150 -0
- package/dist/oidc.js.map +1 -0
- package/dist/overlay.d.ts +109 -0
- package/dist/overlay.d.ts.map +1 -0
- package/dist/overlay.js +58 -0
- package/dist/overlay.js.map +1 -0
- package/dist/passes.d.ts +95 -0
- package/dist/passes.d.ts.map +1 -0
- package/dist/passes.js +140 -0
- package/dist/passes.js.map +1 -0
- package/dist/portal-options.d.ts +65 -0
- package/dist/portal-options.d.ts.map +1 -0
- package/dist/portal-options.js +120 -0
- package/dist/portal-options.js.map +1 -0
- package/dist/reads.d.ts +41 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +44 -0
- package/dist/reads.js.map +1 -0
- package/dist/recovery-words.d.ts +8 -0
- package/dist/recovery-words.d.ts.map +1 -0
- package/dist/recovery-words.js +136 -0
- package/dist/recovery-words.js.map +1 -0
- package/dist/recovery.d.ts +198 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +112 -0
- package/dist/recovery.js.map +1 -0
- package/dist/reveal.d.ts +35 -0
- package/dist/reveal.d.ts.map +1 -0
- package/dist/reveal.js +66 -0
- package/dist/reveal.js.map +1 -0
- package/dist/seal.d.ts +15 -0
- package/dist/seal.d.ts.map +1 -0
- package/dist/seal.js +0 -0
- package/dist/seal.js.map +1 -0
- package/dist/session.d.ts +66 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +61 -0
- package/dist/session.js.map +1 -0
- package/dist/signing-in-mark.d.ts +14 -0
- package/dist/signing-in-mark.d.ts.map +1 -0
- package/dist/signing-in-mark.js +24 -0
- package/dist/signing-in-mark.js.map +1 -0
- package/dist/signing-in.d.ts +22 -0
- package/dist/signing-in.d.ts.map +1 -0
- package/dist/signing-in.js +203 -0
- package/dist/signing-in.js.map +1 -0
- package/dist/tags.d.ts +96 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +88 -0
- package/dist/tags.js.map +1 -0
- package/dist/tenant-subscription.d.ts +47 -0
- package/dist/tenant-subscription.d.ts.map +1 -0
- package/dist/tenant-subscription.js +7 -0
- package/dist/tenant-subscription.js.map +1 -0
- package/dist/testing/index.d.ts +125 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +320 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/theme.d.ts +237 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +504 -0
- package/dist/theme.js.map +1 -0
- package/dist/tickets.d.ts +152 -0
- package/dist/tickets.d.ts.map +1 -0
- package/dist/tickets.js +65 -0
- package/dist/tickets.js.map +1 -0
- package/dist/tiers.d.ts +168 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +341 -0
- package/dist/tiers.js.map +1 -0
- package/dist/types.d.ts +885 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/urlid.d.ts +50 -0
- package/dist/urlid.d.ts.map +1 -0
- package/dist/urlid.js +78 -0
- package/dist/urlid.js.map +1 -0
- package/dist/version.d.ts +15 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/make/asturiu.mk +43 -0
- package/package.json +63 -4
- package/src/branding.ts +221 -0
- package/src/changesets.ts +61 -0
- package/src/cli/bin.ts +12 -0
- package/src/cli/changesets.ts +233 -0
- package/src/cli/cli.ts +425 -0
- package/src/cli/context.ts +299 -0
- package/src/cli/engine.ts +112 -0
- package/src/cli/feedback.ts +406 -0
- package/src/cli/files.ts +371 -0
- package/src/cli/index.ts +7 -0
- package/src/cli/overview.ts +343 -0
- package/src/cli/parts.ts +371 -0
- package/src/cli/sources.ts +111 -0
- package/src/cli/terminal.ts +384 -0
- package/src/cli/ui-page.ts +215 -0
- package/src/cli/ui.ts +266 -0
- package/src/client.ts +202 -0
- package/src/contacts.ts +61 -0
- package/src/definition-set.ts +965 -0
- package/src/definitions.ts +156 -0
- package/src/enrolment.ts +10 -0
- package/src/fill.ts +83 -0
- package/src/index.ts +38 -0
- package/src/notifications.ts +55 -0
- package/src/oidc.ts +199 -0
- package/src/overlay.ts +137 -0
- package/src/passes.ts +168 -0
- package/src/portal-options.ts +125 -0
- package/src/reads.ts +71 -0
- package/src/recovery-words.ts +137 -0
- package/src/recovery.ts +269 -0
- package/src/reveal.ts +72 -0
- package/src/seal.ts +0 -0
- package/src/session.ts +93 -0
- package/src/signing-in-mark.ts +23 -0
- package/src/signing-in.ts +213 -0
- package/src/tags.ts +146 -0
- package/src/tenant-subscription.ts +44 -0
- package/src/testing/index.ts +337 -0
- package/src/theme.ts +628 -0
- package/src/tickets.ts +195 -0
- package/src/tiers.ts +397 -0
- package/src/types.ts +847 -0
- package/src/urlid.ts +77 -0
- package/src/version.ts +15 -0
- package/templates/asturiu/branding.json +4 -0
- package/templates/asturiu/definitions.json +23 -0
- package/templates/asturiu/portal.json +16 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The repository's files next to what the Engine holds: the Definition set, the branding and the portal options
|
|
3
|
+
* (ADR-029, ADR-038, ADR-039). `definitions`, `branding`, `pull` and `apply`.
|
|
4
|
+
*/
|
|
5
|
+
import { brandingImageProblems, inlineImageBytes } from "../branding.js";
|
|
6
|
+
import { applyBranding, applyDefinitions, applyPortal, definitionSetHash, definitionStatus, entryTypesOf, readBranding, readPortal } from "../definition-set.js";
|
|
7
|
+
import { PORTAL_PAGES, PORTAL_SWITCHES } from "../portal-options.js";
|
|
8
|
+
import { sanitizeThemeSpec } from "../theme.js";
|
|
9
|
+
import { EXIT, Fail, call, emit, hostOf, needTenantApi, readFailure, sources } from "./context.js";
|
|
10
|
+
import { imagePaths } from "./sources.js";
|
|
11
|
+
import { bytes, plain, plural, truncate } from "./terminal.js";
|
|
12
|
+
// ================================================================== differences
|
|
13
|
+
/** Where two JSON values differ, as dotted paths with both sides. */
|
|
14
|
+
export function differences(a, b, at = "") {
|
|
15
|
+
const isObj = (v) => !!v && typeof v === "object" && !Array.isArray(v);
|
|
16
|
+
if (isObj(a) && isObj(b))
|
|
17
|
+
return [...new Set([...Object.keys(a), ...Object.keys(b)])].flatMap((k) => differences(a[k], b[k], at ? `${at}.${k}` : k));
|
|
18
|
+
return JSON.stringify(a) === JSON.stringify(b) ? [] : [{ path: at || "(all)", a, b }];
|
|
19
|
+
}
|
|
20
|
+
/** A value as a difference shows it: an inline image by its size, long text cut. */
|
|
21
|
+
function shown(v) {
|
|
22
|
+
if (v === undefined)
|
|
23
|
+
return "(not set)";
|
|
24
|
+
const size = inlineImageBytes(v);
|
|
25
|
+
if (size !== null)
|
|
26
|
+
return `inline image, ${bytes(size)}`;
|
|
27
|
+
return truncate(JSON.stringify(v), 60);
|
|
28
|
+
}
|
|
29
|
+
/** The theme keys the Engine would not keep. */
|
|
30
|
+
export function themeDrops(theme) {
|
|
31
|
+
if (!theme || typeof theme !== "object")
|
|
32
|
+
return [];
|
|
33
|
+
return differences(theme, sanitizeThemeSpec(theme))
|
|
34
|
+
.filter((d) => d.b === undefined)
|
|
35
|
+
.map((d) => d.path);
|
|
36
|
+
}
|
|
37
|
+
/** Reads one of the repository's files; its error instead of a throw. */
|
|
38
|
+
export function readSource(read) {
|
|
39
|
+
try {
|
|
40
|
+
return { value: read(), error: null };
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
return { value: null, error: err.message };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export const tabRead = (s) => !("error" in s);
|
|
47
|
+
/**
|
|
48
|
+
* What the repository sends next to what the Engine holds, per tab. A switch or page the repository leaves out is its
|
|
49
|
+
* default (on, in the portal), so it is compared as such; a page an administrator redirected is not the repository's.
|
|
50
|
+
*/
|
|
51
|
+
export async function presentation(ctx) {
|
|
52
|
+
const [b, p] = await Promise.all([call(ctx, (fetch, cfg) => readBranding({ ...cfg, fetch })), call(ctx, (fetch, cfg) => readPortal({ ...cfg, fetch }))]);
|
|
53
|
+
const src = sources(ctx);
|
|
54
|
+
const diff = (x, y) => differences(x, y).map((d) => ({ path: d.path, repository: shown(d.a), stored: shown(d.b) }));
|
|
55
|
+
let branding;
|
|
56
|
+
if (!b.ok)
|
|
57
|
+
branding = { error: readFailure(b, "branding"), why: b.why, status: b.status };
|
|
58
|
+
else {
|
|
59
|
+
const w = readSource(() => src.branding());
|
|
60
|
+
branding = { source: b.value.source, theme: b.value.branding.theme !== undefined, stored: b.value.branding, differences: w.value ? diff(w.value, b.value.branding) : [], ...(w.error ? { source_error: w.error } : {}) };
|
|
61
|
+
}
|
|
62
|
+
let portal;
|
|
63
|
+
if (!p.ok)
|
|
64
|
+
portal = { error: readFailure(p, "portal"), why: p.why, status: p.status };
|
|
65
|
+
else {
|
|
66
|
+
const w = readSource(() => src.portal());
|
|
67
|
+
let differ = [];
|
|
68
|
+
if (w.value) {
|
|
69
|
+
const redirected = p.value.redirected;
|
|
70
|
+
const wanted = Object.fromEntries(PORTAL_SWITCHES.map((k) => [k, w.value?.[k] ?? true]));
|
|
71
|
+
wanted.pages = Object.fromEntries(PORTAL_PAGES.filter((pg) => !redirected.includes(pg) && p.value.portal.pages?.[pg] !== undefined).map((pg) => [pg, w.value?.pages?.[pg] ?? { mode: "portal" }]));
|
|
72
|
+
differ = diff(wanted, p.value.portal);
|
|
73
|
+
}
|
|
74
|
+
portal = { source: p.value.source, redirected: p.value.redirected, stored: p.value.portal, differences: differ, ...(w.error ? { source_error: w.error } : {}) };
|
|
75
|
+
}
|
|
76
|
+
return { branding, portal };
|
|
77
|
+
}
|
|
78
|
+
/** A tab's state without the stored values (inline images make it long). */
|
|
79
|
+
export function withoutStored(s) {
|
|
80
|
+
const { stored: _s, ...rest } = s;
|
|
81
|
+
return rest;
|
|
82
|
+
}
|
|
83
|
+
const editedIn = (source) => (source === "repository" ? "edited in the repository" : "edited in the Admin UI");
|
|
84
|
+
/** Both tabs next to the repository's files: who edits each, and every difference as a table. */
|
|
85
|
+
function renderTabs(ctx, pres) {
|
|
86
|
+
const { t } = ctx;
|
|
87
|
+
const src = sources(ctx);
|
|
88
|
+
for (const tab of ["branding", "portal"]) {
|
|
89
|
+
const s = pres[tab];
|
|
90
|
+
const label = t.paint.bold(tab === "branding" ? "Branding" : "Portal");
|
|
91
|
+
if (!tabRead(s)) {
|
|
92
|
+
t.item(s.why === "no-key" ? "muted" : "fail", label, s.error);
|
|
93
|
+
t.out();
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const tone = s.source_error ? "fail" : s.differences.length ? "warn" : s.source === "repository" ? "ok" : "warn";
|
|
97
|
+
t.item(tone, `${label} ${editedIn(s.source)}`, s.source_error ? "" : s.differences.length ? plural(s.differences.length, "difference") : `equal to ${src.files[tab]}`);
|
|
98
|
+
if (s.source_error)
|
|
99
|
+
t.out(` ${t.paint.red(plain(s.source_error))}`);
|
|
100
|
+
if (s.source !== "repository")
|
|
101
|
+
t.out(` ${t.paint.gray("apply answers 409 until a tenant administrator hands the tab to the repository")}`);
|
|
102
|
+
if (tab === "branding" && !s.theme)
|
|
103
|
+
t.out(` ${t.paint.gray("no theme stored: the portal runs on its default look")}`);
|
|
104
|
+
if (tab === "portal" && s.redirected?.length)
|
|
105
|
+
t.out(` ${t.paint.gray(`${s.redirected.join(", ")} ${s.redirected.length === 1 ? "stays" : "stay"} in the application, where an administrator moved ${s.redirected.length === 1 ? "it" : "them"}`)}`);
|
|
106
|
+
if (s.differences.length) {
|
|
107
|
+
t.table(s.differences, [
|
|
108
|
+
{ label: "Key", value: (d) => d.path, paint: (x) => t.paint.bold(x) },
|
|
109
|
+
{ label: "Repository", value: (d) => d.repository, flex: true, min: 14 },
|
|
110
|
+
{ label: "Stored", value: (d) => d.stored, flex: true, min: 14, paint: (x) => t.paint.cyan(x) },
|
|
111
|
+
], { indent: 6 });
|
|
112
|
+
}
|
|
113
|
+
t.out();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// ================================================================== the Definition set
|
|
117
|
+
/**
|
|
118
|
+
* The repository's Definition set, its size and its hash: the hash the SDK sends and the Engine stores, so equal
|
|
119
|
+
* hashes mean the live set is the repository's.
|
|
120
|
+
*/
|
|
121
|
+
export async function repositorySet(ctx) {
|
|
122
|
+
const read = readSource(() => sources(ctx).definitions());
|
|
123
|
+
if (!read.value)
|
|
124
|
+
return { set: null, error: read.error, hash: null, wallets: 0, entries: 0, fields: 0 };
|
|
125
|
+
const set = read.value;
|
|
126
|
+
const entries = Object.values(entryTypesOf({ wallets: set.wallets ?? {}, shared_entries: set.shared_entries }));
|
|
127
|
+
const fields = Object.keys(set.shared_fields ?? {}).length + entries.reduce((n, e) => n + Object.keys(e.fields ?? {}).length, 0);
|
|
128
|
+
let hash = null;
|
|
129
|
+
try {
|
|
130
|
+
hash = await definitionSetHash(set);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
hash = null;
|
|
134
|
+
}
|
|
135
|
+
return { set, error: null, hash, wallets: Object.keys(set.wallets ?? {}).length, entries: entries.length, fields };
|
|
136
|
+
}
|
|
137
|
+
/** Where the repository's set stands: live, waiting for approval, or not sent; null when either side is unknown. */
|
|
138
|
+
export function setState(live, hash) {
|
|
139
|
+
if (!live || !hash || !live.hash)
|
|
140
|
+
return null;
|
|
141
|
+
if (live.hash === hash)
|
|
142
|
+
return "live";
|
|
143
|
+
if (live.waiting.some((w) => w.hash === hash))
|
|
144
|
+
return "waiting";
|
|
145
|
+
return "differs";
|
|
146
|
+
}
|
|
147
|
+
export async function readDefinitionStatus(ctx) {
|
|
148
|
+
return call(ctx, (fetch, cfg) => definitionStatus({ ...cfg, fetch }));
|
|
149
|
+
}
|
|
150
|
+
export async function cmdDefinitions(ctx, args) {
|
|
151
|
+
const sub = args[0] ?? "status";
|
|
152
|
+
if (sub === "apply")
|
|
153
|
+
return applyParts(ctx, ["definitions"]);
|
|
154
|
+
if (sub !== "status")
|
|
155
|
+
throw new Fail(`“definitions ${plain(sub)}” is not a command.`, { hint: `${ctx.cmd} definitions, or ${ctx.cmd} definitions apply`, code: EXIT.misunderstood });
|
|
156
|
+
const { t } = ctx;
|
|
157
|
+
const src = sources(ctx);
|
|
158
|
+
const [st, repo] = await t.busy("Reading the live Definition set", () => Promise.all([readDefinitionStatus(ctx), repositorySet(ctx)]));
|
|
159
|
+
const live = st.ok ? st.value : null;
|
|
160
|
+
const state = setState(live, repo.hash);
|
|
161
|
+
if (ctx.flags.check && state !== "live")
|
|
162
|
+
ctx.exit = EXIT.failed;
|
|
163
|
+
if (ctx.json)
|
|
164
|
+
return emit(ctx, { live: st.ok ? live : { error: readFailure(st, "definitions") }, repository: { file: src.files.definitions, hash: repo.hash, wallet_types: repo.wallets, entry_types: repo.entries, fields: repo.fields, ...(repo.error ? { error: repo.error } : {}) }, state });
|
|
165
|
+
t.banner("Definitions", [`live at ${hostOf(ctx.baseUrl)}`, `next to ${src.label}`]);
|
|
166
|
+
const short = (h) => (h ? `${h.slice(0, 12)}${t.sym.ellipsis}` : "—");
|
|
167
|
+
const rows = [];
|
|
168
|
+
if (live)
|
|
169
|
+
rows.push(["Live", [`${t.mark(live.source === "repository" ? "ok" : "warn")} revision ${t.paint.bold(String(live.revision))} ${t.sym.dot} ${editedIn(live.source)} ${t.paint.gray(live.auto_apply === "safe" ? "safe changes apply on their own" : "every change waits for approval")}`, ` ${t.paint.gray(`hash ${short(live.hash)}`)}`]]);
|
|
170
|
+
else if (!st.ok)
|
|
171
|
+
rows.push(["Live", `${t.mark(st.why === "no-key" ? "muted" : "fail")} ${readFailure(st, "definitions")}`]);
|
|
172
|
+
if (repo.set)
|
|
173
|
+
rows.push(["Repository", [`${t.mark("info")} ${plural(repo.wallets, "Wallet type")} ${t.sym.dot} ${plural(repo.entries, "Entry type")} ${t.sym.dot} ${plural(repo.fields, "Field")}`, ` ${t.paint.gray(`hash ${short(repo.hash)} ${t.sym.dot} ${src.files.definitions}`)}`]]);
|
|
174
|
+
else
|
|
175
|
+
rows.push(["Repository", `${t.mark("fail")} ${plain(repo.error)}`]);
|
|
176
|
+
for (const w of live?.waiting ?? [])
|
|
177
|
+
rows.push(["Waiting", [`${t.mark("warn")} plan ${t.paint.bold(plain(w.plan_id))} ${t.sym.dot} since ${w.created_at.slice(0, 10)}${w.hash === repo.hash ? ` ${t.sym.dot} the repository's set` : ""}`, ` ${t.paint.gray(`hash ${short(w.hash)}`)}`]]);
|
|
178
|
+
t.pairs(rows, { width: 14 });
|
|
179
|
+
t.out();
|
|
180
|
+
const steps = [];
|
|
181
|
+
if (state === "live")
|
|
182
|
+
t.item("ok", t.paint.bold("The live set is the repository's."));
|
|
183
|
+
else if (state === "waiting")
|
|
184
|
+
t.item("warn", t.paint.bold("The repository's set waits for a tenant administrator's approval."), "the Admin UI, your Tenant › Definitions");
|
|
185
|
+
else if (state === "differs") {
|
|
186
|
+
t.item("warn", t.paint.bold("The live set is not the repository's."), live?.source === "repository" ? "it goes out at the next start" : "");
|
|
187
|
+
steps.push([`${ctx.cmd} definitions apply`, "send it now"]);
|
|
188
|
+
}
|
|
189
|
+
if (live && live.source !== "repository")
|
|
190
|
+
t.out(` ${t.paint.gray(`${t.sym.arrow} apply answers 409 until a tenant administrator sets the Definitions to be edited in the repository`)}`);
|
|
191
|
+
t.next(steps);
|
|
192
|
+
t.out();
|
|
193
|
+
}
|
|
194
|
+
// ================================================================== branding and portal
|
|
195
|
+
export async function cmdBranding(ctx, args) {
|
|
196
|
+
const sub = args[0] ?? "status";
|
|
197
|
+
if (sub === "apply")
|
|
198
|
+
return applyParts(ctx, ["branding", "portal"]);
|
|
199
|
+
if (sub !== "status")
|
|
200
|
+
throw new Fail(`“branding ${plain(sub)}” is not a command.`, { hint: `${ctx.cmd} branding, or ${ctx.cmd} branding apply`, code: EXIT.misunderstood });
|
|
201
|
+
const { t } = ctx;
|
|
202
|
+
const src = sources(ctx);
|
|
203
|
+
const pres = await t.busy("Reading the Branding and Portal tabs", () => presentation(ctx));
|
|
204
|
+
const total = [pres.branding, pres.portal].reduce((n, s) => n + (tabRead(s) ? s.differences.length : 0), 0);
|
|
205
|
+
const unread = !tabRead(pres.branding) || !tabRead(pres.portal);
|
|
206
|
+
if (ctx.flags.check && (total || unread))
|
|
207
|
+
ctx.exit = EXIT.failed;
|
|
208
|
+
if (ctx.json)
|
|
209
|
+
return emit(ctx, { branding: withoutStored(pres.branding), portal: withoutStored(pres.portal), differences: total });
|
|
210
|
+
t.banner("Branding and portal", [`stored at ${hostOf(ctx.baseUrl)}`, `next to ${src.label}`]);
|
|
211
|
+
renderTabs(ctx, pres);
|
|
212
|
+
if (!total && !unread)
|
|
213
|
+
t.item("ok", "The stored tabs are what the repository sends.");
|
|
214
|
+
t.next(total
|
|
215
|
+
? [
|
|
216
|
+
[`${ctx.cmd} branding apply`, `make the stored tabs what ${src.label} says`],
|
|
217
|
+
[`${ctx.cmd} pull`, `or take the stored state into ${src.label}`],
|
|
218
|
+
]
|
|
219
|
+
: []);
|
|
220
|
+
t.out();
|
|
221
|
+
}
|
|
222
|
+
export async function cmdPull(ctx) {
|
|
223
|
+
const { t, flags } = ctx;
|
|
224
|
+
needTenantApi(ctx, "nothing to pull.");
|
|
225
|
+
const src = sources(ctx);
|
|
226
|
+
const pres = await t.busy("Reading the Branding and Portal tabs", () => presentation(ctx));
|
|
227
|
+
const branding = pres.branding;
|
|
228
|
+
const portal = pres.portal;
|
|
229
|
+
if (!tabRead(branding))
|
|
230
|
+
throw new Fail(`The branding could not be read: ${branding.error.replace(/^not read: /, "")}.`);
|
|
231
|
+
if (!tabRead(portal))
|
|
232
|
+
throw new Fail(`The portal could not be read: ${portal.error.replace(/^not read: /, "")}.`);
|
|
233
|
+
const total = branding.differences.length + portal.differences.length;
|
|
234
|
+
const strip = withoutStored;
|
|
235
|
+
if (!ctx.json) {
|
|
236
|
+
t.banner("Pull", [`stored at ${hostOf(ctx.baseUrl)}`, `into ${src.label}`]);
|
|
237
|
+
renderTabs(ctx, pres);
|
|
238
|
+
}
|
|
239
|
+
if (!total || !src.write) {
|
|
240
|
+
if (ctx.json)
|
|
241
|
+
return emit(ctx, { branding: strip(branding), portal: strip(portal), written: [] });
|
|
242
|
+
if (!src.write && total)
|
|
243
|
+
t.callout("info", "Copy these into the repository's files by hand", [`This repository's configuration has no way to write ${src.label}.`]);
|
|
244
|
+
else
|
|
245
|
+
t.item("ok", "Nothing to take in.");
|
|
246
|
+
t.out();
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
let write = flags.write === true || flags.yes === true;
|
|
250
|
+
if (!write && !flags["dry-run"] && !ctx.json)
|
|
251
|
+
write = (await t.confirm(`Write the stored state into ${src.label}? It replaces what is there.`, false)) === true;
|
|
252
|
+
if (!write) {
|
|
253
|
+
if (ctx.json)
|
|
254
|
+
return emit(ctx, { branding: strip(branding), portal: strip(portal), written: [] });
|
|
255
|
+
t.next([[`${ctx.cmd} pull --write`, `write the stored state into ${src.label}`]]);
|
|
256
|
+
t.out();
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const written = src.write({ branding: branding.stored, portal: portal.stored });
|
|
260
|
+
if (ctx.json)
|
|
261
|
+
return emit(ctx, { branding: strip(branding), portal: strip(portal), written });
|
|
262
|
+
for (const f of written)
|
|
263
|
+
t.item("ok", `Wrote ${f}`);
|
|
264
|
+
t.out(` ${t.paint.gray(`${t.sym.arrow} Review the diff${src.afterWrite ? `, then run ${src.afterWrite}` : ""}.`)}`);
|
|
265
|
+
t.out();
|
|
266
|
+
}
|
|
267
|
+
// ================================================================== apply
|
|
268
|
+
export async function cmdApply(ctx, args) {
|
|
269
|
+
const named = args.map((a) => a.toLowerCase());
|
|
270
|
+
const known = ["definitions", "branding", "portal"];
|
|
271
|
+
const unknown = named.filter((a) => !known.includes(a));
|
|
272
|
+
if (unknown.length)
|
|
273
|
+
throw new Fail(`“apply ${plain(unknown[0])}”: apply sends definitions, branding and portal.`, { hint: `${ctx.cmd} apply, or ${ctx.cmd} apply definitions`, code: EXIT.misunderstood });
|
|
274
|
+
return applyParts(ctx, (named.length ? named : known));
|
|
275
|
+
}
|
|
276
|
+
/** Sends the parts named, as the server start does, and shows each outcome. Exits 1 when one is refused or not sent. */
|
|
277
|
+
export async function applyParts(ctx, parts) {
|
|
278
|
+
const { t } = ctx;
|
|
279
|
+
needTenantApi(ctx, "nothing sent.");
|
|
280
|
+
const src = sources(ctx);
|
|
281
|
+
const want = new Set(parts);
|
|
282
|
+
const notes = [];
|
|
283
|
+
const log = {
|
|
284
|
+
info: (m, d) => notes.push({ level: "info", message: m, detail: d }),
|
|
285
|
+
warn: (m, d) => notes.push({ level: "warn", message: m, detail: d }),
|
|
286
|
+
error: (m, d) => notes.push({ level: "error", message: m, detail: d }),
|
|
287
|
+
};
|
|
288
|
+
const set = want.has("definitions") ? readSource(() => src.definitions()) : null;
|
|
289
|
+
const branding = want.has("branding") ? readSource(() => src.branding()) : null;
|
|
290
|
+
const portal = want.has("portal") ? readSource(() => src.portal()) : null;
|
|
291
|
+
const drops = branding?.value ? themeDrops(branding.value.theme) : [];
|
|
292
|
+
const [d, b, p] = await t.busy(`Sending to ${hostOf(ctx.baseUrl)}`, () => Promise.all([
|
|
293
|
+
set?.value ? call(ctx, (fetch, cfg) => applyDefinitions({ ...cfg, set: set.value, fetch, log })) : null,
|
|
294
|
+
branding?.value ? call(ctx, (fetch, cfg) => applyBranding({ ...cfg, branding: branding.value, fetch, log })) : null,
|
|
295
|
+
portal?.value ? call(ctx, (fetch, cfg) => applyPortal({ ...cfg, portal: portal.value, fetch, log })) : null,
|
|
296
|
+
]));
|
|
297
|
+
const outcome = (r, read) => {
|
|
298
|
+
if (!r)
|
|
299
|
+
return { status: "error", message: read?.error ?? "not read" };
|
|
300
|
+
if (!r.ok)
|
|
301
|
+
return { status: "error", message: r.message, http: r.status };
|
|
302
|
+
const v = r.value;
|
|
303
|
+
if (v.status === "error")
|
|
304
|
+
return { ...v, message: r.network || v.message, http: r.status };
|
|
305
|
+
return v;
|
|
306
|
+
};
|
|
307
|
+
const results = {};
|
|
308
|
+
if (set)
|
|
309
|
+
results.definitions = outcome(d, set);
|
|
310
|
+
if (branding)
|
|
311
|
+
results.branding = outcome(b, branding);
|
|
312
|
+
if (portal)
|
|
313
|
+
results.portal = outcome(p, portal);
|
|
314
|
+
const bad = Object.values(results).some((r) => r.status === "error" || r.status === "refused");
|
|
315
|
+
ctx.exit = bad ? EXIT.failed : EXIT.done;
|
|
316
|
+
if (ctx.json)
|
|
317
|
+
return emit(ctx, { ...results, ...(drops.length ? { theme_dropped: drops } : {}) });
|
|
318
|
+
const order = ["definitions", "branding", "portal"].filter((x) => want.has(x));
|
|
319
|
+
const what = order.length === 3 ? "Apply" : `Apply ${order.length === 1 ? order[0] : `${order.slice(0, -1).join(", ")} and ${order[order.length - 1]}`}`;
|
|
320
|
+
t.banner(what, [`from ${src.label}`, `to ${hostOf(ctx.baseUrl)}`]);
|
|
321
|
+
const tone = { applied: "ok", unchanged: "ok", waiting: "warn", refused: "fail", error: "fail" };
|
|
322
|
+
const why = (r, scope) => {
|
|
323
|
+
if (r.http === 409)
|
|
324
|
+
return `${plain(r.message)} ${t.sym.dot} still edited in the Admin UI: a tenant administrator hands it to the repository`;
|
|
325
|
+
if (r.http === 404)
|
|
326
|
+
return `${plain(r.message)} ${t.sym.dot} the key lacks the scope “${scope}”`;
|
|
327
|
+
return plain(r.message);
|
|
328
|
+
};
|
|
329
|
+
const rd = results.definitions;
|
|
330
|
+
if (rd) {
|
|
331
|
+
const changes = (s) => (s ? ` ${t.sym.dot} ${plural(s.changes, "change")}` : "");
|
|
332
|
+
const text = {
|
|
333
|
+
applied: `applied ${t.sym.dot} revision ${rd.revision}${changes(rd.summary)}`,
|
|
334
|
+
unchanged: `unchanged ${t.sym.dot} revision ${rd.revision}`,
|
|
335
|
+
waiting: rd.reverted_in ? `waits: an administrator reverted it in revision ${rd.reverted_in}` : `waits for a tenant administrator's approval${rd.summary ? ` ${t.sym.dot} ${plural(rd.summary.unsafe, "change")} ${rd.summary.unsafe === 1 ? "touches" : "touch"} existing data` : ""}`,
|
|
336
|
+
refused: "refused",
|
|
337
|
+
error: `not sent ${t.sym.dot} ${why(rd, "definitions")}`,
|
|
338
|
+
};
|
|
339
|
+
t.item(tone[rd.status] ?? "info", `${t.paint.bold("Definitions".padEnd(12))} ${text[rd.status] ?? plain(rd.status)}`);
|
|
340
|
+
if (rd.status === "waiting" && rd.approve_url)
|
|
341
|
+
t.out(` ${t.paint.gray("approve at")} ${t.link(plain(rd.approve_url), rd.approve_url)}`);
|
|
342
|
+
if (rd.status === "waiting" && rd.reverted_in)
|
|
343
|
+
t.out(` ${t.paint.gray("revert the same change in the repository, or have the waiting plan approved")}`);
|
|
344
|
+
if ((rd.status === "applied" || rd.status === "waiting") && rd.changes?.length) {
|
|
345
|
+
const shownChanges = rd.changes.slice(0, 20);
|
|
346
|
+
t.table(shownChanges, [
|
|
347
|
+
{ label: "Address", value: (c) => c.address, paint: (x) => t.paint.bold(x) },
|
|
348
|
+
{ label: "Change", value: (c) => String(c.change).replace(/_/g, " "), flex: true, min: 12 },
|
|
349
|
+
...(shownChanges.some((c) => c.in_use?.length) ? [{ label: "In use", value: (c) => (c.in_use?.length ? String(c.in_use.reduce((n, u) => n + u.count, 0)) : ""), align: "right", paint: (x) => t.paint.gray(x) }] : []),
|
|
350
|
+
{ label: "Safe", value: (c) => (c.safe ? t.sym.ok : t.sym.warn), paint: (x) => (x === t.sym.ok ? t.paint.green(x) : t.paint.yellow(x)) },
|
|
351
|
+
], { indent: 6 });
|
|
352
|
+
if (rd.changes.length > shownChanges.length)
|
|
353
|
+
t.out(` ${t.paint.gray(`and ${rd.changes.length - shownChanges.length} more (--json lists them all)`)}`);
|
|
354
|
+
}
|
|
355
|
+
for (const reason of rd.reasons ?? [])
|
|
356
|
+
t.out(` ${t.paint.red(t.sym.bullet)} ${reason.address ? `${t.paint.bold(plain(reason.address))} ` : ""}${plain(reason.reason)}`);
|
|
357
|
+
for (const w of rd.warnings ?? [])
|
|
358
|
+
t.out(` ${t.paint.yellow(t.sym.bullet)} ${w.address ? `${t.paint.bold(plain(w.address))} ` : ""}${plain(w.reason)}`);
|
|
359
|
+
}
|
|
360
|
+
for (const [tab, label] of [
|
|
361
|
+
["branding", "Branding"],
|
|
362
|
+
["portal", "Portal"],
|
|
363
|
+
]) {
|
|
364
|
+
const r = results[tab];
|
|
365
|
+
if (!r)
|
|
366
|
+
continue;
|
|
367
|
+
t.item(tone[r.status] ?? "info", `${t.paint.bold(label.padEnd(12))} ${r.status === "error" ? `not sent ${t.sym.dot} ${why(r, tab)}` : plain(r.status)}`);
|
|
368
|
+
for (const pr of r.problems ?? [])
|
|
369
|
+
t.out(` ${t.paint.red(t.sym.bullet)} ${t.paint.bold((pr.path ?? []).join("."))} ${plain(pr.message)}`);
|
|
370
|
+
if (r.kept?.length)
|
|
371
|
+
t.out(` ${t.paint.gray(`${r.kept.join(", ")} ${r.kept.length === 1 ? "stays" : "stay"} where an administrator moved ${r.kept.length === 1 ? "it" : "them"}: leave ${r.kept.length === 1 ? "it" : "them"} out of ${src.files.portal}`)}`);
|
|
372
|
+
if (tab === "branding" && drops.length)
|
|
373
|
+
t.out(` ${t.paint.yellow(t.sym.warn)} ${t.paint.gray(`the Engine drops ${drops.map((x) => `theme.${x}`).join(", ")}: not in the theme reference`)}`);
|
|
374
|
+
}
|
|
375
|
+
if (bad) {
|
|
376
|
+
t.out();
|
|
377
|
+
t.item("fail", t.paint.bold("Not everything was applied."), "nothing above was retried");
|
|
378
|
+
}
|
|
379
|
+
t.out();
|
|
380
|
+
}
|
|
381
|
+
/** The branding's images the portal refuses, and how many it sends inline: for `doctor`. */
|
|
382
|
+
export function brandingFileCheck(value) {
|
|
383
|
+
return {
|
|
384
|
+
problems: brandingImageProblems(value),
|
|
385
|
+
drops: themeDrops(value.theme),
|
|
386
|
+
images: imagePaths().filter((p) => p.reduce((o, k) => o?.[k], value) !== undefined).length,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** The command line as a module, for tests and for the local page: `run(argv, options)` answers the exit code. */
|
|
2
|
+
export { COMMAND, COMMANDS, DEFAULT_PREFIX, parseArgs, run, type RunOptions } from "./cli.js";
|
|
3
|
+
export { EXIT, secretIn } from "./context.js";
|
|
4
|
+
export { bundle, type Finding } from "./feedback.js";
|
|
5
|
+
export { promptOf } from "./changesets.js";
|
|
6
|
+
export { createUiHandler, uiAction, type UiAction, type UiRequest, type UiResponse } from "./ui.js";
|
|
7
|
+
export { plain } from "./terminal.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** The command line as a module, for tests and for the local page: `run(argv, options)` answers the exit code. */
|
|
2
|
+
export { COMMAND, COMMANDS, DEFAULT_PREFIX, parseArgs, run } from "./cli.js";
|
|
3
|
+
export { EXIT, secretIn } from "./context.js";
|
|
4
|
+
export { bundle } from "./feedback.js";
|
|
5
|
+
export { promptOf } from "./changesets.js";
|
|
6
|
+
export { createUiHandler, uiAction } from "./ui.js";
|
|
7
|
+
export { plain } from "./terminal.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAmB,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAkD,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Ctx } from "./context.js";
|
|
2
|
+
export declare function cmdStatus(ctx: Ctx): Promise<void>;
|
|
3
|
+
export declare function cmdDoctor(ctx: Ctx): Promise<void>;
|
|
4
|
+
export declare function cmdEngine(ctx: Ctx): Promise<void>;
|
|
5
|
+
export declare function cmdKey(ctx: Ctx): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=overview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../src/cli/overview.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,GAAG,EAA4H,MAAM,cAAc,CAAC;AAyBnL,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,iBAuIvC;AAID,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,iBAoGvC;AAID,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,iBA2BvC;AAID,wBAAsB,MAAM,CAAC,GAAG,EAAE,GAAG,iBAkCpC"}
|