@shahadpichen/docpush 1.0.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 (168) hide show
  1. package/README.md +129 -0
  2. package/dist/cli/commands/init.d.ts +2 -0
  3. package/dist/cli/commands/init.d.ts.map +1 -0
  4. package/dist/cli/commands/init.js +116 -0
  5. package/dist/cli/commands/init.js.map +1 -0
  6. package/dist/cli/commands/start.d.ts +4 -0
  7. package/dist/cli/commands/start.d.ts.map +1 -0
  8. package/dist/cli/commands/start.js +58 -0
  9. package/dist/cli/commands/start.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +22 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/core/config/index.d.ts +3 -0
  15. package/dist/core/config/index.d.ts.map +1 -0
  16. package/dist/core/config/index.js +9 -0
  17. package/dist/core/config/index.js.map +1 -0
  18. package/dist/core/config/loader.d.ts +6 -0
  19. package/dist/core/config/loader.d.ts.map +1 -0
  20. package/dist/core/config/loader.js +50 -0
  21. package/dist/core/config/loader.js.map +1 -0
  22. package/dist/core/config/schema.d.ts +134 -0
  23. package/dist/core/config/schema.d.ts.map +1 -0
  24. package/dist/core/config/schema.js +106 -0
  25. package/dist/core/config/schema.js.map +1 -0
  26. package/dist/core/errors.d.ts +45 -0
  27. package/dist/core/errors.d.ts.map +1 -0
  28. package/dist/core/errors.js +76 -0
  29. package/dist/core/errors.js.map +1 -0
  30. package/dist/core/github/client.d.ts +47 -0
  31. package/dist/core/github/client.d.ts.map +1 -0
  32. package/dist/core/github/client.js +159 -0
  33. package/dist/core/github/client.js.map +1 -0
  34. package/dist/core/github/index.d.ts +4 -0
  35. package/dist/core/github/index.d.ts.map +1 -0
  36. package/dist/core/github/index.js +9 -0
  37. package/dist/core/github/index.js.map +1 -0
  38. package/dist/core/github/retry.d.ts +15 -0
  39. package/dist/core/github/retry.d.ts.map +1 -0
  40. package/dist/core/github/retry.js +61 -0
  41. package/dist/core/github/retry.js.map +1 -0
  42. package/dist/index.d.ts +9 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +40 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/react/components/comments-panel.d.ts +14 -0
  47. package/dist/react/components/comments-panel.d.ts.map +1 -0
  48. package/dist/react/components/comments-panel.js +62 -0
  49. package/dist/react/components/comments-panel.js.map +1 -0
  50. package/dist/react/components/docs-sidebar.d.ts +13 -0
  51. package/dist/react/components/docs-sidebar.d.ts.map +1 -0
  52. package/dist/react/components/docs-sidebar.js +70 -0
  53. package/dist/react/components/docs-sidebar.js.map +1 -0
  54. package/dist/react/components/drafts-list.d.ts +18 -0
  55. package/dist/react/components/drafts-list.d.ts.map +1 -0
  56. package/dist/react/components/drafts-list.js +38 -0
  57. package/dist/react/components/drafts-list.js.map +1 -0
  58. package/dist/react/components/markdown-editor.d.ts +8 -0
  59. package/dist/react/components/markdown-editor.d.ts.map +1 -0
  60. package/dist/react/components/markdown-editor.js +59 -0
  61. package/dist/react/components/markdown-editor.js.map +1 -0
  62. package/dist/react/components/markdown-viewer.d.ts +7 -0
  63. package/dist/react/components/markdown-viewer.d.ts.map +1 -0
  64. package/dist/react/components/markdown-viewer.js +58 -0
  65. package/dist/react/components/markdown-viewer.js.map +1 -0
  66. package/dist/react/components/search-bar.d.ts +14 -0
  67. package/dist/react/components/search-bar.d.ts.map +1 -0
  68. package/dist/react/components/search-bar.js +80 -0
  69. package/dist/react/components/search-bar.js.map +1 -0
  70. package/dist/react/components/ui/badge.d.ts +10 -0
  71. package/dist/react/components/ui/badge.d.ts.map +1 -0
  72. package/dist/react/components/ui/badge.js +27 -0
  73. package/dist/react/components/ui/badge.js.map +1 -0
  74. package/dist/react/components/ui/button.d.ts +12 -0
  75. package/dist/react/components/ui/button.d.ts.map +1 -0
  76. package/dist/react/components/ui/button.js +71 -0
  77. package/dist/react/components/ui/button.js.map +1 -0
  78. package/dist/react/components/ui/card.d.ts +7 -0
  79. package/dist/react/components/ui/card.d.ts.map +1 -0
  80. package/dist/react/components/ui/card.js +52 -0
  81. package/dist/react/components/ui/card.js.map +1 -0
  82. package/dist/react/components/ui/input.d.ts +6 -0
  83. package/dist/react/components/ui/input.d.ts.map +1 -0
  84. package/dist/react/components/ui/input.js +45 -0
  85. package/dist/react/components/ui/input.js.map +1 -0
  86. package/dist/react/components/ui/scroll-area.d.ts +6 -0
  87. package/dist/react/components/ui/scroll-area.d.ts.map +1 -0
  88. package/dist/react/components/ui/scroll-area.js +48 -0
  89. package/dist/react/components/ui/scroll-area.js.map +1 -0
  90. package/dist/react/components/ui/textarea.d.ts +6 -0
  91. package/dist/react/components/ui/textarea.d.ts.map +1 -0
  92. package/dist/react/components/ui/textarea.js +45 -0
  93. package/dist/react/components/ui/textarea.js.map +1 -0
  94. package/dist/react/context/docpush-provider.d.ts +17 -0
  95. package/dist/react/context/docpush-provider.d.ts.map +1 -0
  96. package/dist/react/context/docpush-provider.js +72 -0
  97. package/dist/react/context/docpush-provider.js.map +1 -0
  98. package/dist/react/hooks/use-auth.d.ts +16 -0
  99. package/dist/react/hooks/use-auth.d.ts.map +1 -0
  100. package/dist/react/hooks/use-auth.js +72 -0
  101. package/dist/react/hooks/use-auth.js.map +1 -0
  102. package/dist/react/hooks/use-comments.d.ts +15 -0
  103. package/dist/react/hooks/use-comments.d.ts.map +1 -0
  104. package/dist/react/hooks/use-comments.js +67 -0
  105. package/dist/react/hooks/use-comments.js.map +1 -0
  106. package/dist/react/hooks/use-docs.d.ts +13 -0
  107. package/dist/react/hooks/use-docs.d.ts.map +1 -0
  108. package/dist/react/hooks/use-docs.js +69 -0
  109. package/dist/react/hooks/use-docs.js.map +1 -0
  110. package/dist/react/hooks/use-drafts.d.ts +25 -0
  111. package/dist/react/hooks/use-drafts.d.ts.map +1 -0
  112. package/dist/react/hooks/use-drafts.js +99 -0
  113. package/dist/react/hooks/use-drafts.js.map +1 -0
  114. package/dist/react/index.d.ts +19 -0
  115. package/dist/react/index.d.ts.map +1 -0
  116. package/dist/react/index.js +52 -0
  117. package/dist/react/index.js.map +1 -0
  118. package/dist/react/lib/utils.d.ts +3 -0
  119. package/dist/react/lib/utils.d.ts.map +1 -0
  120. package/dist/react/lib/utils.js +9 -0
  121. package/dist/react/lib/utils.js.map +1 -0
  122. package/dist/server/auth/index.d.ts +18 -0
  123. package/dist/server/auth/index.d.ts.map +1 -0
  124. package/dist/server/auth/index.js +50 -0
  125. package/dist/server/auth/index.js.map +1 -0
  126. package/dist/server/auth/magic-link.d.ts +10 -0
  127. package/dist/server/auth/magic-link.d.ts.map +1 -0
  128. package/dist/server/auth/magic-link.js +94 -0
  129. package/dist/server/auth/magic-link.js.map +1 -0
  130. package/dist/server/auth/oauth.d.ts +6 -0
  131. package/dist/server/auth/oauth.d.ts.map +1 -0
  132. package/dist/server/auth/oauth.js +90 -0
  133. package/dist/server/auth/oauth.js.map +1 -0
  134. package/dist/server/auth/public.d.ts +7 -0
  135. package/dist/server/auth/public.d.ts.map +1 -0
  136. package/dist/server/auth/public.js +43 -0
  137. package/dist/server/auth/public.js.map +1 -0
  138. package/dist/server/index.d.ts +12 -0
  139. package/dist/server/index.d.ts.map +1 -0
  140. package/dist/server/index.js +107 -0
  141. package/dist/server/index.js.map +1 -0
  142. package/dist/server/middleware/auth.d.ts +20 -0
  143. package/dist/server/middleware/auth.d.ts.map +1 -0
  144. package/dist/server/middleware/auth.js +49 -0
  145. package/dist/server/middleware/auth.js.map +1 -0
  146. package/dist/server/routes/auth.d.ts +3 -0
  147. package/dist/server/routes/auth.d.ts.map +1 -0
  148. package/dist/server/routes/auth.js +105 -0
  149. package/dist/server/routes/auth.js.map +1 -0
  150. package/dist/server/routes/docs.d.ts +3 -0
  151. package/dist/server/routes/docs.d.ts.map +1 -0
  152. package/dist/server/routes/docs.js +58 -0
  153. package/dist/server/routes/docs.js.map +1 -0
  154. package/dist/server/routes/drafts.d.ts +3 -0
  155. package/dist/server/routes/drafts.d.ts.map +1 -0
  156. package/dist/server/routes/drafts.js +264 -0
  157. package/dist/server/routes/drafts.js.map +1 -0
  158. package/dist/server/routes/index.d.ts +4 -0
  159. package/dist/server/routes/index.d.ts.map +1 -0
  160. package/dist/server/routes/index.js +13 -0
  161. package/dist/server/routes/index.js.map +1 -0
  162. package/dist/server/storage/index.d.ts +40 -0
  163. package/dist/server/storage/index.d.ts.map +1 -0
  164. package/dist/server/storage/index.js +199 -0
  165. package/dist/server/storage/index.js.map +1 -0
  166. package/package.json +109 -0
  167. package/templates/.env.example +20 -0
  168. package/templates/docs.config.js +21 -0
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_crypto_1 = require("node:crypto");
7
+ const express_1 = __importDefault(require("express"));
8
+ const github_1 = require("../../core/github");
9
+ const auth_1 = require("../middleware/auth");
10
+ const storage_1 = require("../storage");
11
+ const router = express_1.default.Router();
12
+ /**
13
+ * GET /api/drafts
14
+ * List all drafts (optionally filtered by status)
15
+ */
16
+ router.get('/', auth_1.requireEdit, async (req, res, next) => {
17
+ try {
18
+ const status = req.query.status;
19
+ const drafts = await (0, storage_1.getDrafts)(status);
20
+ res.json({ drafts });
21
+ }
22
+ catch (error) {
23
+ next(error);
24
+ }
25
+ });
26
+ /**
27
+ * POST /api/drafts
28
+ * Create a new draft (creates Git branch)
29
+ */
30
+ router.post('/', auth_1.requireEdit, async (req, res, next) => {
31
+ try {
32
+ const config = req.config;
33
+ const { docPath, title, content } = req.body;
34
+ if (!docPath || !title) {
35
+ return res.status(400).json({ error: 'docPath and title are required' });
36
+ }
37
+ // Generate branch name
38
+ const branchName = `draft/${(0, node_crypto_1.randomUUID)().slice(0, 8)}-${docPath.replace(/[^a-z0-9]/gi, '-')}`;
39
+ // Create GitHub client
40
+ const github = new github_1.GitHubClient(process.env.GITHUB_TOKEN || '', config.github);
41
+ // Create branch on GitHub
42
+ await github.createDraftBranch(branchName);
43
+ // If content provided, commit it
44
+ if (content) {
45
+ await github.commitFile(branchName, docPath, content, `Draft: ${title}`);
46
+ }
47
+ // Get user info from session
48
+ const user = req.user;
49
+ // Save draft to storage
50
+ const draft = await (0, storage_1.createDraft)({
51
+ docPath,
52
+ branchName,
53
+ title,
54
+ authorId: user?.id || null,
55
+ authorEmail: user?.email || null,
56
+ status: 'pending',
57
+ });
58
+ res.status(201).json({ draft });
59
+ }
60
+ catch (error) {
61
+ next(error);
62
+ }
63
+ });
64
+ /**
65
+ * GET /api/drafts/:id
66
+ * Get draft details including content from Git branch
67
+ */
68
+ router.get('/:id', auth_1.requireEdit, async (req, res, next) => {
69
+ try {
70
+ const config = req.config;
71
+ const draft = await (0, storage_1.getDraft)(req.params.id);
72
+ if (!draft) {
73
+ return res.status(404).json({ error: 'Draft not found' });
74
+ }
75
+ // Get content from Git branch
76
+ const github = new github_1.GitHubClient(process.env.GITHUB_TOKEN || '', config.github);
77
+ let content = '';
78
+ try {
79
+ content = await github.getFileContent(draft.docPath, draft.branchName);
80
+ }
81
+ catch {
82
+ // File might not exist yet in draft
83
+ }
84
+ // Get comments
85
+ const comments = await (0, storage_1.getComments)(draft.id);
86
+ res.json({ draft, content, comments });
87
+ }
88
+ catch (error) {
89
+ next(error);
90
+ }
91
+ });
92
+ /**
93
+ * PUT /api/drafts/:id
94
+ * Update draft content (commits to Git branch)
95
+ */
96
+ router.put('/:id', auth_1.requireEdit, async (req, res, next) => {
97
+ try {
98
+ const config = req.config;
99
+ const { content, message } = req.body;
100
+ if (!content) {
101
+ return res.status(400).json({ error: 'content is required' });
102
+ }
103
+ const draft = await (0, storage_1.getDraft)(req.params.id);
104
+ if (!draft) {
105
+ return res.status(404).json({ error: 'Draft not found' });
106
+ }
107
+ if (draft.status !== 'pending') {
108
+ return res.status(400).json({ error: 'Cannot edit non-pending draft' });
109
+ }
110
+ // Commit to Git branch
111
+ const github = new github_1.GitHubClient(process.env.GITHUB_TOKEN || '', config.github);
112
+ await github.commitFile(draft.branchName, draft.docPath, content, message || `Update: ${draft.title}`);
113
+ // Update timestamp
114
+ const updatedDraft = await (0, storage_1.updateDraft)(draft.id, {});
115
+ res.json({ draft: updatedDraft });
116
+ }
117
+ catch (error) {
118
+ next(error);
119
+ }
120
+ });
121
+ /**
122
+ * DELETE /api/drafts/:id
123
+ * Delete a draft (deletes Git branch)
124
+ */
125
+ router.delete('/:id', auth_1.requireEdit, async (req, res, next) => {
126
+ try {
127
+ const config = req.config;
128
+ const draft = await (0, storage_1.getDraft)(req.params.id);
129
+ if (!draft) {
130
+ return res.status(404).json({ error: 'Draft not found' });
131
+ }
132
+ // Delete Git branch
133
+ const github = new github_1.GitHubClient(process.env.GITHUB_TOKEN || '', config.github);
134
+ try {
135
+ await github.deleteBranch(draft.branchName);
136
+ }
137
+ catch {
138
+ // Branch might already be deleted
139
+ }
140
+ // Delete from storage
141
+ await (0, storage_1.deleteDraft)(draft.id);
142
+ res.json({ success: true });
143
+ }
144
+ catch (error) {
145
+ next(error);
146
+ }
147
+ });
148
+ /**
149
+ * POST /api/drafts/:id/approve
150
+ * Approve draft (creates PR, merges, deletes branch)
151
+ */
152
+ router.post('/:id/approve', auth_1.requireAdmin, async (req, res, next) => {
153
+ try {
154
+ const config = req.config;
155
+ const draft = await (0, storage_1.getDraft)(req.params.id);
156
+ if (!draft) {
157
+ return res.status(404).json({ error: 'Draft not found' });
158
+ }
159
+ if (draft.status !== 'pending') {
160
+ return res.status(400).json({ error: 'Draft is not pending' });
161
+ }
162
+ const github = new github_1.GitHubClient(process.env.GITHUB_TOKEN || '', config.github);
163
+ // Create and merge PR
164
+ const prNumber = await github.createPullRequest(draft.branchName, `Docs: ${draft.title}`, `Approved documentation update for \`${draft.docPath}\``);
165
+ await github.mergePullRequest(prNumber);
166
+ // Delete branch
167
+ await github.deleteBranch(draft.branchName);
168
+ // Update status
169
+ const updatedDraft = await (0, storage_1.updateDraft)(draft.id, { status: 'approved' });
170
+ res.json({ draft: updatedDraft, prNumber });
171
+ }
172
+ catch (error) {
173
+ next(error);
174
+ }
175
+ });
176
+ /**
177
+ * POST /api/drafts/:id/reject
178
+ * Reject draft (deletes branch)
179
+ */
180
+ router.post('/:id/reject', auth_1.requireAdmin, async (req, res, next) => {
181
+ try {
182
+ const config = req.config;
183
+ const { reason } = req.body;
184
+ const draft = await (0, storage_1.getDraft)(req.params.id);
185
+ if (!draft) {
186
+ return res.status(404).json({ error: 'Draft not found' });
187
+ }
188
+ if (draft.status !== 'pending') {
189
+ return res.status(400).json({ error: 'Draft is not pending' });
190
+ }
191
+ // Delete Git branch
192
+ const github = new github_1.GitHubClient(process.env.GITHUB_TOKEN || '', config.github);
193
+ try {
194
+ await github.deleteBranch(draft.branchName);
195
+ }
196
+ catch {
197
+ // Branch might already be deleted
198
+ }
199
+ // Add rejection comment if reason provided
200
+ if (reason) {
201
+ const user = req.user;
202
+ await (0, storage_1.addComment)({
203
+ draftId: draft.id,
204
+ userId: user?.id || null,
205
+ userEmail: user?.email || null,
206
+ userName: user?.name || 'Admin',
207
+ content: `Rejected: ${reason}`,
208
+ });
209
+ }
210
+ // Update status
211
+ const updatedDraft = await (0, storage_1.updateDraft)(draft.id, { status: 'rejected' });
212
+ res.json({ draft: updatedDraft });
213
+ }
214
+ catch (error) {
215
+ next(error);
216
+ }
217
+ });
218
+ /**
219
+ * GET /api/drafts/:id/comments
220
+ * Get comments for a draft
221
+ */
222
+ router.get('/:id/comments', auth_1.requireEdit, async (req, res, next) => {
223
+ try {
224
+ const draft = await (0, storage_1.getDraft)(req.params.id);
225
+ if (!draft) {
226
+ return res.status(404).json({ error: 'Draft not found' });
227
+ }
228
+ const comments = await (0, storage_1.getComments)(draft.id);
229
+ res.json({ comments });
230
+ }
231
+ catch (error) {
232
+ next(error);
233
+ }
234
+ });
235
+ /**
236
+ * POST /api/drafts/:id/comments
237
+ * Add a comment to a draft
238
+ */
239
+ router.post('/:id/comments', auth_1.requireEdit, async (req, res, next) => {
240
+ try {
241
+ const { content } = req.body;
242
+ if (!content) {
243
+ return res.status(400).json({ error: 'content is required' });
244
+ }
245
+ const draft = await (0, storage_1.getDraft)(req.params.id);
246
+ if (!draft) {
247
+ return res.status(404).json({ error: 'Draft not found' });
248
+ }
249
+ const user = req.user;
250
+ const comment = await (0, storage_1.addComment)({
251
+ draftId: draft.id,
252
+ userId: user?.id || null,
253
+ userEmail: user?.email || null,
254
+ userName: user?.name || 'Anonymous',
255
+ content,
256
+ });
257
+ res.status(201).json({ comment });
258
+ }
259
+ catch (error) {
260
+ next(error);
261
+ }
262
+ });
263
+ exports.default = router;
264
+ //# sourceMappingURL=drafts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drafts.js","sourceRoot":"","sources":["../../../src/server/routes/drafts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { default as authRoutes } from './auth';
2
+ export { default as draftsRoutes } from './drafts';
3
+ export { default as docsRoutes } from './docs';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.docsRoutes = exports.draftsRoutes = exports.authRoutes = void 0;
7
+ var auth_1 = require("./auth");
8
+ Object.defineProperty(exports, "authRoutes", { enumerable: true, get: function () { return __importDefault(auth_1).default; } });
9
+ var drafts_1 = require("./drafts");
10
+ Object.defineProperty(exports, "draftsRoutes", { enumerable: true, get: function () { return __importDefault(drafts_1).default; } });
11
+ var docs_1 = require("./docs");
12
+ Object.defineProperty(exports, "docsRoutes", { enumerable: true, get: function () { return __importDefault(docs_1).default; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/routes/index.ts"],"names":[],"mappings":";;;;;;AAAA,+BAA+C;AAAtC,mHAAA,OAAO,OAAc;AAC9B,mCAAmD;AAA1C,uHAAA,OAAO,OAAgB;AAChC,+BAA+C;AAAtC,mHAAA,OAAO,OAAc"}
@@ -0,0 +1,40 @@
1
+ export interface Draft {
2
+ id: string;
3
+ docPath: string;
4
+ branchName: string;
5
+ title: string;
6
+ authorId: string | null;
7
+ authorEmail: string | null;
8
+ status: 'pending' | 'approved' | 'rejected';
9
+ createdAt: number;
10
+ updatedAt: number;
11
+ }
12
+ export interface DraftComment {
13
+ id: string;
14
+ draftId: string;
15
+ userId: string | null;
16
+ userEmail: string | null;
17
+ userName: string | null;
18
+ content: string;
19
+ createdAt: number;
20
+ }
21
+ export declare function generateId(): string;
22
+ export declare function now(): number;
23
+ export declare function getDrafts(status?: string): Promise<Draft[]>;
24
+ export declare function getDraft(id: string): Promise<Draft | null>;
25
+ export declare function createDraft(draft: Omit<Draft, 'id' | 'createdAt' | 'updatedAt'>): Promise<Draft>;
26
+ export declare function updateDraft(id: string, updates: Partial<Draft>): Promise<Draft | null>;
27
+ export declare function deleteDraft(id: string): Promise<boolean>;
28
+ export declare function getComments(draftId: string): Promise<DraftComment[]>;
29
+ export declare function addComment(comment: Omit<DraftComment, 'id' | 'createdAt'>): Promise<DraftComment>;
30
+ export declare function createSession(userId: string, email: string, name?: string): Promise<string>;
31
+ export declare function getSession(token: string): Promise<{
32
+ userId: string;
33
+ email: string;
34
+ name?: string;
35
+ } | null>;
36
+ export declare function deleteSession(token: string): Promise<void>;
37
+ export declare function createMagicLink(email: string): Promise<string>;
38
+ export declare function verifyMagicLink(token: string): Promise<string | null>;
39
+ export declare function cleanupExpired(): Promise<void>;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/storage/index.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAwDD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAGD,wBAAsB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAMjE;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAGhE;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GACnD,OAAO,CAAC,KAAK,CAAC,CAWhB;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAY5F;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU9D;AAGD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAG1E;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,CAAC,GAC9C,OAAO,CAAC,YAAY,CAAC,CAUvB;AAGD,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWjG;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAOlE;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;AAGD,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUpE;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAa3E;AAGD,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBpD"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateId = generateId;
7
+ exports.now = now;
8
+ exports.getDrafts = getDrafts;
9
+ exports.getDraft = getDraft;
10
+ exports.createDraft = createDraft;
11
+ exports.updateDraft = updateDraft;
12
+ exports.deleteDraft = deleteDraft;
13
+ exports.getComments = getComments;
14
+ exports.addComment = addComment;
15
+ exports.createSession = createSession;
16
+ exports.getSession = getSession;
17
+ exports.deleteSession = deleteSession;
18
+ exports.createMagicLink = createMagicLink;
19
+ exports.verifyMagicLink = verifyMagicLink;
20
+ exports.cleanupExpired = cleanupExpired;
21
+ const node_crypto_1 = require("node:crypto");
22
+ const node_path_1 = __importDefault(require("node:path"));
23
+ const fs_extra_1 = __importDefault(require("fs-extra"));
24
+ const DATA_DIR = '.docpush';
25
+ const DRAFTS_FILE = 'drafts.json';
26
+ const SESSIONS_FILE = 'sessions.json';
27
+ // Ensure data directory exists
28
+ async function ensureDataDir() {
29
+ const dataDir = node_path_1.default.join(process.cwd(), DATA_DIR);
30
+ await fs_extra_1.default.ensureDir(dataDir);
31
+ return dataDir;
32
+ }
33
+ // Drafts storage
34
+ async function loadDraftsData() {
35
+ const dataDir = await ensureDataDir();
36
+ const filePath = node_path_1.default.join(dataDir, DRAFTS_FILE);
37
+ if (await fs_extra_1.default.pathExists(filePath)) {
38
+ return fs_extra_1.default.readJson(filePath);
39
+ }
40
+ return { drafts: [], comments: [] };
41
+ }
42
+ async function saveDraftsData(data) {
43
+ const dataDir = await ensureDataDir();
44
+ const filePath = node_path_1.default.join(dataDir, DRAFTS_FILE);
45
+ await fs_extra_1.default.writeJson(filePath, data, { spaces: 2 });
46
+ }
47
+ // Sessions storage
48
+ async function loadSessionsData() {
49
+ const dataDir = await ensureDataDir();
50
+ const filePath = node_path_1.default.join(dataDir, SESSIONS_FILE);
51
+ if (await fs_extra_1.default.pathExists(filePath)) {
52
+ return fs_extra_1.default.readJson(filePath);
53
+ }
54
+ return { sessions: {}, magicLinks: {} };
55
+ }
56
+ async function saveSessionsData(data) {
57
+ const dataDir = await ensureDataDir();
58
+ const filePath = node_path_1.default.join(dataDir, SESSIONS_FILE);
59
+ await fs_extra_1.default.writeJson(filePath, data, { spaces: 2 });
60
+ }
61
+ // Helper functions
62
+ function generateId() {
63
+ return (0, node_crypto_1.randomUUID)();
64
+ }
65
+ function now() {
66
+ return Math.floor(Date.now() / 1000);
67
+ }
68
+ // Draft operations
69
+ async function getDrafts(status) {
70
+ const data = await loadDraftsData();
71
+ if (status) {
72
+ return data.drafts.filter((d) => d.status === status);
73
+ }
74
+ return data.drafts;
75
+ }
76
+ async function getDraft(id) {
77
+ const data = await loadDraftsData();
78
+ return data.drafts.find((d) => d.id === id) || null;
79
+ }
80
+ async function createDraft(draft) {
81
+ const data = await loadDraftsData();
82
+ const newDraft = {
83
+ ...draft,
84
+ id: generateId(),
85
+ createdAt: now(),
86
+ updatedAt: now(),
87
+ };
88
+ data.drafts.push(newDraft);
89
+ await saveDraftsData(data);
90
+ return newDraft;
91
+ }
92
+ async function updateDraft(id, updates) {
93
+ const data = await loadDraftsData();
94
+ const index = data.drafts.findIndex((d) => d.id === id);
95
+ if (index === -1)
96
+ return null;
97
+ data.drafts[index] = {
98
+ ...data.drafts[index],
99
+ ...updates,
100
+ updatedAt: now(),
101
+ };
102
+ await saveDraftsData(data);
103
+ return data.drafts[index];
104
+ }
105
+ async function deleteDraft(id) {
106
+ const data = await loadDraftsData();
107
+ const index = data.drafts.findIndex((d) => d.id === id);
108
+ if (index === -1)
109
+ return false;
110
+ data.drafts.splice(index, 1);
111
+ // Also delete comments for this draft
112
+ data.comments = data.comments.filter((c) => c.draftId !== id);
113
+ await saveDraftsData(data);
114
+ return true;
115
+ }
116
+ // Comment operations
117
+ async function getComments(draftId) {
118
+ const data = await loadDraftsData();
119
+ return data.comments.filter((c) => c.draftId === draftId);
120
+ }
121
+ async function addComment(comment) {
122
+ const data = await loadDraftsData();
123
+ const newComment = {
124
+ ...comment,
125
+ id: generateId(),
126
+ createdAt: now(),
127
+ };
128
+ data.comments.push(newComment);
129
+ await saveDraftsData(data);
130
+ return newComment;
131
+ }
132
+ // Session operations
133
+ async function createSession(userId, email, name) {
134
+ const data = await loadSessionsData();
135
+ const token = generateId();
136
+ data.sessions[token] = {
137
+ userId,
138
+ email,
139
+ name,
140
+ expiresAt: now() + 86400, // 24 hours
141
+ };
142
+ await saveSessionsData(data);
143
+ return token;
144
+ }
145
+ async function getSession(token) {
146
+ const data = await loadSessionsData();
147
+ const session = data.sessions[token];
148
+ if (!session || session.expiresAt < now()) {
149
+ return null;
150
+ }
151
+ return { userId: session.userId, email: session.email, name: session.name };
152
+ }
153
+ async function deleteSession(token) {
154
+ const data = await loadSessionsData();
155
+ delete data.sessions[token];
156
+ await saveSessionsData(data);
157
+ }
158
+ // Magic link operations
159
+ async function createMagicLink(email) {
160
+ const data = await loadSessionsData();
161
+ const token = generateId();
162
+ data.magicLinks[token] = {
163
+ email,
164
+ expiresAt: now() + 900, // 15 minutes
165
+ used: false,
166
+ };
167
+ await saveSessionsData(data);
168
+ return token;
169
+ }
170
+ async function verifyMagicLink(token) {
171
+ const data = await loadSessionsData();
172
+ const link = data.magicLinks[token];
173
+ if (!link || link.used || link.expiresAt < now()) {
174
+ return null;
175
+ }
176
+ // Mark as used
177
+ data.magicLinks[token].used = true;
178
+ await saveSessionsData(data);
179
+ return link.email;
180
+ }
181
+ // Cleanup expired data
182
+ async function cleanupExpired() {
183
+ const sessionsData = await loadSessionsData();
184
+ const currentTime = now();
185
+ // Clean expired sessions
186
+ for (const token of Object.keys(sessionsData.sessions)) {
187
+ if (sessionsData.sessions[token].expiresAt < currentTime) {
188
+ delete sessionsData.sessions[token];
189
+ }
190
+ }
191
+ // Clean expired magic links
192
+ for (const token of Object.keys(sessionsData.magicLinks)) {
193
+ if (sessionsData.magicLinks[token].expiresAt < currentTime) {
194
+ delete sessionsData.magicLinks[token];
195
+ }
196
+ }
197
+ await saveSessionsData(sessionsData);
198
+ }
199
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/storage/index.ts"],"names":[],"mappings":"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"}