@doist/outline-cli 1.5.3 → 1.7.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 (57) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/commands/auth.d.ts +12 -0
  3. package/dist/commands/auth.js +110 -158
  4. package/dist/commands/auth.js.map +1 -1
  5. package/dist/commands/changelog.d.ts +1 -6
  6. package/dist/commands/changelog.js +8 -88
  7. package/dist/commands/changelog.js.map +1 -1
  8. package/dist/index.js +9 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/api.d.ts +5 -1
  11. package/dist/lib/api.js +9 -6
  12. package/dist/lib/api.js.map +1 -1
  13. package/dist/lib/auth-constants.d.ts +18 -0
  14. package/dist/lib/auth-constants.js +25 -0
  15. package/dist/lib/auth-constants.js.map +1 -0
  16. package/dist/lib/auth-pages.d.ts +2 -0
  17. package/dist/lib/auth-pages.js +101 -0
  18. package/dist/lib/auth-pages.js.map +1 -0
  19. package/dist/lib/auth-provider.d.ts +59 -0
  20. package/dist/lib/auth-provider.js +299 -0
  21. package/dist/lib/auth-provider.js.map +1 -0
  22. package/dist/lib/auth.d.ts +24 -7
  23. package/dist/lib/auth.js +53 -36
  24. package/dist/lib/auth.js.map +1 -1
  25. package/dist/lib/config.d.ts +23 -0
  26. package/dist/lib/config.js.map +1 -1
  27. package/dist/lib/errors.d.ts +3 -1
  28. package/dist/lib/errors.js +1 -0
  29. package/dist/lib/errors.js.map +1 -1
  30. package/dist/lib/global-args.d.ts +1 -0
  31. package/dist/lib/global-args.js +4 -0
  32. package/dist/lib/global-args.js.map +1 -1
  33. package/dist/lib/migrate-auth.d.ts +11 -0
  34. package/dist/lib/migrate-auth.js +92 -0
  35. package/dist/lib/migrate-auth.js.map +1 -0
  36. package/dist/lib/outline-account.d.ts +26 -0
  37. package/dist/lib/outline-account.js +12 -0
  38. package/dist/lib/outline-account.js.map +1 -0
  39. package/dist/lib/output.d.ts +6 -0
  40. package/dist/lib/output.js +16 -4
  41. package/dist/lib/output.js.map +1 -1
  42. package/dist/lib/skills/content.d.ts +1 -1
  43. package/dist/lib/skills/content.js +10 -3
  44. package/dist/lib/skills/content.js.map +1 -1
  45. package/dist/lib/user-records.d.ts +14 -0
  46. package/dist/lib/user-records.js +89 -0
  47. package/dist/lib/user-records.js.map +1 -0
  48. package/package.json +2 -2
  49. package/dist/lib/oauth-server.d.ts +0 -14
  50. package/dist/lib/oauth-server.js +0 -203
  51. package/dist/lib/oauth-server.js.map +0 -1
  52. package/dist/lib/oauth.d.ts +0 -17
  53. package/dist/lib/oauth.js +0 -42
  54. package/dist/lib/oauth.js.map +0 -1
  55. package/dist/lib/pkce.d.ts +0 -3
  56. package/dist/lib/pkce.js +0 -16
  57. package/dist/lib/pkce.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [1.7.0](https://github.com/Doist/outline-cli/compare/v1.6.0...v1.7.0) (2026-05-17)
2
+
3
+ ### Features
4
+
5
+ * **auth:** store API tokens in the OS keyring via @doist/cli-core ([#73](https://github.com/Doist/outline-cli/issues/73)) ([b353aea](https://github.com/Doist/outline-cli/commit/b353aeae3cdcc63308ec8de899f08c1dda23f22c))
6
+
7
+ ## [1.6.0](https://github.com/Doist/outline-cli/compare/v1.5.3...v1.6.0) (2026-05-15)
8
+
9
+ ### Features
10
+
11
+ * **auth:** adopt cli-core 0.12.0 multi-user TokenStore shape ([#71](https://github.com/Doist/outline-cli/issues/71)) ([53487b7](https://github.com/Doist/outline-cli/commit/53487b707b9a980c401ef19b3e37c08299aa6abe))
12
+
1
13
  ## [1.5.3](https://github.com/Doist/outline-cli/compare/v1.5.2...v1.5.3) (2026-05-11)
2
14
 
3
15
  ### Bug Fixes
@@ -1,2 +1,14 @@
1
+ import { type TokenStorageResult } from '@doist/cli-core/auth';
1
2
  import type { Command } from 'commander';
3
+ /**
4
+ * Surface a `TokenStorageResult` from a save/clear: the human-readable
5
+ * confirmation goes to stdout, any keyring-fallback warning goes to stderr.
6
+ * Pass `isMachineOutput: true` to suppress the stdout confirmation in
7
+ * `--json` / `--ndjson` mode while still routing the warning to stderr.
8
+ *
9
+ * Exported for direct unit testing — the alternative (driving this via
10
+ * mocked cli-core login/logout hooks) would require stubbing the entire
11
+ * store contract just to assert two console calls.
12
+ */
13
+ export declare function logTokenStorageResult(result: TokenStorageResult, secureStoreMessage: string, isMachineOutput?: boolean): void;
2
14
  export declare function registerAuthCommand(program: Command): void;
@@ -1,176 +1,128 @@
1
- import { createInterface } from 'node:readline/promises';
1
+ import { attachLoginCommand, attachLogoutCommand, attachStatusCommand, } from '@doist/cli-core/auth';
2
2
  import chalk from 'chalk';
3
- import open from 'open';
4
3
  import { apiRequest } from '../lib/api.js';
5
- import { clearConfig, getBaseUrl, getOAuthClientId, getTokenSource, saveConfig, } from '../lib/auth.js';
6
- import { DEFAULT_OAUTH_CALLBACK_PORT, startOAuthCallbackServer } from '../lib/oauth-server.js';
7
- import { buildAuthorizationUrl, exchangeCodeForToken } from '../lib/oauth.js';
8
- import { formatError } from '../lib/output.js';
9
- import { generateCodeChallenge, generateCodeVerifier, generateState } from '../lib/pkce.js';
10
- async function prompt(question) {
11
- const rl = createInterface({ input: process.stdin, output: process.stdout });
12
- try {
13
- return await rl.question(question);
14
- }
15
- finally {
16
- rl.close();
17
- }
18
- }
19
- function parseCallbackPort(rawPort) {
20
- const parsed = Number(rawPort);
4
+ import { renderError, renderSuccess } from '../lib/auth-pages.js';
5
+ import { createOutlineAuthProvider, createOutlineTokenStore, getActiveTokenSource, } from '../lib/auth-provider.js';
6
+ import { CliError } from '../lib/errors.js';
7
+ const DEFAULT_OAUTH_CALLBACK_PORT = 54969;
8
+ function resolvePreferredCallbackPort() {
9
+ const raw = process.env.OUTLINE_OAUTH_CALLBACK_PORT?.trim();
10
+ if (!raw)
11
+ return DEFAULT_OAUTH_CALLBACK_PORT;
12
+ const parsed = Number(raw);
21
13
  if (!Number.isInteger(parsed) || parsed < 1 || parsed > 65_535) {
22
- return null;
14
+ return DEFAULT_OAUTH_CALLBACK_PORT;
23
15
  }
24
16
  return parsed;
25
17
  }
18
+ /**
19
+ * Surface a `TokenStorageResult` from a save/clear: the human-readable
20
+ * confirmation goes to stdout, any keyring-fallback warning goes to stderr.
21
+ * Pass `isMachineOutput: true` to suppress the stdout confirmation in
22
+ * `--json` / `--ndjson` mode while still routing the warning to stderr.
23
+ *
24
+ * Exported for direct unit testing — the alternative (driving this via
25
+ * mocked cli-core login/logout hooks) would require stubbing the entire
26
+ * store contract just to assert two console calls.
27
+ */
28
+ export function logTokenStorageResult(result, secureStoreMessage, isMachineOutput = false) {
29
+ if (!isMachineOutput && result.storage === 'secure-store') {
30
+ console.log(chalk.dim(secureStoreMessage));
31
+ }
32
+ if (result.warning) {
33
+ console.error(chalk.yellow('Warning:'), result.warning);
34
+ }
35
+ }
26
36
  export function registerAuthCommand(program) {
27
37
  const auth = program.command('auth').description('Manage authentication');
28
- auth.command('login')
29
- .description('Authenticate with an Outline instance')
30
- .option('--token <token>', 'Authenticate using a personal API token')
31
- .option('--base-url <url>', 'Outline base URL to use for this login (saved for future logins)')
32
- .option('--client-id <clientId>', 'OAuth client ID to use for this login (saved for future logins)')
33
- .option('--callback-port <port>', `Local OAuth callback port (default: ${DEFAULT_OAUTH_CALLBACK_PORT})`)
34
- .action(async (options) => {
35
- const configuredBaseUrl = await getBaseUrl();
36
- const optionBaseUrl = options.baseUrl?.trim();
37
- const envBaseUrl = process.env.OUTLINE_URL?.trim();
38
- let url = optionBaseUrl || envBaseUrl;
39
- if (!url) {
40
- const baseUrlInput = await prompt(`Base URL (default: ${configuredBaseUrl}): `);
41
- url = baseUrlInput.trim() || configuredBaseUrl;
42
- }
43
- url = url.replace(/\/$/, '');
44
- const optionClientId = options.clientId?.trim();
45
- const optionCallbackPort = options.callbackPort?.trim();
46
- const envCallbackPort = process.env.OUTLINE_OAUTH_CALLBACK_PORT?.trim();
47
- const rawCallbackPort = optionCallbackPort || envCallbackPort;
48
- let callbackPort = DEFAULT_OAUTH_CALLBACK_PORT;
49
- if (rawCallbackPort) {
50
- const parsedPort = parseCallbackPort(rawCallbackPort);
51
- if (!parsedPort) {
52
- console.error(formatError('OAUTH_CALLBACK_PORT_INVALID', `Invalid callback port: ${rawCallbackPort}`, [
53
- 'Use an integer between 1 and 65535',
54
- 'Set via --callback-port or OUTLINE_OAUTH_CALLBACK_PORT',
55
- ]));
56
- process.exit(1);
38
+ const provider = createOutlineAuthProvider();
39
+ const store = createOutlineTokenStore();
40
+ attachLoginCommand(auth, {
41
+ provider,
42
+ store,
43
+ preferredPort: resolvePreferredCallbackPort(),
44
+ resolveScopes: () => [],
45
+ renderSuccess,
46
+ renderError,
47
+ onSuccess({ view, account }) {
48
+ const isMachineOutput = view.json || view.ndjson;
49
+ if (!isMachineOutput) {
50
+ console.log(chalk.green(`Authenticated to ${account.teamName} as ${account.label}`));
51
+ }
52
+ const result = store.getLastStorageResult();
53
+ if (result) {
54
+ logTokenStorageResult(result, 'Token stored securely in the system credential manager', isMachineOutput);
57
55
  }
58
- callbackPort = parsedPort;
59
- }
60
- if (options.token) {
61
- await saveConfig(options.token.trim(), url, optionClientId);
56
+ },
57
+ })
58
+ .description('Authenticate with an Outline instance via OAuth')
59
+ .option('--base-url <url>', 'Outline base URL to use for this login (saved for future logins)')
60
+ .option('--client-id <clientId>', 'OAuth client ID to use for this login (saved for future logins)');
61
+ // `attachStatusCommand` guarantees `fetchLive` runs before `renderText` /
62
+ // `renderJson` within a single invocation, so the stash is always
63
+ // populated by the time the render hooks read it.
64
+ let statusData = null;
65
+ attachStatusCommand(auth, {
66
+ store,
67
+ description: 'Show current authentication state',
68
+ async fetchLive({ token, account }) {
62
69
  try {
63
- const { data } = await apiRequest('auth.info');
64
- console.log(chalk.green(`Authenticated to ${data.team.name} as ${data.user.name}`));
70
+ const [{ data: info }, source] = await Promise.all([
71
+ apiRequest('auth.info', {}, { token, baseUrl: account.baseUrl }),
72
+ getActiveTokenSource(),
73
+ ]);
74
+ statusData = { email: info.user.email, source };
75
+ return {
76
+ ...account,
77
+ id: info.user.id,
78
+ label: info.user.name,
79
+ teamName: info.team.name,
80
+ };
65
81
  }
66
82
  catch (err) {
67
- console.log(chalk.yellow('Token saved, but could not verify:'), err.message);
83
+ const message = err instanceof Error ? err.message : '';
84
+ if (/\b401\b/.test(message) || /Authentication required/i.test(message)) {
85
+ throw new CliError('NO_TOKEN', 'Not authenticated (token expired or invalid)', [
86
+ 'Run `ol auth login` to re-authenticate',
87
+ ]);
88
+ }
89
+ throw err;
68
90
  }
69
- return;
70
- }
71
- const existingClientId = await getOAuthClientId();
72
- let clientId = optionClientId || existingClientId;
73
- if (!clientId) {
74
- const clientIdInput = await prompt('OAuth Client ID: ');
75
- clientId = clientIdInput.trim();
76
- }
77
- if (!clientId) {
78
- console.error(formatError('OAUTH_CLIENT_ID_REQUIRED', 'OAuth client ID is required.', [
79
- 'Create a public OAuth app in Outline settings',
80
- 'Use --client-id <id> for this login',
81
- 'Set OUTLINE_OAUTH_CLIENT_ID or enter it here',
82
- ]));
83
- process.exit(1);
84
- }
85
- const codeVerifier = generateCodeVerifier();
86
- const codeChallenge = generateCodeChallenge(codeVerifier);
87
- const state = generateState();
88
- let callbackServer;
89
- try {
90
- callbackServer = await startOAuthCallbackServer({
91
- state,
92
- port: callbackPort,
93
- });
94
- }
95
- catch (err) {
96
- const error = err;
97
- const hints = [
98
- `Ensure http://localhost:${callbackPort}/callback is reachable from your browser`,
99
- "Re-run with 'ol auth login --token <token>' for manual auth",
91
+ },
92
+ renderText({ account }) {
93
+ if (!statusData)
94
+ throw new Error('status renderText called before fetchLive');
95
+ return [
96
+ `${chalk.green('✓')} Authenticated`,
97
+ ` Team: ${chalk.bold(account.teamName ?? '')}`,
98
+ ` User: ${account.label} (${statusData.email})`,
99
+ ` Base URL: ${account.baseUrl}`,
100
+ ` Token source: ${statusData.source}`,
100
101
  ];
101
- if (error.code === 'EADDRINUSE') {
102
- hints.unshift(`Port ${callbackPort} is already in use. Close the other process using it.`);
103
- }
104
- console.error(formatError('OAUTH_CALLBACK_SERVER_FAILED', `Could not start local OAuth callback server: ${error.message}`, hints));
105
- process.exit(1);
106
- }
107
- const authorizationUrl = buildAuthorizationUrl({
108
- baseUrl: url,
109
- clientId,
110
- redirectUri: callbackServer.redirectUri,
111
- codeChallenge,
112
- state,
113
- });
114
- try {
115
- await open(authorizationUrl);
116
- }
117
- catch (err) {
118
- console.log(chalk.yellow('Could not open browser automatically.'), chalk.dim(authorizationUrl));
119
- console.log(chalk.dim(err.message));
120
- }
121
- console.log(chalk.dim('Waiting for OAuth authorization...'));
122
- try {
123
- const code = await callbackServer.waitForCode;
124
- const token = await exchangeCodeForToken({
125
- baseUrl: url,
126
- clientId,
127
- redirectUri: callbackServer.redirectUri,
128
- codeVerifier,
129
- code,
130
- });
131
- await saveConfig(token, url, clientId);
132
- const { data } = await apiRequest('auth.info');
133
- console.log(chalk.green(`Authenticated to ${data.team.name} as ${data.user.name}`));
134
- }
135
- catch (err) {
136
- callbackServer.close();
137
- console.error(formatError('OAUTH_LOGIN_FAILED', `OAuth login failed: ${err.message}`, [
138
- 'Confirm the OAuth app redirect URI matches the CLI callback',
139
- 'Verify --base-url or OUTLINE_URL points to your Outline instance',
140
- "Re-run with 'ol auth login --token' for manual auth",
141
- ]));
142
- process.exit(1);
143
- }
144
- });
145
- auth.command('status')
146
- .description('Show current authentication state')
147
- .action(async () => {
148
- const source = await getTokenSource();
149
- if (!source) {
150
- console.log(chalk.yellow('Not authenticated. Run: ol auth login'));
151
- return;
152
- }
153
- console.log(chalk.dim(`Token source: ${source}`));
154
- console.log(chalk.dim(`Base URL: ${await getBaseUrl()}`));
155
- try {
156
- const { data } = await apiRequest('auth.info');
157
- console.log(`Team: ${chalk.bold(data.team.name)}`);
158
- console.log(`User: ${data.user.name} (${data.user.email})`);
159
- }
160
- catch (err) {
161
- console.error(formatError('AUTH_VERIFICATION_FAILED', `Could not fetch auth info: ${err.message}`, [
162
- 'Check that your API token is valid',
163
- 'Verify the base URL is correct',
164
- "Run 'ol auth login' to re-authenticate",
165
- ]));
166
- process.exit(1);
167
- }
102
+ },
103
+ renderJson({ account }) {
104
+ if (!statusData)
105
+ throw new Error('status renderJson called before fetchLive');
106
+ return {
107
+ id: account.id,
108
+ team: account.teamName,
109
+ baseUrl: account.baseUrl,
110
+ source: statusData.source,
111
+ };
112
+ },
113
+ onNotAuthenticated() {
114
+ throw new CliError('NOT_AUTHENTICATED', 'Not authenticated. Run: ol auth login');
115
+ },
168
116
  });
169
- auth.command('logout')
170
- .description('Clear saved authentication')
171
- .action(async () => {
172
- await clearConfig();
173
- console.log('Logged out.');
117
+ attachLogoutCommand(auth, {
118
+ store,
119
+ description: 'Clear saved authentication',
120
+ onCleared({ view }) {
121
+ const result = store.getLastClearResult();
122
+ if (!result)
123
+ return;
124
+ logTokenStorageResult(result, 'Stored token removed from the system credential manager', view.json || view.ndjson);
125
+ },
174
126
  });
175
127
  }
176
128
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,2 @@
1
- import { Command } from 'commander';
2
- interface ChangelogOptions {
3
- count: string;
4
- }
5
- export declare function changelogAction(options: ChangelogOptions): Promise<void>;
1
+ import type { Command } from 'commander';
6
2
  export declare function registerChangelogCommand(program: Command): void;
7
- export {};
@@ -1,95 +1,15 @@
1
- import { readFile } from 'node:fs/promises';
2
1
  import { dirname, join } from 'node:path';
3
2
  import { fileURLToPath } from 'node:url';
4
- import chalk from 'chalk';
3
+ import { registerChangelogCommand as registerCoreChangelogCommand } from '@doist/cli-core/commands';
5
4
  import packageJson from '../../package.json' with { type: 'json' };
6
5
  const CHANGELOG_PATH = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'CHANGELOG.md');
7
- const CHANGELOG_URL = `https://github.com/Doist/outline-cli/blob/v${packageJson.version}/CHANGELOG.md`;
8
- function formatInline(text) {
9
- return text
10
- .replace(/\*\*([^*]+)\*\*/g, (_, content) => chalk.bold(content))
11
- .replace(/`([^`]+)`/g, (_, code) => chalk.cyan(code));
12
- }
13
- function formatForTerminal(text) {
14
- return text
15
- .split('\n')
16
- .map((line) => {
17
- // Version headers: ## 1.25.0 (date) → bold green
18
- if (line.startsWith('## ')) {
19
- return chalk.green.bold(line.slice(3));
20
- }
21
- // Section headers: ### Features → bold
22
- if (line.startsWith('### ')) {
23
- return chalk.bold(line.slice(4));
24
- }
25
- // Bullet items: * or - description → dimmed bullet + text
26
- if (line.startsWith('* ')) {
27
- return ` ${chalk.dim('•')} ${formatInline(line.slice(2))}`;
28
- }
29
- if (line.startsWith('- ')) {
30
- return ` ${chalk.dim('•')} ${formatInline(line.slice(2))}`;
31
- }
32
- return formatInline(line);
33
- })
34
- .join('\n');
35
- }
36
- function cleanChangelog(text) {
37
- return (text
38
- // Version headers: ## [1.25.0](https://...) (date) → ## 1.25.0 (date)
39
- .replace(/## \[([^\]]+)\]\([^)]*\)/g, '## $1')
40
- // Remove commit hash links: ([abc1234](https://...))
41
- .replace(/ \([a-f0-9]{7}\)/g, '')
42
- .replace(/ \(\[[a-f0-9]{7}\]\([^)]*\)\)/g, '')
43
- // Issue/PR links: [#151](https://...) → #151
44
- .replace(/\[#(\d+)\]\([^)]*\)/g, '#$1')
45
- // Remove **deps:** dependency update lines (not useful to end users)
46
- .replace(/^[*-] \*\*deps:\*\*.*$/gm, '')
47
- // Remove **scope:** prefixes but keep the text: **task:** foo → foo
48
- .replace(/\*\*[\w-]+:\*\* /g, '')
49
- // Clean up blank lines left by removed dep lines
50
- .replace(/\n{3,}/g, '\n\n')
51
- // Remove section headers left empty after filtering (e.g. ### Bug Fixes with no items)
52
- .replace(/### [\w ]+\n\n(?=#|$)/gm, ''));
53
- }
54
- function parseChangelog(content, count) {
55
- const sections = content.split(/\n(?=## (?:\d|\[))/);
56
- const versionSections = sections.filter((s) => /^## (?:\d|\[)/.test(s));
57
- const selected = versionSections.slice(0, count);
58
- if (selected.length === 0) {
59
- return { text: 'No changelog entries found.', hasMore: false };
60
- }
61
- return {
62
- text: cleanChangelog(selected.join('\n').trimEnd()),
63
- hasMore: versionSections.length > count,
64
- };
65
- }
66
- export async function changelogAction(options) {
67
- const count = Number(options.count);
68
- if (!Number.isInteger(count) || count < 1) {
69
- console.error(chalk.red('Error:'), 'Count must be a positive number');
70
- process.exitCode = 1;
71
- return;
72
- }
73
- let content;
74
- try {
75
- content = await readFile(CHANGELOG_PATH, 'utf-8');
76
- }
77
- catch {
78
- console.error(chalk.red('Error:'), 'Could not read changelog file');
79
- process.exitCode = 1;
80
- return;
81
- }
82
- const { text, hasMore } = parseChangelog(content, count);
83
- console.log(formatForTerminal(text));
84
- if (hasMore) {
85
- console.log(chalk.dim(`\nView full changelog: ${CHANGELOG_URL}`));
86
- }
87
- }
6
+ const REPO_URL = packageJson.repository.url.replace(/^git\+/, '').replace(/\.git$/, '');
88
7
  export function registerChangelogCommand(program) {
89
- program
90
- .command('changelog')
91
- .description('Show recent changelog entries')
92
- .option('-n, --count <number>', 'Number of versions to show', '5')
93
- .action(changelogAction);
8
+ registerCoreChangelogCommand(program, {
9
+ path: CHANGELOG_PATH,
10
+ repoUrl: REPO_URL,
11
+ version: packageJson.version,
12
+ bulletMarkers: ['*', '-'],
13
+ });
94
14
  }
95
15
  //# sourceMappingURL=changelog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../src/commands/changelog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../src/commands/changelog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,wBAAwB,IAAI,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AAEnG,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAElE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAA;AAChG,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AAEvF,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACrD,4BAA4B,CAAC,OAAO,EAAE;QAClC,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;KAC5B,CAAC,CAAA;AACN,CAAC"}
package/dist/index.js CHANGED
@@ -8,6 +8,9 @@ import { registerDocumentCommand } from './commands/document.js';
8
8
  import { registerSearchCommand } from './commands/search.js';
9
9
  import { registerSkillCommand } from './commands/skill.js';
10
10
  import { registerUpdateCommand } from './commands/update/index.js';
11
+ import { BaseCliError } from './lib/errors.js';
12
+ import { isJsonMode } from './lib/global-args.js';
13
+ import { formatError, formatErrorJson } from './lib/output.js';
11
14
  const program = new Command();
12
15
  program
13
16
  .name('ol')
@@ -27,7 +30,12 @@ registerSkillCommand(program);
27
30
  registerChangelogCommand(program);
28
31
  registerUpdateCommand(program);
29
32
  program.parseAsync().catch((err) => {
30
- console.error(err.message);
33
+ if (err instanceof BaseCliError) {
34
+ console.error(isJsonMode() ? formatErrorJson(err) : formatError(err));
35
+ }
36
+ else {
37
+ console.error(err.message);
38
+ }
31
39
  process.exit(1);
32
40
  });
33
41
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAElE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACF,IAAI,CAAC,IAAI,CAAC;KACV,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,cAAc,EAAE,4BAA4B,CAAC;KACpD,MAAM,CAAC,cAAc,EAAE,8CAA8C,CAAC;KACtE,WAAW,CACR,OAAO,EACP;;;kEAG0D,CAC7D,CAAA;AAEL,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,yBAAyB,CAAC,OAAO,CAAC,CAAA;AAClC,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,wBAAwB,CAAC,OAAO,CAAC,CAAA;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAE9B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACF,IAAI,CAAC,IAAI,CAAC;KACV,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,cAAc,EAAE,4BAA4B,CAAC;KACpD,MAAM,CAAC,cAAc,EAAE,8CAA8C,CAAC;KACtE,WAAW,CACR,OAAO,EACP;;;kEAG0D,CAC7D,CAAA;AAEL,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,yBAAyB,CAAC,OAAO,CAAC,CAAA;AAClC,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,wBAAwB,CAAC,OAAO,CAAC,CAAA;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAE9B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACtC,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;IACzE,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC,CAAC,CAAA"}
package/dist/lib/api.d.ts CHANGED
@@ -7,8 +7,12 @@ export interface PaginatedResult<T> {
7
7
  data: T;
8
8
  pagination?: Pagination;
9
9
  }
10
+ export type ApiRequestOverrides = {
11
+ token?: string;
12
+ baseUrl?: string;
13
+ };
10
14
  /**
11
15
  * Public API request function that wraps rawApiRequest with automatic spinners.
12
16
  * Spinner messages are configured per API path in API_SPINNER_CONFIG.
13
17
  */
14
- export declare function apiRequest<T>(path: string, body?: object): Promise<PaginatedResult<T>>;
18
+ export declare function apiRequest<T>(path: string, body?: object, overrides?: ApiRequestOverrides): Promise<PaginatedResult<T>>;
package/dist/lib/api.js CHANGED
@@ -25,15 +25,18 @@ const API_SPINNER_CONFIG = {
25
25
  /**
26
26
  * Core API request function without spinner wrapping.
27
27
  */
28
- async function rawApiRequest(path, body = {}) {
29
- const [baseUrl, token] = await Promise.all([getBaseUrl(), getApiToken()]);
28
+ async function rawApiRequest(path, body = {}, overrides = {}) {
29
+ const [resolvedBaseUrl, resolvedToken] = await Promise.all([
30
+ overrides.baseUrl ? Promise.resolve(overrides.baseUrl.replace(/\/$/, '')) : getBaseUrl(),
31
+ overrides.token ? Promise.resolve(overrides.token) : getApiToken(),
32
+ ]);
30
33
  const res = await fetchWithRetry({
31
- url: `${baseUrl}/api/${path}`,
34
+ url: `${resolvedBaseUrl}/api/${path}`,
32
35
  options: {
33
36
  method: 'POST',
34
37
  headers: {
35
38
  'Content-Type': 'application/json',
36
- Authorization: `Bearer ${token}`,
39
+ Authorization: `Bearer ${resolvedToken}`,
37
40
  },
38
41
  body: JSON.stringify(body),
39
42
  },
@@ -55,11 +58,11 @@ async function rawApiRequest(path, body = {}) {
55
58
  * Public API request function that wraps rawApiRequest with automatic spinners.
56
59
  * Spinner messages are configured per API path in API_SPINNER_CONFIG.
57
60
  */
58
- export async function apiRequest(path, body = {}) {
61
+ export async function apiRequest(path, body = {}, overrides = {}) {
59
62
  const spinnerConfig = API_SPINNER_CONFIG[path] ?? {
60
63
  text: 'Loading...',
61
64
  color: 'blue',
62
65
  };
63
- return withSpinner(spinnerConfig, () => rawApiRequest(path, body));
66
+ return withSpinner(spinnerConfig, () => rawApiRequest(path, body, overrides));
64
67
  }
65
68
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Config } from './config.js';
2
+ /** OS keyring `service` identifier for every outline-cli secret. */
3
+ export declare const SECURE_STORE_SERVICE = "outline-cli";
4
+ /** Env var that short-circuits the token store with a manually-supplied token. */
5
+ export declare const TOKEN_ENV_VAR = "OUTLINE_API_TOKEN";
6
+ /**
7
+ * Legacy single-user keyring slot. Outline never wrote a token to the
8
+ * keyring before this migration, so there is no real legacy slot to read —
9
+ * `migrateLegacyAuth` still expects the option, and its best-effort delete
10
+ * after migration is a harmless no-op on an empty entry.
11
+ */
12
+ export declare const LEGACY_KEYRING_ACCOUNT = "api-token";
13
+ /**
14
+ * `updateConfig` payload that wipes every v1 auth key. Used by both the
15
+ * one-shot migration `cleanupLegacyConfig` and the runtime
16
+ * `dischargeLegacyState` so both paths stay in lockstep.
17
+ */
18
+ export declare const LEGACY_CLEAR_PAYLOAD: Partial<Config>;