Merge pull request #27 from atridadl/dev
Temporarily dropped rate-limit library
This commit is contained in:
commit
0aae24e044
6 changed files with 60 additions and 111 deletions
|
@ -5,8 +5,6 @@ DATABASE_URL=""
|
||||||
UPSTASH_REDIS_REST_URL=""
|
UPSTASH_REDIS_REST_URL=""
|
||||||
UPSTASH_REDIS_REST_TOKEN=""
|
UPSTASH_REDIS_REST_TOKEN=""
|
||||||
UPSTASH_REDIS_EXPIRY_SECONDS=""
|
UPSTASH_REDIS_EXPIRY_SECONDS=""
|
||||||
UPSTASH_RATELIMIT_REQUESTS=""
|
|
||||||
UPSTASH_RATELIMIT_SECONDS=""
|
|
||||||
|
|
||||||
#Next Auth Core
|
#Next Auth Core
|
||||||
NEXTAUTH_SECRET=""
|
NEXTAUTH_SECRET=""
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
"@trpc/next": "10.34.0",
|
"@trpc/next": "10.34.0",
|
||||||
"@trpc/react-query": "10.34.0",
|
"@trpc/react-query": "10.34.0",
|
||||||
"@trpc/server": "10.34.0",
|
"@trpc/server": "10.34.0",
|
||||||
"@upstash/ratelimit": "^0.4.3",
|
|
||||||
"@upstash/redis": "^1.22.0",
|
"@upstash/redis": "^1.22.0",
|
||||||
"ably": "^1.2.41",
|
"ably": "^1.2.41",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.14",
|
||||||
|
|
20
pnpm-lock.yaml
generated
20
pnpm-lock.yaml
generated
|
@ -32,9 +32,6 @@ dependencies:
|
||||||
'@trpc/server':
|
'@trpc/server':
|
||||||
specifier: 10.34.0
|
specifier: 10.34.0
|
||||||
version: 10.34.0
|
version: 10.34.0
|
||||||
'@upstash/ratelimit':
|
|
||||||
specifier: ^0.4.3
|
|
||||||
version: 0.4.3
|
|
||||||
'@upstash/redis':
|
'@upstash/redis':
|
||||||
specifier: ^1.22.0
|
specifier: ^1.22.0
|
||||||
version: 1.22.0
|
version: 1.22.0
|
||||||
|
@ -1351,23 +1348,6 @@ packages:
|
||||||
eslint-visitor-keys: 3.4.1
|
eslint-visitor-keys: 3.4.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@upstash/core-analytics@0.0.6:
|
|
||||||
resolution: {integrity: sha512-cpPSR0XJAJs4Ddz9nq3tINlPS5aLfWVCqhhtHnXt4p7qr5+/Znlt1Es736poB/9rnl1hAHrOsOvVj46NEXcVqA==}
|
|
||||||
engines: {node: '>=16.0.0'}
|
|
||||||
dependencies:
|
|
||||||
'@upstash/redis': 1.22.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- encoding
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@upstash/ratelimit@0.4.3:
|
|
||||||
resolution: {integrity: sha512-Dsp9Mw09Flg28JRklKgFiCXqr3bqv8bbG0kgpUYoHjcgPPolFFyaYOj/I2HExvYLZiogl77NUavBoNvMOK0zUQ==}
|
|
||||||
dependencies:
|
|
||||||
'@upstash/core-analytics': 0.0.6
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- encoding
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@upstash/redis@1.22.0:
|
/@upstash/redis@1.22.0:
|
||||||
resolution: {integrity: sha512-sXoJDoEqqik0HbrNE7yRWckOySEFsoBxfRdCgOqkc0w6py19ZZG50SpGkDDEUXSnBqP8VgGYXhWAiBpqxrt5oA==}
|
resolution: {integrity: sha512-sXoJDoEqqik0HbrNE7yRWckOySEFsoBxfRdCgOqkc0w6py19ZZG50SpGkDDEUXSnBqP8VgGYXhWAiBpqxrt5oA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
|
@ -9,8 +9,6 @@ const server = z.object({
|
||||||
UPSTASH_REDIS_REST_URL: z.string().url(),
|
UPSTASH_REDIS_REST_URL: z.string().url(),
|
||||||
UPSTASH_REDIS_REST_TOKEN: z.string(),
|
UPSTASH_REDIS_REST_TOKEN: z.string(),
|
||||||
UPSTASH_REDIS_EXPIRY_SECONDS: z.string(),
|
UPSTASH_REDIS_EXPIRY_SECONDS: z.string(),
|
||||||
UPSTASH_RATELIMIT_REQUESTS: z.string(),
|
|
||||||
UPSTASH_RATELIMIT_SECONDS: z.string(),
|
|
||||||
NODE_ENV: z.enum(["development", "test", "production"]),
|
NODE_ENV: z.enum(["development", "test", "production"]),
|
||||||
NEXTAUTH_SECRET:
|
NEXTAUTH_SECRET:
|
||||||
process.env.NODE_ENV === "production"
|
process.env.NODE_ENV === "production"
|
||||||
|
@ -52,8 +50,6 @@ const processEnv = {
|
||||||
UPSTASH_REDIS_REST_URL: process.env.UPSTASH_REDIS_REST_URL,
|
UPSTASH_REDIS_REST_URL: process.env.UPSTASH_REDIS_REST_URL,
|
||||||
UPSTASH_REDIS_REST_TOKEN: process.env.UPSTASH_REDIS_REST_TOKEN,
|
UPSTASH_REDIS_REST_TOKEN: process.env.UPSTASH_REDIS_REST_TOKEN,
|
||||||
UPSTASH_REDIS_EXPIRY_SECONDS: process.env.UPSTASH_REDIS_EXPIRY_SECONDS,
|
UPSTASH_REDIS_EXPIRY_SECONDS: process.env.UPSTASH_REDIS_EXPIRY_SECONDS,
|
||||||
UPSTASH_RATELIMIT_REQUESTS: process.env.UPSTASH_RATELIMIT_REQUESTS,
|
|
||||||
UPSTASH_RATELIMIT_SECONDS: process.env.UPSTASH_RATELIMIT_SECONDS,
|
|
||||||
NODE_ENV: process.env.NODE_ENV,
|
NODE_ENV: process.env.NODE_ENV,
|
||||||
NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
|
NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
|
||||||
NEXTAUTH_URL: process.env.NEXTAUTH_URL,
|
NEXTAUTH_URL: process.env.NEXTAUTH_URL,
|
||||||
|
|
|
@ -63,7 +63,7 @@ const Room: NextPage = () => {
|
||||||
|
|
||||||
export default Room;
|
export default Room;
|
||||||
|
|
||||||
const RoomBody: React.FC = () => {
|
const RoomBody: React.FC = ({}) => {
|
||||||
const { data: sessionData } = useSession();
|
const { data: sessionData } = useSession();
|
||||||
const { query } = useRouter();
|
const { query } = useRouter();
|
||||||
const roomId = z.string().parse(query.id);
|
const roomId = z.string().parse(query.id);
|
||||||
|
@ -338,7 +338,8 @@ const RoomBody: React.FC = () => {
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
key={index}
|
key={index}
|
||||||
className={ `join-item ${getVoteForCurrentUser()?.value === scaleItem
|
className={`join-item ${
|
||||||
|
getVoteForCurrentUser()?.value === scaleItem
|
||||||
? "btn btn-active btn-primary"
|
? "btn btn-active btn-primary"
|
||||||
: "btn"
|
: "btn"
|
||||||
}`}
|
}`}
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
import { type CreateNextContextOptions } from "@trpc/server/adapters/next";
|
import { type CreateNextContextOptions } from "@trpc/server/adapters/next";
|
||||||
import { type Session } from "next-auth";
|
import { type Session } from "next-auth";
|
||||||
|
|
||||||
import { Redis } from "@upstash/redis";
|
|
||||||
import { getServerAuthSession } from "~/server/auth";
|
import { getServerAuthSession } from "~/server/auth";
|
||||||
import { prisma } from "~/server/db";
|
import { prisma } from "~/server/db";
|
||||||
|
|
||||||
|
@ -65,9 +64,7 @@ export const createTRPCContext = async (opts: CreateNextContextOptions) => {
|
||||||
* This is where the tRPC API is initialized, connecting the context and transformer.
|
* This is where the tRPC API is initialized, connecting the context and transformer.
|
||||||
*/
|
*/
|
||||||
import { initTRPC, TRPCError } from "@trpc/server";
|
import { initTRPC, TRPCError } from "@trpc/server";
|
||||||
import { Ratelimit } from "@upstash/ratelimit";
|
|
||||||
import superjson from "superjson";
|
import superjson from "superjson";
|
||||||
import { env } from "~/env.mjs";
|
|
||||||
|
|
||||||
const t = initTRPC.context<typeof createTRPCContext>().create({
|
const t = initTRPC.context<typeof createTRPCContext>().create({
|
||||||
transformer: superjson,
|
transformer: superjson,
|
||||||
|
@ -106,33 +103,11 @@ const enforceRouteProtection = t.middleware(async ({ ctx, next }) => {
|
||||||
throw new TRPCError({ code: "UNAUTHORIZED" });
|
throw new TRPCError({ code: "UNAUTHORIZED" });
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
const rateLimit = new Ratelimit({
|
|
||||||
redis: Redis.fromEnv(),
|
|
||||||
limiter: Ratelimit.slidingWindow(
|
|
||||||
Number(env.UPSTASH_RATELIMIT_REQUESTS),
|
|
||||||
`${Number(env.UPSTASH_RATELIMIT_SECONDS)}s`
|
|
||||||
),
|
|
||||||
analytics: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
const { success } = await rateLimit.limit(
|
|
||||||
`${env.APP_ENV}_${ctx.session.user.id}`
|
|
||||||
);
|
|
||||||
if (!success) throw new TRPCError({ code: "TOO_MANY_REQUESTS" });
|
|
||||||
|
|
||||||
return next({
|
return next({
|
||||||
ctx: {
|
ctx: {
|
||||||
session: { ...ctx.session, user: ctx.session.user },
|
session: { ...ctx.session, user: ctx.session.user },
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
} catch {
|
|
||||||
return next({
|
|
||||||
ctx: {
|
|
||||||
session: { ...ctx.session, user: ctx.session.user },
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue