Loading...
Loading...
Compare original and translation side by side
NOTES.mdNOTES.mdARCJET_KEYhttps://api.arcjet.com/mcpARCJET_KEYhttps://api.arcjet.com/mcpnpx -y @arcjet/cli@latest auth status # is the user already signed in?npx -y @arcjet/cli@latest auth status # 用户是否已登录?
Write the `key` value to the project's env file as `ARCJET_KEY=ajkey_...`. Match whatever the project already does — filename, `.env.example` companion, `.gitignore` entry. If the project doesn't have a convention yet, default to whatever the framework expects and add the env file to `.gitignore`. Never hardcode the key in source.
See [references/cli.md](references/cli.md) for install options beyond `npx`, agent-mode flags, and the full command reference.
将`key`值写入项目的环境文件,格式为`ARCJET_KEY=ajkey_...`。遵循项目已有的约定——文件名、`.env.example`配套文件、`.gitignore`中的条目。如果项目尚无约定,则默认采用框架期望的方式,并将环境文件添加到`.gitignore`中。绝对不要在源代码中硬编码密钥。
有关`npx`之外的安装选项、代理模式标志和完整命令参考,请参阅[references/cli.md](references/cli.md)。npm installpnpm addyarn addbun addpip installuv addpoetry addgo getpackage.jsonrequirements.txtgo.modarcjet>=1.0.0^1.0.0@arcjet/nextnpm installpnpm addyarn addbun addpip installuv addpoetry addgo getpackage.jsonrequirements.txtgo.modarcjet>=1.0.0@arcjet/next^1.0.0| Request-based | Guard | |
|---|---|---|
| When to use | Code has an HTTP request object (Express | No HTTP request (tool calls, MCP handlers, queue workers, background jobs, agent loops) |
| JS/TS SDK | | |
| Python SDK | | |
| Go SDK | | |
| Entry point | | |
| 基于请求的防护 | Guard防护 | |
|---|---|---|
| 适用场景 | 代码包含HTTP请求对象(Express | 无HTTP请求(工具调用、MCP处理器、队列工作器、后台任务、Agent循环) |
| JS/TS SDK | | |
| Python SDK | | |
| Go SDK | | |
| 入口方法 | | |
withRule()decision.isDenied()arcjet()arcjet_sync()with_rule()decision.is_denied()NewClientWithRule()(*Client, error)decision.IsDenied()protect()Protect()userIdwithRule()decision.isDenied()arcjet()arcjet_sync()with_rule()decision.is_denied()NewClientWithRule()(*Client, error)decision.IsDenied()protect()Protect()userIdlaunchArcjet()launch_arcjet()launch_arcjet_sync()NewGuardClientlabelguard()label"tools.get-weather""queue.summarize"handleToolCall(name, args)guard(label=f"tools.{name}")-.tools.get-weathertools.get_weatherTools.GetWeathermetadataguard()metadata={"user_id": user_id, "request_id": ...}DENYuserLimit.deniedResult(decision)decision.reason === "PROMPT_INJECTION"decision.reason == "PROMPT_INJECTION"decision.reasonkeybucketuser_id"default"decision.conclusion === "DENY"decision.conclusion == "DENY"decision.IsDenied()decision.Conclusion == arcjet.ConclusionDenylaunchArcjet()launch_arcjet()launch_arcjet_sync()NewGuardClientlabelguard()label"tools.get-weather""queue.summarize"handleToolCall(name, args)guard(label=f"tools.{name}")-.tools.get-weathertools.get_weatherTools.GetWeatherguard()metadatametadata={"user_id": user_id, "request_id": ...}DENYuserLimit.deniedResult(decision)decision.reason === "PROMPT_INJECTION"decision.reason == "PROMPT_INJECTION"decision.reasonkeybucketuser_id"default"decision.conclusion === "DENY"decision.conclusion == "DENY"decision.IsDenied()decision.Conclusion == arcjet.ConclusionDenytscnext buildpython -m py_compilenpm run devuvicorn main:app --reloadcurlfor i in {1..50}; do curl -s -o /dev/null -w "%{http_code}\n" http://localhost:3000/api/your-route; donenode -e "import('./src/tools.js').then(m => m.getWeather('SF', 'user_123'))"python -c "from worker import process_job; process_job({'user_id': 'user_123'})"curlnpx -y @arcjet/cli@latest requests list --site-id <id>... guards list --site-id <id>list-requestslist-guardsarcjet requests explain --site-id <id> --request-id <id>arcjet guards explain --site-id <id> --guard-id <id>tscnext buildpython -m py_compilenpm run devuvicorn main:app --reloadcurlfor i in {1..50}; do curl -s -o /dev/null -w "%{http_code}\n" http://localhost:3000/api/your-route; donenode -e "import('./src/tools.js').then(m => m.getWeather('SF', 'user_123'))"python -c "from worker import process_job; process_job({'user_id': 'user_123'})"curlnpx -y @arcjet/cli@latest requests list --site-id <id>... guards list --site-id <id>list-requestslist-guardsarcjet requests explain --site-id <id> --request-id <id>arcjet guards explain --site-id <id> --guard-id <id>@arcjet/guardarcjet.guardNewGuardClient@arcjet/node@arcjet/nextarcjet()NewClientprotect()guard()guard()handleToolCall(name, args)label"arcjet": "^1.0.0"package.jsonarcjet>=1.0.0requirements.txtprotect()guard()ARCJET_KEY@arcjet/guardarcjet.guardNewGuardClient@arcjet/node@arcjet/nextarcjet()NewClientprotect()guard()handleToolCall(name, args)guard()labelpackage.json"arcjet": "^1.0.0"requirements.txtarcjet>=1.0.0protect()guard()ARCJET_KEYarcjetarcjet.guard@arcjet/next@arcjet/node@arcjet/fastify@arcjet/sveltekit@arcjet/guardgithub.com/arcjet/arcjet-gov0.1.0arcjetarcjet.guard@arcjet/next@arcjet/node@arcjet/fastify@arcjet/sveltekit@arcjet/guardgithub.com/arcjet/arcjet-gov0.1.0