@kya-os/agentshield-nextjs 0.3.3 → 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 +7 -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
package/dist/wasm-setup.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var fs = require('fs');
|
|
4
|
-
var path = require('path');
|
|
5
|
-
var agentshield = require('@kya-os/agentshield');
|
|
6
|
-
|
|
7
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
-
|
|
9
|
-
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
10
|
-
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
11
|
-
|
|
12
|
-
var __defProp = Object.defineProperty;
|
|
13
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
14
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
15
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
16
|
-
}) : x)(function(x) {
|
|
17
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
18
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
19
|
-
});
|
|
20
|
-
var __esm = (fn, res) => function __init() {
|
|
21
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
22
|
-
};
|
|
23
|
-
var __export = (target, all) => {
|
|
24
|
-
for (var name in all)
|
|
25
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
// src/nodejs-wasm-loader.ts
|
|
29
|
-
var nodejs_wasm_loader_exports = {};
|
|
30
|
-
__export(nodejs_wasm_loader_exports, {
|
|
31
|
-
getWasmModule: () => getWasmModule,
|
|
32
|
-
isNodejsRuntime: () => isNodejsRuntime,
|
|
33
|
-
isWasmInitialized: () => isWasmInitialized,
|
|
34
|
-
loadWasmNodejs: () => loadWasmNodejs
|
|
35
|
-
});
|
|
36
|
-
async function loadWasmNodejs() {
|
|
37
|
-
if (wasmInitialized) {
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
const possiblePaths = [
|
|
42
|
-
// In node_modules (most likely)
|
|
43
|
-
path__default.default.join(process.cwd(), "node_modules", "@kya-os", "agentshield", "dist", "wasm", "agentshield_wasm_bg.wasm"),
|
|
44
|
-
// In project root (if user copied it)
|
|
45
|
-
path__default.default.join(process.cwd(), "agentshield_wasm_bg.wasm"),
|
|
46
|
-
// Relative to current file
|
|
47
|
-
path__default.default.join(__dirname, "..", "..", "..", "agentshield", "dist", "wasm", "agentshield_wasm_bg.wasm")
|
|
48
|
-
];
|
|
49
|
-
let wasmBuffer = null;
|
|
50
|
-
let loadedPath = null;
|
|
51
|
-
for (const wasmPath of possiblePaths) {
|
|
52
|
-
try {
|
|
53
|
-
if (fs__default.default.existsSync(wasmPath)) {
|
|
54
|
-
wasmBuffer = fs__default.default.readFileSync(wasmPath);
|
|
55
|
-
loadedPath = wasmPath;
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
} catch (e) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
if (!wasmBuffer) {
|
|
63
|
-
console.warn("AgentShield: WASM file not found in any expected location");
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
const bytes = new Uint8Array(wasmBuffer);
|
|
67
|
-
wasmModule = await WebAssembly.compile(bytes);
|
|
68
|
-
agentshield.setWasmModule(wasmModule);
|
|
69
|
-
wasmInitialized = true;
|
|
70
|
-
console.log(`\u2705 AgentShield: WASM loaded successfully from ${loadedPath} (Node.js runtime)`);
|
|
71
|
-
console.log("\u{1F510} Cryptographic verification enabled (95-100% confidence)");
|
|
72
|
-
return true;
|
|
73
|
-
} catch (error) {
|
|
74
|
-
console.warn("\u26A0\uFE0F AgentShield: Failed to load WASM in Node.js runtime:", error);
|
|
75
|
-
console.log("\u{1F4CA} Falling back to pattern detection (85% confidence)");
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
function isNodejsRuntime() {
|
|
80
|
-
return typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined" && typeof __require !== "undefined";
|
|
81
|
-
}
|
|
82
|
-
function getWasmModule() {
|
|
83
|
-
return wasmModule;
|
|
84
|
-
}
|
|
85
|
-
function isWasmInitialized() {
|
|
86
|
-
return wasmInitialized;
|
|
87
|
-
}
|
|
88
|
-
var wasmInitialized, wasmModule;
|
|
89
|
-
var init_nodejs_wasm_loader = __esm({
|
|
90
|
-
"src/nodejs-wasm-loader.ts"() {
|
|
91
|
-
wasmInitialized = false;
|
|
92
|
-
wasmModule = null;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
// src/wasm-setup.ts
|
|
97
|
-
var wasmInitialized2 = false;
|
|
98
|
-
var initPromise = null;
|
|
99
|
-
var initAttempted = false;
|
|
100
|
-
async function setupWasm() {
|
|
101
|
-
if (wasmInitialized2) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
if (initPromise) {
|
|
105
|
-
return initPromise;
|
|
106
|
-
}
|
|
107
|
-
initPromise = doSetupWasm();
|
|
108
|
-
return initPromise;
|
|
109
|
-
}
|
|
110
|
-
async function doSetupWasm() {
|
|
111
|
-
if (initAttempted) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
initAttempted = true;
|
|
115
|
-
try {
|
|
116
|
-
if (typeof process !== "undefined" && process.env.NODE_ENV === "test") {
|
|
117
|
-
wasmInitialized2 = true;
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
const isNodejs = typeof process !== "undefined" && typeof __require !== "undefined" && process.env.NEXT_RUNTIME === "nodejs";
|
|
121
|
-
if (isNodejs) {
|
|
122
|
-
try {
|
|
123
|
-
const { loadWasmNodejs: loadWasmNodejs2 } = await Promise.resolve().then(() => (init_nodejs_wasm_loader(), nodejs_wasm_loader_exports));
|
|
124
|
-
const loaded = await loadWasmNodejs2();
|
|
125
|
-
wasmInitialized2 = true;
|
|
126
|
-
if (loaded) {
|
|
127
|
-
console.log("\u{1F680} AgentShield: Running with full WASM support (Node.js runtime)");
|
|
128
|
-
} else {
|
|
129
|
-
console.log("\u{1F4CA} AgentShield: Using pattern detection (WASM not found)");
|
|
130
|
-
}
|
|
131
|
-
return;
|
|
132
|
-
} catch (error) {
|
|
133
|
-
console.warn("\u26A0\uFE0F AgentShield: Node.js WASM loader failed:", error);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
wasmInitialized2 = true;
|
|
137
|
-
if (process.env.NEXT_RUNTIME === "edge") {
|
|
138
|
-
console.log("\u26A1 AgentShield: Edge Runtime detected - using pattern detection (85% confidence)");
|
|
139
|
-
console.log("\u2705 AgentShield: Ready for AI agent detection");
|
|
140
|
-
}
|
|
141
|
-
} catch (error) {
|
|
142
|
-
wasmInitialized2 = true;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
function isWasmInitialized2() {
|
|
146
|
-
return wasmInitialized2;
|
|
147
|
-
}
|
|
148
|
-
function resetWasmState() {
|
|
149
|
-
wasmInitialized2 = false;
|
|
150
|
-
initPromise = null;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
exports.isWasmInitialized = isWasmInitialized2;
|
|
154
|
-
exports.resetWasmState = resetWasmState;
|
|
155
|
-
exports.setupWasm = setupWasm;
|
|
156
|
-
//# sourceMappingURL=wasm-setup.js.map
|
|
157
|
-
//# sourceMappingURL=wasm-setup.js.map
|
package/dist/wasm-setup.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/nodejs-wasm-loader.ts","../src/wasm-setup.ts"],"names":["path","fs","setWasmModule","wasmInitialized","loadWasmNodejs","isWasmInitialized"],"mappings":"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","file":"wasm-setup.js","sourcesContent":["/**\n * Node.js Runtime WASM Loader for AgentShield\n * \n * This loader uses fs.readFileSync to load WASM in Node.js runtime.\n * It provides full cryptographic verification capabilities.\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { setWasmModule } from '@kya-os/agentshield';\n\nlet wasmInitialized = false;\nlet wasmModule: WebAssembly.Module | null = null;\n\n/**\n * Load WASM module using Node.js fs module\n * This only works in Node.js runtime, not Edge Runtime\n */\nexport async function loadWasmNodejs(): Promise<boolean> {\n if (wasmInitialized) {\n return true;\n }\n\n try {\n // Try multiple possible WASM locations\n const possiblePaths = [\n // In node_modules (most likely)\n path.join(process.cwd(), 'node_modules', '@kya-os', 'agentshield', 'dist', 'wasm', 'agentshield_wasm_bg.wasm'),\n // In project root (if user copied it)\n path.join(process.cwd(), 'agentshield_wasm_bg.wasm'),\n // Relative to current file\n path.join(__dirname, '..', '..', '..', 'agentshield', 'dist', 'wasm', 'agentshield_wasm_bg.wasm'),\n ];\n\n let wasmBuffer: Buffer | null = null;\n let loadedPath: string | null = null;\n\n for (const wasmPath of possiblePaths) {\n try {\n if (fs.existsSync(wasmPath)) {\n wasmBuffer = fs.readFileSync(wasmPath);\n loadedPath = wasmPath;\n break;\n }\n } catch (e) {\n // Try next path\n continue;\n }\n }\n\n if (!wasmBuffer) {\n console.warn('AgentShield: WASM file not found in any expected location');\n return false;\n }\n\n // Convert Buffer to Uint8Array for WebAssembly\n // This is the proper way to handle Buffer -> ArrayBuffer conversion\n const bytes = new Uint8Array(wasmBuffer);\n wasmModule = await WebAssembly.compile(bytes);\n \n // Set the module in AgentShield\n setWasmModule(wasmModule);\n \n wasmInitialized = true;\n console.log(`✅ AgentShield: WASM loaded successfully from ${loadedPath} (Node.js runtime)`);\n console.log('🔐 Cryptographic verification enabled (95-100% confidence)');\n \n return true;\n } catch (error) {\n console.warn('⚠️ AgentShield: Failed to load WASM in Node.js runtime:', error);\n console.log('📊 Falling back to pattern detection (85% confidence)');\n return false;\n }\n}\n\n/**\n * Check if we're in Node.js runtime\n */\nexport function isNodejsRuntime(): boolean {\n return typeof process !== 'undefined' && \n typeof process.versions !== 'undefined' && \n typeof process.versions.node !== 'undefined' &&\n typeof require !== 'undefined';\n}\n\n/**\n * Get the loaded WASM module\n */\nexport function getWasmModule(): WebAssembly.Module | null {\n return wasmModule;\n}\n\n/**\n * Check if WASM is initialized\n */\nexport function isWasmInitialized(): boolean {\n return wasmInitialized;\n}","/**\n * WASM Setup for AgentShield in Next.js Edge Runtime\n * \n * This module handles WASM initialization for cryptographic signature verification.\n * Designed to work without top-level await to avoid Next.js middleware issues.\n * \n * Usage in middleware.ts:\n * ```typescript\n * import { setupWasm } from '@kya-os/agentshield-nextjs/wasm-setup';\n * import { createAgentShieldMiddleware } from '@kya-os/agentshield-nextjs';\n * \n * export async function middleware(request: NextRequest) {\n * // Initialize WASM inside the middleware function\n * await setupWasm();\n * \n * const agentShieldMiddleware = createAgentShieldMiddleware({...});\n * return agentShieldMiddleware(request);\n * }\n * ```\n */\n\nlet wasmInitialized = false;\nlet initPromise: Promise<void> | null = null;\nlet initAttempted = false;\n\n/**\n * Initialize WASM module for AgentShield\n * \n * This function:\n * - Loads WASM in production/Edge Runtime for cryptographic verification\n * - Skips WASM in test environments (Jest) automatically\n * - Is safe to call multiple times (idempotent)\n * - Handles errors gracefully with fallback to pattern detection\n * \n * @returns Promise that resolves when initialization is complete\n */\nexport async function setupWasm(): Promise<void> {\n // Already initialized, return immediately\n if (wasmInitialized) {\n return;\n }\n\n // Initialization in progress, return the existing promise\n if (initPromise) {\n return initPromise;\n }\n\n // Start initialization\n initPromise = doSetupWasm();\n return initPromise;\n}\n\nasync function doSetupWasm(): Promise<void> {\n // Prevent multiple initialization attempts\n if (initAttempted) {\n return;\n }\n initAttempted = true;\n\n try {\n // Skip WASM in test environments\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') {\n wasmInitialized = true;\n return;\n }\n\n // Check if we're in Node.js runtime (middleware with runtime: 'nodejs')\n const isNodejs = typeof process !== 'undefined' && \n typeof require !== 'undefined' &&\n process.env.NEXT_RUNTIME === 'nodejs';\n\n if (isNodejs) {\n // We're in Node.js runtime - use fs to load WASM!\n try {\n const { loadWasmNodejs } = await import('./nodejs-wasm-loader');\n const loaded = await loadWasmNodejs();\n wasmInitialized = true;\n \n if (loaded) {\n console.log('🚀 AgentShield: Running with full WASM support (Node.js runtime)');\n } else {\n console.log('📊 AgentShield: Using pattern detection (WASM not found)');\n }\n return;\n } catch (error) {\n console.warn('⚠️ AgentShield: Node.js WASM loader failed:', error);\n }\n }\n\n // Edge Runtime or build time - skip WASM loading\n // Pattern detection will be used (85% confidence)\n wasmInitialized = true;\n \n if (process.env.NEXT_RUNTIME === 'edge') {\n console.log('⚡ AgentShield: Edge Runtime detected - using pattern detection (85% confidence)');\n console.log('✅ AgentShield: Ready for AI agent detection');\n }\n } catch (error) {\n // Mark as initialized to prevent retries\n wasmInitialized = true;\n }\n}\n\n/**\n * Check if WASM has been initialized\n * \n * @returns true if WASM setup has been attempted (success or failure)\n */\nexport function isWasmInitialized(): boolean {\n return wasmInitialized;\n}\n\n/**\n * Reset WASM initialization state (mainly for testing)\n * \n * @internal\n */\nexport function resetWasmState(): void {\n wasmInitialized = false;\n initPromise = null;\n}"]}
|
package/dist/wasm-setup.mjs
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { setWasmModule } from '@kya-os/agentshield';
|
|
4
|
-
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
8
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
9
|
-
}) : x)(function(x) {
|
|
10
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
11
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
12
|
-
});
|
|
13
|
-
var __esm = (fn, res) => function __init() {
|
|
14
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
15
|
-
};
|
|
16
|
-
var __export = (target, all) => {
|
|
17
|
-
for (var name in all)
|
|
18
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
// src/nodejs-wasm-loader.ts
|
|
22
|
-
var nodejs_wasm_loader_exports = {};
|
|
23
|
-
__export(nodejs_wasm_loader_exports, {
|
|
24
|
-
getWasmModule: () => getWasmModule,
|
|
25
|
-
isNodejsRuntime: () => isNodejsRuntime,
|
|
26
|
-
isWasmInitialized: () => isWasmInitialized,
|
|
27
|
-
loadWasmNodejs: () => loadWasmNodejs
|
|
28
|
-
});
|
|
29
|
-
async function loadWasmNodejs() {
|
|
30
|
-
if (wasmInitialized) {
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
try {
|
|
34
|
-
const possiblePaths = [
|
|
35
|
-
// In node_modules (most likely)
|
|
36
|
-
path.join(process.cwd(), "node_modules", "@kya-os", "agentshield", "dist", "wasm", "agentshield_wasm_bg.wasm"),
|
|
37
|
-
// In project root (if user copied it)
|
|
38
|
-
path.join(process.cwd(), "agentshield_wasm_bg.wasm"),
|
|
39
|
-
// Relative to current file
|
|
40
|
-
path.join(__dirname, "..", "..", "..", "agentshield", "dist", "wasm", "agentshield_wasm_bg.wasm")
|
|
41
|
-
];
|
|
42
|
-
let wasmBuffer = null;
|
|
43
|
-
let loadedPath = null;
|
|
44
|
-
for (const wasmPath of possiblePaths) {
|
|
45
|
-
try {
|
|
46
|
-
if (fs.existsSync(wasmPath)) {
|
|
47
|
-
wasmBuffer = fs.readFileSync(wasmPath);
|
|
48
|
-
loadedPath = wasmPath;
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
} catch (e) {
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (!wasmBuffer) {
|
|
56
|
-
console.warn("AgentShield: WASM file not found in any expected location");
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
const bytes = new Uint8Array(wasmBuffer);
|
|
60
|
-
wasmModule = await WebAssembly.compile(bytes);
|
|
61
|
-
setWasmModule(wasmModule);
|
|
62
|
-
wasmInitialized = true;
|
|
63
|
-
console.log(`\u2705 AgentShield: WASM loaded successfully from ${loadedPath} (Node.js runtime)`);
|
|
64
|
-
console.log("\u{1F510} Cryptographic verification enabled (95-100% confidence)");
|
|
65
|
-
return true;
|
|
66
|
-
} catch (error) {
|
|
67
|
-
console.warn("\u26A0\uFE0F AgentShield: Failed to load WASM in Node.js runtime:", error);
|
|
68
|
-
console.log("\u{1F4CA} Falling back to pattern detection (85% confidence)");
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function isNodejsRuntime() {
|
|
73
|
-
return typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined" && typeof __require !== "undefined";
|
|
74
|
-
}
|
|
75
|
-
function getWasmModule() {
|
|
76
|
-
return wasmModule;
|
|
77
|
-
}
|
|
78
|
-
function isWasmInitialized() {
|
|
79
|
-
return wasmInitialized;
|
|
80
|
-
}
|
|
81
|
-
var wasmInitialized, wasmModule;
|
|
82
|
-
var init_nodejs_wasm_loader = __esm({
|
|
83
|
-
"src/nodejs-wasm-loader.ts"() {
|
|
84
|
-
wasmInitialized = false;
|
|
85
|
-
wasmModule = null;
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
// src/wasm-setup.ts
|
|
90
|
-
var wasmInitialized2 = false;
|
|
91
|
-
var initPromise = null;
|
|
92
|
-
var initAttempted = false;
|
|
93
|
-
async function setupWasm() {
|
|
94
|
-
if (wasmInitialized2) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
if (initPromise) {
|
|
98
|
-
return initPromise;
|
|
99
|
-
}
|
|
100
|
-
initPromise = doSetupWasm();
|
|
101
|
-
return initPromise;
|
|
102
|
-
}
|
|
103
|
-
async function doSetupWasm() {
|
|
104
|
-
if (initAttempted) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
initAttempted = true;
|
|
108
|
-
try {
|
|
109
|
-
if (typeof process !== "undefined" && process.env.NODE_ENV === "test") {
|
|
110
|
-
wasmInitialized2 = true;
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
const isNodejs = typeof process !== "undefined" && typeof __require !== "undefined" && process.env.NEXT_RUNTIME === "nodejs";
|
|
114
|
-
if (isNodejs) {
|
|
115
|
-
try {
|
|
116
|
-
const { loadWasmNodejs: loadWasmNodejs2 } = await Promise.resolve().then(() => (init_nodejs_wasm_loader(), nodejs_wasm_loader_exports));
|
|
117
|
-
const loaded = await loadWasmNodejs2();
|
|
118
|
-
wasmInitialized2 = true;
|
|
119
|
-
if (loaded) {
|
|
120
|
-
console.log("\u{1F680} AgentShield: Running with full WASM support (Node.js runtime)");
|
|
121
|
-
} else {
|
|
122
|
-
console.log("\u{1F4CA} AgentShield: Using pattern detection (WASM not found)");
|
|
123
|
-
}
|
|
124
|
-
return;
|
|
125
|
-
} catch (error) {
|
|
126
|
-
console.warn("\u26A0\uFE0F AgentShield: Node.js WASM loader failed:", error);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
wasmInitialized2 = true;
|
|
130
|
-
if (process.env.NEXT_RUNTIME === "edge") {
|
|
131
|
-
console.log("\u26A1 AgentShield: Edge Runtime detected - using pattern detection (85% confidence)");
|
|
132
|
-
console.log("\u2705 AgentShield: Ready for AI agent detection");
|
|
133
|
-
}
|
|
134
|
-
} catch (error) {
|
|
135
|
-
wasmInitialized2 = true;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
function isWasmInitialized2() {
|
|
139
|
-
return wasmInitialized2;
|
|
140
|
-
}
|
|
141
|
-
function resetWasmState() {
|
|
142
|
-
wasmInitialized2 = false;
|
|
143
|
-
initPromise = null;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export { isWasmInitialized2 as isWasmInitialized, resetWasmState, setupWasm };
|
|
147
|
-
//# sourceMappingURL=wasm-setup.mjs.map
|
|
148
|
-
//# sourceMappingURL=wasm-setup.mjs.map
|
package/dist/wasm-setup.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/nodejs-wasm-loader.ts","../src/wasm-setup.ts"],"names":["wasmInitialized","loadWasmNodejs","isWasmInitialized"],"mappings":"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","file":"wasm-setup.mjs","sourcesContent":["/**\n * Node.js Runtime WASM Loader for AgentShield\n * \n * This loader uses fs.readFileSync to load WASM in Node.js runtime.\n * It provides full cryptographic verification capabilities.\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { setWasmModule } from '@kya-os/agentshield';\n\nlet wasmInitialized = false;\nlet wasmModule: WebAssembly.Module | null = null;\n\n/**\n * Load WASM module using Node.js fs module\n * This only works in Node.js runtime, not Edge Runtime\n */\nexport async function loadWasmNodejs(): Promise<boolean> {\n if (wasmInitialized) {\n return true;\n }\n\n try {\n // Try multiple possible WASM locations\n const possiblePaths = [\n // In node_modules (most likely)\n path.join(process.cwd(), 'node_modules', '@kya-os', 'agentshield', 'dist', 'wasm', 'agentshield_wasm_bg.wasm'),\n // In project root (if user copied it)\n path.join(process.cwd(), 'agentshield_wasm_bg.wasm'),\n // Relative to current file\n path.join(__dirname, '..', '..', '..', 'agentshield', 'dist', 'wasm', 'agentshield_wasm_bg.wasm'),\n ];\n\n let wasmBuffer: Buffer | null = null;\n let loadedPath: string | null = null;\n\n for (const wasmPath of possiblePaths) {\n try {\n if (fs.existsSync(wasmPath)) {\n wasmBuffer = fs.readFileSync(wasmPath);\n loadedPath = wasmPath;\n break;\n }\n } catch (e) {\n // Try next path\n continue;\n }\n }\n\n if (!wasmBuffer) {\n console.warn('AgentShield: WASM file not found in any expected location');\n return false;\n }\n\n // Convert Buffer to Uint8Array for WebAssembly\n // This is the proper way to handle Buffer -> ArrayBuffer conversion\n const bytes = new Uint8Array(wasmBuffer);\n wasmModule = await WebAssembly.compile(bytes);\n \n // Set the module in AgentShield\n setWasmModule(wasmModule);\n \n wasmInitialized = true;\n console.log(`✅ AgentShield: WASM loaded successfully from ${loadedPath} (Node.js runtime)`);\n console.log('🔐 Cryptographic verification enabled (95-100% confidence)');\n \n return true;\n } catch (error) {\n console.warn('⚠️ AgentShield: Failed to load WASM in Node.js runtime:', error);\n console.log('📊 Falling back to pattern detection (85% confidence)');\n return false;\n }\n}\n\n/**\n * Check if we're in Node.js runtime\n */\nexport function isNodejsRuntime(): boolean {\n return typeof process !== 'undefined' && \n typeof process.versions !== 'undefined' && \n typeof process.versions.node !== 'undefined' &&\n typeof require !== 'undefined';\n}\n\n/**\n * Get the loaded WASM module\n */\nexport function getWasmModule(): WebAssembly.Module | null {\n return wasmModule;\n}\n\n/**\n * Check if WASM is initialized\n */\nexport function isWasmInitialized(): boolean {\n return wasmInitialized;\n}","/**\n * WASM Setup for AgentShield in Next.js Edge Runtime\n * \n * This module handles WASM initialization for cryptographic signature verification.\n * Designed to work without top-level await to avoid Next.js middleware issues.\n * \n * Usage in middleware.ts:\n * ```typescript\n * import { setupWasm } from '@kya-os/agentshield-nextjs/wasm-setup';\n * import { createAgentShieldMiddleware } from '@kya-os/agentshield-nextjs';\n * \n * export async function middleware(request: NextRequest) {\n * // Initialize WASM inside the middleware function\n * await setupWasm();\n * \n * const agentShieldMiddleware = createAgentShieldMiddleware({...});\n * return agentShieldMiddleware(request);\n * }\n * ```\n */\n\nlet wasmInitialized = false;\nlet initPromise: Promise<void> | null = null;\nlet initAttempted = false;\n\n/**\n * Initialize WASM module for AgentShield\n * \n * This function:\n * - Loads WASM in production/Edge Runtime for cryptographic verification\n * - Skips WASM in test environments (Jest) automatically\n * - Is safe to call multiple times (idempotent)\n * - Handles errors gracefully with fallback to pattern detection\n * \n * @returns Promise that resolves when initialization is complete\n */\nexport async function setupWasm(): Promise<void> {\n // Already initialized, return immediately\n if (wasmInitialized) {\n return;\n }\n\n // Initialization in progress, return the existing promise\n if (initPromise) {\n return initPromise;\n }\n\n // Start initialization\n initPromise = doSetupWasm();\n return initPromise;\n}\n\nasync function doSetupWasm(): Promise<void> {\n // Prevent multiple initialization attempts\n if (initAttempted) {\n return;\n }\n initAttempted = true;\n\n try {\n // Skip WASM in test environments\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') {\n wasmInitialized = true;\n return;\n }\n\n // Check if we're in Node.js runtime (middleware with runtime: 'nodejs')\n const isNodejs = typeof process !== 'undefined' && \n typeof require !== 'undefined' &&\n process.env.NEXT_RUNTIME === 'nodejs';\n\n if (isNodejs) {\n // We're in Node.js runtime - use fs to load WASM!\n try {\n const { loadWasmNodejs } = await import('./nodejs-wasm-loader');\n const loaded = await loadWasmNodejs();\n wasmInitialized = true;\n \n if (loaded) {\n console.log('🚀 AgentShield: Running with full WASM support (Node.js runtime)');\n } else {\n console.log('📊 AgentShield: Using pattern detection (WASM not found)');\n }\n return;\n } catch (error) {\n console.warn('⚠️ AgentShield: Node.js WASM loader failed:', error);\n }\n }\n\n // Edge Runtime or build time - skip WASM loading\n // Pattern detection will be used (85% confidence)\n wasmInitialized = true;\n \n if (process.env.NEXT_RUNTIME === 'edge') {\n console.log('⚡ AgentShield: Edge Runtime detected - using pattern detection (85% confidence)');\n console.log('✅ AgentShield: Ready for AI agent detection');\n }\n } catch (error) {\n // Mark as initialized to prevent retries\n wasmInitialized = true;\n }\n}\n\n/**\n * Check if WASM has been initialized\n * \n * @returns true if WASM setup has been attempted (success or failure)\n */\nexport function isWasmInitialized(): boolean {\n return wasmInitialized;\n}\n\n/**\n * Reset WASM initialization state (mainly for testing)\n * \n * @internal\n */\nexport function resetWasmState(): void {\n wasmInitialized = false;\n initPromise = null;\n}"]}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentShield Middleware Template with WASM (95-100% Confidence)
|
|
3
|
-
*
|
|
4
|
-
* This template provides full cryptographic verification for AI agents
|
|
5
|
-
* following Next.js official documentation for WebAssembly in Edge Runtime.
|
|
6
|
-
*
|
|
7
|
-
* Installation:
|
|
8
|
-
* 1. Copy this file to your project root as `middleware.ts`
|
|
9
|
-
* 2. Install packages: npm install @kya-os/agentshield @kya-os/agentshield-nextjs
|
|
10
|
-
* 3. Deploy to Vercel for Edge Runtime support
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { NextResponse } from 'next/server';
|
|
14
|
-
import type { NextRequest } from 'next/server';
|
|
15
|
-
|
|
16
|
-
// CRITICAL: Import WASM module with ?module suffix for Edge Runtime
|
|
17
|
-
// This MUST be at the top of the file, before any other AgentShield imports
|
|
18
|
-
import wasmModule from '@kya-os/agentshield/wasm?module';
|
|
19
|
-
|
|
20
|
-
// Now import the middleware creator
|
|
21
|
-
import { createWasmAgentShieldMiddleware, instantiateWasm } from '@kya-os/agentshield-nextjs/wasm-middleware';
|
|
22
|
-
|
|
23
|
-
// Initialize WASM module once at startup
|
|
24
|
-
let wasmInstancePromise: Promise<WebAssembly.Instance> | null = null;
|
|
25
|
-
|
|
26
|
-
async function getWasmInstance() {
|
|
27
|
-
if (!wasmInstancePromise) {
|
|
28
|
-
wasmInstancePromise = instantiateWasm(wasmModule);
|
|
29
|
-
}
|
|
30
|
-
return wasmInstancePromise;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export async function middleware(request: NextRequest) {
|
|
34
|
-
try {
|
|
35
|
-
// Get or create WASM instance
|
|
36
|
-
const wasmInstance = await getWasmInstance();
|
|
37
|
-
|
|
38
|
-
// Create middleware with WASM support
|
|
39
|
-
const agentShieldMiddleware = createWasmAgentShieldMiddleware({
|
|
40
|
-
wasmInstance,
|
|
41
|
-
|
|
42
|
-
// Skip authentication and static assets
|
|
43
|
-
skipPaths: ['/api/auth', '/_next', '/favicon.ico', '/public'],
|
|
44
|
-
|
|
45
|
-
// What to do when agent is detected
|
|
46
|
-
onAgentDetected: async (result) => {
|
|
47
|
-
// With WASM: 95-100% confidence for cryptographically verified agents
|
|
48
|
-
console.log(`🤖 AI Agent detected:`, {
|
|
49
|
-
agent: result.agent,
|
|
50
|
-
confidence: `${Math.round(result.confidence * 100)}%`,
|
|
51
|
-
verification: result.verificationMethod, // 'signature' with WASM, 'pattern' without
|
|
52
|
-
risk: result.riskLevel,
|
|
53
|
-
timestamp: result.timestamp
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
// You can add custom logic here:
|
|
57
|
-
// - Log to analytics
|
|
58
|
-
// - Send alerts
|
|
59
|
-
// - Apply rate limiting
|
|
60
|
-
// - etc.
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
// Set to true to block AI agents
|
|
64
|
-
blockOnHighConfidence: false, // Change to true to block agents
|
|
65
|
-
|
|
66
|
-
// Minimum confidence to trigger blocking (0.8 = 80%)
|
|
67
|
-
confidenceThreshold: 0.8,
|
|
68
|
-
|
|
69
|
-
// Custom response when blocking
|
|
70
|
-
blockedResponse: {
|
|
71
|
-
status: 403,
|
|
72
|
-
message: 'AI agent access restricted',
|
|
73
|
-
headers: {
|
|
74
|
-
'Content-Type': 'application/json',
|
|
75
|
-
'X-Blocked-Reason': 'ai-agent-detected'
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// Run AgentShield detection
|
|
81
|
-
const response = await agentShieldMiddleware(request);
|
|
82
|
-
|
|
83
|
-
// Add security headers to all responses
|
|
84
|
-
response.headers.set('X-Frame-Options', 'DENY');
|
|
85
|
-
response.headers.set('X-Content-Type-Options', 'nosniff');
|
|
86
|
-
response.headers.set('Referrer-Policy', 'strict-origin-when-cross-origin');
|
|
87
|
-
|
|
88
|
-
return response;
|
|
89
|
-
|
|
90
|
-
} catch (error) {
|
|
91
|
-
// If WASM fails to load, fall back to pattern detection (85% confidence)
|
|
92
|
-
console.warn('⚠️ WASM initialization failed, using pattern detection:', error);
|
|
93
|
-
|
|
94
|
-
// You could use the regular middleware here as fallback
|
|
95
|
-
// For now, just continue
|
|
96
|
-
return NextResponse.next();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Configure which paths the middleware runs on
|
|
101
|
-
export const config = {
|
|
102
|
-
matcher: [
|
|
103
|
-
/*
|
|
104
|
-
* Match all request paths except for the ones starting with:
|
|
105
|
-
* - _next/static (static files)
|
|
106
|
-
* - _next/image (image optimization files)
|
|
107
|
-
* - favicon.ico (favicon file)
|
|
108
|
-
* - public folder
|
|
109
|
-
*/
|
|
110
|
-
{
|
|
111
|
-
source: '/((?!_next/static|_next/image|favicon.ico|public).*)',
|
|
112
|
-
missing: [
|
|
113
|
-
{ type: 'header', key: 'next-router-prefetch' },
|
|
114
|
-
{ type: 'header', key: 'purpose', value: 'prefetch' },
|
|
115
|
-
],
|
|
116
|
-
},
|
|
117
|
-
],
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* TypeScript Support
|
|
122
|
-
*
|
|
123
|
-
* Add this to a `types/wasm.d.ts` file in your project:
|
|
124
|
-
*
|
|
125
|
-
* declare module '@kya-os/agentshield/wasm?module' {
|
|
126
|
-
* const value: WebAssembly.Module;
|
|
127
|
-
* export default value;
|
|
128
|
-
* }
|
|
129
|
-
*/
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* What You'll See in Logs:
|
|
133
|
-
*
|
|
134
|
-
* With WASM (95-100% confidence):
|
|
135
|
-
* 🤖 AI Agent detected: {
|
|
136
|
-
* agent: 'ChatGPT-User',
|
|
137
|
-
* confidence: '100%',
|
|
138
|
-
* verification: 'signature', // Cryptographically verified!
|
|
139
|
-
* risk: 'high',
|
|
140
|
-
* timestamp: '2024-01-01T00:00:00.000Z'
|
|
141
|
-
* }
|
|
142
|
-
*
|
|
143
|
-
* Without WASM (85% confidence):
|
|
144
|
-
* 🤖 AI Agent detected: {
|
|
145
|
-
* agent: 'ChatGPT-User',
|
|
146
|
-
* confidence: '85%',
|
|
147
|
-
* verification: 'pattern', // Pattern matching only
|
|
148
|
-
* risk: 'medium',
|
|
149
|
-
* timestamp: '2024-01-01T00:00:00.000Z'
|
|
150
|
-
* }
|
|
151
|
-
*/
|