@doist/outline-cli 1.8.0 → 1.10.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 (38) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/commands/account.d.ts +2 -0
  3. package/dist/commands/account.js +107 -0
  4. package/dist/commands/account.js.map +1 -0
  5. package/dist/commands/auth.d.ts +0 -12
  6. package/dist/commands/auth.js +63 -28
  7. package/dist/commands/auth.js.map +1 -1
  8. package/dist/index.js +19 -4
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/api.js +20 -9
  11. package/dist/lib/api.js.map +1 -1
  12. package/dist/lib/auth-output.d.ts +21 -0
  13. package/dist/lib/auth-output.js +38 -0
  14. package/dist/lib/auth-output.js.map +1 -0
  15. package/dist/lib/auth-provider.d.ts +43 -17
  16. package/dist/lib/auth-provider.js +104 -36
  17. package/dist/lib/auth-provider.js.map +1 -1
  18. package/dist/lib/auth.d.ts +32 -11
  19. package/dist/lib/auth.js +54 -13
  20. package/dist/lib/auth.js.map +1 -1
  21. package/dist/lib/errors.d.ts +1 -1
  22. package/dist/lib/errors.js.map +1 -1
  23. package/dist/lib/global-args.d.ts +25 -0
  24. package/dist/lib/global-args.js +50 -1
  25. package/dist/lib/global-args.js.map +1 -1
  26. package/dist/lib/outline-account.d.ts +7 -1
  27. package/dist/lib/outline-account.js +10 -0
  28. package/dist/lib/outline-account.js.map +1 -1
  29. package/dist/lib/skills/content.d.ts +1 -1
  30. package/dist/lib/skills/content.js +23 -0
  31. package/dist/lib/skills/content.js.map +1 -1
  32. package/dist/lib/user-records.d.ts +8 -1
  33. package/dist/lib/user-records.js +17 -1
  34. package/dist/lib/user-records.js.map +1 -1
  35. package/dist/lib/user-ref-store.d.ts +16 -0
  36. package/dist/lib/user-ref-store.js +37 -0
  37. package/dist/lib/user-ref-store.js.map +1 -0
  38. package/package.json +2 -2
@@ -1,6 +1,7 @@
1
1
  import { type AccountRef, type AuthProvider, type KeyringTokenStore } from '@doist/cli-core/auth';
2
2
  import { type OutlineAccount } from './outline-account.js';
3
3
  export type { OutlineAccount } from './outline-account.js';
4
+ export { matchOutlineAccount } from './outline-account.js';
4
5
  export type AuthInfoResponse = {
5
6
  user: {
6
7
  id: string;
@@ -13,13 +14,25 @@ export type AuthInfoResponse = {
13
14
  };
14
15
  };
15
16
  export type OutlineTokenStore = KeyringTokenStore<OutlineAccount>;
16
- export declare function createOutlineAuthProvider(): AuthProvider<OutlineAccount>;
17
17
  /**
18
- * Accepts the Outline user UUID or display name. Id matches are
19
- * case-sensitive (UUIDs are canonical); label matches are
20
- * case-insensitive so users can pass the name they see in `auth status`.
18
+ * Read a line from stdin, prompting on stderr so `--json` / `--ndjson`
19
+ * envelopes on stdout stay clean. With `hidden: true` the typed characters are
20
+ * masked (for secrets): the prompt label is shown, then readline's echo is
21
+ * routed through a muted `Writable` so keystrokes don't leak to the terminal.
21
22
  */
22
- export declare function matchOutlineAccount(account: OutlineAccount, ref: AccountRef): boolean;
23
+ export declare function prompt(question: string, options?: {
24
+ hidden?: boolean;
25
+ }): Promise<string>;
26
+ export declare function resolveBaseUrl(options?: {
27
+ baseUrl?: unknown;
28
+ }): Promise<string>;
29
+ /**
30
+ * Verify a token by probing `auth.info` and map the response to the persisted
31
+ * account shape. Shared by the OAuth `validate` hook and `auth token` so the
32
+ * identity-resolution rules live in one place.
33
+ */
34
+ export declare function identifyAccount(token: string, baseUrl: string, oauthClientId?: string): Promise<OutlineAccount>;
35
+ export declare function createOutlineAuthProvider(): AuthProvider<OutlineAccount>;
23
36
  /**
24
37
  * True when the v2 store is empty but a legacy v1 token snapshot is still
25
38
  * the only thing keeping the CLI authenticated — typically because
@@ -29,26 +42,39 @@ export declare function matchOutlineAccount(account: OutlineAccount, ref: Accoun
29
42
  * v1 keyring slot to read from). Useful for downstream diagnostics.
30
43
  */
31
44
  export declare function isLegacyAuthActive(): Promise<boolean>;
45
+ /** Where `ol account current` resolves the active credential from. */
46
+ export type ActiveAccountSource = {
47
+ source: 'stored';
48
+ account: OutlineAccount;
49
+ isDefault: boolean;
50
+ } | {
51
+ source: 'env';
52
+ } | {
53
+ source: 'legacy';
54
+ } | null;
32
55
  /**
33
- * `OUTLINE_API_TOKEN` short-circuits `active()` only when no explicit ref
34
- * is supplied — cli-core's `KeyringTokenStore` doesn't know about the env
35
- * var, and an explicit ref means the caller targets a specific stored
36
- * account.
56
+ * Authoritatively classify the active credential without re-deriving the
57
+ * cascade from membership heuristics. Mirrors `active()`'s precedence — env
58
+ * (only when no explicit ref) → stored v2 → legacy snapshot — but reports
59
+ * *which* branch matched, so `ol account current` can render the right shape.
37
60
  *
38
- * `ensureMigrated()` runs **before** every mutating v2 op so the post-op
39
- * legacy discharge can't race a still-pending migration into re-grabbing
40
- * the legacy `api_token` we just consumed. `set()` / `clear()` then
41
- * discharge legacy state **after** the v2 op succeeds. `set()` swallows
42
- * the cleanup failure (v2 wins in `active()` regardless); `clear()`
43
- * propagates it so a failed logout fails loudly instead of leaving the
44
- * user authenticated via the legacy fallback.
61
+ * The v2 lookup uses the bare keyring store (no legacy fallback) and matches by
62
+ * `ref`, so a renamed legacy snapshot sharing a UUID with a v2 record can't be
63
+ * misreported as `stored`: a `--user <old-name>` that the v2 record no longer
64
+ * matches falls through to the legacy branch.
45
65
  */
66
+ export declare function resolveActiveAccountSource(ref?: AccountRef): Promise<ActiveAccountSource>;
46
67
  export declare function createOutlineTokenStore(): OutlineTokenStore;
47
68
  /**
48
69
  * Where the currently-active token lives. Mirrors `active()`'s resolution
49
70
  * order — env → v2 record → legacy plaintext — so the answer can never
50
71
  * contradict the token the runtime is actually using.
51
72
  *
73
+ * Pass `ref` to report the source of a specific `--user` account (used by
74
+ * `auth status --user <ref>`): a ref selects the matching record and skips the
75
+ * env short-circuit, so the source reflects the account being shown rather
76
+ * than an ambient env token. Without a ref the default/env cascade applies.
77
+ *
52
78
  * The precedence cascade is intentionally duplicated with `active()`:
53
79
  * the only true dedupe options either (a) add an extra config read on
54
80
  * every `apiRequest` call (regressing the request hot path) or (b)
@@ -56,4 +82,4 @@ export declare function createOutlineTokenStore(): OutlineTokenStore;
56
82
  * invites is guarded by the `getActiveTokenSource` regression test that
57
83
  * asserts v2-record presence wins over a lingering v1 `api_token`.
58
84
  */
59
- export declare function getActiveTokenSource(): Promise<'env' | 'secure-store' | 'config-file'>;
85
+ export declare function getActiveTokenSource(ref?: AccountRef): Promise<'env' | 'secure-store' | 'config-file'>;
@@ -1,4 +1,5 @@
1
1
  import { createInterface } from 'node:readline/promises';
2
+ import { Writable } from 'node:stream';
2
3
  import { createKeyringTokenStore, createPkceProvider, } from '@doist/cli-core/auth';
3
4
  import { fetchWithRetry } from '../transport/fetch-with-retry.js';
4
5
  import { apiRequest } from './api.js';
@@ -6,35 +7,82 @@ import { LEGACY_CLEAR_PAYLOAD, SECURE_STORE_SERVICE, TOKEN_ENV_VAR } from './aut
6
7
  import { getBaseUrl, getOAuthClientId } from './auth.js';
7
8
  import { getConfig, getConfigPath, updateConfig } from './config.js';
8
9
  import { runMigrateLegacyAuth } from './migrate-auth.js';
9
- import { makeOutlineAccount } from './outline-account.js';
10
- import { createOutlineUserRecordStore, getDefaultUserRecord } from './user-records.js';
11
- function stringFlag(flags, key) {
12
- const value = flags[key];
10
+ import { makeOutlineAccount, matchOutlineAccount } from './outline-account.js';
11
+ import { createOutlineUserRecordStore, getDefaultUserRecord, recordForRef } from './user-records.js';
12
+ export { matchOutlineAccount } from './outline-account.js';
13
+ function stringFlag(value) {
13
14
  return typeof value === 'string' && value.trim() ? value.trim() : undefined;
14
15
  }
15
- async function prompt(question) {
16
- // Output to stderr so `--json` / `--ndjson` envelopes on stdout stay clean.
17
- const rl = createInterface({ input: process.stdin, output: process.stderr });
16
+ /**
17
+ * Read a line from stdin, prompting on stderr so `--json` / `--ndjson`
18
+ * envelopes on stdout stay clean. With `hidden: true` the typed characters are
19
+ * masked (for secrets): the prompt label is shown, then readline's echo is
20
+ * routed through a muted `Writable` so keystrokes don't leak to the terminal.
21
+ */
22
+ export async function prompt(question, options = {}) {
23
+ if (!options.hidden) {
24
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
25
+ try {
26
+ return (await rl.question(question)).trim();
27
+ }
28
+ finally {
29
+ rl.close();
30
+ }
31
+ }
32
+ // Echo the prompt label, then mute so typed characters aren't shown. A muted
33
+ // `Writable` (public API) avoids poking readline's private `_writeToOutput`.
34
+ let muted = false;
35
+ const output = new Writable({
36
+ write(chunk, _encoding, callback) {
37
+ if (!muted)
38
+ process.stderr.write(chunk);
39
+ callback();
40
+ },
41
+ });
42
+ const rl = createInterface({ input: process.stdin, output, terminal: true });
18
43
  try {
19
- return (await rl.question(question)).trim();
44
+ const pending = rl.question(question);
45
+ muted = true;
46
+ const answer = (await pending).trim();
47
+ process.stderr.write('\n');
48
+ return answer;
20
49
  }
21
50
  finally {
22
51
  rl.close();
23
52
  }
24
53
  }
25
- async function resolveBaseUrl(flags) {
26
- const fromFlag = stringFlag(flags, 'baseUrl');
54
+ export async function resolveBaseUrl(options = {}) {
55
+ const fromFlag = stringFlag(options.baseUrl);
27
56
  if (fromFlag)
28
57
  return fromFlag.replace(/\/$/, '');
29
58
  const fromEnv = process.env.OUTLINE_URL?.trim();
30
59
  if (fromEnv)
31
60
  return fromEnv.replace(/\/$/, '');
32
61
  const configured = await getBaseUrl();
62
+ // Never block a non-interactive shell (CI, piped input) on a prompt —
63
+ // `auth token` is meant to be scriptable, so fall back to the default.
64
+ if (!process.stdin.isTTY)
65
+ return configured.replace(/\/$/, '');
33
66
  const answered = await prompt(`Base URL (default: ${configured}): `);
34
67
  return (answered || configured).replace(/\/$/, '');
35
68
  }
69
+ /**
70
+ * Verify a token by probing `auth.info` and map the response to the persisted
71
+ * account shape. Shared by the OAuth `validate` hook and `auth token` so the
72
+ * identity-resolution rules live in one place.
73
+ */
74
+ export async function identifyAccount(token, baseUrl, oauthClientId) {
75
+ const { data } = await apiRequest('auth.info', {}, { token, baseUrl });
76
+ return makeOutlineAccount({
77
+ id: data.user.id,
78
+ label: data.user.name,
79
+ baseUrl,
80
+ oauthClientId,
81
+ teamName: data.team.name,
82
+ });
83
+ }
36
84
  async function resolveClientId(flags) {
37
- const fromFlag = stringFlag(flags, 'clientId');
85
+ const fromFlag = stringFlag(flags.clientId);
38
86
  if (fromFlag)
39
87
  return fromFlag;
40
88
  const existing = await getOAuthClientId();
@@ -83,28 +131,11 @@ export function createOutlineAuthProvider() {
83
131
  },
84
132
  validate: async ({ token, handshake }) => {
85
133
  const base = baseUrl ?? (await getBaseUrl());
86
- const { data } = await apiRequest('auth.info', {}, { token, baseUrl: base });
87
- return makeOutlineAccount({
88
- id: data.user.id,
89
- label: data.user.name,
90
- baseUrl: base,
91
- oauthClientId: handshake.clientId,
92
- teamName: data.team.name,
93
- });
134
+ return identifyAccount(token, base, handshake.clientId);
94
135
  },
95
136
  fetchImpl: outlineFetch,
96
137
  });
97
138
  }
98
- /**
99
- * Accepts the Outline user UUID or display name. Id matches are
100
- * case-sensitive (UUIDs are canonical); label matches are
101
- * case-insensitive so users can pass the name they see in `auth status`.
102
- */
103
- export function matchOutlineAccount(account, ref) {
104
- if (account.id === ref)
105
- return true;
106
- return account.label.toLowerCase() === ref.toLowerCase();
107
- }
108
139
  /** True when the v2 store is the authoritative source. */
109
140
  function migrationIsConclusive(result) {
110
141
  return (result.status === 'migrated' ||
@@ -190,13 +221,41 @@ export async function isLegacyAuthActive() {
190
221
  * propagates it so a failed logout fails loudly instead of leaving the
191
222
  * user authenticated via the legacy fallback.
192
223
  */
193
- export function createOutlineTokenStore() {
194
- const inner = createKeyringTokenStore({
224
+ /** The bare cli-core keyring store (v2 records only — no env/legacy fallback). */
225
+ function createInnerStore() {
226
+ return createKeyringTokenStore({
195
227
  serviceName: SECURE_STORE_SERVICE,
196
228
  userRecords: createOutlineUserRecordStore(),
197
229
  recordsLocation: getConfigPath(),
198
230
  matchAccount: matchOutlineAccount,
199
231
  });
232
+ }
233
+ /**
234
+ * Authoritatively classify the active credential without re-deriving the
235
+ * cascade from membership heuristics. Mirrors `active()`'s precedence — env
236
+ * (only when no explicit ref) → stored v2 → legacy snapshot — but reports
237
+ * *which* branch matched, so `ol account current` can render the right shape.
238
+ *
239
+ * The v2 lookup uses the bare keyring store (no legacy fallback) and matches by
240
+ * `ref`, so a renamed legacy snapshot sharing a UUID with a v2 record can't be
241
+ * misreported as `stored`: a `--user <old-name>` that the v2 record no longer
242
+ * matches falls through to the legacy branch.
243
+ */
244
+ export async function resolveActiveAccountSource(ref) {
245
+ if (ref === undefined && process.env[TOKEN_ENV_VAR]?.trim())
246
+ return { source: 'env' };
247
+ await ensureMigrated();
248
+ const stored = await createInnerStore().activeAccount(ref);
249
+ if (stored)
250
+ return { source: 'stored', account: stored.account, isDefault: stored.isDefault };
251
+ const legacy = await readLegacyTokenSnapshot();
252
+ if (legacy && (ref === undefined || matchOutlineAccount(legacy.account, ref))) {
253
+ return { source: 'legacy' };
254
+ }
255
+ return null;
256
+ }
257
+ export function createOutlineTokenStore() {
258
+ const inner = createInnerStore();
200
259
  async function migrationIsInconclusive() {
201
260
  const result = await ensureMigrated(); // memoised
202
261
  return result === null || !migrationIsConclusive(result);
@@ -239,6 +298,9 @@ export function createOutlineTokenStore() {
239
298
  active(ref) {
240
299
  return resolveAuth(ref, () => inner.active(ref), (token, account) => ({ token, account }));
241
300
  },
301
+ activeAccount(ref) {
302
+ return resolveAuth(ref, () => inner.activeAccount(ref), (_token, account) => ({ account, isDefault: true }));
303
+ },
242
304
  activeBundle(ref) {
243
305
  return resolveAuth(ref, () => inner.activeBundle(ref), (token, account) => ({ account, bundle: { accessToken: token } }));
244
306
  },
@@ -250,12 +312,13 @@ export function createOutlineTokenStore() {
250
312
  },
251
313
  async clear(ref) {
252
314
  await ensureMigrated();
253
- await inner.clear(ref);
315
+ const cleared = await inner.clear(ref);
254
316
  if (await migrationIsInconclusive()) {
255
317
  // Must succeed: v2 is now empty, so a surviving legacy
256
318
  // token would shadow the logout via the fallback.
257
319
  await dischargeLegacyState();
258
320
  }
321
+ return cleared;
259
322
  },
260
323
  async list() {
261
324
  await ensureMigrated();
@@ -274,6 +337,11 @@ export function createOutlineTokenStore() {
274
337
  * order — env → v2 record → legacy plaintext — so the answer can never
275
338
  * contradict the token the runtime is actually using.
276
339
  *
340
+ * Pass `ref` to report the source of a specific `--user` account (used by
341
+ * `auth status --user <ref>`): a ref selects the matching record and skips the
342
+ * env short-circuit, so the source reflects the account being shown rather
343
+ * than an ambient env token. Without a ref the default/env cascade applies.
344
+ *
277
345
  * The precedence cascade is intentionally duplicated with `active()`:
278
346
  * the only true dedupe options either (a) add an extra config read on
279
347
  * every `apiRequest` call (regressing the request hot path) or (b)
@@ -281,14 +349,14 @@ export function createOutlineTokenStore() {
281
349
  * invites is guarded by the `getActiveTokenSource` regression test that
282
350
  * asserts v2-record presence wins over a lingering v1 `api_token`.
283
351
  */
284
- export async function getActiveTokenSource() {
285
- if (process.env[TOKEN_ENV_VAR]?.trim())
352
+ export async function getActiveTokenSource(ref) {
353
+ if (ref === undefined && process.env[TOKEN_ENV_VAR]?.trim())
286
354
  return 'env';
287
355
  const config = await getConfig();
288
- const record = getDefaultUserRecord(config);
356
+ const record = ref !== undefined ? recordForRef(config, ref) : getDefaultUserRecord(config);
289
357
  if (record)
290
358
  return record.fallbackToken ? 'config-file' : 'secure-store';
291
- if (config.api_token?.trim())
359
+ if (ref === undefined && config.api_token?.trim())
292
360
  return 'config-file';
293
361
  return 'secure-store';
294
362
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/lib/auth-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/lib/auth-provider.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,14 @@ import { TOKEN_ENV_VAR } from './auth-constants.js';
3
3
  import { getActiveTokenSource } from './auth-provider.js';
4
4
  import { CliError } from './errors.js';
5
5
  import { type OutlineAccount } from './outline-account.js';
6
+ /** Base URL + optional refresh handshake for a single request. */
7
+ type RequestContext = {
8
+ baseUrl: string;
9
+ handshake?: {
10
+ baseUrl: string;
11
+ clientId: string;
12
+ };
13
+ };
6
14
  export { SecureStoreUnavailableError, getActiveTokenSource, TOKEN_ENV_VAR };
7
15
  export declare class NoTokenError extends CliError {
8
16
  constructor();
@@ -10,11 +18,13 @@ export declare class NoTokenError extends CliError {
10
18
  /**
11
19
  * Best-effort proactive rotation before a request. Returns the token to use
12
20
  * (the rotated one, or the current one if no rotation was needed) so the
13
- * caller doesn't re-read the store; `undefined` when the default account
14
- * isn't refreshable (no refresh token / env / failure) — the caller then
15
- * falls back to `getApiToken()` and the 401 path stays authoritative.
21
+ * caller doesn't re-read the store; `undefined` when the account isn't
22
+ * refreshable (no refresh token / env / failure) — the caller then falls back
23
+ * to `getApiToken()` and the 401 path stays authoritative. The wrapped store
24
+ * scopes the bundle to any global `--user`; `handshake` pins the token
25
+ * endpoint to that account's instance + client id.
16
26
  */
17
- export declare function proactiveRefresh(): Promise<string | undefined>;
27
+ export declare function proactiveRefresh(handshake?: RequestContext['handshake']): Promise<string | undefined>;
18
28
  /**
19
29
  * Refresh the *selected* account (not the default) for `auth status`, returning
20
30
  * its current-or-rotated token. Scoped via the account's id + base URL/client
@@ -28,7 +38,7 @@ export declare function refreshedTokenForStatus(account: OutlineAccount, fallbac
28
38
  * caller retries once). A rejected/absent refresh token surfaces as
29
39
  * `NoTokenError` (re-login); a transient failure propagates unchanged.
30
40
  */
31
- export declare function reactiveRefresh(): Promise<boolean>;
41
+ export declare function reactiveRefresh(handshake?: RequestContext['handshake']): Promise<boolean>;
32
42
  /**
33
43
  * Read the active token. Hot path: when `OUTLINE_API_TOKEN` is set we
34
44
  * return it directly without consulting the token store, since
@@ -38,14 +48,25 @@ export declare function reactiveRefresh(): Promise<boolean>;
38
48
  */
39
49
  export declare function getApiToken(): Promise<string>;
40
50
  /**
41
- * Base URL cascade: env var → default user record (v2) → legacy
42
- * `base_url` config (v1) → built-in default. The record takes priority
43
- * over the legacy slot so post-migration logins keep defaulting to the
44
- * same Outline instance.
51
+ * Account-agnostic base URL cascade: env var → default user record (v2) →
52
+ * legacy `base_url` config (v1) → built-in default. Deliberately ignores the
53
+ * global `--user` selector so the login flow (which resolves its default
54
+ * prompt through here) isn't skewed by account selection; the request path
55
+ * applies `--user` separately via {@link getRequestContext}.
45
56
  */
46
57
  export declare function getBaseUrl(): Promise<string>;
47
58
  /**
48
- * OAuth client id cascade: env var → default user record (v2) → legacy
49
- * `oauth_client_id` config (v1) → undefined (caller prompts).
59
+ * Account-agnostic OAuth client id cascade: env var → default user record
60
+ * (v2) → legacy `oauth_client_id` config (v1) → undefined (caller prompts).
61
+ * Like {@link getBaseUrl}, ignores `--user` so login stays default-driven.
50
62
  */
51
63
  export declare function getOAuthClientId(): Promise<string | undefined>;
64
+ /**
65
+ * Resolve the base URL — and, when a `--user` account is selected, the refresh
66
+ * handshake (its instance + client id) — for a single managed request. Falls
67
+ * back to the account-agnostic {@link getBaseUrl} cascade without `--user`.
68
+ * An unknown ref resolves no handshake and the default base URL; the wrapped
69
+ * token store then raises `ACCOUNT_NOT_FOUND` when the token is read, so the
70
+ * request never fires.
71
+ */
72
+ export declare function getRequestContext(): Promise<RequestContext>;
package/dist/lib/auth.js CHANGED
@@ -3,8 +3,10 @@ import { TOKEN_ENV_VAR } from './auth-constants.js';
3
3
  import { createOutlineAuthProvider, createOutlineTokenStore, getActiveTokenSource, } from './auth-provider.js';
4
4
  import { getConfig, getConfigPath } from './config.js';
5
5
  import { CliError } from './errors.js';
6
+ import { getRequestedUserRef } from './global-args.js';
6
7
  import { DEFAULT_BASE_URL } from './outline-account.js';
7
- import { getDefaultUserRecord } from './user-records.js';
8
+ import { getDefaultUserRecord, recordForRef } from './user-records.js';
9
+ import { withUserRefAware } from './user-ref-store.js';
8
10
  export { SecureStoreUnavailableError, getActiveTokenSource, TOKEN_ENV_VAR };
9
11
  export class NoTokenError extends CliError {
10
12
  constructor() {
@@ -19,10 +21,24 @@ export class NoTokenError extends CliError {
19
21
  */
20
22
  let storeSingleton;
21
23
  function tokenStore() {
24
+ // Wrapped so a global `--user <ref>` flows into every no-ref store read on
25
+ // the request hot path (token lookup + refresh). Without `--user`,
26
+ // `getRequestedUserRef()` is undefined and the wrap is a pass-through.
22
27
  if (!storeSingleton)
23
- storeSingleton = createOutlineTokenStore();
28
+ storeSingleton = withUserRefAware(createOutlineTokenStore());
24
29
  return storeSingleton;
25
30
  }
31
+ /**
32
+ * The `--user` ref to apply on the request path, or `undefined` when an
33
+ * `OUTLINE_API_TOKEN` is set — an env token wins outright, so base URL and
34
+ * client id resolve from the default account rather than the named one,
35
+ * keeping token / base URL / client id pinned to the same source.
36
+ */
37
+ function requestPathUserRef() {
38
+ if (process.env[TOKEN_ENV_VAR]?.trim())
39
+ return undefined;
40
+ return getRequestedUserRef();
41
+ }
26
42
  let providerSingleton;
27
43
  function authProvider() {
28
44
  if (!providerSingleton)
@@ -38,16 +54,19 @@ function refreshLockPath() {
38
54
  /**
39
55
  * Best-effort proactive rotation before a request. Returns the token to use
40
56
  * (the rotated one, or the current one if no rotation was needed) so the
41
- * caller doesn't re-read the store; `undefined` when the default account
42
- * isn't refreshable (no refresh token / env / failure) — the caller then
43
- * falls back to `getApiToken()` and the 401 path stays authoritative.
57
+ * caller doesn't re-read the store; `undefined` when the account isn't
58
+ * refreshable (no refresh token / env / failure) — the caller then falls back
59
+ * to `getApiToken()` and the 401 path stays authoritative. The wrapped store
60
+ * scopes the bundle to any global `--user`; `handshake` pins the token
61
+ * endpoint to that account's instance + client id.
44
62
  */
45
- export async function proactiveRefresh() {
63
+ export async function proactiveRefresh(handshake) {
46
64
  try {
47
65
  const { bundle } = await refreshAccessToken({
48
66
  store: tokenStore(),
49
67
  provider: authProvider(),
50
68
  lockPath: refreshLockPath(),
69
+ handshake,
51
70
  });
52
71
  return bundle.accessToken;
53
72
  }
@@ -84,13 +103,14 @@ export async function refreshedTokenForStatus(account, fallback) {
84
103
  * caller retries once). A rejected/absent refresh token surfaces as
85
104
  * `NoTokenError` (re-login); a transient failure propagates unchanged.
86
105
  */
87
- export async function reactiveRefresh() {
106
+ export async function reactiveRefresh(handshake) {
88
107
  try {
89
108
  const result = await refreshAccessToken({
90
109
  store: tokenStore(),
91
110
  provider: authProvider(),
92
111
  lockPath: refreshLockPath(),
93
112
  force: true,
113
+ handshake,
94
114
  });
95
115
  return result.rotated;
96
116
  }
@@ -122,10 +142,11 @@ export async function getApiToken() {
122
142
  return snapshot.token;
123
143
  }
124
144
  /**
125
- * Base URL cascade: env var → default user record (v2) → legacy
126
- * `base_url` config (v1) → built-in default. The record takes priority
127
- * over the legacy slot so post-migration logins keep defaulting to the
128
- * same Outline instance.
145
+ * Account-agnostic base URL cascade: env var → default user record (v2) →
146
+ * legacy `base_url` config (v1) → built-in default. Deliberately ignores the
147
+ * global `--user` selector so the login flow (which resolves its default
148
+ * prompt through here) isn't skewed by account selection; the request path
149
+ * applies `--user` separately via {@link getRequestContext}.
129
150
  */
130
151
  export async function getBaseUrl() {
131
152
  const envUrl = process.env.OUTLINE_URL;
@@ -140,8 +161,9 @@ export async function getBaseUrl() {
140
161
  return DEFAULT_BASE_URL;
141
162
  }
142
163
  /**
143
- * OAuth client id cascade: env var → default user record (v2) → legacy
144
- * `oauth_client_id` config (v1) → undefined (caller prompts).
164
+ * Account-agnostic OAuth client id cascade: env var → default user record
165
+ * (v2) → legacy `oauth_client_id` config (v1) → undefined (caller prompts).
166
+ * Like {@link getBaseUrl}, ignores `--user` so login stays default-driven.
145
167
  */
146
168
  export async function getOAuthClientId() {
147
169
  const envClientId = process.env.OUTLINE_OAUTH_CLIENT_ID;
@@ -153,4 +175,23 @@ export async function getOAuthClientId() {
153
175
  return record.account.oauthClientId;
154
176
  return config.oauth_client_id;
155
177
  }
178
+ /**
179
+ * Resolve the base URL — and, when a `--user` account is selected, the refresh
180
+ * handshake (its instance + client id) — for a single managed request. Falls
181
+ * back to the account-agnostic {@link getBaseUrl} cascade without `--user`.
182
+ * An unknown ref resolves no handshake and the default base URL; the wrapped
183
+ * token store then raises `ACCOUNT_NOT_FOUND` when the token is read, so the
184
+ * request never fires.
185
+ */
186
+ export async function getRequestContext() {
187
+ const ref = requestPathUserRef();
188
+ if (ref !== undefined) {
189
+ const record = recordForRef(await getConfig(), ref);
190
+ if (record) {
191
+ const baseUrl = record.account.baseUrl.replace(/\/$/, '');
192
+ return { baseUrl, handshake: { baseUrl, clientId: record.account.oauthClientId } };
193
+ }
194
+ }
195
+ return { baseUrl: await getBaseUrl() };
196
+ }
156
197
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { CliError as CoreCliError, type CliErrorCode, type ErrorType } from '@doist/cli-core';
2
2
  export { CoreCliError as BaseCliError };
3
3
  export type { ErrorType } from '@doist/cli-core';
4
- export type ErrorCode = 'ACCOUNT_NOT_FOUND' | 'AUTH_VERIFICATION_FAILED' | 'CONFIRMATION_REQUIRED' | 'CONFLICTING_OPTIONS' | 'INVALID_PARENT' | 'MISSING_OPTION' | 'NO_TOKEN' | 'OAUTH_CALLBACK_PORT_INVALID' | 'OAUTH_CALLBACK_SERVER_FAILED' | 'OAUTH_CLIENT_ID_REQUIRED' | 'OAUTH_LOGIN_FAILED' | 'UNKNOWN_AGENT';
4
+ export type ErrorCode = 'ACCOUNT_NOT_FOUND' | 'AUTH_VERIFICATION_FAILED' | 'CONFIRMATION_REQUIRED' | 'CONFLICTING_OPTIONS' | 'INVALID_PARENT' | 'INVALID_USER_FLAG' | 'MISSING_OPTION' | 'NO_TOKEN' | 'OAUTH_CALLBACK_PORT_INVALID' | 'OAUTH_CALLBACK_SERVER_FAILED' | 'OAUTH_CLIENT_ID_REQUIRED' | 'OAUTH_LOGIN_FAILED' | 'UNKNOWN_AGENT';
5
5
  export declare class CliError extends CoreCliError<ErrorCode> {
6
6
  constructor(code: ErrorCode | CliErrorCode, message: string, hints?: string[], type?: ErrorType);
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAqC,MAAM,iBAAiB,CAAA;AAE7F,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,CAAA;AAiBvC,MAAM,OAAO,QAAS,SAAQ,YAAuB;IACjD,YACI,IAA8B,EAC9B,OAAe,EACf,KAAgB,EAChB,OAAkB,OAAO;QAEzB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACzC,CAAC;CACJ;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAqC,MAAM,iBAAiB,CAAA;AAE7F,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,CAAA;AAkBvC,MAAM,OAAO,QAAS,SAAQ,YAAuB;IACjD,YACI,IAA8B,EAC9B,OAAe,EACf,KAAgB,EAChB,OAAkB,OAAO;QAEzB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACzC,CAAC;CACJ;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA"}
@@ -3,3 +3,28 @@ export declare const resetGlobalArgs: () => void;
3
3
  export declare const isAccessible: () => boolean;
4
4
  export declare const shouldDisableSpinner: () => boolean;
5
5
  export declare function isJsonMode(): boolean;
6
+ /**
7
+ * Pre-subcommand `ol --user <ref>` selector. cli-core's `parseGlobalArgs`
8
+ * already extracts it from argv; `applyUserSelector` strips the flag before
9
+ * Commander parses, so this reads the value off the warmed cache.
10
+ */
11
+ export declare function getRequestedUserRef(): string | undefined;
12
+ /**
13
+ * Guard a root `--user` against the two common footguns before it's stripped:
14
+ * a value-less flag (`--user`, `--user=`) and a forgotten value where the next
15
+ * token is actually a command (`ol --user document list`). Pure — pass the
16
+ * pre-strip argv and the set of registered command names. Silent when `--user`
17
+ * is absent, or when it appears *after* a command (a late flag is left for
18
+ * Commander to reject as an unknown option, matching what `stripUserFlag`
19
+ * leaves in argv).
20
+ */
21
+ export declare function validateRootUserFlag(argv: string[], knownCommands: ReadonlySet<string>): void;
22
+ /**
23
+ * Entrypoint wiring for the global `--user` selector, kept here so the
24
+ * validate → warm-cache → strip order is exercised by tests rather than living
25
+ * untested in `src/index.ts`. Validates the root flag, warms the global-args
26
+ * cache off the *original* argv (so the ref survives), then rewrites
27
+ * `process.argv` with the flag stripped for Commander. Throws `INVALID_USER_FLAG`
28
+ * on a malformed root flag.
29
+ */
30
+ export declare function applyUserSelector(knownCommands: ReadonlySet<string>): void;