Arcjet - JS SDK
[Arcjet][arcjet] 帮助开发者用几行代码就能保护他们的应用程序。实现速率限制、机器人保护、电子邮件验证以及防御常见攻击。
这是包含各种 [Arcjet][arcjet] JS 开源包的单一代码仓库。
快速开始
- 使用 Bun? 使用 [
@arcjet/bun
][npm-bun] 包,参考我们的 [Bun 快速开始指南][bun-quick-start]。 - 使用 Next.js? 使用 [
@arcjet/next
][npm-next] 包,参考我们的 [Next.js 快速开始指南][next-quick-start]。 - 使用 Node.js? 使用 [
@arcjet/node
][npm-node] 包,参考我们的 [Node.js 快速开始指南][node-quick-start]。 - 使用 SvelteKit? 使用 [
@arcjet/sveltekit
][npm-sveltekit] 包,参考我们的 [SvelteKit 快速开始指南][sveltekit-quick-start]。
获取帮助
[加入我们的 Discord 服务器][discord-invite] 或 [联系我们寻求支持][support]。
示例
- Next.js 速率限制
- Next.js 电子邮件验证
- Bun 速率限制
- 保护 NextAuth 登录路由
- OpenAI 聊天机器人保护
- Express.js 速率限制
- SvelteKit
- ... 更多示例
示例应用
在 [https://example.arcjet.com][example-url] 尝试受 Arcjet 保护的实时应用([源代码][example-source])。
使用方法
阅读 [docs.arcjet.com][arcjet-docs] 上的文档。
Next.js 速率限制示例
以下 [Arcjet 速率限制][rate-limit-concepts-docs] 示例对一个路由应用了令牌桶速率限制规则,我们根据用户 ID 识别用户,例如在用户登录时。桶的最大容量配置为 10 个令牌,每 10 秒补充 5 个令牌。每个请求消耗 5 个令牌。
详情请参阅 [Arcjet Next.js 速率限制文档][next-rate-limit-quick-start]。
import arcjet, { tokenBucket } from "@arcjet/next";
import { NextResponse } from "next/server";
const aj = arcjet({
key: process.env.ARCJET_KEY!, // 从 https://app.arcjet.com 获取您的站点密钥
rules: [
// 创建一个令牌桶速率限制。支持其他算法。
tokenBucket({
mode: "LIVE", // 将阻止请求。使用 "DRY_RUN" 仅记录日志
characteristics: ["userId"], // 通过自定义用户 ID 跟踪请求
refillRate: 5, // 每个间隔补充 5 个令牌
interval: 10, // 每 10 秒补充一次
capacity: 10, // 桶的最大容量为 10 个令牌
}),
],
});
export async function GET(req: Request) {
const userId = "user123"; // 替换为您的已认证用户 ID
const decision = await aj.protect(req, { userId, requested: 5 }); // 从桶中扣除 5 个令牌
console.log("Arcjet 决策", decision);
if (decision.isDenied()) {
return NextResponse.json(
{ error: "请求过多", reason: decision.reason },
{ status: 429 },
);
}
return NextResponse.json({ message: "你好,世界" });
}
Node.js 机器人保护示例
以下 [Arcjet 机器人保护][bot-protection-concepts-docs] 示例将对所有确定为自动化的客户端请求返回 403 禁止访问响应。
详情请参阅 [Arcjet Node.js 机器人保护文档][node-bot-quick-start]。
import arcjet, { detectBot } from "@arcjet/node";
import http from "node:http";
const aj = arcjet({
key: process.env.ARCJET_KEY!, // 从 https://app.arcjet.com 获取你的站点密钥
rules: [
detectBot({
mode: "LIVE", // 将阻止请求。使用 "DRY_RUN" 仅记录日志
block: ["AUTOMATED"], // 阻止所有自动化客户端
}),
],
});
const server = http.createServer(async function (
req: http.IncomingMessage,
res: http.ServerResponse,
) {
const decision = await aj.protect(req);
console.log("Arcjet 决策", decision);
if (decision.isDenied()) {
res.writeHead(403, { "Content-Type": "application/json" });
res.end(JSON.stringify({ error: "禁止访问" }));
} else {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: "你好,世界" }));
}
});
server.listen(8000);
包
我们在这个仓库中提供了各种包的源代码,你可以通过以下分类和描述找到特定的包。
SDK
@arcjet/bun
:Bun.sh 的 SDK。@arcjet/next
:Next.js 框架的 SDK。@arcjet/node
:Node.js 的 SDK。@arcjet/sveltekit
:SvelteKit 的 SDK。
分析
@arcjet/analyze
:本地分析引擎。@arcjet/headers
:Arcjet 扩展的 Headers 类。@arcjet/ip
:用于查找请求源 IP 的工具。
实用工具
arcjet
:JS SDK 核心。@arcjet/protocol
:Arcjet 协议的 JS 接口。@arcjet/transport
:Arcjet 协议的传输机制。@arcjet/logger
:轻量级日志记录器,镜像 Pino 结构化日志记录器接口。@arcjet/decorate
:用于装饰响应信息的工具。@arcjet/duration
:用于将持续时间字符串解析为秒整数的工具。@arcjet/runtime
:运行时检测。@arcjet/sprintf
:util.format
的平台无关替代品。@arcjet/env
:Arcjet 变量的环境检测。
内部开发
@arcjet/eslint-config
:我们项目的自定义 eslint 配置。@arcjet/rollup-config
:我们项目的自定义 rollup 配置。@arcjet/tsconfig
:我们项目的自定义 tsconfig。
支持
本仓库遵循 [Arcjet 支持政策][arcjet-support]。
安全
本仓库遵循 [Arcjet 安全政策][arcjet-security]。
许可证
根据 [Apache License, Version 2.0][apache-license] 许可。