@trycadence/cli 0.1.3 → 0.1.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.
- package/dist/cadence +58 -12
- package/package.json +1 -1
package/dist/cadence
CHANGED
|
@@ -1552,6 +1552,7 @@ var knownCommandPaths = [
|
|
|
1552
1552
|
["changesets", "create"],
|
|
1553
1553
|
["changesets", "list"],
|
|
1554
1554
|
["changesets", "get"],
|
|
1555
|
+
["changesets", "context"],
|
|
1555
1556
|
["changesets", "current"],
|
|
1556
1557
|
["changesets", "notes", "get"],
|
|
1557
1558
|
["changesets", "notes", "put"],
|
|
@@ -1977,16 +1978,46 @@ async function readStoredCredential(store, server) {
|
|
|
1977
1978
|
if (!await store.isAvailable()) {
|
|
1978
1979
|
return null;
|
|
1979
1980
|
}
|
|
1980
|
-
const
|
|
1981
|
-
|
|
1981
|
+
for (const key of credentialStoreKeysForServer(server)) {
|
|
1982
|
+
const rawCredential = await store.getCredential(key);
|
|
1983
|
+
if (rawCredential) {
|
|
1984
|
+
return decodeCredential(rawCredential);
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1987
|
+
return null;
|
|
1982
1988
|
}
|
|
1983
|
-
function
|
|
1989
|
+
async function writeStoredCredential(store, server, credential) {
|
|
1990
|
+
await store.setCredential(normalizeServerForCredentialStore(server), encodeCredential(credential));
|
|
1991
|
+
}
|
|
1992
|
+
async function deleteStoredCredential(store, server) {
|
|
1993
|
+
for (const key of credentialStoreKeysForServer(server)) {
|
|
1994
|
+
await store.deleteCredential(key);
|
|
1995
|
+
}
|
|
1996
|
+
}
|
|
1997
|
+
function normalizeServerForCredentialStore(server) {
|
|
1984
1998
|
try {
|
|
1985
1999
|
return new URL(server).toString().replace(/\/$/, "");
|
|
1986
2000
|
} catch {
|
|
1987
2001
|
return server.trim();
|
|
1988
2002
|
}
|
|
1989
2003
|
}
|
|
2004
|
+
function credentialStoreKeysForServer(server) {
|
|
2005
|
+
const keys = [normalizeServerForCredentialStore(server)];
|
|
2006
|
+
const trimmed = server.trim();
|
|
2007
|
+
if (trimmed && !keys.includes(trimmed)) {
|
|
2008
|
+
keys.push(trimmed);
|
|
2009
|
+
}
|
|
2010
|
+
try {
|
|
2011
|
+
const serialized = new URL(trimmed).toString();
|
|
2012
|
+
if (!keys.includes(serialized)) {
|
|
2013
|
+
keys.push(serialized);
|
|
2014
|
+
}
|
|
2015
|
+
} catch {}
|
|
2016
|
+
return keys;
|
|
2017
|
+
}
|
|
2018
|
+
function normalizeServerForCredentialLock(server) {
|
|
2019
|
+
return normalizeServerForCredentialStore(server);
|
|
2020
|
+
}
|
|
1990
2021
|
function credentialRefreshLockPath(config) {
|
|
1991
2022
|
const normalizedServer = normalizeServerForCredentialLock(config.server);
|
|
1992
2023
|
const serverHash = createHash("sha256").update(normalizedServer).digest("hex").slice(0, 24);
|
|
@@ -2112,10 +2143,11 @@ function helpText() {
|
|
|
2112
2143
|
" cadence sessions start --ticket <ticket-id> [--changeset <changeset-id>] [--actor <actor-id>] [--project <project-id>] [--json]",
|
|
2113
2144
|
" cadence sessions end <session-id> --summary <summary> [--project <project-id>] [--json]",
|
|
2114
2145
|
" cadence sessions files <session-id> --file <path> [--file <path>] [--kind <added|modified|deleted|renamed|unknown>] [--changeset <changeset-id>] [--project <project-id>] [--json]",
|
|
2115
|
-
" cadence changesets create --ticket <ticket-id> --branch <branch>
|
|
2146
|
+
" cadence changesets create --ticket <ticket-id> --branch <branch> --base-branch <branch> [--project <project-id>] [--json]",
|
|
2116
2147
|
" cadence intake dismiss <intake-id> --reason <reason> [--project <project-id>] [--json]",
|
|
2117
2148
|
" cadence sessions current [--project <project-id>] [--ticket <ticket-id>] [--changeset <changeset-id>] [--json]",
|
|
2118
2149
|
" cadence changesets current [--branch current|<branch>] [--project <project-id>] [--json]",
|
|
2150
|
+
" cadence changesets context <changeset-id> [--project <project-id>] [--json]",
|
|
2119
2151
|
" cadence changesets get <changeset-id> [--project <project-id>] [--json]",
|
|
2120
2152
|
" cadence changesets list [--project <project-id>] [--ticket <ticket-id>] [--status <status>] [--json]",
|
|
2121
2153
|
" cadence changesets notes get [--changeset <id>|--branch current|<branch>] [--project <project-id>] [--json]",
|
|
@@ -2173,7 +2205,7 @@ async function readFreshAccessToken(config, store, authClient) {
|
|
|
2173
2205
|
const refreshed = await authClient.auth.cli.refresh({
|
|
2174
2206
|
refreshToken: lockedCredential.refreshToken
|
|
2175
2207
|
});
|
|
2176
|
-
await store
|
|
2208
|
+
await writeStoredCredential(store, config.server, refreshed);
|
|
2177
2209
|
return refreshed.accessToken;
|
|
2178
2210
|
} catch (error) {
|
|
2179
2211
|
const recoveredCredential = await readStoredCredential(store, config.server);
|
|
@@ -2189,12 +2221,12 @@ async function readFreshAccessToken(config, store, authClient) {
|
|
|
2189
2221
|
await releaseCredentialRefreshLock(lock);
|
|
2190
2222
|
}
|
|
2191
2223
|
}
|
|
2192
|
-
async function createClient(config, options) {
|
|
2224
|
+
async function createClient(config, options, useStoredCredential = true) {
|
|
2193
2225
|
if (options.client) {
|
|
2194
2226
|
return options.client;
|
|
2195
2227
|
}
|
|
2196
2228
|
const store = getCredentialStore(options);
|
|
2197
|
-
const credential = await readStoredCredential(store, config.server);
|
|
2229
|
+
const credential = useStoredCredential ? await readStoredCredential(store, config.server) : null;
|
|
2198
2230
|
const authClient = createCadenceClient({
|
|
2199
2231
|
baseUrl: config.server,
|
|
2200
2232
|
...options.fetch ? { fetch: options.fetch } : {}
|
|
@@ -2527,7 +2559,7 @@ async function runAuthCommand(parsed, options) {
|
|
|
2527
2559
|
switch (parsed.command.name) {
|
|
2528
2560
|
case "auth.login":
|
|
2529
2561
|
{
|
|
2530
|
-
const client = await createClient(config, options);
|
|
2562
|
+
const client = await createClient(config, options, false);
|
|
2531
2563
|
const challenge = await client.auth.cli.start({
|
|
2532
2564
|
loginBaseUrl: getCliWebBaseUrl(config, parsed, options)
|
|
2533
2565
|
});
|
|
@@ -2561,7 +2593,7 @@ async function runAuthCommand(parsed, options) {
|
|
|
2561
2593
|
if (poll.status === "denied") {
|
|
2562
2594
|
throw new CliError("AUTH_LOGIN_DENIED", "Cadence browser login was denied.");
|
|
2563
2595
|
}
|
|
2564
|
-
await store
|
|
2596
|
+
await writeStoredCredential(store, config.server, poll.credential);
|
|
2565
2597
|
await mergeConfigFile(config.globalConfigPath, { server: config.server });
|
|
2566
2598
|
await writeInteractiveStatus("Cadence CLI login approved. Credential stored.", options);
|
|
2567
2599
|
data = {
|
|
@@ -2590,7 +2622,7 @@ async function runAuthCommand(parsed, options) {
|
|
|
2590
2622
|
break;
|
|
2591
2623
|
case "auth.logout":
|
|
2592
2624
|
await requireCredentialStore(store);
|
|
2593
|
-
await store
|
|
2625
|
+
await deleteStoredCredential(store, config.server);
|
|
2594
2626
|
data = {
|
|
2595
2627
|
server: config.server,
|
|
2596
2628
|
credentialRemoved: true
|
|
@@ -2674,6 +2706,14 @@ async function runReadCommand(parsed, options) {
|
|
|
2674
2706
|
query: await changesetLookupFromOptions(parsed, options)
|
|
2675
2707
|
});
|
|
2676
2708
|
break;
|
|
2709
|
+
case "changesets.context":
|
|
2710
|
+
data = await client.changesets.context({
|
|
2711
|
+
projectId,
|
|
2712
|
+
query: {
|
|
2713
|
+
changesetId: requireArg(parsed, 0, "<changeset-id>")
|
|
2714
|
+
}
|
|
2715
|
+
});
|
|
2716
|
+
break;
|
|
2677
2717
|
case "changesets.list":
|
|
2678
2718
|
data = await client.changesets.list({
|
|
2679
2719
|
projectId,
|
|
@@ -2944,7 +2984,7 @@ async function runIntakeCommand(parsed, options) {
|
|
|
2944
2984
|
changeset: {
|
|
2945
2985
|
ticketId: requireOption(parsed, "ticket"),
|
|
2946
2986
|
branchName: requireOption(parsed, "branch"),
|
|
2947
|
-
baseBranch: parsed
|
|
2987
|
+
baseBranch: requireOption(parsed, "base-branch"),
|
|
2948
2988
|
...parsed.options.session ? { sessionId: parsed.options.session } : {},
|
|
2949
2989
|
...commandMetadata()
|
|
2950
2990
|
}
|
|
@@ -3009,6 +3049,12 @@ function normalizeError(error) {
|
|
|
3009
3049
|
if (error.message === "INTAKE_ALREADY_DECIDED" || error.message.includes("INTAKE_ALREADY_DECIDED")) {
|
|
3010
3050
|
return new CliError("INTAKE_ALREADY_DECIDED", "INTAKE_ALREADY_DECIDED");
|
|
3011
3051
|
}
|
|
3052
|
+
if (typeof error === "object" && error !== null && "data" in error) {
|
|
3053
|
+
const data = error.data;
|
|
3054
|
+
if (data?.serviceDetails) {
|
|
3055
|
+
return new CliError("API_ERROR", error.message || "Unexpected CLI error.", data.serviceDetails);
|
|
3056
|
+
}
|
|
3057
|
+
}
|
|
3012
3058
|
return new CliError("API_ERROR", error.message || "Unexpected CLI error.");
|
|
3013
3059
|
}
|
|
3014
3060
|
function commandNameFromArgv(argv) {
|
|
@@ -3052,7 +3098,7 @@ async function runCli(argv, options = {}) {
|
|
|
3052
3098
|
if (parsed.command.name === "auth.login" || parsed.command.name === "auth.status" || parsed.command.name === "auth.logout") {
|
|
3053
3099
|
return await runAuthCommand(parsed, options);
|
|
3054
3100
|
}
|
|
3055
|
-
if (parsed.command.name === "events.list" || parsed.command.name === "work.overview" || parsed.command.name === "tickets.get" || parsed.command.name === "tickets.list" || parsed.command.name === "sessions.current" || parsed.command.name === "changesets.get" || parsed.command.name === "changesets.current" || parsed.command.name === "changesets.list" || parsed.command.name === "changesets.notes.get") {
|
|
3101
|
+
if (parsed.command.name === "events.list" || parsed.command.name === "work.overview" || parsed.command.name === "tickets.get" || parsed.command.name === "tickets.list" || parsed.command.name === "sessions.current" || parsed.command.name === "changesets.get" || parsed.command.name === "changesets.context" || parsed.command.name === "changesets.current" || parsed.command.name === "changesets.list" || parsed.command.name === "changesets.notes.get") {
|
|
3056
3102
|
return await runReadCommand(parsed, options);
|
|
3057
3103
|
}
|
|
3058
3104
|
if (parsed.command.name === "projects.list") {
|