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
59 lines
734 B
Plaintext
59 lines
734 B
Plaintext
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
|
|
# dependencies
|
|
node_modules
|
|
.pnp
|
|
.pnp.js
|
|
yarn.lock
|
|
|
|
# testing
|
|
coverage
|
|
|
|
# remix
|
|
build
|
|
_build
|
|
.cache
|
|
.vercel
|
|
.output
|
|
.netlify
|
|
|
|
# misc
|
|
.DS_Store
|
|
*.pem
|
|
/.idea
|
|
|
|
# logs
|
|
npm-debug.log*
|
|
yarn-debug.log*
|
|
yarn-error.log*
|
|
.pnpm-debug.log*
|
|
|
|
# local env files
|
|
.env
|
|
.env.local
|
|
.env.development.local
|
|
.env.test.local
|
|
.env.production.local
|
|
|
|
# turbo
|
|
.turbo
|
|
|
|
# data
|
|
/data
|
|
*.db
|
|
*.db-journal
|
|
|
|
# migrations
|
|
**/prisma/migrations/lockfile
|
|
**/prisma/migrations/*/client
|
|
|
|
# builds
|
|
packages/**/lib
|
|
generated
|
|
storybook-static
|
|
tsconfig.tsbuildinfo
|
|
|
|
# to save thunder https://marketplace.visualstudio.com/items?itemName=rangav.vscode-thunder-client files
|
|
.thunder
|
|
.env*.local
|