@fatagnus/convex-feedback 0.2.7 → 0.2.9

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 (98) hide show
  1. package/README.md +346 -4
  2. package/dist/convex/_generated/api.d.ts +2310 -0
  3. package/dist/convex/_generated/api.d.ts.map +1 -0
  4. package/dist/convex/_generated/api.js +32 -0
  5. package/dist/convex/_generated/api.js.map +1 -0
  6. package/dist/convex/_generated/dataModel.d.ts +46 -0
  7. package/dist/convex/_generated/dataModel.d.ts.map +1 -0
  8. package/dist/convex/_generated/dataModel.js +11 -0
  9. package/dist/convex/_generated/dataModel.js.map +1 -0
  10. package/dist/convex/_generated/server.d.ts +121 -0
  11. package/dist/convex/_generated/server.d.ts.map +1 -0
  12. package/dist/convex/_generated/server.js +78 -0
  13. package/dist/convex/_generated/server.js.map +1 -0
  14. package/dist/convex/agents/bugReportAgent.d.ts +35 -9
  15. package/dist/convex/agents/bugReportAgent.d.ts.map +1 -1
  16. package/dist/convex/agents/bugReportAgent.js +61 -27
  17. package/dist/convex/agents/bugReportAgent.js.map +1 -1
  18. package/dist/convex/agents/feedbackAgent.d.ts +35 -9
  19. package/dist/convex/agents/feedbackAgent.d.ts.map +1 -1
  20. package/dist/convex/agents/feedbackAgent.js +61 -27
  21. package/dist/convex/agents/feedbackAgent.js.map +1 -1
  22. package/dist/convex/agents/feedbackInterviewAgent.d.ts +76 -0
  23. package/dist/convex/agents/feedbackInterviewAgent.d.ts.map +1 -0
  24. package/dist/convex/agents/feedbackInterviewAgent.js +812 -0
  25. package/dist/convex/agents/feedbackInterviewAgent.js.map +1 -0
  26. package/dist/convex/agents/index.d.ts +9 -0
  27. package/dist/convex/agents/index.d.ts.map +1 -0
  28. package/dist/convex/agents/index.js +13 -0
  29. package/dist/convex/agents/index.js.map +1 -0
  30. package/dist/convex/apiKeys.d.ts +56 -0
  31. package/dist/convex/apiKeys.d.ts.map +1 -0
  32. package/dist/convex/apiKeys.js +197 -0
  33. package/dist/convex/apiKeys.js.map +1 -0
  34. package/dist/convex/bugReports.d.ts +131 -11
  35. package/dist/convex/bugReports.d.ts.map +1 -1
  36. package/dist/convex/bugReports.js +138 -10
  37. package/dist/convex/bugReports.js.map +1 -1
  38. package/dist/convex/emails/bugReportEmails.d.ts +31 -2
  39. package/dist/convex/emails/bugReportEmails.d.ts.map +1 -1
  40. package/dist/convex/emails/bugReportEmails.js +6 -3
  41. package/dist/convex/emails/bugReportEmails.js.map +1 -1
  42. package/dist/convex/emails/feedbackEmails.d.ts +31 -2
  43. package/dist/convex/emails/feedbackEmails.d.ts.map +1 -1
  44. package/dist/convex/emails/feedbackEmails.js +6 -3
  45. package/dist/convex/emails/feedbackEmails.js.map +1 -1
  46. package/dist/convex/feedback.d.ts +132 -11
  47. package/dist/convex/feedback.d.ts.map +1 -1
  48. package/dist/convex/feedback.js +146 -9
  49. package/dist/convex/feedback.js.map +1 -1
  50. package/dist/convex/http.d.ts +39 -0
  51. package/dist/convex/http.d.ts.map +1 -0
  52. package/dist/convex/http.js +467 -0
  53. package/dist/convex/http.js.map +1 -0
  54. package/dist/convex/index.d.ts +8 -1
  55. package/dist/convex/index.d.ts.map +1 -1
  56. package/dist/convex/index.js +8 -1
  57. package/dist/convex/index.js.map +1 -1
  58. package/dist/convex/inputRequests.d.ts +118 -0
  59. package/dist/convex/inputRequests.d.ts.map +1 -0
  60. package/dist/convex/inputRequests.js +141 -0
  61. package/dist/convex/inputRequests.js.map +1 -0
  62. package/dist/convex/prompts.d.ts +110 -0
  63. package/dist/convex/prompts.d.ts.map +1 -0
  64. package/dist/convex/prompts.js +403 -0
  65. package/dist/convex/prompts.js.map +1 -0
  66. package/dist/convex/schema.d.ts +310 -54
  67. package/dist/convex/schema.d.ts.map +1 -1
  68. package/dist/convex/schema.js +120 -2
  69. package/dist/convex/schema.js.map +1 -1
  70. package/dist/convex/supportTeams.d.ts +69 -7
  71. package/dist/convex/supportTeams.d.ts.map +1 -1
  72. package/dist/index.d.ts +28 -2
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +25 -2
  75. package/dist/index.js.map +1 -1
  76. package/dist/types.d.ts +35 -0
  77. package/dist/types.d.ts.map +1 -1
  78. package/package.json +12 -5
  79. package/src/convex/_generated/api.ts +1 -0
  80. package/src/convex/agents/feedbackInterviewAgent.ts +6 -12
  81. package/src/convex/apiKeys.test.ts +79 -0
  82. package/src/convex/apiKeys.ts +223 -0
  83. package/src/convex/bugReports.ts +126 -1
  84. package/src/convex/feedback.ts +134 -1
  85. package/src/convex/http.test.ts +76 -0
  86. package/src/convex/http.ts +630 -0
  87. package/src/convex/index.ts +11 -0
  88. package/src/convex/prompts.test.ts +185 -0
  89. package/src/convex/prompts.ts +605 -0
  90. package/src/convex/schema.ts +52 -2
  91. package/src/convex/ticketNumbers.ts +4 -0
  92. package/src/convex/tsconfig.json +24 -0
  93. package/src/index.ts +33 -1
  94. package/src/types.ts +38 -0
  95. package/dist/convex/convex.config.d.ts +0 -3
  96. package/dist/convex/convex.config.d.ts.map +0 -1
  97. package/dist/convex/convex.config.js +0 -6
  98. package/dist/convex/convex.config.js.map +0 -1
@@ -0,0 +1,467 @@
1
+ import { httpRouter } from "convex/server";
2
+ import { httpAction } from "./_generated/server";
3
+ import { internal } from "./_generated/api";
4
+ import { generateBugPrompt, generateFeedbackPrompt } from "./prompts";
5
+ /**
6
+ * Validate API key from Authorization header
7
+ */
8
+ async function validateApiKey(ctx, authHeader) {
9
+ if (!authHeader) {
10
+ return false;
11
+ }
12
+ // Expect: "Bearer fb_xxxxx"
13
+ const match = authHeader.match(/^Bearer\s+(.+)$/i);
14
+ if (!match) {
15
+ return false;
16
+ }
17
+ const key = match[1];
18
+ return (await ctx.runQuery(internal.apiKeys.validateKey, { key }));
19
+ }
20
+ /**
21
+ * Parse template from query string
22
+ */
23
+ function parseTemplate(url) {
24
+ const template = url.searchParams.get("template");
25
+ if (template === "fix" || template === "implement" || template === "analyze" || template === "codebuff") {
26
+ return template;
27
+ }
28
+ // Return undefined to let the caller decide the default
29
+ return "fix";
30
+ }
31
+ /**
32
+ * Register all feedback HTTP routes on the provided router.
33
+ *
34
+ * This allows consumer apps to integrate the feedback API into their own HTTP router.
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * // In your app's convex/http.ts:
39
+ * import { httpRouter } from "convex/server";
40
+ * import { registerFeedbackRoutes } from "@convex-dev/feedback/convex";
41
+ *
42
+ * const http = httpRouter();
43
+ *
44
+ * // Register feedback routes with optional prefix
45
+ * registerFeedbackRoutes(http, { pathPrefix: "/feedback" });
46
+ *
47
+ * // Your other routes...
48
+ * http.route({ path: "/api/health", method: "GET", handler: ... });
49
+ *
50
+ * export default http;
51
+ * ```
52
+ *
53
+ * Registered routes:
54
+ * - GET {prefix}/api/prompt/{ticketNumber} - Fetch AI prompt for a ticket
55
+ * - GET {prefix}/api/items - List bug reports and feedback
56
+ * - GET {prefix}/api/items/{ticketNumber} - Get a single item
57
+ * - PATCH {prefix}/api/items/{ticketNumber}/status - Update item status
58
+ * - PATCH {prefix}/api/items/{ticketNumber}/archive - Archive/unarchive item
59
+ *
60
+ * @param router - The HttpRouter to register routes on
61
+ * @param options - Optional configuration
62
+ */
63
+ export function registerFeedbackRoutes(router, options = {}) {
64
+ const prefix = options.pathPrefix ?? "";
65
+ // GET /api/prompt/{ticketNumber}
66
+ router.route({
67
+ path: `${prefix}/api/prompt/{ticketNumber}`,
68
+ method: "GET",
69
+ handler: httpAction(async (ctx, request) => {
70
+ // Validate API key
71
+ const authHeader = request.headers.get("Authorization");
72
+ const isValid = await validateApiKey(ctx, authHeader);
73
+ if (!isValid) {
74
+ return new Response(JSON.stringify({ error: "Unauthorized", message: "Invalid or missing API key" }), {
75
+ status: 401,
76
+ headers: { "Content-Type": "application/json" },
77
+ });
78
+ }
79
+ // Extract ticket number from URL
80
+ const url = new URL(request.url);
81
+ const pathParts = url.pathname.split("/");
82
+ const ticketNumber = pathParts[pathParts.length - 1]?.toUpperCase();
83
+ if (!ticketNumber) {
84
+ return new Response(JSON.stringify({ error: "Bad request", message: "Missing ticket number" }), {
85
+ status: 400,
86
+ headers: { "Content-Type": "application/json" },
87
+ });
88
+ }
89
+ const template = parseTemplate(url);
90
+ const isBug = ticketNumber.startsWith("BUG-");
91
+ const isFeedback = ticketNumber.startsWith("FB-");
92
+ if (!isBug && !isFeedback) {
93
+ return new Response(JSON.stringify({ error: "Bad request", message: "Invalid ticket number format" }), {
94
+ status: 400,
95
+ headers: { "Content-Type": "application/json" },
96
+ });
97
+ }
98
+ if (isBug) {
99
+ const bug = await ctx.runQuery(internal.prompts.getBugByTicketNumber, { ticketNumber });
100
+ if (!bug) {
101
+ return new Response(JSON.stringify({ error: "Not found", message: `Bug report ${ticketNumber} not found` }), {
102
+ status: 404,
103
+ headers: { "Content-Type": "application/json" },
104
+ });
105
+ }
106
+ const prompt = generateBugPrompt({
107
+ ticketNumber: bug.ticketNumber,
108
+ title: bug.title,
109
+ description: bug.description,
110
+ severity: bug.severity,
111
+ url: bug.url,
112
+ route: bug.route,
113
+ browserInfo: bug.browserInfo,
114
+ consoleErrors: bug.consoleErrors,
115
+ viewportWidth: bug.viewportWidth,
116
+ viewportHeight: bug.viewportHeight,
117
+ aiSummary: bug.aiSummary,
118
+ aiRootCauseAnalysis: bug.aiRootCauseAnalysis,
119
+ aiReproductionSteps: bug.aiReproductionSteps,
120
+ aiSuggestedFix: bug.aiSuggestedFix,
121
+ aiEstimatedEffort: bug.aiEstimatedEffort,
122
+ createdAt: bug.createdAt,
123
+ }, template);
124
+ return new Response(JSON.stringify({
125
+ ticketNumber: bug.ticketNumber,
126
+ type: "bug",
127
+ template,
128
+ prompt,
129
+ }), {
130
+ status: 200,
131
+ headers: { "Content-Type": "application/json" },
132
+ });
133
+ }
134
+ // Feedback
135
+ const feedback = await ctx.runQuery(internal.prompts.getFeedbackByTicketNumber, { ticketNumber });
136
+ if (!feedback) {
137
+ return new Response(JSON.stringify({ error: "Not found", message: `Feedback ${ticketNumber} not found` }), {
138
+ status: 404,
139
+ headers: { "Content-Type": "application/json" },
140
+ });
141
+ }
142
+ // For feedback, default to "implement" instead of "fix"
143
+ const feedbackTemplate = template === "fix" && !url.searchParams.has("template") ? "implement" : template;
144
+ const prompt = generateFeedbackPrompt({
145
+ ticketNumber: feedback.ticketNumber,
146
+ type: feedback.type,
147
+ title: feedback.title,
148
+ description: feedback.description,
149
+ priority: feedback.priority,
150
+ url: feedback.url,
151
+ route: feedback.route,
152
+ aiSummary: feedback.aiSummary,
153
+ aiImpactAnalysis: feedback.aiImpactAnalysis,
154
+ aiActionItems: feedback.aiActionItems,
155
+ aiEstimatedEffort: feedback.aiEstimatedEffort,
156
+ createdAt: feedback.createdAt,
157
+ }, feedbackTemplate);
158
+ return new Response(JSON.stringify({
159
+ ticketNumber: feedback.ticketNumber,
160
+ type: "feedback",
161
+ template: feedbackTemplate,
162
+ prompt,
163
+ }), {
164
+ status: 200,
165
+ headers: { "Content-Type": "application/json" },
166
+ });
167
+ }),
168
+ });
169
+ // GET /api/items/{ticketNumber}
170
+ /**
171
+ * GET /api/items/{ticketNumber}
172
+ *
173
+ * Fetch a single bug report or feedback item by ticket number.
174
+ *
175
+ * Path params:
176
+ * - ticketNumber: e.g., "BUG-2025-0001" or "FB-2025-0001"
177
+ *
178
+ * Headers:
179
+ * - Authorization: Bearer <api-key>
180
+ *
181
+ * Returns:
182
+ * - 200: Full item data
183
+ * - 400: { error: "Bad request" }
184
+ * - 401: { error: "Unauthorized" }
185
+ * - 404: { error: "Not found" }
186
+ */
187
+ router.route({
188
+ path: `${prefix}/api/items/{ticketNumber}`,
189
+ method: "GET",
190
+ handler: httpAction(async (ctx, request) => {
191
+ const authHeader = request.headers.get("Authorization");
192
+ const isValid = await validateApiKey(ctx, authHeader);
193
+ if (!isValid) {
194
+ return new Response(JSON.stringify({ error: "Unauthorized", message: "Invalid or missing API key" }), { status: 401, headers: { "Content-Type": "application/json" } });
195
+ }
196
+ // Extract ticket number from URL
197
+ const url = new URL(request.url);
198
+ const pathParts = url.pathname.split("/");
199
+ const ticketNumber = pathParts[pathParts.length - 1]?.toUpperCase();
200
+ if (!ticketNumber) {
201
+ return new Response(JSON.stringify({ error: "Bad request", message: "Missing ticket number" }), { status: 400, headers: { "Content-Type": "application/json" } });
202
+ }
203
+ const isBug = ticketNumber.startsWith("BUG-");
204
+ const isFeedback = ticketNumber.startsWith("FB-");
205
+ if (!isBug && !isFeedback) {
206
+ return new Response(JSON.stringify({ error: "Bad request", message: "Invalid ticket number format. Expected BUG-YYYY-NNNN or FB-YYYY-NNNN" }), { status: 400, headers: { "Content-Type": "application/json" } });
207
+ }
208
+ if (isBug) {
209
+ const bug = await ctx.runQuery(internal.prompts.getBugByTicketNumber, { ticketNumber });
210
+ if (!bug) {
211
+ return new Response(JSON.stringify({ error: "Not found", message: `Bug report ${ticketNumber} not found` }), { status: 404, headers: { "Content-Type": "application/json" } });
212
+ }
213
+ return new Response(JSON.stringify({ type: "bug", ...bug }), { status: 200, headers: { "Content-Type": "application/json" } });
214
+ }
215
+ // Feedback
216
+ const feedback = await ctx.runQuery(internal.prompts.getFeedbackByTicketNumber, { ticketNumber });
217
+ if (!feedback) {
218
+ return new Response(JSON.stringify({ error: "Not found", message: `Feedback ${ticketNumber} not found` }), { status: 404, headers: { "Content-Type": "application/json" } });
219
+ }
220
+ return new Response(JSON.stringify({ type: "feedback", ...feedback }), { status: 200, headers: { "Content-Type": "application/json" } });
221
+ }),
222
+ });
223
+ // GET /api/items
224
+ /**
225
+ * GET /api/items
226
+ *
227
+ * List bug reports and/or feedback items with optional filters.
228
+ *
229
+ * Query params:
230
+ * - itemType: "bug" | "feedback" | "all" (default: "all")
231
+ * - status: filter by status (bug: open|in-progress|resolved|closed, feedback: open|under_review|planned|in_progress|completed|declined)
232
+ * - severity: filter bugs by severity (low|medium|high|critical)
233
+ * - priority: filter feedback by priority (nice_to_have|important|critical)
234
+ * - type: filter feedback by type (feature_request|change_request|general)
235
+ * - limit: max items to return (default: 50)
236
+ * - includeArchived: include archived items (default: false)
237
+ *
238
+ * Headers:
239
+ * - Authorization: Bearer <api-key>
240
+ *
241
+ * Returns:
242
+ * - 200: { bugs: [...], feedback: [...] }
243
+ * - 401: { error: "Unauthorized" }
244
+ */
245
+ router.route({
246
+ path: `${prefix}/api/items`,
247
+ method: "GET",
248
+ handler: httpAction(async (ctx, request) => {
249
+ const authHeader = request.headers.get("Authorization");
250
+ const isValid = await validateApiKey(ctx, authHeader);
251
+ if (!isValid) {
252
+ return new Response(JSON.stringify({ error: "Unauthorized", message: "Invalid or missing API key" }), { status: 401, headers: { "Content-Type": "application/json" } });
253
+ }
254
+ const url = new URL(request.url);
255
+ const itemType = url.searchParams.get("itemType") ?? "all";
256
+ const status = url.searchParams.get("status");
257
+ const severity = url.searchParams.get("severity");
258
+ const priority = url.searchParams.get("priority");
259
+ const feedbackType = url.searchParams.get("type");
260
+ const limitParam = url.searchParams.get("limit");
261
+ const limit = limitParam ? parseInt(limitParam, 10) : 50;
262
+ const includeArchived = url.searchParams.get("includeArchived") === "true";
263
+ const result = {};
264
+ // Fetch bugs if requested
265
+ if (itemType === "bug" || itemType === "all") {
266
+ const bugArgs = { limit, includeArchived };
267
+ if (status && ["open", "in-progress", "resolved", "closed"].includes(status)) {
268
+ bugArgs.status = status;
269
+ }
270
+ if (severity && ["low", "medium", "high", "critical"].includes(severity)) {
271
+ bugArgs.severity = severity;
272
+ }
273
+ result.bugs = (await ctx.runQuery(internal.bugReports.listInternal, bugArgs));
274
+ }
275
+ // Fetch feedback if requested
276
+ if (itemType === "feedback" || itemType === "all") {
277
+ const feedbackArgs = { limit, includeArchived };
278
+ if (status && ["open", "under_review", "planned", "in_progress", "completed", "declined"].includes(status)) {
279
+ feedbackArgs.status = status;
280
+ }
281
+ if (priority && ["nice_to_have", "important", "critical"].includes(priority)) {
282
+ feedbackArgs.priority = priority;
283
+ }
284
+ if (feedbackType && ["feature_request", "change_request", "general"].includes(feedbackType)) {
285
+ feedbackArgs.type = feedbackType;
286
+ }
287
+ result.feedback = (await ctx.runQuery(internal.feedback.listInternal, feedbackArgs));
288
+ }
289
+ return new Response(JSON.stringify(result), {
290
+ status: 200,
291
+ headers: { "Content-Type": "application/json" },
292
+ });
293
+ }),
294
+ });
295
+ // PATCH /api/items/{ticketNumber}/status
296
+ /**
297
+ * PATCH /api/items/{ticketNumber}/status
298
+ *
299
+ * Update the status of a bug report or feedback item.
300
+ *
301
+ * Path params:
302
+ * - ticketNumber: e.g., "BUG-2025-0001" or "FB-2025-0001"
303
+ *
304
+ * Body (JSON):
305
+ * - status: new status value
306
+ * - For bugs: "open" | "in-progress" | "resolved" | "closed"
307
+ * - For feedback: "open" | "under_review" | "planned" | "in_progress" | "completed" | "declined"
308
+ *
309
+ * Headers:
310
+ * - Authorization: Bearer <api-key>
311
+ * - Content-Type: application/json
312
+ *
313
+ * Returns:
314
+ * - 200: { success: true, ticketNumber: "..." }
315
+ * - 400: { error: "Bad request" }
316
+ * - 401: { error: "Unauthorized" }
317
+ * - 404: { error: "Not found" }
318
+ */
319
+ router.route({
320
+ path: `${prefix}/api/items/{ticketNumber}/status`,
321
+ method: "PATCH",
322
+ handler: httpAction(async (ctx, request) => {
323
+ const authHeader = request.headers.get("Authorization");
324
+ const isValid = await validateApiKey(ctx, authHeader);
325
+ if (!isValid) {
326
+ return new Response(JSON.stringify({ error: "Unauthorized", message: "Invalid or missing API key" }), { status: 401, headers: { "Content-Type": "application/json" } });
327
+ }
328
+ // Extract ticket number from URL
329
+ const url = new URL(request.url);
330
+ const pathParts = url.pathname.split("/");
331
+ // Path is /api/items/{ticketNumber}/status, so ticketNumber is second to last
332
+ const ticketNumber = pathParts[pathParts.length - 2]?.toUpperCase();
333
+ if (!ticketNumber) {
334
+ return new Response(JSON.stringify({ error: "Bad request", message: "Missing ticket number" }), { status: 400, headers: { "Content-Type": "application/json" } });
335
+ }
336
+ const isBug = ticketNumber.startsWith("BUG-");
337
+ const isFeedback = ticketNumber.startsWith("FB-");
338
+ if (!isBug && !isFeedback) {
339
+ return new Response(JSON.stringify({ error: "Bad request", message: "Invalid ticket number format. Expected BUG-YYYY-NNNN or FB-YYYY-NNNN" }), { status: 400, headers: { "Content-Type": "application/json" } });
340
+ }
341
+ // Parse request body
342
+ let body;
343
+ try {
344
+ body = await request.json();
345
+ }
346
+ catch {
347
+ return new Response(JSON.stringify({ error: "Bad request", message: "Invalid JSON body" }), { status: 400, headers: { "Content-Type": "application/json" } });
348
+ }
349
+ if (!body.status) {
350
+ return new Response(JSON.stringify({ error: "Bad request", message: "Missing status in request body" }), { status: 400, headers: { "Content-Type": "application/json" } });
351
+ }
352
+ // Validate status based on type
353
+ const bugStatuses = ["open", "in-progress", "resolved", "closed"];
354
+ const feedbackStatuses = ["open", "under_review", "planned", "in_progress", "completed", "declined"];
355
+ if (isBug && !bugStatuses.includes(body.status)) {
356
+ return new Response(JSON.stringify({ error: "Bad request", message: `Invalid bug status. Expected one of: ${bugStatuses.join(", ")}` }), { status: 400, headers: { "Content-Type": "application/json" } });
357
+ }
358
+ if (isFeedback && !feedbackStatuses.includes(body.status)) {
359
+ return new Response(JSON.stringify({ error: "Bad request", message: `Invalid feedback status. Expected one of: ${feedbackStatuses.join(", ")}` }), { status: 400, headers: { "Content-Type": "application/json" } });
360
+ }
361
+ // Update the status
362
+ let result;
363
+ if (isBug) {
364
+ result = await ctx.runMutation(internal.bugReports.updateStatusByTicketNumber, {
365
+ ticketNumber,
366
+ status: body.status,
367
+ });
368
+ }
369
+ else {
370
+ result = await ctx.runMutation(internal.feedback.updateStatusByTicketNumber, {
371
+ ticketNumber,
372
+ status: body.status,
373
+ });
374
+ }
375
+ if (!result) {
376
+ return new Response(JSON.stringify({ error: "Not found", message: `Item ${ticketNumber} not found` }), { status: 404, headers: { "Content-Type": "application/json" } });
377
+ }
378
+ return new Response(JSON.stringify(result), {
379
+ status: 200,
380
+ headers: { "Content-Type": "application/json" },
381
+ });
382
+ }),
383
+ });
384
+ // PATCH /api/items/{ticketNumber}/archive
385
+ /**
386
+ * PATCH /api/items/{ticketNumber}/archive
387
+ *
388
+ * Archive or unarchive a bug report or feedback item.
389
+ *
390
+ * Path params:
391
+ * - ticketNumber: e.g., "BUG-2025-0001" or "FB-2025-0001"
392
+ *
393
+ * Body (JSON):
394
+ * - archived: boolean (true to archive, false to unarchive)
395
+ *
396
+ * Headers:
397
+ * - Authorization: Bearer <api-key>
398
+ * - Content-Type: application/json
399
+ *
400
+ * Returns:
401
+ * - 200: { success: true, ticketNumber: "...", isArchived: true/false }
402
+ * - 400: { error: "Bad request" }
403
+ * - 401: { error: "Unauthorized" }
404
+ * - 404: { error: "Not found" }
405
+ */
406
+ router.route({
407
+ path: `${prefix}/api/items/{ticketNumber}/archive`,
408
+ method: "PATCH",
409
+ handler: httpAction(async (ctx, request) => {
410
+ const authHeader = request.headers.get("Authorization");
411
+ const isValid = await validateApiKey(ctx, authHeader);
412
+ if (!isValid) {
413
+ return new Response(JSON.stringify({ error: "Unauthorized", message: "Invalid or missing API key" }), { status: 401, headers: { "Content-Type": "application/json" } });
414
+ }
415
+ // Extract ticket number from URL
416
+ const url = new URL(request.url);
417
+ const pathParts = url.pathname.split("/");
418
+ // Path is /api/items/{ticketNumber}/archive, so ticketNumber is second to last
419
+ const ticketNumber = pathParts[pathParts.length - 2]?.toUpperCase();
420
+ if (!ticketNumber) {
421
+ return new Response(JSON.stringify({ error: "Bad request", message: "Missing ticket number" }), { status: 400, headers: { "Content-Type": "application/json" } });
422
+ }
423
+ const isBug = ticketNumber.startsWith("BUG-");
424
+ const isFeedback = ticketNumber.startsWith("FB-");
425
+ if (!isBug && !isFeedback) {
426
+ return new Response(JSON.stringify({ error: "Bad request", message: "Invalid ticket number format. Expected BUG-YYYY-NNNN or FB-YYYY-NNNN" }), { status: 400, headers: { "Content-Type": "application/json" } });
427
+ }
428
+ // Parse request body
429
+ let body;
430
+ try {
431
+ body = await request.json();
432
+ }
433
+ catch {
434
+ return new Response(JSON.stringify({ error: "Bad request", message: "Invalid JSON body" }), { status: 400, headers: { "Content-Type": "application/json" } });
435
+ }
436
+ if (typeof body.archived !== "boolean") {
437
+ return new Response(JSON.stringify({ error: "Bad request", message: "Missing or invalid 'archived' boolean in request body" }), { status: 400, headers: { "Content-Type": "application/json" } });
438
+ }
439
+ // Update the archive status
440
+ let result;
441
+ if (isBug) {
442
+ result = await ctx.runMutation(internal.bugReports.setArchivedByTicketNumber, {
443
+ ticketNumber,
444
+ isArchived: body.archived,
445
+ });
446
+ }
447
+ else {
448
+ result = await ctx.runMutation(internal.feedback.setArchivedByTicketNumber, {
449
+ ticketNumber,
450
+ isArchived: body.archived,
451
+ });
452
+ }
453
+ if (!result) {
454
+ return new Response(JSON.stringify({ error: "Not found", message: `Item ${ticketNumber} not found` }), { status: 404, headers: { "Content-Type": "application/json" } });
455
+ }
456
+ return new Response(JSON.stringify(result), {
457
+ status: 200,
458
+ headers: { "Content-Type": "application/json" },
459
+ });
460
+ }),
461
+ });
462
+ }
463
+ // Create a standalone router for backwards compatibility / standalone usage
464
+ const http = httpRouter();
465
+ registerFeedbackRoutes(http);
466
+ export default http;
467
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/convex/http.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,12 @@
6
6
  export * as bugReports from './bugReports';
7
7
  export * as feedback from './feedback';
8
8
  export * as supportTeams from './supportTeams';
9
- export { bugSeverityValidator, bugStatusValidator, feedbackTypeValidator, feedbackPriorityValidator, feedbackStatusValidator, reporterTypeValidator, effortValidator, type BugSeverity, type BugStatus, type FeedbackType, type FeedbackPriority, type FeedbackStatus, type ReporterType, type Effort, } from './schema';
9
+ export * as inputRequests from './inputRequests';
10
+ export * as agents from './agents';
11
+ export * as apiKeys from './apiKeys';
12
+ export * as prompts from './prompts';
13
+ export { registerFeedbackRoutes, type RegisterFeedbackRoutesOptions } from './http';
14
+ export { bugSeverityValidator, bugStatusValidator, feedbackTypeValidator, feedbackPriorityValidator, feedbackStatusValidator, reporterTypeValidator, effortValidator, counterTypeValidator, type BugSeverity, type BugStatus, type FeedbackType, type FeedbackPriority, type FeedbackStatus, type ReporterType, type Effort, type CounterType, } from './schema';
15
+ export type { PromptTemplate } from './prompts';
16
+ export { promptTemplateValidator } from './prompts';
10
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/convex/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,MAAM,GACZ,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/convex/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAGrC,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,QAAQ,CAAC;AAGpF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,MAAM,EACX,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC"}
@@ -7,6 +7,13 @@
7
7
  export * as bugReports from './bugReports';
8
8
  export * as feedback from './feedback';
9
9
  export * as supportTeams from './supportTeams';
10
+ export * as inputRequests from './inputRequests';
11
+ export * as agents from './agents';
12
+ export * as apiKeys from './apiKeys';
13
+ export * as prompts from './prompts';
14
+ // Export HTTP route registration helper
15
+ export { registerFeedbackRoutes } from './http';
10
16
  // Re-export schema types and validators
11
- export { bugSeverityValidator, bugStatusValidator, feedbackTypeValidator, feedbackPriorityValidator, feedbackStatusValidator, reporterTypeValidator, effortValidator, } from './schema';
17
+ export { bugSeverityValidator, bugStatusValidator, feedbackTypeValidator, feedbackPriorityValidator, feedbackStatusValidator, reporterTypeValidator, effortValidator, counterTypeValidator, } from './schema';
18
+ export { promptTemplateValidator } from './prompts';
12
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/convex/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iCAAiC;AACjC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAE/C,wCAAwC;AACxC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,GAQhB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/convex/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iCAAiC;AACjC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,wCAAwC;AACxC,OAAO,EAAE,sBAAsB,EAAsC,MAAM,QAAQ,CAAC;AAEpF,wCAAwC;AACxC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GASrB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Internal mutation to create an input request (called by agent tools)
3
+ */
4
+ export declare const createRequest: import("convex/server").RegisteredMutation<"internal", {
5
+ config?: {
6
+ placeholder?: string;
7
+ fields?: {
8
+ placeholder?: string;
9
+ required: boolean;
10
+ type: string;
11
+ label: string;
12
+ name: string;
13
+ }[];
14
+ multiline?: boolean;
15
+ options?: {
16
+ description?: string;
17
+ label: string;
18
+ value: string;
19
+ }[];
20
+ };
21
+ userId?: string;
22
+ expiresInMs?: number;
23
+ inputType: "text" | "choice" | "form";
24
+ threadId: string;
25
+ toolCallId: string;
26
+ prompt: string;
27
+ agentName: string;
28
+ }, Promise<import("convex/values").GenericId<"feedbackInputRequests">>>;
29
+ /**
30
+ * Get a specific input request by ID
31
+ */
32
+ export declare const get: import("convex/server").RegisteredQuery<"public", {
33
+ requestId: import("convex/values").GenericId<"feedbackInputRequests">;
34
+ }, Promise<{
35
+ _id: import("convex/values").GenericId<"feedbackInputRequests">;
36
+ _creationTime: number;
37
+ config?: {
38
+ placeholder?: string;
39
+ fields?: {
40
+ placeholder?: string;
41
+ required: boolean;
42
+ type: string;
43
+ label: string;
44
+ name: string;
45
+ }[];
46
+ multiline?: boolean;
47
+ options?: {
48
+ description?: string;
49
+ label: string;
50
+ value: string;
51
+ }[];
52
+ };
53
+ response?: string;
54
+ respondedAt?: number;
55
+ userId?: string;
56
+ expiresAt?: number;
57
+ status: "pending" | "answered" | "expired" | "cancelled";
58
+ createdAt: number;
59
+ inputType: "text" | "choice" | "form";
60
+ threadId: string;
61
+ toolCallId: string;
62
+ prompt: string;
63
+ agentName: string;
64
+ }>>;
65
+ /**
66
+ * Get the pending input request for a thread
67
+ */
68
+ export declare const getPendingForThread: import("convex/server").RegisteredQuery<"public", {
69
+ threadId: string;
70
+ }, Promise<{
71
+ _id: import("convex/values").GenericId<"feedbackInputRequests">;
72
+ _creationTime: number;
73
+ config?: {
74
+ placeholder?: string;
75
+ fields?: {
76
+ placeholder?: string;
77
+ required: boolean;
78
+ type: string;
79
+ label: string;
80
+ name: string;
81
+ }[];
82
+ multiline?: boolean;
83
+ options?: {
84
+ description?: string;
85
+ label: string;
86
+ value: string;
87
+ }[];
88
+ };
89
+ response?: string;
90
+ respondedAt?: number;
91
+ userId?: string;
92
+ expiresAt?: number;
93
+ status: "pending" | "answered" | "expired" | "cancelled";
94
+ createdAt: number;
95
+ inputType: "text" | "choice" | "form";
96
+ threadId: string;
97
+ toolCallId: string;
98
+ prompt: string;
99
+ agentName: string;
100
+ }>>;
101
+ /**
102
+ * Submit a response to an input request
103
+ */
104
+ export declare const submitResponse: import("convex/server").RegisteredMutation<"public", {
105
+ response: string;
106
+ requestId: import("convex/values").GenericId<"feedbackInputRequests">;
107
+ }, Promise<{
108
+ success: boolean;
109
+ threadId: string;
110
+ toolCallId: string;
111
+ }>>;
112
+ /**
113
+ * Cancel a pending input request
114
+ */
115
+ export declare const cancel: import("convex/server").RegisteredMutation<"public", {
116
+ requestId: import("convex/values").GenericId<"feedbackInputRequests">;
117
+ }, Promise<any>>;
118
+ //# sourceMappingURL=inputRequests.d.ts.map