@kya-os/checkpoint-nextjs 1.1.1 → 1.2.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/CHANGELOG.md +174 -0
- package/EDGE_RUNTIME_WASM_SETUP.md +4 -10
- package/README.md +13 -0
- package/bin/setup-edge-wasm.js +40 -32
- package/dist/api-client.d.mts +10 -10
- package/dist/api-client.d.ts +10 -10
- package/dist/create-middleware.d.mts +7 -2
- package/dist/create-middleware.d.ts +7 -2
- package/dist/edge/index.d.mts +3 -3
- package/dist/edge/index.d.ts +3 -3
- package/dist/edge/index.js +16 -3
- package/dist/edge/index.mjs +16 -3
- package/dist/edge-runtime-loader.d.mts +17 -28
- package/dist/edge-runtime-loader.d.ts +17 -28
- package/dist/edge-runtime-loader.js +43 -14
- package/dist/edge-runtime-loader.mjs +44 -15
- package/dist/edge-wasm-middleware.d.mts +28 -34
- package/dist/edge-wasm-middleware.d.ts +28 -34
- package/dist/edge-wasm-middleware.js +16 -306
- package/dist/edge-wasm-middleware.mjs +16 -307
- package/dist/index.js +5 -2
- package/dist/index.mjs +6 -3
- package/dist/middleware-edge.js +2 -1
- package/dist/middleware-edge.mjs +2 -1
- package/dist/middleware-node.d.mts +16 -1
- package/dist/middleware-node.d.ts +16 -1
- package/dist/middleware-node.js +2 -1
- package/dist/middleware-node.mjs +2 -1
- package/dist/nodejs-wasm-loader.d.mts +26 -9
- package/dist/nodejs-wasm-loader.d.ts +26 -9
- package/dist/nodejs-wasm-loader.js +21 -78
- package/dist/nodejs-wasm-loader.mjs +21 -74
- package/dist/session-tracker.d.mts +2 -2
- package/dist/session-tracker.d.ts +2 -2
- package/dist/session-tracker.js +3 -1
- package/dist/session-tracker.mjs +4 -2
- package/dist/wasm-middleware.d.mts +19 -3
- package/dist/wasm-middleware.d.ts +19 -3
- package/dist/wasm-middleware.js +32 -3
- package/dist/wasm-middleware.mjs +32 -4
- package/dist/wasm-setup.js +29 -81
- package/dist/wasm-setup.mjs +29 -76
- package/package.json +8 -6
- package/templates/middleware-wasm-100.ts +11 -3
package/dist/wasm-middleware.js
CHANGED
|
@@ -2,10 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
var server = require('next/server');
|
|
4
4
|
var checkpoint = require('@kya-os/checkpoint');
|
|
5
|
-
var checkpointShared = require('@kya-os/checkpoint-shared');
|
|
6
5
|
|
|
7
6
|
// src/wasm-middleware.ts
|
|
7
|
+
|
|
8
|
+
// src/local-detection-gate.ts
|
|
9
|
+
function isDetectedAgentForLocalGate(result) {
|
|
10
|
+
return result.isAgent === true;
|
|
11
|
+
}
|
|
12
|
+
function evaluateLocalDetectionGate(result, config) {
|
|
13
|
+
if (!isDetectedAgentForLocalGate(result)) {
|
|
14
|
+
return { action: "allow", shouldNotify: false };
|
|
15
|
+
}
|
|
16
|
+
if ((result.confidence ?? 0) >= config.confidenceThreshold) {
|
|
17
|
+
return { action: config.defaultAction, shouldNotify: true };
|
|
18
|
+
}
|
|
19
|
+
return { action: "allow", shouldNotify: false };
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// src/wasm-middleware.ts
|
|
23
|
+
var _createWasmAgentShieldWarned = false;
|
|
24
|
+
function warnCreateWasmAgentShieldDeprecated() {
|
|
25
|
+
if (_createWasmAgentShieldWarned) return;
|
|
26
|
+
_createWasmAgentShieldWarned = true;
|
|
27
|
+
if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
|
|
28
|
+
console.warn(
|
|
29
|
+
"[Checkpoint] createWasmAgentShieldMiddleware is deprecated and will be removed in the next minor. It wraps the legacy AgentDetector class; Stage 1 detection now lives in the Rust kya-os-engine (PDM-1). Migrate to `withCheckpoint` from @kya-os/checkpoint-nextjs \u2014 engine-backed and runs envelope verification. See packages/checkpoint-nextjs/CHANGELOG.md for the recipe."
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
function __resetCreateWasmAgentShieldWarningForTests() {
|
|
33
|
+
_createWasmAgentShieldWarned = false;
|
|
34
|
+
}
|
|
8
35
|
function createWasmAgentShieldMiddleware(config) {
|
|
36
|
+
warnCreateWasmAgentShieldDeprecated();
|
|
9
37
|
const {
|
|
10
38
|
onAgentDetected,
|
|
11
39
|
blockOnHighConfidence = false,
|
|
@@ -45,11 +73,11 @@ function createWasmAgentShieldMiddleware(config) {
|
|
|
45
73
|
// Updated to 0-100 scale (was 0.7)
|
|
46
74
|
timestamp: result.timestamp instanceof Date ? result.timestamp.toISOString() : new Date(result.timestamp).toISOString()
|
|
47
75
|
};
|
|
48
|
-
const decision =
|
|
76
|
+
const decision = evaluateLocalDetectionGate(enhancedResult, {
|
|
49
77
|
confidenceThreshold,
|
|
50
78
|
defaultAction: blockOnHighConfidence ? "block" : "allow"
|
|
51
79
|
});
|
|
52
|
-
if (onAgentDetected &&
|
|
80
|
+
if (onAgentDetected && isDetectedAgentForLocalGate(enhancedResult)) {
|
|
53
81
|
await onAgentDetected(enhancedResult);
|
|
54
82
|
}
|
|
55
83
|
if (decision.action === "block") {
|
|
@@ -92,5 +120,6 @@ async function instantiateWasm(wasmModule) {
|
|
|
92
120
|
}
|
|
93
121
|
}
|
|
94
122
|
|
|
123
|
+
exports.__resetCreateWasmAgentShieldWarningForTests = __resetCreateWasmAgentShieldWarningForTests;
|
|
95
124
|
exports.createWasmAgentShieldMiddleware = createWasmAgentShieldMiddleware;
|
|
96
125
|
exports.instantiateWasm = instantiateWasm;
|
package/dist/wasm-middleware.mjs
CHANGED
|
@@ -1,9 +1,37 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
2
|
import { AgentDetector } from '@kya-os/checkpoint';
|
|
3
|
-
import { evaluateEnforcement, shouldEnforce } from '@kya-os/checkpoint-shared';
|
|
4
3
|
|
|
5
4
|
// src/wasm-middleware.ts
|
|
5
|
+
|
|
6
|
+
// src/local-detection-gate.ts
|
|
7
|
+
function isDetectedAgentForLocalGate(result) {
|
|
8
|
+
return result.isAgent === true;
|
|
9
|
+
}
|
|
10
|
+
function evaluateLocalDetectionGate(result, config) {
|
|
11
|
+
if (!isDetectedAgentForLocalGate(result)) {
|
|
12
|
+
return { action: "allow", shouldNotify: false };
|
|
13
|
+
}
|
|
14
|
+
if ((result.confidence ?? 0) >= config.confidenceThreshold) {
|
|
15
|
+
return { action: config.defaultAction, shouldNotify: true };
|
|
16
|
+
}
|
|
17
|
+
return { action: "allow", shouldNotify: false };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// src/wasm-middleware.ts
|
|
21
|
+
var _createWasmAgentShieldWarned = false;
|
|
22
|
+
function warnCreateWasmAgentShieldDeprecated() {
|
|
23
|
+
if (_createWasmAgentShieldWarned) return;
|
|
24
|
+
_createWasmAgentShieldWarned = true;
|
|
25
|
+
if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
|
|
26
|
+
console.warn(
|
|
27
|
+
"[Checkpoint] createWasmAgentShieldMiddleware is deprecated and will be removed in the next minor. It wraps the legacy AgentDetector class; Stage 1 detection now lives in the Rust kya-os-engine (PDM-1). Migrate to `withCheckpoint` from @kya-os/checkpoint-nextjs \u2014 engine-backed and runs envelope verification. See packages/checkpoint-nextjs/CHANGELOG.md for the recipe."
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
function __resetCreateWasmAgentShieldWarningForTests() {
|
|
31
|
+
_createWasmAgentShieldWarned = false;
|
|
32
|
+
}
|
|
6
33
|
function createWasmAgentShieldMiddleware(config) {
|
|
34
|
+
warnCreateWasmAgentShieldDeprecated();
|
|
7
35
|
const {
|
|
8
36
|
onAgentDetected,
|
|
9
37
|
blockOnHighConfidence = false,
|
|
@@ -43,11 +71,11 @@ function createWasmAgentShieldMiddleware(config) {
|
|
|
43
71
|
// Updated to 0-100 scale (was 0.7)
|
|
44
72
|
timestamp: result.timestamp instanceof Date ? result.timestamp.toISOString() : new Date(result.timestamp).toISOString()
|
|
45
73
|
};
|
|
46
|
-
const decision =
|
|
74
|
+
const decision = evaluateLocalDetectionGate(enhancedResult, {
|
|
47
75
|
confidenceThreshold,
|
|
48
76
|
defaultAction: blockOnHighConfidence ? "block" : "allow"
|
|
49
77
|
});
|
|
50
|
-
if (onAgentDetected &&
|
|
78
|
+
if (onAgentDetected && isDetectedAgentForLocalGate(enhancedResult)) {
|
|
51
79
|
await onAgentDetected(enhancedResult);
|
|
52
80
|
}
|
|
53
81
|
if (decision.action === "block") {
|
|
@@ -90,4 +118,4 @@ async function instantiateWasm(wasmModule) {
|
|
|
90
118
|
}
|
|
91
119
|
}
|
|
92
120
|
|
|
93
|
-
export { createWasmAgentShieldMiddleware, instantiateWasm };
|
|
121
|
+
export { __resetCreateWasmAgentShieldWarningForTests, createWasmAgentShieldMiddleware, instantiateWasm };
|
package/dist/wasm-setup.js
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var fs = require('fs');
|
|
4
|
-
var path = require('path');
|
|
5
|
-
var checkpoint = require('@kya-os/checkpoint');
|
|
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
3
|
var __defProp = Object.defineProperty;
|
|
13
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
14
5
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
@@ -28,94 +19,51 @@ var __export = (target, all) => {
|
|
|
28
19
|
// src/nodejs-wasm-loader.ts
|
|
29
20
|
var nodejs_wasm_loader_exports = {};
|
|
30
21
|
__export(nodejs_wasm_loader_exports, {
|
|
22
|
+
__resetNodejsWasmWarningForTests: () => __resetNodejsWasmWarningForTests,
|
|
31
23
|
getWasmModule: () => getWasmModule,
|
|
32
24
|
isNodejsRuntime: () => isNodejsRuntime,
|
|
33
25
|
isWasmInitialized: () => isWasmInitialized,
|
|
34
26
|
loadWasmNodejs: () => loadWasmNodejs
|
|
35
27
|
});
|
|
28
|
+
function warnNodejsWasmDeprecated() {
|
|
29
|
+
if (_nodejsWasmWarned) return;
|
|
30
|
+
_nodejsWasmWarned = true;
|
|
31
|
+
if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
|
|
32
|
+
console.warn(`[Checkpoint] ${MIGRATION_ERROR}`);
|
|
33
|
+
}
|
|
34
|
+
function __resetNodejsWasmWarningForTests() {
|
|
35
|
+
_nodejsWasmWarned = false;
|
|
36
|
+
}
|
|
36
37
|
async function loadWasmNodejs() {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
const possiblePaths = [
|
|
42
|
-
// In node_modules (most likely)
|
|
43
|
-
path__default.default.join(
|
|
44
|
-
process.cwd(),
|
|
45
|
-
"node_modules",
|
|
46
|
-
"@kya-os",
|
|
47
|
-
"agentshield",
|
|
48
|
-
"dist",
|
|
49
|
-
"wasm",
|
|
50
|
-
"agentshield_wasm_bg.wasm"
|
|
51
|
-
),
|
|
52
|
-
// In project root (if user copied it)
|
|
53
|
-
path__default.default.join(process.cwd(), "agentshield_wasm_bg.wasm"),
|
|
54
|
-
// Relative to current file
|
|
55
|
-
path__default.default.join(
|
|
56
|
-
__dirname,
|
|
57
|
-
"..",
|
|
58
|
-
"..",
|
|
59
|
-
"..",
|
|
60
|
-
"agentshield",
|
|
61
|
-
"dist",
|
|
62
|
-
"wasm",
|
|
63
|
-
"agentshield_wasm_bg.wasm"
|
|
64
|
-
)
|
|
65
|
-
];
|
|
66
|
-
let wasmBuffer = null;
|
|
67
|
-
let loadedPath = null;
|
|
68
|
-
for (const wasmPath of possiblePaths) {
|
|
69
|
-
try {
|
|
70
|
-
if (fs__default.default.existsSync(wasmPath)) {
|
|
71
|
-
wasmBuffer = fs__default.default.readFileSync(wasmPath);
|
|
72
|
-
loadedPath = wasmPath;
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
} catch (e) {
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (!wasmBuffer) {
|
|
80
|
-
console.warn("AgentShield: WASM file not found in any expected location");
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
const bytes = new Uint8Array(wasmBuffer);
|
|
84
|
-
wasmModule = await WebAssembly.compile(bytes);
|
|
85
|
-
checkpoint.setWasmModule(wasmModule);
|
|
86
|
-
wasmInitialized = true;
|
|
87
|
-
console.log(`\u2705 AgentShield: WASM loaded successfully from ${loadedPath} (Node.js runtime)`);
|
|
88
|
-
console.log("\u{1F510} Cryptographic verification enabled (95-100% confidence)");
|
|
89
|
-
return true;
|
|
90
|
-
} catch (error) {
|
|
91
|
-
console.warn("\u26A0\uFE0F AgentShield: Failed to load WASM in Node.js runtime:", error);
|
|
92
|
-
console.log("\u{1F4CA} Falling back to pattern detection (85% confidence)");
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
38
|
+
warnNodejsWasmDeprecated();
|
|
39
|
+
throw new Error(MIGRATION_ERROR);
|
|
95
40
|
}
|
|
96
41
|
function isNodejsRuntime() {
|
|
97
|
-
|
|
42
|
+
warnNodejsWasmDeprecated();
|
|
43
|
+
throw new Error(MIGRATION_ERROR);
|
|
98
44
|
}
|
|
99
45
|
function getWasmModule() {
|
|
100
|
-
|
|
46
|
+
warnNodejsWasmDeprecated();
|
|
47
|
+
throw new Error(MIGRATION_ERROR);
|
|
101
48
|
}
|
|
102
49
|
function isWasmInitialized() {
|
|
103
|
-
|
|
50
|
+
warnNodejsWasmDeprecated();
|
|
51
|
+
throw new Error(MIGRATION_ERROR);
|
|
104
52
|
}
|
|
105
|
-
var
|
|
53
|
+
var MIGRATION_ERROR, _nodejsWasmWarned;
|
|
106
54
|
var init_nodejs_wasm_loader = __esm({
|
|
107
55
|
"src/nodejs-wasm-loader.ts"() {
|
|
108
|
-
|
|
109
|
-
|
|
56
|
+
MIGRATION_ERROR = "`@kya-os/checkpoint-nextjs`'s `loadWasmNodejs` / `isNodejsRuntime` / `getWasmModule` / `isWasmInitialized` were deprecated in Phase-D.9a (legacy `agentshield-wasm` Rust crate retirement). The legacy `AgentDetector` class they fed is slated for deletion in AgentDetector-Deletion-2 (next minor). Migrate to `withCheckpoint` from `@kya-os/checkpoint-nextjs` \u2014 engine-backed via the Rust `kya-os-engine` crate, with automatic WASM loading via `@kya-os/checkpoint-wasm-runtime`. See packages/checkpoint-nextjs/README.md for the canonical recipe.";
|
|
57
|
+
_nodejsWasmWarned = false;
|
|
110
58
|
}
|
|
111
59
|
});
|
|
112
60
|
|
|
113
61
|
// src/wasm-setup.ts
|
|
114
|
-
var
|
|
62
|
+
var wasmInitialized = false;
|
|
115
63
|
var initPromise = null;
|
|
116
64
|
var initAttempted = false;
|
|
117
65
|
async function setupWasm() {
|
|
118
|
-
if (
|
|
66
|
+
if (wasmInitialized) {
|
|
119
67
|
return;
|
|
120
68
|
}
|
|
121
69
|
if (initPromise) {
|
|
@@ -131,7 +79,7 @@ async function doSetupWasm() {
|
|
|
131
79
|
initAttempted = true;
|
|
132
80
|
try {
|
|
133
81
|
if (typeof process !== "undefined" && process.env.NODE_ENV === "test") {
|
|
134
|
-
|
|
82
|
+
wasmInitialized = true;
|
|
135
83
|
return;
|
|
136
84
|
}
|
|
137
85
|
const isNodejs = typeof process !== "undefined" && typeof __require !== "undefined" && process.env.NEXT_RUNTIME === "nodejs";
|
|
@@ -139,7 +87,7 @@ async function doSetupWasm() {
|
|
|
139
87
|
try {
|
|
140
88
|
const { loadWasmNodejs: loadWasmNodejs2 } = await Promise.resolve().then(() => (init_nodejs_wasm_loader(), nodejs_wasm_loader_exports));
|
|
141
89
|
const loaded = await loadWasmNodejs2();
|
|
142
|
-
|
|
90
|
+
wasmInitialized = true;
|
|
143
91
|
if (loaded) {
|
|
144
92
|
console.log("\u{1F680} AgentShield: Running with full WASM support (Node.js runtime)");
|
|
145
93
|
} else {
|
|
@@ -150,7 +98,7 @@ async function doSetupWasm() {
|
|
|
150
98
|
console.warn("\u26A0\uFE0F AgentShield: Node.js WASM loader failed:", error);
|
|
151
99
|
}
|
|
152
100
|
}
|
|
153
|
-
|
|
101
|
+
wasmInitialized = true;
|
|
154
102
|
if (process.env.NEXT_RUNTIME === "edge") {
|
|
155
103
|
console.log(
|
|
156
104
|
"\u26A1 AgentShield: Edge Runtime detected - using pattern detection (85% confidence)"
|
|
@@ -158,14 +106,14 @@ async function doSetupWasm() {
|
|
|
158
106
|
console.log("\u2705 AgentShield: Ready for AI agent detection");
|
|
159
107
|
}
|
|
160
108
|
} catch (error) {
|
|
161
|
-
|
|
109
|
+
wasmInitialized = true;
|
|
162
110
|
}
|
|
163
111
|
}
|
|
164
112
|
function isWasmInitialized2() {
|
|
165
|
-
return
|
|
113
|
+
return wasmInitialized;
|
|
166
114
|
}
|
|
167
115
|
function resetWasmState() {
|
|
168
|
-
|
|
116
|
+
wasmInitialized = false;
|
|
169
117
|
initPromise = null;
|
|
170
118
|
}
|
|
171
119
|
|
package/dist/wasm-setup.mjs
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { setWasmModule } from '@kya-os/checkpoint';
|
|
4
|
-
|
|
5
1
|
var __defProp = Object.defineProperty;
|
|
6
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
3
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
@@ -21,94 +17,51 @@ var __export = (target, all) => {
|
|
|
21
17
|
// src/nodejs-wasm-loader.ts
|
|
22
18
|
var nodejs_wasm_loader_exports = {};
|
|
23
19
|
__export(nodejs_wasm_loader_exports, {
|
|
20
|
+
__resetNodejsWasmWarningForTests: () => __resetNodejsWasmWarningForTests,
|
|
24
21
|
getWasmModule: () => getWasmModule,
|
|
25
22
|
isNodejsRuntime: () => isNodejsRuntime,
|
|
26
23
|
isWasmInitialized: () => isWasmInitialized,
|
|
27
24
|
loadWasmNodejs: () => loadWasmNodejs
|
|
28
25
|
});
|
|
26
|
+
function warnNodejsWasmDeprecated() {
|
|
27
|
+
if (_nodejsWasmWarned) return;
|
|
28
|
+
_nodejsWasmWarned = true;
|
|
29
|
+
if (typeof process !== "undefined" && process.env?.NODE_ENV === "production") return;
|
|
30
|
+
console.warn(`[Checkpoint] ${MIGRATION_ERROR}`);
|
|
31
|
+
}
|
|
32
|
+
function __resetNodejsWasmWarningForTests() {
|
|
33
|
+
_nodejsWasmWarned = false;
|
|
34
|
+
}
|
|
29
35
|
async function loadWasmNodejs() {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
try {
|
|
34
|
-
const possiblePaths = [
|
|
35
|
-
// In node_modules (most likely)
|
|
36
|
-
path.join(
|
|
37
|
-
process.cwd(),
|
|
38
|
-
"node_modules",
|
|
39
|
-
"@kya-os",
|
|
40
|
-
"agentshield",
|
|
41
|
-
"dist",
|
|
42
|
-
"wasm",
|
|
43
|
-
"agentshield_wasm_bg.wasm"
|
|
44
|
-
),
|
|
45
|
-
// In project root (if user copied it)
|
|
46
|
-
path.join(process.cwd(), "agentshield_wasm_bg.wasm"),
|
|
47
|
-
// Relative to current file
|
|
48
|
-
path.join(
|
|
49
|
-
__dirname,
|
|
50
|
-
"..",
|
|
51
|
-
"..",
|
|
52
|
-
"..",
|
|
53
|
-
"agentshield",
|
|
54
|
-
"dist",
|
|
55
|
-
"wasm",
|
|
56
|
-
"agentshield_wasm_bg.wasm"
|
|
57
|
-
)
|
|
58
|
-
];
|
|
59
|
-
let wasmBuffer = null;
|
|
60
|
-
let loadedPath = null;
|
|
61
|
-
for (const wasmPath of possiblePaths) {
|
|
62
|
-
try {
|
|
63
|
-
if (fs.existsSync(wasmPath)) {
|
|
64
|
-
wasmBuffer = fs.readFileSync(wasmPath);
|
|
65
|
-
loadedPath = wasmPath;
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
} catch (e) {
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (!wasmBuffer) {
|
|
73
|
-
console.warn("AgentShield: WASM file not found in any expected location");
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
const bytes = new Uint8Array(wasmBuffer);
|
|
77
|
-
wasmModule = await WebAssembly.compile(bytes);
|
|
78
|
-
setWasmModule(wasmModule);
|
|
79
|
-
wasmInitialized = true;
|
|
80
|
-
console.log(`\u2705 AgentShield: WASM loaded successfully from ${loadedPath} (Node.js runtime)`);
|
|
81
|
-
console.log("\u{1F510} Cryptographic verification enabled (95-100% confidence)");
|
|
82
|
-
return true;
|
|
83
|
-
} catch (error) {
|
|
84
|
-
console.warn("\u26A0\uFE0F AgentShield: Failed to load WASM in Node.js runtime:", error);
|
|
85
|
-
console.log("\u{1F4CA} Falling back to pattern detection (85% confidence)");
|
|
86
|
-
return false;
|
|
87
|
-
}
|
|
36
|
+
warnNodejsWasmDeprecated();
|
|
37
|
+
throw new Error(MIGRATION_ERROR);
|
|
88
38
|
}
|
|
89
39
|
function isNodejsRuntime() {
|
|
90
|
-
|
|
40
|
+
warnNodejsWasmDeprecated();
|
|
41
|
+
throw new Error(MIGRATION_ERROR);
|
|
91
42
|
}
|
|
92
43
|
function getWasmModule() {
|
|
93
|
-
|
|
44
|
+
warnNodejsWasmDeprecated();
|
|
45
|
+
throw new Error(MIGRATION_ERROR);
|
|
94
46
|
}
|
|
95
47
|
function isWasmInitialized() {
|
|
96
|
-
|
|
48
|
+
warnNodejsWasmDeprecated();
|
|
49
|
+
throw new Error(MIGRATION_ERROR);
|
|
97
50
|
}
|
|
98
|
-
var
|
|
51
|
+
var MIGRATION_ERROR, _nodejsWasmWarned;
|
|
99
52
|
var init_nodejs_wasm_loader = __esm({
|
|
100
53
|
"src/nodejs-wasm-loader.ts"() {
|
|
101
|
-
|
|
102
|
-
|
|
54
|
+
MIGRATION_ERROR = "`@kya-os/checkpoint-nextjs`'s `loadWasmNodejs` / `isNodejsRuntime` / `getWasmModule` / `isWasmInitialized` were deprecated in Phase-D.9a (legacy `agentshield-wasm` Rust crate retirement). The legacy `AgentDetector` class they fed is slated for deletion in AgentDetector-Deletion-2 (next minor). Migrate to `withCheckpoint` from `@kya-os/checkpoint-nextjs` \u2014 engine-backed via the Rust `kya-os-engine` crate, with automatic WASM loading via `@kya-os/checkpoint-wasm-runtime`. See packages/checkpoint-nextjs/README.md for the canonical recipe.";
|
|
55
|
+
_nodejsWasmWarned = false;
|
|
103
56
|
}
|
|
104
57
|
});
|
|
105
58
|
|
|
106
59
|
// src/wasm-setup.ts
|
|
107
|
-
var
|
|
60
|
+
var wasmInitialized = false;
|
|
108
61
|
var initPromise = null;
|
|
109
62
|
var initAttempted = false;
|
|
110
63
|
async function setupWasm() {
|
|
111
|
-
if (
|
|
64
|
+
if (wasmInitialized) {
|
|
112
65
|
return;
|
|
113
66
|
}
|
|
114
67
|
if (initPromise) {
|
|
@@ -124,7 +77,7 @@ async function doSetupWasm() {
|
|
|
124
77
|
initAttempted = true;
|
|
125
78
|
try {
|
|
126
79
|
if (typeof process !== "undefined" && process.env.NODE_ENV === "test") {
|
|
127
|
-
|
|
80
|
+
wasmInitialized = true;
|
|
128
81
|
return;
|
|
129
82
|
}
|
|
130
83
|
const isNodejs = typeof process !== "undefined" && typeof __require !== "undefined" && process.env.NEXT_RUNTIME === "nodejs";
|
|
@@ -132,7 +85,7 @@ async function doSetupWasm() {
|
|
|
132
85
|
try {
|
|
133
86
|
const { loadWasmNodejs: loadWasmNodejs2 } = await Promise.resolve().then(() => (init_nodejs_wasm_loader(), nodejs_wasm_loader_exports));
|
|
134
87
|
const loaded = await loadWasmNodejs2();
|
|
135
|
-
|
|
88
|
+
wasmInitialized = true;
|
|
136
89
|
if (loaded) {
|
|
137
90
|
console.log("\u{1F680} AgentShield: Running with full WASM support (Node.js runtime)");
|
|
138
91
|
} else {
|
|
@@ -143,7 +96,7 @@ async function doSetupWasm() {
|
|
|
143
96
|
console.warn("\u26A0\uFE0F AgentShield: Node.js WASM loader failed:", error);
|
|
144
97
|
}
|
|
145
98
|
}
|
|
146
|
-
|
|
99
|
+
wasmInitialized = true;
|
|
147
100
|
if (process.env.NEXT_RUNTIME === "edge") {
|
|
148
101
|
console.log(
|
|
149
102
|
"\u26A1 AgentShield: Edge Runtime detected - using pattern detection (85% confidence)"
|
|
@@ -151,14 +104,14 @@ async function doSetupWasm() {
|
|
|
151
104
|
console.log("\u2705 AgentShield: Ready for AI agent detection");
|
|
152
105
|
}
|
|
153
106
|
} catch (error) {
|
|
154
|
-
|
|
107
|
+
wasmInitialized = true;
|
|
155
108
|
}
|
|
156
109
|
}
|
|
157
110
|
function isWasmInitialized2() {
|
|
158
|
-
return
|
|
111
|
+
return wasmInitialized;
|
|
159
112
|
}
|
|
160
113
|
function resetWasmState() {
|
|
161
|
-
|
|
114
|
+
wasmInitialized = false;
|
|
162
115
|
initPromise = null;
|
|
163
116
|
}
|
|
164
117
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kya-os/checkpoint-nextjs",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Checkpoint Next.js middleware for AI agent detection (formerly @kya-os/agentshield-nextjs)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nextjs",
|
|
@@ -115,12 +115,14 @@
|
|
|
115
115
|
"rimraf": "^5.0.5",
|
|
116
116
|
"tsup": "^8.0.2",
|
|
117
117
|
"typescript": "^5.4.2",
|
|
118
|
+
"vite-plugin-top-level-await": "^1.6.0",
|
|
119
|
+
"vite-plugin-wasm": "^3.6.0",
|
|
118
120
|
"vitest": "^1.3.1"
|
|
119
121
|
},
|
|
120
122
|
"peerDependencies": {
|
|
123
|
+
"@upstash/redis": ">=1.0.0",
|
|
121
124
|
"next": ">=13.0.0",
|
|
122
|
-
"react": ">=18.0.0"
|
|
123
|
-
"@upstash/redis": ">=1.0.0"
|
|
125
|
+
"react": ">=18.0.0"
|
|
124
126
|
},
|
|
125
127
|
"peerDependenciesMeta": {
|
|
126
128
|
"@upstash/redis": {
|
|
@@ -134,9 +136,9 @@
|
|
|
134
136
|
"dependencies": {
|
|
135
137
|
"@noble/ed25519": "^2.2.3",
|
|
136
138
|
"@noble/hashes": "^2.0.1",
|
|
137
|
-
"@kya-os/checkpoint": "1.0.
|
|
138
|
-
"@kya-os/checkpoint-shared": "1.
|
|
139
|
-
"@kya-os/checkpoint-wasm-runtime": "^1.
|
|
139
|
+
"@kya-os/checkpoint": "1.0.1",
|
|
140
|
+
"@kya-os/checkpoint-shared": "1.1.0",
|
|
141
|
+
"@kya-os/checkpoint-wasm-runtime": "^1.4.0"
|
|
140
142
|
},
|
|
141
143
|
"scripts": {
|
|
142
144
|
"build": "tsup",
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Checkpoint Middleware Template — Legacy WASM Factory
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* ⚠️ **DEPRECATED TEMPLATE (AgentDetector-Deletion-1):** this template
|
|
5
|
+
* uses `createWasmAgentShieldMiddleware`, which is deprecated and
|
|
6
|
+
* will be removed in the next minor. For new projects, use
|
|
7
|
+
* `withCheckpoint` instead — it's engine-backed (PDM-1 #2560), runs
|
|
8
|
+
* MCP-I envelope verification, and is the canonical Phase-D
|
|
9
|
+
* replacement. See the `withCheckpoint` recipe in
|
|
10
|
+
* `packages/checkpoint-nextjs/README.md`.
|
|
11
|
+
*
|
|
12
|
+
* This template stays in-tree for one release as a migration reference;
|
|
13
|
+
* the deprecated factory still works (with a dev-only console.warn).
|
|
6
14
|
*
|
|
7
15
|
* Installation:
|
|
8
16
|
* 1. Copy this file to your project root as `middleware.ts`
|