aweshare 0.3.4 → 0.3.6

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.
@@ -1,4 +1,8 @@
1
1
  #!/usr/bin/env node
2
+ // Command set: init, join, config (path|show|edit), doctor, start, grant,
3
+ // revoke, list. `config init` remains as a hidden redirect to `init`.
4
+ // Everything that talks to the hub goes through src/hub.ts (one UA, one
5
+ // timeout policy, one error shape).
2
6
  import { spawn } from 'node:child_process';
3
7
  import { existsSync, readFileSync } from 'node:fs';
4
8
  import { join } from 'node:path';
@@ -7,38 +11,95 @@ import pino from 'pino';
7
11
  import { agentDir, applyJoinToConfig, CONFIG_TEMPLATE, loadAgentConfig, redactConfig, SECRETS_TEMPLATE, writeFileAtomic, } from './config.js';
8
12
  import { AgentConnection } from './connection.js';
9
13
  import { runDoctor } from './doctor.js';
14
+ import { assertWireCompatible, errorMessage, hostIsLocal, plainHttpHost, probeHub, producerApi, redeemInvite, } from './hub.js';
10
15
  import { renderGrants } from './table.js';
11
16
  const VERSION = JSON.parse(readFileSync(new URL('../../../package.json', import.meta.url), 'utf8')).version;
12
- const USAGE = `aweshare agent share local/authorized AI capacity through an aweshare hub
17
+ // One-liners only; flags per command live in their own -h, everything else in README.
18
+ const USAGE = `Usage: aweshare agent [OPTIONS] COMMAND [ARGS]...
13
19
 
14
- Usage: aweshare agent <command>
20
+ Share local/authorized AI capacity through an aweshare hub.
15
21
 
16
- Onboarding:
17
- init [--hub URL] [--token asp_...] write config template + empty secrets
18
- join --hub URL --code asi_... [--name NAME] [--email EMAIL]
19
- redeem an invite into a producer token
20
- (unbound codes ask for --name/--email)
22
+ Options:
23
+ -v, --version Show the version and exit.
24
+ -h, --help Show this message and exit.
21
25
 
22
- Config:
23
- config path print config path
24
- config show show config with secrets redacted
25
- config edit open config in $VISUAL, $EDITOR or vi
26
- config init write config template + empty secrets
26
+ Commands:
27
+ init Write the config template and empty secrets.
28
+ join Redeem an invite code into a producer token.
29
+ config Show or edit the config (path | show | edit).
30
+ doctor Pre-flight checks: config, backends, hub.
31
+ start Connect, register offerings, relay requests.
32
+ grant Allow a consumer to call your offering.
33
+ revoke Remove a grant.
34
+ list List grants for your namespace.`;
35
+ const COMMAND_HELP = {
36
+ init: `Usage: aweshare agent init [OPTIONS]
27
37
 
28
- Run:
29
- start connect, register offerings, relay
30
- doctor pre-flight checks (direct replay first, hub last)
38
+ Write the config template and empty secrets (kept if they exist).
31
39
 
32
- Grants:
33
- grant --alias ALIAS --consumer NAME [--expires-in 7d|12h|30m|90s]
34
- allow a consumer to call your offering
35
- revoke --alias ALIAS --consumer NAME remove a grant
36
- list [--json] list grants for your namespace
40
+ Options:
41
+ --hub URL Pre-fill the hub URL in the template.
42
+ --token ASP Pre-fill a producer token (asp_...) in the template.
43
+ -h, --help Show this message and exit.`,
44
+ join: `Usage: aweshare agent join [OPTIONS]
37
45
 
38
- --json on list prints the raw API response instead of a table.
46
+ Redeem an invite code into a producer token and write the config.
47
+ Probes the hub first (reachable, a real hub, wire-compatible) — the code
48
+ only burns after the probe passes.
39
49
 
40
- Environment:
41
- AWESHARE_AGENT_DIR config directory (default ~/.aweshare)`;
50
+ Options:
51
+ --hub URL The hub to join (required, http(s) URL).
52
+ --code CODE The invite code from the hub operator (asi_..., required).
53
+ --name NAME Your producer name (unbound codes only — bound ones ignore it).
54
+ --email EMAIL Your contact email (unbound codes only).
55
+ --allow-http Proceed with a plain-HTTP hub outside your LAN (the producer
56
+ token would cross the network unencrypted).
57
+ -h, --help Show this message and exit.`,
58
+ config: `Usage: aweshare agent config [COMMAND]
59
+
60
+ Show or edit the config (default: path).
61
+
62
+ Commands:
63
+ path Print the config path.
64
+ show Show the config with secrets redacted.
65
+ edit Open the config in $VISUAL, $EDITOR or vi.`,
66
+ doctor: `Usage: aweshare agent doctor
67
+
68
+ Pre-flight checks: config validity, backend reachability, hub connectivity.
69
+
70
+ Options:
71
+ -h, --help Show this message and exit.`,
72
+ start: `Usage: aweshare agent start
73
+
74
+ Connect to the hub, register offerings, relay requests (runs in the foreground).
75
+
76
+ Options:
77
+ -h, --help Show this message and exit.`,
78
+ grant: `Usage: aweshare agent grant [OPTIONS]
79
+
80
+ Allow a consumer to call your offering.
81
+
82
+ Options:
83
+ --alias ALIAS The offering alias, e.g. your-name/model (required).
84
+ --consumer NAME Who may call it (required).
85
+ --expires-in D Optional expiry: 90s, 30m, 12h or 7d.
86
+ -h, --help Show this message and exit.`,
87
+ revoke: `Usage: aweshare agent revoke [OPTIONS]
88
+
89
+ Remove a grant.
90
+
91
+ Options:
92
+ --alias ALIAS The offering alias (required).
93
+ --consumer NAME Whose grant to remove (required).
94
+ -h, --help Show this message and exit.`,
95
+ list: `Usage: aweshare agent list [OPTIONS]
96
+
97
+ List grants for your namespace.
98
+
99
+ Options:
100
+ --json Print the raw API response instead of a table.
101
+ -h, --help Show this message and exit.`,
102
+ };
42
103
  function parseFlags(argv) {
43
104
  const positional = [];
44
105
  const flags = new Map();
@@ -66,13 +127,11 @@ function fail(message) {
66
127
  console.error(`error: ${message}`);
67
128
  process.exit(1);
68
129
  }
69
- /** Node fetch reports "fetch failed" without the reason; surface the cause. */
70
- function errorMessage(err) {
71
- if (err instanceof Error) {
72
- const cause = err.cause;
73
- return cause ? `${err.message} (${cause.code ?? cause.message})` : err.message;
74
- }
75
- return String(err);
130
+ /** Only `config` takes a positional (its subcommand); every other command is flags-only. */
131
+ function noPositionals(cmd, positional) {
132
+ const arg = positional[0];
133
+ if (arg)
134
+ fail(`unexpected argument '${arg}' — this command takes flags only (see: aweshare agent ${cmd} -h)`);
76
135
  }
77
136
  /** Parse a human duration like 90s, 30m, 12h, 7d into milliseconds. */
78
137
  function parseDuration(raw) {
@@ -82,6 +141,170 @@ function parseDuration(raw) {
82
141
  const unit = { s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 }[m[2]];
83
142
  return Number(m[1]) * unit;
84
143
  }
144
+ // --- commands (one function each; hub errors bubble to main's catch) ---
145
+ async function runInit(flags, dir) {
146
+ const configPath = join(dir, 'config.toml');
147
+ const secretsPath = join(dir, 'secrets.json');
148
+ if (!existsSync(configPath)) {
149
+ let template = CONFIG_TEMPLATE;
150
+ if (flags.get('hub')) {
151
+ template = template.replace('hubUrl = "http://127.0.0.1:8787"', `hubUrl = "${flags.get('hub')}"`);
152
+ }
153
+ if (flags.get('token')) {
154
+ template = template.replace('token = "asp_PASTE_PRODUCER_TOKEN"', `token = "${flags.get('token')}"`);
155
+ }
156
+ writeFileAtomic(configPath, template, 0o600);
157
+ console.log(`wrote ${configPath}`);
158
+ }
159
+ else {
160
+ console.log(`exists, kept: ${configPath}`);
161
+ }
162
+ if (!existsSync(secretsPath)) {
163
+ writeFileAtomic(secretsPath, SECRETS_TEMPLATE, 0o600);
164
+ console.log(`wrote ${secretsPath}`);
165
+ }
166
+ else {
167
+ console.log(`exists, kept: ${secretsPath}`);
168
+ }
169
+ console.log('\nnext steps:');
170
+ console.log(' 1. edit config.toml: backends + offerings (namespace must be your producer name)');
171
+ console.log(' 2. put upstream keys in secrets.json (they never leave this machine)');
172
+ console.log(' 3. aweshare agent doctor # find the first failing link');
173
+ console.log(' 4. aweshare agent grant --alias YOU/model --consumer NAME');
174
+ console.log(' 5. aweshare agent start');
175
+ }
176
+ /** Refuse silent plain-HTTP pairing with a non-local hub: the producer token
177
+ * would cross the network unencrypted. */
178
+ function guardPlainHttp(hub, flags) {
179
+ const host = plainHttpHost(hub);
180
+ if (host === null || hostIsLocal(host))
181
+ return;
182
+ if (flags.get('allow-http') !== 'true') {
183
+ fail(`${hub} uses plain HTTP — the producer token would cross the network unencrypted\n` +
184
+ 'fix: use an https:// hub URL (e.g. via a Cloudflare tunnel) or an http:// address on your LAN, or pass --allow-http to proceed anyway');
185
+ }
186
+ }
187
+ async function runJoin(flags, dir) {
188
+ const hub = flags.get('hub');
189
+ const code = flags.get('code');
190
+ if (!hub || !/^https?:\/\//.test(hub))
191
+ fail('--hub must be an http(s) URL');
192
+ if (!code || !INVITE_PATTERN.test(code))
193
+ fail('--code must be an invite code (asi_...)');
194
+ guardPlainHttp(hub, flags);
195
+ // Probe before burning the one-time invite; hub errors below carry the fix.
196
+ const info = await probeHub(hub);
197
+ assertWireCompatible(hub, info);
198
+ // --name/--email ride along for unbound codes; bound codes ignore them
199
+ const redeemBody = { code };
200
+ if (flags.get('name'))
201
+ redeemBody.name = flags.get('name');
202
+ if (flags.get('email'))
203
+ redeemBody.email = flags.get('email');
204
+ const { name, token } = await redeemInvite(hub, redeemBody);
205
+ const configPath = join(dir, 'config.toml');
206
+ const secretsPath = join(dir, 'secrets.json');
207
+ if (!existsSync(configPath)) {
208
+ const filled = applyJoinToConfig(CONFIG_TEMPLATE, hub, token) ?? CONFIG_TEMPLATE;
209
+ writeFileAtomic(configPath, filled, 0o600);
210
+ console.log(`wrote ${configPath}`);
211
+ }
212
+ else {
213
+ const patched = applyJoinToConfig(readFileSync(configPath, 'utf8'), hub, token);
214
+ if (patched === null) {
215
+ // the invite is spent — hand over the token so nothing is lost
216
+ fail(`config exists but has no hubUrl/token lines to patch — edit ${configPath} manually; your producer token: ${token}`);
217
+ }
218
+ writeFileAtomic(configPath, patched, 0o600);
219
+ console.log(`updated ${configPath}`);
220
+ }
221
+ if (!existsSync(secretsPath)) {
222
+ writeFileAtomic(secretsPath, SECRETS_TEMPLATE, 0o600);
223
+ console.log(`wrote ${secretsPath}`);
224
+ }
225
+ const where = info.version ? `hub v${info.version}` : 'hub';
226
+ console.log(`joined ${where} as producer '${name}' (namespace: ${name}/...)`);
227
+ console.log('\nnext steps:');
228
+ console.log(` 1. edit config.toml: backends + offerings (aliases must start with ${name}/)`);
229
+ console.log(' 2. put upstream keys in secrets.json (they never leave this machine)');
230
+ console.log(' 3. aweshare agent doctor # find the first failing link');
231
+ console.log(` 4. aweshare agent grant --alias ${name}/model --consumer NAME`);
232
+ console.log(' 5. aweshare agent start');
233
+ }
234
+ async function runConfig(dir, positional) {
235
+ const sub = positional[0] ?? 'path';
236
+ const configPath = join(dir, 'config.toml');
237
+ const secretsPath = join(dir, 'secrets.json');
238
+ if (sub === 'path') {
239
+ console.log(configPath);
240
+ }
241
+ else if (sub === 'show') {
242
+ if (!existsSync(configPath)) {
243
+ fail(`no config at ${configPath} — run 'aweshare agent init' first`);
244
+ }
245
+ console.log(redactConfig(readFileSync(configPath, 'utf8'), existsSync(secretsPath) ? readFileSync(secretsPath, 'utf8') : undefined));
246
+ }
247
+ else if (sub === 'init') {
248
+ fail(`config init is now 'aweshare agent init' (same behavior, plus --hub/--token pre-fill)`);
249
+ }
250
+ else if (sub === 'edit') {
251
+ if (!existsSync(configPath)) {
252
+ fail(`no config at ${configPath} — run 'aweshare agent init' first`);
253
+ }
254
+ const editor = process.env.VISUAL ?? process.env.EDITOR ?? 'vi';
255
+ const child = spawn(editor, [configPath], { stdio: 'inherit' });
256
+ child.on('exit', (code) => process.exit(code ?? 1));
257
+ return await new Promise(() => { });
258
+ }
259
+ else {
260
+ fail(`unknown config subcommand: ${sub} (expected path, show or edit)`);
261
+ }
262
+ }
263
+ async function printDoctorReport(dir) {
264
+ const report = await runDoctor(dir);
265
+ for (const check of report.checks) {
266
+ console.log(`${check.ok ? ' ok ' : 'FAIL '} ${check.name}: ${check.detail}`);
267
+ }
268
+ console.log(report.ok ? '\ndoctor: all green' : '\ndoctor: fix the first FAIL above, then re-run');
269
+ process.exitCode = report.ok ? 0 : 1;
270
+ }
271
+ async function runStart(dir) {
272
+ const { config, secrets } = loadAgentConfig(dir);
273
+ const connection = new AgentConnection({
274
+ config,
275
+ secrets,
276
+ log: pino({ level: process.env.AWESHARE_LOG ?? 'info' }),
277
+ });
278
+ const shutdown = () => {
279
+ console.error('\nshutting down…');
280
+ void connection.stop().then(() => process.exit(0));
281
+ };
282
+ process.on('SIGINT', shutdown);
283
+ process.on('SIGTERM', shutdown);
284
+ await connection.start();
285
+ }
286
+ async function runGrants(cmd, flags) {
287
+ const { config } = loadAgentConfig(agentDir());
288
+ const api = producerApi(config.hubUrl, config.token);
289
+ if (cmd === 'grant' || cmd === 'revoke') {
290
+ const alias = flags.get('alias');
291
+ const consumer = flags.get('consumer');
292
+ if (!alias || !consumer)
293
+ fail('--alias and --consumer are required');
294
+ const body = { alias, consumer };
295
+ const expiresIn = flags.get('expires-in');
296
+ if (cmd === 'grant' && expiresIn) {
297
+ body.expiresAt = new Date(Date.now() + parseDuration(expiresIn)).toISOString();
298
+ }
299
+ const data = cmd === 'grant'
300
+ ? await api('PUT', '/admin/v1/grants', body)
301
+ : await api('DELETE', `/admin/v1/grants?alias=${encodeURIComponent(alias)}&consumer=${encodeURIComponent(consumer)}`);
302
+ console.log(JSON.stringify(data));
303
+ return;
304
+ }
305
+ const data = await api('GET', '/admin/v1/grants');
306
+ console.log(flags.get('json') === 'true' ? JSON.stringify(data, null, 2) : renderGrants(data));
307
+ }
85
308
  async function main() {
86
309
  const [cmd, ...rest] = process.argv.slice(2);
87
310
  const { positional, flags } = parseFlags(rest);
@@ -89,202 +312,37 @@ async function main() {
89
312
  console.log(`aweshare agent ${VERSION}`);
90
313
  return;
91
314
  }
92
- if (!cmd || cmd === 'help' || cmd === '--help' || cmd === '-h' || flags.get('help') === 'true') {
315
+ if (!cmd || cmd === 'help' || cmd === '--help' || cmd === '-h') {
93
316
  console.log(USAGE);
94
317
  return;
95
318
  }
319
+ const help = COMMAND_HELP[cmd];
320
+ if (help && (positional.includes('-h') || flags.get('help') === 'true')) {
321
+ console.log(help);
322
+ return;
323
+ }
96
324
  const dir = agentDir();
97
325
  switch (cmd) {
98
- case 'init': {
99
- const configPath = join(dir, 'config.toml');
100
- const secretsPath = join(dir, 'secrets.json');
101
- if (!existsSync(configPath)) {
102
- let template = CONFIG_TEMPLATE;
103
- if (flags.get('hub')) {
104
- template = template.replace('hubUrl = "http://127.0.0.1:8787"', `hubUrl = "${flags.get('hub')}"`);
105
- }
106
- if (flags.get('token')) {
107
- template = template.replace('token = "asp_PASTE_PRODUCER_TOKEN"', `token = "${flags.get('token')}"`);
108
- }
109
- writeFileAtomic(configPath, template, 0o600);
110
- console.log(`wrote ${configPath}`);
111
- }
112
- else {
113
- console.log(`exists, kept: ${configPath}`);
114
- }
115
- if (!existsSync(secretsPath)) {
116
- writeFileAtomic(secretsPath, SECRETS_TEMPLATE, 0o600);
117
- console.log(`wrote ${secretsPath}`);
118
- }
119
- else {
120
- console.log(`exists, kept: ${secretsPath}`);
121
- }
122
- console.log('\nnext steps:');
123
- console.log(' 1. edit config.toml: backends + offerings (namespace must be your producer name)');
124
- console.log(' 2. put upstream keys in secrets.json (they never leave this machine)');
125
- console.log(' 3. aweshare agent doctor # find the first failing link');
126
- console.log(' 4. aweshare agent grant --alias YOU/model --consumer NAME');
127
- console.log(' 5. aweshare agent start');
128
- return;
129
- }
130
- case 'join': {
131
- const hub = flags.get('hub');
132
- const code = flags.get('code');
133
- if (!hub || !/^https?:\/\//.test(hub))
134
- fail('--hub must be an http(s) URL');
135
- if (!code || !INVITE_PATTERN.test(code))
136
- fail('--code must be an invite code (asi_...)');
137
- // --name/--email ride along for unbound codes; bound codes ignore them
138
- const redeemBody = { code };
139
- if (flags.get('name'))
140
- redeemBody.name = flags.get('name');
141
- if (flags.get('email'))
142
- redeemBody.email = flags.get('email');
143
- const res = await fetch(`${hub.replace(/\/+$/, '')}/invites/v1/redeem`, {
144
- method: 'POST',
145
- headers: { 'content-type': 'application/json' },
146
- body: JSON.stringify(redeemBody),
147
- });
148
- const data = (await res.json().catch(() => ({})));
149
- if (!res.ok || !data.name || !data.token) {
150
- fail(`${res.status} ${data.error?.message ?? res.statusText}`);
151
- }
152
- const name = data.name;
153
- const token = data.token;
154
- const configPath = join(dir, 'config.toml');
155
- const secretsPath = join(dir, 'secrets.json');
156
- if (!existsSync(configPath)) {
157
- const filled = applyJoinToConfig(CONFIG_TEMPLATE, hub, token) ?? CONFIG_TEMPLATE;
158
- writeFileAtomic(configPath, filled, 0o600);
159
- console.log(`wrote ${configPath}`);
160
- }
161
- else {
162
- const patched = applyJoinToConfig(readFileSync(configPath, 'utf8'), hub, token);
163
- if (patched === null) {
164
- // the invite is spent — hand over the token so nothing is lost
165
- fail(`config exists but has no hubUrl/token lines to patch — edit ${configPath} manually; your producer token: ${token}`);
166
- }
167
- writeFileAtomic(configPath, patched, 0o600);
168
- console.log(`updated ${configPath}`);
169
- }
170
- if (!existsSync(secretsPath)) {
171
- writeFileAtomic(secretsPath, SECRETS_TEMPLATE, 0o600);
172
- console.log(`wrote ${secretsPath}`);
173
- }
174
- console.log(`joined hub as producer '${name}' (namespace: ${name}/...)`);
175
- console.log('\nnext steps:');
176
- console.log(` 1. edit config.toml: backends + offerings (aliases must start with ${name}/)`);
177
- console.log(' 2. put upstream keys in secrets.json (they never leave this machine)');
178
- console.log(' 3. aweshare agent doctor # find the first failing link');
179
- console.log(` 4. aweshare agent grant --alias ${name}/model --consumer NAME`);
180
- console.log(' 5. aweshare agent start');
181
- return;
182
- }
183
- case 'config': {
184
- const sub = positional[0] ?? 'path';
185
- const configPath = join(dir, 'config.toml');
186
- const secretsPath = join(dir, 'secrets.json');
187
- if (sub === 'path') {
188
- console.log(configPath);
189
- }
190
- else if (sub === 'show') {
191
- if (!existsSync(configPath)) {
192
- fail(`no config at ${configPath} — run 'aweshare agent config init' first`);
193
- }
194
- console.log(redactConfig(readFileSync(configPath, 'utf8'), existsSync(secretsPath) ? readFileSync(secretsPath, 'utf8') : undefined));
195
- }
196
- else if (sub === 'init') {
197
- // same as top-level init: write templates only if missing
198
- if (!existsSync(configPath)) {
199
- writeFileAtomic(configPath, CONFIG_TEMPLATE, 0o600);
200
- console.log(`wrote ${configPath}`);
201
- }
202
- else {
203
- console.log(`exists, kept: ${configPath}`);
204
- }
205
- if (!existsSync(secretsPath)) {
206
- writeFileAtomic(secretsPath, SECRETS_TEMPLATE, 0o600);
207
- console.log(`wrote ${secretsPath}`);
208
- }
209
- else {
210
- console.log(`exists, kept: ${secretsPath}`);
211
- }
212
- }
213
- else if (sub === 'edit') {
214
- if (!existsSync(configPath)) {
215
- fail(`no config at ${configPath} — run 'aweshare agent config init' first`);
216
- }
217
- const editor = process.env.VISUAL ?? process.env.EDITOR ?? 'vi';
218
- const child = spawn(editor, [configPath], { stdio: 'inherit' });
219
- child.on('exit', (code) => process.exit(code ?? 1));
220
- return await new Promise(() => { });
221
- }
222
- else {
223
- fail(`unknown config subcommand: ${sub} (expected path, show, edit or init)`);
224
- }
225
- return;
226
- }
326
+ case 'init':
327
+ noPositionals(cmd, positional);
328
+ return await runInit(flags, dir);
329
+ case 'join':
330
+ noPositionals(cmd, positional);
331
+ return await runJoin(flags, dir);
332
+ case 'config':
333
+ return await runConfig(dir, positional);
227
334
  case 'doctor': {
228
- const report = await runDoctor(dir);
229
- for (const check of report.checks) {
230
- console.log(`${check.ok ? ' ok ' : 'FAIL '} ${check.name}: ${check.detail}`);
231
- }
232
- console.log(report.ok ? '\ndoctor: all green' : '\ndoctor: fix the first FAIL above, then re-run');
233
- process.exitCode = report.ok ? 0 : 1;
234
- return;
235
- }
236
- case 'start': {
237
- const { config, secrets } = loadAgentConfig(dir);
238
- const connection = new AgentConnection({
239
- config,
240
- secrets,
241
- log: pino({ level: process.env.AWESHARE_LOG ?? 'info' }),
242
- });
243
- const shutdown = () => {
244
- console.error('\nshutting down…');
245
- void connection.stop().then(() => process.exit(0));
246
- };
247
- process.on('SIGINT', shutdown);
248
- process.on('SIGTERM', shutdown);
249
- await connection.start();
250
- return;
335
+ noPositionals(cmd, positional);
336
+ return await printDoctorReport(dir);
251
337
  }
338
+ case 'start':
339
+ noPositionals(cmd, positional);
340
+ return await runStart(dir);
252
341
  case 'grant':
253
342
  case 'revoke':
254
- case 'list': {
255
- const { config } = loadAgentConfig(dir);
256
- const base = config.hubUrl;
257
- const auth = { authorization: `Bearer ${config.token}`, 'content-type': 'application/json' };
258
- if (cmd === 'grant' || cmd === 'revoke') {
259
- const alias = flags.get('alias');
260
- const consumer = flags.get('consumer');
261
- if (!alias || !consumer)
262
- fail('--alias and --consumer are required');
263
- const body = { alias, consumer };
264
- const expiresIn = flags.get('expires-in');
265
- if (cmd === 'grant' && expiresIn) {
266
- body.expiresAt = new Date(Date.now() + parseDuration(expiresIn)).toISOString();
267
- }
268
- const res = cmd === 'grant'
269
- ? await fetch(`${base}/admin/v1/grants`, {
270
- method: 'PUT',
271
- headers: auth,
272
- body: JSON.stringify(body),
273
- })
274
- : await fetch(`${base}/admin/v1/grants?alias=${encodeURIComponent(alias)}&consumer=${encodeURIComponent(consumer)}`, { method: 'DELETE', headers: auth });
275
- const data = (await res.json().catch(() => ({})));
276
- if (!res.ok)
277
- fail(`${res.status} ${data.error?.message ?? res.statusText}`);
278
- console.log(JSON.stringify(data));
279
- return;
280
- }
281
- const res = await fetch(`${base}/admin/v1/grants`, { headers: auth });
282
- const data = (await res.json().catch(() => ({})));
283
- if (!res.ok)
284
- fail(`${res.status} ${data.error?.message ?? res.statusText}`);
285
- console.log(flags.get('json') === 'true' ? JSON.stringify(data, null, 2) : renderGrants(data));
286
- return;
287
- }
343
+ case 'list':
344
+ noPositionals(cmd, positional);
345
+ return await runGrants(cmd, flags);
288
346
  default:
289
347
  fail(`unknown command: ${cmd}\n\n${USAGE}`);
290
348
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import pino, {} from 'pino';
3
3
  import { WebSocket } from 'ws';
4
4
  import { buildUpstreamRequest } from './adapters.js';
5
5
  import { classifyStatus, HealthGate } from './health.js';
6
+ import { USER_AGENT } from './hub.js';
6
7
  const RECONNECT_BASE_MS = 1500;
7
8
  const RECONNECT_MAX_MS = 15_000;
8
9
  const HEARTBEAT_INTERVAL_MS = 15_000;
@@ -200,7 +201,7 @@ export class AgentConnection {
200
201
  const wsUrl = `${config.hubUrl.replace(/^http/, 'ws')}/ws/v1/producer`;
201
202
  return new Promise((resolve) => {
202
203
  const ws = new WebSocket(wsUrl, {
203
- headers: { authorization: `Bearer ${config.token}` },
204
+ headers: { authorization: `Bearer ${config.token}`, 'user-agent': USER_AGENT },
204
205
  maxPayload: 256 * 1024,
205
206
  });
206
207
  this.ws = ws;