@doist/todoist-cli 1.57.0 → 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 (58) hide show
  1. package/CHANGELOG.md +6 -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/user/index.d.ts +3 -0
  12. package/dist/commands/user/index.d.ts.map +1 -0
  13. package/dist/commands/user/index.js +19 -0
  14. package/dist/commands/user/index.js.map +1 -0
  15. package/dist/commands/user/list.d.ts +5 -0
  16. package/dist/commands/user/list.d.ts.map +1 -0
  17. package/dist/commands/user/list.js +32 -0
  18. package/dist/commands/user/list.js.map +1 -0
  19. package/dist/commands/user/use.d.ts +2 -0
  20. package/dist/commands/user/use.d.ts.map +1 -0
  21. package/dist/commands/user/use.js +17 -0
  22. package/dist/commands/user/use.js.map +1 -0
  23. package/dist/index.js +37 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/api/core.d.ts.map +1 -1
  26. package/dist/lib/api/core.js +8 -3
  27. package/dist/lib/api/core.js.map +1 -1
  28. package/dist/lib/auth.d.ts +71 -9
  29. package/dist/lib/auth.d.ts.map +1 -1
  30. package/dist/lib/auth.js +348 -156
  31. package/dist/lib/auth.js.map +1 -1
  32. package/dist/lib/config.d.ts +24 -3
  33. package/dist/lib/config.d.ts.map +1 -1
  34. package/dist/lib/config.js +83 -3
  35. package/dist/lib/config.js.map +1 -1
  36. package/dist/lib/global-args.d.ts +9 -0
  37. package/dist/lib/global-args.d.ts.map +1 -1
  38. package/dist/lib/global-args.js +52 -0
  39. package/dist/lib/global-args.js.map +1 -1
  40. package/dist/lib/migrate-auth.d.ts +23 -0
  41. package/dist/lib/migrate-auth.d.ts.map +1 -0
  42. package/dist/lib/migrate-auth.js +145 -0
  43. package/dist/lib/migrate-auth.js.map +1 -0
  44. package/dist/lib/secure-store.d.ts +15 -1
  45. package/dist/lib/secure-store.d.ts.map +1 -1
  46. package/dist/lib/secure-store.js +22 -7
  47. package/dist/lib/secure-store.js.map +1 -1
  48. package/dist/lib/skills/content.d.ts +1 -1
  49. package/dist/lib/skills/content.d.ts.map +1 -1
  50. package/dist/lib/skills/content.js +16 -2
  51. package/dist/lib/skills/content.js.map +1 -1
  52. package/dist/lib/users.d.ts +33 -0
  53. package/dist/lib/users.d.ts.map +1 -0
  54. package/dist/lib/users.js +83 -0
  55. package/dist/lib/users.js.map +1 -0
  56. package/dist/postinstall.js +2 -0
  57. package/dist/postinstall.js.map +1 -1
  58. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,eAAe,EACf,WAAW,EACX,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,aAAa,GACrB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAIH,KAAK,QAAQ,EACb,KAAK,QAAQ,EAEhB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,eAAO,MAAM,aAAa,sBAAsB,CAAA;AAEhD,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB,MAAM,EAAE,KAAK,GAAG,cAAc,GAAG,aAAa,CAAA;CACjD;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,YAAY,CAAA;CACzB;AAED,qBAAa,YAAa,SAAQ,QAAQ;;CAUzC;AAED,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,aAAa,CAAA;AAEjE,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,oBAAoB,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA6DnD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAkD9D;AAED,wBAAsB,YAAY,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAgC7B;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAmBjE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAoB7D"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,eAAe,EACf,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,aAAa,GACrB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAKH,KAAK,QAAQ,EACb,KAAK,QAAQ,EAEb,KAAK,UAAU,EAClB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAatC,eAAO,MAAM,aAAa,sBAAsB,CAAA;AAEhD,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB,MAAM,EAAE,KAAK,GAAG,cAAc,GAAG,aAAa,CAAA;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACzB;AAED,qBAAa,YAAa,SAAQ,QAAQ;;CAUzC;AAED,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,aAAa,CAAA;AAEjE,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,oBAAoB,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAkE1F;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAGnD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CAAC,CAMxF;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAe7D;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC5B,KAAK,EAAE,eAAe,GACvB,OAAO,CAAC,kBAAkB,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CA0ErD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmC5F;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyB5E;AAED,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAG7D"}
package/dist/lib/auth.js CHANGED
@@ -1,7 +1,9 @@
1
- import { createSecureStore, SecureStoreUnavailableError, SECURE_STORE_DESCRIPTION, } from './secure-store.js';
2
- export { AUTH_FLAG_ORDER, CONFIG_PATH, readConfig, writeConfig, } from './config.js';
3
- import { CONFIG_PATH, readConfig, writeConfig, } from './config.js';
1
+ import { accountForUser, createSecureStore, LEGACY_ACCOUNT_NAME, SECURE_STORE_DESCRIPTION, SecureStoreUnavailableError, } from './secure-store.js';
2
+ export { AUTH_FLAG_ORDER, CONFIG_PATH, CONFIG_VERSION, readConfig, writeConfig, } from './config.js';
3
+ import { CONFIG_PATH, CONFIG_VERSION, readConfig, writeConfig, } from './config.js';
4
4
  import { CliError } from './errors.js';
5
+ import { getRequestedUserRef } from './global-args.js';
6
+ import { findUserByRef, getDefaultUser, getStoredUsers, NoUserSelectedError, removeStoredUser, setDefaultUser as setDefaultUserInConfig, upsertStoredUser, UserNotFoundError, } from './users.js';
5
7
  export const TOKEN_ENV_VAR = 'TODOIST_API_TOKEN';
6
8
  export class NoTokenError extends CliError {
7
9
  constructor() {
@@ -9,223 +11,413 @@ export class NoTokenError extends CliError {
9
11
  this.name = 'NoTokenError';
10
12
  }
11
13
  }
12
- export async function getApiToken() {
13
- // Priority 1: Environment variable
14
+ // ---------------------------------------------------------------------------
15
+ // Public API used by api/core, uploads, stats, doctor, auth subcommands
16
+ // ---------------------------------------------------------------------------
17
+ /**
18
+ * Resolve which stored user this invocation should act as, and load their
19
+ * token. Honors `--user <ref>`, then `user.defaultUser`, then a single stored
20
+ * user. Throws `NoUserSelectedError` when multiple users are stored without a
21
+ * default and no `--user` was passed; `UserNotFoundError` when `--user` does
22
+ * not match; `NoTokenError` when no users are stored.
23
+ *
24
+ * `TODOIST_API_TOKEN` short-circuits the resolver entirely — env tokens act as
25
+ * an anonymous identity for the duration of the command.
26
+ */
27
+ export async function resolveActiveUser(opts = {}) {
14
28
  const envToken = process.env[TOKEN_ENV_VAR];
15
29
  if (envToken) {
16
- return envToken;
30
+ return {
31
+ id: 'env',
32
+ email: '',
33
+ token: envToken,
34
+ authMode: 'unknown',
35
+ source: 'env',
36
+ };
17
37
  }
18
38
  const config = await readConfig();
19
- const configToken = getConfigToken(config);
20
- const secureStore = createSecureStore();
21
- if (configToken) {
22
- try {
23
- await secureStore.setSecret(configToken);
24
- const cleanupWarning = await cleanupAuthFallbackState(config, 'Token was migrated to secure storage,');
25
- if (cleanupWarning) {
26
- warn(cleanupWarning);
27
- }
39
+ const users = getStoredUsers(config);
40
+ const requestedRef = opts.ref ?? getRequestedUserRef();
41
+ // Gate the legacy fallback on the *absence* of `config.users` rather than
42
+ // an empty array. A v2 config that has been logged out (`users: []`) must
43
+ // not silently fall back to a stale `api-token` keyring entry — that
44
+ // would let a forgotten v1 credential reauthenticate the next command.
45
+ const isLegacyShape = !Array.isArray(config.users);
46
+ if (users.length === 0) {
47
+ if (requestedRef) {
48
+ // Asked for a specific user, but the store is empty — same error
49
+ // as missing user, scoped to the request.
50
+ throw new UserNotFoundError(requestedRef);
28
51
  }
29
- catch (error) {
30
- if (!(error instanceof SecureStoreUnavailableError)) {
31
- throw error;
32
- }
52
+ if (isLegacyShape) {
53
+ return resolveLegacyToken(config);
33
54
  }
34
- return configToken;
55
+ throw new NoTokenError();
35
56
  }
36
- if (config.pendingSecureStoreClear) {
37
- try {
38
- await secureStore.deleteSecret();
39
- const cleanupWarning = await cleanupAuthFallbackState(config, 'Secure-store token was removed,');
40
- if (cleanupWarning) {
41
- warn(cleanupWarning);
57
+ let target;
58
+ if (requestedRef) {
59
+ const found = findUserByRef(config, requestedRef);
60
+ if (!found)
61
+ throw new UserNotFoundError(requestedRef);
62
+ target = found.user;
63
+ }
64
+ else if (config.user?.defaultUser) {
65
+ const found = findUserByRef(config, config.user.defaultUser);
66
+ if (!found) {
67
+ // Default points at a missing user — treat like no default.
68
+ if (users.length === 1) {
69
+ target = users[0];
42
70
  }
43
- }
44
- catch (error) {
45
- if (!(error instanceof SecureStoreUnavailableError)) {
46
- throw error;
71
+ else {
72
+ throw new NoUserSelectedError();
47
73
  }
48
74
  }
49
- throw new NoTokenError();
50
- }
51
- try {
52
- const storedToken = await secureStore.getSecret();
53
- if (storedToken?.trim()) {
54
- return storedToken;
75
+ else {
76
+ target = found.user;
55
77
  }
56
78
  }
57
- catch (error) {
58
- if (!(error instanceof SecureStoreUnavailableError)) {
59
- throw error;
60
- }
79
+ else if (users.length === 1) {
80
+ target = users[0];
61
81
  }
62
- throw new NoTokenError();
82
+ else {
83
+ throw new NoUserSelectedError();
84
+ }
85
+ const { token, source } = await loadTokenForStoredUser(target);
86
+ return {
87
+ id: target.id,
88
+ email: target.email,
89
+ token,
90
+ authMode: target.auth_mode ?? 'unknown',
91
+ authScope: target.auth_scope,
92
+ authFlags: target.auth_flags,
93
+ source,
94
+ };
95
+ }
96
+ /**
97
+ * Backwards-compatible no-arg accessor for the active user's token. Most call
98
+ * sites (uploads, stats, api/core) only need the bearer string.
99
+ */
100
+ export async function getApiToken() {
101
+ const resolved = await resolveActiveUser();
102
+ return resolved.token;
63
103
  }
104
+ /**
105
+ * Like `resolveActiveUser` but returns whichever credentials are at hand
106
+ * without mutating storage. Useful for `td doctor` / `td config view` where
107
+ * we want to inspect (and report on) what would be used.
108
+ */
64
109
  export async function probeApiToken() {
65
- const envToken = process.env[TOKEN_ENV_VAR];
66
- if (envToken) {
67
- return {
68
- token: envToken,
69
- metadata: { authMode: 'unknown', source: 'env' },
70
- };
71
- }
72
- const config = await readConfig();
73
- const configToken = getConfigToken(config);
74
- if (configToken) {
75
- return {
76
- token: configToken,
77
- metadata: {
78
- authMode: config.auth_mode ?? 'unknown',
79
- authScope: config.auth_scope,
80
- authFlags: config.auth_flags,
81
- source: 'config-file',
82
- },
83
- };
84
- }
85
- if (config.pendingSecureStoreClear) {
86
- throw new NoTokenError();
87
- }
88
- const secureStore = createSecureStore();
110
+ const resolved = await resolveActiveUser();
111
+ return {
112
+ token: resolved.token,
113
+ metadata: resolvedToMetadata(resolved),
114
+ };
115
+ }
116
+ export async function getAuthMetadata() {
89
117
  try {
90
- const storedToken = await secureStore.getSecret();
91
- if (storedToken?.trim()) {
92
- return {
93
- token: storedToken.trim(),
94
- metadata: {
95
- authMode: config.auth_mode ?? 'unknown',
96
- authScope: config.auth_scope,
97
- authFlags: config.auth_flags,
98
- source: 'secure-store',
99
- },
100
- };
101
- }
118
+ const resolved = await resolveActiveUser();
119
+ return resolvedToMetadata(resolved);
102
120
  }
103
121
  catch (error) {
104
- if (!(error instanceof SecureStoreUnavailableError)) {
105
- throw error;
122
+ // Metadata callers (e.g. `ensureWriteAllowed`, scope-error
123
+ // remediation) need a sensible default rather than a hard failure
124
+ // when credentials are missing or the keyring is offline. Diagnostic
125
+ // commands use `probeApiToken` for that — it intentionally lets
126
+ // `SecureStoreUnavailableError` propagate so it can be reported.
127
+ if (error instanceof NoTokenError || error instanceof SecureStoreUnavailableError) {
128
+ return { authMode: 'unknown', source: 'secure-store' };
106
129
  }
107
130
  throw error;
108
131
  }
109
- throw new NoTokenError();
110
132
  }
111
- export async function saveApiToken(token, options = {}) {
112
- // Validate token (non-empty, reasonable length)
113
- if (!token || token.trim().length < 10) {
133
+ /**
134
+ * Add or update a user record. Stores the token in the OS credential manager
135
+ * under `user-<id>` when available, falls back to per-user plaintext in config.
136
+ * Sets `defaultUser` automatically if this is the first user being stored.
137
+ */
138
+ export async function upsertUser(input) {
139
+ if (!input.token || input.token.trim().length < 10) {
114
140
  throw new CliError('INVALID_TOKEN', 'Invalid token: Token must be at least 10 characters');
115
141
  }
116
- const trimmedToken = token.trim();
117
- const secureStore = createSecureStore();
142
+ if (!input.id) {
143
+ throw new CliError('INVALID_USER', 'Cannot store user record: missing id');
144
+ }
145
+ if (!input.email) {
146
+ throw new CliError('INVALID_USER', 'Cannot store user record: missing email');
147
+ }
148
+ const trimmedToken = input.token.trim();
149
+ const config = await readConfig();
150
+ const previouslyExisted = getStoredUsers(config).some((u) => u.id === input.id);
151
+ // Always set the first user as the default — even if `config.user.defaultUser`
152
+ // points at a stale/orphaned id, that pointer would otherwise wedge multi-user
153
+ // resolution on subsequent logins.
154
+ const shouldSetDefault = getStoredUsers(config).length === 0;
155
+ const baseRecord = {
156
+ id: input.id,
157
+ email: input.email,
158
+ auth_mode: input.authMode,
159
+ auth_scope: input.authScope,
160
+ auth_flags: input.authFlags,
161
+ };
162
+ const secureStore = createSecureStore(accountForUser(input.id));
163
+ let storedSecurely = false;
118
164
  try {
119
165
  await secureStore.setSecret(trimmedToken);
120
- const existingConfig = await readConfig();
121
- const configWithMeta = withAuthMetadata(existingConfig, options);
122
- const warning = await cleanupAuthFallbackState(configWithMeta, 'Token was stored securely,');
123
- return warning ? { storage: 'secure-store', warning } : { storage: 'secure-store' };
166
+ storedSecurely = true;
124
167
  }
125
168
  catch (error) {
126
- if (!(error instanceof SecureStoreUnavailableError)) {
169
+ if (!(error instanceof SecureStoreUnavailableError))
127
170
  throw error;
171
+ }
172
+ const userRecord = storedSecurely
173
+ ? baseRecord
174
+ : { ...baseRecord, api_token: trimmedToken };
175
+ let next = ensureV2Shape(config);
176
+ next = upsertStoredUser(next, userRecord).config;
177
+ if (shouldSetDefault) {
178
+ next = setDefaultUserInConfig(next, input.id);
179
+ }
180
+ next = stripLegacyAuthFields(next);
181
+ try {
182
+ await writeConfig(next);
183
+ }
184
+ catch (error) {
185
+ // Config write is the source of truth — without it, later commands
186
+ // can't resolve the user even though the keyring holds the secret.
187
+ // Roll the keyring back so we don't leak credentials for a non-stored
188
+ // account, then surface the failure.
189
+ if (storedSecurely) {
190
+ try {
191
+ await secureStore.deleteSecret();
192
+ }
193
+ catch {
194
+ // best effort — the original error is what the user needs
195
+ }
128
196
  }
197
+ const detail = error instanceof Error && error.message ? `: ${error.message}` : '';
198
+ throw new CliError('CONFIG_WRITE_FAILED', `Could not persist account record to ${CONFIG_PATH}${detail}`, ['Check file permissions on ~/.config/todoist-cli/, then re-run the command']);
129
199
  }
130
- const config = await readConfig();
131
- config.api_token = trimmedToken;
132
- delete config.pendingSecureStoreClear;
133
- config.auth_mode = options.authMode;
134
- config.auth_scope = options.authScope;
135
- config.auth_flags = options.authFlags;
136
- await writeConfig(config);
137
200
  return {
138
- storage: 'config-file',
139
- warning: buildFallbackWarning('token saved as plaintext in'),
201
+ storage: storedSecurely ? 'secure-store' : 'config-file',
202
+ warning: storedSecurely ? undefined : buildFallbackWarning('token saved as plaintext in'),
203
+ replaced: previouslyExisted,
140
204
  };
141
205
  }
142
- export async function clearApiToken() {
206
+ /**
207
+ * Remove the active user (resolved via `--user` or default). For multi-user
208
+ * installs without a default, callers must pass `--user <ref>` to disambiguate.
209
+ */
210
+ export async function clearApiToken(opts = {}) {
143
211
  const config = await readConfig();
144
- const secureStore = createSecureStore();
212
+ const users = getStoredUsers(config);
213
+ const requestedRef = opts.ref ?? getRequestedUserRef();
214
+ // No users stored yet — fall through to legacy logout only on a v1-shaped
215
+ // config (no `users` key at all). Empty `users: []` is an already-clean
216
+ // v2 install; treat it as a no-op rather than poking the legacy keyring.
217
+ if (users.length === 0) {
218
+ if (!Array.isArray(config.users)) {
219
+ return clearLegacyToken(config);
220
+ }
221
+ if (requestedRef) {
222
+ throw new UserNotFoundError(requestedRef);
223
+ }
224
+ throw new NoTokenError();
225
+ }
226
+ let target;
227
+ if (requestedRef) {
228
+ const found = findUserByRef(config, requestedRef);
229
+ if (!found)
230
+ throw new UserNotFoundError(requestedRef);
231
+ target = found.user;
232
+ }
233
+ else {
234
+ const def = getDefaultUser(config);
235
+ if (def) {
236
+ target = def;
237
+ }
238
+ else if (users.length === 1) {
239
+ target = users[0];
240
+ }
241
+ else {
242
+ throw new NoUserSelectedError();
243
+ }
244
+ }
245
+ return removeUserById(target.id);
246
+ }
247
+ /**
248
+ * Remove a specific user by id. Used by `td user remove` and as the underlying
249
+ * primitive for `clearApiToken`.
250
+ *
251
+ * Order matters: write the new config first (the source of truth) and only
252
+ * then delete the secret. If the config update fails the keyring is untouched,
253
+ * so the user remains fully functional and a retry will simply re-attempt
254
+ * the same operation. A keyring delete failure after a successful config
255
+ * update leaves an orphan secret that the keyring's own service can clean up
256
+ * later — the CLI no longer references it.
257
+ */
258
+ export async function removeUserById(id) {
259
+ const config = await readConfig();
260
+ const next = stripLegacyAuthFields(removeStoredUser(ensureV2Shape(config), id));
261
+ try {
262
+ await writeConfig(next);
263
+ }
264
+ catch (error) {
265
+ const detail = error instanceof Error && error.message ? `: ${error.message}` : '';
266
+ throw new CliError('CONFIG_WRITE_FAILED', `Could not update ${CONFIG_PATH}${detail}`, [
267
+ 'Check file permissions on ~/.config/todoist-cli/, then re-run the command',
268
+ ]);
269
+ }
270
+ const secureStore = createSecureStore(accountForUser(id));
145
271
  try {
146
272
  await secureStore.deleteSecret();
147
- const warning = await cleanupAllAuthState(config, 'Secure-store token was removed,');
148
- return warning ? { storage: 'secure-store', warning } : { storage: 'secure-store' };
149
273
  }
150
274
  catch (error) {
151
- if (!(error instanceof SecureStoreUnavailableError)) {
275
+ if (!(error instanceof SecureStoreUnavailableError))
152
276
  throw error;
153
- }
277
+ return {
278
+ storage: 'config-file',
279
+ warning: buildFallbackWarning('local auth state cleared in'),
280
+ };
154
281
  }
155
- await writeConfig(withPendingSecureStoreClear(withoutAuthMetadata(config)));
156
- return {
157
- storage: 'config-file',
158
- warning: buildFallbackWarning('local auth state cleared in'),
159
- };
282
+ return { storage: 'secure-store' };
160
283
  }
161
- export async function getAuthMetadata() {
162
- if (process.env[TOKEN_ENV_VAR]) {
163
- return { authMode: 'unknown', source: 'env' };
164
- }
284
+ export async function setDefaultUserId(id) {
285
+ const config = ensureV2Shape(await readConfig());
286
+ const found = findUserByRef(config, id);
287
+ if (!found)
288
+ throw new UserNotFoundError(id);
289
+ await writeConfig(stripLegacyAuthFields(setDefaultUserInConfig(config, found.user.id)));
290
+ }
291
+ export async function listStoredUsers() {
165
292
  const config = await readConfig();
166
- if (config.auth_mode) {
293
+ return getStoredUsers(config);
294
+ }
295
+ // ---------------------------------------------------------------------------
296
+ // Internal helpers
297
+ // ---------------------------------------------------------------------------
298
+ async function loadTokenForStoredUser(user) {
299
+ if (user.api_token?.trim()) {
300
+ return { token: user.api_token.trim(), source: 'config-file' };
301
+ }
302
+ const secureStore = createSecureStore(accountForUser(user.id));
303
+ // Re-throw `SecureStoreUnavailableError` rather than collapsing it into
304
+ // `NoTokenError`. A stored v2 user with the keyring offline is *not* the
305
+ // same situation as no credentials at all — `td doctor` and `td config
306
+ // view` both have dedicated handling for the unavailable-store case and
307
+ // should report the keyring failure rather than misleadingly say the user
308
+ // has no saved credentials.
309
+ const stored = await secureStore.getSecret();
310
+ if (stored?.trim()) {
311
+ return { token: stored.trim(), source: 'secure-store' };
312
+ }
313
+ throw new NoTokenError();
314
+ }
315
+ /**
316
+ * v1 fallback: when there are no v2 users in the config, see if a legacy
317
+ * single-user token is present (config plaintext or legacy `api-token`
318
+ * keyring entry). Returns it as a synthetic ResolvedUser so the CLI keeps
319
+ * working until postinstall (or `td auth login`) migrates the install.
320
+ */
321
+ async function resolveLegacyToken(config) {
322
+ const legacyToken = typeof config.api_token === 'string' ? config.api_token.trim() : '';
323
+ if (legacyToken) {
167
324
  return {
168
- authMode: config.auth_mode,
325
+ id: 'legacy',
326
+ email: '',
327
+ token: legacyToken,
328
+ authMode: config.auth_mode ?? 'unknown',
169
329
  authScope: config.auth_scope,
170
330
  authFlags: config.auth_flags,
171
- source: getConfigToken(config) ? 'config-file' : 'secure-store',
331
+ source: 'config-file',
172
332
  };
173
333
  }
174
- return {
175
- authMode: 'unknown',
176
- source: getConfigToken(config) ? 'config-file' : 'secure-store',
177
- };
334
+ if (config.pendingSecureStoreClear) {
335
+ // v1 logout state: nothing to restore. Surface as the same NoTokenError
336
+ // the v1 path used to throw.
337
+ throw new NoTokenError();
338
+ }
339
+ const secureStore = createSecureStore(LEGACY_ACCOUNT_NAME);
340
+ try {
341
+ const stored = await secureStore.getSecret();
342
+ if (stored?.trim()) {
343
+ return {
344
+ id: 'legacy',
345
+ email: '',
346
+ token: stored.trim(),
347
+ authMode: config.auth_mode ?? 'unknown',
348
+ authScope: config.auth_scope,
349
+ authFlags: config.auth_flags,
350
+ source: 'secure-store',
351
+ };
352
+ }
353
+ }
354
+ catch (error) {
355
+ if (!(error instanceof SecureStoreUnavailableError))
356
+ throw error;
357
+ }
358
+ throw new NoTokenError();
178
359
  }
179
- async function cleanupAuthFallbackState(config, warningPrefix) {
360
+ async function clearLegacyToken(config) {
361
+ const secureStore = createSecureStore(LEGACY_ACCOUNT_NAME);
180
362
  try {
181
- await writeConfig(withoutAuthFallbackState(config));
182
- return undefined;
363
+ await secureStore.deleteSecret();
364
+ const cleaned = stripLegacyAuthFields(config);
365
+ try {
366
+ await writeConfig(cleaned);
367
+ }
368
+ catch (error) {
369
+ return {
370
+ storage: 'secure-store',
371
+ warning: buildConfigCleanupWarning('Secure-store token was removed,', error),
372
+ };
373
+ }
374
+ return { storage: 'secure-store' };
183
375
  }
184
376
  catch (error) {
185
- return buildConfigCleanupWarning(warningPrefix, error);
377
+ if (!(error instanceof SecureStoreUnavailableError))
378
+ throw error;
379
+ }
380
+ const cleared = {
381
+ ...stripLegacyAuthFields(config),
382
+ pendingSecureStoreClear: true,
383
+ };
384
+ try {
385
+ await writeConfig(cleared);
386
+ }
387
+ catch {
388
+ // best-effort
186
389
  }
390
+ return {
391
+ storage: 'config-file',
392
+ warning: buildFallbackWarning('local auth state cleared in'),
393
+ };
187
394
  }
188
- function getConfigToken(config) {
189
- return typeof config.api_token === 'string' && config.api_token.trim()
190
- ? config.api_token.trim()
191
- : null;
395
+ function ensureV2Shape(config) {
396
+ const next = { ...config, config_version: CONFIG_VERSION };
397
+ if (!Array.isArray(next.users)) {
398
+ next.users = [];
399
+ }
400
+ return next;
192
401
  }
193
- function withoutAuthFallbackState(config) {
194
- const { api_token: _token, pendingSecureStoreClear: _pending, ...rest } = config;
402
+ function stripLegacyAuthFields(config) {
403
+ const { api_token: _t, auth_mode: _m, auth_scope: _s, auth_flags: _f, pendingSecureStoreClear: _p, ...rest } = config;
195
404
  return rest;
196
405
  }
197
- function withPendingSecureStoreClear(config) {
198
- return { ...withoutAuthFallbackState(config), pendingSecureStoreClear: true };
199
- }
200
- function withAuthMetadata(config, options) {
406
+ function resolvedToMetadata(resolved) {
201
407
  return {
202
- ...config,
203
- auth_mode: options.authMode,
204
- auth_scope: options.authScope,
205
- auth_flags: options.authFlags,
408
+ authMode: resolved.authMode,
409
+ authScope: resolved.authScope,
410
+ authFlags: resolved.authFlags,
411
+ source: resolved.source,
412
+ userId: resolved.id === 'env' || resolved.id === 'legacy' ? undefined : resolved.id,
413
+ email: resolved.email || undefined,
206
414
  };
207
415
  }
208
- function withoutAuthMetadata(config) {
209
- const { auth_mode: _mode, auth_scope: _scope, auth_flags: _flags, ...rest } = config;
210
- return rest;
211
- }
212
- async function cleanupAllAuthState(config, warningPrefix) {
213
- try {
214
- await writeConfig(withoutAuthFallbackState(withoutAuthMetadata(config)));
215
- return undefined;
216
- }
217
- catch (error) {
218
- return buildConfigCleanupWarning(warningPrefix, error);
219
- }
220
- }
221
416
  function buildFallbackWarning(action) {
222
417
  return `${SECURE_STORE_DESCRIPTION} unavailable; ${action} ${CONFIG_PATH}`;
223
418
  }
224
419
  function buildConfigCleanupWarning(prefix, error) {
225
420
  const detail = error instanceof Error && error.message ? ` (${error.message})` : '';
226
- return `${prefix} but could not remove legacy plaintext token from ${CONFIG_PATH}${detail}`;
227
- }
228
- function warn(message) {
229
- console.error(`Warning: ${message}`);
421
+ return `${prefix} but could not update ${CONFIG_PATH}${detail}`;
230
422
  }
231
423
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}