mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-06 20:13:35 +09:00
## Description This PR integrates a rate-limiting mechanism into the app using Vercel's edge-layer middleware in combination with the Hono framework. This middleware is written in JS with full JSDoc TypeScript typings. ### Architecture & Strategy Vercel Middleware: Serves as the front-line defense, running at the edge for optimal performance. Hono Framework: For granular control, we utilize Hono middlewares for applying or skipping rate limits. Additionally, non-expensive routes benefit from an ephemeral cache to further optimize performance ### Current Limitations Due to a dependency on CommonJS, we cannot use TypeScript fully. Consequently, session configurations are not yet shared across multiple files. All utility functions are present in a single file for the time being. ### Logic Breakdown - Assets: Rate limiting skipped. - Service Calls: Rate limiting skipped. - /rest/ai/* Endpoint: Rate limit of 20 requests per 5 minutes, identified by userId or IP. - Unauthorized Users: Rate limit of 5 requests per 5 seconds, based solely on IP. - Authorized Users: Rate limit of 20 requests per 5 seconds, based on userId. ### Next Steps Plan to migrate to ESM for enabling TypeScript support for better maintainability. Use multiple regional KV ### Debug endpoint. [Rate limit debug endpoint](https://webstudio-builder-kscynssns-webstudio-is.vercel.app/rate-limit-debug) ## Steps for reproduction 1. click button 2. expect xyz ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 5de6) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env.example` and the `builder/env-check.js` if mandatory
25 lines
431 B
JSON
25 lines
431 B
JSON
{
|
|
"extends": "@webstudio-is/tsconfig/base.json",
|
|
"include": [
|
|
"app",
|
|
"remix.env.d.ts",
|
|
"**/*.ts",
|
|
"**/*.tsx",
|
|
"../../@types/**/*.d.ts",
|
|
"./middleware.js"
|
|
],
|
|
|
|
"compilerOptions": {
|
|
"paths": {
|
|
"~/*": ["app/*"]
|
|
},
|
|
"baseUrl": ".",
|
|
"declaration": false,
|
|
"emitDeclarationOnly": false,
|
|
"declarationDir": null,
|
|
"noEmit": true,
|
|
"allowJs": true,
|
|
"checkJs": true
|
|
}
|
|
}
|