@doist/todoist-cli 1.62.2 → 1.63.1
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/helpers.d.ts +8 -1
- package/dist/commands/auth/helpers.d.ts.map +1 -1
- package/dist/commands/auth/helpers.js +9 -2
- package/dist/commands/auth/helpers.js.map +1 -1
- package/dist/commands/auth/index.d.ts.map +1 -1
- package/dist/commands/auth/index.js +15 -8
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/auth/login.d.ts +2 -1
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +2 -11
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/logout.d.ts +10 -1
- package/dist/commands/auth/logout.d.ts.map +1 -1
- package/dist/commands/auth/logout.js +18 -6
- package/dist/commands/auth/logout.js.map +1 -1
- package/dist/commands/auth/status.d.ts +17 -3
- package/dist/commands/auth/status.d.ts.map +1 -1
- package/dist/commands/auth/status.js +116 -35
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/commands/folder/index.d.ts.map +1 -1
- package/dist/commands/folder/index.js +1 -9
- package/dist/commands/folder/index.js.map +1 -1
- package/dist/commands/project/create.d.ts +1 -1
- package/dist/commands/project/create.d.ts.map +1 -1
- package/dist/commands/project/create.js +2 -7
- package/dist/commands/project/create.js.map +1 -1
- package/dist/commands/project/helpers.d.ts +27 -1
- package/dist/commands/project/helpers.d.ts.map +1 -1
- package/dist/commands/project/helpers.js +77 -0
- package/dist/commands/project/helpers.js.map +1 -1
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +24 -0
- package/dist/commands/project/index.js.map +1 -1
- package/dist/commands/project/reorder.d.ts +9 -0
- package/dist/commands/project/reorder.d.ts.map +1 -0
- package/dist/commands/project/reorder.js +80 -0
- package/dist/commands/project/reorder.js.map +1 -0
- package/dist/commands/project/update.d.ts +1 -0
- package/dist/commands/project/update.d.ts.map +1 -1
- package/dist/commands/project/update.js +58 -5
- package/dist/commands/project/update.js.map +1 -1
- package/dist/lib/api/projects-sync.d.ts +6 -0
- package/dist/lib/api/projects-sync.d.ts.map +1 -0
- package/dist/lib/api/projects-sync.js +15 -0
- package/dist/lib/api/projects-sync.js.map +1 -0
- package/dist/lib/auth-store.d.ts +1 -0
- package/dist/lib/auth-store.d.ts.map +1 -1
- package/dist/lib/auth-store.js +5 -1
- package/dist/lib/auth-store.js.map +1 -1
- package/dist/lib/errors.d.ts +1 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/order.d.ts +2 -0
- package/dist/lib/order.d.ts.map +1 -0
- package/dist/lib/order.js +11 -0
- package/dist/lib/order.js.map +1 -0
- 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 +13 -2
- package/dist/lib/skills/content.js.map +1 -1
- package/dist/lib/usage-tracking.d.ts.map +1 -1
- package/dist/lib/usage-tracking.js +4 -3
- package/dist/lib/usage-tracking.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [1.63.1](https://github.com/Doist/todoist-cli/compare/v1.63.0...v1.63.1) (2026-05-13)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* forward arrayBuffer on tracked-fetch wrapper for binary attachments ([#338](https://github.com/Doist/todoist-cli/issues/338)) ([8ca5598](https://github.com/Doist/todoist-cli/commit/8ca559855c0e4d8cfa7f8ede1f6c89324f008f8d))
|
|
6
|
+
|
|
7
|
+
## [1.63.0](https://github.com/Doist/todoist-cli/compare/v1.62.2...v1.63.0) (2026-05-12)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **project:** add `--parent` on update and new `reorder` command ([#330](https://github.com/Doist/todoist-cli/issues/330)) ([f32f56a](https://github.com/Doist/todoist-cli/commit/f32f56adefee35943cd9fc43b592b6ad75591240))
|
|
12
|
+
|
|
1
13
|
## [1.62.2](https://github.com/Doist/todoist-cli/compare/v1.62.1...v1.62.2) (2026-05-11)
|
|
2
14
|
|
|
3
15
|
### Bug Fixes
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { TokenStorageResult } from '../../lib/auth.js';
|
|
2
2
|
export declare function promptHiddenInput(prompt: string): Promise<string>;
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Surface a `TokenStorageResult` from a save/clear operation: the
|
|
5
|
+
* human-readable confirmation goes to stdout, any keyring-fallback warning
|
|
6
|
+
* goes to stderr. Pass `isMachineOutput: true` when the command is in
|
|
7
|
+
* `--json` / `--ndjson` mode so the stdout confirmation is suppressed and
|
|
8
|
+
* the warning still reaches the operator on stderr.
|
|
9
|
+
*/
|
|
10
|
+
export declare function logTokenStorageResult(result: TokenStorageResult, secureStoreMessage: string, isMachineOutput?: boolean): void;
|
|
4
11
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjE;AAED,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,kBAAkB,EAC1B,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,kBAAkB,EAC1B,kBAAkB,EAAE,MAAM,EAC1B,eAAe,UAAQ,GACxB,IAAI,CAQN"}
|
|
@@ -20,8 +20,15 @@ export function promptHiddenInput(prompt) {
|
|
|
20
20
|
});
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Surface a `TokenStorageResult` from a save/clear operation: the
|
|
25
|
+
* human-readable confirmation goes to stdout, any keyring-fallback warning
|
|
26
|
+
* goes to stderr. Pass `isMachineOutput: true` when the command is in
|
|
27
|
+
* `--json` / `--ndjson` mode so the stdout confirmation is suppressed and
|
|
28
|
+
* the warning still reaches the operator on stderr.
|
|
29
|
+
*/
|
|
30
|
+
export function logTokenStorageResult(result, secureStoreMessage, isMachineOutput = false) {
|
|
31
|
+
if (!isMachineOutput && result.storage === 'secure-store') {
|
|
25
32
|
console.log(chalk.dim(secureStoreMessage));
|
|
26
33
|
}
|
|
27
34
|
if (result.warning) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/auth/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,EAAE,GAAG,eAAe,CAAC;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC,CAAA;QACF,kFAAkF;QAClF,MAAM,SAAS,GAAI,EAAU,CAAC,cAAc,CAE3C;QAAC,EAAU,CAAC,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE;YAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YAC9B,CAAC;QACL,CAAC,CAAA;QACD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC1B,OAAO,CAAC,MAAM,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC;AAED,MAAM,UAAU,qBAAqB,CACjC,MAA0B,EAC1B,kBAA0B;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/auth/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,EAAE,GAAG,eAAe,CAAC;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC,CAAA;QACF,kFAAkF;QAClF,MAAM,SAAS,GAAI,EAAU,CAAC,cAAc,CAE3C;QAAC,EAAU,CAAC,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE;YAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YAC9B,CAAC;QACL,CAAC,CAAA;QACD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC1B,OAAO,CAAC,MAAM,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACjC,MAA0B,EAC1B,kBAA0B,EAC1B,eAAe,GAAG,KAAK;IAEvB,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAC3D,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQxC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkC1D"}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
|
+
import { createTodoistTokenStore } from '../../lib/auth-store.js';
|
|
1
2
|
import { attachTodoistLoginCommand } from './login.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
3
|
+
import { attachTodoistLogoutCommand } from './logout.js';
|
|
4
|
+
import { attachTodoistStatusCommand } from './status.js';
|
|
4
5
|
import { viewToken } from './token-view.js';
|
|
5
6
|
import { loginWithToken } from './token.js';
|
|
6
7
|
export function registerAuthCommand(program) {
|
|
7
8
|
const auth = program.command('auth').description('Manage authentication');
|
|
8
|
-
|
|
9
|
+
// Shared store instance: login stashes the post-`set` storage result for
|
|
10
|
+
// its success handler, logout reads the post-`clear` result for the same
|
|
11
|
+
// keyring-fallback warning surface. Status uses `active()` as the
|
|
12
|
+
// authenticated-snapshot gate.
|
|
13
|
+
const store = createTodoistTokenStore();
|
|
14
|
+
attachTodoistLoginCommand(auth, store);
|
|
15
|
+
attachTodoistLogoutCommand(auth, store);
|
|
16
|
+
attachTodoistStatusCommand(auth, store);
|
|
9
17
|
// `token` is a hybrid: it accepts a positional `[token]` (save) and also
|
|
10
18
|
// exposes subcommands (`view`). Commander matches subcommand names before
|
|
11
19
|
// falling through to the parent action, so `td auth token view` always
|
|
12
20
|
// dispatches to the `view` subcommand — `view` is never treated as a
|
|
13
21
|
// literal token value. Real Todoist tokens are 40-char hex strings, so
|
|
14
22
|
// this disambiguation is safe in practice.
|
|
23
|
+
//
|
|
24
|
+
// `token view` stays hand-rolled (not migrated to `attachTokenViewCommand`)
|
|
25
|
+
// because it depends on the `--user <ref>` selector + env precedence rules
|
|
26
|
+
// that the `TokenStore` adapter intentionally drops from `active()`.
|
|
15
27
|
const tokenCmd = auth
|
|
16
28
|
.command('token [token]')
|
|
17
29
|
.description('Save API token for CLI authentication (or use a subcommand: `view`)')
|
|
@@ -20,10 +32,5 @@ export function registerAuthCommand(program) {
|
|
|
20
32
|
.command('view')
|
|
21
33
|
.description('Print the stored API token for the active user (or --user <ref>) to stdout for use in scripts')
|
|
22
34
|
.action(viewToken);
|
|
23
|
-
auth.command('status')
|
|
24
|
-
.description('Show current authentication status')
|
|
25
|
-
.option('--json', 'Output as JSON')
|
|
26
|
-
.action(showStatus);
|
|
27
|
-
auth.command('logout').description('Remove saved authentication token').action(logout);
|
|
28
35
|
}
|
|
29
36
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAA;IAEzE,yEAAyE;IACzE,yEAAyE;IACzE,kEAAkE;IAClE,+BAA+B;IAC/B,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAA;IAEvC,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACtC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACvC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAEvC,yEAAyE;IACzE,0EAA0E;IAC1E,uEAAuE;IACvE,qEAAqE;IACrE,uEAAuE;IACvE,2CAA2C;IAC3C,EAAE;IACF,4EAA4E;IAC5E,2EAA2E;IAC3E,qEAAqE;IACrE,MAAM,QAAQ,GAAG,IAAI;SAChB,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,cAAc,CAAC,CAAA;IAE3B,QAAQ;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACR,+FAA+F,CAClG;SACA,MAAM,CAAC,SAAS,CAAC,CAAA;AAC1B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
|
+
import type { TodoistTokenStore } from '../../lib/auth-store.js';
|
|
2
3
|
/**
|
|
3
4
|
* Attach `td auth login` via cli-core's generic `attachLoginCommand`. The
|
|
4
5
|
* registrar wires `--read-only`, `--callback-port`, `--json`, `--ndjson` and
|
|
@@ -10,5 +11,5 @@ import type { Command } from 'commander';
|
|
|
10
11
|
* the same Commander view; cli-core surfaces it through the `flags` argument
|
|
11
12
|
* to `resolveScopes`.
|
|
12
13
|
*/
|
|
13
|
-
export declare function attachTodoistLoginCommand(auth: Command): Command;
|
|
14
|
+
export declare function attachTodoistLoginCommand(auth: Command, store: TodoistTokenStore): Command;
|
|
14
15
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAWhF;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CA0D1F"}
|
|
@@ -4,7 +4,6 @@ import chalk from 'chalk';
|
|
|
4
4
|
import open from 'open';
|
|
5
5
|
import { renderAuthErrorPage, renderAuthSuccessPage } from '../../lib/auth-html.js';
|
|
6
6
|
import { createTodoistAuthProvider } from '../../lib/auth-provider.js';
|
|
7
|
-
import { createTodoistTokenStore } from '../../lib/auth-store.js';
|
|
8
7
|
import { extractAdditionalScopes, formatScopesHelp, resolveAuthScope, } from '../../lib/oauth-scopes.js';
|
|
9
8
|
import { logTokenStorageResult } from './helpers.js';
|
|
10
9
|
const TODOIST_CALLBACK_PORT = 8765;
|
|
@@ -20,8 +19,7 @@ const TODOIST_CALLBACK_PORT_FALLBACK = 5;
|
|
|
20
19
|
* the same Commander view; cli-core surfaces it through the `flags` argument
|
|
21
20
|
* to `resolveScopes`.
|
|
22
21
|
*/
|
|
23
|
-
export function attachTodoistLoginCommand(auth) {
|
|
24
|
-
const store = createTodoistTokenStore();
|
|
22
|
+
export function attachTodoistLoginCommand(auth, store) {
|
|
25
23
|
const login = attachLoginCommand(auth, {
|
|
26
24
|
provider: createTodoistAuthProvider(),
|
|
27
25
|
store,
|
|
@@ -57,14 +55,7 @@ export function attachTodoistLoginCommand(auth) {
|
|
|
57
55
|
// `--json` / `--ndjson` stdout envelope clean; the human "stored
|
|
58
56
|
// securely" confirmation is suppressed in machine-output mode.
|
|
59
57
|
if (storage) {
|
|
60
|
-
|
|
61
|
-
if (storage.warning) {
|
|
62
|
-
console.error(chalk.yellow('Warning:'), storage.warning);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
logTokenStorageResult(storage, 'Token stored securely in the system credential manager');
|
|
67
|
-
}
|
|
58
|
+
logTokenStorageResult(storage, 'Token stored securely in the system credential manager', view.json || view.ndjson);
|
|
68
59
|
}
|
|
69
60
|
},
|
|
70
61
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { TodoistTokenStore } from '../../lib/auth-store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Attach `td auth logout` via cli-core's generic `attachLogoutCommand`. The
|
|
5
|
+
* registrar emits the success line (`✓ Logged out` / `{ok:true}` / silent
|
|
6
|
+
* ndjson); `onCleared` only surfaces the keyring-fallback warning carried by
|
|
7
|
+
* `TokenStorageResult` — cli-core's `TokenStore.clear: void` contract can't
|
|
8
|
+
* expose it directly, so we stash it on the adapter (`getLastClearResult`).
|
|
9
|
+
*/
|
|
10
|
+
export declare function attachTodoistLogoutCommand(auth: Command, store: TodoistTokenStore): Command;
|
|
2
11
|
//# sourceMappingURL=logout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAGhF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAa3F"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { clearApiToken } from '../../lib/auth.js';
|
|
1
|
+
import { attachLogoutCommand } from '@doist/cli-core/auth';
|
|
3
2
|
import { logTokenStorageResult } from './helpers.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Attach `td auth logout` via cli-core's generic `attachLogoutCommand`. The
|
|
5
|
+
* registrar emits the success line (`✓ Logged out` / `{ok:true}` / silent
|
|
6
|
+
* ndjson); `onCleared` only surfaces the keyring-fallback warning carried by
|
|
7
|
+
* `TokenStorageResult` — cli-core's `TokenStore.clear: void` contract can't
|
|
8
|
+
* expose it directly, so we stash it on the adapter (`getLastClearResult`).
|
|
9
|
+
*/
|
|
10
|
+
export function attachTodoistLogoutCommand(auth, store) {
|
|
11
|
+
return attachLogoutCommand(auth, {
|
|
12
|
+
store,
|
|
13
|
+
onCleared: ({ view }) => {
|
|
14
|
+
const result = store.getLastClearResult();
|
|
15
|
+
if (!result)
|
|
16
|
+
return;
|
|
17
|
+
logTokenStorageResult(result, 'Stored token removed from the system credential manager', view.json || view.ndjson);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
8
20
|
}
|
|
9
21
|
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAa,EAAE,KAAwB;IAC9E,OAAO,mBAAmB,CAAiB,IAAI,EAAE;QAC7C,KAAK;QACL,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAA;YACzC,IAAI,CAAC,MAAM;gBAAE,OAAM;YACnB,qBAAqB,CACjB,MAAM,EACN,yDAAyD,EACzD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAC3B,CAAA;QACL,CAAC;KACJ,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import { type TodoistTokenStore } from '../../lib/auth-store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Attach `td auth status` via cli-core's generic `attachStatusCommand`.
|
|
5
|
+
*
|
|
6
|
+
* `TodoistTokenStore.active()` returns `null` for env-token mode + when no
|
|
7
|
+
* default user is stored (per the adapter's documented contract — see
|
|
8
|
+
* `auth-store.ts`). To preserve the existing UX for those cases we route the
|
|
9
|
+
* full status fetch through `onNotAuthenticated`; when `active()` does return
|
|
10
|
+
* a snapshot, `fetchLive` covers the same gather so renderText/renderJson can
|
|
11
|
+
* read from a single closure-captured `StatusData` regardless of which path
|
|
12
|
+
* we took. The snapshot path also short-circuits one credential resolve via
|
|
13
|
+
* `gatherStatusData(token)` when no `--user <ref>` is in play; when `--user`
|
|
14
|
+
* is set we re-resolve through `getApi()` so the displayed account matches
|
|
15
|
+
* the selector instead of the snapshot's default.
|
|
16
|
+
*/
|
|
17
|
+
export declare function attachTodoistStatusCommand(auth: Command, store: TodoistTokenStore): Command;
|
|
4
18
|
//# sourceMappingURL=status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAGH,KAAK,iBAAiB,EACzB,MAAM,yBAAyB,CAAA;AAuGhC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CA8C3F"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import { formatJson, formatNdjson } from '@doist/cli-core';
|
|
2
|
+
import { attachStatusCommand } from '@doist/cli-core/auth';
|
|
1
3
|
import chalk from 'chalk';
|
|
2
|
-
import { getApi } from '../../lib/api/core.js';
|
|
3
|
-
import {
|
|
4
|
+
import { createApiForToken, getApi } from '../../lib/api/core.js';
|
|
5
|
+
import { toTodoistAccount, } from '../../lib/auth-store.js';
|
|
6
|
+
import { getAuthMetadata, listStoredUsers, readConfig, } from '../../lib/auth.js';
|
|
7
|
+
import { getRequestedUserRef } from '../../lib/global-args.js';
|
|
4
8
|
import { getDefaultUserId } from '../../lib/users.js';
|
|
5
9
|
function formatAuthMode(authMode, authScope) {
|
|
6
10
|
if (authMode === 'read-only') {
|
|
@@ -11,32 +15,25 @@ function formatAuthMode(authMode, authScope) {
|
|
|
11
15
|
}
|
|
12
16
|
return 'unknown (manual token or env var; assuming write access)';
|
|
13
17
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
/**
|
|
19
|
+
* `token` shortcut: when the caller already has a resolved token (e.g. from
|
|
20
|
+
* the cli-core `store.active()` snapshot, and no `--user <ref>` override is
|
|
21
|
+
* in play), pass it through to skip the redundant keyring round-trip
|
|
22
|
+
* `getApi()` would do via `resolveActiveUser`.
|
|
23
|
+
*/
|
|
24
|
+
async function gatherStatusData(token) {
|
|
25
|
+
const api = token ? createApiForToken(token) : await getApi();
|
|
26
|
+
const [user, metadata, storedUsers, config] = await Promise.all([
|
|
27
|
+
api.getUser(),
|
|
28
|
+
getAuthMetadata(),
|
|
29
|
+
listStoredUsers(),
|
|
30
|
+
readConfig(),
|
|
31
|
+
]);
|
|
32
|
+
return { user, metadata, storedUsers, defaultUserId: getDefaultUserId(config) };
|
|
33
|
+
}
|
|
34
|
+
function buildStatusText(data) {
|
|
35
|
+
const { user, metadata, storedUsers, defaultUserId } = data;
|
|
21
36
|
const modeLabel = formatAuthMode(metadata.authMode, metadata.authScope);
|
|
22
|
-
if (options.json) {
|
|
23
|
-
console.log(JSON.stringify({
|
|
24
|
-
id: user.id,
|
|
25
|
-
email: user.email,
|
|
26
|
-
fullName: user.fullName,
|
|
27
|
-
authMode: metadata.authMode,
|
|
28
|
-
authScope: metadata.authScope,
|
|
29
|
-
authFlags: metadata.authFlags,
|
|
30
|
-
source: metadata.source,
|
|
31
|
-
isDefault: defaultUserId === user.id,
|
|
32
|
-
storedUsers: storedUsers.map((u) => ({
|
|
33
|
-
id: u.id,
|
|
34
|
-
email: u.email,
|
|
35
|
-
isDefault: defaultUserId === u.id,
|
|
36
|
-
})),
|
|
37
|
-
}, null, 2));
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
37
|
// env source wins over default: when running with TODOIST_API_TOKEN,
|
|
41
38
|
// showing `(default)` would hide the more important "this is an env
|
|
42
39
|
// override, not your stored credential" signal.
|
|
@@ -45,19 +42,103 @@ export async function showStatus(options) {
|
|
|
45
42
|
: defaultUserId === user.id
|
|
46
43
|
? ' (default)'
|
|
47
44
|
: '';
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
45
|
+
const lines = [
|
|
46
|
+
`${chalk.green('✓')} Authenticated${defaultMarker}`,
|
|
47
|
+
` Email: ${user.email}`,
|
|
48
|
+
` Name: ${user.fullName}`,
|
|
49
|
+
` Mode: ${modeLabel}`,
|
|
50
|
+
];
|
|
52
51
|
const others = storedUsers.filter((u) => u.id !== user.id);
|
|
53
52
|
if (others.length > 0) {
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
lines.push('');
|
|
54
|
+
lines.push(chalk.dim(`Other stored accounts (${others.length}):`));
|
|
56
55
|
for (const other of others) {
|
|
57
56
|
const marker = other.id === defaultUserId ? chalk.dim(' (default)') : '';
|
|
58
|
-
|
|
57
|
+
lines.push(` ${other.email} ${chalk.dim(`(id:${other.id})`)}${marker}`);
|
|
59
58
|
}
|
|
60
|
-
|
|
59
|
+
lines.push(chalk.dim('Use `td user use <id|email>` to switch default, or `--user <ref>` per command.'));
|
|
61
60
|
}
|
|
61
|
+
return lines;
|
|
62
|
+
}
|
|
63
|
+
function buildStatusJson(data) {
|
|
64
|
+
const { user, metadata, storedUsers, defaultUserId } = data;
|
|
65
|
+
return {
|
|
66
|
+
id: user.id,
|
|
67
|
+
email: user.email,
|
|
68
|
+
fullName: user.fullName,
|
|
69
|
+
authMode: metadata.authMode,
|
|
70
|
+
authScope: metadata.authScope,
|
|
71
|
+
authFlags: metadata.authFlags,
|
|
72
|
+
source: metadata.source,
|
|
73
|
+
isDefault: defaultUserId === user.id,
|
|
74
|
+
storedUsers: storedUsers.map((u) => ({
|
|
75
|
+
id: u.id,
|
|
76
|
+
email: u.email,
|
|
77
|
+
isDefault: defaultUserId === u.id,
|
|
78
|
+
})),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Attach `td auth status` via cli-core's generic `attachStatusCommand`.
|
|
83
|
+
*
|
|
84
|
+
* `TodoistTokenStore.active()` returns `null` for env-token mode + when no
|
|
85
|
+
* default user is stored (per the adapter's documented contract — see
|
|
86
|
+
* `auth-store.ts`). To preserve the existing UX for those cases we route the
|
|
87
|
+
* full status fetch through `onNotAuthenticated`; when `active()` does return
|
|
88
|
+
* a snapshot, `fetchLive` covers the same gather so renderText/renderJson can
|
|
89
|
+
* read from a single closure-captured `StatusData` regardless of which path
|
|
90
|
+
* we took. The snapshot path also short-circuits one credential resolve via
|
|
91
|
+
* `gatherStatusData(token)` when no `--user <ref>` is in play; when `--user`
|
|
92
|
+
* is set we re-resolve through `getApi()` so the displayed account matches
|
|
93
|
+
* the selector instead of the snapshot's default.
|
|
94
|
+
*/
|
|
95
|
+
export function attachTodoistStatusCommand(auth, store) {
|
|
96
|
+
let data = null;
|
|
97
|
+
return attachStatusCommand(auth, {
|
|
98
|
+
store,
|
|
99
|
+
description: 'Show current authentication status',
|
|
100
|
+
fetchLive: async ({ token }) => {
|
|
101
|
+
// Snapshot's token only matches `--user` when no selector is set.
|
|
102
|
+
// Re-resolve via getApi when --user is present so the displayed
|
|
103
|
+
// account is the requested one, not the snapshot's default.
|
|
104
|
+
const userOverride = getRequestedUserRef() !== undefined;
|
|
105
|
+
data = await gatherStatusData(userOverride ? undefined : token);
|
|
106
|
+
return toTodoistAccount({
|
|
107
|
+
id: data.user.id,
|
|
108
|
+
email: data.user.email,
|
|
109
|
+
authMode: data.metadata.authMode,
|
|
110
|
+
authScope: data.metadata.authScope,
|
|
111
|
+
authFlags: data.metadata.authFlags,
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
renderText: () => {
|
|
115
|
+
if (!data)
|
|
116
|
+
throw new Error('status renderText called before fetchLive');
|
|
117
|
+
return buildStatusText(data);
|
|
118
|
+
},
|
|
119
|
+
renderJson: () => {
|
|
120
|
+
if (!data)
|
|
121
|
+
throw new Error('status renderJson called before fetchLive');
|
|
122
|
+
return buildStatusJson(data);
|
|
123
|
+
},
|
|
124
|
+
onNotAuthenticated: async ({ view }) => {
|
|
125
|
+
// active() returned null — either env-token mode, --user selector
|
|
126
|
+
// without a snapshot match, or no default. Drive the legacy
|
|
127
|
+
// resolver (getApi) so all three paths render identically; getApi
|
|
128
|
+
// throws NoTokenError / UserNotFoundError when nothing resolves,
|
|
129
|
+
// matching prior UX.
|
|
130
|
+
data = await gatherStatusData();
|
|
131
|
+
if (view.json) {
|
|
132
|
+
console.log(formatJson(buildStatusJson(data)));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (view.ndjson) {
|
|
136
|
+
console.log(formatNdjson([buildStatusJson(data)]));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
for (const line of buildStatusText(data))
|
|
140
|
+
console.log(line);
|
|
141
|
+
},
|
|
142
|
+
});
|
|
62
143
|
}
|
|
63
144
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAWnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuH5D"}
|
|
@@ -1,19 +1,11 @@
|
|
|
1
1
|
import { CURSOR_DESCRIPTION } from '../../lib/constants.js';
|
|
2
2
|
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { parseOrderArg } from '../../lib/order.js';
|
|
3
4
|
import { createFolder } from './create.js';
|
|
4
5
|
import { deleteFolder } from './delete.js';
|
|
5
6
|
import { listFolders } from './list.js';
|
|
6
7
|
import { updateFolder } from './update.js';
|
|
7
8
|
import { viewFolder } from './view.js';
|
|
8
|
-
function parseOrderArg(val) {
|
|
9
|
-
const n = Number(val);
|
|
10
|
-
if (!Number.isInteger(n) || n < 0) {
|
|
11
|
-
throw new CliError('INVALID_ORDER', `Invalid order value: "${val}"`, [
|
|
12
|
-
'Order must be a non-negative integer (e.g., 0 for top of list)',
|
|
13
|
-
]);
|
|
14
|
-
}
|
|
15
|
-
return n;
|
|
16
|
-
}
|
|
17
9
|
export function registerFolderCommand(program) {
|
|
18
10
|
const folder = program
|
|
19
11
|
.command('folder')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/folder/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAEtC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/folder/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/project/create.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/project/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,oBAAoB,CAAA;AAOpE,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCzE"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { isWorkspaceProject } from '@doist/todoist-sdk';
|
|
2
1
|
import chalk from 'chalk';
|
|
3
2
|
import { getApi } from '../../lib/api/core.js';
|
|
4
|
-
import { CliError } from '../../lib/errors.js';
|
|
5
3
|
import { isQuiet } from '../../lib/global-args.js';
|
|
6
4
|
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
7
|
-
import {
|
|
5
|
+
import { resolvePersonalParent } from './helpers.js';
|
|
8
6
|
export async function createProject(options) {
|
|
9
7
|
if (options.dryRun) {
|
|
10
8
|
printDryRun('create project', {
|
|
@@ -19,10 +17,7 @@ export async function createProject(options) {
|
|
|
19
17
|
const api = await getApi();
|
|
20
18
|
let parentId;
|
|
21
19
|
if (options.parent) {
|
|
22
|
-
const parentProject = await
|
|
23
|
-
if (isWorkspaceProject(parentProject)) {
|
|
24
|
-
throw new CliError('WORKSPACE_NO_SUBPROJECTS', 'Workspace projects do not support sub-projects.', ['Sub-projects are only supported for personal projects.']);
|
|
25
|
-
}
|
|
20
|
+
const parentProject = await resolvePersonalParent(api, options.parent);
|
|
26
21
|
parentId = parentProject.id;
|
|
27
22
|
}
|
|
28
23
|
const project = await api.addProject({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/project/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/project/create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAYpD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACtD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,gBAAgB,EAAE;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC9C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,OAAO,CAAC,SAAS;SAClC,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAE1B,IAAI,QAA4B,CAAA;IAChC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QACtE,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAA;IAC/B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;QACjC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,QAAQ;QAC5B,QAAQ;QACR,SAAS,EAAE,OAAO,CAAC,SAA6B;KACnD,CAAC,CAAA;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;QAC3C,OAAM;IACV,CAAC;IAED,IAAI,OAAO,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACvB,OAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAC/C,CAAC"}
|
|
@@ -1,3 +1,29 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type PersonalProject, type ProjectViewStyle, type TodoistApi } from '@doist/todoist-sdk';
|
|
2
|
+
import type { Project } from '../../lib/api/core.js';
|
|
2
3
|
export declare const VIEW_STYLE_CHOICES: ProjectViewStyle[];
|
|
4
|
+
/**
|
|
5
|
+
* Resolve a project reference for use as a parent. Rejects workspace projects
|
|
6
|
+
* — only personal projects can have sub-projects.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolvePersonalParent(api: TodoistApi, parentRef: string): Promise<PersonalProject>;
|
|
9
|
+
/**
|
|
10
|
+
* Load every personal project the user has access to (paginated). Used by
|
|
11
|
+
* commands that need to traverse the project hierarchy in memory rather than
|
|
12
|
+
* making N round trips.
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadPersonalProjects(api: TodoistApi): Promise<PersonalProject[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Returns true if `candidateId` is a descendant of `ancestorId` within the
|
|
17
|
+
* given project set. Walks the parent chain in memory; bails on cycles.
|
|
18
|
+
*/
|
|
19
|
+
export declare function isDescendantOf(projects: PersonalProject[], candidateId: string, ancestorId: string): boolean;
|
|
20
|
+
export declare function isPersonal(p: Project): p is PersonalProject;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a project reference against an in-memory personal-project list,
|
|
23
|
+
* avoiding extra round trips when the caller has already paginated the
|
|
24
|
+
* full list (e.g. `project reorder`). Mirrors the matching rules of
|
|
25
|
+
* `resolveProjectRef` (id prefix → exact name → substring name) but is
|
|
26
|
+
* scoped to personal projects only.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolvePersonalFromList(projects: PersonalProject[], ref: string): PersonalProject;
|
|
3
29
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/project/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/project/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAKpD,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAAkC,CAAA;AAEnF;;;GAGG;AACH,wBAAsB,qBAAqB,CACvC,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAU1B;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAMtF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,eAAe,EAAE,EAC3B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACnB,OAAO,CAUT;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,eAAe,CAE3D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAgCjG"}
|