@kya-os/agentshield-nextjs 0.3.2 → 0.3.5
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 +21 -369
- package/index.js +9 -0
- package/package.json +6 -141
- package/EDGE_RUNTIME_WASM_SETUP.md +0 -348
- package/bin/setup-edge-wasm.js +0 -525
- package/dist/.tsbuildinfo +0 -1
- package/dist/api-client.d.mts +0 -196
- package/dist/api-client.d.ts +0 -196
- package/dist/api-client.js +0 -200
- package/dist/api-client.js.map +0 -1
- package/dist/api-client.mjs +0 -196
- package/dist/api-client.mjs.map +0 -1
- package/dist/api-middleware.d.mts +0 -140
- package/dist/api-middleware.d.ts +0 -140
- package/dist/api-middleware.js +0 -511
- package/dist/api-middleware.js.map +0 -1
- package/dist/api-middleware.mjs +0 -508
- package/dist/api-middleware.mjs.map +0 -1
- package/dist/create-middleware.d.mts +0 -17
- package/dist/create-middleware.d.ts +0 -17
- package/dist/create-middleware.js +0 -1381
- package/dist/create-middleware.js.map +0 -1
- package/dist/create-middleware.mjs +0 -1358
- package/dist/create-middleware.mjs.map +0 -1
- package/dist/edge/index.d.mts +0 -110
- package/dist/edge/index.d.ts +0 -110
- package/dist/edge/index.js +0 -277
- package/dist/edge/index.js.map +0 -1
- package/dist/edge/index.mjs +0 -275
- package/dist/edge/index.mjs.map +0 -1
- package/dist/edge-detector-wrapper.d.mts +0 -34
- package/dist/edge-detector-wrapper.d.ts +0 -34
- package/dist/edge-detector-wrapper.js +0 -596
- package/dist/edge-detector-wrapper.js.map +0 -1
- package/dist/edge-detector-wrapper.mjs +0 -574
- package/dist/edge-detector-wrapper.mjs.map +0 -1
- package/dist/edge-runtime-loader.d.mts +0 -50
- package/dist/edge-runtime-loader.d.ts +0 -50
- package/dist/edge-runtime-loader.js +0 -204
- package/dist/edge-runtime-loader.js.map +0 -1
- package/dist/edge-runtime-loader.mjs +0 -201
- package/dist/edge-runtime-loader.mjs.map +0 -1
- package/dist/edge-wasm-middleware.d.mts +0 -68
- package/dist/edge-wasm-middleware.d.ts +0 -68
- package/dist/edge-wasm-middleware.js +0 -318
- package/dist/edge-wasm-middleware.js.map +0 -1
- package/dist/edge-wasm-middleware.mjs +0 -315
- package/dist/edge-wasm-middleware.mjs.map +0 -1
- package/dist/enhanced-middleware.d.mts +0 -153
- package/dist/enhanced-middleware.d.ts +0 -153
- package/dist/enhanced-middleware.js +0 -1082
- package/dist/enhanced-middleware.js.map +0 -1
- package/dist/enhanced-middleware.mjs +0 -1080
- package/dist/enhanced-middleware.mjs.map +0 -1
- package/dist/index.d.mts +0 -24
- package/dist/index.d.ts +0 -24
- package/dist/index.js +0 -2717
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -2662
- package/dist/index.mjs.map +0 -1
- package/dist/middleware.d.mts +0 -21
- package/dist/middleware.d.ts +0 -21
- package/dist/middleware.js +0 -1362
- package/dist/middleware.js.map +0 -1
- package/dist/middleware.mjs +0 -1339
- package/dist/middleware.mjs.map +0 -1
- package/dist/nodejs-wasm-loader.d.mts +0 -25
- package/dist/nodejs-wasm-loader.d.ts +0 -25
- package/dist/nodejs-wasm-loader.js +0 -78
- package/dist/nodejs-wasm-loader.js.map +0 -1
- package/dist/nodejs-wasm-loader.mjs +0 -68
- package/dist/nodejs-wasm-loader.mjs.map +0 -1
- package/dist/policy.d.mts +0 -162
- package/dist/policy.d.ts +0 -162
- package/dist/policy.js +0 -189
- package/dist/policy.js.map +0 -1
- package/dist/policy.mjs +0 -165
- package/dist/policy.mjs.map +0 -1
- package/dist/session-tracker.d.mts +0 -55
- package/dist/session-tracker.d.ts +0 -55
- package/dist/session-tracker.js +0 -170
- package/dist/session-tracker.js.map +0 -1
- package/dist/session-tracker.mjs +0 -167
- package/dist/session-tracker.mjs.map +0 -1
- package/dist/signature-verifier.d.mts +0 -33
- package/dist/signature-verifier.d.ts +0 -33
- package/dist/signature-verifier.js +0 -386
- package/dist/signature-verifier.js.map +0 -1
- package/dist/signature-verifier.mjs +0 -362
- package/dist/signature-verifier.mjs.map +0 -1
- package/dist/types-DVmy9NE3.d.mts +0 -105
- package/dist/types-DVmy9NE3.d.ts +0 -105
- package/dist/wasm-middleware.d.mts +0 -63
- package/dist/wasm-middleware.d.ts +0 -63
- package/dist/wasm-middleware.js +0 -98
- package/dist/wasm-middleware.js.map +0 -1
- package/dist/wasm-middleware.mjs +0 -95
- package/dist/wasm-middleware.mjs.map +0 -1
- package/dist/wasm-setup.d.mts +0 -46
- package/dist/wasm-setup.d.ts +0 -46
- package/dist/wasm-setup.js +0 -157
- package/dist/wasm-setup.js.map +0 -1
- package/dist/wasm-setup.mjs +0 -148
- package/dist/wasm-setup.mjs.map +0 -1
- package/templates/middleware-wasm-100.ts +0 -151
- package/wasm/agentshield_wasm.d.ts +0 -479
- package/wasm/agentshield_wasm.js +0 -1536
- package/wasm/agentshield_wasm_bg.wasm +0 -0
- package/wasm/package.json +0 -30
- package/wasm.d.ts +0 -21
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
-
import { EnforcementDecision } from './api-client.mjs';
|
|
3
|
-
import '@kya-os/agentshield-shared';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* API-based AgentShield Middleware for Next.js
|
|
7
|
-
*
|
|
8
|
-
* This middleware uses the AgentShield API for detection and enforcement,
|
|
9
|
-
* instead of running detection locally. This approach:
|
|
10
|
-
*
|
|
11
|
-
* 1. Works reliably in Edge Runtime (no WASM loading issues)
|
|
12
|
-
* 2. Ensures consistent detection across all platforms
|
|
13
|
-
* 3. Applies centralized policies from the dashboard
|
|
14
|
-
* 4. Supports deny lists, thresholds, and path rules
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* // middleware.ts
|
|
19
|
-
* import { withAgentShield } from '@kya-os/agentshield-nextjs/api-middleware';
|
|
20
|
-
*
|
|
21
|
-
* export default withAgentShield({
|
|
22
|
-
* apiKey: process.env.AGENTSHIELD_API_KEY!,
|
|
23
|
-
* // Optional overrides:
|
|
24
|
-
* onBlock: 'redirect', // 'block' | 'redirect' | 'challenge'
|
|
25
|
-
* redirectUrl: '/blocked',
|
|
26
|
-
* skipPaths: ['/api/health', '/_next/*'],
|
|
27
|
-
* });
|
|
28
|
-
*
|
|
29
|
-
* export const config = {
|
|
30
|
-
* matcher: ['/((?!_next/static|favicon.ico).*)'],
|
|
31
|
-
* };
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Middleware configuration
|
|
37
|
-
*/
|
|
38
|
-
interface AgentShieldMiddlewareConfig {
|
|
39
|
-
/** API key (or use AGENTSHIELD_API_KEY env var) */
|
|
40
|
-
apiKey?: string;
|
|
41
|
-
/** API base URL (defaults to production) */
|
|
42
|
-
apiUrl?: string;
|
|
43
|
-
/**
|
|
44
|
-
* Use edge detection for lower latency (~30-50ms vs ~150ms) and better coverage.
|
|
45
|
-
* Edge detection can identify non-JS clients (curl, Python, Claude Code WebFetch)
|
|
46
|
-
* that the pixel cannot detect since they don't execute JavaScript.
|
|
47
|
-
* Set to false to use the Vercel API instead.
|
|
48
|
-
* @default true
|
|
49
|
-
*/
|
|
50
|
-
useEdge?: boolean;
|
|
51
|
-
/** Request timeout in ms (default: 5000) */
|
|
52
|
-
timeout?: number;
|
|
53
|
-
/**
|
|
54
|
-
* Action to take when an agent should be blocked
|
|
55
|
-
* - 'block': Return 403 response
|
|
56
|
-
* - 'redirect': Redirect to redirectUrl
|
|
57
|
-
* - 'challenge': Show a challenge page (future)
|
|
58
|
-
* Default: uses policy from dashboard
|
|
59
|
-
*/
|
|
60
|
-
onBlock?: 'block' | 'redirect' | 'challenge';
|
|
61
|
-
/**
|
|
62
|
-
* URL to redirect to when blocking (if onBlock is 'redirect')
|
|
63
|
-
* Default: uses redirectUrl from dashboard policy
|
|
64
|
-
*/
|
|
65
|
-
redirectUrl?: string;
|
|
66
|
-
/**
|
|
67
|
-
* How the middleware handles a `redirect` / `instruct` action.
|
|
68
|
-
*
|
|
69
|
-
* - `'instruct'` (default): return HTTP 401 with an MCP-I Link header + JSON
|
|
70
|
-
* body pointing the agent at the redirect URL. LLMs surface the URL as a
|
|
71
|
-
* clickable link for the user. Matches the Cloudflare Gateway contract.
|
|
72
|
-
* - `'http'`: legacy behavior — return HTTP 302 with `Location`. Most LLM
|
|
73
|
-
* fetchers won't follow the redirect, so this is only useful when your
|
|
74
|
-
* traffic is real browsers.
|
|
75
|
-
*
|
|
76
|
-
* @default 'instruct'
|
|
77
|
-
*/
|
|
78
|
-
redirectMode?: 'instruct' | 'http';
|
|
79
|
-
/**
|
|
80
|
-
* Custom blocked response
|
|
81
|
-
*/
|
|
82
|
-
blockedResponse?: {
|
|
83
|
-
status?: number;
|
|
84
|
-
message?: string;
|
|
85
|
-
headers?: Record<string, string>;
|
|
86
|
-
};
|
|
87
|
-
/**
|
|
88
|
-
* Paths to skip (in addition to dashboard policy)
|
|
89
|
-
* Supports glob patterns: '/api/*', '/_next/*'
|
|
90
|
-
*/
|
|
91
|
-
skipPaths?: string[];
|
|
92
|
-
/**
|
|
93
|
-
* Only enforce on these paths (overrides dashboard policy)
|
|
94
|
-
*/
|
|
95
|
-
includePaths?: string[];
|
|
96
|
-
/**
|
|
97
|
-
* Callback when an agent is detected
|
|
98
|
-
*/
|
|
99
|
-
onAgentDetected?: (request: NextRequest, decision: EnforcementDecision) => void | Promise<void>;
|
|
100
|
-
/**
|
|
101
|
-
* Callback to customize the blocked response
|
|
102
|
-
*/
|
|
103
|
-
customBlockedResponse?: (request: NextRequest, decision: EnforcementDecision) => NextResponse | Promise<NextResponse>;
|
|
104
|
-
/**
|
|
105
|
-
* Whether to fail open (allow) on API errors
|
|
106
|
-
* Default: true (recommended for production)
|
|
107
|
-
*/
|
|
108
|
-
failOpen?: boolean;
|
|
109
|
-
/**
|
|
110
|
-
* Enable debug logging
|
|
111
|
-
*/
|
|
112
|
-
debug?: boolean;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Create AgentShield middleware with API-based detection
|
|
116
|
-
*
|
|
117
|
-
* @example
|
|
118
|
-
* ```typescript
|
|
119
|
-
* // middleware.ts
|
|
120
|
-
* import { withAgentShield } from '@kya-os/agentshield-nextjs/api-middleware';
|
|
121
|
-
*
|
|
122
|
-
* export default withAgentShield({
|
|
123
|
-
* onBlock: 'block',
|
|
124
|
-
* skipPaths: ['/api/health'],
|
|
125
|
-
* });
|
|
126
|
-
* ```
|
|
127
|
-
*/
|
|
128
|
-
declare function withAgentShield(config?: AgentShieldMiddlewareConfig): (request: NextRequest) => Promise<NextResponse>;
|
|
129
|
-
/**
|
|
130
|
-
* Convenience export for simple setup
|
|
131
|
-
*
|
|
132
|
-
* @example
|
|
133
|
-
* ```typescript
|
|
134
|
-
* // middleware.ts
|
|
135
|
-
* export { agentShieldMiddleware as default } from '@kya-os/agentshield-nextjs/api-middleware';
|
|
136
|
-
* ```
|
|
137
|
-
*/
|
|
138
|
-
declare const agentShieldMiddleware: (request: NextRequest) => Promise<NextResponse>;
|
|
139
|
-
|
|
140
|
-
export { type AgentShieldMiddlewareConfig, agentShieldMiddleware, withAgentShield };
|
package/dist/api-middleware.d.ts
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
-
import { EnforcementDecision } from './api-client.js';
|
|
3
|
-
import '@kya-os/agentshield-shared';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* API-based AgentShield Middleware for Next.js
|
|
7
|
-
*
|
|
8
|
-
* This middleware uses the AgentShield API for detection and enforcement,
|
|
9
|
-
* instead of running detection locally. This approach:
|
|
10
|
-
*
|
|
11
|
-
* 1. Works reliably in Edge Runtime (no WASM loading issues)
|
|
12
|
-
* 2. Ensures consistent detection across all platforms
|
|
13
|
-
* 3. Applies centralized policies from the dashboard
|
|
14
|
-
* 4. Supports deny lists, thresholds, and path rules
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* // middleware.ts
|
|
19
|
-
* import { withAgentShield } from '@kya-os/agentshield-nextjs/api-middleware';
|
|
20
|
-
*
|
|
21
|
-
* export default withAgentShield({
|
|
22
|
-
* apiKey: process.env.AGENTSHIELD_API_KEY!,
|
|
23
|
-
* // Optional overrides:
|
|
24
|
-
* onBlock: 'redirect', // 'block' | 'redirect' | 'challenge'
|
|
25
|
-
* redirectUrl: '/blocked',
|
|
26
|
-
* skipPaths: ['/api/health', '/_next/*'],
|
|
27
|
-
* });
|
|
28
|
-
*
|
|
29
|
-
* export const config = {
|
|
30
|
-
* matcher: ['/((?!_next/static|favicon.ico).*)'],
|
|
31
|
-
* };
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Middleware configuration
|
|
37
|
-
*/
|
|
38
|
-
interface AgentShieldMiddlewareConfig {
|
|
39
|
-
/** API key (or use AGENTSHIELD_API_KEY env var) */
|
|
40
|
-
apiKey?: string;
|
|
41
|
-
/** API base URL (defaults to production) */
|
|
42
|
-
apiUrl?: string;
|
|
43
|
-
/**
|
|
44
|
-
* Use edge detection for lower latency (~30-50ms vs ~150ms) and better coverage.
|
|
45
|
-
* Edge detection can identify non-JS clients (curl, Python, Claude Code WebFetch)
|
|
46
|
-
* that the pixel cannot detect since they don't execute JavaScript.
|
|
47
|
-
* Set to false to use the Vercel API instead.
|
|
48
|
-
* @default true
|
|
49
|
-
*/
|
|
50
|
-
useEdge?: boolean;
|
|
51
|
-
/** Request timeout in ms (default: 5000) */
|
|
52
|
-
timeout?: number;
|
|
53
|
-
/**
|
|
54
|
-
* Action to take when an agent should be blocked
|
|
55
|
-
* - 'block': Return 403 response
|
|
56
|
-
* - 'redirect': Redirect to redirectUrl
|
|
57
|
-
* - 'challenge': Show a challenge page (future)
|
|
58
|
-
* Default: uses policy from dashboard
|
|
59
|
-
*/
|
|
60
|
-
onBlock?: 'block' | 'redirect' | 'challenge';
|
|
61
|
-
/**
|
|
62
|
-
* URL to redirect to when blocking (if onBlock is 'redirect')
|
|
63
|
-
* Default: uses redirectUrl from dashboard policy
|
|
64
|
-
*/
|
|
65
|
-
redirectUrl?: string;
|
|
66
|
-
/**
|
|
67
|
-
* How the middleware handles a `redirect` / `instruct` action.
|
|
68
|
-
*
|
|
69
|
-
* - `'instruct'` (default): return HTTP 401 with an MCP-I Link header + JSON
|
|
70
|
-
* body pointing the agent at the redirect URL. LLMs surface the URL as a
|
|
71
|
-
* clickable link for the user. Matches the Cloudflare Gateway contract.
|
|
72
|
-
* - `'http'`: legacy behavior — return HTTP 302 with `Location`. Most LLM
|
|
73
|
-
* fetchers won't follow the redirect, so this is only useful when your
|
|
74
|
-
* traffic is real browsers.
|
|
75
|
-
*
|
|
76
|
-
* @default 'instruct'
|
|
77
|
-
*/
|
|
78
|
-
redirectMode?: 'instruct' | 'http';
|
|
79
|
-
/**
|
|
80
|
-
* Custom blocked response
|
|
81
|
-
*/
|
|
82
|
-
blockedResponse?: {
|
|
83
|
-
status?: number;
|
|
84
|
-
message?: string;
|
|
85
|
-
headers?: Record<string, string>;
|
|
86
|
-
};
|
|
87
|
-
/**
|
|
88
|
-
* Paths to skip (in addition to dashboard policy)
|
|
89
|
-
* Supports glob patterns: '/api/*', '/_next/*'
|
|
90
|
-
*/
|
|
91
|
-
skipPaths?: string[];
|
|
92
|
-
/**
|
|
93
|
-
* Only enforce on these paths (overrides dashboard policy)
|
|
94
|
-
*/
|
|
95
|
-
includePaths?: string[];
|
|
96
|
-
/**
|
|
97
|
-
* Callback when an agent is detected
|
|
98
|
-
*/
|
|
99
|
-
onAgentDetected?: (request: NextRequest, decision: EnforcementDecision) => void | Promise<void>;
|
|
100
|
-
/**
|
|
101
|
-
* Callback to customize the blocked response
|
|
102
|
-
*/
|
|
103
|
-
customBlockedResponse?: (request: NextRequest, decision: EnforcementDecision) => NextResponse | Promise<NextResponse>;
|
|
104
|
-
/**
|
|
105
|
-
* Whether to fail open (allow) on API errors
|
|
106
|
-
* Default: true (recommended for production)
|
|
107
|
-
*/
|
|
108
|
-
failOpen?: boolean;
|
|
109
|
-
/**
|
|
110
|
-
* Enable debug logging
|
|
111
|
-
*/
|
|
112
|
-
debug?: boolean;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Create AgentShield middleware with API-based detection
|
|
116
|
-
*
|
|
117
|
-
* @example
|
|
118
|
-
* ```typescript
|
|
119
|
-
* // middleware.ts
|
|
120
|
-
* import { withAgentShield } from '@kya-os/agentshield-nextjs/api-middleware';
|
|
121
|
-
*
|
|
122
|
-
* export default withAgentShield({
|
|
123
|
-
* onBlock: 'block',
|
|
124
|
-
* skipPaths: ['/api/health'],
|
|
125
|
-
* });
|
|
126
|
-
* ```
|
|
127
|
-
*/
|
|
128
|
-
declare function withAgentShield(config?: AgentShieldMiddlewareConfig): (request: NextRequest) => Promise<NextResponse>;
|
|
129
|
-
/**
|
|
130
|
-
* Convenience export for simple setup
|
|
131
|
-
*
|
|
132
|
-
* @example
|
|
133
|
-
* ```typescript
|
|
134
|
-
* // middleware.ts
|
|
135
|
-
* export { agentShieldMiddleware as default } from '@kya-os/agentshield-nextjs/api-middleware';
|
|
136
|
-
* ```
|
|
137
|
-
*/
|
|
138
|
-
declare const agentShieldMiddleware: (request: NextRequest) => Promise<NextResponse>;
|
|
139
|
-
|
|
140
|
-
export { type AgentShieldMiddlewareConfig, agentShieldMiddleware, withAgentShield };
|