@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
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE7E,MAAM,gBAAgB,GAAG,4BAA4B,CAAA;AAErD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;IAC9C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAE7B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;IAChC,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC,SAAS,CAAA;IAE7C,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAA;AAC9F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IACtC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAE5C,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;IAChC,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAE9D,OAAO,gBAAgB,CAAA;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAA;IACvD,IAAI,WAAW;QAAE,OAAO,WAAW,CAAA;IAEnC,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;IAChC,OAAO,MAAM,CAAC,eAAe,CAAA;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAChC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAA;IAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;IAChC,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,QAAQ,CAAA;IACrC,OAAO,IAAI,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,KAAa,EACb,OAAgB,EAChB,aAAsB;IAEtB,MAAM,OAAO,GAAoB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IACrD,IAAI,OAAO;QAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC1D,IAAI,aAAa;QAAE,OAAO,CAAC,eAAe,GAAG,aAAa,CAAA;IAC1D,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,MAAM,QAAQ,GAAG,MAAM,SAAS,EAAE,CAAA;IAClC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAA;IAClE,KAAK,SAAS,CAAA;IACd,KAAK,QAAQ,CAAA;IACb,KAAK,eAAe,CAAA;IACpB,MAAM,SAAS,CAAC,IAAc,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EACH,uBAAuB,EACvB,oBAAoB,GAEvB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,aAAa,EAAE,CAAA;AAE3E,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACtC;QACI,KAAK,CACD,UAAU,EACV,2BAA2B,aAAa,gCAAgC,EACxE,CAAC,OAAO,aAAa,wBAAwB,CAAC,EAC9C,MAAM,CACT,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC9B,CAAC;CACJ;AAED;;;;GAIG;AACH,IAAI,cAA6C,CAAA;AACjD,SAAS,UAAU;IACf,IAAI,CAAC,cAAc;QAAE,cAAc,GAAG,uBAAuB,EAAE,CAAA;IAC/D,OAAO,cAAc,CAAA;AACzB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAA;IACnD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC,MAAM,EAAE,CAAA;IAC5C,IAAI,CAAC,QAAQ,EAAE,KAAK;QAAE,MAAM,IAAI,YAAY,EAAE,CAAA;IAC9C,OAAO,QAAQ,CAAC,KAAK,CAAA;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IACtC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAE5C,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,MAAM,EAAE,OAAO,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC7E,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC9D,OAAO,gBAAgB,CAAA;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAA;IACvD,IAAI,WAAW;QAAE,OAAO,WAAW,CAAA;IAEnC,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,MAAM,EAAE,OAAO,CAAC,aAAa;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,CAAA;IACtE,OAAO,MAAM,CAAC,eAAe,CAAA;AACjC,CAAC"}
@@ -1,8 +1,31 @@
1
1
  import { type CoreConfig } from '@doist/cli-core';
2
+ /**
3
+ * One row of the `users[]` array. `id` is the Outline user UUID. `token` is
4
+ * a plaintext fallback persisted only when the OS keyring is unavailable at
5
+ * write time (WSL, headless Linux, missing native binary).
6
+ */
7
+ export type StoredUser = {
8
+ id: string;
9
+ name: string;
10
+ base_url?: string;
11
+ oauth_client_id?: string;
12
+ team_name?: string;
13
+ token?: string;
14
+ };
2
15
  export type Config = CoreConfig & {
16
+ config_version?: number;
17
+ users?: StoredUser[];
18
+ default_user_id?: string;
19
+ /**
20
+ * Legacy v1 single-user fields. Read by the migration helper; removed
21
+ * from disk by `cleanupLegacyConfig` after the v2 record write succeeds.
22
+ */
3
23
  api_token?: string;
4
24
  base_url?: string;
5
25
  oauth_client_id?: string;
26
+ auth_user_id?: string;
27
+ auth_user_name?: string;
28
+ auth_team_name?: string;
6
29
  };
7
30
  /**
8
31
  * Resolve the canonical config path on every call. Caching at module load
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,IAAI,iBAAiB,EAClC,UAAU,IAAI,cAAc,EAC5B,YAAY,IAAI,gBAAgB,EAChC,WAAW,IAAI,eAAe,GACjC,MAAM,iBAAiB,CAAA;AAExB,MAAM,QAAQ,GAAG,aAAa,CAAA;AAQ9B;;;;GAIG;AACH,MAAM,UAAU,aAAa;IACzB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,OAAO,cAAc,CAAS,aAAa,EAAE,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc;IAC1C,OAAO,eAAe,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAwB;IACvD,OAAO,gBAAgB,CAAS,aAAa,EAAE,EAAE,OAAO,CAAC,CAAA;AAC7D,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,IAAI,iBAAiB,EAClC,UAAU,IAAI,cAAc,EAC5B,YAAY,IAAI,gBAAgB,EAChC,WAAW,IAAI,eAAe,GACjC,MAAM,iBAAiB,CAAA;AAExB,MAAM,QAAQ,GAAG,aAAa,CAAA;AAiC9B;;;;GAIG;AACH,MAAM,UAAU,aAAa;IACzB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,OAAO,cAAc,CAAS,aAAa,EAAE,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc;IAC1C,OAAO,eAAe,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAwB;IACvD,OAAO,gBAAgB,CAAS,aAAa,EAAE,EAAE,OAAO,CAAC,CAAA;AAC7D,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { CliError as CoreCliError, type CliErrorCode, type ErrorType } from '@doist/cli-core';
2
- export type ErrorCode = 'AUTH_VERIFICATION_FAILED' | 'CONFIRMATION_REQUIRED' | 'CONFLICTING_OPTIONS' | 'INVALID_PARENT' | 'MISSING_OPTION' | 'OAUTH_CALLBACK_PORT_INVALID' | 'OAUTH_CALLBACK_SERVER_FAILED' | 'OAUTH_CLIENT_ID_REQUIRED' | 'OAUTH_LOGIN_FAILED' | 'UNKNOWN_AGENT';
2
+ export { CoreCliError as BaseCliError };
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';
3
5
  export declare class CliError extends CoreCliError<ErrorCode> {
4
6
  constructor(code: ErrorCode | CliErrorCode, message: string, hints?: string[], type?: ErrorType);
5
7
  }
@@ -1,4 +1,5 @@
1
1
  import { CliError as CoreCliError } from '@doist/cli-core';
2
+ export { CoreCliError as BaseCliError };
2
3
  export class CliError extends CoreCliError {
3
4
  constructor(code, message, hints, type = 'error') {
4
5
  super(code, message, { hints, type });
@@ -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;AAc7F,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;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"}
@@ -2,3 +2,4 @@ export declare const getGlobalArgs: () => import("@doist/cli-core").GlobalArgs;
2
2
  export declare const resetGlobalArgs: () => void;
3
3
  export declare const isAccessible: () => boolean;
4
4
  export declare const shouldDisableSpinner: () => boolean;
5
+ export declare function isJsonMode(): boolean;
@@ -10,4 +10,8 @@ export const shouldDisableSpinner = createSpinnerGate({
10
10
  envVar: 'OL_SPINNER',
11
11
  getArgs: store.get,
12
12
  });
13
+ export function isJsonMode() {
14
+ const args = store.get();
15
+ return args.json || args.ndjson;
16
+ }
13
17
  //# sourceMappingURL=global-args.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-args.js","sourceRoot":"","sources":["../../src/lib/global-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEhG,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAA;AAErC,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAA;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAA;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;IAC7C,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC,GAAG;CACrB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;IAClD,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC,GAAG;CACrB,CAAC,CAAA"}
1
+ {"version":3,"file":"global-args.js","sourceRoot":"","sources":["../../src/lib/global-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEhG,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAA;AAErC,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAA;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAA;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC;IAC7C,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC,GAAG;CACrB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;IAClD,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC,GAAG;CACrB,CAAC,CAAA;AAEF,MAAM,UAAU,UAAU;IACtB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;IACxB,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAA;AACnC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type MigrateAuthResult } from '@doist/cli-core/auth';
2
+ import { type OutlineAccount } from './outline-account.js';
3
+ /**
4
+ * One-time migration of v1 plaintext auth state into the v2 `users[]`
5
+ * shape. Called lazily by `createOutlineTokenStore` on first store access.
6
+ * Idempotent via the `config_version` marker — once set to `>= 2`, this
7
+ * helper short-circuits with `already-migrated`.
8
+ */
9
+ export declare function runMigrateLegacyAuth(options?: {
10
+ silent: boolean;
11
+ }): Promise<MigrateAuthResult<OutlineAccount>>;
@@ -0,0 +1,92 @@
1
+ import { migrateLegacyAuth } from '@doist/cli-core/auth';
2
+ import { fetchWithRetry } from '../transport/fetch-with-retry.js';
3
+ import { LEGACY_CLEAR_PAYLOAD, LEGACY_KEYRING_ACCOUNT, SECURE_STORE_SERVICE, } from './auth-constants.js';
4
+ import { getConfig, updateConfig } from './config.js';
5
+ import { DEFAULT_BASE_URL, makeOutlineAccount } from './outline-account.js';
6
+ import { createOutlineUserRecordStore } from './user-records.js';
7
+ /**
8
+ * Pinned to this migration's target schema. Decoupled from any future
9
+ * `config_version` bump so this helper doesn't re-run for users already
10
+ * on v2 or beyond.
11
+ */
12
+ const V2_SCHEMA_VERSION = 2;
13
+ /**
14
+ * Cap migration's `auth.info` lookup so a stalled connection can't hang
15
+ * the CLI indefinitely on first command. cli-core treats the resulting
16
+ * timeout as `identify-failed`, falling back to the legacy snapshot.
17
+ */
18
+ const IDENTIFY_TIMEOUT_MS = 10_000;
19
+ /**
20
+ * Direct `auth.info` call used only by the migration path. We bypass
21
+ * `apiRequest` (and its spinner + `getApiToken`/`getBaseUrl` cascade) so
22
+ * this module stays out of the runtime auth/token-store import graph and
23
+ * so the silent migration doesn't render a spinner during postinstall-style
24
+ * invocations.
25
+ */
26
+ async function identifyOutlineAccount(token) {
27
+ const config = await getConfig();
28
+ const baseUrl = (config.base_url ?? DEFAULT_BASE_URL).replace(/\/$/, '');
29
+ const res = await fetchWithRetry({
30
+ url: `${baseUrl}/api/auth.info`,
31
+ options: {
32
+ method: 'POST',
33
+ headers: {
34
+ 'Content-Type': 'application/json',
35
+ Authorization: `Bearer ${token}`,
36
+ },
37
+ body: JSON.stringify({}),
38
+ timeout: IDENTIFY_TIMEOUT_MS,
39
+ },
40
+ });
41
+ if (!res.ok) {
42
+ throw new Error(`auth.info failed: ${res.status} ${res.statusText}`);
43
+ }
44
+ const json = await res.json();
45
+ return makeOutlineAccount({
46
+ id: json.data.user.id,
47
+ label: json.data.user.name,
48
+ baseUrl,
49
+ oauthClientId: config.oauth_client_id ?? '',
50
+ teamName: json.data.team.name,
51
+ });
52
+ }
53
+ /**
54
+ * One-time migration of v1 plaintext auth state into the v2 `users[]`
55
+ * shape. Called lazily by `createOutlineTokenStore` on first store access.
56
+ * Idempotent via the `config_version` marker — once set to `>= 2`, this
57
+ * helper short-circuits with `already-migrated`.
58
+ */
59
+ export async function runMigrateLegacyAuth(options = { silent: true }) {
60
+ return migrateLegacyAuth({
61
+ serviceName: SECURE_STORE_SERVICE,
62
+ legacyAccount: LEGACY_KEYRING_ACCOUNT,
63
+ userRecords: createOutlineUserRecordStore(),
64
+ hasMigrated: async () => {
65
+ const config = await getConfig();
66
+ // Two signals of "already on v2": the explicit marker, or
67
+ // the structural presence of `users[]` (a fresh install that
68
+ // logged in directly via cli-core writes records without ever
69
+ // setting `config_version`, so the marker alone would
70
+ // miscount that case as "needs migration").
71
+ if ((config.config_version ?? 0) >= V2_SCHEMA_VERSION)
72
+ return true;
73
+ if ((config.users ?? []).length > 0)
74
+ return true;
75
+ return false;
76
+ },
77
+ markMigrated: async () => {
78
+ await updateConfig({ config_version: V2_SCHEMA_VERSION });
79
+ },
80
+ loadLegacyPlaintextToken: async () => {
81
+ const config = await getConfig();
82
+ return config.api_token?.trim() || null;
83
+ },
84
+ identifyAccount: identifyOutlineAccount,
85
+ cleanupLegacyConfig: async () => {
86
+ await updateConfig(LEGACY_CLEAR_PAYLOAD);
87
+ },
88
+ silent: options.silent,
89
+ logPrefix: 'outline-cli',
90
+ });
91
+ }
92
+ //# sourceMappingURL=migrate-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-auth.js","sourceRoot":"","sources":["../../src/lib/migrate-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { AuthAccount } from '@doist/cli-core/auth';
2
+ /**
3
+ * Narrow account shape persisted by the keyring-backed token store.
4
+ *
5
+ * `id` is the Outline user UUID; `label` is the user's display name.
6
+ * `baseUrl` and `oauthClientId` ride along on the account because Outline
7
+ * is self-hostable — every persisted token is tied to the instance it was
8
+ * issued for, not to a global default. `teamName` is rendered by
9
+ * `ol auth status`; it's the only field we cache for display.
10
+ */
11
+ export type OutlineAccount = AuthAccount & {
12
+ id: string;
13
+ label: string;
14
+ baseUrl: string;
15
+ oauthClientId: string;
16
+ teamName?: string;
17
+ };
18
+ export declare const DEFAULT_BASE_URL = "https://app.getoutline.com";
19
+ /** Canonical `OutlineAccount` factory. Applies the `baseUrl` default. */
20
+ export declare function makeOutlineAccount(input: {
21
+ id: string;
22
+ label: string;
23
+ baseUrl?: string;
24
+ oauthClientId?: string;
25
+ teamName?: string;
26
+ }): OutlineAccount;
@@ -0,0 +1,12 @@
1
+ export const DEFAULT_BASE_URL = 'https://app.getoutline.com';
2
+ /** Canonical `OutlineAccount` factory. Applies the `baseUrl` default. */
3
+ export function makeOutlineAccount(input) {
4
+ return {
5
+ id: input.id,
6
+ label: input.label,
7
+ baseUrl: input.baseUrl ?? DEFAULT_BASE_URL,
8
+ oauthClientId: input.oauthClientId ?? '',
9
+ teamName: input.teamName,
10
+ };
11
+ }
12
+ //# sourceMappingURL=outline-account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-account.js","sourceRoot":"","sources":["../../src/lib/outline-account.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAA;AAE5D,yEAAyE;AACzE,MAAM,UAAU,kBAAkB,CAAC,KAMlC;IACG,OAAO;QACH,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,gBAAgB;QAC1C,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,EAAE;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KAC3B,CAAA;AACL,CAAC"}
@@ -1,9 +1,15 @@
1
1
  import { type ViewOptions } from '@doist/cli-core';
2
2
  import type { Pagination } from './api.js';
3
+ import { BaseCliError } from './errors.js';
4
+ type AnyCliError = BaseCliError<string>;
3
5
  export type OutputOptions = ViewOptions & {
4
6
  full?: boolean;
5
7
  };
6
8
  export declare function getOutputOptions(opts: Record<string, unknown>): OutputOptions;
7
9
  export declare function outputItem<T extends object>(item: T, humanFormatter: (item: T) => string, essentialKeys?: (keyof T)[], opts?: OutputOptions): void;
8
10
  export declare function outputList<T extends object>(items: T[], humanFormatter: (item: T) => string, essentialKeys?: (keyof T)[], opts?: OutputOptions, pagination?: Pagination, emptyMessage?: string): void;
11
+ export declare function formatError(error: AnyCliError): string;
9
12
  export declare function formatError(code: string, message: string, hints?: string[]): string;
13
+ export declare function formatErrorJson(error: AnyCliError): string;
14
+ export declare function formatErrorJson(code: string, message: string, hints?: string[]): string;
15
+ export {};
@@ -1,5 +1,6 @@
1
1
  import { formatJson, formatNdjson, printEmpty } from '@doist/cli-core';
2
2
  import chalk from 'chalk';
3
+ import { BaseCliError } from './errors.js';
3
4
  export function getOutputOptions(opts) {
4
5
  return {
5
6
  json: Boolean(opts.json),
@@ -53,14 +54,25 @@ function pick(obj, keys) {
53
54
  }
54
55
  return result;
55
56
  }
56
- export function formatError(code, message, hints) {
57
- const lines = [`Error: ${code}`, message];
58
- if (hints && hints.length > 0) {
57
+ function toCliError(codeOrError, message, hints) {
58
+ if (typeof codeOrError === 'string') {
59
+ return new BaseCliError(codeOrError, message ?? '', { hints });
60
+ }
61
+ return codeOrError;
62
+ }
63
+ export function formatError(codeOrError, message, hints) {
64
+ const err = toCliError(codeOrError, message, hints);
65
+ const lines = [`Error: ${err.code}`, err.message];
66
+ if (err.hints && err.hints.length > 0) {
59
67
  lines.push('');
60
- for (const hint of hints) {
68
+ for (const hint of err.hints) {
61
69
  lines.push(` - ${hint}`);
62
70
  }
63
71
  }
64
72
  return chalk.red(lines.join('\n'));
65
73
  }
74
+ export function formatErrorJson(codeOrError, message, hints) {
75
+ const err = toCliError(codeOrError, message, hints);
76
+ return JSON.stringify({ error: { code: err.code, message: err.message, hints: err.hints } });
77
+ }
66
78
  //# sourceMappingURL=output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export declare const SKILL_NAME = "outline-cli";
2
2
  export declare const SKILL_DESCRIPTION = "Search and manage Outline wiki documents and collections via the ol CLI";
3
- export declare const SKILL_CONTENT = "# Outline CLI (ol)\n\nUse this skill when the user wants to interact with their Outline wiki/knowledge base.\n\n## Quick Reference\n\n- `ol search \"query\"` - Search documents\n- `ol doc list` - List documents\n- `ol doc get <id>` - Read a document\n- `ol doc open <id>` - Open document in browser\n- `ol doc create --title \"Title\" --collection <id>` - Create document\n- `ol col list` - List collections\n\n## Output Formats\n\nAll list commands support:\n- `--json` - JSON output (essential fields)\n- `--ndjson` - Newline-delimited JSON (streaming)\n- `--full` - Include all fields in JSON\n\n## Document References\n\nDocuments can be referenced by:\n- URL ID (the slug suffix after the last hyphen)\n- Full Outline URL (auto-extracted)\n- Document ID\n\n## Commands\n\n### Search\n```bash\nol search \"query\"\nol search \"query\" --limit 10\nol search \"query\" --collection <id>\nol search \"query\" --status published\nol search \"query\" --json\n```\n\n### Documents\n```bash\nol doc list --collection <id> --limit 25\nol doc list --sort title --direction ASC\nol doc get <id> # Rendered markdown\nol doc get <id> --raw # Raw markdown\nol doc get <id> --json\nol doc open <id> # Open in browser\nol doc create --title \"Title\" --collection <id> --text \"# Content\"\nol doc create --title \"Title\" --parent <ref> --text \"# Content\" # Nest under parent (collection inferred)\nol doc create --title \"Title\" --collection <id> --file ./doc.md\nol doc update <id> --title \"New Title\"\nol doc update <id> --file ./updated.md\nol doc move <id> --collection <target-id> # Move to collection root\nol doc move <id> --parent <ref> # Nest under parent (collection inferred)\nol doc archive <id>\nol doc unarchive <id>\nol doc delete <id> --confirm\n```\n\n### Collections\n```bash\nol col list\nol col get <id>\nol col create --name \"Name\" --description \"Desc\" --color \"#hex\"\nol col create --name \"Private\" --private\nol col update <id> --name \"New Name\"\nol col delete <id> --confirm\n```\n\n### Authentication\n```bash\nol auth login # Configure API token and base URL\nol auth status # Show current auth state\nol auth logout # Clear saved credentials\n```\n\n### Update & Changelog\n```bash\nol update # Update CLI to latest version\nol update --check # Check for updates without installing, show channel\nol update --check --json # Check for updates as a JSON envelope\nol update --check --ndjson # Check for updates as NDJSON output\nol update --channel # Show current update channel\nol update switch --stable # Switch to stable release channel\nol update switch --pre-release # Switch to pre-release (next) channel\nol changelog # Show recent changelog entries\nol changelog -n 3 # Show last 3 versions\n```\n\n## Examples\n\n### Find and read a document\n```bash\nol search \"onboarding\" --json | jq '.[0].document.urlId'\nol doc get <urlId>\n```\n\n### Create a document from a file\n```bash\nol doc create --title \"Meeting Notes\" --collection <id> --file ./notes.md --publish\n```\n\n### List all collections and their documents\n```bash\nol col list --json\nol doc list --collection <id> --sort title --direction ASC\n```\n\n### Bulk export with ndjson\n```bash\nol doc list --ndjson --full | jq -r '.title'\n```\n";
3
+ export declare const SKILL_CONTENT = "# Outline CLI (ol)\n\nUse this skill when the user wants to interact with their Outline wiki/knowledge base.\n\n## Quick Reference\n\n- `ol search \"query\"` - Search documents\n- `ol doc list` - List documents\n- `ol doc get <id>` - Read a document\n- `ol doc open <id>` - Open document in browser\n- `ol doc create --title \"Title\" --collection <id>` - Create document\n- `ol col list` - List collections\n\n## Output Formats\n\nAll list commands support:\n- `--json` - JSON output (essential fields)\n- `--ndjson` - Newline-delimited JSON (streaming)\n- `--full` - Include all fields in JSON\n\n## Document References\n\nDocuments can be referenced by:\n- URL ID (the slug suffix after the last hyphen)\n- Full Outline URL (auto-extracted)\n- Document ID\n\n## Commands\n\n### Search\n```bash\nol search \"query\"\nol search \"query\" --limit 10\nol search \"query\" --collection <id>\nol search \"query\" --status published\nol search \"query\" --json\n```\n\n### Documents\n```bash\nol doc list --collection <id> --limit 25\nol doc list --sort title --direction ASC\nol doc get <id> # Rendered markdown\nol doc get <id> --raw # Raw markdown\nol doc get <id> --json\nol doc open <id> # Open in browser\nol doc create --title \"Title\" --collection <id> --text \"# Content\"\nol doc create --title \"Title\" --parent <ref> --text \"# Content\" # Nest under parent (collection inferred)\nol doc create --title \"Title\" --collection <id> --file ./doc.md\nol doc update <id> --title \"New Title\"\nol doc update <id> --file ./updated.md\nol doc move <id> --collection <target-id> # Move to collection root\nol doc move <id> --parent <ref> # Nest under parent (collection inferred)\nol doc archive <id>\nol doc unarchive <id>\nol doc delete <id> --confirm\n```\n\n### Collections\n```bash\nol col list\nol col get <id>\nol col create --name \"Name\" --description \"Desc\" --color \"#hex\"\nol col create --name \"Private\" --private\nol col update <id> --name \"New Name\"\nol col delete <id> --confirm\n```\n\n### Authentication\n```bash\nol auth login # OAuth login (opens browser); prompts for base URL + client ID if needed\nol auth login --base-url <url> # Specify Outline base URL for this login (saved for future use)\nol auth login --client-id <id> # Specify OAuth client ID for this login (saved for future use)\nol auth login --callback-port <port> # Override local OAuth callback port\nol auth login --read-only # Request read-only scopes (where supported by the Outline instance)\nol auth login --json | --ndjson # Machine-readable success envelope\nol auth status # Show current auth state\nol auth status --json | --ndjson # Machine-readable status envelope ({id, team, baseUrl, source})\nol auth logout # Clear saved credentials\nol auth logout --json | --ndjson # Machine-readable logout envelope ({ok: true}; --ndjson is silent)\n```\n\n### Update & Changelog\n```bash\nol update # Update CLI to latest version\nol update --check # Check for updates without installing, show channel\nol update --check --json # Check for updates as a JSON envelope\nol update --check --ndjson # Check for updates as NDJSON output\nol update --channel # Show current update channel\nol update switch --stable # Switch to stable release channel\nol update switch --pre-release # Switch to pre-release (next) channel\nol changelog # Show recent changelog entries\nol changelog -n 3 # Show last 3 versions\n```\n\n## Examples\n\n### Find and read a document\n```bash\nol search \"onboarding\" --json | jq '.[0].document.urlId'\nol doc get <urlId>\n```\n\n### Create a document from a file\n```bash\nol doc create --title \"Meeting Notes\" --collection <id> --file ./notes.md --publish\n```\n\n### List all collections and their documents\n```bash\nol col list --json\nol doc list --collection <id> --sort title --direction ASC\n```\n\n### Bulk export with ndjson\n```bash\nol doc list --ndjson --full | jq -r '.title'\n```\n";
@@ -70,9 +70,16 @@ ol col delete <id> --confirm
70
70
 
71
71
  ### Authentication
72
72
  \`\`\`bash
73
- ol auth login # Configure API token and base URL
74
- ol auth status # Show current auth state
75
- ol auth logout # Clear saved credentials
73
+ ol auth login # OAuth login (opens browser); prompts for base URL + client ID if needed
74
+ ol auth login --base-url <url> # Specify Outline base URL for this login (saved for future use)
75
+ ol auth login --client-id <id> # Specify OAuth client ID for this login (saved for future use)
76
+ ol auth login --callback-port <port> # Override local OAuth callback port
77
+ ol auth login --read-only # Request read-only scopes (where supported by the Outline instance)
78
+ ol auth login --json | --ndjson # Machine-readable success envelope
79
+ ol auth status # Show current auth state
80
+ ol auth status --json | --ndjson # Machine-readable status envelope ({id, team, baseUrl, source})
81
+ ol auth logout # Clear saved credentials
82
+ ol auth logout --json | --ndjson # Machine-readable logout envelope ({ok: true}; --ndjson is silent)
76
83
  \`\`\`
77
84
 
78
85
  ### Update & Changelog
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,yEAAyE,CAAA;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+G5B,CAAA"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,yEAAyE,CAAA;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsH5B,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { UserRecord, UserRecordStore } from '@doist/cli-core/auth';
2
+ import { type Config } from './config.js';
3
+ import { type OutlineAccount } from './outline-account.js';
4
+ /**
5
+ * `UserRecordStore` adapter over `config.users[]`. `StoredUser.token` is
6
+ * surfaced as `fallbackToken` — cli-core's name for the plaintext copy
7
+ * persisted only when the keyring is unreachable.
8
+ */
9
+ export declare function createOutlineUserRecordStore(): UserRecordStore<OutlineAccount>;
10
+ /**
11
+ * Resolve the default-or-first `UserRecord` from an already-loaded config.
12
+ * Returns `null` when no users are stored.
13
+ */
14
+ export declare function getDefaultUserRecord(config: Partial<Config>): UserRecord<OutlineAccount> | null;
@@ -0,0 +1,89 @@
1
+ import { getConfig, updateConfig } from './config.js';
2
+ import { makeOutlineAccount } from './outline-account.js';
3
+ /**
4
+ * `UserRecordStore` adapter over `config.users[]`. `StoredUser.token` is
5
+ * surfaced as `fallbackToken` — cli-core's name for the plaintext copy
6
+ * persisted only when the keyring is unreachable.
7
+ */
8
+ export function createOutlineUserRecordStore() {
9
+ return {
10
+ async list() {
11
+ const config = await getConfig();
12
+ return (config.users ?? []).map(toRecord);
13
+ },
14
+ async upsert(record) {
15
+ const config = await getConfig();
16
+ const existing = config.users ?? [];
17
+ const next = fromRecord(record);
18
+ const index = existing.findIndex((u) => u.id === record.account.id);
19
+ const users = index >= 0
20
+ ? [...existing.slice(0, index), next, ...existing.slice(index + 1)]
21
+ : [...existing, next];
22
+ await updateConfig({ users });
23
+ },
24
+ async remove(id) {
25
+ const config = await getConfig();
26
+ const existing = config.users ?? [];
27
+ const index = existing.findIndex((u) => u.id === id);
28
+ if (index < 0)
29
+ return;
30
+ const users = [...existing.slice(0, index), ...existing.slice(index + 1)];
31
+ const updates = { users };
32
+ if (config.default_user_id === id)
33
+ updates.default_user_id = undefined;
34
+ await updateConfig(updates);
35
+ },
36
+ async getDefaultId() {
37
+ const config = await getConfig();
38
+ return config.default_user_id ?? null;
39
+ },
40
+ async setDefaultId(id) {
41
+ await updateConfig({ default_user_id: id ?? undefined });
42
+ },
43
+ };
44
+ }
45
+ /**
46
+ * Resolve the default-or-first `UserRecord` from an already-loaded config.
47
+ * Returns `null` when no users are stored.
48
+ */
49
+ export function getDefaultUserRecord(config) {
50
+ const users = config.users ?? [];
51
+ if (users.length === 0)
52
+ return null;
53
+ const defaultId = config.default_user_id;
54
+ const user = (defaultId && users.find((u) => u.id === defaultId)) || users[0];
55
+ return toRecord(user);
56
+ }
57
+ function toRecord(user) {
58
+ const account = makeOutlineAccount({
59
+ id: user.id,
60
+ label: user.name,
61
+ baseUrl: user.base_url,
62
+ oauthClientId: user.oauth_client_id,
63
+ teamName: user.team_name,
64
+ });
65
+ const trimmed = user.token?.trim();
66
+ const record = { account };
67
+ if (trimmed)
68
+ record.fallbackToken = trimmed;
69
+ return record;
70
+ }
71
+ function fromRecord(record) {
72
+ // Replace, don't merge: an absent `fallbackToken` strips the plaintext
73
+ // slot so it can't shadow a fresh keyring-backed write. cli-core contract.
74
+ const trimmed = record.fallbackToken?.trim();
75
+ const next = {
76
+ id: record.account.id,
77
+ name: record.account.label,
78
+ };
79
+ if (record.account.baseUrl)
80
+ next.base_url = record.account.baseUrl;
81
+ if (record.account.oauthClientId)
82
+ next.oauth_client_id = record.account.oauthClientId;
83
+ if (record.account.teamName)
84
+ next.team_name = record.account.teamName;
85
+ if (trimmed && trimmed.length > 0)
86
+ next.token = trimmed;
87
+ return next;
88
+ }
89
+ //# sourceMappingURL=user-records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-records.js","sourceRoot":"","sources":["../../src/lib/user-records.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doist/outline-cli",
3
- "version": "1.5.3",
3
+ "version": "1.7.0",
4
4
  "description": "CLI for the Outline wiki/knowledge base API",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,7 +48,7 @@
48
48
  "node": ">=20.18.1"
49
49
  },
50
50
  "dependencies": {
51
- "@doist/cli-core": "0.9.0",
51
+ "@doist/cli-core": "0.16.1",
52
52
  "chalk": "5.6.2",
53
53
  "commander": "14.0.2",
54
54
  "marked": "18.0.3",
@@ -1,14 +0,0 @@
1
- interface OAuthServerOptions {
2
- state: string;
3
- timeoutMs?: number;
4
- port?: number;
5
- }
6
- export interface OAuthCallbackServer {
7
- port: number;
8
- redirectUri: string;
9
- waitForCode: Promise<string>;
10
- close: () => void;
11
- }
12
- export declare const DEFAULT_OAUTH_CALLBACK_PORT = 54969;
13
- export declare function startOAuthCallbackServer(options: OAuthServerOptions): Promise<OAuthCallbackServer>;
14
- export {};