@zitadel/cli 0.1.0-alpha.9 → 1.0.0-alpha.20
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 +250 -62
- package/SKILLS.md +221 -37
- package/dist/branding-cygSBPkV.mjs +79 -0
- package/dist/branding-cygSBPkV.mjs.map +1 -0
- package/dist/claim-state-DlfD6Res.mjs +66 -0
- package/dist/claim-state-DlfD6Res.mjs.map +1 -0
- package/dist/commands/apply.mjs +27 -8
- package/dist/commands/apply.mjs.map +1 -1
- package/dist/commands/branding/eject.mjs +104 -0
- package/dist/commands/branding/eject.mjs.map +1 -0
- package/dist/commands/claim.mjs +402 -0
- package/dist/commands/claim.mjs.map +1 -0
- package/dist/commands/doctor.mjs +594 -41
- package/dist/commands/doctor.mjs.map +1 -1
- package/dist/commands/eject.mjs +18 -6
- package/dist/commands/eject.mjs.map +1 -1
- package/dist/commands/logs.mjs +2 -2
- package/dist/commands/plan.mjs +19 -6
- package/dist/commands/plan.mjs.map +1 -1
- package/dist/commands/reset.mjs +2 -2
- package/dist/commands/schemas/list.mjs +146 -0
- package/dist/commands/schemas/list.mjs.map +1 -0
- package/dist/commands/setup.mjs +629 -214
- package/dist/commands/setup.mjs.map +1 -1
- package/dist/commands/start.mjs +4 -4
- package/dist/commands/start.mjs.map +1 -1
- package/dist/commands/status.mjs +52 -13
- package/dist/commands/status.mjs.map +1 -1
- package/dist/commands/stop.mjs +3 -3
- package/dist/commands/stop.mjs.map +1 -1
- package/dist/designs-Ckz18Dpo.mjs +38 -0
- package/dist/designs-Ckz18Dpo.mjs.map +1 -0
- package/dist/{docker-CnGQK3ZK.mjs → docker-DcRGTOJa.mjs} +5 -4
- package/dist/docker-DcRGTOJa.mjs.map +1 -0
- package/dist/environment-rjRVkJjW.mjs +17 -0
- package/dist/environment-rjRVkJjW.mjs.map +1 -0
- package/dist/journey-guidance-BGrOX_gT.mjs +40 -0
- package/dist/journey-guidance-BGrOX_gT.mjs.map +1 -0
- package/dist/oclif-CanO3zdt.mjs +1769 -0
- package/dist/oclif-CanO3zdt.mjs.map +1 -0
- package/dist/{orca-U142Wrau.mjs → orca-BzQIQqzt.mjs} +1663 -303
- package/dist/orca-BzQIQqzt.mjs.map +1 -0
- package/dist/package-manager-DFdLcDx1.mjs +194 -0
- package/dist/package-manager-DFdLcDx1.mjs.map +1 -0
- package/dist/{ports-B09RjuHx.mjs → ports-BM20XIZb.mjs} +25 -20
- package/dist/ports-BM20XIZb.mjs.map +1 -0
- package/dist/{processes-Cw8TO1SY.mjs → processes-DKHPkU8O.mjs} +1 -1
- package/dist/{processes-Cw8TO1SY.mjs.map → processes-DKHPkU8O.mjs.map} +1 -1
- package/dist/{project-Cd0L3PtM.mjs → project-CHhot85s.mjs} +57 -4
- package/dist/project-CHhot85s.mjs.map +1 -0
- package/dist/sync-BBlACKzT.mjs +1633 -0
- package/dist/sync-BBlACKzT.mjs.map +1 -0
- package/dist/user-schema-DTuOsdKE.mjs +91 -0
- package/dist/user-schema-DTuOsdKE.mjs.map +1 -0
- package/oclif.manifest.json +406 -5
- package/package.json +10 -5
- package/dist/docker-CnGQK3ZK.mjs.map +0 -1
- package/dist/docker-guidance-ypN3IM3o.mjs +0 -21
- package/dist/docker-guidance-ypN3IM3o.mjs.map +0 -1
- package/dist/oclif-B7lBzh3R.mjs +0 -808
- package/dist/oclif-B7lBzh3R.mjs.map +0 -1
- package/dist/orca-U142Wrau.mjs.map +0 -1
- package/dist/ports-B09RjuHx.mjs.map +0 -1
- package/dist/project-Cd0L3PtM.mjs.map +0 -1
- package/dist/sync-BojoQm2P.mjs +0 -733
- package/dist/sync-BojoQm2P.mjs.map +0 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { t as BaseCommand } from "../../oclif-CanO3zdt.mjs";
|
|
2
|
+
import { l as readZitadelSecret } from "../../project-CHhot85s.mjs";
|
|
3
|
+
import { t as environmentSchema } from "../../environment-rjRVkJjW.mjs";
|
|
4
|
+
import { cancel, isCancel, select, spinner } from "@clack/prompts";
|
|
5
|
+
import { Flags } from "@oclif/core";
|
|
6
|
+
import { createZitadelClient } from "@zitadel/api/client";
|
|
7
|
+
import { consola as consola$1 } from "consola";
|
|
8
|
+
//#region src/commands/schemas/list.ts
|
|
9
|
+
/**
|
|
10
|
+
* The `schemas list` topic command — inspect the revision history of a
|
|
11
|
+
* user-schema, filtered by `objectType`.
|
|
12
|
+
*
|
|
13
|
+
* Non-interactive: prints one row per revision (newest first) as a JSON payload
|
|
14
|
+
* or a plain-text table. Interactive: renders a `@clack/prompts` `select` menu
|
|
15
|
+
* of the same rows; on selection, fetches the full schema body via
|
|
16
|
+
* `getSchemaById` and pretty-prints it to stdout.
|
|
17
|
+
*/
|
|
18
|
+
var SchemasList = class SchemasList extends BaseCommand {
|
|
19
|
+
static description = "List revisions of a user-schema by objectType.";
|
|
20
|
+
static flags = {
|
|
21
|
+
"object-type": Flags.string({
|
|
22
|
+
char: "t",
|
|
23
|
+
required: true,
|
|
24
|
+
description: "Filter revisions by objectType (e.g. human-user)."
|
|
25
|
+
}),
|
|
26
|
+
environment: Flags.string({
|
|
27
|
+
char: "e",
|
|
28
|
+
description: "Target environment (default: development).",
|
|
29
|
+
options: [...environmentSchema.options]
|
|
30
|
+
})
|
|
31
|
+
};
|
|
32
|
+
async run() {
|
|
33
|
+
const { flags } = await this.parse(SchemasList);
|
|
34
|
+
await this.toMeta(flags);
|
|
35
|
+
const { cwd, source, nonInteractive } = this.meta;
|
|
36
|
+
const secret = await readZitadelSecret(cwd);
|
|
37
|
+
consola$1.info(`Project ${secret.project_id}`);
|
|
38
|
+
consola$1.info(`Server ${source}`);
|
|
39
|
+
const client = createZitadelClient({
|
|
40
|
+
baseUrl: source,
|
|
41
|
+
token: secret.project_secret
|
|
42
|
+
});
|
|
43
|
+
const objectType = flags["object-type"];
|
|
44
|
+
const revisions = [];
|
|
45
|
+
let pageToken;
|
|
46
|
+
do {
|
|
47
|
+
const page = await client.listSchemas({
|
|
48
|
+
project_id: secret.project_id,
|
|
49
|
+
object_type: objectType,
|
|
50
|
+
limit: 100,
|
|
51
|
+
page_token: pageToken
|
|
52
|
+
});
|
|
53
|
+
revisions.push(...page.schemas);
|
|
54
|
+
pageToken = page.next_page_token ?? void 0;
|
|
55
|
+
} while (pageToken);
|
|
56
|
+
const revisionRows = revisions.map((r) => ({
|
|
57
|
+
id: r.id,
|
|
58
|
+
created_at: r.metadata.created_at
|
|
59
|
+
}));
|
|
60
|
+
if (revisions.length === 0) {
|
|
61
|
+
const message = `No revisions found for objectType "${objectType}".`;
|
|
62
|
+
consola$1.warn(message);
|
|
63
|
+
return this.emit({
|
|
64
|
+
status: "ok",
|
|
65
|
+
data: {
|
|
66
|
+
object_type: objectType,
|
|
67
|
+
revisions: [],
|
|
68
|
+
count: 0
|
|
69
|
+
},
|
|
70
|
+
pretty: message
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (nonInteractive) return this.emit({
|
|
74
|
+
status: "ok",
|
|
75
|
+
data: {
|
|
76
|
+
object_type: objectType,
|
|
77
|
+
revisions: revisionRows,
|
|
78
|
+
count: revisions.length
|
|
79
|
+
},
|
|
80
|
+
pretty: renderTable(objectType, revisions)
|
|
81
|
+
});
|
|
82
|
+
const picked = await select({
|
|
83
|
+
message: `Revisions of objectType "${objectType}" (newest first)`,
|
|
84
|
+
options: revisions.map((r, idx) => ({
|
|
85
|
+
value: r.id,
|
|
86
|
+
label: `${r.metadata.created_at} ${r.id}${idx === 0 ? " (latest)" : ""}`
|
|
87
|
+
}))
|
|
88
|
+
});
|
|
89
|
+
if (isCancel(picked)) {
|
|
90
|
+
cancel("No revision selected.");
|
|
91
|
+
return this.emit({
|
|
92
|
+
status: "ok",
|
|
93
|
+
data: {
|
|
94
|
+
object_type: objectType,
|
|
95
|
+
revisions: revisionRows,
|
|
96
|
+
count: revisions.length
|
|
97
|
+
},
|
|
98
|
+
pretty: ""
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const s = spinner();
|
|
102
|
+
s.start(`Loading ${String(picked)}…`);
|
|
103
|
+
const body = await fetchSchemaRevision(client, String(picked));
|
|
104
|
+
s.stop(`Loaded ${String(picked)}`);
|
|
105
|
+
const pretty = JSON.stringify(body, null, 2);
|
|
106
|
+
return this.emit({
|
|
107
|
+
status: "ok",
|
|
108
|
+
data: {
|
|
109
|
+
object_type: objectType,
|
|
110
|
+
revisions: revisionRows,
|
|
111
|
+
selected: {
|
|
112
|
+
id: picked,
|
|
113
|
+
body
|
|
114
|
+
},
|
|
115
|
+
count: revisions.length
|
|
116
|
+
},
|
|
117
|
+
pretty
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Fetch one schema revision body. The id is URL-encoded before it lands in
|
|
123
|
+
* the path: server-allocated ids are opaque today (`sch_…`), but ids can be
|
|
124
|
+
* full URLs when a schema carried an `$id` (the server-seeded defaults do),
|
|
125
|
+
* and an unencoded URL would break the `/schemas/:id` path. Mirrors the
|
|
126
|
+
* encoding the sync engine's schema syncer applies.
|
|
127
|
+
*/
|
|
128
|
+
async function fetchSchemaRevision(client, id) {
|
|
129
|
+
return (await client.getSchemaById(encodeURIComponent(id))).schema;
|
|
130
|
+
}
|
|
131
|
+
function renderTable(objectType, revisions) {
|
|
132
|
+
const header = `Revisions of objectType "${objectType}" (${revisions.length}, newest first)`;
|
|
133
|
+
const idCol = Math.max(2, ...revisions.map((r) => r.id.length));
|
|
134
|
+
const createdCol = Math.max(10, ...revisions.map((r) => r.metadata.created_at.length));
|
|
135
|
+
const rows = revisions.map((r) => `${r.metadata.created_at.padEnd(createdCol)} ${r.id.padEnd(idCol)}`);
|
|
136
|
+
return [
|
|
137
|
+
header,
|
|
138
|
+
`${"created_at".padEnd(createdCol)} ${"id".padEnd(idCol)}`,
|
|
139
|
+
`${"-".repeat(createdCol)} ${"-".repeat(idCol)}`,
|
|
140
|
+
...rows
|
|
141
|
+
].join("\n");
|
|
142
|
+
}
|
|
143
|
+
//#endregion
|
|
144
|
+
export { SchemasList as default, fetchSchemaRevision };
|
|
145
|
+
|
|
146
|
+
//# sourceMappingURL=list.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.mjs","names":[],"sources":["../../../src/commands/schemas/list.ts"],"sourcesContent":["import { cancel, isCancel, select, spinner } from \"@clack/prompts\";\nimport { Flags } from \"@oclif/core\";\nimport { consola } from \"consola\";\n\nimport { createZitadelClient, type ZitadelClient } from \"@zitadel/api/client\";\nimport type {\n GetSchemaById200,\n ListSchemas200SchemasItem,\n} from \"@zitadel/api/generated/model\";\n\nimport { BaseCommand, type JsonEnvelope } from \"../../lib/oclif\";\nimport { environmentSchema } from \"../../lib/environment\";\nimport { readZitadelSecret } from \"../../lib/project\";\n\n/**\n * The `schemas list` topic command — inspect the revision history of a\n * user-schema, filtered by `objectType`.\n *\n * Non-interactive: prints one row per revision (newest first) as a JSON payload\n * or a plain-text table. Interactive: renders a `@clack/prompts` `select` menu\n * of the same rows; on selection, fetches the full schema body via\n * `getSchemaById` and pretty-prints it to stdout.\n */\nexport default class SchemasList extends BaseCommand {\n static override description = \"List revisions of a user-schema by objectType.\";\n static override flags = {\n \"object-type\": Flags.string({\n char: \"t\",\n required: true,\n description: \"Filter revisions by objectType (e.g. human-user).\",\n }),\n environment: Flags.string({\n char: \"e\",\n description: \"Target environment (default: development).\",\n options: [...environmentSchema.options],\n }),\n };\n\n async run(): Promise<JsonEnvelope> {\n const { flags } = await this.parse(SchemasList);\n await this.toMeta(flags);\n const { cwd, source, nonInteractive } = this.meta;\n\n const secret = await readZitadelSecret(cwd);\n consola.info(`Project ${secret.project_id}`);\n consola.info(`Server ${source}`);\n const client = createZitadelClient({\n baseUrl: source,\n token: secret.project_secret,\n });\n\n const objectType = flags[\"object-type\"];\n // The command shows the full revision history, so it drains the\n // cursor-paginated list at the max page size.\n const revisions: ListSchemas200SchemasItem[] = [];\n let pageToken: string | undefined;\n do {\n const page = await client.listSchemas({\n project_id: secret.project_id,\n object_type: objectType,\n limit: 100,\n page_token: pageToken,\n });\n revisions.push(...page.schemas);\n pageToken = page.next_page_token ?? undefined;\n } while (pageToken);\n\n // The envelope's row shape is a contract; project it explicitly so a field\n // added to the API later cannot leak into stdout.\n const revisionRows = revisions.map((r) => ({\n id: r.id,\n created_at: r.metadata.created_at,\n }));\n\n if (revisions.length === 0) {\n const message = `No revisions found for objectType \"${objectType}\".`;\n consola.warn(message);\n return this.emit({\n status: \"ok\",\n data: { object_type: objectType, revisions: [], count: 0 },\n pretty: message,\n });\n }\n\n // Server orders newest-first; the interactive picker inherits that order.\n if (nonInteractive) {\n return this.emit({\n status: \"ok\",\n data: {\n object_type: objectType,\n revisions: revisionRows,\n count: revisions.length,\n },\n pretty: renderTable(objectType, revisions),\n });\n }\n\n const picked = await select({\n message: `Revisions of objectType \"${objectType}\" (newest first)`,\n options: revisions.map((r, idx) => ({\n value: r.id,\n label: `${r.metadata.created_at} ${r.id}${idx === 0 ? \" (latest)\" : \"\"}`,\n })),\n });\n if (isCancel(picked)) {\n cancel(\"No revision selected.\");\n return this.emit({\n status: \"ok\",\n data: { object_type: objectType, revisions: revisionRows, count: revisions.length },\n pretty: \"\",\n });\n }\n\n const s = spinner();\n s.start(`Loading ${String(picked)}…`);\n const body = await fetchSchemaRevision(client, String(picked));\n s.stop(`Loaded ${String(picked)}`);\n\n const pretty = JSON.stringify(body, null, 2);\n\n return this.emit({\n status: \"ok\",\n data: {\n object_type: objectType,\n revisions: revisionRows,\n selected: { id: picked, body },\n count: revisions.length,\n },\n pretty,\n });\n }\n}\n\n/**\n * Fetch one schema revision body. The id is URL-encoded before it lands in\n * the path: server-allocated ids are opaque today (`sch_…`), but ids can be\n * full URLs when a schema carried an `$id` (the server-seeded defaults do),\n * and an unencoded URL would break the `/schemas/:id` path. Mirrors the\n * encoding the sync engine's schema syncer applies.\n */\nexport async function fetchSchemaRevision(client: ZitadelClient, id: string): Promise<unknown> {\n // Flat-by-id: authz resolves the project from RSI; no project_id query.\n // The response is the `{id, schema, metadata}` envelope; the revision body\n // callers want is the customer-authored document inside it.\n const body = (await client.getSchemaById(encodeURIComponent(id))) as GetSchemaById200;\n return body.schema;\n}\n\nfunction renderTable(\n objectType: string,\n revisions: ReadonlyArray<ListSchemas200SchemasItem>,\n): string {\n const header = `Revisions of objectType \"${objectType}\" (${revisions.length}, newest first)`;\n const idCol = Math.max(\"id\".length, ...revisions.map((r) => r.id.length));\n const createdCol = Math.max(\n \"created_at\".length,\n ...revisions.map((r) => r.metadata.created_at.length),\n );\n const rows = revisions.map(\n (r) => `${r.metadata.created_at.padEnd(createdCol)} ${r.id.padEnd(idCol)}`,\n );\n return [\n header,\n `${\"created_at\".padEnd(createdCol)} ${\"id\".padEnd(idCol)}`,\n `${\"-\".repeat(createdCol)} ${\"-\".repeat(idCol)}`,\n ...rows,\n ].join(\"\\n\");\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAuBA,IAAqB,cAArB,MAAqB,oBAAoB,YAAY;CACnD,OAAgB,cAAc;CAC9B,OAAgB,QAAQ;EACtB,eAAe,MAAM,OAAO;GAC1B,MAAM;GACN,UAAU;GACV,aAAa;GACd,CAAC;EACF,aAAa,MAAM,OAAO;GACxB,MAAM;GACN,aAAa;GACb,SAAS,CAAC,GAAG,kBAAkB,QAAQ;GACxC,CAAC;EACH;CAED,MAAM,MAA6B;EACjC,MAAM,EAAE,UAAU,MAAM,KAAK,MAAM,YAAY;AAC/C,QAAM,KAAK,OAAO,MAAM;EACxB,MAAM,EAAE,KAAK,QAAQ,mBAAmB,KAAK;EAE7C,MAAM,SAAS,MAAM,kBAAkB,IAAI;AAC3C,YAAQ,KAAK,aAAa,OAAO,aAAa;AAC9C,YAAQ,KAAK,aAAa,SAAS;EACnC,MAAM,SAAS,oBAAoB;GACjC,SAAS;GACT,OAAO,OAAO;GACf,CAAC;EAEF,MAAM,aAAa,MAAM;EAGzB,MAAM,YAAyC,EAAE;EACjD,IAAI;AACJ,KAAG;GACD,MAAM,OAAO,MAAM,OAAO,YAAY;IACpC,YAAY,OAAO;IACnB,aAAa;IACb,OAAO;IACP,YAAY;IACb,CAAC;AACF,aAAU,KAAK,GAAG,KAAK,QAAQ;AAC/B,eAAY,KAAK,mBAAmB,KAAA;WAC7B;EAIT,MAAM,eAAe,UAAU,KAAK,OAAO;GACzC,IAAI,EAAE;GACN,YAAY,EAAE,SAAS;GACxB,EAAE;AAEH,MAAI,UAAU,WAAW,GAAG;GAC1B,MAAM,UAAU,sCAAsC,WAAW;AACjE,aAAQ,KAAK,QAAQ;AACrB,UAAO,KAAK,KAAK;IACf,QAAQ;IACR,MAAM;KAAE,aAAa;KAAY,WAAW,EAAE;KAAE,OAAO;KAAG;IAC1D,QAAQ;IACT,CAAC;;AAIJ,MAAI,eACF,QAAO,KAAK,KAAK;GACf,QAAQ;GACR,MAAM;IACJ,aAAa;IACb,WAAW;IACX,OAAO,UAAU;IAClB;GACD,QAAQ,YAAY,YAAY,UAAU;GAC3C,CAAC;EAGJ,MAAM,SAAS,MAAM,OAAO;GAC1B,SAAS,4BAA4B,WAAW;GAChD,SAAS,UAAU,KAAK,GAAG,SAAS;IAClC,OAAO,EAAE;IACT,OAAO,GAAG,EAAE,SAAS,WAAW,KAAK,EAAE,KAAK,QAAQ,IAAI,gBAAgB;IACzE,EAAE;GACJ,CAAC;AACF,MAAI,SAAS,OAAO,EAAE;AACpB,UAAO,wBAAwB;AAC/B,UAAO,KAAK,KAAK;IACf,QAAQ;IACR,MAAM;KAAE,aAAa;KAAY,WAAW;KAAc,OAAO,UAAU;KAAQ;IACnF,QAAQ;IACT,CAAC;;EAGJ,MAAM,IAAI,SAAS;AACnB,IAAE,MAAM,WAAW,OAAO,OAAO,CAAC,GAAG;EACrC,MAAM,OAAO,MAAM,oBAAoB,QAAQ,OAAO,OAAO,CAAC;AAC9D,IAAE,KAAK,UAAU,OAAO,OAAO,GAAG;EAElC,MAAM,SAAS,KAAK,UAAU,MAAM,MAAM,EAAE;AAE5C,SAAO,KAAK,KAAK;GACf,QAAQ;GACR,MAAM;IACJ,aAAa;IACb,WAAW;IACX,UAAU;KAAE,IAAI;KAAQ;KAAM;IAC9B,OAAO,UAAU;IAClB;GACD;GACD,CAAC;;;;;;;;;;AAWN,eAAsB,oBAAoB,QAAuB,IAA8B;AAK7F,SAAO,MADa,OAAO,cAAc,mBAAmB,GAAG,CAAC,EACpD;;AAGd,SAAS,YACP,YACA,WACQ;CACR,MAAM,SAAS,4BAA4B,WAAW,KAAK,UAAU,OAAO;CAC5E,MAAM,QAAQ,KAAK,IAAI,GAAa,GAAG,UAAU,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC;CACzE,MAAM,aAAa,KAAK,IACtB,IACA,GAAG,UAAU,KAAK,MAAM,EAAE,SAAS,WAAW,OAAO,CACtD;CACD,MAAM,OAAO,UAAU,KACpB,MAAM,GAAG,EAAE,SAAS,WAAW,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,OAAO,MAAM,GAC1E;AACD,QAAO;EACL;EACA,GAAG,aAAa,OAAO,WAAW,CAAC,IAAI,KAAK,OAAO,MAAM;EACzD,GAAG,IAAI,OAAO,WAAW,CAAC,IAAI,IAAI,OAAO,MAAM;EAC/C,GAAG;EACJ,CAAC,KAAK,KAAK"}
|