@antasphere/chassis-cli 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.
Files changed (117) hide show
  1. package/LICENSE +82 -0
  2. package/dist/commands/auth.d.ts +6 -0
  3. package/dist/commands/auth.d.ts.map +1 -0
  4. package/dist/commands/auth.js +582 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/completion.d.ts +5 -0
  7. package/dist/commands/completion.d.ts.map +1 -0
  8. package/dist/commands/completion.js +85 -0
  9. package/dist/commands/completion.js.map +1 -0
  10. package/dist/commands/demo.d.ts +12 -0
  11. package/dist/commands/demo.d.ts.map +1 -0
  12. package/dist/commands/demo.js +210 -0
  13. package/dist/commands/demo.js.map +1 -0
  14. package/dist/commands/files.d.ts +21 -0
  15. package/dist/commands/files.d.ts.map +1 -0
  16. package/dist/commands/files.js +178 -0
  17. package/dist/commands/files.js.map +1 -0
  18. package/dist/commands/projects.d.ts +38 -0
  19. package/dist/commands/projects.d.ts.map +1 -0
  20. package/dist/commands/projects.js +386 -0
  21. package/dist/commands/projects.js.map +1 -0
  22. package/dist/commands/teams.d.ts +46 -0
  23. package/dist/commands/teams.d.ts.map +1 -0
  24. package/dist/commands/teams.js +265 -0
  25. package/dist/commands/teams.js.map +1 -0
  26. package/dist/commands/workspaces.d.ts +22 -0
  27. package/dist/commands/workspaces.d.ts.map +1 -0
  28. package/dist/commands/workspaces.js +116 -0
  29. package/dist/commands/workspaces.js.map +1 -0
  30. package/dist/config.d.ts +29 -0
  31. package/dist/config.d.ts.map +1 -0
  32. package/dist/config.js +54 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/context.d.ts +152 -0
  35. package/dist/context.d.ts.map +1 -0
  36. package/dist/context.js +456 -0
  37. package/dist/context.js.map +1 -0
  38. package/dist/identity.d.ts +36 -0
  39. package/dist/identity.d.ts.map +1 -0
  40. package/dist/identity.js +18 -0
  41. package/dist/identity.js.map +1 -0
  42. package/dist/index.d.ts +24 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +31 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/kit.d.ts +46 -0
  47. package/dist/kit.d.ts.map +1 -0
  48. package/dist/kit.js +2 -0
  49. package/dist/kit.js.map +1 -0
  50. package/dist/open.d.ts +27 -0
  51. package/dist/open.d.ts.map +1 -0
  52. package/dist/open.js +45 -0
  53. package/dist/open.js.map +1 -0
  54. package/dist/owner-session.d.ts +34 -0
  55. package/dist/owner-session.d.ts.map +1 -0
  56. package/dist/owner-session.js +106 -0
  57. package/dist/owner-session.js.map +1 -0
  58. package/dist/program.d.ts +5 -0
  59. package/dist/program.d.ts.map +1 -0
  60. package/dist/program.js +150 -0
  61. package/dist/program.js.map +1 -0
  62. package/dist/safe-write.d.ts +46 -0
  63. package/dist/safe-write.d.ts.map +1 -0
  64. package/dist/safe-write.js +127 -0
  65. package/dist/safe-write.js.map +1 -0
  66. package/dist/stdin.d.ts +4 -0
  67. package/dist/stdin.d.ts.map +1 -0
  68. package/dist/stdin.js +36 -0
  69. package/dist/stdin.js.map +1 -0
  70. package/dist/testing/index.d.ts +70 -0
  71. package/dist/testing/index.d.ts.map +1 -0
  72. package/dist/testing/index.js +67 -0
  73. package/dist/testing/index.js.map +1 -0
  74. package/dist/workspace.d.ts +79 -0
  75. package/dist/workspace.d.ts.map +1 -0
  76. package/dist/workspace.js +139 -0
  77. package/dist/workspace.js.map +1 -0
  78. package/package.json +43 -3
  79. package/src/commands/auth.ts +687 -0
  80. package/src/commands/completion.ts +102 -0
  81. package/src/commands/demo.ts +271 -0
  82. package/src/commands/files.ts +197 -0
  83. package/src/commands/projects.ts +460 -0
  84. package/src/commands/teams.ts +320 -0
  85. package/src/commands/workspaces.ts +140 -0
  86. package/src/config.ts +81 -0
  87. package/src/context.ts +616 -0
  88. package/src/identity.ts +48 -0
  89. package/src/index.ts +70 -0
  90. package/src/kit.ts +50 -0
  91. package/src/open.ts +48 -0
  92. package/src/owner-session.ts +152 -0
  93. package/src/program.ts +183 -0
  94. package/src/safe-write.ts +136 -0
  95. package/src/stdin.ts +39 -0
  96. package/src/testing/index.ts +129 -0
  97. package/src/workspace.ts +229 -0
  98. package/test/host/identity.test.ts +229 -0
  99. package/test/host/minimal-host.ts +16 -0
  100. package/test/host/minimal-tool.ts +40 -0
  101. package/test/suite/cli.test.ts +301 -0
  102. package/test/suite/config.test.ts +59 -0
  103. package/test/suite/demo.test.ts +467 -0
  104. package/test/suite/hub-profile-shared.test.ts +123 -0
  105. package/test/suite/login.test.ts +743 -0
  106. package/test/suite/logout.test.ts +247 -0
  107. package/test/suite/migration.test.ts +109 -0
  108. package/test/suite/open.test.ts +59 -0
  109. package/test/suite/profiles.test.ts +380 -0
  110. package/test/suite/projects.test.ts +550 -0
  111. package/test/suite/recovery.test.ts +348 -0
  112. package/test/suite/security.test.ts +199 -0
  113. package/test/suite/signin-fixtures.ts +204 -0
  114. package/test/suite/teams.test.ts +354 -0
  115. package/test/suite/whoami.test.ts +159 -0
  116. package/test/suite/workspace.test.ts +402 -0
  117. package/README.md +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import { type CliIo } from '../context.js';
3
+ import type { CliIdentity } from '../identity.js';
4
+ export declare function registerCompletionCommand(identity: CliIdentity, program: Command, io: CliIo): void;
5
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAiB,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA+ElD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,GAAG,IAAI,CAoBlG"}
@@ -0,0 +1,85 @@
1
+ import { CliUsageError } from '../context.js';
2
+ function commandTree(program) {
3
+ return program.commands
4
+ .filter((c) => !c.name().startsWith('help'))
5
+ .map((c) => ({
6
+ name: c.name(),
7
+ subs: c.commands.map((s) => s.name())
8
+ }));
9
+ }
10
+ function bashScript(bin, tree) {
11
+ const top = tree.map((c) => c.name).join(' ');
12
+ const cases = tree
13
+ .filter((c) => c.subs.length > 0)
14
+ .map((c) => ` ${c.name}) COMPREPLY=( $(compgen -W "${c.subs.join(' ')}" -- "$cur") ); return ;;`)
15
+ .join('\n');
16
+ return `# bash completion for ${bin} — eval "$(${bin} completion bash)"
17
+ _${bin}_completions() {
18
+ local cur prev
19
+ cur="\${COMP_WORDS[COMP_CWORD]}"
20
+ prev="\${COMP_WORDS[1]}"
21
+ if [ "$COMP_CWORD" -eq 1 ]; then
22
+ COMPREPLY=( $(compgen -W "${top}" -- "$cur") )
23
+ return
24
+ fi
25
+ case "$prev" in
26
+ ${cases}
27
+ esac
28
+ }
29
+ complete -F _${bin}_completions ${bin}
30
+ `;
31
+ }
32
+ function zshScript(bin, tree) {
33
+ const top = tree.map((c) => c.name).join(' ');
34
+ const cases = tree
35
+ .filter((c) => c.subs.length > 0)
36
+ .map((c) => ` ${c.name}) compadd ${c.subs.join(' ')} ;;`)
37
+ .join('\n');
38
+ return `#compdef ${bin}
39
+ # zsh completion for ${bin} — eval "$(${bin} completion zsh)"
40
+ _${bin}() {
41
+ if (( CURRENT == 2 )); then
42
+ compadd ${top}
43
+ return
44
+ fi
45
+ case "\${words[2]}" in
46
+ ${cases}
47
+ esac
48
+ }
49
+ compdef _${bin} ${bin}
50
+ `;
51
+ }
52
+ function fishScript(bin, tree) {
53
+ const lines = [
54
+ `# fish completion for ${bin} — ${bin} completion fish | source`,
55
+ `complete -c ${bin} -f -n "__fish_use_subcommand" -a "${tree.map((c) => c.name).join(' ')}"`
56
+ ];
57
+ for (const c of tree) {
58
+ if (c.subs.length > 0) {
59
+ lines.push(`complete -c ${bin} -f -n "__fish_seen_subcommand_from ${c.name}" -a "${c.subs.join(' ')}"`);
60
+ }
61
+ }
62
+ return `${lines.join('\n')}\n`;
63
+ }
64
+ export function registerCompletionCommand(identity, program, io) {
65
+ program
66
+ .command('completion <shell>')
67
+ .description('Print a completion script for bash, zsh, or fish')
68
+ .action(async (shell) => {
69
+ const tree = commandTree(program);
70
+ switch (shell) {
71
+ case 'bash':
72
+ io.out.write(bashScript(identity.bin, tree));
73
+ return;
74
+ case 'zsh':
75
+ io.out.write(zshScript(identity.bin, tree));
76
+ return;
77
+ case 'fish':
78
+ io.out.write(fishScript(identity.bin, tree));
79
+ return;
80
+ default:
81
+ throw new CliUsageError(`Unsupported shell "${shell}" — bash, zsh, or fish.`);
82
+ }
83
+ });
84
+ }
85
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Command } from 'commander';
2
+ import { type ChassisClient } from '@antasphere/chassis-sdk';
3
+ import { type CliIo } from '../context.js';
4
+ import type { CliKit } from '../kit.js';
5
+ /**
6
+ * The server's page rule (`isSafeDemoPath`), checked here too so a bad
7
+ * `--path` costs no sign-in: 1 to 2048 characters, one leading `/` (never
8
+ * `//` nor `/\`), no `#`, no space or control character.
9
+ */
10
+ export declare function isSafeDemoPath(path: string): boolean;
11
+ export declare function registerDemoCommands<TClient extends ChassisClient<string>>(kit: CliKit<TClient>, program: Command, io: CliIo): void;
12
+ //# sourceMappingURL=demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE/E,OAAO,EAAkD,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAsExC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQpD;AAgCD,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,aAAa,CAAC,MAAM,CAAC,EACxE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,EACpB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,KAAK,GACR,IAAI,CAmJN"}
@@ -0,0 +1,210 @@
1
+ import { PlatformApiError } from '@antasphere/chassis-sdk';
2
+ import { DEMO_PASS_MAX_MINUTES } from '@antasphere/chassis-contract';
3
+ import { CliApiRefusal, CliUsageError, printJson, table } from '../context.js';
4
+ import { withOwnerSession } from '../owner-session.js';
5
+ /**
6
+ * The demo commands: an owner mints a link that signs one member in without
7
+ * a password, for a demonstration (the demo pass spec, section 8). The
8
+ * routes exist only while the instance's DEMO_SIGN_IN switch is on, on the
9
+ * self-hosted edition, and they refuse every machine credential: these
10
+ * commands sign in as the owner (owner-session.ts) and never send a key.
11
+ *
12
+ * The secret is in the mint's answer only, and leaves this process in one
13
+ * place: inside the links. `--json` is `{ passes: [{ pass, links }], refused }`
14
+ * through `printJson` (the raw sink); every human line goes through the sanitizing sinks the
15
+ * runner installed, since a member's name is somebody else's text.
16
+ */
17
+ /** The instance's unknown-path answer: what all three routes are while the switch is off. */
18
+ const SWITCH_OFF = 'Demo sign-in is off on this instance (DEMO_SIGN_IN), or this is the cloud edition, where demo links are minted at the Antasphere hub.';
19
+ /**
20
+ * The server's refusals of the demo routes. Their sentences are the ones to
21
+ * read, so they reach the runner as worded refusals: its generic hints speak
22
+ * of API keys, and these commands hold none.
23
+ */
24
+ /** The role gate's refusal: the person who signed in is an admin or a member. */
25
+ const NOT_AN_OWNER = 'Only an owner of this workspace manages demo links: the account that signed in is not one.';
26
+ const REFUSALS = new Set([
27
+ 'no_such_member',
28
+ 'owner_target',
29
+ 'demo_address_required',
30
+ 'two_factor_enrolled',
31
+ 'guest_target',
32
+ 'cross_workspace_target',
33
+ 'invalid_demo_path',
34
+ 'sessions_only',
35
+ 'demo_session',
36
+ 'not_found'
37
+ ]);
38
+ /** A refusal about ONE member: the others named on the command are still served. */
39
+ class MemberRefusal extends CliApiRefusal {
40
+ code;
41
+ constructor(message, status, code) {
42
+ super(message, status);
43
+ this.code = code;
44
+ }
45
+ }
46
+ async function explained(run) {
47
+ try {
48
+ return await run();
49
+ }
50
+ catch (e) {
51
+ if (e instanceof PlatformApiError) {
52
+ if (e.status === 404 && e.code === 'not_found' && e.message === 'Not found') {
53
+ throw new CliApiRefusal(SWITCH_OFF, 404);
54
+ }
55
+ // The role gate answers the generic `forbidden`; the runner's hint for
56
+ // a 403 speaks of an API key, which this command never holds.
57
+ if (e.status === 403 && e.code === 'forbidden')
58
+ throw new CliApiRefusal(NOT_AN_OWNER, 403);
59
+ if (REFUSALS.has(e.code))
60
+ throw new MemberRefusal(e.message, e.status, e.code);
61
+ }
62
+ throw e;
63
+ }
64
+ }
65
+ /**
66
+ * The server's page rule (`isSafeDemoPath`), checked here too so a bad
67
+ * `--path` costs no sign-in: 1 to 2048 characters, one leading `/` (never
68
+ * `//` nor `/\`), no `#`, no space or control character.
69
+ */
70
+ export function isSafeDemoPath(path) {
71
+ if (path.length < 1 || path.length > 2048)
72
+ return false;
73
+ if (!path.startsWith('/') || path.startsWith('//') || path.startsWith('/\\'))
74
+ return false;
75
+ for (let i = 0; i < path.length; i++) {
76
+ const code = path.charCodeAt(i);
77
+ if (code < 0x21 || code === 0x7f)
78
+ return false;
79
+ }
80
+ return !path.includes('#');
81
+ }
82
+ /** `--hours` / `--minutes` as the mint's `expiresInMinutes`, or undefined for the server's default. */
83
+ function lifetimeMinutes(opts) {
84
+ if (opts.hours !== undefined && opts.minutes !== undefined) {
85
+ throw new CliUsageError('Pass either --hours or --minutes, not both.');
86
+ }
87
+ const raw = opts.hours ?? opts.minutes;
88
+ if (raw === undefined)
89
+ return undefined;
90
+ const n = /^\d+$/.test(raw) ? Number(raw) : NaN;
91
+ const minutes = opts.hours !== undefined ? n * 60 : n;
92
+ if (!Number.isSafeInteger(minutes) || minutes < 1 || minutes > DEMO_PASS_MAX_MINUTES) {
93
+ throw new CliUsageError(`A demo link lives from one minute to a week (${DEMO_PASS_MAX_MINUTES} minutes): ` +
94
+ `--${opts.hours !== undefined ? 'hours' : 'minutes'} takes a whole number in that range.`);
95
+ }
96
+ return minutes;
97
+ }
98
+ /** The link for one page: the fragment never reaches a server log. */
99
+ function demoLink(baseUrl, secret, path) {
100
+ return `${baseUrl.replace(/\/+$/, '')}/demo#pass=${secret}&to=${encodeURIComponent(path)}`;
101
+ }
102
+ const collect = (value, previous) => [...previous, value];
103
+ export function registerDemoCommands(kit, program, io) {
104
+ const { identity, resolveContext } = kit;
105
+ const prefix = identity.envPrefix;
106
+ const demo = program
107
+ .command('demo')
108
+ .description('Demo links: sign a member in without a password, for a demonstration (owner; DEMO_SIGN_IN on)');
109
+ /** The owner's sign-in flags every demo command carries. */
110
+ const ownerFlags = (cmd) => cmd
111
+ .option('--owner-email <address>', `the owner who signs in (or ${prefix}_OWNER_EMAIL)`)
112
+ .option('--owner-password-stdin', `read the owner's password from the first line of stdin (or ${prefix}_OWNER_PASSWORD)`, false);
113
+ const session = (opts) => ({
114
+ identity,
115
+ ...(opts.ownerEmail !== undefined ? { ownerEmail: opts.ownerEmail } : {}),
116
+ ownerPasswordStdin: opts.ownerPasswordStdin
117
+ });
118
+ // ── demo link ─────────────────────────────────────────────────────────────
119
+ ownerFlags(demo
120
+ .command('link')
121
+ .description('Mint one demo pass per member and print one link per page')
122
+ .requiredOption('--email <address>', 'a member the links sign in (repeatable: one sign-in, one pass per member)', collect, [])
123
+ .option('--path <p>', 'a page the link lands on (repeatable; the first is the default, /)', collect, [])
124
+ .option('--hours <n>', 'how long the link lives, in hours (default: a day; at most a week)')
125
+ .option('--minutes <n>', 'how long the link lives, in minutes (instead of --hours)')).action(async (opts, cmd) => {
126
+ const paths = opts.path.length > 0 ? opts.path : ['/'];
127
+ // Everything the command can refuse by itself, before any sign-in.
128
+ for (const path of paths) {
129
+ if (!isSafeDemoPath(path)) {
130
+ throw new CliUsageError(`--path "${path}" is not a page of this instance: a path starting with a single /, ` +
131
+ 'with no #, no space and no control character, at most 2048 characters.');
132
+ }
133
+ }
134
+ const expiresInMinutes = lifetimeMinutes(opts);
135
+ const ctx = resolveContext(cmd, io);
136
+ // ONE sign-in for every member named: a script that makes the links of
137
+ // a whole demonstration calls the command once. A member the server
138
+ // refuses does not stop the others; the command says who and why, and
139
+ // exits 1.
140
+ const { passes, refused } = await withOwnerSession(ctx, session(opts), async (client) => {
141
+ const passes = [];
142
+ const refused = [];
143
+ for (const email of opts.email) {
144
+ try {
145
+ const minted = await explained(() => client.mintDemoPass({
146
+ email,
147
+ path: paths[0],
148
+ ...(expiresInMinutes !== undefined ? { expiresInMinutes } : {})
149
+ }));
150
+ passes.push({
151
+ pass: minted.pass,
152
+ links: paths.map((path) => ({ path, url: demoLink(ctx.baseUrl, minted.secret, path) }))
153
+ });
154
+ }
155
+ catch (e) {
156
+ // Anything else (the switch off, the signed-in account not an
157
+ // owner, the network) is the same for everyone: no point going on.
158
+ if (!(e instanceof MemberRefusal))
159
+ throw e;
160
+ refused.push({ email, code: e.code, message: e.message });
161
+ }
162
+ }
163
+ return { passes, refused };
164
+ });
165
+ if (ctx.json) {
166
+ printJson(io, { passes, refused });
167
+ }
168
+ else {
169
+ for (const { pass, links } of passes) {
170
+ io.out.write(`Demo link for ${pass.name} <${pass.email}>, valid until ${pass.expiresAt}:\n` +
171
+ links.map((l) => `${l.url}\n`).join(''));
172
+ }
173
+ }
174
+ if (refused.length > 0) {
175
+ throw new CliApiRefusal(refused.map((r) => `${r.email}: ${r.message}`).join('\n'), refused.length === opts.email.length ? 403 : 207);
176
+ }
177
+ });
178
+ // ── demo list ─────────────────────────────────────────────────────────────
179
+ ownerFlags(demo.command('list').description('List the demo passes of the workspace (newest first)')).action(async (opts, cmd) => {
180
+ const ctx = resolveContext(cmd, io);
181
+ const { passes } = await withOwnerSession(ctx, session(opts), (client) => explained(() => client.demoPasses()));
182
+ if (ctx.json)
183
+ return printJson(io, { passes });
184
+ if (passes.length === 0) {
185
+ io.out.write('No demo passes.\n');
186
+ return;
187
+ }
188
+ io.out.write(table([
189
+ ['ID', 'PERSON', 'PAGE', 'EXPIRES', 'REVOKED', 'LAST USED', 'USES'],
190
+ ...passes.map((p) => [
191
+ p.id,
192
+ p.email,
193
+ p.targetPath,
194
+ p.expiresAt,
195
+ p.revokedAt ?? '-',
196
+ p.lastUsedAt ?? 'never',
197
+ String(p.useCount)
198
+ ])
199
+ ]));
200
+ });
201
+ // ── demo revoke ───────────────────────────────────────────────────────────
202
+ ownerFlags(demo.command('revoke <id>').description('Revoke a demo pass; the sessions it opened end with it')).action(async (id, opts, cmd) => {
203
+ const ctx = resolveContext(cmd, io);
204
+ const pass = await withOwnerSession(ctx, session(opts), (client) => explained(() => client.revokeDemoPass(id)));
205
+ if (ctx.json)
206
+ return printJson(io, pass);
207
+ io.out.write(`Revoked the demo pass ${pass.id} for ${pass.email}. The sessions it opened are signed out.\n`);
208
+ });
209
+ }
210
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Command } from 'commander';
2
+ import { type ChassisClient } from '@antasphere/chassis-sdk';
3
+ import { type CliIo } from '../context.js';
4
+ import type { CliKit } from '../kit.js';
5
+ /**
6
+ * The platform substrate commands inherited from the template: instance
7
+ * discovery, the raw workspace-files surface, and the full export download.
8
+ */
9
+ /**
10
+ * Turn a server-chosen `originalName` into a plain filename, or refuse.
11
+ *
12
+ * The stored name is whatever the uploader (possibly a collaborator, on a
13
+ * shared instance) typed: `../../.bashrc`, `/etc/cron.d/x`, `.npmrc`, and
14
+ * on Windows `..\\..\\x` are all valid under the wire schema. Both POSIX
15
+ * and Windows separators are stripped, then anything that is not an inert
16
+ * plain filename is refused rather than silently rewritten — the caller
17
+ * always has `--out <path>` to name the destination themselves.
18
+ */
19
+ export declare function safeDownloadName(originalName: string): string;
20
+ export declare function registerFileCommands<TClient extends ChassisClient<string>>(kit: CliKit<TClient>, program: Command, io: CliIo): void;
21
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAsC,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGxC;;;GAGG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,aAAa,CAAC,MAAM,CAAC,EACxE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,EACpB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,KAAK,GACR,IAAI,CAqJN"}
@@ -0,0 +1,178 @@
1
+ import { createWriteStream } from 'node:fs';
2
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
3
+ import { basename, resolve, win32 } from 'node:path';
4
+ import { Readable } from 'node:stream';
5
+ import { pipeline } from 'node:stream/promises';
6
+ import { DEFAULT_DOWNLOAD_TIMEOUT_MS, PlatformApiError } from '@antasphere/chassis-sdk';
7
+ import { CliUsageError, fmtBytes, printJson } from '../context.js';
8
+ import { writeContained } from '../safe-write.js';
9
+ /**
10
+ * The platform substrate commands inherited from the template: instance
11
+ * discovery, the raw workspace-files surface, and the full export download.
12
+ */
13
+ /**
14
+ * Turn a server-chosen `originalName` into a plain filename, or refuse.
15
+ *
16
+ * The stored name is whatever the uploader (possibly a collaborator, on a
17
+ * shared instance) typed: `../../.bashrc`, `/etc/cron.d/x`, `.npmrc`, and
18
+ * on Windows `..\\..\\x` are all valid under the wire schema. Both POSIX
19
+ * and Windows separators are stripped, then anything that is not an inert
20
+ * plain filename is refused rather than silently rewritten — the caller
21
+ * always has `--out <path>` to name the destination themselves.
22
+ */
23
+ export function safeDownloadName(originalName) {
24
+ const name = basename(win32.basename(originalName));
25
+ if (name === '' || name === '.' || name === '..' || name.startsWith('.')) {
26
+ throw new CliUsageError(`Refusing to derive a filename from the stored name ${JSON.stringify(originalName)} — ` +
27
+ 'pass --out <path> to choose where it goes.');
28
+ }
29
+ return name;
30
+ }
31
+ export function registerFileCommands(kit, program, io) {
32
+ const { requireApiKey, resolveContext } = kit;
33
+ program
34
+ .command('instance')
35
+ .description('Show instance discovery (public: name, version, auth methods)')
36
+ .action(async (_opts, cmd) => {
37
+ const ctx = resolveContext(cmd, io);
38
+ const info = await ctx.client.instance();
39
+ if (ctx.json)
40
+ return printJson(io, info);
41
+ io.out.write(`${info.name} v${info.version} (${info.edition})\n` +
42
+ ` setup required: ${info.setupRequired}\n` +
43
+ ` auth methods: ${info.auth.methods.join(', ')}\n`);
44
+ });
45
+ program
46
+ .command('export')
47
+ .description(`Download the full workspace export as a zip (key needs ${kit.identity.exportScope})`)
48
+ .option('-o, --out <path>', 'write to this path (defaults to export-<date>.zip)')
49
+ .action(async (opts, cmd) => {
50
+ const ctx = resolveContext(cmd, io);
51
+ await requireApiKey(ctx);
52
+ const res = await ctx.client.downloadExport();
53
+ if (!res.body) {
54
+ throw new Error('The export response carried no body');
55
+ }
56
+ const out = opts.out ?? `export-${new Date().toISOString().slice(0, 10)}.zip`;
57
+ // Stream to disk — exports can be large, never buffer (unlike files
58
+ // download, whose objects are capped by MAX_FILE_SIZE_MB).
59
+ await pipeline(Readable.fromWeb(res.body), createWriteStream(out));
60
+ if (ctx.json)
61
+ return printJson(io, { path: out });
62
+ io.out.write(`Export written to ${out}\n`);
63
+ });
64
+ const files = program.command('files').description('Manage workspace files');
65
+ files
66
+ .command('list')
67
+ .description('List files in the workspace (newest first, cursor-paginated)')
68
+ .option('--cursor <cursor>', 'resume from a previous nextCursor')
69
+ .option('--limit <n>', 'page size (1-100)', (v) => parseInt(v, 10))
70
+ .option('--all', 'follow nextCursor until every page is fetched', false)
71
+ .action(async (opts, cmd) => {
72
+ const ctx = resolveContext(cmd, io);
73
+ await requireApiKey(ctx);
74
+ const params = {};
75
+ if (opts.cursor)
76
+ params.cursor = opts.cursor;
77
+ if (opts.limit !== undefined)
78
+ params.limit = opts.limit;
79
+ const first = await ctx.client.files(params);
80
+ const rows = [...first.files];
81
+ if (opts.all) {
82
+ let cursor = first.nextCursor;
83
+ while (cursor) {
84
+ const page = await ctx.client.files({ ...params, cursor });
85
+ rows.push(...page.files);
86
+ cursor = page.nextCursor;
87
+ }
88
+ }
89
+ const nextCursor = opts.all ? null : first.nextCursor;
90
+ // The wire shape, so scripts can thread nextCursor (--all drains it to null).
91
+ if (ctx.json)
92
+ return printJson(io, { files: rows, nextCursor });
93
+ if (rows.length === 0) {
94
+ io.out.write('No files.\n');
95
+ return;
96
+ }
97
+ for (const f of rows) {
98
+ io.out.write(`${f.id} ${fmtBytes(f.sizeBytes).padStart(9)} ${f.originalName}\n`);
99
+ }
100
+ if (nextCursor) {
101
+ io.out.write(`More available: rerun with --cursor ${nextCursor} or --all\n`);
102
+ }
103
+ });
104
+ files
105
+ .command('upload <path>')
106
+ .description('Upload a local file')
107
+ .option('--name <name>', 'stored file name (defaults to the local basename)')
108
+ .option('--content-type <type>', 'content type', 'application/octet-stream')
109
+ .action(async (path, opts, cmd) => {
110
+ const ctx = resolveContext(cmd, io);
111
+ await requireApiKey(ctx);
112
+ const bytes = await readFile(path);
113
+ const name = opts.name ?? basename(path);
114
+ const result = await ctx.client.uploadFile(name, new Uint8Array(bytes), opts.contentType);
115
+ if (ctx.json)
116
+ return printJson(io, result);
117
+ io.out.write(`Uploaded ${result.file.originalName} (${fmtBytes(result.file.sizeBytes)})` +
118
+ `${result.deduplicated ? ' [deduplicated]' : ''}\n id: ${result.file.id}\n`);
119
+ });
120
+ files
121
+ .command('download <id>')
122
+ .description('Download a file by id')
123
+ .option('--out <path>', 'write to this exact path (your path, used verbatim)')
124
+ .option('--dir <path>', 'directory to write the stored name into (default: .)')
125
+ .action(async (id, opts, cmd) => {
126
+ const ctx = resolveContext(cmd, io);
127
+ const apiKey = await requireApiKey(ctx);
128
+ if (opts.out && opts.dir) {
129
+ throw new CliUsageError('Pass either --out <path> or --dir <path>, not both.');
130
+ }
131
+ const meta = await ctx.client.file(id);
132
+ const fetchImpl = io.fetch ?? globalThis.fetch.bind(globalThis);
133
+ const res = await fetchImpl(ctx.client.fileContentUrl(id), {
134
+ // This one bypasses the SDK, so it carries the SDK's headers itself:
135
+ // the key, and the selected workspace (a download follows it too).
136
+ headers: {
137
+ authorization: `Bearer ${apiKey}`,
138
+ ...(ctx.workspaceId !== undefined ? { 'x-workspace-id': ctx.workspaceId } : {})
139
+ },
140
+ // …and the SDK's deadline.
141
+ signal: AbortSignal.timeout(DEFAULT_DOWNLOAD_TIMEOUT_MS)
142
+ });
143
+ if (!res.ok) {
144
+ throw new PlatformApiError(res.status, 'download_failed', `Download failed with ${res.status}`);
145
+ }
146
+ const buf = Buffer.from(await res.arrayBuffer());
147
+ let out;
148
+ if (opts.out) {
149
+ // The caller typed this path — honour it verbatim.
150
+ out = opts.out;
151
+ await writeFile(out, buf);
152
+ }
153
+ else {
154
+ // `originalName` is SERVER-controlled and unconstrained beyond
155
+ // 1-255 chars: it may be `../../.ssh/authorized_keys` or an
156
+ // absolute path. Never join it — take its basename, refuse the
157
+ // names that are not a plain filename, and write it contained
158
+ // inside the chosen directory (symlinks refused, mode forced).
159
+ const dir = resolve(opts.dir ?? '.');
160
+ const name = safeDownloadName(meta.originalName);
161
+ await mkdir(dir, { recursive: true });
162
+ out = await writeContained(dir, name, buf);
163
+ }
164
+ io.out.write(`Downloaded ${meta.originalName} → ${out} (${fmtBytes(buf.length)})\n`);
165
+ });
166
+ files
167
+ .command('rm <id>')
168
+ .description('Delete a file by id')
169
+ .action(async (id, _opts, cmd) => {
170
+ const ctx = resolveContext(cmd, io);
171
+ await requireApiKey(ctx);
172
+ await ctx.client.deleteFile(id);
173
+ if (ctx.json)
174
+ return printJson(io, { deleted: id });
175
+ io.out.write(`Deleted ${id}\n`);
176
+ });
177
+ }
178
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"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"}