@doist/cli-core 0.16.1 → 0.18.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.
Files changed (35) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +22 -14
  3. package/dist/auth/index.d.ts +3 -1
  4. package/dist/auth/index.d.ts.map +1 -1
  5. package/dist/auth/index.js +1 -0
  6. package/dist/auth/index.js.map +1 -1
  7. package/dist/auth/keyring/internal.d.ts +25 -0
  8. package/dist/auth/keyring/internal.d.ts.map +1 -0
  9. package/dist/auth/keyring/internal.js +31 -0
  10. package/dist/auth/keyring/internal.js.map +1 -0
  11. package/dist/auth/keyring/migrate.d.ts +19 -17
  12. package/dist/auth/keyring/migrate.d.ts.map +1 -1
  13. package/dist/auth/keyring/migrate.js +111 -49
  14. package/dist/auth/keyring/migrate.js.map +1 -1
  15. package/dist/auth/keyring/record-write.d.ts +70 -16
  16. package/dist/auth/keyring/record-write.d.ts.map +1 -1
  17. package/dist/auth/keyring/record-write.js +139 -30
  18. package/dist/auth/keyring/record-write.js.map +1 -1
  19. package/dist/auth/keyring/slot-naming.d.ts +6 -0
  20. package/dist/auth/keyring/slot-naming.d.ts.map +1 -0
  21. package/dist/auth/keyring/slot-naming.js +8 -0
  22. package/dist/auth/keyring/slot-naming.js.map +1 -0
  23. package/dist/auth/keyring/token-store.d.ts +10 -2
  24. package/dist/auth/keyring/token-store.d.ts.map +1 -1
  25. package/dist/auth/keyring/token-store.js +93 -64
  26. package/dist/auth/keyring/token-store.js.map +1 -1
  27. package/dist/auth/keyring/types.d.ts +20 -0
  28. package/dist/auth/keyring/types.d.ts.map +1 -1
  29. package/dist/auth/persist.d.ts +23 -0
  30. package/dist/auth/persist.d.ts.map +1 -0
  31. package/dist/auth/persist.js +38 -0
  32. package/dist/auth/persist.js.map +1 -0
  33. package/dist/auth/types.d.ts +27 -1
  34. package/dist/auth/types.d.ts.map +1 -1
  35. package/package.json +5 -5
@@ -22,6 +22,20 @@ export type UserRecord<TAccount extends AuthAccount> = {
22
22
  * that would otherwise live in the OS credential manager.
23
23
  */
24
24
  fallbackToken?: string;
25
+ /** Same lifecycle and security profile as `fallbackToken`, for the refresh slot. */
26
+ fallbackRefreshToken?: string;
27
+ /** Access-token expiry, unix-epoch ms. */
28
+ accessTokenExpiresAt?: number;
29
+ /** Refresh-token expiry, unix-epoch ms. */
30
+ refreshTokenExpiresAt?: number;
31
+ /**
32
+ * `true` when a refresh secret is stored (in the keyring or as
33
+ * `fallbackRefreshToken`); `false` when explicitly cleared by `set()`
34
+ * or by a no-refresh `setBundle`; `undefined` on legacy records that
35
+ * predate the bundle contract. Read by future bundle-aware accessors;
36
+ * `active()` itself doesn't consult it.
37
+ */
38
+ hasRefreshToken?: boolean;
25
39
  };
26
40
  /**
27
41
  * Port the consumer implements to expose their per-user config records to
@@ -39,6 +53,12 @@ export type UserRecordStore<TAccount extends AuthAccount> = {
39
53
  * `fallbackToken` over the keyring). Records are keyed by `account.id`.
40
54
  */
41
55
  upsert(record: UserRecord<TAccount>): Promise<void>;
56
+ /**
57
+ * Optional atomic insert. Returns `true` on write, `false` if `account.id`
58
+ * already exists. Migration prefers it to eliminate the existence-check
59
+ * TOCTOU race; callers fall back to list-then-upsert when absent.
60
+ */
61
+ tryInsert?(record: UserRecord<TAccount>): Promise<boolean>;
42
62
  /** Remove the record whose `account.id` matches. */
43
63
  remove(id: string): Promise<void>;
44
64
  /** The pinned default's `account.id`, or `null` when nothing is pinned. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/auth/keyring/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,8EAA8E;AAC9E,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,aAAa,CAAA;AAEjE,MAAM,MAAM,kBAAkB,GAAG;IAC7B,OAAO,EAAE,oBAAoB,CAAA;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,UAAU,CAAC,QAAQ,SAAS,WAAW,IAAI;IACnD,OAAO,EAAE,QAAQ,CAAA;IACjB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,WAAW,IAAI;IACxD,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACvC;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,oDAAoD;IACpD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,2EAA2E;IAC3E,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACtC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjD,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/auth/keyring/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,8EAA8E;AAC9E,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,aAAa,CAAA;AAEjE,MAAM,MAAM,kBAAkB,GAAG;IAC7B,OAAO,EAAE,oBAAoB,CAAA;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,UAAU,CAAC,QAAQ,SAAS,WAAW,IAAI;IACnD,OAAO,EAAE,QAAQ,CAAA;IACjB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oFAAoF;IACpF,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,WAAW,IAAI;IACxD,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACvC;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD;;;;OAIG;IACH,SAAS,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,oDAAoD;IACpD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,2EAA2E;IAC3E,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACtC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjD,CAAA"}
@@ -0,0 +1,23 @@
1
+ import type { AuthAccount, TokenBundle, TokenStore } from './types.js';
2
+ export type PersistBundleOptions<TAccount extends AuthAccount> = {
3
+ store: TokenStore<TAccount>;
4
+ account: TAccount;
5
+ bundle: TokenBundle;
6
+ /** Forwarded to `setBundle` when present. See `TokenStore.setBundle`. */
7
+ promoteDefault?: boolean;
8
+ };
9
+ /**
10
+ * Persist a bundle against any `TokenStore`. Prefers `setBundle` when the
11
+ * store implements it; otherwise falls back to `set(account, accessToken)`
12
+ * and silently drops refresh state. Wraps non-`CliError` failures as
13
+ * `AUTH_STORE_WRITE_FAILED`.
14
+ *
15
+ * `promoteDefault` is only honoured on the `setBundle` path — the base
16
+ * `set()` contract has no promotion control, so a custom multi-account
17
+ * store that opts out of `setBundle` will run its own promotion policy
18
+ * (typically first-account-wins). Multi-account stores that need
19
+ * silent-refresh-safe selection (no re-pinning on background rotation)
20
+ * MUST implement `setBundle`.
21
+ */
22
+ export declare function persistBundle<TAccount extends AuthAccount>(options: PersistBundleOptions<TAccount>): Promise<void>;
23
+ //# sourceMappingURL=persist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../src/auth/persist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEtE,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,WAAW,IAAI;IAC7D,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC3B,OAAO,EAAE,QAAQ,CAAA;IACjB,MAAM,EAAE,WAAW,CAAA;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,QAAQ,SAAS,WAAW,EAC5D,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -0,0 +1,38 @@
1
+ import { CliError, getErrorMessage } from '../errors.js';
2
+ /**
3
+ * Persist a bundle against any `TokenStore`. Prefers `setBundle` when the
4
+ * store implements it; otherwise falls back to `set(account, accessToken)`
5
+ * and silently drops refresh state. Wraps non-`CliError` failures as
6
+ * `AUTH_STORE_WRITE_FAILED`.
7
+ *
8
+ * `promoteDefault` is only honoured on the `setBundle` path — the base
9
+ * `set()` contract has no promotion control, so a custom multi-account
10
+ * store that opts out of `setBundle` will run its own promotion policy
11
+ * (typically first-account-wins). Multi-account stores that need
12
+ * silent-refresh-safe selection (no re-pinning on background rotation)
13
+ * MUST implement `setBundle`.
14
+ */
15
+ export async function persistBundle(options) {
16
+ const { store, account, bundle, promoteDefault } = options;
17
+ try {
18
+ if (store.setBundle) {
19
+ // Omit the options arg entirely when unset so presence-based
20
+ // handlers can distinguish "default" from explicit opt-out.
21
+ if (promoteDefault === undefined) {
22
+ await store.setBundle(account, bundle);
23
+ }
24
+ else {
25
+ await store.setBundle(account, bundle, { promoteDefault });
26
+ }
27
+ }
28
+ else {
29
+ await store.set(account, bundle.accessToken);
30
+ }
31
+ }
32
+ catch (error) {
33
+ if (error instanceof CliError)
34
+ throw error;
35
+ throw new CliError('AUTH_STORE_WRITE_FAILED', `Failed to persist token: ${getErrorMessage(error)}`);
36
+ }
37
+ }
38
+ //# sourceMappingURL=persist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../src/auth/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAWxD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,OAAuC;IAEvC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAA;IAC1D,IAAI,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAClB,6DAA6D;YAC7D,4DAA4D;YAC5D,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAC1C,CAAC;iBAAM,CAAC;gBACJ,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAA;YAC9D,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAChD,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,QAAQ;YAAE,MAAM,KAAK,CAAA;QAC1C,MAAM,IAAI,QAAQ,CACd,yBAAyB,EACzB,4BAA4B,eAAe,CAAC,KAAK,CAAC,EAAE,CACvD,CAAA;IACL,CAAC;AACL,CAAC"}
@@ -40,8 +40,10 @@ export type ExchangeInput = {
40
40
  export type ExchangeResult<TAccount extends AuthAccount = AuthAccount> = {
41
41
  accessToken: string;
42
42
  refreshToken?: string;
43
- /** Unix-epoch ms. cli-core does not refresh today. */
43
+ /** Access-token expiry, unix-epoch ms. */
44
44
  expiresAt?: number;
45
+ /** Refresh-token expiry, unix-epoch ms. */
46
+ refreshTokenExpiresAt?: number;
45
47
  /** Set when the token endpoint already identifies the account; skips `validateToken`. */
46
48
  account?: TAccount;
47
49
  };
@@ -50,6 +52,11 @@ export type ValidateInput = {
50
52
  /** Same shape as `ExchangeInput.handshake` — carries the folded `flags` / `readOnly`. */
51
53
  handshake: Record<string, unknown>;
52
54
  };
55
+ export type RefreshInput = {
56
+ refreshToken: string;
57
+ /** Same shape as `ExchangeInput.handshake` — empty when called outside `runOAuthFlow`. */
58
+ handshake: Record<string, unknown>;
59
+ };
53
60
  /**
54
61
  * Strategy interface every auth method implements. cli-core ships
55
62
  * `createPkceProvider` for the standard public-client PKCE flow; bespoke
@@ -62,6 +69,15 @@ export type AuthProvider<TAccount extends AuthAccount = AuthAccount> = {
62
69
  exchangeCode(input: ExchangeInput): Promise<ExchangeResult<TAccount>>;
63
70
  /** Skipped when `exchangeCode` already returned an `account`. */
64
71
  validateToken(input: ValidateInput): Promise<TAccount>;
72
+ /** Optional: exchange a refresh token for a fresh bundle. */
73
+ refreshToken?(input: RefreshInput): Promise<ExchangeResult<TAccount>>;
74
+ };
75
+ /** Write-side bundle for `setBundle`. Time fields are unix-epoch ms. */
76
+ export type TokenBundle = {
77
+ accessToken: string;
78
+ refreshToken?: string;
79
+ accessTokenExpiresAt?: number;
80
+ refreshTokenExpiresAt?: number;
65
81
  };
66
82
  /** Opaque account selector. Stores own the matching rule (id, email, label, …). */
67
83
  export type AccountRef = string;
@@ -86,6 +102,16 @@ export type TokenStore<TAccount extends AuthAccount = AuthAccount> = {
86
102
  } | null>;
87
103
  /** Persist `token` for `account`, replacing any previous entry. Throw `CliError` for typed failures; other thrown values become `AUTH_STORE_WRITE_FAILED`. */
88
104
  set(account: TAccount, token: string): Promise<void>;
105
+ /**
106
+ * Persist a full bundle. Optional on the contract — stores that don't
107
+ * implement it get `bundle.accessToken` via `set()` instead (cli-core
108
+ * helpers handle the fallback). Pass `promoteDefault: true` on first
109
+ * login; omit on silent refresh so a background rotation can't re-pin
110
+ * account selection.
111
+ */
112
+ setBundle?(account: TAccount, bundle: TokenBundle, options?: {
113
+ promoteDefault?: boolean;
114
+ }): Promise<void>;
89
115
  /** Remove a stored credential. No-op when `ref` doesn't match. */
90
116
  clear(ref?: AccountRef): Promise<void>;
91
117
  /** Every stored account with a default marker. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,MAAM,MAAM,WAAW,GAAG;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,IAAI;IACrE,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yFAAyF;IACzF,OAAO,CAAC,EAAE,QAAQ,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,IAAI;IACnE,8EAA8E;IAC9E,OAAO,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACrD,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1D,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;IACrE,iEAAiE;IACjE,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACzD,CAAA;AAED,mFAAmF;AACnF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAE/B;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,IAAI;IACjE;;;;;;;;OAQG;IACH,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAC9E,8JAA8J;IAC9J,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,kEAAkE;IAClE,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,kDAAkD;IAClD,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,QAAQ,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAA;IACzE,uFAAuF;IACvF,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doist/cli-core",
3
- "version": "0.16.1",
3
+ "version": "0.18.0",
4
4
  "description": "Shared core utilities for Doist CLI projects",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -66,18 +66,18 @@
66
66
  "@semantic-release/changelog": "6.0.3",
67
67
  "@semantic-release/exec": "7.1.0",
68
68
  "@semantic-release/git": "10.0.1",
69
- "@types/node": "25.6.2",
69
+ "@types/node": "25.7.0",
70
70
  "commander": "14.0.3",
71
71
  "conventional-changelog-conventionalcommits": "9.3.1",
72
72
  "lefthook": "2.1.6",
73
73
  "marked": "18.0.3",
74
74
  "marked-terminal-renderer": "2.2.0",
75
75
  "open": "11.0.0",
76
- "oxfmt": "0.48.0",
77
- "oxlint": "1.63.0",
76
+ "oxfmt": "0.49.0",
77
+ "oxlint": "1.64.0",
78
78
  "semantic-release": "25.0.3",
79
79
  "typescript": "6.0.3",
80
- "vitest": "4.1.5"
80
+ "vitest": "4.1.6"
81
81
  },
82
82
  "dependencies": {
83
83
  "chalk": "5.6.2",