ArcJet ayuda a los desarrolladores a proteger sus aplicaciones en solo unas pocas líneas de código. Implementar la limitación de la tasa, la protección del bot, la verificación de correo electrónico y la defensa contra ataques comunes.
Este es el Monorepo que contiene varios paquetes de código abierto Arcjet para JS.
@arcjet/bun con nuestra guía de inicio rápido BUN.npm:@arcjet/deno con nuestra guía de inicio rápido de Deno.@arcjet/nest con nuestra guía de inicio rápido de Nestjs.@arcjet/next con nuestra guía de inicio rápida next.js.@arcjet/node con nuestra guía de inicio rápido Node.js.@arcjet/remix con nuestra guía de inicio rápido remix.@arcjet/sveltekit con nuestra guía de inicio rápido sveltekit. Únase a nuestro servidor Discord o comuníquese con el soporte.
Pruebe una aplicación protegida de ArcJet en vivo en https://example.arcjet.com (código fuente).
Lea los documentos en docs.arcjet.com.
El ejemplo de límite de velocidad de Arcjet se aplica a una regla de límite de velocidad de cubo de token a una ruta donde identificamos al usuario en función de su identificación, por ejemplo, si están conectados. El cubo está configurado con una capacidad máxima de 10 tokens y rellenos por 5 tokens cada 10 segundos. Cada solicitud consume 5 tokens.
Consulte la documentación del límite de tasa ArcJet Next.JS para más detalles.
import arcjet , { tokenBucket } from "@arcjet/next" ;
import { NextResponse } from "next/server" ;
const aj = arcjet ( {
key : process . env . ARCJET_KEY ! , // Get your site key from https://app.arcjet.com
characteristics : [ "userId" ] , // track requests by a custom user ID
rules : [
// Create a token bucket rate limit. Other algorithms are supported.
tokenBucket ( {
mode : "LIVE" , // will block requests. Use "DRY_RUN" to log only
refillRate : 5 , // refill 5 tokens per interval
interval : 10 , // refill every 10 seconds
capacity : 10 , // bucket maximum capacity of 10 tokens
} ) ,
] ,
} ) ;
export async function GET ( req : Request ) {
const userId = "user123" ; // Replace with your authenticated user ID
const decision = await aj . protect ( req , { userId , requested : 5 } ) ; // Deduct 5 tokens from the bucket
console . log ( "Arcjet decision" , decision ) ;
if ( decision . isDenied ( ) ) {
return NextResponse . json (
{ error : "Too Many Requests" , reason : decision . reason } ,
{ status : 429 } ,
) ;
}
return NextResponse . json ( { message : "Hello world" } ) ;
}El ejemplo de protección de Bot ArcJet a continuación devolverá una respuesta prohibida 403 para todas las solicitudes de los clientes que estamos seguros están automatizados.
Consulte la documentación de protección BOT de Arcjet.js para más detalles.
import arcjet , { detectBot } from "@arcjet/node" ;
import http from "node:http" ;
const aj = arcjet ( {
key : process . env . ARCJET_KEY ! , // Get your site key from https://app.arcjet.com
rules : [
detectBot ( {
mode : "LIVE" , // will block requests. Use "DRY_RUN" to log only
// configured with a list of bots to allow from
// https://arcjet.com/bot-list
allow : [ ] , // "allow none" will block all detected bots
} ) ,
] ,
} ) ;
const server = http . createServer ( async function (
req : http . IncomingMessage ,
res : http . ServerResponse ,
) {
const decision = await aj . protect ( req ) ;
console . log ( "Arcjet decision" , decision ) ;
if ( decision . isDenied ( ) ) {
res . writeHead ( 403 , { "Content-Type" : "application/json" } ) ;
res . end ( JSON . stringify ( { error : "Forbidden" } ) ) ;
} else {
res . writeHead ( 200 , { "Content-Type" : "application/json" } ) ;
res . end ( JSON . stringify ( { message : "Hello world" } ) ) ;
}
} ) ;
server . listen ( 8000 ) ; Proporcionamos el código fuente para varios paquetes en este repositorio, por lo que puede encontrar uno específico a través de las categorías y descripciones a continuación.
@arcjet/bun : sdk para bun.sh.@arcjet/deno : SDK para Deno.@arcjet/nest : SDK para Nestjs.@arcjet/next : SDK para el marco Next.js.@arcjet/node : SDK para Node.js.@arcjet/remix : SDK para Remix.@arcjet/sveltekit : SDK para Sveltekit.@arcjet/analyze : motor de análisis local.@arcjet/headers : Arcjet Extension of the Headers Class.@arcjet/ip : Utilidades para encontrar la IP de origen de una solicitud.@arcjet/redact : Redact & Unredact Sensitive Information de Strings.nosecone : Proteja su Response con encabezados seguros.@nosecone/next : Proteja su aplicación Next.js con encabezados seguros.@nosecone/sveltekit : proteja su aplicación Sveltekit con encabezados seguros.arcjet : JS SDK Core.@arcjet/body : Utilidades para extraer el cuerpo de un nodo.js entrante.@arcjet/decorate : Utilidades para decorar respuestas con información.@arcjet/duration : utilidades para las cadenas de duración de análisis en enteros de segundos.@arcjet/env : Detección de entorno para variables Arcjet.@arcjet/logger : Ligero Ligero que refleja la interfaz de registrador de Pino estructurado.@arcjet/protocol : JS Interface en el protocolo Arcjet.@arcjet/runtime : Detección de tiempo de ejecución.@arcjet/sprintf : reemplazo independiente de la plataforma para util.format .@arcjet/transport : mecanismos de transporte para el protocolo Arcjet.@arcjet/eslint-config : configuración de Eslint personalizada para nuestros proyectos.@arcjet/redact-wasm : motor de detección de redacción de información confidencial.@arcjet/rollup-config : configuración de rollup personalizada para nuestros proyectos.@arcjet/tsconfig : TSCONFIG personalizado para nuestros proyectos. Este repositorio sigue la política de soporte de ArcJet.
Este repositorio sigue la Política de Seguridad de Arcjet.
Con licencia bajo la licencia Apache, versión 2.0.