@doist/todoist-cli 1.62.0 → 1.62.2
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/apps/list.d.ts.map +1 -1
- package/dist/commands/apps/list.js +5 -4
- package/dist/commands/apps/list.js.map +1 -1
- package/dist/commands/auth/index.d.ts +1 -1
- package/dist/commands/auth/index.d.ts.map +1 -1
- package/dist/commands/auth/index.js +2 -13
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/auth/login.d.ts +13 -4
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +75 -48
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/changelog.d.ts +1 -6
- package/dist/commands/changelog.d.ts.map +1 -1
- package/dist/commands/changelog.js +6 -85
- package/dist/commands/changelog.js.map +1 -1
- package/dist/commands/hc/index.d.ts.map +1 -1
- package/dist/commands/hc/index.js +1 -0
- package/dist/commands/hc/index.js.map +1 -1
- package/dist/commands/hc/search.d.ts +1 -0
- package/dist/commands/hc/search.d.ts.map +1 -1
- package/dist/commands/hc/search.js +8 -3
- package/dist/commands/hc/search.js.map +1 -1
- package/dist/commands/task/index.d.ts.map +1 -1
- package/dist/commands/task/index.js +1 -0
- package/dist/commands/task/index.js.map +1 -1
- package/dist/commands/task/update.d.ts +1 -1
- package/dist/commands/task/update.d.ts.map +1 -1
- package/dist/commands/task/update.js +6 -2
- package/dist/commands/task/update.js.map +1 -1
- package/dist/commands/update/index.d.ts +1 -1
- package/dist/commands/update/index.d.ts.map +1 -1
- package/dist/commands/update/index.js +11 -14
- package/dist/commands/update/index.js.map +1 -1
- package/dist/commands/user/index.d.ts.map +1 -1
- package/dist/commands/user/index.js +1 -0
- package/dist/commands/user/index.js.map +1 -1
- package/dist/commands/user/list.d.ts +1 -0
- package/dist/commands/user/list.d.ts.map +1 -1
- package/dist/commands/user/list.js +22 -11
- package/dist/commands/user/list.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/auth-html.d.ts +11 -0
- package/dist/lib/auth-html.d.ts.map +1 -0
- package/dist/lib/{oauth-server.js → auth-html.js} +13 -97
- package/dist/lib/auth-html.js.map +1 -0
- package/dist/lib/auth-provider.d.ts +16 -0
- package/dist/lib/auth-provider.d.ts.map +1 -0
- package/dist/lib/auth-provider.js +59 -0
- package/dist/lib/auth-provider.js.map +1 -0
- package/dist/lib/auth-store.d.ts +48 -0
- package/dist/lib/auth-store.d.ts.map +1 -0
- package/dist/lib/auth-store.js +91 -0
- package/dist/lib/auth-store.js.map +1 -0
- package/dist/lib/auth.d.ts +4 -0
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +1 -1
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/errors.d.ts +1 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +1 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/global-args.d.ts +20 -24
- package/dist/lib/global-args.d.ts.map +1 -1
- package/dist/lib/global-args.js +71 -134
- package/dist/lib/global-args.js.map +1 -1
- package/dist/lib/markdown.d.ts.map +1 -1
- package/dist/lib/markdown.js +8 -13
- package/dist/lib/markdown.js.map +1 -1
- package/dist/lib/oauth-scopes.d.ts +21 -0
- package/dist/lib/oauth-scopes.d.ts.map +1 -1
- package/dist/lib/oauth-scopes.js +28 -0
- package/dist/lib/oauth-scopes.js.map +1 -1
- package/dist/lib/options.d.ts +2 -3
- package/dist/lib/options.d.ts.map +1 -1
- package/dist/lib/output.d.ts +5 -3
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.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 +10 -2
- package/dist/lib/skills/content.js.map +1 -1
- package/dist/lib/update.d.ts +7 -13
- package/dist/lib/update.d.ts.map +1 -1
- package/dist/lib/update.js +10 -36
- package/dist/lib/update.js.map +1 -1
- package/package.json +5 -5
- package/dist/commands/update/action.d.ts +0 -5
- package/dist/commands/update/action.d.ts.map +0 -1
- package/dist/commands/update/action.js +0 -112
- package/dist/commands/update/action.js.map +0 -1
- package/dist/commands/update/switch.d.ts +0 -5
- package/dist/commands/update/switch.d.ts.map +0 -1
- package/dist/commands/update/switch.js +0 -31
- package/dist/commands/update/switch.js.map +0 -1
- package/dist/lib/oauth-server.d.ts +0 -8
- package/dist/lib/oauth-server.d.ts.map +0 -1
- package/dist/lib/oauth-server.js.map +0 -1
- package/dist/lib/oauth.d.ts +0 -13
- package/dist/lib/oauth.d.ts.map +0 -1
- package/dist/lib/oauth.js +0 -51
- package/dist/lib/oauth.js.map +0 -1
- package/dist/lib/pkce.d.ts +0 -4
- package/dist/lib/pkce.d.ts.map +0 -1
- package/dist/lib/pkce.js +0 -19
- package/dist/lib/pkce.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ5D"}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { registerUpdateCommand as registerCoreUpdateCommand } from '@doist/cli-core/commands';
|
|
2
|
+
import packageJson from '../../../package.json' with { type: 'json' };
|
|
3
|
+
import { getConfigPath } from '../../lib/config.js';
|
|
4
|
+
import { withSpinner } from '../../lib/spinner.js';
|
|
3
5
|
export function registerUpdateCommand(program) {
|
|
4
|
-
|
|
5
|
-
.
|
|
6
|
-
.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
.command('switch')
|
|
12
|
-
.description('Switch update channel between stable and pre-release')
|
|
13
|
-
.option('--stable', 'Use the stable release channel')
|
|
14
|
-
.option('--pre-release', 'Use the pre-release (next) channel')
|
|
15
|
-
.action(switchChannel);
|
|
6
|
+
registerCoreUpdateCommand(program, {
|
|
7
|
+
packageName: packageJson.name,
|
|
8
|
+
currentVersion: packageJson.version,
|
|
9
|
+
configPath: getConfigPath(),
|
|
10
|
+
changelogCommandName: 'td changelog',
|
|
11
|
+
withSpinner,
|
|
12
|
+
});
|
|
16
13
|
}
|
|
17
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,IAAI,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAE7F,OAAO,WAAW,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,yBAAyB,CAAC,OAAO,EAAE;QAC/B,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,cAAc,EAAE,WAAW,CAAC,OAAO;QACnC,UAAU,EAAE,aAAa,EAAE;QAC3B,oBAAoB,EAAE,cAAc;QACpC,WAAW;KACd,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsC1D"}
|
|
@@ -7,6 +7,7 @@ export function registerUserCommand(program) {
|
|
|
7
7
|
user.command('list')
|
|
8
8
|
.description('List all stored Todoist accounts')
|
|
9
9
|
.option('--json', 'Output as JSON')
|
|
10
|
+
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
10
11
|
.action(listUsersCommand);
|
|
11
12
|
user.command('use <ref>')
|
|
12
13
|
.description('Set the default account used when --user is not provided')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/user/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAEzC,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,6CAA6C,CAAC,CAAA;IAE/F,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAE7B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;IAEjD,4EAA4E;IAC5E,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;IAEjD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0EAA0E,CAAC;SACvF,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAE/B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,8DAA8D,CAAC;SAC3E,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;IAEpD,IAAI,CAAC,WAAW,CACZ,OAAO,EACP;;;;;;;mCAO2B,CAC9B,CAAA;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/user/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAEzC,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,6CAA6C,CAAC,CAAA;IAE/F,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAE7B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;IAEjD,4EAA4E;IAC5E,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;IAEjD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0EAA0E,CAAC;SACvF,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAE/B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,8DAA8D,CAAC;SAC3E,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;IAEpD,IAAI,CAAC,WAAW,CACZ,OAAO,EACP;;;;;;;mCAO2B,CAC9B,CAAA;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/user/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/user/list.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAcD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/E"}
|
|
@@ -1,25 +1,36 @@
|
|
|
1
|
+
import { formatJson, formatNdjson, printEmpty } from '@doist/cli-core';
|
|
1
2
|
import chalk from 'chalk';
|
|
2
3
|
import { listStoredUsers, readConfig } from '../../lib/auth.js';
|
|
3
4
|
import { isAccessible } from '../../lib/global-args.js';
|
|
4
5
|
import { getDefaultUserId } from '../../lib/users.js';
|
|
6
|
+
function projectUser(u, defaultId) {
|
|
7
|
+
return {
|
|
8
|
+
id: u.id,
|
|
9
|
+
email: u.email,
|
|
10
|
+
isDefault: u.id === defaultId,
|
|
11
|
+
authMode: u.auth_mode,
|
|
12
|
+
authScope: u.auth_scope,
|
|
13
|
+
authFlags: u.auth_flags,
|
|
14
|
+
storage: u.api_token ? 'config-file' : 'secure-store',
|
|
15
|
+
};
|
|
16
|
+
}
|
|
5
17
|
export async function listUsersCommand(options) {
|
|
6
18
|
const users = await listStoredUsers();
|
|
7
19
|
const config = await readConfig();
|
|
8
20
|
const defaultId = getDefaultUserId(config);
|
|
21
|
+
if (users.length === 0) {
|
|
22
|
+
printEmpty({
|
|
23
|
+
options,
|
|
24
|
+
message: chalk.dim('No stored Todoist accounts. Run `td auth login` to add one.'),
|
|
25
|
+
});
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
9
28
|
if (options.json) {
|
|
10
|
-
console.log(
|
|
11
|
-
id: u.id,
|
|
12
|
-
email: u.email,
|
|
13
|
-
isDefault: u.id === defaultId,
|
|
14
|
-
authMode: u.auth_mode,
|
|
15
|
-
authScope: u.auth_scope,
|
|
16
|
-
authFlags: u.auth_flags,
|
|
17
|
-
storage: u.api_token ? 'config-file' : 'secure-store',
|
|
18
|
-
})), null, 2));
|
|
29
|
+
console.log(formatJson(users.map((u) => projectUser(u, defaultId))));
|
|
19
30
|
return;
|
|
20
31
|
}
|
|
21
|
-
if (
|
|
22
|
-
console.log(
|
|
32
|
+
if (options.ndjson) {
|
|
33
|
+
console.log(formatNdjson(users.map((u) => projectUser(u, defaultId))));
|
|
23
34
|
return;
|
|
24
35
|
}
|
|
25
36
|
const accessible = isAccessible();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/user/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/user/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAOrD,SAAS,WAAW,CAAC,CAAa,EAAE,SAA6B;IAC7D,OAAO;QACH,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,SAAS;QAC7B,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc;KACxD,CAAA;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAyB;IAC5D,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;IACrC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAE1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,UAAU,CAAC;YACP,OAAO;YACP,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC;SACpF,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QACpE,OAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,OAAM;IACV,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,EAAE,CAAA;IACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,KAAK,SAAS,CAAA;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACvF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAA;IACnE,CAAC;AACL,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { program } from 'commander';
|
|
3
3
|
import packageJson from '../package.json' with { type: 'json' };
|
|
4
|
-
import { CliError } from './lib/errors.js';
|
|
4
|
+
import { BaseCliError, CliError } from './lib/errors.js';
|
|
5
5
|
import { getRequestedUserRef, isJsonMode, isNdjsonMode, isRawMode, stripUserFlag, } from './lib/global-args.js';
|
|
6
6
|
import { initializeLogger } from './lib/logger.js';
|
|
7
7
|
import { preloadMarkdown } from './lib/markdown.js';
|
|
@@ -260,7 +260,7 @@ initializeLogger();
|
|
|
260
260
|
program
|
|
261
261
|
.parseAsync()
|
|
262
262
|
.catch((err) => {
|
|
263
|
-
if (err instanceof
|
|
263
|
+
if (err instanceof BaseCliError) {
|
|
264
264
|
console.error(isJsonMode() ? formatErrorJson(err) : formatError(err));
|
|
265
265
|
}
|
|
266
266
|
else {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAgB,OAAO,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branded HTML pages served by the OAuth callback server. Wired into
|
|
3
|
+
* cli-core's `registerAuthCommand` via the `renderSuccess` / `renderError`
|
|
4
|
+
* options so the runtime stays generic while the CLI keeps its branding.
|
|
5
|
+
*
|
|
6
|
+
* The two consts (SUCCESS_HTML / ERROR_HTML) were lifted verbatim from the
|
|
7
|
+
* pre-cli-core `src/lib/oauth-server.ts` to preserve the existing UX.
|
|
8
|
+
*/
|
|
9
|
+
export declare function renderAuthSuccessPage(): string;
|
|
10
|
+
export declare function renderAuthErrorPage(message: string): string;
|
|
11
|
+
//# sourceMappingURL=auth-html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-html.d.ts","sourceRoot":"","sources":["../../src/lib/auth-html.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAosBH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Branded HTML pages served by the OAuth callback server. Wired into
|
|
3
|
+
* cli-core's `registerAuthCommand` via the `renderSuccess` / `renderError`
|
|
4
|
+
* options so the runtime stays generic while the CLI keeps its branding.
|
|
5
|
+
*
|
|
6
|
+
* The two consts (SUCCESS_HTML / ERROR_HTML) were lifted verbatim from the
|
|
7
|
+
* pre-cli-core `src/lib/oauth-server.ts` to preserve the existing UX.
|
|
8
|
+
*/
|
|
5
9
|
const SUCCESS_HTML = `
|
|
6
10
|
<!DOCTYPE html>
|
|
7
11
|
<html lang="en">
|
|
@@ -706,98 +710,10 @@ const ERROR_HTML = (message) => `
|
|
|
706
710
|
</body>
|
|
707
711
|
</html>
|
|
708
712
|
`;
|
|
709
|
-
export function
|
|
710
|
-
return
|
|
713
|
+
export function renderAuthSuccessPage() {
|
|
714
|
+
return SUCCESS_HTML;
|
|
711
715
|
}
|
|
712
|
-
function
|
|
713
|
-
return
|
|
714
|
-
server.once('error', reject);
|
|
715
|
-
server.listen(port, () => {
|
|
716
|
-
server.removeListener('error', reject);
|
|
717
|
-
resolve();
|
|
718
|
-
});
|
|
719
|
-
});
|
|
716
|
+
export function renderAuthErrorPage(message) {
|
|
717
|
+
return ERROR_HTML(message);
|
|
720
718
|
}
|
|
721
|
-
|
|
722
|
-
let timeoutId = null;
|
|
723
|
-
let boundPort = DEFAULT_PORT;
|
|
724
|
-
const server = createServer();
|
|
725
|
-
let closed = false;
|
|
726
|
-
const cleanup = () => {
|
|
727
|
-
if (closed)
|
|
728
|
-
return;
|
|
729
|
-
closed = true;
|
|
730
|
-
if (timeoutId) {
|
|
731
|
-
clearTimeout(timeoutId);
|
|
732
|
-
timeoutId = null;
|
|
733
|
-
}
|
|
734
|
-
server.close();
|
|
735
|
-
};
|
|
736
|
-
// Find an available port
|
|
737
|
-
for (let port = DEFAULT_PORT; port < DEFAULT_PORT + MAX_PORT_ATTEMPTS; port++) {
|
|
738
|
-
try {
|
|
739
|
-
await tryListen(server, port);
|
|
740
|
-
boundPort = port;
|
|
741
|
-
break;
|
|
742
|
-
}
|
|
743
|
-
catch (err) {
|
|
744
|
-
if (err instanceof Error &&
|
|
745
|
-
'code' in err &&
|
|
746
|
-
err.code === 'EADDRINUSE') {
|
|
747
|
-
if (port === DEFAULT_PORT + MAX_PORT_ATTEMPTS - 1) {
|
|
748
|
-
throw new Error(`Could not find an available port (tried ${DEFAULT_PORT}-${DEFAULT_PORT + MAX_PORT_ATTEMPTS - 1})`);
|
|
749
|
-
}
|
|
750
|
-
continue;
|
|
751
|
-
}
|
|
752
|
-
throw err;
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
const promise = new Promise((resolve, reject) => {
|
|
756
|
-
server.on('request', (req, res) => {
|
|
757
|
-
const url = new URL(req.url || '/', `http://localhost:${boundPort}`);
|
|
758
|
-
if (url.pathname !== '/callback') {
|
|
759
|
-
res.writeHead(404);
|
|
760
|
-
res.end('Not found');
|
|
761
|
-
return;
|
|
762
|
-
}
|
|
763
|
-
const code = url.searchParams.get('code');
|
|
764
|
-
const state = url.searchParams.get('state');
|
|
765
|
-
const error = url.searchParams.get('error');
|
|
766
|
-
if (error) {
|
|
767
|
-
res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
768
|
-
res.end(ERROR_HTML(error));
|
|
769
|
-
cleanup();
|
|
770
|
-
reject(new Error(`OAuth error: ${error}`));
|
|
771
|
-
return;
|
|
772
|
-
}
|
|
773
|
-
if (!code || !state) {
|
|
774
|
-
res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
775
|
-
res.end(ERROR_HTML('Missing code or state parameter'));
|
|
776
|
-
cleanup();
|
|
777
|
-
reject(new Error('Missing code or state parameter'));
|
|
778
|
-
return;
|
|
779
|
-
}
|
|
780
|
-
if (state !== expectedState) {
|
|
781
|
-
res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
782
|
-
res.end(ERROR_HTML('Invalid state parameter (possible CSRF attack)'));
|
|
783
|
-
cleanup();
|
|
784
|
-
reject(new Error('Invalid state parameter'));
|
|
785
|
-
return;
|
|
786
|
-
}
|
|
787
|
-
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
788
|
-
res.end(SUCCESS_HTML);
|
|
789
|
-
cleanup();
|
|
790
|
-
resolve(code);
|
|
791
|
-
});
|
|
792
|
-
server.on('error', (err) => {
|
|
793
|
-
cleanup();
|
|
794
|
-
reject(err);
|
|
795
|
-
});
|
|
796
|
-
timeoutId = setTimeout(() => {
|
|
797
|
-
cleanup();
|
|
798
|
-
reject(new Error('OAuth callback timed out'));
|
|
799
|
-
}, TIMEOUT_MS);
|
|
800
|
-
});
|
|
801
|
-
return { promise, port: boundPort, cleanup };
|
|
802
|
-
}
|
|
803
|
-
//# sourceMappingURL=oauth-server.js.map
|
|
719
|
+
//# sourceMappingURL=auth-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-html.js","sourceRoot":"","sources":["../../src/lib/auth-html.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkcpB,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuP3B,OAAO;;;;;CAKnB,CAAA;AAED,MAAM,UAAU,qBAAqB;IACjC,OAAO,YAAY,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IAC/C,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type AuthProvider } from '@doist/cli-core/auth';
|
|
2
|
+
import { type TodoistAccount } from './auth-store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build an `AuthProvider<TodoistAccount>` driven by cli-core's PKCE factory.
|
|
5
|
+
*
|
|
6
|
+
* The wrapper only overrides `validateToken` — `runOAuthFlow` automatically
|
|
7
|
+
* folds the runtime `flags` and `readOnly` values into the handshake
|
|
8
|
+
* between `authorize` and `exchangeCode`/`validateToken`, so we read them
|
|
9
|
+
* back out here to assemble the `auth_mode` / `auth_scope` / `auth_flags`
|
|
10
|
+
* triplet that todoist persists per account.
|
|
11
|
+
*
|
|
12
|
+
* The token-endpoint POST is routed through `fetchTodoist` so the usage-
|
|
13
|
+
* tracking headers (User-Agent, Doist-OS, …) are included.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createTodoistAuthProvider(): AuthProvider<TodoistAccount>;
|
|
16
|
+
//# sourceMappingURL=auth-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-provider.d.ts","sourceRoot":"","sources":["../../src/lib/auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,sBAAsB,CAAA;AAE5E,OAAO,EAAE,KAAK,cAAc,EAAoB,MAAM,iBAAiB,CAAA;AAavE;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,IAAI,YAAY,CAAC,cAAc,CAAC,CAoCxE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createPkceProvider } from '@doist/cli-core/auth';
|
|
2
|
+
import { createApiForToken } from './api/core.js';
|
|
3
|
+
import { toTodoistAccount } from './auth-store.js';
|
|
4
|
+
import { extractAdditionalScopes, resolveAuthScope } from './oauth-scopes.js';
|
|
5
|
+
import { fetchTodoist } from './usage-tracking.js';
|
|
6
|
+
const TODOIST_CLIENT_ID = '04863cc1e3584830a578622f50224d5b';
|
|
7
|
+
const OAUTH_AUTHORIZE_URL = 'https://todoist.com/oauth/authorize';
|
|
8
|
+
const OAUTH_TOKEN_URL = 'https://todoist.com/oauth/access_token';
|
|
9
|
+
// Todoist's PKCE verifier alphabet: RFC 7636 unreserved minus `~`. Keep this
|
|
10
|
+
// exact so existing tokens that interrogate the verifier continue to validate.
|
|
11
|
+
const TODOIST_VERIFIER_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
|
|
12
|
+
/**
|
|
13
|
+
* Build an `AuthProvider<TodoistAccount>` driven by cli-core's PKCE factory.
|
|
14
|
+
*
|
|
15
|
+
* The wrapper only overrides `validateToken` — `runOAuthFlow` automatically
|
|
16
|
+
* folds the runtime `flags` and `readOnly` values into the handshake
|
|
17
|
+
* between `authorize` and `exchangeCode`/`validateToken`, so we read them
|
|
18
|
+
* back out here to assemble the `auth_mode` / `auth_scope` / `auth_flags`
|
|
19
|
+
* triplet that todoist persists per account.
|
|
20
|
+
*
|
|
21
|
+
* The token-endpoint POST is routed through `fetchTodoist` so the usage-
|
|
22
|
+
* tracking headers (User-Agent, Doist-OS, …) are included.
|
|
23
|
+
*/
|
|
24
|
+
export function createTodoistAuthProvider() {
|
|
25
|
+
return {
|
|
26
|
+
...createPkceProvider({
|
|
27
|
+
authorizeUrl: OAUTH_AUTHORIZE_URL,
|
|
28
|
+
tokenUrl: OAUTH_TOKEN_URL,
|
|
29
|
+
clientId: TODOIST_CLIENT_ID,
|
|
30
|
+
scopeSeparator: ',',
|
|
31
|
+
verifierAlphabet: TODOIST_VERIFIER_ALPHABET,
|
|
32
|
+
verifierLength: 64,
|
|
33
|
+
validate: async () => {
|
|
34
|
+
// Replaced below — kept narrow so a regression surfaces here.
|
|
35
|
+
throw new Error('createTodoistAuthProvider: validate() must be overridden');
|
|
36
|
+
},
|
|
37
|
+
fetchImpl: (input, init) => fetchTodoist(input, init ?? {}),
|
|
38
|
+
}),
|
|
39
|
+
async validateToken({ token, handshake }) {
|
|
40
|
+
const flags = handshake.flags ?? {};
|
|
41
|
+
const readOnly = Boolean(handshake.readOnly);
|
|
42
|
+
const additionalScopes = extractAdditionalScopes(flags);
|
|
43
|
+
const probeApi = createApiForToken(token);
|
|
44
|
+
const user = await probeApi.getUser();
|
|
45
|
+
const authFlags = [];
|
|
46
|
+
if (readOnly)
|
|
47
|
+
authFlags.push('read-only');
|
|
48
|
+
authFlags.push(...additionalScopes);
|
|
49
|
+
return toTodoistAccount({
|
|
50
|
+
id: user.id,
|
|
51
|
+
email: user.email,
|
|
52
|
+
authMode: readOnly ? 'read-only' : 'read-write',
|
|
53
|
+
authScope: resolveAuthScope({ readOnly, additionalScopes }),
|
|
54
|
+
authFlags: authFlags.length > 0 ? authFlags : undefined,
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=auth-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/lib/auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAuB,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEvE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,iBAAiB,GAAG,kCAAkC,CAAA;AAC5D,MAAM,mBAAmB,GAAG,qCAAqC,CAAA;AACjE,MAAM,eAAe,GAAG,wCAAwC,CAAA;AAChE,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,yBAAyB,GAC3B,oEAAoE,CAAA;AAExE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB;IACrC,OAAO;QACH,GAAG,kBAAkB,CAAiB;YAClC,YAAY,EAAE,mBAAmB;YACjC,QAAQ,EAAE,eAAe;YACzB,QAAQ,EAAE,iBAAiB;YAC3B,cAAc,EAAE,GAAG;YACnB,gBAAgB,EAAE,yBAAyB;YAC3C,cAAc,EAAE,EAAE;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACjB,8DAA8D;gBAC9D,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;YAC/E,CAAC;YACD,SAAS,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,KAAqB,EAAE,IAAI,IAAI,EAAE,CAAC;SAC9E,CAAC;QACF,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;YACpC,MAAM,KAAK,GAAI,SAAS,CAAC,KAA6C,IAAI,EAAE,CAAA;YAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YAC5C,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;YAEvD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAA;YAErC,MAAM,SAAS,GAAe,EAAE,CAAA;YAChC,IAAI,QAAQ;gBAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACzC,SAAS,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAA;YAEnC,OAAO,gBAAgB,CAAC;gBACpB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY;gBAC/C,SAAS,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;gBAC3D,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;aAC1D,CAAC,CAAA;QACN,CAAC;KACJ,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { AuthAccount, TokenStore } from '@doist/cli-core/auth';
|
|
2
|
+
import { type TokenStorageResult, type UpsertUserInput } from './auth.js';
|
|
3
|
+
import { type AuthFlag, type AuthMode } from './config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Account shape stored by todoist-cli. Extends cli-core's `AuthAccount` with
|
|
6
|
+
* the Todoist-specific identity + auth-mode metadata that ride alongside the
|
|
7
|
+
* token in the per-user config record.
|
|
8
|
+
*/
|
|
9
|
+
export type TodoistAccount = AuthAccount & {
|
|
10
|
+
email: string;
|
|
11
|
+
auth_mode: AuthMode;
|
|
12
|
+
auth_scope?: string;
|
|
13
|
+
auth_flags?: AuthFlag[];
|
|
14
|
+
};
|
|
15
|
+
export type TodoistAccountInput = {
|
|
16
|
+
id: string;
|
|
17
|
+
email: string;
|
|
18
|
+
authMode: AuthMode;
|
|
19
|
+
authScope?: string;
|
|
20
|
+
authFlags?: AuthFlag[];
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Single source of truth for the `TodoistAccount` field layout. Used by the
|
|
24
|
+
* auth provider's `validateToken` (post-handshake) and the token-store
|
|
25
|
+
* `active()` adapter (post-read) so the persisted shape stays aligned with
|
|
26
|
+
* what `set()` later disassembles via `accountToUpsertInput`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function toTodoistAccount(input: TodoistAccountInput): TodoistAccount;
|
|
29
|
+
/** Inverse of `toTodoistAccount` — feeds the upsert path that owns persistence. */
|
|
30
|
+
export declare function accountToUpsertInput(account: TodoistAccount, token: string): UpsertUserInput;
|
|
31
|
+
/**
|
|
32
|
+
* `TokenStore<TodoistAccount>` adapter that bridges cli-core's auth runtime
|
|
33
|
+
* (which is single-user) to todoist's existing multi-user keyring + config
|
|
34
|
+
* store. `set()` is exercised by `runOAuthFlow` during login; `active()` and
|
|
35
|
+
* `clear()` are wired through for completeness so the public `TokenStore`
|
|
36
|
+
* contract is honoured — per-user reads are still driven from the
|
|
37
|
+
* todoist-local commands (logout, status, token, …).
|
|
38
|
+
*
|
|
39
|
+
* The factory also returns `getLastStorageResult()` so the login command can
|
|
40
|
+
* surface keyring-fallback warnings (`upsertUser` reports them via the
|
|
41
|
+
* `TokenStorageResult` payload that `set()` would otherwise have to swallow,
|
|
42
|
+
* since cli-core's `TokenStore.set` signature is `void`).
|
|
43
|
+
*/
|
|
44
|
+
export type TodoistTokenStore = TokenStore<TodoistAccount> & {
|
|
45
|
+
getLastStorageResult(): TokenStorageResult | undefined;
|
|
46
|
+
};
|
|
47
|
+
export declare function createTodoistTokenStore(): TodoistTokenStore;
|
|
48
|
+
//# sourceMappingURL=auth-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../../src/lib/auth-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAIH,KAAK,kBAAkB,EAGvB,KAAK,eAAe,EACvB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAA+B,MAAM,aAAa,CAAA;AAIvF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,QAAQ,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACzB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAS3E;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAS5F;AAYD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG;IACzD,oBAAoB,IAAI,kBAAkB,GAAG,SAAS,CAAA;CACzD,CAAA;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,CAoD3D"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { clearApiToken, loadTokenForStoredUser, NoTokenError, TOKEN_ENV_VAR, upsertUser, } from './auth.js';
|
|
2
|
+
import { readConfig } from './config.js';
|
|
3
|
+
import { SecureStoreUnavailableError } from './secure-store.js';
|
|
4
|
+
import { getDefaultUser, getStoredUsers } from './users.js';
|
|
5
|
+
/**
|
|
6
|
+
* Single source of truth for the `TodoistAccount` field layout. Used by the
|
|
7
|
+
* auth provider's `validateToken` (post-handshake) and the token-store
|
|
8
|
+
* `active()` adapter (post-read) so the persisted shape stays aligned with
|
|
9
|
+
* what `set()` later disassembles via `accountToUpsertInput`.
|
|
10
|
+
*/
|
|
11
|
+
export function toTodoistAccount(input) {
|
|
12
|
+
return {
|
|
13
|
+
id: input.id,
|
|
14
|
+
email: input.email,
|
|
15
|
+
label: input.email,
|
|
16
|
+
auth_mode: input.authMode,
|
|
17
|
+
auth_scope: input.authScope,
|
|
18
|
+
auth_flags: input.authFlags,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Inverse of `toTodoistAccount` — feeds the upsert path that owns persistence. */
|
|
22
|
+
export function accountToUpsertInput(account, token) {
|
|
23
|
+
return {
|
|
24
|
+
id: account.id,
|
|
25
|
+
email: account.email,
|
|
26
|
+
token,
|
|
27
|
+
authMode: account.auth_mode,
|
|
28
|
+
authScope: account.auth_scope,
|
|
29
|
+
authFlags: account.auth_flags,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function storedUserToAccount(user) {
|
|
33
|
+
return toTodoistAccount({
|
|
34
|
+
id: user.id,
|
|
35
|
+
email: user.email,
|
|
36
|
+
authMode: user.auth_mode ?? 'unknown',
|
|
37
|
+
authScope: user.auth_scope,
|
|
38
|
+
authFlags: user.auth_flags,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
export function createTodoistTokenStore() {
|
|
42
|
+
let lastStorageResult;
|
|
43
|
+
return {
|
|
44
|
+
/**
|
|
45
|
+
* Pure view of persisted state. Deliberately ignores the global
|
|
46
|
+
* `--user` selector (a CLI-invocation concern, not storage) and
|
|
47
|
+
* returns `null` when `TODOIST_API_TOKEN` is in play (env tokens
|
|
48
|
+
* don't represent a persisted account). When multiple accounts
|
|
49
|
+
* are stored without a default, returns `null` rather than
|
|
50
|
+
* throwing a selection error — the runtime caller can react to
|
|
51
|
+
* "no active persisted account" but shouldn't see CLI-arg errors
|
|
52
|
+
* leaking out of a store read.
|
|
53
|
+
*/
|
|
54
|
+
async active() {
|
|
55
|
+
if (process.env[TOKEN_ENV_VAR])
|
|
56
|
+
return null;
|
|
57
|
+
const config = await readConfig();
|
|
58
|
+
const users = getStoredUsers(config);
|
|
59
|
+
if (users.length === 0)
|
|
60
|
+
return null;
|
|
61
|
+
const target = getDefaultUser(config) ?? (users.length === 1 ? users[0] : null);
|
|
62
|
+
if (!target)
|
|
63
|
+
return null;
|
|
64
|
+
try {
|
|
65
|
+
const { token } = await loadTokenForStoredUser(target);
|
|
66
|
+
return { token, account: storedUserToAccount(target) };
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
// Token unreachable (no secret, keyring offline) — surface as
|
|
70
|
+
// "no active persisted account" so a `set()` retry can recover
|
|
71
|
+
// without a runtime caller having to special-case storage errors.
|
|
72
|
+
if (error instanceof NoTokenError)
|
|
73
|
+
return null;
|
|
74
|
+
if (error instanceof SecureStoreUnavailableError)
|
|
75
|
+
return null;
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
async set(account, token) {
|
|
80
|
+
const { replaced: _replaced, ...result } = await upsertUser(accountToUpsertInput(account, token));
|
|
81
|
+
lastStorageResult = result;
|
|
82
|
+
},
|
|
83
|
+
async clear() {
|
|
84
|
+
await clearApiToken();
|
|
85
|
+
},
|
|
86
|
+
getLastStorageResult() {
|
|
87
|
+
return lastStorageResult;
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=auth-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../src/lib/auth-store.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/auth.d.ts
CHANGED
|
@@ -92,4 +92,8 @@ export declare function clearApiToken(opts?: {
|
|
|
92
92
|
export declare function removeUserById(id: string): Promise<TokenStorageResult>;
|
|
93
93
|
export declare function setDefaultUserId(id: string): Promise<void>;
|
|
94
94
|
export declare function listStoredUsers(): Promise<StoredUser[]>;
|
|
95
|
+
export declare function loadTokenForStoredUser(user: StoredUser): Promise<{
|
|
96
|
+
token: string;
|
|
97
|
+
source: 'secure-store' | 'config-file';
|
|
98
|
+
}>;
|
|
95
99
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/lib/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,eAAe,EACf,cAAc,EACd,aAAa,EACb,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"}
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/auth.js
CHANGED
|
@@ -295,7 +295,7 @@ export async function listStoredUsers() {
|
|
|
295
295
|
// ---------------------------------------------------------------------------
|
|
296
296
|
// Internal helpers
|
|
297
297
|
// ---------------------------------------------------------------------------
|
|
298
|
-
async function loadTokenForStoredUser(user) {
|
|
298
|
+
export async function loadTokenForStoredUser(user) {
|
|
299
299
|
if (user.api_token?.trim()) {
|
|
300
300
|
return { token: user.api_token.trim(), source: 'config-file' };
|
|
301
301
|
}
|