@arcjet/astro 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -35,9 +35,9 @@ Your app's AI features and agents take real actions, calling tools, reading data
35
35
  ```sh
36
36
  npx @arcjet/cli auth login
37
37
  ```
38
- 2. Install the Arcjet skill to give your coding agent the docs it needs:
38
+ 2. Install versioned Agent Skills so your coding agent matches this SDK:
39
39
  ```sh
40
- npx skills add arcjet/skills
40
+ npx @tanstack/intent@latest install
41
41
  ```
42
42
  3. Tell your agent what to protect — it handles the rest.
43
43
 
package/dist/index.d.ts CHANGED
@@ -334,7 +334,7 @@ type RemoteClientOptions = {
334
334
  /**
335
335
  * Timeout in milliseconds for the Decide API (optional).
336
336
  *
337
- * Defaults to `500` in production and `1000` in development.
337
+ * Defaults to `2000` (2 seconds) to allow for API cold starts.
338
338
  */
339
339
  timeout?: number | undefined;
340
340
  };
package/dist/index.js CHANGED
@@ -78,10 +78,7 @@ const validateProtectSignupOptions = z.object({
78
78
  bots: validateBotOptions,
79
79
  email: validateEmailOptions
80
80
  }).strict();
81
- const validateDetectPromptInjectionOptions = z.object({
82
- mode: validateMode.optional(),
83
- threshold: z.number().optional()
84
- }).strict();
81
+ const validateDetectPromptInjectionOptions = z.object({ mode: validateMode.optional() }).strict();
85
82
  function validateAndSerialize(schema, value) {
86
83
  const v = schema.parse(value);
87
84
  return v ? JSON.stringify(v) : "";
@@ -24,7 +24,7 @@ type RemoteClientOptions = {
24
24
  /**
25
25
  * Timeout in milliseconds for the Decide API (optional).
26
26
  *
27
- * Defaults to `500` in production and `1000` in development.
27
+ * Defaults to `2000` (2 seconds) to allow for API cold starts.
28
28
  */
29
29
  timeout?: number;
30
30
  };
package/dist/internal.js CHANGED
@@ -1,16 +1,16 @@
1
- import { findIp, parseProxies } from "@arcjet/ip";
1
+ import { createClientIpDiagnostics, hasTrustAllProxy, parseProxies, resolveClientIp } from "@arcjet/ip";
2
2
  import { readBodyWeb } from "@arcjet/body";
3
3
  import { baseUrl, isDevelopment, logLevel, platform } from "@arcjet/env";
4
4
  import { ArcjetHeaders } from "@arcjet/headers";
5
5
  import { Logger } from "@arcjet/logger";
6
- import { createClient } from "@arcjet/protocol/client.js";
6
+ import { createClient, resolveClientTimeout } from "@arcjet/protocol/client.js";
7
7
  import { createTransport } from "@arcjet/transport";
8
8
  import core from "arcjet";
9
9
  import { ARCJET_BASE_URL, ARCJET_ENV, ARCJET_KEY, ARCJET_LOG_LEVEL, FIREBASE_CONFIG, FLY_APP_NAME, RENDER, VERCEL } from "astro:env/server";
10
10
  export * from "arcjet";
11
11
  //#region src/internal.ts
12
12
  /** SDK version. Updated by the release process. */
13
- const VERSION = "1.10.0";
13
+ const VERSION = "1.12.0";
14
14
  let warnedForAutomaticBodyRead = false;
15
15
  const ipSymbol = Symbol.for("arcjet.ip");
16
16
  const env = {
@@ -34,9 +34,10 @@ const env = {
34
34
  */
35
35
  function createRemoteClient(options) {
36
36
  const url = options?.baseUrl ?? baseUrl(env);
37
- const timeout = options?.timeout ?? (isDevelopment(env) ? 1e3 : 500);
37
+ const timeout = resolveClientTimeout(options?.timeout);
38
+ const transport = createTransport(url);
38
39
  return createClient({
39
- transport: createTransport(url),
40
+ transport,
40
41
  baseUrl: url,
41
42
  timeout,
42
43
  sdkStack: "ASTRO",
@@ -59,6 +60,8 @@ function createArcjetClient(options) {
59
60
  const client = options.client ?? createRemoteClient();
60
61
  const log = options.log ? options.log : new Logger({ level: logLevel(env) });
61
62
  const proxies = Array.isArray(options.proxies) ? parseProxies(options.proxies) : void 0;
63
+ const reportClientIp = createClientIpDiagnostics(log);
64
+ if (proxies && hasTrustAllProxy(proxies)) log.warn({ trustAll: true }, "Arcjet proxy configuration trusts an entire IP address family; use the narrowest proxy CIDRs possible.");
62
65
  if (isDevelopment(process.env)) log.warn("Arcjet will use 127.0.0.1 when missing public IP address in development mode");
63
66
  function toArcjetRequest(request, props, ipSrc) {
64
67
  const clientAddress = ipSrc ? void 0 : Reflect.get(request, ipSymbol);
@@ -66,16 +69,21 @@ function createArcjetClient(options) {
66
69
  const cookies = request.headers.get("cookie") ?? "";
67
70
  const headers = new ArcjetHeaders(request.headers);
68
71
  const url = new URL(request.url);
69
- const xArcjetIp = isDevelopment(env) ? headers.get("x-arcjet-ip") : void 0;
70
- let ip = ipSrc || xArcjetIp || findIp({
72
+ const ipDetails = resolveClientIp({
71
73
  ip: clientAddress,
72
74
  headers
73
75
  }, {
76
+ development: isDevelopment(env),
77
+ ipSrc,
74
78
  platform: platform(env),
75
79
  proxies
76
80
  });
77
- if (ip === "") if (isDevelopment(env)) ip = "127.0.0.1";
78
- else log.warn(`Client IP address is missing. If this is a dev environment set the ARCJET_ENV env var to "development"`);
81
+ reportClientIp(ipDetails);
82
+ let ip = ipDetails.ip;
83
+ if (ip === "") {
84
+ if (isDevelopment(env)) ip = "127.0.0.1";
85
+ else log.warn(`Client IP address is missing. If this is a dev environment set the ARCJET_ENV env var to "development"`);
86
+ }
79
87
  return {
80
88
  ...props,
81
89
  ip,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcjet/astro",
3
- "version": "1.10.0",
3
+ "version": "1.12.0",
4
4
  "description": "Arcjet runtime security SDK for Astro — bot protection, rate limiting, prompt injection detection, PII blocking, and WAF",
5
5
  "keywords": [
6
6
  "ai",
@@ -62,18 +62,18 @@
62
62
  "test": "npm run build && npm run test-coverage"
63
63
  },
64
64
  "dependencies": {
65
- "@arcjet/body": "1.10.0",
66
- "@arcjet/env": "1.10.0",
67
- "@arcjet/headers": "1.10.0",
68
- "@arcjet/ip": "1.10.0",
69
- "@arcjet/logger": "1.10.0",
70
- "@arcjet/protocol": "1.10.0",
71
- "@arcjet/transport": "1.10.0",
72
- "arcjet": "1.10.0"
65
+ "@arcjet/body": "1.12.0",
66
+ "@arcjet/env": "1.12.0",
67
+ "@arcjet/headers": "1.12.0",
68
+ "@arcjet/ip": "1.12.0",
69
+ "@arcjet/logger": "1.12.0",
70
+ "@arcjet/protocol": "1.12.0",
71
+ "@arcjet/transport": "1.12.0",
72
+ "arcjet": "1.12.0"
73
73
  },
74
74
  "devDependencies": {
75
- "astro": "7.1.0",
76
- "tsdown": "0.22.7",
75
+ "astro": "7.2.2",
76
+ "tsdown": "0.22.14",
77
77
  "typescript": "7.0.2"
78
78
  },
79
79
  "peerDependencies": {