@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.
- package/CHANGELOG.md +12 -0
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +11 -3
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/status.d.ts.map +1 -1
- package/dist/commands/auth/status.js +34 -6
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/commands/auth/token.d.ts.map +1 -1
- package/dist/commands/auth/token.js +14 -3
- package/dist/commands/auth/token.js.map +1 -1
- package/dist/commands/config/view.d.ts.map +1 -1
- package/dist/commands/config/view.js +5 -0
- package/dist/commands/config/view.js.map +1 -1
- package/dist/commands/folder/create.d.ts +1 -1
- package/dist/commands/folder/create.d.ts.map +1 -1
- package/dist/commands/folder/create.js +4 -2
- package/dist/commands/folder/create.js.map +1 -1
- package/dist/commands/folder/helpers.d.ts.map +1 -1
- package/dist/commands/folder/helpers.js +5 -3
- package/dist/commands/folder/helpers.js.map +1 -1
- package/dist/commands/folder/index.d.ts.map +1 -1
- package/dist/commands/folder/index.js +4 -10
- package/dist/commands/folder/index.js.map +1 -1
- package/dist/commands/folder/list.d.ts +1 -1
- package/dist/commands/folder/list.d.ts.map +1 -1
- package/dist/commands/folder/list.js.map +1 -1
- package/dist/commands/user/index.d.ts +3 -0
- package/dist/commands/user/index.d.ts.map +1 -0
- package/dist/commands/user/index.js +19 -0
- package/dist/commands/user/index.js.map +1 -0
- package/dist/commands/user/list.d.ts +5 -0
- package/dist/commands/user/list.d.ts.map +1 -0
- package/dist/commands/user/list.js +32 -0
- package/dist/commands/user/list.js.map +1 -0
- package/dist/commands/user/use.d.ts +2 -0
- package/dist/commands/user/use.d.ts.map +1 -0
- package/dist/commands/user/use.js +17 -0
- package/dist/commands/user/use.js.map +1 -0
- package/dist/commands/workspace/activity.d.ts +1 -1
- package/dist/commands/workspace/activity.d.ts.map +1 -1
- package/dist/commands/workspace/activity.js.map +1 -1
- package/dist/commands/workspace/delete.d.ts +1 -1
- package/dist/commands/workspace/delete.d.ts.map +1 -1
- package/dist/commands/workspace/delete.js.map +1 -1
- package/dist/commands/workspace/index.d.ts.map +1 -1
- package/dist/commands/workspace/index.js +26 -60
- package/dist/commands/workspace/index.js.map +1 -1
- package/dist/commands/workspace/insights.d.ts +1 -1
- package/dist/commands/workspace/insights.d.ts.map +1 -1
- package/dist/commands/workspace/insights.js.map +1 -1
- package/dist/commands/workspace/projects.d.ts +1 -1
- package/dist/commands/workspace/projects.d.ts.map +1 -1
- package/dist/commands/workspace/projects.js.map +1 -1
- package/dist/commands/workspace/update.d.ts +1 -1
- package/dist/commands/workspace/update.d.ts.map +1 -1
- package/dist/commands/workspace/update.js.map +1 -1
- package/dist/commands/workspace/use.d.ts +5 -0
- package/dist/commands/workspace/use.d.ts.map +1 -0
- package/dist/commands/workspace/use.js +46 -0
- package/dist/commands/workspace/use.js.map +1 -0
- package/dist/commands/workspace/user-tasks.d.ts +1 -1
- package/dist/commands/workspace/user-tasks.d.ts.map +1 -1
- package/dist/commands/workspace/user-tasks.js.map +1 -1
- package/dist/commands/workspace/users.d.ts +1 -1
- package/dist/commands/workspace/users.d.ts.map +1 -1
- package/dist/commands/workspace/users.js.map +1 -1
- package/dist/commands/workspace/view.d.ts +1 -1
- package/dist/commands/workspace/view.d.ts.map +1 -1
- package/dist/commands/workspace/view.js.map +1 -1
- package/dist/index.js +37 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/api/core.d.ts.map +1 -1
- package/dist/lib/api/core.js +8 -3
- package/dist/lib/api/core.js.map +1 -1
- package/dist/lib/auth.d.ts +71 -9
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +348 -156
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/config.d.ts +27 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +100 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/global-args.d.ts +9 -0
- package/dist/lib/global-args.d.ts.map +1 -1
- package/dist/lib/global-args.js +52 -0
- package/dist/lib/global-args.js.map +1 -1
- package/dist/lib/migrate-auth.d.ts +23 -0
- package/dist/lib/migrate-auth.d.ts.map +1 -0
- package/dist/lib/migrate-auth.js +145 -0
- package/dist/lib/migrate-auth.js.map +1 -0
- package/dist/lib/refs.d.ts +14 -1
- package/dist/lib/refs.d.ts.map +1 -1
- package/dist/lib/refs.js +25 -1
- package/dist/lib/refs.js.map +1 -1
- package/dist/lib/secure-store.d.ts +15 -1
- package/dist/lib/secure-store.d.ts.map +1 -1
- package/dist/lib/secure-store.js +22 -7
- package/dist/lib/secure-store.js.map +1 -1
- package/dist/lib/skills/content.d.ts +1 -1
- package/dist/lib/skills/content.d.ts.map +1 -1
- package/dist/lib/skills/content.js +18 -2
- package/dist/lib/skills/content.js.map +1 -1
- package/dist/lib/users.d.ts +33 -0
- package/dist/lib/users.d.ts.map +1 -0
- package/dist/lib/users.js +83 -0
- package/dist/lib/users.js.map +1 -0
- package/dist/postinstall.js +2 -0
- package/dist/postinstall.js.map +1 -1
- package/package.json +4 -4
package/dist/lib/config.d.ts
CHANGED
|
@@ -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>;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -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
|
-
|
|
22
|
-
|
|
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) {
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,CAAC,CAAA;
|
|
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;
|
|
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"}
|
package/dist/lib/global-args.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;GASG;
|
|
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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"}
|
package/dist/lib/refs.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
package/dist/lib/refs.d.ts.map
CHANGED
|
@@ -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;
|
|
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(
|
|
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();
|