@doist/todoist-cli 1.67.1 → 1.69.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/README.md +10 -0
- package/dist/commands/auth/status.js +3 -3
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/commands/auth/store-wrap.js +1 -1
- package/dist/commands/auth/store-wrap.js.map +1 -1
- package/dist/commands/billing/format.d.ts +28 -0
- package/dist/commands/billing/format.d.ts.map +1 -0
- package/dist/commands/billing/format.js +89 -0
- package/dist/commands/billing/format.js.map +1 -0
- package/dist/commands/billing/index.d.ts +3 -0
- package/dist/commands/billing/index.d.ts.map +1 -0
- package/dist/commands/billing/index.js +45 -0
- package/dist/commands/billing/index.js.map +1 -0
- package/dist/commands/billing/plan.d.ts +3 -0
- package/dist/commands/billing/plan.d.ts.map +1 -0
- package/dist/commands/billing/plan.js +22 -0
- package/dist/commands/billing/plan.js.map +1 -0
- package/dist/commands/billing/prices.d.ts +3 -0
- package/dist/commands/billing/prices.d.ts.map +1 -0
- package/dist/commands/billing/prices.js +22 -0
- package/dist/commands/billing/prices.js.map +1 -0
- package/dist/commands/billing/pricing.d.ts +7 -0
- package/dist/commands/billing/pricing.d.ts.map +1 -0
- package/dist/commands/billing/pricing.js +43 -0
- package/dist/commands/billing/pricing.js.map +1 -0
- package/dist/commands/billing/subscription.d.ts +3 -0
- package/dist/commands/billing/subscription.d.ts.map +1 -0
- package/dist/commands/billing/subscription.js +37 -0
- package/dist/commands/billing/subscription.js.map +1 -0
- package/dist/commands/config/view.js +3 -3
- package/dist/commands/config/view.js.map +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/user/aliases.d.ts +11 -0
- package/dist/commands/user/aliases.d.ts.map +1 -0
- package/dist/commands/user/aliases.js +11 -0
- package/dist/commands/user/aliases.js.map +1 -0
- package/dist/commands/user/current.d.ts +15 -4
- package/dist/commands/user/current.d.ts.map +1 -1
- package/dist/commands/user/current.js +58 -29
- package/dist/commands/user/current.js.map +1 -1
- package/dist/commands/user/index.d.ts.map +1 -1
- package/dist/commands/user/index.js +25 -30
- package/dist/commands/user/index.js.map +1 -1
- package/dist/commands/user/list.d.ts +14 -5
- package/dist/commands/user/list.d.ts.map +1 -1
- package/dist/commands/user/list.js +33 -39
- package/dist/commands/user/list.js.map +1 -1
- package/dist/commands/user/project-account.d.ts +17 -0
- package/dist/commands/user/project-account.d.ts.map +1 -0
- package/dist/commands/user/project-account.js +18 -0
- package/dist/commands/user/project-account.js.map +1 -0
- package/dist/commands/user/remove.d.ts +12 -1
- package/dist/commands/user/remove.d.ts.map +1 -1
- package/dist/commands/user/remove.js +28 -28
- package/dist/commands/user/remove.js.map +1 -1
- package/dist/commands/user/use.d.ts +10 -1
- package/dist/commands/user/use.d.ts.map +1 -1
- package/dist/commands/user/use.js +13 -15
- package/dist/commands/user/use.js.map +1 -1
- package/dist/index.js +29 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/api/core.d.ts.map +1 -1
- package/dist/lib/api/core.js +12 -1
- package/dist/lib/api/core.js.map +1 -1
- package/dist/lib/auth-flags.d.ts +3 -0
- package/dist/lib/auth-flags.d.ts.map +1 -1
- package/dist/lib/auth-flags.js +5 -0
- package/dist/lib/auth-flags.js.map +1 -1
- package/dist/lib/auth-store.d.ts.map +1 -1
- package/dist/lib/auth-store.js +19 -2
- package/dist/lib/auth-store.js.map +1 -1
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +4 -12
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/completion.js +7 -6
- package/dist/lib/completion.js.map +1 -1
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/oauth-scopes.d.ts +8 -1
- package/dist/lib/oauth-scopes.d.ts.map +1 -1
- package/dist/lib/oauth-scopes.js +10 -3
- package/dist/lib/oauth-scopes.js.map +1 -1
- package/dist/lib/permissions.d.ts.map +1 -1
- package/dist/lib/permissions.js +6 -0
- package/dist/lib/permissions.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 +28 -10
- package/dist/lib/skills/content.js.map +1 -1
- package/dist/lib/users.d.ts +14 -0
- package/dist/lib/users.d.ts.map +1 -1
- package/dist/lib/users.js +30 -2
- package/dist/lib/users.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [1.69.0](https://github.com/Doist/todoist-cli/compare/v1.68.0...v1.69.0) (2026-05-24)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* rename `td user` to `td accounts` and adopt cli-core account attachers ([#360](https://github.com/Doist/todoist-cli/issues/360)) ([73a0b77](https://github.com/Doist/todoist-cli/commit/73a0b771daa46f4fe3be4a303c91580f97c6b3d3))
|
|
6
|
+
|
|
7
|
+
## [1.68.0](https://github.com/Doist/todoist-cli/compare/v1.67.1...v1.68.0) (2026-05-23)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **billing:** add billing commands and billing OAuth scope ([#356](https://github.com/Doist/todoist-cli/issues/356)) ([41ab8ba](https://github.com/Doist/todoist-cli/commit/41ab8ba4f0043773a697cf5e45eb819da7f56ded))
|
|
12
|
+
|
|
1
13
|
## [1.67.1](https://github.com/Doist/todoist-cli/compare/v1.67.0...v1.67.1) (2026-05-22)
|
|
2
14
|
|
|
3
15
|
### Bug Fixes
|
package/README.md
CHANGED
|
@@ -84,6 +84,16 @@ td auth login --read-only
|
|
|
84
84
|
|
|
85
85
|
In read-only mode, commands that change Todoist data (create/update/delete/complete/move/archive, etc.) are blocked by the CLI.
|
|
86
86
|
|
|
87
|
+
Some commands need opt-in OAuth scopes, requested via `--additional-scopes=<list>` (comma-separated):
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
td auth login --additional-scopes=app-management # td apps ...
|
|
91
|
+
td auth login --additional-scopes=backups # td backup ...
|
|
92
|
+
td auth login --additional-scopes=billing # td billing ...
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Run `td auth login --help` for the full list. When a command fails for lack of a scope, the error suggests a re-login command that preserves whichever flags were originally used.
|
|
96
|
+
|
|
87
97
|
### Alternative methods
|
|
88
98
|
|
|
89
99
|
**Manual token:** Get your API token from [Todoist Settings > Integrations > Developer](https://todoist.com/app/settings/integrations/developer):
|
|
@@ -5,7 +5,7 @@ import { createApiForToken, getApi } from '../../lib/api/core.js';
|
|
|
5
5
|
import { toTodoistAccount, } from '../../lib/auth-store.js';
|
|
6
6
|
import { getAuthMetadata, listStoredUsers, readConfig, } from '../../lib/auth.js';
|
|
7
7
|
import { getRequestedUserRef } from '../../lib/global-args.js';
|
|
8
|
-
import {
|
|
8
|
+
import { getEffectiveDefaultUserId } from '../../lib/users.js';
|
|
9
9
|
function formatAuthMode(authMode, authScope) {
|
|
10
10
|
if (authMode === 'read-only') {
|
|
11
11
|
return `read-only (OAuth scope ${authScope ?? 'data:read'})`;
|
|
@@ -29,7 +29,7 @@ async function gatherStatusData(token) {
|
|
|
29
29
|
listStoredUsers(),
|
|
30
30
|
readConfig(),
|
|
31
31
|
]);
|
|
32
|
-
return { user, metadata, storedUsers, defaultUserId:
|
|
32
|
+
return { user, metadata, storedUsers, defaultUserId: getEffectiveDefaultUserId(config) };
|
|
33
33
|
}
|
|
34
34
|
function buildStatusText(data) {
|
|
35
35
|
const { user, metadata, storedUsers, defaultUserId } = data;
|
|
@@ -56,7 +56,7 @@ function buildStatusText(data) {
|
|
|
56
56
|
const marker = other.id === defaultUserId ? chalk.dim(' (default)') : '';
|
|
57
57
|
lines.push(` ${other.email} ${chalk.dim(`(id:${other.id})`)}${marker}`);
|
|
58
58
|
}
|
|
59
|
-
lines.push(chalk.dim('Use `td
|
|
59
|
+
lines.push(chalk.dim('Use `td accounts use <id|email>` to switch default, or `--user <ref>` per command.'));
|
|
60
60
|
}
|
|
61
61
|
return lines;
|
|
62
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EACH,gBAAgB,GAGnB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAGH,eAAe,EACf,eAAe,EACf,UAAU,GAEb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,
|
|
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":"store-wrap.js","sourceRoot":"","sources":["../../../src/commands/auth/store-wrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEpE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACrD,KAAK,UAAU,aAAa,CAAC,GAAW;QACpC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAClC,IACI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1B,YAAY,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAC9D,EACH,CAAC;YACC,MAAM,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACpC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAsB,EAAE;QAC5D,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,GAAG,IAAI,mBAAmB,EAAE,CAAA;YAC9C,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;YAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG,GAAG,IAAI,mBAAmB,EAAE,CAAA;YAC9C,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;YAC3D,
|
|
1
|
+
{"version":3,"file":"store-wrap.js","sourceRoot":"","sources":["../../../src/commands/auth/store-wrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEpE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACrD,KAAK,UAAU,aAAa,CAAC,GAAW;QACpC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAClC,IACI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1B,YAAY,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAC9D,EACH,CAAC;YACC,MAAM,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACpC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAsB,EAAE;QAC5D,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,GAAG,IAAI,mBAAmB,EAAE,CAAA;YAC9C,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;YAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG,GAAG,IAAI,mBAAmB,EAAE,CAAA;YAC9C,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;YAC3D,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACjC,CAAC;KACJ,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PriceListing, TodoistApi } from '@doist/todoist-sdk';
|
|
2
|
+
import type { ViewOptions } from '../../lib/options.js';
|
|
3
|
+
export type BillingViewOptions = Pick<ViewOptions, 'json' | 'ndjson'>;
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the locale used to format money, from the user's Todoist language
|
|
6
|
+
* (e.g. `pt_BR` → `pt-BR` for `Intl`). Only fetched for human output — machine
|
|
7
|
+
* output dumps the raw payload, so it skips the extra `getUser` call entirely.
|
|
8
|
+
* Returns `undefined` (the `Intl` default locale) when no fetch is made.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveLocale(api: TodoistApi, options: BillingViewOptions): Promise<string | undefined>;
|
|
11
|
+
/**
|
|
12
|
+
* Emit the raw payload as JSON (`--json`) or NDJSON (`--ndjson`) and report
|
|
13
|
+
* whether machine output was produced, so callers can early-return before
|
|
14
|
+
* rendering the human view. Reuses the shared `output.ts` helpers so billing
|
|
15
|
+
* machine output matches the rest of the CLI.
|
|
16
|
+
*/
|
|
17
|
+
export declare function outputMachine(payload: object, options: BillingViewOptions): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Format an amount given in a currency's minor units (e.g. cents) as money.
|
|
20
|
+
* Mirrors todoist-web's `formatPrice`: the divisor comes from the currency's
|
|
21
|
+
* fraction digits (so JPY isn't rendered 100× too small), and whole amounts
|
|
22
|
+
* drop the decimals (`$6`, not `$6.00`). `locale` comes from the user's
|
|
23
|
+
* Todoist language; `undefined` uses the `Intl` default.
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatMoney(minorUnits: number, currency: string, locale?: string): string;
|
|
26
|
+
/** Render a single billing-cycle price listing, e.g. `monthly: $6, €6`. */
|
|
27
|
+
export declare function formatListing(listing: PriceListing, locale?: string): string;
|
|
28
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/commands/billing/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGvD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAA;AAErE;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,kBAAkB,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAI7B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAUnF;AAyCD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAUzF;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5E"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { formatJson, formatNdjson } from '../../lib/output.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the locale used to format money, from the user's Todoist language
|
|
4
|
+
* (e.g. `pt_BR` → `pt-BR` for `Intl`). Only fetched for human output — machine
|
|
5
|
+
* output dumps the raw payload, so it skips the extra `getUser` call entirely.
|
|
6
|
+
* Returns `undefined` (the `Intl` default locale) when no fetch is made.
|
|
7
|
+
*/
|
|
8
|
+
export async function resolveLocale(api, options) {
|
|
9
|
+
if (options.json || options.ndjson)
|
|
10
|
+
return undefined;
|
|
11
|
+
const user = await api.getUser();
|
|
12
|
+
return user.lang.replace(/_/g, '-');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Emit the raw payload as JSON (`--json`) or NDJSON (`--ndjson`) and report
|
|
16
|
+
* whether machine output was produced, so callers can early-return before
|
|
17
|
+
* rendering the human view. Reuses the shared `output.ts` helpers so billing
|
|
18
|
+
* machine output matches the rest of the CLI.
|
|
19
|
+
*/
|
|
20
|
+
export function outputMachine(payload, options) {
|
|
21
|
+
if (options.json) {
|
|
22
|
+
console.log(formatJson(payload));
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (options.ndjson) {
|
|
26
|
+
console.log(formatNdjson([payload]));
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
// `Intl.NumberFormat` construction is comparatively slow, and `formatMoney` is
|
|
32
|
+
// called in nested loops (pricing), so cache per currency + decimal-mode.
|
|
33
|
+
const formatterCache = new Map();
|
|
34
|
+
const fractionDigitsCache = new Map();
|
|
35
|
+
/**
|
|
36
|
+
* Number of fraction digits the currency uses (USD→2, JPY→0, BHD→3). Doubles
|
|
37
|
+
* as the minor-unit exponent: the divisor to convert minor units to major is
|
|
38
|
+
* `10 ** fractionDigits`.
|
|
39
|
+
*/
|
|
40
|
+
function currencyFractionDigits(currency) {
|
|
41
|
+
let digits = fractionDigitsCache.get(currency);
|
|
42
|
+
if (digits === undefined) {
|
|
43
|
+
digits =
|
|
44
|
+
new Intl.NumberFormat('en-US', { style: 'currency', currency }).resolvedOptions()
|
|
45
|
+
.maximumFractionDigits ?? 2;
|
|
46
|
+
fractionDigitsCache.set(currency, digits);
|
|
47
|
+
}
|
|
48
|
+
return digits;
|
|
49
|
+
}
|
|
50
|
+
function getFormatter(locale, currency, minimumFractionDigits) {
|
|
51
|
+
const key = `${locale ?? ''}|${currency}|${minimumFractionDigits}`;
|
|
52
|
+
let formatter = formatterCache.get(key);
|
|
53
|
+
if (!formatter) {
|
|
54
|
+
formatter = new Intl.NumberFormat(locale, {
|
|
55
|
+
style: 'currency',
|
|
56
|
+
currency,
|
|
57
|
+
minimumFractionDigits,
|
|
58
|
+
});
|
|
59
|
+
formatterCache.set(key, formatter);
|
|
60
|
+
}
|
|
61
|
+
return formatter;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Format an amount given in a currency's minor units (e.g. cents) as money.
|
|
65
|
+
* Mirrors todoist-web's `formatPrice`: the divisor comes from the currency's
|
|
66
|
+
* fraction digits (so JPY isn't rendered 100× too small), and whole amounts
|
|
67
|
+
* drop the decimals (`$6`, not `$6.00`). `locale` comes from the user's
|
|
68
|
+
* Todoist language; `undefined` uses the `Intl` default.
|
|
69
|
+
*/
|
|
70
|
+
export function formatMoney(minorUnits, currency, locale) {
|
|
71
|
+
const code = currency.toUpperCase();
|
|
72
|
+
try {
|
|
73
|
+
const major = minorUnits / 10 ** currencyFractionDigits(code);
|
|
74
|
+
return getFormatter(locale, code, Number.isInteger(major) ? 0 : 2).format(major);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Unknown/invalid currency code — Intl throws. Fall back to the raw
|
|
78
|
+
// minor-unit number rather than guessing a divisor.
|
|
79
|
+
return `${code} ${minorUnits}`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Render a single billing-cycle price listing, e.g. `monthly: $6, €6`. */
|
|
83
|
+
export function formatListing(listing, locale) {
|
|
84
|
+
const prices = listing.prices
|
|
85
|
+
.map((p) => formatMoney(p.unitAmount, p.currency, locale))
|
|
86
|
+
.join(', ');
|
|
87
|
+
return `${listing.billingCycle}: ${prices}`;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/commands/billing/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/billing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8C7D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { viewPlan } from './plan.js';
|
|
2
|
+
import { viewPrices } from './prices.js';
|
|
3
|
+
import { viewPricing } from './pricing.js';
|
|
4
|
+
import { viewSubscription } from './subscription.js';
|
|
5
|
+
export function registerBillingCommand(program) {
|
|
6
|
+
const billing = program
|
|
7
|
+
.command('billing')
|
|
8
|
+
.description('View billing and subscription information')
|
|
9
|
+
.addHelpText('after', `
|
|
10
|
+
Examples:
|
|
11
|
+
td billing
|
|
12
|
+
td billing subscription --json
|
|
13
|
+
td billing plan
|
|
14
|
+
td billing prices
|
|
15
|
+
td billing pricing --formatted
|
|
16
|
+
|
|
17
|
+
Requires authenticating with the billing scope:
|
|
18
|
+
td auth login --additional-scopes=billing`);
|
|
19
|
+
billing
|
|
20
|
+
.command('subscription', { isDefault: true })
|
|
21
|
+
.description('Show your current subscription status and plan')
|
|
22
|
+
.option('--json', 'Output as JSON')
|
|
23
|
+
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
24
|
+
.action(viewSubscription);
|
|
25
|
+
billing
|
|
26
|
+
.command('plan')
|
|
27
|
+
.description('Show your Pro plan and billing details')
|
|
28
|
+
.option('--json', 'Output as JSON')
|
|
29
|
+
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
30
|
+
.action(viewPlan);
|
|
31
|
+
billing
|
|
32
|
+
.command('prices')
|
|
33
|
+
.description('Show available Pro and Teams prices')
|
|
34
|
+
.option('--json', 'Output as JSON')
|
|
35
|
+
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
36
|
+
.action(viewPrices);
|
|
37
|
+
billing
|
|
38
|
+
.command('pricing')
|
|
39
|
+
.description('Show current and legacy pricing by version')
|
|
40
|
+
.option('--formatted', 'Return localized formatted price strings')
|
|
41
|
+
.option('--json', 'Output as JSON')
|
|
42
|
+
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
43
|
+
.action(viewPricing);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/billing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,MAAM,OAAO,GAAG,OAAO;SAClB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,2CAA2C,CAAC;SACxD,WAAW,CACR,OAAO,EACP;;;;;;;;;4CASgC,CACnC,CAAA;IAEL,OAAO;SACF,OAAO,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SAC5C,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAE7B,OAAO;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,CAAC,CAAA;IAErB,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,UAAU,CAAC,CAAA;IAEvB,OAAO;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;SACjE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,WAAW,CAAC,CAAA;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/commands/billing/plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAA+C,MAAM,aAAa,CAAA;AAElG,wBAAsB,QAAQ,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getApi } from '../../lib/api/core.js';
|
|
3
|
+
import { formatListing, outputMachine, resolveLocale } from './format.js';
|
|
4
|
+
export async function viewPlan(options = {}) {
|
|
5
|
+
const api = await getApi();
|
|
6
|
+
const locale = await resolveLocale(api, options);
|
|
7
|
+
const details = await api.getProPlanDetails();
|
|
8
|
+
if (outputMachine(details, options))
|
|
9
|
+
return;
|
|
10
|
+
console.log(chalk.bold('Pro plan'));
|
|
11
|
+
console.log('');
|
|
12
|
+
console.log(` Status: ${details.currentPlanStatus}`);
|
|
13
|
+
console.log(` Downgrade at: ${details.downgradeAt ?? chalk.dim('(none)')}`);
|
|
14
|
+
if (details.priceList.length > 0) {
|
|
15
|
+
console.log('');
|
|
16
|
+
console.log(chalk.bold(' Prices'));
|
|
17
|
+
for (const listing of details.priceList) {
|
|
18
|
+
console.log(` ${formatListing(listing, locale)}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/billing/plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAA2B,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAElG,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAA8B,EAAE;IAC3D,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAE7C,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC;QAAE,OAAM;IAE3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACjE,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAElF,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;QACnC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QACxD,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prices.d.ts","sourceRoot":"","sources":["../../../src/commands/billing/prices.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAA+C,MAAM,aAAa,CAAA;AAElG,wBAAsB,UAAU,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getApi } from '../../lib/api/core.js';
|
|
3
|
+
import { formatListing, outputMachine, resolveLocale } from './format.js';
|
|
4
|
+
export async function viewPrices(options = {}) {
|
|
5
|
+
const api = await getApi();
|
|
6
|
+
const locale = await resolveLocale(api, options);
|
|
7
|
+
const prices = await api.getPrices();
|
|
8
|
+
if (outputMachine(prices, options))
|
|
9
|
+
return;
|
|
10
|
+
console.log(chalk.bold('Prices'));
|
|
11
|
+
console.log('');
|
|
12
|
+
console.log(chalk.bold(' Pro'));
|
|
13
|
+
for (const listing of prices.pro) {
|
|
14
|
+
console.log(` ${formatListing(listing, locale)}`);
|
|
15
|
+
}
|
|
16
|
+
console.log('');
|
|
17
|
+
console.log(chalk.bold(' Teams'));
|
|
18
|
+
for (const listing of prices.teams) {
|
|
19
|
+
console.log(` ${formatListing(listing, locale)}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=prices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/commands/billing/prices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAA2B,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAElG,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAA8B,EAAE;IAC7D,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,CAAA;IAEpC,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC;QAAE,OAAM;IAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAChC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IAClC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IACxD,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type BillingViewOptions } from './format.js';
|
|
2
|
+
interface PricingOptions extends BillingViewOptions {
|
|
3
|
+
formatted?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function viewPricing(options?: PricingOptions): Promise<void>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../../src/commands/billing/pricing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,aAAa,CAAA;AAEhG,UAAU,cAAe,SAAQ,kBAAkB;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC7E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getApi } from '../../lib/api/core.js';
|
|
3
|
+
import { formatMoney, outputMachine, resolveLocale } from './format.js';
|
|
4
|
+
export async function viewPricing(options = {}) {
|
|
5
|
+
const api = await getApi();
|
|
6
|
+
// `--formatted` returns pre-localized strings, so locale (and the getUser
|
|
7
|
+
// fetch it costs) is only needed for the numeric formatting branch.
|
|
8
|
+
const locale = options.formatted ? undefined : await resolveLocale(api, options);
|
|
9
|
+
const pricing = await api.getPricing({ formatted: options.formatted });
|
|
10
|
+
if (outputMachine(pricing, options))
|
|
11
|
+
return;
|
|
12
|
+
const { latestPro, latestBiz, sessionPro, sessionBiz, ...versions } = pricing;
|
|
13
|
+
console.log(chalk.bold('Pricing'));
|
|
14
|
+
console.log('');
|
|
15
|
+
console.log(` Latest Pro: ${latestPro}`);
|
|
16
|
+
console.log(` Latest Business: ${latestBiz}`);
|
|
17
|
+
console.log(` Session Pro: ${sessionPro}`);
|
|
18
|
+
console.log(` Session Business: ${sessionBiz}`);
|
|
19
|
+
for (const [version, plans] of Object.entries(versions)) {
|
|
20
|
+
// Only render keys that look like version pointers (v1, v25, …). Any
|
|
21
|
+
// other top-level field the SDK might add — scalar or object — is
|
|
22
|
+
// metadata, not a pricing version, and must not be rendered as one.
|
|
23
|
+
if (!/^v\d+/.test(version))
|
|
24
|
+
continue;
|
|
25
|
+
console.log('');
|
|
26
|
+
console.log(chalk.bold(` ${version}`));
|
|
27
|
+
for (const [plan, currencies] of Object.entries(plans)) {
|
|
28
|
+
for (const [currency, terms] of Object.entries(currencies)) {
|
|
29
|
+
const monthly = formatTerm(terms.monthly, currency, locale);
|
|
30
|
+
const yearly = formatTerm(terms.yearly, currency, locale);
|
|
31
|
+
console.log(` ${plan} (${currency.toUpperCase()}): ${monthly}/mo, ${yearly}/yr`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Pricing amounts are minor units (numbers) by default, or pre-formatted
|
|
38
|
+
* localized strings when the endpoint is called with `--formatted`.
|
|
39
|
+
*/
|
|
40
|
+
function formatTerm(value, currency, locale) {
|
|
41
|
+
return typeof value === 'number' ? formatMoney(value, currency, locale) : value;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../../src/commands/billing/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAA2B,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMhG,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAA0B,EAAE;IAC1D,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAEtE,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC;QAAE,OAAM;IAE3C,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAA;IAE7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAA;IAClD,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAA;IAElD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,qEAAqE;QACrE,kEAAkE;QAClE,oEAAoE;QACpE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,SAAQ;QACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAA;QACvC,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;gBAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;gBACzD,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,QAAQ,MAAM,KAAK,CAAC,CAAA;YACvF,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,KAAsB,EAAE,QAAgB,EAAE,MAAe;IACzE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AACnF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../../src/commands/billing/subscription.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,aAAa,CAAA;AAEhG,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCtF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getApi } from '../../lib/api/core.js';
|
|
3
|
+
import { formatMoney, outputMachine, resolveLocale } from './format.js';
|
|
4
|
+
export async function viewSubscription(options = {}) {
|
|
5
|
+
const api = await getApi();
|
|
6
|
+
const locale = await resolveLocale(api, options);
|
|
7
|
+
const info = await api.getSubscriptionInfo();
|
|
8
|
+
if (outputMachine(info, options))
|
|
9
|
+
return;
|
|
10
|
+
console.log(chalk.bold('Subscription'));
|
|
11
|
+
console.log('');
|
|
12
|
+
console.log(` Plan: ${info.plan}`);
|
|
13
|
+
console.log(` Status: ${info.status}`);
|
|
14
|
+
console.log(` Activation: ${info.activationMethod}`);
|
|
15
|
+
console.log(` Expires: ${info.expirationDate ?? chalk.dim('(none)')}`);
|
|
16
|
+
if (info.planPrice) {
|
|
17
|
+
const { rawAmount, currency, billingCycle } = info.planPrice;
|
|
18
|
+
const cycle = billingCycle ? `/${billingCycle === 'yearly' ? 'yr' : 'mo'}` : '';
|
|
19
|
+
console.log(` Price: ${formatMoney(rawAmount, currency, locale)}${cycle}`);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(` Price: ${chalk.dim('(none)')}`);
|
|
23
|
+
}
|
|
24
|
+
if (info.invoiceCreditBalance && Object.keys(info.invoiceCreditBalance).length > 0) {
|
|
25
|
+
const credits = Object.entries(info.invoiceCreditBalance)
|
|
26
|
+
.map(([currency, amount]) => formatMoney(amount, currency, locale))
|
|
27
|
+
.join(', ');
|
|
28
|
+
console.log(` Credit balance: ${credits}`);
|
|
29
|
+
}
|
|
30
|
+
if (info.hasBillingPortal && info.billingPortalUrl) {
|
|
31
|
+
console.log(` Billing portal: ${info.billingPortalUrl}`);
|
|
32
|
+
}
|
|
33
|
+
if (info.hasBillingPortalSwitchToAnnual && info.billingPortalSwitchToAnnualUrl) {
|
|
34
|
+
console.log(` Switch to annual: ${info.billingPortalSwitchToAnnualUrl}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=subscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../../src/commands/billing/subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAA2B,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAA8B,EAAE;IACnE,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,mBAAmB,EAAE,CAAA;IAE5C,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAM;IAExC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IACnD,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAElF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QAC5D,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/E,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,CAAA;IAC5F,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,IAAI,CAAC,oBAAoB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;aACpD,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;aAClE,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;IACjE,CAAC;IACD,IAAI,IAAI,CAAC,8BAA8B,IAAI,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAA;IAC/E,CAAC;AACL,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { SecureStoreUnavailableError } from '@doist/cli-core/auth';
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { listStoredUsers, NoTokenError, probeApiToken, TOKEN_ENV_VAR, } from '../../lib/auth.js';
|
|
4
4
|
import { getConfigPath, readConfigStrict } from '../../lib/config.js';
|
|
5
|
-
import {
|
|
5
|
+
import { getEffectiveDefaultUserId, NoUserSelectedError } from '../../lib/users.js';
|
|
6
6
|
const SECURE_STORE_DESCRIPTION = 'system credential manager';
|
|
7
7
|
function maskToken(token) {
|
|
8
8
|
if (token.length < 5)
|
|
@@ -57,7 +57,7 @@ function renderTokenLine(token, showToken) {
|
|
|
57
57
|
case 'unavailable':
|
|
58
58
|
return chalk.dim(`unknown — ${token.reason}`);
|
|
59
59
|
case 'ambiguous':
|
|
60
|
-
return chalk.dim('multiple stored accounts; pass --user <id|email> or set a default with `td
|
|
60
|
+
return chalk.dim('multiple stored accounts; pass --user <id|email> or set a default with `td accounts use`');
|
|
61
61
|
case 'missing':
|
|
62
62
|
return formatValue(undefined);
|
|
63
63
|
}
|
|
@@ -170,7 +170,7 @@ export async function viewConfig(options) {
|
|
|
170
170
|
}
|
|
171
171
|
const token = await probeTokenPresence();
|
|
172
172
|
const users = await listStoredUsers();
|
|
173
|
-
const defaultUserId =
|
|
173
|
+
const defaultUserId = getEffectiveDefaultUserId(config);
|
|
174
174
|
if (read.state === 'missing' && token.state === 'missing' && users.length === 0) {
|
|
175
175
|
console.log(`${chalk.dim('Config file:')} ${getConfigPath()} ${chalk.dim('(not created yet)')}`);
|
|
176
176
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/commands/config/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAEH,eAAe,EACf,YAAY,EACZ,aAAa,EAEb,aAAa,GAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAe,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/commands/config/view.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -126,7 +126,7 @@ async function checkAuthentication(offline) {
|
|
|
126
126
|
return {
|
|
127
127
|
name: 'auth',
|
|
128
128
|
status: 'warn',
|
|
129
|
-
message: 'Multiple stored Todoist accounts but no default. Set one with `td
|
|
129
|
+
message: 'Multiple stored Todoist accounts but no default. Set one with `td accounts use <id|email>` or pass --user.',
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
132
|
const message = error instanceof Error ? error.message : String(error);
|