@popoverai/dotrequirements 0.23.0 → 0.24.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.
Files changed (235) hide show
  1. package/README.md +169 -22
  2. package/dist/cli.js +121 -60
  3. package/dist/codebase-to-spec/budget.d.ts +53 -0
  4. package/dist/codebase-to-spec/budget.js +80 -0
  5. package/dist/codebase-to-spec/cache.d.ts +49 -0
  6. package/dist/codebase-to-spec/cache.js +54 -0
  7. package/dist/codebase-to-spec/claude.d.ts +69 -0
  8. package/dist/codebase-to-spec/claude.js +126 -0
  9. package/dist/codebase-to-spec/compose.d.ts +49 -0
  10. package/dist/codebase-to-spec/compose.js +124 -0
  11. package/dist/codebase-to-spec/edit-loop.d.ts +54 -0
  12. package/dist/codebase-to-spec/edit-loop.js +195 -0
  13. package/dist/codebase-to-spec/editor.d.ts +54 -0
  14. package/dist/codebase-to-spec/editor.js +74 -0
  15. package/dist/codebase-to-spec/exit-codes.d.ts +40 -0
  16. package/dist/codebase-to-spec/exit-codes.js +58 -0
  17. package/dist/codebase-to-spec/fan-out.d.ts +63 -0
  18. package/dist/codebase-to-spec/fan-out.js +215 -0
  19. package/dist/codebase-to-spec/interactive.d.ts +30 -0
  20. package/dist/codebase-to-spec/interactive.js +48 -0
  21. package/dist/codebase-to-spec/outline-review-loop.d.ts +51 -0
  22. package/dist/codebase-to-spec/outline-review-loop.js +187 -0
  23. package/dist/codebase-to-spec/pack.d.ts +51 -0
  24. package/dist/codebase-to-spec/pack.js +127 -0
  25. package/dist/codebase-to-spec/planner.d.ts +41 -0
  26. package/dist/codebase-to-spec/planner.js +76 -0
  27. package/dist/codebase-to-spec/present.d.ts +94 -0
  28. package/dist/codebase-to-spec/present.js +288 -0
  29. package/dist/codebase-to-spec/progress.d.ts +33 -0
  30. package/dist/codebase-to-spec/progress.js +28 -0
  31. package/dist/codebase-to-spec/prompts/editor.d.ts +13 -0
  32. package/dist/codebase-to-spec/prompts/editor.js +57 -0
  33. package/dist/codebase-to-spec/prompts/outline-reviewer.d.ts +12 -0
  34. package/dist/codebase-to-spec/prompts/outline-reviewer.js +87 -0
  35. package/dist/codebase-to-spec/prompts/planner-initial.d.ts +11 -0
  36. package/dist/codebase-to-spec/prompts/planner-initial.js +125 -0
  37. package/dist/codebase-to-spec/prompts/planner-revise.d.ts +14 -0
  38. package/dist/codebase-to-spec/prompts/planner-revise.js +60 -0
  39. package/dist/codebase-to-spec/prompts/spec-reviewer.d.ts +16 -0
  40. package/dist/codebase-to-spec/prompts/spec-reviewer.js +96 -0
  41. package/dist/codebase-to-spec/prompts/specifier.d.ts +12 -0
  42. package/dist/codebase-to-spec/prompts/specifier.js +100 -0
  43. package/dist/codebase-to-spec/prompts/style-check.d.ts +12 -0
  44. package/dist/codebase-to-spec/prompts/style-check.js +78 -0
  45. package/dist/codebase-to-spec/schemas.d.ts +257 -0
  46. package/dist/codebase-to-spec/schemas.js +183 -0
  47. package/dist/codebase-to-spec/skill-install.d.ts +57 -0
  48. package/dist/codebase-to-spec/skill-install.js +79 -0
  49. package/dist/codebase-to-spec/slice.d.ts +49 -0
  50. package/dist/codebase-to-spec/slice.js +111 -0
  51. package/dist/codebase-to-spec/specifier.d.ts +60 -0
  52. package/dist/codebase-to-spec/specifier.js +79 -0
  53. package/dist/codebase-to-spec/style-check.d.ts +29 -0
  54. package/dist/codebase-to-spec/style-check.js +33 -0
  55. package/dist/codebase-to-spec/summary.d.ts +51 -0
  56. package/dist/codebase-to-spec/summary.js +183 -0
  57. package/dist/codebase-to-spec/validate.d.ts +46 -0
  58. package/dist/codebase-to-spec/validate.js +130 -0
  59. package/dist/commands/acceptance-test.d.ts +6 -0
  60. package/dist/commands/{browsertest.js → acceptance-test.js} +36 -29
  61. package/dist/commands/ai-setup.d.ts +5 -0
  62. package/dist/commands/ai-setup.js +441 -0
  63. package/dist/commands/codebase-to-spec/compose.d.ts +14 -0
  64. package/dist/commands/codebase-to-spec/compose.js +57 -0
  65. package/dist/commands/codebase-to-spec/edit-loop.d.ts +16 -0
  66. package/dist/commands/codebase-to-spec/edit-loop.js +83 -0
  67. package/dist/commands/codebase-to-spec/fan-out.d.ts +19 -0
  68. package/dist/commands/codebase-to-spec/fan-out.js +77 -0
  69. package/dist/commands/codebase-to-spec/index.d.ts +9 -0
  70. package/dist/commands/codebase-to-spec/index.js +135 -0
  71. package/dist/commands/codebase-to-spec/pack.d.ts +22 -0
  72. package/dist/commands/codebase-to-spec/pack.js +76 -0
  73. package/dist/commands/codebase-to-spec/plan-loop.d.ts +26 -0
  74. package/dist/commands/codebase-to-spec/plan-loop.js +105 -0
  75. package/dist/commands/codebase-to-spec/present.d.ts +21 -0
  76. package/dist/commands/codebase-to-spec/present.js +92 -0
  77. package/dist/commands/codebase-to-spec/run.d.ts +20 -0
  78. package/dist/commands/codebase-to-spec/run.js +85 -0
  79. package/dist/commands/codebase-to-spec/skill-install.d.ts +20 -0
  80. package/dist/commands/codebase-to-spec/skill-install.js +51 -0
  81. package/dist/commands/codebase-to-spec/specify-area.d.ts +18 -0
  82. package/dist/commands/codebase-to-spec/specify-area.js +82 -0
  83. package/dist/commands/codebase-to-spec/style-check.d.ts +15 -0
  84. package/dist/commands/codebase-to-spec/style-check.js +42 -0
  85. package/dist/commands/codebase-to-spec/validate.d.ts +18 -0
  86. package/dist/commands/codebase-to-spec/validate.js +38 -0
  87. package/dist/commands/create-requirement-document.d.ts +2 -0
  88. package/dist/commands/create-requirement-document.js +41 -0
  89. package/dist/commands/finalize.js +7 -7
  90. package/dist/commands/get.d.ts +2 -0
  91. package/dist/commands/get.js +55 -0
  92. package/dist/commands/init.js +132 -117
  93. package/dist/commands/link.js +27 -27
  94. package/dist/commands/list.d.ts +6 -0
  95. package/dist/commands/list.js +43 -0
  96. package/dist/commands/mcp.js +1 -1
  97. package/dist/commands/prepare.js +4 -4
  98. package/dist/commands/pull.js +116 -121
  99. package/dist/commands/push.js +106 -112
  100. package/dist/commands/report.d.ts +6 -2
  101. package/dist/commands/report.js +177 -122
  102. package/dist/commands/requirements-for.d.ts +2 -0
  103. package/dist/commands/requirements-for.js +29 -0
  104. package/dist/commands/review-test.d.ts +2 -0
  105. package/dist/commands/review-test.js +75 -0
  106. package/dist/commands/search.d.ts +6 -0
  107. package/dist/commands/search.js +39 -0
  108. package/dist/commands/style-check.d.ts +7 -0
  109. package/dist/commands/style-check.js +75 -0
  110. package/dist/commands/tests-for.d.ts +2 -0
  111. package/dist/commands/tests-for.js +80 -0
  112. package/dist/commands/validate.d.ts +6 -0
  113. package/dist/commands/validate.js +72 -0
  114. package/dist/config.js +1 -1
  115. package/dist/convex.d.ts +34 -22
  116. package/dist/convex.js +38 -22
  117. package/dist/harness/cache.d.ts +1 -5
  118. package/dist/harness/cache.js +49 -59
  119. package/dist/harness/convexReporting.d.ts +1 -1
  120. package/dist/harness/convexReporting.js +9 -7
  121. package/dist/harness/coverageCache.js +3 -3
  122. package/dist/harness/finalize.js +59 -46
  123. package/dist/harness/index.d.ts +6 -7
  124. package/dist/harness/index.js +9 -10
  125. package/dist/harness/prepare.js +6 -5
  126. package/dist/harness/requirementsLoader.d.ts +2 -2
  127. package/dist/harness/requirementsLoader.js +13 -35
  128. package/dist/harness/tracking.js +18 -18
  129. package/dist/harness/types.d.ts +1 -1
  130. package/dist/mcp/convexClient.d.ts +0 -39
  131. package/dist/mcp/convexClient.js +2 -107
  132. package/dist/mcp/handlers/authoring.d.ts +1 -1
  133. package/dist/mcp/handlers/authoring.js +30 -234
  134. package/dist/mcp/handlers/debug.d.ts +2 -3
  135. package/dist/mcp/handlers/debug.js +10 -10
  136. package/dist/mcp/handlers/get.d.ts +1 -1
  137. package/dist/mcp/handlers/get.js +11 -10
  138. package/dist/mcp/handlers/index.d.ts +20 -20
  139. package/dist/mcp/handlers/index.js +10 -10
  140. package/dist/mcp/handlers/list.d.ts +4 -33
  141. package/dist/mcp/handlers/list.js +16 -38
  142. package/dist/mcp/handlers/push.d.ts +1 -1
  143. package/dist/mcp/handlers/push.js +28 -18
  144. package/dist/mcp/handlers/report.d.ts +16 -0
  145. package/dist/mcp/handlers/report.js +134 -0
  146. package/dist/mcp/handlers/review.d.ts +1 -1
  147. package/dist/mcp/handlers/review.js +40 -59
  148. package/dist/mcp/handlers/search.d.ts +1 -1
  149. package/dist/mcp/handlers/search.js +7 -9
  150. package/dist/mcp/handlers/test-mapping.d.ts +1 -1
  151. package/dist/mcp/handlers/test-mapping.js +14 -14
  152. package/dist/mcp/handlers/types.d.ts +3 -3
  153. package/dist/mcp/handlers/types.js +2 -2
  154. package/dist/mcp/index.d.ts +1 -1
  155. package/dist/mcp/index.js +147 -167
  156. package/dist/push/core.d.ts +2 -2
  157. package/dist/push/core.js +20 -20
  158. package/dist/push/index.d.ts +1 -1
  159. package/dist/push/index.js +2 -2
  160. package/dist/requirements/cloud-ai.d.ts +57 -0
  161. package/dist/requirements/cloud-ai.js +104 -0
  162. package/dist/requirements/cloud-coverage.d.ts +41 -0
  163. package/dist/requirements/cloud-coverage.js +60 -0
  164. package/dist/requirements/coverage.d.ts +45 -0
  165. package/dist/requirements/coverage.js +114 -0
  166. package/dist/{mcp → requirements}/grep.d.ts +10 -1
  167. package/dist/{mcp → requirements}/grep.js +89 -44
  168. package/dist/{mcp/requirements.d.ts → requirements/index.d.ts} +19 -3
  169. package/dist/{mcp/requirements.js → requirements/index.js} +54 -35
  170. package/dist/requirements/style-guide.d.ts +67 -0
  171. package/dist/requirements/style-guide.js +299 -0
  172. package/dist/{mcp → requirements}/testCodeExtractor.js +24 -26
  173. package/dist/schema/browser.d.ts +8 -8
  174. package/dist/schema/browser.js +13 -15
  175. package/dist/schema/builder.d.ts +1 -1
  176. package/dist/schema/builder.js +13 -44
  177. package/dist/schema/conversions.d.ts +2 -2
  178. package/dist/schema/conversions.js +11 -11
  179. package/dist/schema/index.d.ts +9 -9
  180. package/dist/schema/index.js +15 -15
  181. package/dist/schema/parser-core.d.ts +1 -1
  182. package/dist/schema/parser-core.js +23 -22
  183. package/dist/schema/parser.d.ts +3 -3
  184. package/dist/schema/parser.js +27 -31
  185. package/dist/schema/resolver.d.ts +1 -1
  186. package/dist/schema/resolver.js +9 -9
  187. package/dist/schema/scenario.d.ts +1 -1
  188. package/dist/schema/scenario.js +1 -1
  189. package/dist/schema/schemas.d.ts +3 -3
  190. package/dist/schema/schemas.js +41 -28
  191. package/dist/schema/test-schema.js +27 -27
  192. package/dist/templates/context-file-section.md +3 -2
  193. package/dist/templates/example-requirements.js +1 -1
  194. package/dist/templates/example-requirements.ts +3 -1
  195. package/dist/templates/requirements-readme.js +1 -1
  196. package/dist/templates/requirements-readme.ts +1 -1
  197. package/dist/templates/skills/codebase-to-spec/SKILL.md +118 -0
  198. package/dist/utils/brand.js +3 -3
  199. package/dist/utils/browser-launch.js +4 -4
  200. package/dist/utils/context-file.d.ts +1 -1
  201. package/dist/utils/context-file.js +26 -26
  202. package/dist/utils/env.js +7 -7
  203. package/dist/utils/gitignore.js +7 -7
  204. package/dist/utils/oauth-callback-server.d.ts +1 -1
  205. package/dist/utils/oauth-callback-server.js +27 -25
  206. package/dist/utils/oauth-flow.js +32 -29
  207. package/dist/utils/project-discovery.d.ts +3 -3
  208. package/dist/utils/project-discovery.js +18 -17
  209. package/dist/utils/project-name.js +8 -8
  210. package/dist/utils/project-selector.d.ts +1 -1
  211. package/dist/utils/project-selector.js +24 -21
  212. package/dist/utils/project-settings.d.ts +1 -1
  213. package/dist/utils/project-settings.js +24 -22
  214. package/dist/utils/templates.js +6 -6
  215. package/package.json +3 -2
  216. package/dist/commands/browsertest.d.ts +0 -6
  217. package/dist/commands/login.d.ts +0 -12
  218. package/dist/commands/login.js +0 -117
  219. package/dist/commands/logout.d.ts +0 -5
  220. package/dist/commands/logout.js +0 -17
  221. package/dist/commands/mcp-setup.d.ts +0 -5
  222. package/dist/commands/mcp-setup.js +0 -431
  223. package/dist/commands/test.d.ts +0 -6
  224. package/dist/commands/test.js +0 -78
  225. package/dist/mcp/handlers/coverage.d.ts +0 -44
  226. package/dist/mcp/handlers/coverage.js +0 -105
  227. package/dist/mcp/types.d.ts +0 -27
  228. package/dist/mcp/types.js +0 -2
  229. package/dist/utils/local-project.d.ts +0 -31
  230. package/dist/utils/local-project.js +0 -33
  231. package/dist/utils/token-refresh.d.ts +0 -24
  232. package/dist/utils/token-refresh.js +0 -69
  233. package/dist/utils/token-storage.d.ts +0 -31
  234. package/dist/utils/token-storage.js +0 -57
  235. /package/dist/{mcp → requirements}/testCodeExtractor.d.ts +0 -0
@@ -1,27 +0,0 @@
1
- /**
2
- * Re-export shared types from CLI schema module
3
- */
4
- export type { Metadata, RequirementNode, RequirementsFile, } from '../schema/index.js';
5
- /**
6
- * Flattened requirement for search results
7
- */
8
- export interface FlattenedRequirement {
9
- id: string;
10
- rootId: string;
11
- label: string;
12
- content: string;
13
- path: string[];
14
- sourceFile: string;
15
- documentTitle: string;
16
- }
17
- /**
18
- * Test reference found in codebase
19
- */
20
- export interface TestReference {
21
- file: string;
22
- line: number;
23
- column: number;
24
- requirementId: string;
25
- context: string;
26
- }
27
- //# sourceMappingURL=types.d.ts.map
package/dist/mcp/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1,31 +0,0 @@
1
- /**
2
- * Utilities for detecting and working with local-only projects.
3
- *
4
- * Local-only projects use placeholder credentials and have no cloud features.
5
- */
6
- /**
7
- * Check if a project is local-only (no cloud features).
8
- *
9
- * Local-only projects have placeholder credentials:
10
- * - DOTREQUIREMENTS_PROJECT_ID=local
11
- * - DOTREQUIREMENTS_PROJECT_SECRET=local
12
- *
13
- * These projects can use local features (test harness, MCP local operations)
14
- * but cannot use cloud features (coverage reporting, push/pull, AI features).
15
- *
16
- * @param projectId - The project ID to check
17
- * @returns true if the project is local-only, false otherwise
18
- */
19
- export declare function isLocalOnlyProject(projectId: string | undefined): boolean;
20
- /**
21
- * Placeholder credentials for local-only projects.
22
- */
23
- export declare const LOCAL_PROJECT_CREDENTIALS: {
24
- readonly projectId: "local";
25
- readonly secret: "local";
26
- };
27
- /**
28
- * Error message for when cloud features are attempted on local-only projects.
29
- */
30
- export declare const CLOUD_FEATURES_REQUIRE_AUTH_MESSAGE = "Cloud features require authentication. Run `dotrequirements login` to enable cloud features.";
31
- //# sourceMappingURL=local-project.d.ts.map
@@ -1,33 +0,0 @@
1
- /**
2
- * Utilities for detecting and working with local-only projects.
3
- *
4
- * Local-only projects use placeholder credentials and have no cloud features.
5
- */
6
- /**
7
- * Check if a project is local-only (no cloud features).
8
- *
9
- * Local-only projects have placeholder credentials:
10
- * - DOTREQUIREMENTS_PROJECT_ID=local
11
- * - DOTREQUIREMENTS_PROJECT_SECRET=local
12
- *
13
- * These projects can use local features (test harness, MCP local operations)
14
- * but cannot use cloud features (coverage reporting, push/pull, AI features).
15
- *
16
- * @param projectId - The project ID to check
17
- * @returns true if the project is local-only, false otherwise
18
- */
19
- export function isLocalOnlyProject(projectId) {
20
- return projectId === 'local';
21
- }
22
- /**
23
- * Placeholder credentials for local-only projects.
24
- */
25
- export const LOCAL_PROJECT_CREDENTIALS = {
26
- projectId: 'local',
27
- secret: 'local',
28
- };
29
- /**
30
- * Error message for when cloud features are attempted on local-only projects.
31
- */
32
- export const CLOUD_FEATURES_REQUIRE_AUTH_MESSAGE = 'Cloud features require authentication. Run `dotrequirements login` to enable cloud features.';
33
- //# sourceMappingURL=local-project.js.map
@@ -1,24 +0,0 @@
1
- /**
2
- * Token refresh utilities for maintaining long-lived CLI sessions.
3
- *
4
- * WorkOS access tokens expire after 5 minutes, but refresh tokens can be used
5
- * to obtain new access/refresh token pairs. Refresh tokens are single-use and
6
- * get rotated on each refresh.
7
- */
8
- /**
9
- * Get a valid access token, refreshing if needed.
10
- *
11
- * This function should be called before making any authenticated Convex requests.
12
- * It checks if the current access token is expired and refreshes it if necessary.
13
- *
14
- * Returns null if no tokens are stored (user needs to login).
15
- */
16
- export declare function getValidAccessToken(): Promise<string | null>;
17
- /**
18
- * Ensure user is authenticated with a valid access token.
19
- *
20
- * Throws an error if not logged in or if token refresh fails.
21
- * Use this at the start of commands that require authentication.
22
- */
23
- export declare function requireAuth(): Promise<string>;
24
- //# sourceMappingURL=token-refresh.d.ts.map
@@ -1,69 +0,0 @@
1
- /**
2
- * Token refresh utilities for maintaining long-lived CLI sessions.
3
- *
4
- * WorkOS access tokens expire after 5 minutes, but refresh tokens can be used
5
- * to obtain new access/refresh token pairs. Refresh tokens are single-use and
6
- * get rotated on each refresh.
7
- */
8
- import { ConvexHttpClient } from 'convex/browser';
9
- import { getTokens, storeTokens, areTokensExpired } from './token-storage.js';
10
- import { getConvexUrl } from '../config.js';
11
- import { api } from '../convex.js';
12
- /**
13
- * Get a valid access token, refreshing if needed.
14
- *
15
- * This function should be called before making any authenticated Convex requests.
16
- * It checks if the current access token is expired and refreshes it if necessary.
17
- *
18
- * Returns null if no tokens are stored (user needs to login).
19
- */
20
- export async function getValidAccessToken() {
21
- const tokens = await getTokens();
22
- if (!tokens) {
23
- return null; // Not logged in
24
- }
25
- // If tokens are still valid, return current access token
26
- if (!areTokensExpired(tokens)) {
27
- return tokens.accessToken;
28
- }
29
- // Tokens expired, refresh them
30
- try {
31
- console.log('Access token expired, refreshing...');
32
- // Refresh tokens via Convex action (server-side WorkOS call)
33
- const client = new ConvexHttpClient(getConvexUrl());
34
- const result = await client.action(api.lib.authActions.refreshAccessToken, {
35
- refreshToken: tokens.refreshToken,
36
- });
37
- if (!result.success) {
38
- throw new Error(`Token refresh failed: ${result.error}`);
39
- }
40
- const { accessToken, refreshToken, expiresAt } = result;
41
- // Store new tokens (IMPORTANT: refresh token is single-use, must update)
42
- await storeTokens({
43
- accessToken,
44
- refreshToken, // New refresh token from response
45
- expiresAt,
46
- });
47
- console.log('✓ Token refreshed successfully');
48
- return accessToken;
49
- }
50
- catch (error) {
51
- console.error('Failed to refresh access token:', error);
52
- console.log('Please run "dotrequirements login" to re-authenticate.');
53
- return null;
54
- }
55
- }
56
- /**
57
- * Ensure user is authenticated with a valid access token.
58
- *
59
- * Throws an error if not logged in or if token refresh fails.
60
- * Use this at the start of commands that require authentication.
61
- */
62
- export async function requireAuth() {
63
- const accessToken = await getValidAccessToken();
64
- if (!accessToken) {
65
- throw new Error('Not authenticated. Please run "dotrequirements login" first.');
66
- }
67
- return accessToken;
68
- }
69
- //# sourceMappingURL=token-refresh.js.map
@@ -1,31 +0,0 @@
1
- /**
2
- * Token storage utilities for OAuth access tokens and refresh tokens.
3
- *
4
- * Uses file-based storage at ~/.dotrequirements/tokens.json with restricted permissions.
5
- */
6
- export interface StoredTokens {
7
- accessToken: string;
8
- refreshToken: string;
9
- expiresAt: number;
10
- }
11
- /**
12
- * Store tokens in file storage with restricted permissions
13
- */
14
- export declare function storeTokens(tokens: StoredTokens): Promise<void>;
15
- /**
16
- * Retrieve stored tokens from file
17
- */
18
- export declare function getTokens(): Promise<StoredTokens | null>;
19
- /**
20
- * Delete stored tokens
21
- */
22
- export declare function deleteTokens(): Promise<void>;
23
- /**
24
- * Check if tokens are expired
25
- */
26
- export declare function areTokensExpired(tokens: StoredTokens): boolean;
27
- /**
28
- * Check if tokens exist and are valid
29
- */
30
- export declare function hasValidTokens(): Promise<boolean>;
31
- //# sourceMappingURL=token-storage.d.ts.map
@@ -1,57 +0,0 @@
1
- /**
2
- * Token storage utilities for OAuth access tokens and refresh tokens.
3
- *
4
- * Uses file-based storage at ~/.dotrequirements/tokens.json with restricted permissions.
5
- */
6
- import * as fs from 'fs';
7
- import * as path from 'path';
8
- import * as os from 'os';
9
- const TOKEN_DIR = path.join(os.homedir(), '.dotrequirements');
10
- const TOKEN_FILE = path.join(TOKEN_DIR, 'tokens.json');
11
- /**
12
- * Store tokens in file storage with restricted permissions
13
- */
14
- export async function storeTokens(tokens) {
15
- if (!fs.existsSync(TOKEN_DIR)) {
16
- fs.mkdirSync(TOKEN_DIR, { recursive: true, mode: 0o700 });
17
- }
18
- fs.writeFileSync(TOKEN_FILE, JSON.stringify(tokens, null, 2), { mode: 0o600 });
19
- }
20
- /**
21
- * Retrieve stored tokens from file
22
- */
23
- export async function getTokens() {
24
- if (fs.existsSync(TOKEN_FILE)) {
25
- try {
26
- const content = fs.readFileSync(TOKEN_FILE, 'utf-8');
27
- return JSON.parse(content);
28
- }
29
- catch (error) {
30
- console.error('Failed to read stored tokens:', error);
31
- return null;
32
- }
33
- }
34
- return null;
35
- }
36
- /**
37
- * Delete stored tokens
38
- */
39
- export async function deleteTokens() {
40
- if (fs.existsSync(TOKEN_FILE)) {
41
- fs.unlinkSync(TOKEN_FILE);
42
- }
43
- }
44
- /**
45
- * Check if tokens are expired
46
- */
47
- export function areTokensExpired(tokens) {
48
- return Date.now() >= tokens.expiresAt;
49
- }
50
- /**
51
- * Check if tokens exist and are valid
52
- */
53
- export async function hasValidTokens() {
54
- const tokens = await getTokens();
55
- return tokens !== null && !areTokensExpired(tokens);
56
- }
57
- //# sourceMappingURL=token-storage.js.map