@doist/todoist-cli 1.62.1 → 1.63.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/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/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/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/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-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 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.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/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 +18 -3
- 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 +4 -4
- 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
|
@@ -33,6 +33,9 @@ td auth login --read-only --additional-scopes=app-management
|
|
|
33
33
|
td auth login --additional-scopes=backups
|
|
34
34
|
td auth login --read-only --additional-scopes=backups
|
|
35
35
|
td auth login --additional-scopes=app-management,backups
|
|
36
|
+
td auth login --callback-port 9000 # override the OAuth callback port
|
|
37
|
+
td auth login --json # emit the new account record as JSON
|
|
38
|
+
td auth login --ndjson # one-line newline-delimited JSON
|
|
36
39
|
td auth token
|
|
37
40
|
td auth status
|
|
38
41
|
TOKEN=$(td auth token view)
|
|
@@ -40,6 +43,8 @@ TOKEN=$(td auth token view --user you@example.com)
|
|
|
40
43
|
td auth logout
|
|
41
44
|
\`\`\`
|
|
42
45
|
|
|
46
|
+
\`td auth login\` accepts \`--callback-port <n>\` (default \`8765\`, with a small fallback range when the port is busy) and the standard \`--json\` / \`--ndjson\` machine-output flags. Use \`--json\` / \`--ndjson\` to capture the newly stored account record (id, email, auth metadata) for scripts; warnings about keyring fallback are written to stderr so stdout stays parseable.
|
|
47
|
+
|
|
43
48
|
Opt-in OAuth scopes are requested via \`--additional-scopes=<list>\` (comma-separated). Run \`td auth login --help\` for the full list. Currently supported:
|
|
44
49
|
|
|
45
50
|
- \`app-management\` — adds the \`dev:app_console\` scope (manage your registered Todoist apps — rotate secrets, edit webhooks, etc.). Required by \`td apps list\` and \`td apps view\`.
|
|
@@ -72,7 +77,7 @@ Resolution order: \`--user <ref>\` > \`user.defaultUser\` from config > the only
|
|
|
72
77
|
|
|
73
78
|
- Daily views: \`td today\`, \`td inbox\`, \`td upcoming\`, \`td completed\`, \`td activity\`
|
|
74
79
|
- Task lifecycle: \`td task list/view/add/quickadd/update/reschedule/move/complete/uncomplete/delete/browse\` (alias: \`td task qa\` for \`quickadd\`)
|
|
75
|
-
- Projects: \`td project list/view/create/update/archive/unarchive/archived/delete/move/join/browse/collaborators/permissions\`
|
|
80
|
+
- Projects: \`td project list/view/create/update/archive/unarchive/archived/delete/move/reorder/join/browse/collaborators/permissions\`
|
|
76
81
|
- Project analytics: \`td project progress/health/health-context/activity-stats/analyze-health\`
|
|
77
82
|
- Organization: \`td label ...\`, \`td filter ...\`, \`td section ...\`, \`td folder ...\`, \`td workspace ...\`
|
|
78
83
|
- Collaboration: \`td comment ...\`, \`td notification ...\`, \`td reminder ...\`
|
|
@@ -131,7 +136,7 @@ Choosing between \`task add\` and \`task quickadd\`:
|
|
|
131
136
|
Useful task flags:
|
|
132
137
|
- \`--stdin\` on \`task add\` reads the task description from stdin; on \`task quickadd\` (and the top-level \`td add\`) it reads the full natural-language text from stdin.
|
|
133
138
|
- \`--parent\`, \`--section\`, \`--project\`, \`--workspace\`, \`--assignee\`, \`--labels\`, \`--due\`, \`--deadline\`, \`--duration\`, and \`--priority\` cover most task workflows.
|
|
134
|
-
- \`td task complete --forever\` stops recurrence; \`td task update --no-due\` clears the due date
|
|
139
|
+
- \`td task complete --forever\` stops recurrence; \`td task update --no-due\` clears the due date, \`--no-deadline\` clears deadlines, and \`--no-labels\` removes all labels; \`td task move --no-parent\` and \`--no-section\` detach from hierarchy.
|
|
135
140
|
|
|
136
141
|
### Projects And Workspaces
|
|
137
142
|
\`\`\`bash
|
|
@@ -144,6 +149,15 @@ td project create --name "New Project" --color blue
|
|
|
144
149
|
td project update "Roadmap" --favorite
|
|
145
150
|
td project update "Roadmap" --folder "Engineering"
|
|
146
151
|
td project update "Roadmap" --no-folder
|
|
152
|
+
td project update "Roadmap" --parent "Engineering"
|
|
153
|
+
td project update "Roadmap" --no-parent
|
|
154
|
+
td project update "Roadmap" --parent "Engineering" --json
|
|
155
|
+
td project update "Roadmap" --parent "Engineering" --dry-run
|
|
156
|
+
td project reorder "Roadmap" --before "Marketing"
|
|
157
|
+
td project reorder "Roadmap" --after "Marketing"
|
|
158
|
+
td project reorder "Roadmap" --position 0
|
|
159
|
+
td project reorder "Roadmap" --position 2 --json
|
|
160
|
+
td project reorder "Roadmap" --before "Marketing" --dry-run
|
|
147
161
|
td project archive "Roadmap"
|
|
148
162
|
td project unarchive "Roadmap"
|
|
149
163
|
td project move "Roadmap" --to-workspace "Acme" --folder "Engineering" --visibility team --yes
|
|
@@ -317,9 +331,10 @@ td doctor --offline
|
|
|
317
331
|
td doctor --json
|
|
318
332
|
|
|
319
333
|
td update --check
|
|
334
|
+
td update --check --json
|
|
320
335
|
td update --channel
|
|
321
336
|
td update switch --stable
|
|
322
|
-
td update switch --pre-release
|
|
337
|
+
td update switch --pre-release --json
|
|
323
338
|
|
|
324
339
|
td changelog --count 10
|
|
325
340
|
\`\`\`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,iRAAiR,CAAA;AACrR,MAAM,CAAC,MAAM,mBAAmB,GAC5B,iGAAiG,CAAA;AAErG,MAAM,CAAC,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,iRAAiR,CAAA;AACrR,MAAM,CAAC,MAAM,mBAAmB,GAC5B,iGAAiG,CAAA;AAErG,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiV5B,CAAA"}
|
package/dist/lib/update.d.ts
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
import { type UpdateChannel } from './config.js';
|
|
2
|
-
export
|
|
3
|
-
interface ParsedVersion {
|
|
4
|
-
major: number;
|
|
5
|
-
minor: number;
|
|
6
|
-
patch: number;
|
|
7
|
-
prerelease: string | undefined;
|
|
8
|
-
}
|
|
9
|
-
export declare function getInstallTag(channel: UpdateChannel): string;
|
|
10
|
-
export declare function parseVersion(version: string): ParsedVersion;
|
|
11
|
-
export declare function compareVersions(a: string, b: string): number;
|
|
12
|
-
/** Returns true when `candidate` is strictly newer than `current` per semver. */
|
|
13
|
-
export declare function isNewer(current: string, candidate: string): boolean;
|
|
2
|
+
export { compareVersions, getInstallTag, isNewer, parseVersion } from '@doist/cli-core/commands';
|
|
14
3
|
export declare function fetchLatestVersion(channel: UpdateChannel): Promise<string>;
|
|
4
|
+
/**
|
|
5
|
+
* Tolerant channel read for `td doctor`. Returns the raw configured value
|
|
6
|
+
* (defaulting to `'stable'`); validation of unknown values is surfaced as a
|
|
7
|
+
* separate warning by `validateConfigForDoctor`. The user-facing
|
|
8
|
+
* `td update` command uses the strict cli-core version internally.
|
|
9
|
+
*/
|
|
15
10
|
export declare function getConfiguredUpdateChannel(): Promise<UpdateChannel>;
|
|
16
|
-
export {};
|
|
17
11
|
//# sourceMappingURL=update.d.ts.map
|
package/dist/lib/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAE5D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEhG,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhF;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,aAAa,CAAC,CAGzE"}
|
package/dist/lib/update.js
CHANGED
|
@@ -1,42 +1,16 @@
|
|
|
1
|
+
import { fetchLatestVersion as fetchLatestVersionCore } from '@doist/cli-core/commands';
|
|
2
|
+
import packageJson from '../../package.json' with { type: 'json' };
|
|
1
3
|
import { readConfig } from './config.js';
|
|
2
|
-
export
|
|
3
|
-
export function getInstallTag(channel) {
|
|
4
|
-
return channel === 'pre-release' ? 'next' : 'latest';
|
|
5
|
-
}
|
|
6
|
-
export function parseVersion(version) {
|
|
7
|
-
const [core, ...rest] = version.replace(/^v/, '').split('-');
|
|
8
|
-
const [major, minor, patch] = core.split('.').map(Number);
|
|
9
|
-
return { major, minor, patch, prerelease: rest.length > 0 ? rest.join('-') : undefined };
|
|
10
|
-
}
|
|
11
|
-
export function compareVersions(a, b) {
|
|
12
|
-
const left = parseVersion(a);
|
|
13
|
-
const right = parseVersion(b);
|
|
14
|
-
for (const key of ['major', 'minor', 'patch']) {
|
|
15
|
-
if (left[key] !== right[key])
|
|
16
|
-
return left[key] > right[key] ? 1 : -1;
|
|
17
|
-
}
|
|
18
|
-
if (!left.prerelease && right.prerelease)
|
|
19
|
-
return 1;
|
|
20
|
-
if (left.prerelease && !right.prerelease)
|
|
21
|
-
return -1;
|
|
22
|
-
if (left.prerelease && right.prerelease) {
|
|
23
|
-
return left.prerelease.localeCompare(right.prerelease, undefined, { numeric: true });
|
|
24
|
-
}
|
|
25
|
-
return 0;
|
|
26
|
-
}
|
|
27
|
-
/** Returns true when `candidate` is strictly newer than `current` per semver. */
|
|
28
|
-
export function isNewer(current, candidate) {
|
|
29
|
-
return compareVersions(candidate, current) > 0;
|
|
30
|
-
}
|
|
4
|
+
export { compareVersions, getInstallTag, isNewer, parseVersion } from '@doist/cli-core/commands';
|
|
31
5
|
export async function fetchLatestVersion(channel) {
|
|
32
|
-
|
|
33
|
-
const response = await fetch(url);
|
|
34
|
-
if (!response.ok) {
|
|
35
|
-
throw new Error(`Registry request failed (HTTP ${response.status})`);
|
|
36
|
-
}
|
|
37
|
-
const data = (await response.json());
|
|
38
|
-
return data.version;
|
|
6
|
+
return fetchLatestVersionCore({ packageName: packageJson.name, channel });
|
|
39
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Tolerant channel read for `td doctor`. Returns the raw configured value
|
|
10
|
+
* (defaulting to `'stable'`); validation of unknown values is surfaced as a
|
|
11
|
+
* separate warning by `validateConfigForDoctor`. The user-facing
|
|
12
|
+
* `td update` command uses the strict cli-core version internally.
|
|
13
|
+
*/
|
|
40
14
|
export async function getConfiguredUpdateChannel() {
|
|
41
15
|
const config = await readConfig();
|
|
42
16
|
return config.update_channel ?? 'stable';
|
package/dist/lib/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACvF,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAClE,OAAO,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAA;AAE5D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEhG,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAsB;IAC3D,OAAO,sBAAsB,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC5C,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAA;AAC5C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@doist/todoist-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.63.0",
|
|
4
4
|
"description": "TypeScript CLI for Todoist",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"CHANGELOG.md"
|
|
52
52
|
],
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@doist/cli-core": "0.
|
|
54
|
+
"@doist/cli-core": "0.9.0",
|
|
55
55
|
"@doist/todoist-sdk": "10.1.3",
|
|
56
56
|
"@napi-rs/keyring": "1.3.0",
|
|
57
57
|
"@pnpm/tabtab": "0.5.4",
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
"@types/node": "25.6.0",
|
|
70
70
|
"conventional-changelog-conventionalcommits": "9.3.1",
|
|
71
71
|
"lefthook": "2.1.6",
|
|
72
|
-
"oxfmt": "0.
|
|
73
|
-
"oxlint": "1.
|
|
72
|
+
"oxfmt": "0.48.0",
|
|
73
|
+
"oxlint": "1.63.0",
|
|
74
74
|
"semantic-release": "25.0.3",
|
|
75
75
|
"typescript": "6.0.3",
|
|
76
76
|
"vitest": "4.1.5"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/commands/update/action.ts"],"names":[],"mappings":"AAuCA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GjG"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import packageJson from '../../../package.json' with { type: 'json' };
|
|
4
|
-
import { withSpinner } from '../../lib/spinner.js';
|
|
5
|
-
import { fetchLatestVersion, getConfiguredUpdateChannel, getInstallTag, isNewer, PACKAGE_NAME, } from '../../lib/update.js';
|
|
6
|
-
function detectPackageManager() {
|
|
7
|
-
const execPath = process.env.npm_execpath ?? '';
|
|
8
|
-
if (execPath.includes('pnpm'))
|
|
9
|
-
return 'pnpm';
|
|
10
|
-
return 'npm';
|
|
11
|
-
}
|
|
12
|
-
function runInstall(pm, tag) {
|
|
13
|
-
const command = pm === 'pnpm' ? 'add' : 'install';
|
|
14
|
-
return new Promise((resolve, reject) => {
|
|
15
|
-
const child = spawn(pm, [command, '-g', `${PACKAGE_NAME}@${tag}`], {
|
|
16
|
-
stdio: 'pipe',
|
|
17
|
-
});
|
|
18
|
-
let stderr = '';
|
|
19
|
-
child.stderr?.on('data', (data) => {
|
|
20
|
-
stderr += data.toString();
|
|
21
|
-
});
|
|
22
|
-
child.on('error', reject);
|
|
23
|
-
child.on('close', (code) => resolve({ exitCode: code ?? 1, stderr }));
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
function channelLabel(channel) {
|
|
27
|
-
return channel === 'pre-release' ? ` ${chalk.magenta('(pre-release)')}` : '';
|
|
28
|
-
}
|
|
29
|
-
export async function updateAction(options) {
|
|
30
|
-
if (options.check && options.channel) {
|
|
31
|
-
console.error(chalk.red('Error:'), 'Specify either --check or --channel, not both.');
|
|
32
|
-
process.exitCode = 1;
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
const channel = await getConfiguredUpdateChannel();
|
|
36
|
-
if (options.channel) {
|
|
37
|
-
if (channel === 'pre-release') {
|
|
38
|
-
console.log(`Update channel: ${chalk.magenta('pre-release')}`);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
console.log(`Update channel: ${chalk.green('stable')}`);
|
|
42
|
-
}
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
const tag = getInstallTag(channel);
|
|
46
|
-
const label = channelLabel(channel);
|
|
47
|
-
const currentVersion = packageJson.version;
|
|
48
|
-
let latestVersion;
|
|
49
|
-
try {
|
|
50
|
-
latestVersion = await withSpinner({ text: `Checking for updates${label}...`, color: 'blue' }, () => fetchLatestVersion(channel));
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
54
|
-
console.error(chalk.red('Error:'), `Failed to check for updates: ${message}`);
|
|
55
|
-
process.exitCode = 1;
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
const updateAvailable = isNewer(currentVersion, latestVersion);
|
|
59
|
-
if (options.check) {
|
|
60
|
-
const channelLine = channel === 'pre-release'
|
|
61
|
-
? ` Channel: ${chalk.magenta('pre-release')}`
|
|
62
|
-
: ` Channel: ${chalk.green('stable')}`;
|
|
63
|
-
if (updateAvailable) {
|
|
64
|
-
console.log(`Update available: ${chalk.dim(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)}`);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
console.log(chalk.green('✓'), `Already up to date (v${currentVersion})`);
|
|
68
|
-
}
|
|
69
|
-
console.log(channelLine);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
if (currentVersion === latestVersion) {
|
|
73
|
-
console.log(chalk.green('✓'), `Already up to date${label} (v${currentVersion})`);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
if (updateAvailable) {
|
|
77
|
-
console.log(`Update available${label}: ${chalk.dim(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)}`);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
console.log(`Downgrade available${label}: ${chalk.dim(`v${currentVersion}`)} → ${chalk.yellow(`v${latestVersion}`)}`);
|
|
81
|
-
}
|
|
82
|
-
const pm = detectPackageManager();
|
|
83
|
-
let result;
|
|
84
|
-
try {
|
|
85
|
-
result = await withSpinner({ text: `Updating to v${latestVersion}${label}...`, color: 'blue' }, () => runInstall(pm, tag));
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
if (error instanceof Error && 'code' in error && error.code === 'EACCES') {
|
|
89
|
-
console.error(chalk.red('Error:'), 'Permission denied. Try running with sudo:');
|
|
90
|
-
console.error(chalk.dim(` sudo ${pm} ${pm === 'pnpm' ? 'add' : 'install'} -g ${PACKAGE_NAME}@${tag}`));
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
94
|
-
console.error(chalk.red('Error:'), `Install failed: ${message}`);
|
|
95
|
-
}
|
|
96
|
-
process.exitCode = 1;
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (result.exitCode !== 0) {
|
|
100
|
-
console.error(chalk.red('Error:'), `${pm} exited with code ${result.exitCode}`);
|
|
101
|
-
if (result.stderr) {
|
|
102
|
-
console.error(chalk.dim(result.stderr.trim()));
|
|
103
|
-
}
|
|
104
|
-
process.exitCode = 1;
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
console.log(chalk.green('✓'), `Updated to v${latestVersion}${label}`);
|
|
108
|
-
if (channel === 'stable') {
|
|
109
|
-
console.log(chalk.dim(' Run'), chalk.cyan('td changelog'), chalk.dim('to see what changed'));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=action.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/commands/update/action.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/commands/update/switch.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,CAAC,OAAO,EAAE;IACzC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChB"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { readConfig, writeConfig } from '../../lib/config.js';
|
|
3
|
-
export async function switchChannel(options) {
|
|
4
|
-
if (options.stable && options.preRelease) {
|
|
5
|
-
console.error(chalk.red('Error:'), 'Specify either --stable or --pre-release, not both.');
|
|
6
|
-
process.exitCode = 1;
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
if (!options.stable && !options.preRelease) {
|
|
10
|
-
console.error(chalk.red('Error:'), 'Specify --stable or --pre-release.');
|
|
11
|
-
process.exitCode = 1;
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
const channel = options.preRelease ? 'pre-release' : 'stable';
|
|
15
|
-
const config = await readConfig();
|
|
16
|
-
config.update_channel = channel;
|
|
17
|
-
await writeConfig(config);
|
|
18
|
-
if (channel === 'pre-release') {
|
|
19
|
-
console.log(chalk.green('✓'), `Update channel set to ${chalk.magenta('pre-release')}`);
|
|
20
|
-
console.log();
|
|
21
|
-
console.log(chalk.yellow('Note:'), 'Pre-release updates follow the', chalk.cyan('next'), 'branch.');
|
|
22
|
-
console.log('When pre-release changes are merged into a stable release, no further');
|
|
23
|
-
console.log('pre-release updates will be published until a new pre-release cycle begins.');
|
|
24
|
-
console.log('Remember to switch back to stable when done:');
|
|
25
|
-
console.log(chalk.dim(' td update switch --stable'));
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
console.log(chalk.green('✓'), 'Update channel set to stable');
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=switch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/commands/update/switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAA;AAEjF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAGnC;IACG,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,qDAAqD,CAAC,CAAA;QACzF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACV,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,oCAAoC,CAAC,CAAA;QACxE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACV,CAAC;IAED,MAAM,OAAO,GAAkB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAA;IAE5E,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAA;IAC/B,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;IAEzB,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,yBAAyB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QACtF,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EACrB,gCAAgC,EAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAClB,SAAS,CACZ,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAA;QACpF,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAA;QAC1F,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAA;IACzD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAA;IACjE,CAAC;AACL,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare const DEFAULT_PORT = 8765;
|
|
2
|
-
export declare function getRedirectUri(port: number): string;
|
|
3
|
-
export declare function startCallbackServer(expectedState: string): Promise<{
|
|
4
|
-
promise: Promise<string>;
|
|
5
|
-
port: number;
|
|
6
|
-
cleanup: () => void;
|
|
7
|
-
}>;
|
|
8
|
-
//# sourceMappingURL=oauth-server.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-server.d.ts","sourceRoot":"","sources":["../../src/lib/oauth-server.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,OAAO,CAAA;AAssBhC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAYD,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IACtE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,IAAI,CAAA;CACtB,CAAC,CAgGD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/lib/oauth-server.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/oauth.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { type AdditionalScopeFlag } from './oauth-scopes.js';
|
|
2
|
-
export declare const READ_WRITE_SCOPES = "data:read_write,data:delete,project:delete";
|
|
3
|
-
export declare const READ_ONLY_SCOPES = "data:read";
|
|
4
|
-
export interface AuthScopeOptions {
|
|
5
|
-
readOnly?: boolean;
|
|
6
|
-
additionalScopes?: readonly AdditionalScopeFlag[];
|
|
7
|
-
}
|
|
8
|
-
export declare function resolveAuthScope(options: AuthScopeOptions): string;
|
|
9
|
-
export declare function buildAuthorizationUrl(codeChallenge: string, state: string, options?: AuthScopeOptions & {
|
|
10
|
-
port?: number;
|
|
11
|
-
}): string;
|
|
12
|
-
export declare function exchangeCodeForToken(code: string, codeVerifier: string, port: number): Promise<string>;
|
|
13
|
-
//# sourceMappingURL=oauth.d.ts.map
|
package/dist/lib/oauth.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,mBAAmB,CAAA;AAO3E,eAAO,MAAM,iBAAiB,+CAA+C,CAAA;AAC7E,eAAO,MAAM,gBAAgB,cAAc,CAAA;AAE3C,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAA;CACpD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAMlE;AAED,wBAAgB,qBAAqB,CACjC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAgB,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,MAAM,CAYR;AAOD,wBAAsB,oBAAoB,CACtC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
|
package/dist/lib/oauth.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { CliError } from './errors.js';
|
|
2
|
-
import { oauthScopeFor } from './oauth-scopes.js';
|
|
3
|
-
import { DEFAULT_PORT, getRedirectUri } from './oauth-server.js';
|
|
4
|
-
import { fetchTodoist } from './usage-tracking.js';
|
|
5
|
-
const TODOIST_CLIENT_ID = '04863cc1e3584830a578622f50224d5b';
|
|
6
|
-
const OAUTH_AUTHORIZE_URL = 'https://todoist.com/oauth/authorize';
|
|
7
|
-
const OAUTH_TOKEN_URL = 'https://todoist.com/oauth/access_token';
|
|
8
|
-
export const READ_WRITE_SCOPES = 'data:read_write,data:delete,project:delete';
|
|
9
|
-
export const READ_ONLY_SCOPES = 'data:read';
|
|
10
|
-
export function resolveAuthScope(options) {
|
|
11
|
-
const parts = [options.readOnly ? READ_ONLY_SCOPES : READ_WRITE_SCOPES];
|
|
12
|
-
for (const scope of options.additionalScopes ?? []) {
|
|
13
|
-
parts.push(oauthScopeFor(scope));
|
|
14
|
-
}
|
|
15
|
-
return parts.join(',');
|
|
16
|
-
}
|
|
17
|
-
export function buildAuthorizationUrl(codeChallenge, state, options = {}) {
|
|
18
|
-
const scope = resolveAuthScope(options);
|
|
19
|
-
const redirectUri = getRedirectUri(options.port ?? DEFAULT_PORT);
|
|
20
|
-
const params = new URLSearchParams({
|
|
21
|
-
client_id: TODOIST_CLIENT_ID,
|
|
22
|
-
scope,
|
|
23
|
-
state: state,
|
|
24
|
-
redirect_uri: redirectUri,
|
|
25
|
-
code_challenge: codeChallenge,
|
|
26
|
-
code_challenge_method: 'S256',
|
|
27
|
-
});
|
|
28
|
-
return `${OAUTH_AUTHORIZE_URL}?${params.toString()}`;
|
|
29
|
-
}
|
|
30
|
-
export async function exchangeCodeForToken(code, codeVerifier, port) {
|
|
31
|
-
const body = new URLSearchParams({
|
|
32
|
-
client_id: TODOIST_CLIENT_ID,
|
|
33
|
-
code: code,
|
|
34
|
-
code_verifier: codeVerifier,
|
|
35
|
-
redirect_uri: getRedirectUri(port),
|
|
36
|
-
});
|
|
37
|
-
const response = await fetchTodoist(OAUTH_TOKEN_URL, {
|
|
38
|
-
method: 'POST',
|
|
39
|
-
headers: {
|
|
40
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
41
|
-
},
|
|
42
|
-
body: body.toString(),
|
|
43
|
-
});
|
|
44
|
-
if (!response.ok) {
|
|
45
|
-
const text = await response.text();
|
|
46
|
-
throw new CliError('AUTH_FAILED', `Token exchange failed: ${response.status} ${text}`);
|
|
47
|
-
}
|
|
48
|
-
const data = await response.json();
|
|
49
|
-
return data.access_token;
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=oauth.js.map
|
package/dist/lib/oauth.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAA4B,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAChE,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,MAAM,CAAC,MAAM,iBAAiB,GAAG,4CAA4C,CAAA;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAA;AAO3C,MAAM,UAAU,gBAAgB,CAAC,OAAyB;IACtD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAA;IACvE,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,qBAAqB,CACjC,aAAqB,EACrB,KAAa,EACb,UAAgD,EAAE;IAElD,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QAC/B,SAAS,EAAE,iBAAiB;QAC5B,KAAK;QACL,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,WAAW;QACzB,cAAc,EAAE,aAAa;QAC7B,qBAAqB,EAAE,MAAM;KAChC,CAAC,CAAA;IACF,OAAO,GAAG,mBAAmB,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAA;AACxD,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,IAAY,EACZ,YAAoB,EACpB,IAAY;IAEZ,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;QAC7B,SAAS,EAAE,iBAAiB;QAC5B,IAAI,EAAE,IAAI;QACV,aAAa,EAAE,YAAY;QAC3B,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC;KACrC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,cAAc,EAAE,mCAAmC;SACtD;QACD,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;KACxB,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,0BAA0B,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAA;IAC1F,CAAC;IAED,MAAM,IAAI,GAAkB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACjD,OAAO,IAAI,CAAC,YAAY,CAAA;AAC5B,CAAC"}
|
package/dist/lib/pkce.d.ts
DELETED
package/dist/lib/pkce.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/lib/pkce.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { createHash, randomBytes } from 'node:crypto';
|
|
2
|
-
const VERIFIER_CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
|
|
3
|
-
const VERIFIER_LENGTH = 64;
|
|
4
|
-
export function generateCodeVerifier() {
|
|
5
|
-
const bytes = randomBytes(VERIFIER_LENGTH);
|
|
6
|
-
let verifier = '';
|
|
7
|
-
for (let i = 0; i < VERIFIER_LENGTH; i++) {
|
|
8
|
-
verifier += VERIFIER_CHARSET[bytes[i] % VERIFIER_CHARSET.length];
|
|
9
|
-
}
|
|
10
|
-
return verifier;
|
|
11
|
-
}
|
|
12
|
-
export function generateCodeChallenge(verifier) {
|
|
13
|
-
const hash = createHash('sha256').update(verifier).digest();
|
|
14
|
-
return hash.toString('base64url');
|
|
15
|
-
}
|
|
16
|
-
export function generateState() {
|
|
17
|
-
return randomBytes(16).toString('hex');
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=pkce.js.map
|
package/dist/lib/pkce.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,gBAAgB,GAAG,oEAAoE,CAAA;AAC7F,MAAM,eAAe,GAAG,EAAE,CAAA;AAE1B,MAAM,UAAU,oBAAoB;IAChC,MAAM,KAAK,GAAG,WAAW,CAAC,eAAe,CAAC,CAAA;IAC1C,IAAI,QAAQ,GAAG,EAAE,CAAA;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACpE,CAAC;IACD,OAAO,QAAQ,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IAClD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IAC3D,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC1C,CAAC"}
|