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 @@
1import { mutationGeneric, queryGeneric } from "convex/server";
2import { v } from "convex/values";
3
4const 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
13const limitResult = v.object({
14 ok: v.boolean(),
15 retryAfter: v.optional(v.number()),
16});
17
18export const rateLimit = mutationGeneric({
19 args: limitArgs,
20 returns: limitResult,
21 handler: async () => ({ ok: true }),
22});
23
24export const checkRateLimit = queryGeneric({
25 args: limitArgs,
26 returns: limitResult,
27 handler: async () => ({ ok: true }),
28});
29
30export 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
39export 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
60export const clearAll = mutationGeneric({
61 args: {
62 before: v.optional(v.number()),
63 },
64 returns: v.null(),
65 handler: async () => null,
66});
67
68export const getServerTime = mutationGeneric({
69 args: {},
70 returns: v.number(),
71 handler: async () => Date.now(),
72});