@brass-build/cli 0.1.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/AGENTS.md +170 -0
- package/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +172 -0
- package/dist/api.d.ts +73 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +97 -0
- package/dist/api.js.map +1 -0
- package/dist/args.d.ts +10 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +94 -0
- package/dist/args.js.map +1 -0
- package/dist/auth.d.ts +5 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +12 -0
- package/dist/auth.js.map +1 -0
- package/dist/bin/brass.d.ts +3 -0
- package/dist/bin/brass.d.ts.map +1 -0
- package/dist/bin/brass.js +11 -0
- package/dist/bin/brass.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +364 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +94 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +559 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +76 -0
- package/dist/config.js.map +1 -0
- package/dist/log.d.ts +9 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +32 -0
- package/dist/log.js.map +1 -0
- package/dist/login.d.ts +21 -0
- package/dist/login.d.ts.map +1 -0
- package/dist/login.js +158 -0
- package/dist/login.js.map +1 -0
- package/dist/project.d.ts +32 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +129 -0
- package/dist/project.js.map +1 -0
- package/dist/session.d.ts +47 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +224 -0
- package/dist/session.js.map +1 -0
- package/dist/store.d.ts +17 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +90 -0
- package/dist/store.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +42 -0
- package/src/api.ts +195 -0
- package/src/args.ts +107 -0
- package/src/auth.ts +16 -0
- package/src/bin/brass.ts +11 -0
- package/src/cli.ts +422 -0
- package/src/commands.ts +864 -0
- package/src/config.ts +132 -0
- package/src/log.ts +41 -0
- package/src/login.ts +211 -0
- package/src/project.ts +176 -0
- package/src/session.ts +319 -0
- package/src/store.ts +123 -0
- package/src/version.ts +8 -0
package/dist/args.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC5C;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAI5D"}
|
package/dist/auth.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// How a command authenticates each request. Two kinds resolve to the same
|
|
2
|
+
// interface so `BrassApi` is agnostic: a service token is a static bearer;
|
|
3
|
+
// a login session refreshes a short-lived access token on demand (see
|
|
4
|
+
// `sessionAuth` in session.ts). The provider returns the exact headers to
|
|
5
|
+
// merge onto a data-API request.
|
|
6
|
+
// A service token (`brass_sk_...`) is presented verbatim as the bearer.
|
|
7
|
+
export function serviceTokenAuth(token) {
|
|
8
|
+
return {
|
|
9
|
+
headers: () => Promise.resolve({ authorization: `Bearer ${token}` }),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,sEAAsE;AACtE,0EAA0E;AAC1E,iCAAiC;AAMjC,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brass.d.ts","sourceRoot":"","sources":["../../src/bin/brass.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { run } from '../cli.js';
|
|
3
|
+
run(process.argv.slice(2))
|
|
4
|
+
.then((code) => {
|
|
5
|
+
process.exitCode = code;
|
|
6
|
+
})
|
|
7
|
+
.catch((err) => {
|
|
8
|
+
process.stderr.write(`error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
9
|
+
process.exitCode = 1;
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=brass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brass.js","sourceRoot":"","sources":["../../src/bin/brass.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;IACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,CAAC;AA2CnB,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0DlE"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
// Argv dispatch: resolve the target environment + credential, build the API
|
|
2
|
+
// client, and route to a command. Kept thin over `commands.ts` (which holds
|
|
3
|
+
// the workflow logic) so the wiring here is easy to read end to end.
|
|
4
|
+
import { parseArgs, stringFlag, boolFlag, unknownFlags, valuelessFlags, } from './args.js';
|
|
5
|
+
import { resolveOrigins, resolveCredential, profileForOrigins, } from './config.js';
|
|
6
|
+
import { readCredentialsFile, readPendingLogin, writeStoredCredential } from './store.js';
|
|
7
|
+
import { BrassApi, BrassApiError } from './api.js';
|
|
8
|
+
import { serviceTokenAuth } from './auth.js';
|
|
9
|
+
import { loginDevice, sessionAuth } from './session.js';
|
|
10
|
+
import { loginStart, loginCheck } from './login.js';
|
|
11
|
+
import { createLogger } from './log.js';
|
|
12
|
+
import { publish, schemaPull, agentsPull, whoami, status, } from './commands.js';
|
|
13
|
+
import { readProjectState, resolveAppId, readManifest } from './project.js';
|
|
14
|
+
import { VERSION } from './version.js';
|
|
15
|
+
export { VERSION };
|
|
16
|
+
const USAGE = `brass ${VERSION} - publish Brass apps and pull schemas
|
|
17
|
+
|
|
18
|
+
Usage:
|
|
19
|
+
brass login Sign in with your browser (opens the approval page; approve, done).
|
|
20
|
+
brass login --start Start a sign-in and exit: prints the approval URL + code to relay.
|
|
21
|
+
Resumes the code already waiting; --new forces a fresh one.
|
|
22
|
+
brass login --check Check a started sign-in once; stores the session when approved.
|
|
23
|
+
--wait [seconds] polls until approved (default 120s), renewing
|
|
24
|
+
an expired code in place and printing the new one.
|
|
25
|
+
brass logout Forget the stored sign-in for this environment.
|
|
26
|
+
brass status [dir] Report the credential + app state and the one command to run next.
|
|
27
|
+
brass publish [dir] Build output in [dir] (default: dist) is deployed to the app's hosting.
|
|
28
|
+
brass schema pull --doc <docId> [--out brass-app.json]
|
|
29
|
+
Fetch a document's schema and write it into a manifest, verbatim.
|
|
30
|
+
brass agents pull [--out AGENTS.md | --stdout] [--org <organizationId>]
|
|
31
|
+
Write your organization's agent instructions (its
|
|
32
|
+
AGENTS.md / CLAUDE.md) to a file, or --stdout to print
|
|
33
|
+
them (an agent reads them inline). Needs 'brass login';
|
|
34
|
+
--org is optional when you belong to one organization.
|
|
35
|
+
brass whoami Verify the current credential authenticates.
|
|
36
|
+
|
|
37
|
+
Authentication:
|
|
38
|
+
Run 'brass login' to sign in with your browser (needed for schema pull),
|
|
39
|
+
or set BRASS_SERVICE_TOKEN to a service token minted in the dashboard
|
|
40
|
+
(org Settings -> Service tokens) for CI, or pass --token <token>.
|
|
41
|
+
|
|
42
|
+
Common flags:
|
|
43
|
+
--token <token> Service token to authenticate with.
|
|
44
|
+
--json Emit the machine-readable result on stdout.
|
|
45
|
+
|
|
46
|
+
Publish flags:
|
|
47
|
+
--app <appId> Publish to a specific app (else .brass/project.json / BRASS_APP_ID).
|
|
48
|
+
--name <name> Name for the app when creating one on first publish.
|
|
49
|
+
--org <organizationId> Organization to own a newly created app (a signed-in user defaults to their own org; a service token to the token's org).
|
|
50
|
+
--client-token <key> Stable key that makes a first create idempotent (else brass-app.json "client_token").
|
|
51
|
+
--slug <slug> Preferred hosting subdomain on first enable.
|
|
52
|
+
--visibility <v> Set the app's visibility (private | invitee_visible | public).
|
|
53
|
+
--gate <on|off> Set the hosted load gate (on = audience-gated, off = world-loadable).
|
|
54
|
+
--manifest <path> Served manifest to read a create name from (default: brass-app.json).
|
|
55
|
+
`;
|
|
56
|
+
export async function run(argv) {
|
|
57
|
+
const parsed = parseArgs(argv);
|
|
58
|
+
const command = parsed.positionals[0];
|
|
59
|
+
if (boolFlag(parsed, 'version') && command === undefined) {
|
|
60
|
+
process.stdout.write(`${VERSION}\n`);
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
if (command === undefined || boolFlag(parsed, 'help') || command === 'help') {
|
|
64
|
+
process.stdout.write(USAGE);
|
|
65
|
+
return command === undefined && !boolFlag(parsed, 'help') ? 1 : 0;
|
|
66
|
+
}
|
|
67
|
+
// Checked after --help / --version so a caller reaching for usage still gets
|
|
68
|
+
// it, and before any command runs so an unrecognised flag never reaches a
|
|
69
|
+
// request. Ignoring one would silently target production, since that is what
|
|
70
|
+
// the origin flags default to.
|
|
71
|
+
const unknown = unknownFlags(parsed);
|
|
72
|
+
if (unknown.length > 0) {
|
|
73
|
+
const names = unknown.map((n) => `--${n}`).join(', ');
|
|
74
|
+
process.stderr.write(`error: unknown ${unknown.length === 1 ? 'flag' : 'flags'} ${names}\n\n${USAGE}`);
|
|
75
|
+
return 1;
|
|
76
|
+
}
|
|
77
|
+
const json = boolFlag(parsed, 'json');
|
|
78
|
+
const log = createLogger(json);
|
|
79
|
+
try {
|
|
80
|
+
// login / logout run before any credential is required (login is how
|
|
81
|
+
// one is obtained); everything else needs a resolved credential.
|
|
82
|
+
if (command === 'login')
|
|
83
|
+
return await runLogin(parsed, log);
|
|
84
|
+
if (command === 'logout')
|
|
85
|
+
return await runLogout(parsed, log);
|
|
86
|
+
// status runs before a credential is required: reporting "no credential"
|
|
87
|
+
// (and the next step to obtain one) is a first-class outcome, not an error.
|
|
88
|
+
if (command === 'status')
|
|
89
|
+
return await runStatus(parsed, log);
|
|
90
|
+
const ctx = await buildContext(parsed);
|
|
91
|
+
switch (command) {
|
|
92
|
+
case 'publish':
|
|
93
|
+
log.result(await runPublish(ctx, parsed));
|
|
94
|
+
return 0;
|
|
95
|
+
case 'schema':
|
|
96
|
+
log.result(await runSchema(ctx, parsed));
|
|
97
|
+
return 0;
|
|
98
|
+
case 'agents':
|
|
99
|
+
log.result(await runAgents(ctx, parsed));
|
|
100
|
+
return 0;
|
|
101
|
+
case 'whoami':
|
|
102
|
+
log.result(await whoami(ctx));
|
|
103
|
+
return 0;
|
|
104
|
+
default:
|
|
105
|
+
process.stderr.write(`Unknown command "${command}".\n\n${USAGE}`);
|
|
106
|
+
return 1;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
process.stderr.write(`${formatError(err)}\n`);
|
|
111
|
+
return 1;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// The flags that name the target stack. Production is the default, so every
|
|
115
|
+
// other stack is reached through these.
|
|
116
|
+
const ORIGIN_FLAGS = ['api-url', 'auth-url', 'dashboard-url'];
|
|
117
|
+
// Resolve the target origins + profile from the origin flags, shared by every
|
|
118
|
+
// command (login and the credential-bearing ones).
|
|
119
|
+
function resolveBase(parsed) {
|
|
120
|
+
const valueless = valuelessFlags(parsed, ORIGIN_FLAGS);
|
|
121
|
+
if (valueless.length > 0) {
|
|
122
|
+
throw new Error(`Missing value for ${valueless.map((name) => `--${name}`).join(', ')}`);
|
|
123
|
+
}
|
|
124
|
+
const overrides = {};
|
|
125
|
+
const apiUrl = stringFlag(parsed, 'api-url');
|
|
126
|
+
if (apiUrl !== undefined)
|
|
127
|
+
overrides.apiBaseUrl = apiUrl;
|
|
128
|
+
const authUrl = stringFlag(parsed, 'auth-url');
|
|
129
|
+
if (authUrl !== undefined)
|
|
130
|
+
overrides.authBaseUrl = authUrl;
|
|
131
|
+
const dashUrl = stringFlag(parsed, 'dashboard-url');
|
|
132
|
+
if (dashUrl !== undefined)
|
|
133
|
+
overrides.dashboardBaseUrl = dashUrl;
|
|
134
|
+
const origins = resolveOrigins(overrides);
|
|
135
|
+
return { origins, profile: profileForOrigins(origins) };
|
|
136
|
+
}
|
|
137
|
+
async function buildContext(parsed) {
|
|
138
|
+
const { origins, profile } = resolveBase(parsed);
|
|
139
|
+
const { auth, credentialKind } = await resolveAuth(parsed, origins, profile);
|
|
140
|
+
return {
|
|
141
|
+
api: new BrassApi(origins.apiBaseUrl, auth),
|
|
142
|
+
cwd: process.cwd(),
|
|
143
|
+
profile,
|
|
144
|
+
credentialKind,
|
|
145
|
+
log: createLogger(boolFlag(parsed, 'json')),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
// Build the request auth from the resolved credential: a service token is a
|
|
149
|
+
// static bearer; a login session refreshes short-lived access tokens. Returns
|
|
150
|
+
// the credential kind alongside, so a create can resolve the owning org from a
|
|
151
|
+
// human's membership but skip the lookup for a service token.
|
|
152
|
+
async function resolveAuth(parsed, origins, profile) {
|
|
153
|
+
const file = await readCredentialsFile();
|
|
154
|
+
const flagToken = stringFlag(parsed, 'token');
|
|
155
|
+
const envToken = process.env['BRASS_SERVICE_TOKEN'];
|
|
156
|
+
const credential = resolveCredential({
|
|
157
|
+
profile,
|
|
158
|
+
...(flagToken !== undefined ? { flagToken } : {}),
|
|
159
|
+
...(envToken !== undefined ? { envToken } : {}),
|
|
160
|
+
...(file !== null ? { file } : {}),
|
|
161
|
+
});
|
|
162
|
+
if (credential === null) {
|
|
163
|
+
throw new Error('No credential. Run `brass login`, or set BRASS_SERVICE_TOKEN (mint one in the dashboard: org Settings -> Service tokens), or pass --token.');
|
|
164
|
+
}
|
|
165
|
+
const auth = credential.kind === 'service'
|
|
166
|
+
? serviceTokenAuth(credential.token)
|
|
167
|
+
: sessionAuth(origins.authBaseUrl, credential.sid);
|
|
168
|
+
return { auth, credentialKind: credential.kind };
|
|
169
|
+
}
|
|
170
|
+
async function runLogin(parsed, log) {
|
|
171
|
+
const { origins, profile } = resolveBase(parsed);
|
|
172
|
+
// The two-phase variant for automation: `--start` mints the grant and
|
|
173
|
+
// exits; `--check` polls it. Plain `brass login` stays the blocking
|
|
174
|
+
// interactive flow.
|
|
175
|
+
const start = boolFlag(parsed, 'start');
|
|
176
|
+
const check = boolFlag(parsed, 'check');
|
|
177
|
+
const waitSeconds = parseWaitFlag(parsed);
|
|
178
|
+
if (start && check)
|
|
179
|
+
throw new Error('Pass one of --start or --check.');
|
|
180
|
+
if (start) {
|
|
181
|
+
const code = await loginStart({
|
|
182
|
+
authBaseUrl: origins.authBaseUrl,
|
|
183
|
+
profile,
|
|
184
|
+
log,
|
|
185
|
+
...(boolFlag(parsed, 'new') ? { force: true } : {}),
|
|
186
|
+
});
|
|
187
|
+
// `--start --wait` is the whole sign-in in one command: relay the code it
|
|
188
|
+
// prints, then it holds for the approval up to the deadline.
|
|
189
|
+
if (code !== 0 || waitSeconds === undefined)
|
|
190
|
+
return code;
|
|
191
|
+
return loginCheck({ profile, log, waitSeconds });
|
|
192
|
+
}
|
|
193
|
+
if (check) {
|
|
194
|
+
return loginCheck({ profile, log, ...(waitSeconds !== undefined ? { waitSeconds } : {}) });
|
|
195
|
+
}
|
|
196
|
+
// The RFC 8628 device grant: open the approval page (code prefilled), print
|
|
197
|
+
// the URL + code as a fallback for a headless box, and poll until approval.
|
|
198
|
+
const result = await loginDevice({ authBaseUrl: origins.authBaseUrl });
|
|
199
|
+
await writeStoredCredential(profile, { session: { sid: result.sessionToken } });
|
|
200
|
+
log.success(result.email ? `Signed in as ${result.email}.` : 'Signed in.');
|
|
201
|
+
log.result({ signed_in: true, ...(result.email !== undefined ? { email: result.email } : {}) });
|
|
202
|
+
return 0;
|
|
203
|
+
}
|
|
204
|
+
async function runLogout(parsed, log) {
|
|
205
|
+
const { profile } = resolveBase(parsed);
|
|
206
|
+
await writeStoredCredential(profile, null);
|
|
207
|
+
log.success('Signed out.');
|
|
208
|
+
log.result({ signed_out: true });
|
|
209
|
+
return 0;
|
|
210
|
+
}
|
|
211
|
+
async function runStatus(parsed, log) {
|
|
212
|
+
const { origins, profile } = resolveBase(parsed);
|
|
213
|
+
// Resolve the credential directly (not via `resolveAuth`, which throws when
|
|
214
|
+
// none is found); a missing credential is a reported state here.
|
|
215
|
+
const file = await readCredentialsFile();
|
|
216
|
+
const flagToken = stringFlag(parsed, 'token');
|
|
217
|
+
const envToken = process.env['BRASS_SERVICE_TOKEN'];
|
|
218
|
+
const credential = resolveCredential({
|
|
219
|
+
profile,
|
|
220
|
+
...(flagToken !== undefined ? { flagToken } : {}),
|
|
221
|
+
...(envToken !== undefined ? { envToken } : {}),
|
|
222
|
+
...(file !== null ? { file } : {}),
|
|
223
|
+
});
|
|
224
|
+
const api = credential === null
|
|
225
|
+
? null
|
|
226
|
+
: new BrassApi(origins.apiBaseUrl, credential.kind === 'service'
|
|
227
|
+
? serviceTokenAuth(credential.token)
|
|
228
|
+
: sessionAuth(origins.authBaseUrl, credential.sid));
|
|
229
|
+
// What `publish` would target: the same app-id and manifest-name resolution
|
|
230
|
+
// it does, so the reported next step matches what actually runs.
|
|
231
|
+
const cwd = process.cwd();
|
|
232
|
+
const dir = parsed.positionals[1] ?? 'dist';
|
|
233
|
+
const state = await readProjectState(cwd);
|
|
234
|
+
const flagApp = stringFlag(parsed, 'app');
|
|
235
|
+
const envApp = process.env['BRASS_APP_ID'];
|
|
236
|
+
const appId = resolveAppId({
|
|
237
|
+
...(flagApp !== undefined ? { flagApp } : {}),
|
|
238
|
+
...(envApp !== undefined ? { envApp } : {}),
|
|
239
|
+
state,
|
|
240
|
+
profile,
|
|
241
|
+
});
|
|
242
|
+
const manifest = await readManifest(stringFlag(parsed, 'manifest') ?? 'brass-app.json');
|
|
243
|
+
const manifestName = typeof manifest?.name === 'string' && manifest.name.trim() !== ''
|
|
244
|
+
? manifest.name.trim()
|
|
245
|
+
: null;
|
|
246
|
+
const pending = await readPendingLogin(profile);
|
|
247
|
+
const result = await status({
|
|
248
|
+
api,
|
|
249
|
+
profile,
|
|
250
|
+
log,
|
|
251
|
+
credential,
|
|
252
|
+
appId,
|
|
253
|
+
manifestName,
|
|
254
|
+
publishDir: dir,
|
|
255
|
+
pendingLogin: pending === null
|
|
256
|
+
? null
|
|
257
|
+
: {
|
|
258
|
+
userCode: pending.userCode,
|
|
259
|
+
verificationUrl: pending.verificationUriComplete ?? pending.verificationUri,
|
|
260
|
+
expiresAt: pending.expiresAt,
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
log.result(result);
|
|
264
|
+
return 0;
|
|
265
|
+
}
|
|
266
|
+
async function runPublish(ctx, parsed) {
|
|
267
|
+
const dir = parsed.positionals[1] ?? 'dist';
|
|
268
|
+
const flagApp = stringFlag(parsed, 'app');
|
|
269
|
+
const envApp = process.env['BRASS_APP_ID'];
|
|
270
|
+
const name = stringFlag(parsed, 'name');
|
|
271
|
+
const org = stringFlag(parsed, 'org');
|
|
272
|
+
const slug = stringFlag(parsed, 'slug');
|
|
273
|
+
const clientToken = stringFlag(parsed, 'client-token');
|
|
274
|
+
const visibility = parseVisibilityFlag(stringFlag(parsed, 'visibility'));
|
|
275
|
+
const requireAccess = parseGateFlag(stringFlag(parsed, 'gate'));
|
|
276
|
+
const state = await readProjectState(ctx.cwd);
|
|
277
|
+
const appId = resolveAppId({
|
|
278
|
+
...(flagApp !== undefined ? { flagApp } : {}),
|
|
279
|
+
...(envApp !== undefined ? { envApp } : {}),
|
|
280
|
+
state,
|
|
281
|
+
profile: ctx.profile,
|
|
282
|
+
});
|
|
283
|
+
return publish(ctx, {
|
|
284
|
+
dir,
|
|
285
|
+
manifestPath: stringFlag(parsed, 'manifest') ?? 'brass-app.json',
|
|
286
|
+
...(appId !== null ? { appId } : {}),
|
|
287
|
+
...(name !== undefined ? { name } : {}),
|
|
288
|
+
...(org !== undefined ? { organizationId: org } : {}),
|
|
289
|
+
...(clientToken !== undefined ? { clientToken } : {}),
|
|
290
|
+
...(slug !== undefined ? { slug } : {}),
|
|
291
|
+
...(visibility !== undefined ? { visibility } : {}),
|
|
292
|
+
...(requireAccess !== undefined ? { requireAccess } : {}),
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
// How long `--wait` holds for the approval: bare `--wait` takes the default,
|
|
296
|
+
// `--wait <seconds>` an explicit bound. Capped so a mistyped value cannot
|
|
297
|
+
// park an automated caller for hours; the grant survives the cap either way,
|
|
298
|
+
// so a second check resumes the same sign-in.
|
|
299
|
+
const DEFAULT_WAIT_SECONDS = 120;
|
|
300
|
+
const MAX_WAIT_SECONDS = 3600;
|
|
301
|
+
function parseWaitFlag(parsed) {
|
|
302
|
+
const raw = parsed.flags['wait'];
|
|
303
|
+
if (raw === undefined)
|
|
304
|
+
return undefined;
|
|
305
|
+
if (raw === true)
|
|
306
|
+
return DEFAULT_WAIT_SECONDS;
|
|
307
|
+
const seconds = Number(raw);
|
|
308
|
+
if (!Number.isInteger(seconds) || seconds <= 0 || seconds > MAX_WAIT_SECONDS) {
|
|
309
|
+
throw new Error(`Invalid --wait "${raw}" (expected whole seconds, 1 to ${MAX_WAIT_SECONDS})`);
|
|
310
|
+
}
|
|
311
|
+
return seconds;
|
|
312
|
+
}
|
|
313
|
+
// Validate `--visibility` against the three reserved values, so a typo is a
|
|
314
|
+
// clear CLI error rather than a server 400 mid-publish.
|
|
315
|
+
function parseVisibilityFlag(value) {
|
|
316
|
+
if (value === undefined)
|
|
317
|
+
return undefined;
|
|
318
|
+
if (value !== 'private' && value !== 'invitee_visible' && value !== 'public') {
|
|
319
|
+
throw new Error(`Invalid --visibility "${value}" (expected private, invitee_visible, or public)`);
|
|
320
|
+
}
|
|
321
|
+
return value;
|
|
322
|
+
}
|
|
323
|
+
// Map `--gate on|off` to the desired load-gate state (on = audience-gated).
|
|
324
|
+
function parseGateFlag(value) {
|
|
325
|
+
if (value === undefined)
|
|
326
|
+
return undefined;
|
|
327
|
+
if (value !== 'on' && value !== 'off') {
|
|
328
|
+
throw new Error(`Invalid --gate "${value}" (expected on or off)`);
|
|
329
|
+
}
|
|
330
|
+
return value === 'on';
|
|
331
|
+
}
|
|
332
|
+
async function runSchema(ctx, parsed) {
|
|
333
|
+
const sub = parsed.positionals[1];
|
|
334
|
+
if (sub === 'pull') {
|
|
335
|
+
const docId = stringFlag(parsed, 'doc');
|
|
336
|
+
if (docId === undefined)
|
|
337
|
+
throw new Error('brass schema pull requires --doc <docId>');
|
|
338
|
+
return schemaPull(ctx, { docId, outPath: stringFlag(parsed, 'out') ?? 'brass-app.json' });
|
|
339
|
+
}
|
|
340
|
+
throw new Error('Usage: brass schema pull --doc <docId> [--out brass-app.json]');
|
|
341
|
+
}
|
|
342
|
+
async function runAgents(ctx, parsed) {
|
|
343
|
+
if (parsed.positionals[1] !== 'pull') {
|
|
344
|
+
throw new Error('Usage: brass agents pull [--out AGENTS.md | --stdout] [--org <organizationId>]');
|
|
345
|
+
}
|
|
346
|
+
const org = stringFlag(parsed, 'org');
|
|
347
|
+
return agentsPull(ctx, {
|
|
348
|
+
outPath: stringFlag(parsed, 'out') ?? 'AGENTS.md',
|
|
349
|
+
...(boolFlag(parsed, 'stdout') ? { stdout: true } : {}),
|
|
350
|
+
...(org !== undefined ? { organizationId: org } : {}),
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
function formatError(err) {
|
|
354
|
+
if (err instanceof BrassApiError) {
|
|
355
|
+
if (err.status === 401) {
|
|
356
|
+
return `error: ${err.message} (the credential was rejected; check BRASS_SERVICE_TOKEN or --token)`;
|
|
357
|
+
}
|
|
358
|
+
return `error: ${err.message}`;
|
|
359
|
+
}
|
|
360
|
+
if (err instanceof Error)
|
|
361
|
+
return `error: ${err.message}`;
|
|
362
|
+
return `error: ${String(err)}`;
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { BrassApi, type AppVisibility } from './api.js';
|
|
2
|
+
import type { Logger } from './log.js';
|
|
3
|
+
import type { Profile, ResolvedCredential } from './config.js';
|
|
4
|
+
export interface CommandContext {
|
|
5
|
+
api: BrassApi;
|
|
6
|
+
cwd: string;
|
|
7
|
+
profile: string;
|
|
8
|
+
credentialKind: CredentialKind;
|
|
9
|
+
log: Logger;
|
|
10
|
+
}
|
|
11
|
+
export interface PublishOptions {
|
|
12
|
+
dir: string;
|
|
13
|
+
appId?: string;
|
|
14
|
+
name?: string;
|
|
15
|
+
organizationId?: string;
|
|
16
|
+
clientToken?: string;
|
|
17
|
+
visibility?: AppVisibility;
|
|
18
|
+
requireAccess?: boolean;
|
|
19
|
+
slug?: string;
|
|
20
|
+
manifestPath: string;
|
|
21
|
+
pollAttempts?: number;
|
|
22
|
+
pollIntervalMs?: number;
|
|
23
|
+
sleep?: (ms: number) => Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export interface PublishResult {
|
|
26
|
+
app_id: string;
|
|
27
|
+
version_id: string;
|
|
28
|
+
url: string | null;
|
|
29
|
+
warnings: string[];
|
|
30
|
+
}
|
|
31
|
+
export declare function publish(ctx: CommandContext, opts: PublishOptions): Promise<PublishResult>;
|
|
32
|
+
export interface SchemaPullOptions {
|
|
33
|
+
docId: string;
|
|
34
|
+
outPath: string;
|
|
35
|
+
}
|
|
36
|
+
export interface SchemaPullResult {
|
|
37
|
+
family: string;
|
|
38
|
+
out_path: string;
|
|
39
|
+
}
|
|
40
|
+
export declare function schemaPull(ctx: CommandContext, opts: SchemaPullOptions): Promise<SchemaPullResult>;
|
|
41
|
+
export interface AgentsPullOptions {
|
|
42
|
+
organizationId?: string;
|
|
43
|
+
outPath: string;
|
|
44
|
+
stdout?: boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface AgentsPullResult {
|
|
47
|
+
organization_id: string;
|
|
48
|
+
out_path: string | null;
|
|
49
|
+
bytes: number;
|
|
50
|
+
empty: boolean;
|
|
51
|
+
}
|
|
52
|
+
export declare function agentsPull(ctx: CommandContext, opts: AgentsPullOptions): Promise<AgentsPullResult>;
|
|
53
|
+
export interface WhoamiResult {
|
|
54
|
+
authenticated: true;
|
|
55
|
+
}
|
|
56
|
+
export declare function whoami(ctx: CommandContext): Promise<WhoamiResult>;
|
|
57
|
+
export type CredentialKind = 'none' | 'service' | 'session';
|
|
58
|
+
export interface StatusInputs {
|
|
59
|
+
api: BrassApi | null;
|
|
60
|
+
profile: Profile;
|
|
61
|
+
log: Logger;
|
|
62
|
+
credential: ResolvedCredential | null;
|
|
63
|
+
appId: string | null;
|
|
64
|
+
manifestName: string | null;
|
|
65
|
+
publishDir: string;
|
|
66
|
+
pendingLogin: {
|
|
67
|
+
userCode: string;
|
|
68
|
+
verificationUrl: string;
|
|
69
|
+
expiresAt: number;
|
|
70
|
+
} | null;
|
|
71
|
+
}
|
|
72
|
+
export interface StatusResult {
|
|
73
|
+
profile: string;
|
|
74
|
+
signed_in: boolean;
|
|
75
|
+
credential: CredentialKind;
|
|
76
|
+
authenticated: boolean | null;
|
|
77
|
+
unverified_reason?: string;
|
|
78
|
+
email: string | null;
|
|
79
|
+
pending_login: {
|
|
80
|
+
user_code: string;
|
|
81
|
+
verification_url: string;
|
|
82
|
+
expires_in_seconds: number;
|
|
83
|
+
} | null;
|
|
84
|
+
app_id: string | null;
|
|
85
|
+
hosting: {
|
|
86
|
+
enabled: boolean;
|
|
87
|
+
deployed: boolean;
|
|
88
|
+
url: string | null;
|
|
89
|
+
} | null;
|
|
90
|
+
ready_to_publish: boolean;
|
|
91
|
+
next: string;
|
|
92
|
+
}
|
|
93
|
+
export declare function status(inp: StatusInputs): Promise<StatusResult>;
|
|
94
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|