History

Register rate limiter component in convex tests

Rhys Sullivan committed 8 months ago

Commit 8536cf21 parent eac4b6c6 files · +106 −4Browse files

Showing the changes to executor/packages/database/src (1 of 6 files). Show all

Unified · Split

executor/packages/database/src/testing/rate_limiter_component.ts+72−0
@@ -0,0 +1,72 @@
1+import { mutationGeneric, queryGeneric } from "convex/server";
2+import { v } from "convex/values";
3+
4+const limitArgs = {
5+ name: v.string(),
6+ config: v.any(),
7+ key: v.optional(v.string()),
8+ count: v.optional(v.number()),
9+ reserve: v.optional(v.boolean()),
10+ throws: v.optional(v.boolean()),
11+};
12+
13+const limitResult = v.object({
14+ ok: v.boolean(),
15+ retryAfter: v.optional(v.number()),
16+});
17+
18+export const rateLimit = mutationGeneric({
19+ args: limitArgs,
20+ returns: limitResult,
21+ handler: async () => ({ ok: true }),
22+});
23+
24+export const checkRateLimit = queryGeneric({
25+ args: limitArgs,
26+ returns: limitResult,
27+ handler: async () => ({ ok: true }),
28+});
29+
30+export const resetRateLimit = mutationGeneric({
31+ args: {
32+ name: v.string(),
33+ key: v.optional(v.string()),
34+ },
35+ returns: v.null(),
36+ handler: async () => null,
37+});
38+
39+export const getValue = queryGeneric({
40+ args: {
41+ name: v.string(),
42+ config: v.any(),
43+ key: v.optional(v.string()),
44+ sampleShards: v.optional(v.number()),
45+ },
46+ returns: v.object({
47+ config: v.any(),
48+ shard: v.number(),
49+ ts: v.number(),
50+ value: v.number(),
51+ }),
52+ handler: async (_ctx, args) => ({
53+ config: args.config,
54+ shard: 0,
55+ ts: Date.now(),
56+ value: 0,
57+ }),
58+});
59+
60+export const clearAll = mutationGeneric({
61+ args: {
62+ before: v.optional(v.number()),
63+ },
64+ returns: v.null(),
65+ handler: async () => null,
66+});
67+
68+export const getServerTime = mutationGeneric({
69+ args: {},
70+ returns: v.number(),
71+ handler: async () => Date.now(),
72+});