Arcjet помогает разработчикам защитить свои приложения всего за несколько строк кода. Реализовать ограничение ставок, защита ботов, проверка электронной почты и защита от общих атак.
Это монорепо, содержащий различные пакеты с открытым исходным кодом Arcjet для JS.
@arcjet/bun с нашим руководством Bun Quick Start.npm:@arcjet/deno с нашим руководством Deno Quick Start.@arcjet/nest с нашим руководством Nestjs Quick Start.@arcjet/next с нашим руководством Quick Start.@arcjet/node с нашим руководством node.js Quick Start.@arcjet/remix с нашим руководством быстрого запуска Remix.@arcjet/sveltekit с нашим руководством по быстрому старту. Присоединяйтесь к нашему серверу Discord или обратитесь за поддержкой.
Попробуйте защищенное приложение Arcjet в прямом эфире по адресу https://example.arcjet.com (исходный код).
Прочитайте документы на docs.arcjet.com.
Приведенный ниже пример ограничения на ставку Arcjet применяется правило ограничения скорости ковша токенов к маршруту, на котором мы идентифицируем пользователя на основе их идентификатора, например, если он вошел в систему. Ведение настроено с максимальной емкостью 10 токенов и заправляется 5 токенами каждые 10 секунд. Каждый запрос потребляет 5 токенов.
Смотрите документацию Arcjet Next.js Limit Limit для получения подробной информации.
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" } ) ;
}Пример защиты Arcjet Bot ниже вернет запретный ответ 403 для всех запросов от клиентов, которые, как мы уверены, автоматизированы.
Смотрите документацию Arcjet Node.js Protection для получения подробной информации.
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 ) ; Мы предоставляем исходный код для различных пакетов в этом репозитории, поэтому вы можете найти конкретный через категории и описания ниже.
@arcjet/bun : sdk для bun.sh.@arcjet/deno : sdk для deno.@arcjet/nest : SDK для nestjs.@arcjet/next : sdk для следующего.@arcjet/node : sdk для node.js.@arcjet/remix : sdk для ремикса.@arcjet/sveltekit : sdk для stveltekit.@arcjet/analyze : локальный анализ двигателя.@arcjet/headers : Arcjet расширение класса заголовков.@arcjet/ip : утилиты для поиска исходного IP -адреса запроса.@arcjet/redact : redact и undract -конфиденциальная информация из строк.nosecone : защитите свой Response безопасными заголовками.@nosecone/next : Защитите ваше приложение Next.js с помощью безопасных заголовков.@nosecone/sveltekit : защитите свое приложение Sveltekit с помощью безопасных заголовков.arcjet : JS SDK Core.@arcjet/body : утилиты для извлечения тела из Node.js outmentmessage.@arcjet/decorate : утилиты для украшения ответов информацией.@arcjet/duration : утилиты для строительных строк продолжительности в секундах целых числа.@arcjet/env : обнаружение среды для переменных Arcjet.@arcjet/logger : легкий регистратор, который отражает интерфейс Pino Structured Logger.@arcjet/protocol : JS Interface в протокол Arcjet.@arcjet/runtime : обнаружение времени выполнения.@arcjet/sprintf : независимая замена платформы для util.format .@arcjet/transport : транспортные механизмы для протокола Arcjet.@arcjet/eslint-config : Custom Eslint Config для наших проектов.@arcjet/redact-wasm : конфиденциальная информационная редактирование двигателя обнаружения.@arcjet/rollup-config : Custom Rollup Config для наших проектов.@arcjet/tsconfig : Custom TsConfig для наших проектов. Этот репозиторий следует за политикой поддержки Arcjet.
Этот репозиторий следует за политикой безопасности Arcjet.
Лицензирован по лицензии Apache, версия 2.0.