@doist/outline-cli 1.5.3 → 1.6.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 (44) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/commands/auth.js +28 -134
  3. package/dist/commands/auth.js.map +1 -1
  4. package/dist/commands/changelog.d.ts +1 -6
  5. package/dist/commands/changelog.js +8 -88
  6. package/dist/commands/changelog.js.map +1 -1
  7. package/dist/index.js +9 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/api.d.ts +5 -1
  10. package/dist/lib/api.js +9 -6
  11. package/dist/lib/api.js.map +1 -1
  12. package/dist/lib/auth-pages.d.ts +2 -0
  13. package/dist/lib/auth-pages.js +101 -0
  14. package/dist/lib/auth-pages.js.map +1 -0
  15. package/dist/lib/auth-provider.d.ts +10 -0
  16. package/dist/lib/auth-provider.js +198 -0
  17. package/dist/lib/auth-provider.js.map +1 -0
  18. package/dist/lib/auth.d.ts +6 -2
  19. package/dist/lib/auth.js +11 -12
  20. package/dist/lib/auth.js.map +1 -1
  21. package/dist/lib/config.d.ts +3 -0
  22. package/dist/lib/config.js.map +1 -1
  23. package/dist/lib/errors.d.ts +3 -1
  24. package/dist/lib/errors.js +1 -0
  25. package/dist/lib/errors.js.map +1 -1
  26. package/dist/lib/global-args.d.ts +1 -0
  27. package/dist/lib/global-args.js +4 -0
  28. package/dist/lib/global-args.js.map +1 -1
  29. package/dist/lib/output.d.ts +6 -0
  30. package/dist/lib/output.js +16 -4
  31. package/dist/lib/output.js.map +1 -1
  32. package/dist/lib/skills/content.d.ts +1 -1
  33. package/dist/lib/skills/content.js +8 -3
  34. package/dist/lib/skills/content.js.map +1 -1
  35. package/package.json +2 -2
  36. package/dist/lib/oauth-server.d.ts +0 -14
  37. package/dist/lib/oauth-server.js +0 -203
  38. package/dist/lib/oauth-server.js.map +0 -1
  39. package/dist/lib/oauth.d.ts +0 -17
  40. package/dist/lib/oauth.js +0 -42
  41. package/dist/lib/oauth.js.map +0 -1
  42. package/dist/lib/pkce.d.ts +0 -3
  43. package/dist/lib/pkce.js +0 -16
  44. package/dist/lib/pkce.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [1.6.0](https://github.com/Doist/outline-cli/compare/v1.5.3...v1.6.0) (2026-05-15)
2
+
3
+ ### Features
4
+
5
+ * **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))
6
+
1
7
  ## [1.5.3](https://github.com/Doist/outline-cli/compare/v1.5.2...v1.5.3) (2026-05-11)
2
8
 
3
9
  ### Bug Fixes
@@ -1,147 +1,41 @@
1
- import { createInterface } from 'node:readline/promises';
1
+ import { attachLoginCommand } 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';
4
+ import { renderError, renderSuccess } from '../lib/auth-pages.js';
5
+ import { createOutlineAuthProvider, createOutlineTokenStore } from '../lib/auth-provider.js';
6
+ import { clearConfig, getBaseUrl, getTokenSource } from '../lib/auth.js';
8
7
  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);
8
+ const DEFAULT_OAUTH_CALLBACK_PORT = 54969;
9
+ function resolvePreferredCallbackPort() {
10
+ const raw = process.env.OUTLINE_OAUTH_CALLBACK_PORT?.trim();
11
+ if (!raw)
12
+ return DEFAULT_OAUTH_CALLBACK_PORT;
13
+ const parsed = Number(raw);
21
14
  if (!Number.isInteger(parsed) || parsed < 1 || parsed > 65_535) {
22
- return null;
15
+ return DEFAULT_OAUTH_CALLBACK_PORT;
23
16
  }
24
17
  return parsed;
25
18
  }
26
19
  export function registerAuthCommand(program) {
27
20
  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')
21
+ const provider = createOutlineAuthProvider();
22
+ const store = createOutlineTokenStore();
23
+ attachLoginCommand(auth, {
24
+ provider,
25
+ store,
26
+ preferredPort: resolvePreferredCallbackPort(),
27
+ resolveScopes: () => [],
28
+ renderSuccess,
29
+ renderError,
30
+ onSuccess({ view, account }) {
31
+ if (view.json || view.ndjson)
32
+ return;
33
+ console.log(chalk.green(`Authenticated to ${account.teamName} as ${account.label}`));
34
+ },
35
+ })
36
+ .description('Authenticate with an Outline instance via OAuth')
31
37
  .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);
57
- }
58
- callbackPort = parsedPort;
59
- }
60
- if (options.token) {
61
- await saveConfig(options.token.trim(), url, optionClientId);
62
- try {
63
- const { data } = await apiRequest('auth.info');
64
- console.log(chalk.green(`Authenticated to ${data.team.name} as ${data.user.name}`));
65
- }
66
- catch (err) {
67
- console.log(chalk.yellow('Token saved, but could not verify:'), err.message);
68
- }
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",
100
- ];
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
- });
38
+ .option('--client-id <clientId>', 'OAuth client ID to use for this login (saved for future logins)');
145
39
  auth.command('status')
146
40
  .description('Show current authentication state')
147
41
  .action(async () => {
@@ -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,2 @@
1
+ export declare function renderSuccess(): string;
2
+ export declare function renderError(message: string): string;
@@ -0,0 +1,101 @@
1
+ function escapeHtml(text) {
2
+ return text
3
+ .replaceAll('&', '&amp;')
4
+ .replaceAll('<', '&lt;')
5
+ .replaceAll('>', '&gt;')
6
+ .replaceAll('"', '&quot;')
7
+ .replaceAll("'", '&#39;');
8
+ }
9
+ function renderPage(title, subtitle, body) {
10
+ return `<!doctype html>
11
+ <html lang="en">
12
+ <head>
13
+ <meta charset="utf-8">
14
+ <meta name="viewport" content="width=device-width, initial-scale=1">
15
+ <title>${escapeHtml(title)} - Outline CLI</title>
16
+ <style>
17
+ :root {
18
+ --bg: #f5f7fb;
19
+ --surface: #ffffff;
20
+ --border: #e6e9f0;
21
+ --text: #1e2430;
22
+ --muted: #586178;
23
+ --ok: #15803d;
24
+ --ok-soft: #dcfce7;
25
+ --err: #b91c1c;
26
+ --err-soft: #fee2e2;
27
+ --radius: 14px;
28
+ }
29
+ * { box-sizing: border-box; }
30
+ body {
31
+ margin: 0;
32
+ min-height: 100vh;
33
+ display: grid;
34
+ place-items: center;
35
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
36
+ background: radial-gradient(1200px 500px at 50% -10%, #dbeafe 0%, var(--bg) 60%);
37
+ color: var(--text);
38
+ line-height: 1.5;
39
+ padding: 20px;
40
+ }
41
+ .card {
42
+ width: min(560px, 100%);
43
+ background: var(--surface);
44
+ border: 1px solid var(--border);
45
+ border-radius: var(--radius);
46
+ padding: 24px;
47
+ box-shadow: 0 16px 40px rgba(15, 23, 42, 0.08);
48
+ }
49
+ h1 {
50
+ margin: 0 0 8px;
51
+ font-size: 24px;
52
+ letter-spacing: -0.01em;
53
+ }
54
+ .subtitle {
55
+ margin: 0 0 16px;
56
+ color: var(--muted);
57
+ font-size: 15px;
58
+ }
59
+ .message {
60
+ border-radius: 12px;
61
+ padding: 14px 16px;
62
+ font-size: 14px;
63
+ }
64
+ .success {
65
+ background: var(--ok-soft);
66
+ color: #14532d;
67
+ }
68
+ .error {
69
+ background: var(--err-soft);
70
+ color: #7f1d1d;
71
+ }
72
+ .hint {
73
+ margin-top: 14px;
74
+ color: var(--muted);
75
+ font-size: 13px;
76
+ }
77
+ code {
78
+ font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
79
+ background: #eef2ff;
80
+ border-radius: 6px;
81
+ padding: 2px 6px;
82
+ }
83
+ </style>
84
+ </head>
85
+ <body>
86
+ <main class="card">
87
+ <h1>${escapeHtml(title)}</h1>
88
+ <p class="subtitle">${escapeHtml(subtitle)}</p>
89
+ ${body}
90
+ <p class="hint">Return to your terminal and continue with <code>ol</code> commands.</p>
91
+ </main>
92
+ </body>
93
+ </html>`;
94
+ }
95
+ export function renderSuccess() {
96
+ return renderPage('Login complete', 'Outline CLI is now authenticated.', '<div class="message success">You can close this tab now.</div>');
97
+ }
98
+ export function renderError(message) {
99
+ return renderPage('Authentication failed', 'Outline CLI could not finish OAuth login.', `<div class="message error">${escapeHtml(message)}</div>`);
100
+ }
101
+ //# sourceMappingURL=auth-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-pages.js","sourceRoot":"","sources":["../../src/lib/auth-pages.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAC,IAAY;IAC5B,OAAO,IAAI;SACN,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,QAAgB,EAAE,IAAY;IAC7D,OAAO;;;;;WAKA,UAAU,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAwElB,UAAU,CAAC,KAAK,CAAC;0BACD,UAAU,CAAC,QAAQ,CAAC;MACxC,IAAI;;;;QAIF,CAAA;AACR,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,OAAO,UAAU,CACb,gBAAgB,EAChB,mCAAmC,EACnC,gEAAgE,CACnE,CAAA;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACvC,OAAO,UAAU,CACb,uBAAuB,EACvB,2CAA2C,EAC3C,8BAA8B,UAAU,CAAC,OAAO,CAAC,QAAQ,CAC5D,CAAA;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type AuthAccount, type AuthProvider, type TokenStore } from '@doist/cli-core/auth';
2
+ export type OutlineAccount = AuthAccount & {
3
+ id: string;
4
+ label: string;
5
+ baseUrl: string;
6
+ oauthClientId: string;
7
+ teamName?: string;
8
+ };
9
+ export declare function createOutlineAuthProvider(): AuthProvider<OutlineAccount>;
10
+ export declare function createOutlineTokenStore(): TokenStore<OutlineAccount>;