convex-feedback 0.1.4 → 0.2.0-beta.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 (79) hide show
  1. package/README.md +87 -27
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/client/api.d.ts +80 -1
  4. package/dist/client/api.d.ts.map +1 -1
  5. package/dist/client/config.d.ts +1 -1
  6. package/dist/client/index.d.ts +9 -5
  7. package/dist/client/index.d.ts.map +1 -1
  8. package/dist/client/index.js +261 -8
  9. package/dist/client/index.js.map +1 -1
  10. package/dist/component/_generated/api.d.ts +8 -0
  11. package/dist/component/_generated/api.d.ts.map +1 -1
  12. package/dist/component/_generated/api.js.map +1 -1
  13. package/dist/component/_generated/component.d.ts +295 -5
  14. package/dist/component/_generated/component.d.ts.map +1 -1
  15. package/dist/component/admin.d.ts +130 -0
  16. package/dist/component/admin.d.ts.map +1 -0
  17. package/dist/component/admin.js +125 -0
  18. package/dist/component/admin.js.map +1 -0
  19. package/dist/component/comments.d.ts +7 -5
  20. package/dist/component/comments.d.ts.map +1 -1
  21. package/dist/component/comments.js +4 -3
  22. package/dist/component/comments.js.map +1 -1
  23. package/dist/component/crons.d.ts +3 -0
  24. package/dist/component/crons.d.ts.map +1 -0
  25. package/dist/component/crons.js +8 -0
  26. package/dist/component/crons.js.map +1 -0
  27. package/dist/component/entries.d.ts +29 -16
  28. package/dist/component/entries.d.ts.map +1 -1
  29. package/dist/component/entries.js +136 -12
  30. package/dist/component/entries.js.map +1 -1
  31. package/dist/component/helpers.d.ts +3 -1
  32. package/dist/component/helpers.d.ts.map +1 -1
  33. package/dist/component/helpers.js +28 -0
  34. package/dist/component/helpers.js.map +1 -1
  35. package/dist/component/migrations.d.ts +11 -0
  36. package/dist/component/migrations.d.ts.map +1 -0
  37. package/dist/component/migrations.js +35 -0
  38. package/dist/component/migrations.js.map +1 -0
  39. package/dist/component/model.d.ts +144 -24
  40. package/dist/component/model.d.ts.map +1 -1
  41. package/dist/component/model.js +34 -1
  42. package/dist/component/model.js.map +1 -1
  43. package/dist/component/roadmap.d.ts +166 -0
  44. package/dist/component/roadmap.d.ts.map +1 -0
  45. package/dist/component/roadmap.js +534 -0
  46. package/dist/component/roadmap.js.map +1 -0
  47. package/dist/component/schema.d.ts +67 -5
  48. package/dist/component/schema.d.ts.map +1 -1
  49. package/dist/component/schema.js +57 -2
  50. package/dist/component/schema.js.map +1 -1
  51. package/dist/component/tags.d.ts +58 -0
  52. package/dist/component/tags.d.ts.map +1 -0
  53. package/dist/component/tags.js +216 -0
  54. package/dist/component/tags.js.map +1 -0
  55. package/dist/react/index.d.ts +173 -12
  56. package/dist/react/index.d.ts.map +1 -1
  57. package/dist/react/index.js +78 -1
  58. package/dist/react/index.js.map +1 -1
  59. package/dist/test.d.ts +67 -5
  60. package/dist/test.d.ts.map +1 -1
  61. package/package.json +6 -2
  62. package/src/client/README.md +1 -1
  63. package/src/client/api.ts +183 -0
  64. package/src/client/config.ts +1 -1
  65. package/src/client/index.ts +340 -13
  66. package/src/component/README.md +3 -1
  67. package/src/component/_generated/api.ts +8 -0
  68. package/src/component/_generated/component.ts +373 -9
  69. package/src/component/admin.ts +180 -0
  70. package/src/component/comments.ts +5 -2
  71. package/src/component/crons.ts +16 -0
  72. package/src/component/entries.ts +175 -11
  73. package/src/component/helpers.ts +44 -1
  74. package/src/component/migrations.ts +44 -0
  75. package/src/component/model.ts +79 -4
  76. package/src/component/roadmap.ts +627 -0
  77. package/src/component/schema.ts +61 -1
  78. package/src/react/README.md +2 -2
  79. package/src/react/index.ts +152 -4
@@ -1,5 +1,5 @@
1
1
  import type { FunctionReference, PaginationOptions, PaginationResult } from "convex/server";
2
- import type { CommentSort, EntryKind, EntrySort, EntryStatus, FeedbackComment, FeedbackEntry, FeedbackMetadata, SimilarEntriesResult } from "../component/model.js";
2
+ import type { CommentSort, EntryKind, EntrySort, EntryStatus, EntryStatusFilter, FeedbackComment, FeedbackEntry, FeedbackMetadata, AdminFeedbackEntry, EntryPriority, RoadmapItem, RoadmapStatus, SimilarEntriesResult } from "../component/model.js";
3
3
  /**
4
4
  * Arguments for cursor-paginated entry listing.
5
5
  */
@@ -22,6 +22,8 @@ export type ListEntriesArgs = {
22
22
  kinds?: EntryKind[];
23
23
  /** Restricts entries to this workflow status. */
24
24
  status?: EntryStatus;
25
+ /** Restricts entries to the indexed open or closed board bucket. */
26
+ statusFilter?: EntryStatusFilter;
25
27
  /**
26
28
  * Server-side ordering strategy.
27
29
  *
@@ -51,6 +53,8 @@ export type SearchEntriesArgs = {
51
53
  kinds?: EntryKind[];
52
54
  /** Optional workflow-status restriction. */
53
55
  status?: EntryStatus;
56
+ /** Optional indexed open or closed board bucket. */
57
+ statusFilter?: EntryStatusFilter;
54
58
  /**
55
59
  * Maximum number of results to return.
56
60
  *
@@ -128,6 +132,63 @@ export type SetEntryStatusArgs = {
128
132
  /** Desired workflow status. */
129
133
  status: EntryStatus;
130
134
  };
135
+ export type AdminListEntriesArgs = {
136
+ /** Convex cursor-pagination options. */
137
+ paginationOpts: PaginationOptions;
138
+ kinds?: EntryKind[];
139
+ status?: EntryStatus;
140
+ priority?: EntryPriority;
141
+ };
142
+ export type AdminSearchEntriesArgs = AdminListEntriesArgs & {
143
+ searchQuery: string;
144
+ };
145
+ export type SetEntryPriorityArgs = {
146
+ entryId: string;
147
+ priority: EntryPriority | null;
148
+ };
149
+ export type ListRoadmapArgs = {
150
+ /** Convex cursor-pagination options. */
151
+ paginationOpts: PaginationOptions;
152
+ status?: RoadmapStatus;
153
+ };
154
+ export type SearchRoadmapArgs = {
155
+ searchQuery: string;
156
+ limit?: number;
157
+ };
158
+ export type CreateRoadmapArgs = {
159
+ title: string;
160
+ description?: string;
161
+ status: RoadmapStatus;
162
+ };
163
+ export type CreateRoadmapForEntryArgs = CreateRoadmapArgs & {
164
+ entryId: string;
165
+ };
166
+ export type UpdateRoadmapArgs = {
167
+ roadmapId: string;
168
+ title: string;
169
+ description?: string;
170
+ };
171
+ export type DeleteRoadmapArgs = {
172
+ roadmapId: string;
173
+ };
174
+ export type MoveRoadmapArgs = {
175
+ roadmapId: string;
176
+ status: RoadmapStatus;
177
+ previousItemId?: string;
178
+ nextItemId?: string;
179
+ };
180
+ export type AttachFeedbackToRoadmapArgs = {
181
+ roadmapId: string;
182
+ entryId: string;
183
+ };
184
+ export type DetachFeedbackFromRoadmapArgs = {
185
+ entryId: string;
186
+ };
187
+ export type ListRoadmapFeedbackArgs = {
188
+ /** Convex cursor-pagination options. */
189
+ paginationOpts: PaginationOptions;
190
+ roadmapId: string;
191
+ };
131
192
  /**
132
193
  * Arguments for setting the current actor's entry-upvote state.
133
194
  */
@@ -243,6 +304,10 @@ export type SetCommentLikeResult = {
243
304
  * the original success-only mutation results.
244
305
  */
245
306
  export interface FeedbackPublicApi<Name extends string | undefined = string | undefined, RateLimitResult = never> {
307
+ /** Returns whether the host actor has admin permissions. */
308
+ isAdmin: FunctionReference<"query", "public", Record<string, never>, boolean, Name>;
309
+ /** Returns whether the current request has an authenticated host actor. */
310
+ isAuthenticated: FunctionReference<"query", "public", Record<string, never>, boolean, Name>;
246
311
  /** Returns a cursor-paginated entry list. */
247
312
  listEntries: FunctionReference<"query", "public", ListEntriesArgs, PaginationResult<FeedbackEntry>, Name>;
248
313
  /** Returns one entry or `null` when it does not exist. */
@@ -257,6 +322,20 @@ export interface FeedbackPublicApi<Name extends string | undefined = string | un
257
322
  updateEntry: FunctionReference<"mutation", "public", UpdateEntryArgs, null | RateLimitResult, Name>;
258
323
  /** Changes entry status, or returns a configured rate-limit rejection. */
259
324
  setEntryStatus: FunctionReference<"mutation", "public", SetEntryStatusArgs, null | RateLimitResult, Name>;
325
+ adminListEntries: FunctionReference<"query", "public", AdminListEntriesArgs, PaginationResult<AdminFeedbackEntry>, Name>;
326
+ adminGetEntry: FunctionReference<"query", "public", GetEntryArgs, AdminFeedbackEntry | null, Name>;
327
+ adminSearchEntries: FunctionReference<"query", "public", AdminSearchEntriesArgs, PaginationResult<AdminFeedbackEntry>, Name>;
328
+ setEntryPriority: FunctionReference<"mutation", "public", SetEntryPriorityArgs, null | RateLimitResult, Name>;
329
+ listRoadmap: FunctionReference<"query", "public", ListRoadmapArgs, PaginationResult<RoadmapItem>, Name>;
330
+ searchRoadmap: FunctionReference<"query", "public", SearchRoadmapArgs, RoadmapItem[], Name>;
331
+ createRoadmap: FunctionReference<"mutation", "public", CreateRoadmapArgs, string | RateLimitResult, Name>;
332
+ createRoadmapForEntry: FunctionReference<"mutation", "public", CreateRoadmapForEntryArgs, string | RateLimitResult, Name>;
333
+ updateRoadmap: FunctionReference<"mutation", "public", UpdateRoadmapArgs, null | RateLimitResult, Name>;
334
+ deleteRoadmap: FunctionReference<"mutation", "public", DeleteRoadmapArgs, null | RateLimitResult, Name>;
335
+ moveRoadmapItem: FunctionReference<"mutation", "public", MoveRoadmapArgs, number | RateLimitResult, Name>;
336
+ attachFeedbackToRoadmap: FunctionReference<"mutation", "public", AttachFeedbackToRoadmapArgs, null | RateLimitResult, Name>;
337
+ detachFeedbackFromRoadmap: FunctionReference<"mutation", "public", DetachFeedbackFromRoadmapArgs, null | RateLimitResult, Name>;
338
+ listRoadmapFeedback: FunctionReference<"query", "public", ListRoadmapFeedbackArgs, PaginationResult<FeedbackEntry>, Name>;
260
339
  /** Sets entry-upvote state, or returns a configured rate-limit rejection. */
261
340
  setEntryUpvote: FunctionReference<"mutation", "public", SetEntryUpvoteArgs, SetEntryUpvoteResult | RateLimitResult, Name>;
262
341
  /** Returns one paginated level of comments or replies. */
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ export interface FeedbackEntriesConfig {
32
32
  /**
33
33
  * Whether entry authors may edit their own title and body.
34
34
  *
35
- * Moderators are governed separately by the resolved actor permissions.
35
+ * Admins are governed separately by the resolved actor permissions.
36
36
  *
37
37
  * @default true
38
38
  */
@@ -4,7 +4,7 @@ import type { ComponentApi } from "../component/_generated/component.js";
4
4
  import { type FeedbackActor } from "../component/model.js";
5
5
  import type { FeedbackPublicApi } from "./api.js";
6
6
  import { type FeedbackConfigOverrides } from "./config.js";
7
- export type { CommentSort, EntryKind, EntrySort, EntryStatus, FeedbackActor, FeedbackComment, FeedbackEntry, FeedbackMetadata, FeedbackMetadataValue, SimilarEntriesResult, } from "../component/model.js";
7
+ export type { AdminFeedbackEntry, CommentSort, EntryKind, EntryPriority, EntrySort, EntryStatus, EntryStatusFilter, FeedbackActor, FeedbackComment, FeedbackEntry, FeedbackMetadata, FeedbackMetadataValue, RoadmapItem, RoadmapStatus, SimilarEntriesResult, } from "../component/model.js";
8
8
  export type { FeedbackPublicApi } from "./api.js";
9
9
  export { createFeedbackConfig, defaultFeedbackConfig, type FeedbackConfig, type FeedbackConfigOverrides, } from "./config.js";
10
10
  /**
@@ -59,10 +59,12 @@ export interface ThrowingFeedbackRateLimitConfig {
59
59
  */
60
60
  behavior?: "throw";
61
61
  /**
62
- * Whether all configured limiter groups apply to moderators.
62
+ * Whether all configured limiter groups apply to admins.
63
63
  *
64
64
  * @default false
65
65
  */
66
+ limitAdmins?: boolean;
67
+ /** @deprecated Use `limitAdmins`. */
66
68
  limitModerators?: boolean;
67
69
  /** Not accepted in throwing mode; select `"return"` to provide a validator. */
68
70
  returns?: never;
@@ -89,10 +91,12 @@ export interface ReturningFeedbackRateLimitConfig<ReturnsValidator extends Feedb
89
91
  */
90
92
  returns: ReturnsValidator;
91
93
  /**
92
- * Whether all configured limiter groups apply to moderators.
94
+ * Whether all configured limiter groups apply to admins.
93
95
  *
94
96
  * @default false
95
97
  */
98
+ limitAdmins?: boolean;
99
+ /** @deprecated Use `limitAdmins`. */
96
100
  limitModerators?: boolean;
97
101
  }
98
102
  /**
@@ -131,10 +135,10 @@ export type ThrowingExposeFeedbackOptions = Omit<ExposeFeedbackOptionsBase, "con
131
135
  /** Optional component behavior and throwing rate-limit overrides. */
132
136
  config?: FeedbackConfigOverrides & {
133
137
  /**
134
- * Controls throwing behavior and the moderator exemption.
138
+ * Controls throwing behavior and the admin exemption.
135
139
  *
136
140
  * Omit this object to use `behavior: "throw"` and
137
- * `limitModerators: false`.
141
+ * `limitAdmins: false`.
138
142
  */
139
143
  rateLimiting?: FeedbackRateLimitConfig;
140
144
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,IAAI,EACT,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,KAAK,EAEX,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAeL,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,kBAAkB,CAAC,gBAAgB,CAAC,EACpC,UAAU,GAAG,aAAa,CAC3B,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,CAAC,MAAM,GAAG,IAAI,IAAI,CAC/C,GAAG,EAAE,wBAAwB,EAC7B,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEjC;;;;GAIG;AACH,MAAM,WAAW,oBAAoB,CAAC,MAAM,GAAG,IAAI;IACjD,sCAAsC;IACtC,WAAW,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE1C,gDAAgD;IAChD,aAAa,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5C,2EAA2E;IAC3E,WAAW,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE1C,kDAAkD;IAClD,SAAS,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;CACzC;AAED,iFAAiF;AACjF,MAAM,WAAW,+BAA+B;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,qCAAqC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,gCAAgC,GAAG,SAAS,CACtD,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EACpB,UAAU,EACV,MAAM,CACP,CAAC;AAIF;;;;GAIG;AACH,MAAM,WAAW,gCAAgC,CAC/C,gBAAgB,SAAS,gCAAgC;IAEzD,8EAA8E;IAC9E,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;;;;;OAMG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAE1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,qCAAqC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,CACjC,gBAAgB,SAAS,gCAAgC,GAAG,SAAS,GACnE,SAAS,IACT,gBAAgB,SAAS,gCAAgC,GACzD,gCAAgC,CAAC,gBAAgB,CAAC,GAClD,+BAA+B,CAAC;AAcpC,KAAK,0BAA0B,CAAC,QAAQ,IACtC,QAAQ,SAAS,iBAAiB,CAChC,UAAU,EACV,QAAQ,EACR,MAAM,IAAI,EACV,MAAM,MAAM,CACb,GACG,IAAI,SAAS,mBAAmB,GAC9B,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GACnD,KAAK,GACP,QAAQ,SAAS,iBAAiB,CAC9B,OAAO,EACP,QAAQ,EACR,MAAM,IAAI,EACV,MAAM,MAAM,CACb,GACD,IAAI,SAAS,mBAAmB,GAC9B,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAChD,KAAK,GACP,KAAK,CAAC;AAEd,KAAK,kBAAkB,CAAC,eAAe,IAAI;KAEvC,YAAY,IAAI,MAAM,iBAAiB,CAAC,MAAM,GAAG,SAAS,EAAE,eAAe,CAAC,GAC3E,0BAA0B,CAC3B,iBAAiB,CAAC,MAAM,GAAG,SAAS,EAAE,eAAe,CAAC,CAAC,YAAY,CAAC,CACrE;CACF,CAAC;AAEF,UAAU,yBAAyB;IACjC;;;;;;OAMG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEnE;;;;OAIG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;CAClC;AAED,gFAAgF;AAChF,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAC9C,yBAAyB,EACzB,QAAQ,CACT,GAAG;IACF,2EAA2E;IAC3E,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAEpC,qEAAqE;IACrE,MAAM,CAAC,EAAE,uBAAuB,GAAG;QACjC;;;;;WAKG;QACH,YAAY,CAAC,EAAE,uBAAuB,CAAC;KACxC,CAAC;CACH,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,8BAA8B,CACxC,gBAAgB,SAAS,gCAAgC,IACvD,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC,GAAG;IAC9C;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAEtE,+EAA+E;IAC/E,MAAM,EAAE,uBAAuB,GAAG;QAChC;;;;WAIG;QACH,YAAY,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;KACzD,CAAC;CACH,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,CAC/B,gBAAgB,SAAS,gCAAgC,GAAG,SAAS,GACnE,SAAS,IACT,gBAAgB,SAAS,gCAAgC,GACzD,8BAA8B,CAAC,gBAAgB,CAAC,GAChD,6BAA6B,CAAC;AAiuBlC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,SAAS,MAAM,GAAG,SAAS,EAC/B,gBAAgB,SAAS,gCAAgC,EAEzD,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,EAC7B,OAAO,EAAE,8BAA8B,CAAC,gBAAgB,CAAC,GACxD,kBAAkB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAE/C,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,IAAI,SAAS,MAAM,GAAG,SAAS,EAC/D,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,EAC7B,OAAO,EAAE,6BAA6B,GACrC,kBAAkB,CAAC,KAAK,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { mutationGeneric, paginationOptsValidator, paginationResultValidator, queryGeneric, } from "convex/server";
2
2
  import { ConvexError, v, } from "convex/values";
3
- import { commentSortValidator, entryKindValidator, entrySortValidator, entryStatusValidator, feedbackMetadataValidator, publicCommentValidator, publicEntryValidator, similarEntriesValidator, } from "../component/model.js";
3
+ import { adminEntryValidator, commentSortValidator, entryKindValidator, entryPriorityValidator, entrySortValidator, entryStatusFilterValidator, entryStatusValidator, feedbackMetadataValidator, publicCommentValidator, publicEntryValidator, roadmapItemValidator, roadmapStatusValidator, similarEntriesValidator, actorIsAdmin, } from "../component/model.js";
4
4
  import { createFeedbackConfig, } from "./config.js";
5
5
  export { createFeedbackConfig, defaultFeedbackConfig, } from "./config.js";
6
6
  function requireActor(actor) {
@@ -9,17 +9,17 @@ function requireActor(actor) {
9
9
  }
10
10
  return actor;
11
11
  }
12
- function requireModerator(actor) {
13
- if (!actor.isModerator) {
14
- throw new ConvexError("Moderator permissions are required.");
12
+ function requireAdmin(actor) {
13
+ if (!actorIsAdmin(actor)) {
14
+ throw new ConvexError("Admin permissions are required.");
15
15
  }
16
16
  }
17
17
  function rateLimitedReturns(base, limit) {
18
18
  return (limit === undefined ? base : v.union(base, limit));
19
19
  }
20
20
  async function applyRateLimiter(ctx, actor, limiter, rateLimitConfig) {
21
- if (limiter === undefined ||
22
- (actor.isModerator && rateLimitConfig?.limitModerators !== true)) {
21
+ const limitAdmins = rateLimitConfig?.limitAdmins ?? rateLimitConfig?.limitModerators ?? false;
22
+ if (limiter === undefined || (actorIsAdmin(actor) && !limitAdmins)) {
23
23
  return undefined;
24
24
  }
25
25
  const result = await limiter(ctx, actor.id);
@@ -59,12 +59,33 @@ function buildFeedbackApi(component, options) {
59
59
  const nullReturns = rateLimitedReturns(v.null(), rateLimitReturnValidator);
60
60
  const entryUpvoteReturns = rateLimitedReturns(v.object({ active: v.boolean(), upvoteCount: v.number() }), rateLimitReturnValidator);
61
61
  const commentLikeReturns = rateLimitedReturns(v.object({ active: v.boolean(), likeCount: v.number() }), rateLimitReturnValidator);
62
+ const numberReturns = rateLimitedReturns(v.number(), rateLimitReturnValidator);
63
+ const requireAdminActor = async (ctx) => {
64
+ const actor = requireActor(await options.actor(ctx));
65
+ requireAdmin(actor);
66
+ return actor;
67
+ };
68
+ const applyAdminEditLimit = async (ctx, actor) => await applyRateLimiter(ctx, actor, options.rateLimiters?.editContent, rateLimitConfig);
62
69
  return {
70
+ isAdmin: queryGeneric({
71
+ args: {},
72
+ returns: v.boolean(),
73
+ handler: async (ctx) => {
74
+ const actor = await options.actor(ctx);
75
+ return actor !== null && actorIsAdmin(actor);
76
+ },
77
+ }),
78
+ isAuthenticated: queryGeneric({
79
+ args: {},
80
+ returns: v.boolean(),
81
+ handler: async (ctx) => (await options.actor(ctx)) !== null,
82
+ }),
63
83
  listEntries: queryGeneric({
64
84
  args: {
65
85
  paginationOpts: paginationOptsValidator,
66
86
  kinds: v.optional(v.array(entryKindValidator)),
67
87
  status: v.optional(entryStatusValidator),
88
+ statusFilter: v.optional(entryStatusFilterValidator),
68
89
  sort: v.optional(entrySortValidator),
69
90
  },
70
91
  returns: paginationResultValidator(publicEntryValidator),
@@ -74,6 +95,9 @@ function buildFeedbackApi(component, options) {
74
95
  paginationOpts: clampPagination(args.paginationOpts, config.entries.maxPageSize),
75
96
  ...(args.kinds === undefined ? {} : { kinds: args.kinds }),
76
97
  ...(args.status === undefined ? {} : { status: args.status }),
98
+ ...(args.statusFilter === undefined
99
+ ? {}
100
+ : { statusFilter: args.statusFilter }),
77
101
  sort: args.sort ?? config.entries.defaultSort,
78
102
  ...actorIdFields(actor),
79
103
  });
@@ -87,7 +111,9 @@ function buildFeedbackApi(component, options) {
87
111
  return await ctx.runQuery(component.entries.get, {
88
112
  entryId: args.entryId,
89
113
  ...actorIdFields(actor),
90
- ...(actor?.isModerator === true ? { viewerIsModerator: true } : {}),
114
+ ...(actor !== null && actorIsAdmin(actor)
115
+ ? { viewerIsAdmin: true }
116
+ : {}),
91
117
  });
92
118
  },
93
119
  }),
@@ -96,6 +122,7 @@ function buildFeedbackApi(component, options) {
96
122
  searchQuery: v.string(),
97
123
  kinds: v.optional(v.array(entryKindValidator)),
98
124
  status: v.optional(entryStatusValidator),
125
+ statusFilter: v.optional(entryStatusFilterValidator),
99
126
  limit: v.optional(v.number()),
100
127
  },
101
128
  returns: v.array(publicEntryValidator),
@@ -105,6 +132,9 @@ function buildFeedbackApi(component, options) {
105
132
  searchQuery: args.searchQuery,
106
133
  ...(args.kinds === undefined ? {} : { kinds: args.kinds }),
107
134
  ...(args.status === undefined ? {} : { status: args.status }),
135
+ ...(args.statusFilter === undefined
136
+ ? {}
137
+ : { statusFilter: args.statusFilter }),
108
138
  limit: clampPositive(args.limit, config.search.defaultLimit, config.search.maxLimit),
109
139
  ...actorIdFields(actor),
110
140
  });
@@ -186,7 +216,7 @@ function buildFeedbackApi(component, options) {
186
216
  returns: nullReturns,
187
217
  handler: async (ctx, args) => {
188
218
  const actor = requireActor(await options.actor(ctx));
189
- requireModerator(actor);
219
+ requireAdmin(actor);
190
220
  const limited = await applyRateLimiter(asRateLimitContext(ctx), actor, options.rateLimiters?.editContent, rateLimitConfig);
191
221
  if (limited !== undefined)
192
222
  return limited;
@@ -197,6 +227,75 @@ function buildFeedbackApi(component, options) {
197
227
  });
198
228
  },
199
229
  }),
230
+ adminListEntries: queryGeneric({
231
+ args: {
232
+ paginationOpts: paginationOptsValidator,
233
+ kinds: v.optional(v.array(entryKindValidator)),
234
+ status: v.optional(entryStatusValidator),
235
+ priority: v.optional(entryPriorityValidator),
236
+ },
237
+ returns: paginationResultValidator(adminEntryValidator),
238
+ handler: async (ctx, args) => {
239
+ const actor = await requireAdminActor(ctx);
240
+ return await ctx.runQuery(component.admin.listEntries, {
241
+ ...(args.kinds === undefined ? {} : { kinds: args.kinds }),
242
+ ...(args.status === undefined ? {} : { status: args.status }),
243
+ ...(args.priority === undefined ? {} : { priority: args.priority }),
244
+ paginationOpts: clampPagination(args.paginationOpts, config.entries.maxPageSize),
245
+ viewerActorId: actor.id,
246
+ });
247
+ },
248
+ }),
249
+ adminGetEntry: queryGeneric({
250
+ args: { entryId: v.string() },
251
+ returns: v.union(adminEntryValidator, v.null()),
252
+ handler: async (ctx, args) => {
253
+ const actor = await requireAdminActor(ctx);
254
+ return await ctx.runQuery(component.admin.getEntry, {
255
+ entryId: args.entryId,
256
+ viewerActorId: actor.id,
257
+ });
258
+ },
259
+ }),
260
+ adminSearchEntries: queryGeneric({
261
+ args: {
262
+ paginationOpts: paginationOptsValidator,
263
+ searchQuery: v.string(),
264
+ kinds: v.optional(v.array(entryKindValidator)),
265
+ status: v.optional(entryStatusValidator),
266
+ priority: v.optional(entryPriorityValidator),
267
+ },
268
+ returns: paginationResultValidator(adminEntryValidator),
269
+ handler: async (ctx, args) => {
270
+ const actor = await requireAdminActor(ctx);
271
+ return await ctx.runQuery(component.admin.searchEntries, {
272
+ searchQuery: args.searchQuery,
273
+ ...(args.kinds === undefined ? {} : { kinds: args.kinds }),
274
+ ...(args.status === undefined ? {} : { status: args.status }),
275
+ ...(args.priority === undefined ? {} : { priority: args.priority }),
276
+ paginationOpts: clampPagination(args.paginationOpts, config.entries.maxPageSize),
277
+ viewerActorId: actor.id,
278
+ });
279
+ },
280
+ }),
281
+ setEntryPriority: mutationGeneric({
282
+ args: {
283
+ entryId: v.string(),
284
+ priority: v.union(entryPriorityValidator, v.null()),
285
+ },
286
+ returns: nullReturns,
287
+ handler: async (ctx, args) => {
288
+ const actor = await requireAdminActor(ctx);
289
+ const limited = await applyAdminEditLimit(asRateLimitContext(ctx), actor);
290
+ if (limited !== undefined)
291
+ return limited;
292
+ return await ctx.runMutation(component.entries.setPriority, {
293
+ actor,
294
+ entryId: args.entryId,
295
+ priority: args.priority,
296
+ });
297
+ },
298
+ }),
200
299
  setEntryUpvote: mutationGeneric({
201
300
  args: { entryId: v.string(), desiredState: v.boolean() },
202
301
  returns: entryUpvoteReturns,
@@ -304,6 +403,160 @@ function buildFeedbackApi(component, options) {
304
403
  });
305
404
  },
306
405
  }),
406
+ listRoadmap: queryGeneric({
407
+ args: {
408
+ paginationOpts: paginationOptsValidator,
409
+ status: v.optional(roadmapStatusValidator),
410
+ },
411
+ returns: paginationResultValidator(roadmapItemValidator),
412
+ handler: async (ctx, args) => {
413
+ return await ctx.runQuery(component.roadmap.list, {
414
+ ...args,
415
+ paginationOpts: clampPagination(args.paginationOpts, config.entries.maxPageSize),
416
+ });
417
+ },
418
+ }),
419
+ searchRoadmap: queryGeneric({
420
+ args: { searchQuery: v.string(), limit: v.optional(v.number()) },
421
+ returns: v.array(roadmapItemValidator),
422
+ handler: async (ctx, args) => {
423
+ return await ctx.runQuery(component.roadmap.search, {
424
+ searchQuery: args.searchQuery,
425
+ limit: clampPositive(args.limit, 10, 50),
426
+ });
427
+ },
428
+ }),
429
+ createRoadmap: mutationGeneric({
430
+ args: {
431
+ title: v.string(),
432
+ description: v.optional(v.string()),
433
+ status: roadmapStatusValidator,
434
+ },
435
+ returns: idReturns,
436
+ handler: async (ctx, args) => {
437
+ const actor = await requireAdminActor(ctx);
438
+ const limited = await applyAdminEditLimit(asRateLimitContext(ctx), actor);
439
+ if (limited !== undefined)
440
+ return limited;
441
+ return await ctx.runMutation(component.roadmap.create, {
442
+ actor,
443
+ ...args,
444
+ });
445
+ },
446
+ }),
447
+ createRoadmapForEntry: mutationGeneric({
448
+ args: {
449
+ title: v.string(),
450
+ description: v.optional(v.string()),
451
+ status: roadmapStatusValidator,
452
+ entryId: v.string(),
453
+ },
454
+ returns: idReturns,
455
+ handler: async (ctx, args) => {
456
+ const actor = await requireAdminActor(ctx);
457
+ const limited = await applyAdminEditLimit(asRateLimitContext(ctx), actor);
458
+ if (limited !== undefined)
459
+ return limited;
460
+ return await ctx.runMutation(component.roadmap.createForEntry, {
461
+ actor,
462
+ ...args,
463
+ });
464
+ },
465
+ }),
466
+ updateRoadmap: mutationGeneric({
467
+ args: {
468
+ roadmapId: v.string(),
469
+ title: v.string(),
470
+ description: v.optional(v.string()),
471
+ },
472
+ returns: nullReturns,
473
+ handler: async (ctx, args) => {
474
+ const actor = await requireAdminActor(ctx);
475
+ const limited = await applyAdminEditLimit(asRateLimitContext(ctx), actor);
476
+ if (limited !== undefined)
477
+ return limited;
478
+ return await ctx.runMutation(component.roadmap.update, {
479
+ actor,
480
+ ...args,
481
+ });
482
+ },
483
+ }),
484
+ deleteRoadmap: mutationGeneric({
485
+ args: { roadmapId: v.string() },
486
+ returns: nullReturns,
487
+ handler: async (ctx, args) => {
488
+ const actor = await requireAdminActor(ctx);
489
+ const limited = await applyAdminEditLimit(asRateLimitContext(ctx), actor);
490
+ if (limited !== undefined)
491
+ return limited;
492
+ return await ctx.runMutation(component.roadmap.remove, {
493
+ actor,
494
+ ...args,
495
+ });
496
+ },
497
+ }),
498
+ moveRoadmapItem: mutationGeneric({
499
+ args: {
500
+ roadmapId: v.string(),
501
+ status: roadmapStatusValidator,
502
+ previousItemId: v.optional(v.string()),
503
+ nextItemId: v.optional(v.string()),
504
+ },
505
+ returns: numberReturns,
506
+ handler: async (ctx, args) => {
507
+ const actor = await requireAdminActor(ctx);
508
+ const limited = await applyAdminEditLimit(asRateLimitContext(ctx), actor);
509
+ if (limited !== undefined)
510
+ return limited;
511
+ return await ctx.runMutation(component.roadmap.move, {
512
+ actor,
513
+ ...args,
514
+ });
515
+ },
516
+ }),
517
+ attachFeedbackToRoadmap: mutationGeneric({
518
+ args: { roadmapId: v.string(), entryId: v.string() },
519
+ returns: nullReturns,
520
+ handler: async (ctx, args) => {
521
+ const actor = await requireAdminActor(ctx);
522
+ const limited = await applyAdminEditLimit(asRateLimitContext(ctx), actor);
523
+ if (limited !== undefined)
524
+ return limited;
525
+ return await ctx.runMutation(component.roadmap.attachFeedback, {
526
+ actor,
527
+ ...args,
528
+ });
529
+ },
530
+ }),
531
+ detachFeedbackFromRoadmap: mutationGeneric({
532
+ args: { entryId: v.string() },
533
+ returns: nullReturns,
534
+ handler: async (ctx, args) => {
535
+ const actor = await requireAdminActor(ctx);
536
+ const limited = await applyAdminEditLimit(asRateLimitContext(ctx), actor);
537
+ if (limited !== undefined)
538
+ return limited;
539
+ return await ctx.runMutation(component.roadmap.detachFeedback, {
540
+ actor,
541
+ ...args,
542
+ });
543
+ },
544
+ }),
545
+ listRoadmapFeedback: queryGeneric({
546
+ args: {
547
+ paginationOpts: paginationOptsValidator,
548
+ roadmapId: v.string(),
549
+ },
550
+ returns: paginationResultValidator(publicEntryValidator),
551
+ handler: async (ctx, args) => {
552
+ const actor = await options.actor(ctx);
553
+ return await ctx.runQuery(component.roadmap.listFeedback, {
554
+ ...args,
555
+ paginationOpts: clampPagination(args.paginationOpts, config.entries.maxPageSize),
556
+ ...(actor === null ? {} : { viewerActorId: actor.id }),
557
+ });
558
+ },
559
+ }),
307
560
  };
308
561
  }
309
562
  export function exposeFeedbackApi(component, options) {