111 lines
3.0 KiB
TypeScript
111 lines
3.0 KiB
TypeScript
#!/usr/bin/env bun
|
|
/**
|
|
* CLI entry point for auth-runtime.
|
|
*
|
|
* Commands:
|
|
* token → {"token":"st_xxx"}
|
|
* session → {"accessToken":"...","expiresIn":900}
|
|
* client-config → {"clientId":"...","metadata":{...}}
|
|
* request <METHOD> <path> [options] → {"status":200,"body":"..."}
|
|
*
|
|
* Options for `request`:
|
|
* --body '{"key":"value"}' Request body (JSON string)
|
|
* --api-base URL Override API base URL
|
|
*
|
|
* JSON output to stdout, errors to stderr, exit code 0/1.
|
|
*/
|
|
|
|
import { createSkillClient } from './index.js';
|
|
|
|
function fatal(msg: string): never {
|
|
console.error(msg);
|
|
process.exit(1);
|
|
}
|
|
|
|
function usage(): never {
|
|
fatal(
|
|
'Usage:\n' +
|
|
' auth-rt token\n' +
|
|
' auth-rt session\n' +
|
|
' auth-rt client-config\n' +
|
|
' auth-rt request <METHOD> <path> [--body JSON] [--api-base URL]',
|
|
);
|
|
}
|
|
|
|
async function main() {
|
|
const args = process.argv.slice(2);
|
|
if (args.length === 0) usage();
|
|
|
|
const command = args[0];
|
|
|
|
if (command === 'token') {
|
|
const client = createSkillClient();
|
|
const session = await client.session();
|
|
console.log(JSON.stringify({ token: session.accessToken }));
|
|
return;
|
|
}
|
|
|
|
if (command === 'session') {
|
|
const client = createSkillClient();
|
|
const session = await client.session();
|
|
console.log(JSON.stringify(session));
|
|
return;
|
|
}
|
|
|
|
if (command === 'client-config') {
|
|
const client = createSkillClient();
|
|
const config = await client.clientConfig();
|
|
console.log(JSON.stringify(config));
|
|
return;
|
|
}
|
|
|
|
if (command === 'request') {
|
|
if (args.length < 3) {
|
|
fatal('request requires <METHOD> <path>');
|
|
}
|
|
|
|
const method = args[1].toUpperCase();
|
|
const path = args[2];
|
|
|
|
let body: string | undefined;
|
|
let apiBase: string | undefined;
|
|
|
|
for (let i = 3; i < args.length; i++) {
|
|
if (args[i] === '--body' && i + 1 < args.length) {
|
|
body = args[++i];
|
|
} else if (args[i] === '--api-base' && i + 1 < args.length) {
|
|
apiBase = args[++i];
|
|
}
|
|
}
|
|
|
|
const client = createSkillClient(apiBase ? { apiBase } : undefined);
|
|
|
|
const validMethods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD'] as const;
|
|
if (!validMethods.includes(method as any)) {
|
|
fatal(`Invalid method: ${method}`);
|
|
}
|
|
|
|
const parsedBody = body ? JSON.parse(body) : undefined;
|
|
|
|
let result;
|
|
switch (method) {
|
|
case 'GET': result = await client.get(path); break;
|
|
case 'POST': result = await client.post(path, parsedBody); break;
|
|
case 'PUT': result = await client.put(path, parsedBody); break;
|
|
case 'PATCH': result = await client.patch(path, parsedBody); break;
|
|
case 'DELETE': result = await client.delete(path, parsedBody); break;
|
|
default: fatal(`Unsupported method: ${method}`);
|
|
}
|
|
|
|
console.log(JSON.stringify(result));
|
|
return;
|
|
}
|
|
|
|
fatal(`Unknown command: ${command}`);
|
|
}
|
|
|
|
main().catch((err) => {
|
|
console.error(String(err?.message || err));
|
|
process.exit(1);
|
|
});
|