@doist/todoist-cli 1.57.0 → 1.59.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 +85 -13
- package/dist/commands/config/view.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +69 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/user/current.d.ts +5 -0
- package/dist/commands/user/current.d.ts.map +1 -0
- package/dist/commands/user/current.js +32 -0
- package/dist/commands/user/current.js.map +1 -0
- 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 +34 -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/remove.d.ts +2 -0
- package/dist/commands/user/remove.d.ts.map +1 -0
- package/dist/commands/user/remove.js +26 -0
- package/dist/commands/user/remove.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/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 +24 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +83 -3
- 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/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/auth.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { createSecureStore,
|
|
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
|
-
|
|
13
|
-
|
|
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
|
|
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
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
throw error;
|
|
32
|
-
}
|
|
52
|
+
if (isLegacyShape) {
|
|
53
|
+
return resolveLegacyToken(config);
|
|
33
54
|
}
|
|
34
|
-
|
|
55
|
+
throw new NoTokenError();
|
|
35
56
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
45
|
-
if (!(error instanceof SecureStoreUnavailableError)) {
|
|
46
|
-
throw error;
|
|
71
|
+
else {
|
|
72
|
+
throw new NoUserSelectedError();
|
|
47
73
|
}
|
|
48
74
|
}
|
|
49
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
throw error;
|
|
60
|
-
}
|
|
79
|
+
else if (users.length === 1) {
|
|
80
|
+
target = users[0];
|
|
61
81
|
}
|
|
62
|
-
|
|
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
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
|
91
|
-
|
|
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
|
-
|
|
105
|
-
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
117
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
331
|
+
source: 'config-file',
|
|
172
332
|
};
|
|
173
333
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
|
360
|
+
async function clearLegacyToken(config) {
|
|
361
|
+
const secureStore = createSecureStore(LEGACY_ACCOUNT_NAME);
|
|
180
362
|
try {
|
|
181
|
-
await
|
|
182
|
-
|
|
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
|
-
|
|
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
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
|
194
|
-
const { api_token:
|
|
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
|
|
198
|
-
return { ...withoutAuthFallbackState(config), pendingSecureStoreClear: true };
|
|
199
|
-
}
|
|
200
|
-
function withAuthMetadata(config, options) {
|
|
406
|
+
function resolvedToMetadata(resolved) {
|
|
201
407
|
return {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
|
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
|
package/dist/lib/auth.js.map
CHANGED
|
@@ -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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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export interface HelpCenterConfig {
|
|
|
7
7
|
export interface WorkspaceConfig {
|
|
8
8
|
defaultWorkspace?: string;
|
|
9
9
|
}
|
|
10
|
+
export interface UserConfig {
|
|
11
|
+
defaultUser?: string;
|
|
12
|
+
}
|
|
10
13
|
/**
|
|
11
14
|
* Canonical ordered list of login flags. Acts as the single source of truth —
|
|
12
15
|
* `AuthFlag`, `AUTH_FLAGS` (validation), and the display order of re-login
|
|
@@ -16,15 +19,33 @@ export interface WorkspaceConfig {
|
|
|
16
19
|
*/
|
|
17
20
|
export declare const AUTH_FLAG_ORDER: readonly ["read-only", "app-management", "backups"];
|
|
18
21
|
export type AuthFlag = (typeof AUTH_FLAG_ORDER)[number];
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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;
|
|
22
30
|
auth_mode?: AuthMode;
|
|
23
31
|
auth_scope?: string;
|
|
24
32
|
auth_flags?: AuthFlag[];
|
|
33
|
+
api_token?: string;
|
|
34
|
+
pendingSecureStoreClear?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare const CONFIG_VERSION: 2;
|
|
37
|
+
export interface Config extends Record<string, unknown> {
|
|
38
|
+
config_version?: number;
|
|
39
|
+
user?: UserConfig;
|
|
40
|
+
users?: StoredUser[];
|
|
25
41
|
update_channel?: UpdateChannel;
|
|
26
42
|
hc?: HelpCenterConfig;
|
|
27
43
|
workspace?: WorkspaceConfig;
|
|
44
|
+
api_token?: string;
|
|
45
|
+
pendingSecureStoreClear?: boolean;
|
|
46
|
+
auth_mode?: AuthMode;
|
|
47
|
+
auth_scope?: string;
|
|
48
|
+
auth_flags?: AuthFlag[];
|
|
28
49
|
}
|
|
29
50
|
export declare const AUTH_FLAGS: ReadonlySet<AuthFlag>;
|
|
30
51
|
export declare function readConfig(): Promise<Config>;
|