@doist/todoist-cli 1.56.1 → 1.58.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 (109) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/commands/auth/login.d.ts.map +1 -1
  3. package/dist/commands/auth/login.js +11 -3
  4. package/dist/commands/auth/login.js.map +1 -1
  5. package/dist/commands/auth/status.d.ts.map +1 -1
  6. package/dist/commands/auth/status.js +34 -6
  7. package/dist/commands/auth/status.js.map +1 -1
  8. package/dist/commands/auth/token.d.ts.map +1 -1
  9. package/dist/commands/auth/token.js +14 -3
  10. package/dist/commands/auth/token.js.map +1 -1
  11. package/dist/commands/config/view.d.ts.map +1 -1
  12. package/dist/commands/config/view.js +5 -0
  13. package/dist/commands/config/view.js.map +1 -1
  14. package/dist/commands/folder/create.d.ts +1 -1
  15. package/dist/commands/folder/create.d.ts.map +1 -1
  16. package/dist/commands/folder/create.js +4 -2
  17. package/dist/commands/folder/create.js.map +1 -1
  18. package/dist/commands/folder/helpers.d.ts.map +1 -1
  19. package/dist/commands/folder/helpers.js +5 -3
  20. package/dist/commands/folder/helpers.js.map +1 -1
  21. package/dist/commands/folder/index.d.ts.map +1 -1
  22. package/dist/commands/folder/index.js +4 -10
  23. package/dist/commands/folder/index.js.map +1 -1
  24. package/dist/commands/folder/list.d.ts +1 -1
  25. package/dist/commands/folder/list.d.ts.map +1 -1
  26. package/dist/commands/folder/list.js.map +1 -1
  27. package/dist/commands/user/index.d.ts +3 -0
  28. package/dist/commands/user/index.d.ts.map +1 -0
  29. package/dist/commands/user/index.js +19 -0
  30. package/dist/commands/user/index.js.map +1 -0
  31. package/dist/commands/user/list.d.ts +5 -0
  32. package/dist/commands/user/list.d.ts.map +1 -0
  33. package/dist/commands/user/list.js +32 -0
  34. package/dist/commands/user/list.js.map +1 -0
  35. package/dist/commands/user/use.d.ts +2 -0
  36. package/dist/commands/user/use.d.ts.map +1 -0
  37. package/dist/commands/user/use.js +17 -0
  38. package/dist/commands/user/use.js.map +1 -0
  39. package/dist/commands/workspace/activity.d.ts +1 -1
  40. package/dist/commands/workspace/activity.d.ts.map +1 -1
  41. package/dist/commands/workspace/activity.js.map +1 -1
  42. package/dist/commands/workspace/delete.d.ts +1 -1
  43. package/dist/commands/workspace/delete.d.ts.map +1 -1
  44. package/dist/commands/workspace/delete.js.map +1 -1
  45. package/dist/commands/workspace/index.d.ts.map +1 -1
  46. package/dist/commands/workspace/index.js +26 -60
  47. package/dist/commands/workspace/index.js.map +1 -1
  48. package/dist/commands/workspace/insights.d.ts +1 -1
  49. package/dist/commands/workspace/insights.d.ts.map +1 -1
  50. package/dist/commands/workspace/insights.js.map +1 -1
  51. package/dist/commands/workspace/projects.d.ts +1 -1
  52. package/dist/commands/workspace/projects.d.ts.map +1 -1
  53. package/dist/commands/workspace/projects.js.map +1 -1
  54. package/dist/commands/workspace/update.d.ts +1 -1
  55. package/dist/commands/workspace/update.d.ts.map +1 -1
  56. package/dist/commands/workspace/update.js.map +1 -1
  57. package/dist/commands/workspace/use.d.ts +5 -0
  58. package/dist/commands/workspace/use.d.ts.map +1 -0
  59. package/dist/commands/workspace/use.js +46 -0
  60. package/dist/commands/workspace/use.js.map +1 -0
  61. package/dist/commands/workspace/user-tasks.d.ts +1 -1
  62. package/dist/commands/workspace/user-tasks.d.ts.map +1 -1
  63. package/dist/commands/workspace/user-tasks.js.map +1 -1
  64. package/dist/commands/workspace/users.d.ts +1 -1
  65. package/dist/commands/workspace/users.d.ts.map +1 -1
  66. package/dist/commands/workspace/users.js.map +1 -1
  67. package/dist/commands/workspace/view.d.ts +1 -1
  68. package/dist/commands/workspace/view.d.ts.map +1 -1
  69. package/dist/commands/workspace/view.js.map +1 -1
  70. package/dist/index.js +37 -2
  71. package/dist/index.js.map +1 -1
  72. package/dist/lib/api/core.d.ts.map +1 -1
  73. package/dist/lib/api/core.js +8 -3
  74. package/dist/lib/api/core.js.map +1 -1
  75. package/dist/lib/auth.d.ts +71 -9
  76. package/dist/lib/auth.d.ts.map +1 -1
  77. package/dist/lib/auth.js +348 -156
  78. package/dist/lib/auth.js.map +1 -1
  79. package/dist/lib/config.d.ts +27 -2
  80. package/dist/lib/config.d.ts.map +1 -1
  81. package/dist/lib/config.js +100 -2
  82. package/dist/lib/config.js.map +1 -1
  83. package/dist/lib/global-args.d.ts +9 -0
  84. package/dist/lib/global-args.d.ts.map +1 -1
  85. package/dist/lib/global-args.js +52 -0
  86. package/dist/lib/global-args.js.map +1 -1
  87. package/dist/lib/migrate-auth.d.ts +23 -0
  88. package/dist/lib/migrate-auth.d.ts.map +1 -0
  89. package/dist/lib/migrate-auth.js +145 -0
  90. package/dist/lib/migrate-auth.js.map +1 -0
  91. package/dist/lib/refs.d.ts +14 -1
  92. package/dist/lib/refs.d.ts.map +1 -1
  93. package/dist/lib/refs.js +25 -1
  94. package/dist/lib/refs.js.map +1 -1
  95. package/dist/lib/secure-store.d.ts +15 -1
  96. package/dist/lib/secure-store.d.ts.map +1 -1
  97. package/dist/lib/secure-store.js +22 -7
  98. package/dist/lib/secure-store.js.map +1 -1
  99. package/dist/lib/skills/content.d.ts +1 -1
  100. package/dist/lib/skills/content.d.ts.map +1 -1
  101. package/dist/lib/skills/content.js +18 -2
  102. package/dist/lib/skills/content.js.map +1 -1
  103. package/dist/lib/users.d.ts +33 -0
  104. package/dist/lib/users.d.ts.map +1 -0
  105. package/dist/lib/users.js +83 -0
  106. package/dist/lib/users.js.map +1 -0
  107. package/dist/postinstall.js +2 -0
  108. package/dist/postinstall.js.map +1 -1
  109. package/package.json +4 -4
@@ -4,6 +4,12 @@ export type UpdateChannel = 'stable' | 'pre-release';
4
4
  export interface HelpCenterConfig {
5
5
  defaultLocale?: string;
6
6
  }
7
+ export interface WorkspaceConfig {
8
+ defaultWorkspace?: string;
9
+ }
10
+ export interface UserConfig {
11
+ defaultUser?: string;
12
+ }
7
13
  /**
8
14
  * Canonical ordered list of login flags. Acts as the single source of truth —
9
15
  * `AuthFlag`, `AUTH_FLAGS` (validation), and the display order of re-login
@@ -13,14 +19,33 @@ export interface HelpCenterConfig {
13
19
  */
14
20
  export declare const AUTH_FLAG_ORDER: readonly ["read-only", "app-management", "backups"];
15
21
  export type AuthFlag = (typeof AUTH_FLAG_ORDER)[number];
22
+ /**
23
+ * Per-user record stored in `config.users`. The token itself lives in the OS
24
+ * credential manager under account `user-<id>`; `api_token` only appears here
25
+ * when the credential manager was unavailable at save time (plaintext fallback).
26
+ */
27
+ export interface StoredUser {
28
+ id: string;
29
+ email: string;
30
+ auth_mode?: AuthMode;
31
+ auth_scope?: string;
32
+ auth_flags?: AuthFlag[];
33
+ api_token?: string;
34
+ pendingSecureStoreClear?: boolean;
35
+ }
36
+ export declare const CONFIG_VERSION: 2;
16
37
  export interface Config extends Record<string, unknown> {
38
+ config_version?: number;
39
+ user?: UserConfig;
40
+ users?: StoredUser[];
41
+ update_channel?: UpdateChannel;
42
+ hc?: HelpCenterConfig;
43
+ workspace?: WorkspaceConfig;
17
44
  api_token?: string;
18
45
  pendingSecureStoreClear?: boolean;
19
46
  auth_mode?: AuthMode;
20
47
  auth_scope?: string;
21
48
  auth_flags?: AuthFlag[];
22
- update_channel?: UpdateChannel;
23
- hc?: HelpCenterConfig;
24
49
  }
25
50
  export declare const AUTH_FLAGS: ReadonlySet<AuthFlag>;
26
51
  export declare function readConfig(): Promise<Config>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,QAA2D,CAAA;AAEnF,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAA;AAC7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,aAAa,CAAA;AAEpD,MAAM,WAAW,gBAAgB;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,qDAAsD,CAAA;AAClF,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvD,MAAM,WAAW,MAAO,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,SAAS,CAAC,EAAE,QAAQ,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;IACvB,cAAc,CAAC,EAAE,aAAa,CAAA;IAC9B,EAAE,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAeD,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,QAAQ,CAA4B,CAAA;AAGzE,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAQlD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1F;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAoClE;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB/D;AAOD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CA6EjF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,QAA2D,CAAA;AAEnF,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAA;AAC7D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,aAAa,CAAA;AAEpD,MAAM,WAAW,gBAAgB;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,qDAAsD,CAAA;AAClF,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvD;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,QAAQ,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAA;CACpC;AAED,eAAO,MAAM,cAAc,EAAG,CAAU,CAAA;AAExC,MAAM,WAAW,MAAO,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,cAAc,CAAC,EAAE,aAAa,CAAA;IAC9B,EAAE,CAAC,EAAE,gBAAgB,CAAA;IACrB,SAAS,CAAC,EAAE,eAAe,CAAA;IAG3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,SAAS,CAAC,EAAE,QAAQ,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;CAC1B;AAgCD,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,QAAQ,CAA4B,CAAA;AAGzE,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAQlD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAE1F;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAoClE;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB/D;AAOD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CA6KjF"}
@@ -12,16 +12,33 @@ export const CONFIG_PATH = join(homedir(), '.config', 'todoist-cli', 'config.jso
12
12
  * command; everything downstream stays consistent.
13
13
  */
14
14
  export const AUTH_FLAG_ORDER = ['read-only', 'app-management', 'backups'];
15
+ export const CONFIG_VERSION = 2;
15
16
  const KNOWN_CONFIG_KEYS = new Set([
17
+ 'config_version',
18
+ 'user',
19
+ 'users',
20
+ 'update_channel',
21
+ 'hc',
22
+ 'workspace',
23
+ // legacy v1 keys (tolerated until migration runs)
16
24
  'api_token',
17
25
  'pendingSecureStoreClear',
18
26
  'auth_mode',
19
27
  'auth_scope',
20
28
  'auth_flags',
21
- 'update_channel',
22
- 'hc',
29
+ ]);
30
+ const KNOWN_USER_CONFIG_KEYS = new Set(['defaultUser']);
31
+ const KNOWN_STORED_USER_KEYS = new Set([
32
+ 'id',
33
+ 'email',
34
+ 'auth_mode',
35
+ 'auth_scope',
36
+ 'auth_flags',
37
+ 'api_token',
38
+ 'pendingSecureStoreClear',
23
39
  ]);
24
40
  const KNOWN_HC_CONFIG_KEYS = new Set(['defaultLocale']);
41
+ const KNOWN_WORKSPACE_CONFIG_KEYS = new Set(['defaultWorkspace']);
25
42
  const AUTH_MODES = new Set(['read-only', 'read-write', 'unknown']);
26
43
  export const AUTH_FLAGS = new Set(AUTH_FLAG_ORDER);
27
44
  const UPDATE_CHANNELS = new Set(['stable', 'pre-release']);
@@ -96,6 +113,71 @@ export function validateConfigForDoctor(config) {
96
113
  issues.push(`contains unrecognized key "${key}"`);
97
114
  }
98
115
  }
116
+ if (config.config_version !== undefined &&
117
+ (typeof config.config_version !== 'number' || config.config_version < 1)) {
118
+ issues.push('config_version must be a positive number');
119
+ }
120
+ if (config.user !== undefined) {
121
+ if (!isObject(config.user)) {
122
+ issues.push('user must be an object');
123
+ }
124
+ else {
125
+ for (const key of Object.keys(config.user)) {
126
+ if (!KNOWN_USER_CONFIG_KEYS.has(key)) {
127
+ issues.push(`user contains unrecognized key "${key}"`);
128
+ }
129
+ }
130
+ const defaultUser = config.user.defaultUser;
131
+ if (defaultUser !== undefined && typeof defaultUser !== 'string') {
132
+ issues.push('user.defaultUser must be a string');
133
+ }
134
+ }
135
+ }
136
+ if (config.users !== undefined) {
137
+ if (!Array.isArray(config.users)) {
138
+ issues.push('users must be an array');
139
+ }
140
+ else {
141
+ for (const [i, entry] of config.users.entries()) {
142
+ if (!isObject(entry)) {
143
+ issues.push(`users[${i}] must be an object`);
144
+ continue;
145
+ }
146
+ for (const key of Object.keys(entry)) {
147
+ if (!KNOWN_STORED_USER_KEYS.has(key)) {
148
+ issues.push(`users[${i}] contains unrecognized key "${key}"`);
149
+ }
150
+ }
151
+ if (typeof entry.id !== 'string' || !entry.id) {
152
+ issues.push(`users[${i}].id must be a non-empty string`);
153
+ }
154
+ if (typeof entry.email !== 'string' || !entry.email) {
155
+ issues.push(`users[${i}].email must be a non-empty string`);
156
+ }
157
+ if (entry.auth_mode !== undefined &&
158
+ (typeof entry.auth_mode !== 'string' ||
159
+ !AUTH_MODES.has(entry.auth_mode))) {
160
+ issues.push(`users[${i}].auth_mode must be one of: read-only, read-write, unknown`);
161
+ }
162
+ if (entry.auth_scope !== undefined && typeof entry.auth_scope !== 'string') {
163
+ issues.push(`users[${i}].auth_scope must be a string`);
164
+ }
165
+ if (entry.auth_flags !== undefined) {
166
+ if (!Array.isArray(entry.auth_flags) ||
167
+ !entry.auth_flags.every((flag) => typeof flag === 'string' && AUTH_FLAGS.has(flag))) {
168
+ issues.push(`users[${i}].auth_flags must be an array of: ${AUTH_FLAG_ORDER.join(', ')}`);
169
+ }
170
+ }
171
+ if (entry.api_token !== undefined && typeof entry.api_token !== 'string') {
172
+ issues.push(`users[${i}].api_token must be a string`);
173
+ }
174
+ if (entry.pendingSecureStoreClear !== undefined &&
175
+ typeof entry.pendingSecureStoreClear !== 'boolean') {
176
+ issues.push(`users[${i}].pendingSecureStoreClear must be a boolean`);
177
+ }
178
+ }
179
+ }
180
+ }
99
181
  if (config.api_token !== undefined && typeof config.api_token !== 'string') {
100
182
  issues.push('api_token must be a string');
101
183
  }
@@ -147,6 +229,22 @@ export function validateConfigForDoctor(config) {
147
229
  }
148
230
  }
149
231
  }
232
+ if (config.workspace !== undefined) {
233
+ if (!isObject(config.workspace)) {
234
+ issues.push('workspace must be an object');
235
+ }
236
+ else {
237
+ for (const key of Object.keys(config.workspace)) {
238
+ if (!KNOWN_WORKSPACE_CONFIG_KEYS.has(key)) {
239
+ issues.push(`workspace contains unrecognized key "${key}"`);
240
+ }
241
+ }
242
+ const defaultWorkspace = config.workspace.defaultWorkspace;
243
+ if (defaultWorkspace !== undefined && typeof defaultWorkspace !== 'string') {
244
+ issues.push('workspace.defaultWorkspace must be a string');
245
+ }
246
+ }
247
+ }
150
248
  return issues;
151
249
  }
152
250
  function isObject(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export interface GlobalArgs {
17
17
  noSpinner: boolean;
18
18
  raw: boolean;
19
19
  progressJsonl: string | true | false;
20
+ user: string | undefined;
20
21
  }
21
22
  /**
22
23
  * Parse well-known global flags from an argv array.
@@ -34,5 +35,13 @@ export declare function isAccessible(): boolean;
34
35
  export declare function isRawMode(): boolean;
35
36
  export declare function getVerboseLevel(): GlobalArgs['verbose'];
36
37
  export declare function getProgressJsonlPath(): string | true | false;
38
+ export declare function getRequestedUserRef(): string | undefined;
39
+ /**
40
+ * Remove `--user <ref>` / `--user=<ref>` from an argv array so commander —
41
+ * which has no global-option attachment — never sees the flag at subcommand
42
+ * level. Returns a new array; the original is not mutated. Stops at the `--`
43
+ * terminator so positional args after it are preserved verbatim.
44
+ */
45
+ export declare function stripUserFlag(argv: string[]): string[];
37
46
  export declare function shouldDisableSpinner(): boolean;
38
47
  //# sourceMappingURL=global-args.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-args.d.ts","sourceRoot":"","sources":["../../src/lib/global-args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,OAAO,CAAA;IACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAA;CACvC;AAOD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,CAgE3D;AAeD,4DAA4D;AAC5D,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAMD,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,eAAe,IAAI,UAAU,CAAC,SAAS,CAAC,CAEvD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,GAAG,KAAK,CAE5D;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAY9C"}
1
+ {"version":3,"file":"global-args.d.ts","sourceRoot":"","sources":["../../src/lib/global-args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,OAAO,CAAA;IACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAA;IACpC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B;AAOD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,CA4E3D;AAeD,4DAA4D;AAC5D,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAMD,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,eAAe,IAAI,UAAU,CAAC,SAAS,CAAC,CAEvD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,GAAG,KAAK,CAE5D;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA2BtD;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAY9C"}
@@ -29,6 +29,7 @@ export function parseGlobalArgs(argv) {
29
29
  noSpinner: false,
30
30
  raw: false,
31
31
  progressJsonl: false,
32
+ user: undefined,
32
33
  };
33
34
  for (let i = 0; i < args.length; i++) {
34
35
  const arg = args[i];
@@ -57,6 +58,19 @@ export function parseGlobalArgs(argv) {
57
58
  else if (arg === '--raw') {
58
59
  result.raw = true;
59
60
  }
61
+ else if (arg === '--user' || arg.startsWith('--user=')) {
62
+ if (arg.includes('=')) {
63
+ result.user = arg.slice(arg.indexOf('=') + 1);
64
+ }
65
+ else if (i + 1 < args.length && !args[i + 1].startsWith('-')) {
66
+ // Only consume the next arg as the value when it doesn't look
67
+ // like another flag — `td --user --json ...` should leave
68
+ // `result.user` undefined so commander surfaces a usage error
69
+ // rather than silently swallowing `--json` as the user ref.
70
+ i++;
71
+ result.user = args[i];
72
+ }
73
+ }
60
74
  else if (arg === '--progress-jsonl' || arg.startsWith('--progress-jsonl=')) {
61
75
  if (arg.includes('=')) {
62
76
  // --progress-jsonl=path
@@ -128,6 +142,44 @@ export function getVerboseLevel() {
128
142
  export function getProgressJsonlPath() {
129
143
  return getGlobalArgs().progressJsonl;
130
144
  }
145
+ export function getRequestedUserRef() {
146
+ return getGlobalArgs().user;
147
+ }
148
+ /**
149
+ * Remove `--user <ref>` / `--user=<ref>` from an argv array so commander —
150
+ * which has no global-option attachment — never sees the flag at subcommand
151
+ * level. Returns a new array; the original is not mutated. Stops at the `--`
152
+ * terminator so positional args after it are preserved verbatim.
153
+ */
154
+ export function stripUserFlag(argv) {
155
+ const out = [];
156
+ let stopped = false;
157
+ for (let i = 0; i < argv.length; i++) {
158
+ const arg = argv[i];
159
+ if (stopped) {
160
+ out.push(arg);
161
+ continue;
162
+ }
163
+ if (arg === '--') {
164
+ stopped = true;
165
+ out.push(arg);
166
+ continue;
167
+ }
168
+ if (arg === '--user') {
169
+ // Consume the value too only when it doesn't look like another
170
+ // flag — keeps `td --user --json ...` from also stripping `--json`.
171
+ // Stays in lockstep with `parseGlobalArgs` above.
172
+ if (i + 1 < argv.length && !argv[i + 1].startsWith('-'))
173
+ i++;
174
+ continue;
175
+ }
176
+ if (arg.startsWith('--user=')) {
177
+ continue;
178
+ }
179
+ out.push(arg);
180
+ }
181
+ return out;
182
+ }
131
183
  export function shouldDisableSpinner() {
132
184
  if (process.env.TD_SPINNER === 'false')
133
185
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"global-args.js","sourceRoot":"","sources":["../../src/lib/global-args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"global-args.js","sourceRoot":"","sources":["../../src/lib/global-args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * One-time migration of v1 single-user auth state into the v2 multi-user
3
+ * shape. Invoked from `src/postinstall.ts` so existing installs upgrade
4
+ * transparently. Best-effort: any failure (offline, invalid token, keyring
5
+ * unavailable) leaves the v1 state untouched so the runtime fallback in
6
+ * `resolveActiveUser` can keep serving the legacy token until the next
7
+ * upgrade attempt or `td auth login`.
8
+ */
9
+ export interface MigrateAuthResult {
10
+ status: 'already-migrated' | 'no-legacy-state' | 'migrated' | 'skipped';
11
+ reason?: string;
12
+ migratedUserId?: string;
13
+ migratedEmail?: string;
14
+ }
15
+ interface MigrateOptions {
16
+ /** Suppress console output. Postinstall sets this; CLI surfaces use it via warn(). */
17
+ silent?: boolean;
18
+ /** Override fetch (for tests). */
19
+ fetchImpl?: typeof fetch;
20
+ }
21
+ export declare function migrateLegacyAuth(opts?: MigrateOptions): Promise<MigrateAuthResult>;
22
+ export {};
23
+ //# sourceMappingURL=migrate-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-auth.d.ts","sourceRoot":"","sources":["../../src/lib/migrate-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,UAAU,GAAG,SAAS,CAAA;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,UAAU,cAAc;IACpB,sFAAsF;IACtF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAC3B;AASD,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyF7F"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * One-time migration of v1 single-user auth state into the v2 multi-user
3
+ * shape. Invoked from `src/postinstall.ts` so existing installs upgrade
4
+ * transparently. Best-effort: any failure (offline, invalid token, keyring
5
+ * unavailable) leaves the v1 state untouched so the runtime fallback in
6
+ * `resolveActiveUser` can keep serving the legacy token until the next
7
+ * upgrade attempt or `td auth login`.
8
+ */
9
+ import { CONFIG_VERSION, readConfig, writeConfig } from './config.js';
10
+ import { accountForUser, createSecureStore, LEGACY_ACCOUNT_NAME, SecureStoreUnavailableError, } from './secure-store.js';
11
+ const USER_ENDPOINT = 'https://api.todoist.com/api/v1/user';
12
+ export async function migrateLegacyAuth(opts = {}) {
13
+ const fetchImpl = opts.fetchImpl ?? fetch;
14
+ const config = await readConfig();
15
+ // Already on v2 — the presence of `users` is the marker. Empty array still
16
+ // counts as migrated (clean slate after a logout).
17
+ if (Array.isArray(config.users)) {
18
+ return { status: 'already-migrated' };
19
+ }
20
+ const legacyToken = await loadLegacyToken(config);
21
+ if (!legacyToken) {
22
+ // No usable token to migrate. Still write the v2 marker so the runtime
23
+ // resolver doesn't keep looking for one — but only if there's nothing
24
+ // there at all (untouched config file).
25
+ if (config.api_token === undefined &&
26
+ config.auth_mode === undefined &&
27
+ config.auth_scope === undefined &&
28
+ config.auth_flags === undefined &&
29
+ !config.pendingSecureStoreClear) {
30
+ return { status: 'no-legacy-state' };
31
+ }
32
+ // Legacy state exists (e.g., pendingSecureStoreClear) but no token.
33
+ // Clean up to v2 shape.
34
+ try {
35
+ await writeConfig(toV2(stripLegacy(config), []));
36
+ }
37
+ catch (error) {
38
+ return skipped(opts, `failed to clean up legacy config (${describe(error)})`);
39
+ }
40
+ return { status: 'migrated' };
41
+ }
42
+ // Identify the user behind the legacy token via a one-shot REST call —
43
+ // no SDK import to keep postinstall lightweight.
44
+ let user;
45
+ try {
46
+ user = await fetchUser(legacyToken, fetchImpl);
47
+ }
48
+ catch (error) {
49
+ return skipped(opts, `could not identify Todoist user (${describe(error)})`);
50
+ }
51
+ const record = {
52
+ id: user.id,
53
+ email: user.email,
54
+ auth_mode: config.auth_mode,
55
+ auth_scope: config.auth_scope,
56
+ auth_flags: config.auth_flags,
57
+ };
58
+ // Move the token into the per-user keyring slot.
59
+ let storedSecurely = false;
60
+ try {
61
+ const userStore = createSecureStore(accountForUser(user.id));
62
+ await userStore.setSecret(legacyToken);
63
+ storedSecurely = true;
64
+ }
65
+ catch (error) {
66
+ if (!(error instanceof SecureStoreUnavailableError)) {
67
+ return skipped(opts, `failed to write user-scoped credential (${describe(error)})`);
68
+ }
69
+ }
70
+ if (!storedSecurely) {
71
+ record.api_token = legacyToken;
72
+ }
73
+ const next = toV2(stripLegacy(config), [record], user.id);
74
+ try {
75
+ await writeConfig(next);
76
+ }
77
+ catch (error) {
78
+ return skipped(opts, `failed to update config (${describe(error)})`);
79
+ }
80
+ // Clean up the legacy keyring entry — best effort, never fatal.
81
+ try {
82
+ const legacyStore = createSecureStore(LEGACY_ACCOUNT_NAME);
83
+ await legacyStore.deleteSecret();
84
+ }
85
+ catch {
86
+ // ignore
87
+ }
88
+ if (!opts.silent) {
89
+ console.error(`todoist-cli: migrated existing token to multi-user store (${user.email}).`);
90
+ }
91
+ return { status: 'migrated', migratedUserId: user.id, migratedEmail: user.email };
92
+ }
93
+ async function loadLegacyToken(config) {
94
+ if (typeof config.api_token === 'string' && config.api_token.trim()) {
95
+ return config.api_token.trim();
96
+ }
97
+ try {
98
+ const legacyStore = createSecureStore(LEGACY_ACCOUNT_NAME);
99
+ const stored = await legacyStore.getSecret();
100
+ if (stored?.trim())
101
+ return stored.trim();
102
+ }
103
+ catch (error) {
104
+ if (!(error instanceof SecureStoreUnavailableError))
105
+ throw error;
106
+ }
107
+ return null;
108
+ }
109
+ async function fetchUser(token, fetchImpl) {
110
+ const response = await fetchImpl(USER_ENDPOINT, {
111
+ headers: { Authorization: `Bearer ${token}` },
112
+ });
113
+ if (!response.ok) {
114
+ throw new Error(`HTTP ${response.status} ${response.statusText}`);
115
+ }
116
+ const data = (await response.json());
117
+ if (typeof data.id !== 'string' || !data.id) {
118
+ throw new Error('response missing user id');
119
+ }
120
+ if (typeof data.email !== 'string' || !data.email) {
121
+ throw new Error('response missing user email');
122
+ }
123
+ return { id: data.id, email: data.email };
124
+ }
125
+ function toV2(config, users, defaultUserId) {
126
+ const next = { ...config, config_version: CONFIG_VERSION, users };
127
+ if (defaultUserId) {
128
+ next.user = { ...next.user, defaultUser: defaultUserId };
129
+ }
130
+ return next;
131
+ }
132
+ function stripLegacy(config) {
133
+ const { api_token: _t, auth_mode: _m, auth_scope: _s, auth_flags: _f, pendingSecureStoreClear: _p, ...rest } = config;
134
+ return rest;
135
+ }
136
+ function describe(error) {
137
+ return error instanceof Error && error.message ? error.message : String(error);
138
+ }
139
+ function skipped(opts, reason) {
140
+ if (!opts.silent) {
141
+ console.error(`todoist-cli: skipped legacy auth migration — ${reason}.`);
142
+ }
143
+ return { status: 'skipped', reason };
144
+ }
145
+ //# 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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"}
@@ -64,7 +64,20 @@ export declare function resolveAppRef(api: TodoistApi, ref: string): Promise<App
64
64
  export declare function resolveProjectId(api: TodoistApi, ref: string): Promise<string>;
65
65
  export declare function resolveSectionId(api: TodoistApi, ref: string, projectId: string): Promise<string>;
66
66
  export declare function resolveParentTaskId(api: TodoistApi, ref: string, projectId: string, sectionId?: string): Promise<string>;
67
- export declare function resolveWorkspaceRef(ref: string): Promise<Workspace>;
67
+ /**
68
+ * Resolve a workspace ref, falling back to the default configured via
69
+ * `td workspace use` when the caller doesn't pass one. Throws
70
+ * WORKSPACE_REQUIRED with actionable hints if neither is available.
71
+ */
72
+ export declare function resolveWorkspaceRef(ref?: string): Promise<Workspace>;
73
+ /**
74
+ * Return the stored default workspace as a ref string (`id:xxx`) if one is
75
+ * configured, else undefined. Shared by callers that need to distinguish
76
+ * "default available" from "no default" instead of letting
77
+ * `resolveWorkspaceRef` throw — e.g. folder commands with their own
78
+ * single-workspace fallback.
79
+ */
80
+ export declare function readDefaultWorkspaceRef(): Promise<string | undefined>;
68
81
  export declare function resolveFolderRef(ref: string, workspaceId: string): Promise<WorkspaceFolder>;
69
82
  export {};
70
83
  //# sourceMappingURL=refs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAU,EAAuB,MAAM,oBAAoB,CAAA;AAC3F,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAGH,KAAK,SAAS,EACd,KAAK,eAAe,EACvB,MAAM,qBAAqB,CAAA;AAI5B,QAAA,MAAM,gBAAgB,iDAAkD,CAAA;AACxE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,aAAa,CAAA;IACzB,EAAE,EAAE,MAAM,CAAA;CACb;AAMD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAUpE;AAED,QAAA,MAAM,UAAU,gCAAiC,CAAA;AACjD,KAAK,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3C,MAAM,MAAM,YAAY,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,aAAa,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAMtC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQnE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAgBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAUpE;AAgJD,wBAAsB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQtF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgC3F;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpF;AAED,wBAAsB,gBAAgB,CAClC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,wBAAsB,mBAAmB,CACrC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAGzE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAIjG"}
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/lib/refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAU,EAAuB,MAAM,oBAAoB,CAAA;AAC3F,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAGH,KAAK,SAAS,EACd,KAAK,eAAe,EACvB,MAAM,qBAAqB,CAAA;AAK5B,QAAA,MAAM,gBAAgB,iDAAkD,CAAA;AACxE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,aAAa,CAAA;IACzB,EAAE,EAAE,MAAM,CAAA;CACb;AAMD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAUpE;AAED,QAAA,MAAM,UAAU,gCAAiC,CAAA;AACjD,KAAK,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3C,MAAM,MAAM,YAAY,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,aAAa,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAMtC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQnE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAgBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAUpE;AAgJD,wBAAsB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQtF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgC3F;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpF;AAED,wBAAsB,gBAAgB,CAClC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,wBAAsB,mBAAmB,CACrC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAc1E;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG3E;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAIjG"}
package/dist/lib/refs.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { TodoistRequestError } from '@doist/todoist-sdk';
2
2
  import { fetchWorkspaceFolders, fetchWorkspaces, } from './api/workspaces.js';
3
+ import { readConfig } from './config.js';
3
4
  import { CliError } from './errors.js';
4
5
  import { paginate } from './pagination.js';
5
6
  const URL_ENTITY_TYPES = ['task', 'project', 'label', 'filter'];
@@ -261,9 +262,32 @@ export async function resolveParentTaskId(api, ref, projectId, sectionId) {
261
262
  return ref;
262
263
  throw new CliError('PARENT_NOT_FOUND', `Parent task "${ref}" not found in project.`);
263
264
  }
265
+ /**
266
+ * Resolve a workspace ref, falling back to the default configured via
267
+ * `td workspace use` when the caller doesn't pass one. Throws
268
+ * WORKSPACE_REQUIRED with actionable hints if neither is available.
269
+ */
264
270
  export async function resolveWorkspaceRef(ref) {
271
+ const effectiveRef = ref ?? (await readDefaultWorkspaceRef());
272
+ if (!effectiveRef) {
273
+ throw new CliError('WORKSPACE_REQUIRED', 'No workspace specified and no default workspace is set.', [
274
+ 'Pass a workspace ref, e.g. `td workspace view "My WS"`',
275
+ 'Or set a default with `td workspace use <ref>`',
276
+ ]);
277
+ }
265
278
  const workspaces = await fetchWorkspaces();
266
- return resolveFromList(ref, workspaces, (w) => w.name, 'workspace');
279
+ return resolveFromList(effectiveRef, workspaces, (w) => w.name, 'workspace');
280
+ }
281
+ /**
282
+ * Return the stored default workspace as a ref string (`id:xxx`) if one is
283
+ * configured, else undefined. Shared by callers that need to distinguish
284
+ * "default available" from "no default" instead of letting
285
+ * `resolveWorkspaceRef` throw — e.g. folder commands with their own
286
+ * single-workspace fallback.
287
+ */
288
+ export async function readDefaultWorkspaceRef() {
289
+ const savedId = (await readConfig()).workspace?.defaultWorkspace;
290
+ return savedId ? `id:${savedId}` : undefined;
267
291
  }
268
292
  export async function resolveFolderRef(ref, workspaceId) {
269
293
  const allFolders = await fetchWorkspaceFolders();