feat(api): ratelimiting

This commit is contained in:
taskylizard 2025-01-01 11:25:05 +00:00
parent 26213d9f91
commit 1148023b1a
No known key found for this signature in database
GPG key ID: 1820131ED1A24120
10 changed files with 139 additions and 150 deletions

93
pnpm-lock.yaml generated
View file

@ -23,6 +23,9 @@ importers:
consola:
specifier: ^3.2.3
version: 3.2.3
express-rate-limit:
specifier: ^7.5.0
version: 7.5.0
feed:
specifier: ^4.2.2
version: 4.2.2
@ -60,6 +63,9 @@ importers:
'@biomejs/biome':
specifier: ^1.9.3
version: 1.9.3
'@cloudflare/workers-types':
specifier: ^4.20241230.0
version: 4.20241230.0
'@ianvs/prettier-plugin-sort-imports':
specifier: ^4.3.1
version: 4.3.1(@vue/compiler-sfc@3.5.12)(prettier@3.3.3)
@ -90,6 +96,9 @@ importers:
'@types/nprogress':
specifier: ^0.2.3
version: 0.2.3
nitro-cloudflare-dev:
specifier: ^0.2.1
version: 0.2.1
prettier:
specifier: ^3.3.3
version: 3.3.3
@ -122,7 +131,7 @@ importers:
version: 1.2.0(rollup@4.29.1)(vite@5.4.11(@types/node@20.16.12)(sass@1.80.1)(terser@5.34.1))
wrangler:
specifier: ^3.99.0
version: 3.99.0
version: 3.99.0(@cloudflare/workers-types@4.20241230.0)
packages:
@ -459,6 +468,9 @@ packages:
cpu: [x64]
os: [win32]
'@cloudflare/workers-types@4.20241230.0':
resolution: {integrity: sha512-dtLD4jY35Lb750cCVyO1i/eIfdZJg2Z0i+B1RYX6BVeRPlgaHx/H18ImKAkYmy0g09Ow8R2jZy3hIxMgXun0WQ==}
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
@ -2154,9 +2166,6 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
cookie-es@1.0.0:
resolution: {integrity: sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==}
cookie-es@1.2.2:
resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==}
@ -2315,9 +2324,6 @@ packages:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
engines: {node: '>=8'}
defu@6.1.3:
resolution: {integrity: sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==}
defu@6.1.4:
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
@ -2333,9 +2339,6 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
destr@2.0.2:
resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==}
destr@2.0.3:
resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==}
@ -2485,6 +2488,12 @@ packages:
resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
engines: {node: '>=6'}
express-rate-limit@7.5.0:
resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==}
engines: {node: '>= 16'}
peerDependencies:
express: ^4.11 || 5 || ^5.0.0-beta.1
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@ -2653,9 +2662,6 @@ packages:
h3@1.13.0:
resolution: {integrity: sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg==}
h3@1.8.2:
resolution: {integrity: sha512-1Ca0orJJlCaiFY68BvzQtP2lKLk46kcLAxVM8JgYbtm2cUg6IY7pjpYgWMwUvDO9QI30N5JAukOKoT8KD3Q0PQ==}
has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
@ -2749,9 +2755,6 @@ packages:
resolution: {integrity: sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==}
engines: {node: '>=12.22.0'}
iron-webcrypto@0.10.1:
resolution: {integrity: sha512-QGOS8MRMnj/UiOa+aMIgfyHcvkhqNUsUxb1XzskENvbo+rEfp6TOwqd1KPuDzXC4OnGHcMSVxDGRoilqB8ViqA==}
iron-webcrypto@1.2.1:
resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
@ -3126,6 +3129,9 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
nitro-cloudflare-dev@0.2.1:
resolution: {integrity: sha512-zHAN21dp+As0ldkAr5tWTop/I721j7MssZG6qb7a7EMorFwdRIhyTUwltr2L6v4qT4209S4eb2S9rszP1fxS7A==}
nitro-cors@0.7.1:
resolution: {integrity: sha512-c/3d6L2vsGWtCdCwxbiItmnxTQZFE4+iUclvC7q4QBEEwPefBPmxCNiUNgNvtNmPhFkTmUf7LVfMeByvuv+6Ow==}
@ -3436,9 +3442,6 @@ packages:
queue-tick@1.0.1:
resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
radix3@1.1.0:
resolution: {integrity: sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A==}
radix3@1.1.2:
resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
@ -3878,9 +3881,6 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
ufo@1.3.1:
resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==}
ufo@1.3.2:
resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==}
@ -3912,9 +3912,6 @@ packages:
unenv@1.10.0:
resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==}
unenv@1.7.4:
resolution: {integrity: sha512-fjYsXYi30It0YCQYqLOcT6fHfMXsBr2hw9XC7ycf8rTG7Xxpe3ZssiqUnD0khrjiZEmkBXWLwm42yCSCH46fMw==}
unicode-trie@2.0.0:
resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==}
@ -4689,6 +4686,8 @@ snapshots:
'@cloudflare/workerd-windows-64@1.20241218.0':
optional: true
'@cloudflare/workers-types@4.20241230.0': {}
'@cspotcode/source-map-support@0.8.1':
dependencies:
'@jridgewell/trace-mapping': 0.3.9
@ -6137,8 +6136,6 @@ snapshots:
convert-source-map@2.0.0: {}
cookie-es@1.0.0: {}
cookie-es@1.2.2: {}
cookie@0.7.2: {}
@ -6245,8 +6242,6 @@ snapshots:
define-lazy-prop@2.0.0: {}
defu@6.1.3: {}
defu@6.1.4: {}
denque@2.1.0: {}
@ -6255,8 +6250,6 @@ snapshots:
dequal@2.0.3: {}
destr@2.0.2: {}
destr@2.0.3: {}
destroy@1.2.0: {}
@ -6455,6 +6448,8 @@ snapshots:
exit-hook@2.2.1: {}
express-rate-limit@7.5.0: {}
fast-deep-equal@3.1.3: {}
fast-fifo@1.3.2: {}
@ -6647,17 +6642,6 @@ snapshots:
uncrypto: 0.1.3
unenv: 1.10.0
h3@1.8.2:
dependencies:
cookie-es: 1.0.0
defu: 6.1.3
destr: 2.0.2
iron-webcrypto: 0.10.1
radix3: 1.1.0
ufo: 1.3.1
uncrypto: 0.1.3
unenv: 1.7.4
has-flag@3.0.0: {}
has-flag@4.0.0: {}
@ -6765,8 +6749,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
iron-webcrypto@0.10.1: {}
iron-webcrypto@1.2.1: {}
is-arrayish@0.2.1: {}
@ -7098,9 +7080,15 @@ snapshots:
nanoid@3.3.8: {}
nitro-cloudflare-dev@0.2.1:
dependencies:
consola: 3.2.3
mlly: 1.7.2
pkg-types: 1.2.1
nitro-cors@0.7.1:
dependencies:
h3: 1.8.2
h3: 1.13.0
ufo: 1.3.2
nitropack@2.10.4(typescript@5.6.3):
@ -7426,8 +7414,6 @@ snapshots:
queue-tick@1.0.1: {}
radix3@1.1.0: {}
radix3@1.1.2: {}
randombytes@2.1.0:
@ -7949,8 +7935,6 @@ snapshots:
typescript@5.6.3: {}
ufo@1.3.1: {}
ufo@1.3.2: {}
ufo@1.5.4: {}
@ -7997,14 +7981,6 @@ snapshots:
node-fetch-native: 1.6.4
pathe: 1.1.2
unenv@1.7.4:
dependencies:
consola: 3.2.3
defu: 6.1.4
mime: 3.0.0
node-fetch-native: 1.6.4
pathe: 1.1.2
unicode-trie@2.0.0:
dependencies:
pako: 0.2.9
@ -8294,7 +8270,7 @@ snapshots:
'@cloudflare/workerd-linux-arm64': 1.20241218.0
'@cloudflare/workerd-windows-64': 1.20241218.0
wrangler@3.99.0:
wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0):
dependencies:
'@cloudflare/kv-asset-handler': 0.3.4
'@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
@ -8314,6 +8290,7 @@ snapshots:
workerd: 1.20241218.0
xxhash-wasm: 1.0.2
optionalDependencies:
'@cloudflare/workers-types': 4.20241230.0
fsevents: 2.3.3
transitivePeerDependencies:
- bufferutil