Arcjet JS SDK 项目教程
1. 项目的目录结构及介绍
Arcjet JS SDK 是一个用于保护应用程序的开源项目,提供了多种 SDK 包,支持 Node.js、Next.js、Deno、Bun、SvelteKit 和 NestJS 等框架。项目的目录结构如下:
arcjet-js/
├── analyze/
├── arcjet-bun/
├── arcjet-deno/
├── arcjet-nest/
├── arcjet-next/
├── arcjet-node/
├── arcjet-remix/
├── arcjet-sveltekit/
├── arcjet/
├── body/
├── decorate/
├── duration/
├── env/
├── eslint-config/
├── examples/
├── headers/
├── ip/
├── logger/
├── protocol/
├── redact-wasm/
├── redact/
├── rollup-config/
├── runtime/
├── sprintf/
├── transport/
├── tsconfig/
├── .gitattributes
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── package-lock.json
├── package.json
└── turbo.json
目录结构介绍
- analyze/: 本地分析引擎。
- arcjet-bun/: Bun 框架的 SDK。
- arcjet-deno/: Deno 框架的 SDK。
- arcjet-nest/: NestJS 框架的 SDK。
- arcjet-next/: Next.js 框架的 SDK。
- arcjet-node/: Node.js 框架的 SDK。
- arcjet-remix/: Remix 框架的 SDK。
- arcjet-sveltekit/: SvelteKit 框架的 SDK。
- arcjet/: JS SDK 的核心包。
- body/: 请求体处理相关工具。
- decorate/: 用于装饰响应的工具。
- duration/: 解析持续时间字符串的工具。
- env/: 环境变量检测工具。
- eslint-config/: 自定义的 ESLint 配置。
- examples/: 示例代码。
- headers/: 扩展的 Headers 类。
- ip/: 获取请求源 IP 的工具。
- logger/: 轻量级日志工具。
- protocol/: Arcjet 协议的 JS 接口。
- redact-wasm/: 数据脱敏的 WebAssembly 模块。
- redact/: 数据脱敏工具。
- rollup-config/: 自定义的 Rollup 配置。
- runtime/: 运行时检测工具。
- sprintf/: 平台无关的字符串格式化工具。
- transport/: 协议传输机制。
- tsconfig/: 自定义的 TypeScript 配置。
- .gitattributes: Git 属性配置文件。
- .gitignore: Git 忽略文件配置。
- CHANGELOG.md: 项目更新日志。
- LICENSE: 项目许可证。
- README.md: 项目介绍文档。
- package-lock.json: 依赖锁定文件。
- package.json: 项目依赖和脚本配置。
- turbo.json: Turbo 配置文件。
2. 项目的启动文件介绍
Arcjet JS SDK 的启动文件主要集中在各个框架的 SDK 包中。以下是一些常见的启动文件示例:
Node.js 启动文件
在 arcjet-node
包中,启动文件通常是一个简单的 HTTP 服务器,用于初始化 Arcjet 并保护应用程序。
import arcjet from "@arcjet/node";
import http from "node:http";
const aj = arcjet({
key: process.env.ARCJET_KEY,
rules: [
// 配置规则
]
});
const server = http.createServer(async function (req, res) {
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);
Next.js 启动文件
在 arcjet-next
包中,启动文件通常是一个中间件,用于在 Next.js 应用中集成 Arcjet。
import arcjet from "@arcjet/next";
import { NextResponse } from "next/server";
const aj = arcjet({
key: process.env.ARCJET_KEY,
rules: [
// 配置规则
]
});
export async function GET(req) {
const decision = await aj.protect(req);
console.log("Arcjet decision", decision);
if (decision.isDenied()) {
return NextResponse.json({ error: "Too Many Requests" }, { status: 429 });
}
return NextResponse.json({ message: "Hello world" });
}
3. 项目的配置文件介绍
Arcjet JS SDK 的配置文件主要包括 package.json
和 turbo.json
。
package.json
package.json
文件包含了项目的依赖、脚本和其他元数据。以下是一些关键配置项:
{
"name": "arcjet-js",
"version": "1.0.0",
"description": "Arcjet JS SDKs for various frameworks",
"main": "index.js",
"scripts": {
"build": "turbo run build",
"test": "turbo run test",
"lint": "eslint ."
},
"dependencies": {
"@arcjet/bun": "^1.0.0",
"@arcjet/deno": "^1.0.0",
"@arcjet/nest": "^1.0.0",
"@arcjet/next": "^1.0.0",
"@arcjet/node": "^1.0.0",
"@arcjet/sveltekit": "^1.0.0"
},
"devDependencies": {
"eslint": "^8.0.0",
"turbo": "^1.0.0"
}
}
turbo.json
turbo.json
文件用于配置 Turbo 构建工具,定义项目的构建和测试任务。
{
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
},
"test": {
"dependsOn": ["build"],
"outputs": []
},
"lint": {
"outputs": []
}
}
}
通过以上配置,可以确保项目在开发和构建过程中遵循一致的规范和流程。