agentlock-shared 0.2.0 → 0.3.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.
Files changed (169) hide show
  1. package/dist/__tests__/billing.test.d.ts +2 -0
  2. package/dist/__tests__/billing.test.d.ts.map +1 -0
  3. package/dist/__tests__/billing.test.js +31 -0
  4. package/dist/__tests__/billing.test.js.map +1 -0
  5. package/dist/__tests__/dns-pinning.test.d.ts +2 -0
  6. package/dist/__tests__/dns-pinning.test.d.ts.map +1 -0
  7. package/dist/__tests__/dns-pinning.test.js +33 -0
  8. package/dist/__tests__/dns-pinning.test.js.map +1 -0
  9. package/dist/__tests__/llm-classifier-cache-store.test.d.ts +2 -0
  10. package/dist/__tests__/llm-classifier-cache-store.test.d.ts.map +1 -0
  11. package/dist/__tests__/llm-classifier-cache-store.test.js +65 -0
  12. package/dist/__tests__/llm-classifier-cache-store.test.js.map +1 -0
  13. package/dist/__tests__/llm-classifier-cache.test.d.ts +2 -0
  14. package/dist/__tests__/llm-classifier-cache.test.d.ts.map +1 -0
  15. package/dist/__tests__/llm-classifier-cache.test.js +44 -0
  16. package/dist/__tests__/llm-classifier-cache.test.js.map +1 -0
  17. package/dist/__tests__/llm-classifier.test.d.ts +2 -0
  18. package/dist/__tests__/llm-classifier.test.d.ts.map +1 -0
  19. package/dist/__tests__/llm-classifier.test.js +167 -0
  20. package/dist/__tests__/llm-classifier.test.js.map +1 -0
  21. package/dist/__tests__/plans-classifier-limits.test.d.ts +2 -0
  22. package/dist/__tests__/plans-classifier-limits.test.d.ts.map +1 -0
  23. package/dist/__tests__/plans-classifier-limits.test.js +22 -0
  24. package/dist/__tests__/plans-classifier-limits.test.js.map +1 -0
  25. package/dist/__tests__/policy-category-floor.test.d.ts +2 -0
  26. package/dist/__tests__/policy-category-floor.test.d.ts.map +1 -0
  27. package/dist/__tests__/policy-category-floor.test.js +46 -0
  28. package/dist/__tests__/policy-category-floor.test.js.map +1 -0
  29. package/dist/__tests__/policy-claude-bash.test.d.ts +2 -0
  30. package/dist/__tests__/policy-claude-bash.test.d.ts.map +1 -0
  31. package/dist/__tests__/policy-claude-bash.test.js +401 -0
  32. package/dist/__tests__/policy-claude-bash.test.js.map +1 -0
  33. package/dist/__tests__/policy-llm-floor.test.d.ts +2 -0
  34. package/dist/__tests__/policy-llm-floor.test.d.ts.map +1 -0
  35. package/dist/__tests__/policy-llm-floor.test.js +107 -0
  36. package/dist/__tests__/policy-llm-floor.test.js.map +1 -0
  37. package/dist/__tests__/policy-ssh-e2e.test.d.ts +2 -0
  38. package/dist/__tests__/policy-ssh-e2e.test.d.ts.map +1 -0
  39. package/dist/__tests__/policy-ssh-e2e.test.js +89 -0
  40. package/dist/__tests__/policy-ssh-e2e.test.js.map +1 -0
  41. package/dist/__tests__/policy-ssh-sessions.test.d.ts +2 -0
  42. package/dist/__tests__/policy-ssh-sessions.test.d.ts.map +1 -0
  43. package/dist/__tests__/policy-ssh-sessions.test.js +139 -0
  44. package/dist/__tests__/policy-ssh-sessions.test.js.map +1 -0
  45. package/dist/__tests__/policy-ssh.test.d.ts +2 -0
  46. package/dist/__tests__/policy-ssh.test.d.ts.map +1 -0
  47. package/dist/__tests__/policy-ssh.test.js +180 -0
  48. package/dist/__tests__/policy-ssh.test.js.map +1 -0
  49. package/dist/__tests__/policy.test.js +400 -2
  50. package/dist/__tests__/policy.test.js.map +1 -1
  51. package/dist/__tests__/redact.test.js +76 -0
  52. package/dist/__tests__/redact.test.js.map +1 -1
  53. package/dist/__tests__/signing.test.js +89 -0
  54. package/dist/__tests__/signing.test.js.map +1 -1
  55. package/dist/__tests__/ssh-fingerprint.test.d.ts +2 -0
  56. package/dist/__tests__/ssh-fingerprint.test.d.ts.map +1 -0
  57. package/dist/__tests__/ssh-fingerprint.test.js +19 -0
  58. package/dist/__tests__/ssh-fingerprint.test.js.map +1 -0
  59. package/dist/__tests__/vpn-route.test.d.ts +2 -0
  60. package/dist/__tests__/vpn-route.test.d.ts.map +1 -0
  61. package/dist/__tests__/vpn-route.test.js +72 -0
  62. package/dist/__tests__/vpn-route.test.js.map +1 -0
  63. package/dist/__tests__/wireguard.test.d.ts +2 -0
  64. package/dist/__tests__/wireguard.test.d.ts.map +1 -0
  65. package/dist/__tests__/wireguard.test.js +114 -0
  66. package/dist/__tests__/wireguard.test.js.map +1 -0
  67. package/dist/billing.d.ts +12 -0
  68. package/dist/billing.d.ts.map +1 -0
  69. package/dist/billing.js +41 -0
  70. package/dist/billing.js.map +1 -0
  71. package/dist/crypto.d.ts +5 -0
  72. package/dist/crypto.d.ts.map +1 -1
  73. package/dist/crypto.js +80 -23
  74. package/dist/crypto.js.map +1 -1
  75. package/dist/dns-pinning.d.ts +28 -0
  76. package/dist/dns-pinning.d.ts.map +1 -0
  77. package/dist/dns-pinning.js +113 -0
  78. package/dist/dns-pinning.js.map +1 -0
  79. package/dist/index.d.ts +6 -0
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +9 -0
  82. package/dist/index.js.map +1 -1
  83. package/dist/llm-classifier-cache-store.d.ts +49 -0
  84. package/dist/llm-classifier-cache-store.d.ts.map +1 -0
  85. package/dist/llm-classifier-cache-store.js +63 -0
  86. package/dist/llm-classifier-cache-store.js.map +1 -0
  87. package/dist/llm-classifier-cache.d.ts +6 -0
  88. package/dist/llm-classifier-cache.d.ts.map +1 -0
  89. package/dist/llm-classifier-cache.js +52 -0
  90. package/dist/llm-classifier-cache.js.map +1 -0
  91. package/dist/llm-classifier.d.ts +29 -0
  92. package/dist/llm-classifier.d.ts.map +1 -0
  93. package/dist/llm-classifier.js +191 -0
  94. package/dist/llm-classifier.js.map +1 -0
  95. package/dist/observability.d.ts +36 -0
  96. package/dist/observability.d.ts.map +1 -0
  97. package/dist/observability.js +75 -0
  98. package/dist/observability.js.map +1 -0
  99. package/dist/plans.d.ts +17 -0
  100. package/dist/plans.d.ts.map +1 -1
  101. package/dist/plans.js +36 -14
  102. package/dist/plans.js.map +1 -1
  103. package/dist/policy.d.ts +173 -3
  104. package/dist/policy.d.ts.map +1 -1
  105. package/dist/policy.js +910 -42
  106. package/dist/policy.js.map +1 -1
  107. package/dist/redact.d.ts.map +1 -1
  108. package/dist/redact.js +83 -3
  109. package/dist/redact.js.map +1 -1
  110. package/dist/regex-safety.d.ts +21 -0
  111. package/dist/regex-safety.d.ts.map +1 -0
  112. package/dist/regex-safety.js +49 -0
  113. package/dist/regex-safety.js.map +1 -0
  114. package/dist/sanitize.d.ts +31 -0
  115. package/dist/sanitize.d.ts.map +1 -0
  116. package/dist/sanitize.js +54 -0
  117. package/dist/sanitize.js.map +1 -0
  118. package/dist/schemas.d.ts +202 -10
  119. package/dist/schemas.d.ts.map +1 -1
  120. package/dist/schemas.js +91 -1
  121. package/dist/schemas.js.map +1 -1
  122. package/dist/signing.d.ts +15 -0
  123. package/dist/signing.d.ts.map +1 -1
  124. package/dist/signing.js +53 -4
  125. package/dist/signing.js.map +1 -1
  126. package/dist/ssh-fingerprint.d.ts +10 -0
  127. package/dist/ssh-fingerprint.d.ts.map +1 -0
  128. package/dist/ssh-fingerprint.js +52 -0
  129. package/dist/ssh-fingerprint.js.map +1 -0
  130. package/dist/ssrf.d.ts +36 -0
  131. package/dist/ssrf.d.ts.map +1 -0
  132. package/dist/ssrf.js +140 -0
  133. package/dist/ssrf.js.map +1 -0
  134. package/dist/types.d.ts +130 -0
  135. package/dist/types.d.ts.map +1 -1
  136. package/dist/wireguard.d.ts +63 -0
  137. package/dist/wireguard.d.ts.map +1 -0
  138. package/dist/wireguard.js +226 -0
  139. package/dist/wireguard.js.map +1 -0
  140. package/package.json +42 -29
  141. package/.turbo/turbo-build.log +0 -4
  142. package/.turbo/turbo-test.log +0 -76
  143. package/dist/__tests__/content-crypto.test.d.ts +0 -2
  144. package/dist/__tests__/content-crypto.test.d.ts.map +0 -1
  145. package/dist/__tests__/content-crypto.test.js +0 -117
  146. package/dist/__tests__/content-crypto.test.js.map +0 -1
  147. package/dist/__tests__/signing.test (# Edit conflict 2026-04-01 z3etfmC #).js +0 -51
  148. package/dist/__tests__/signing.test.js (# Edit conflict 2026-04-01 4rndy9C #).map +0 -1
  149. package/dist/content-crypto.d.ts +0 -24
  150. package/dist/content-crypto.d.ts.map +0 -1
  151. package/dist/content-crypto.js +0 -58
  152. package/dist/content-crypto.js.map +0 -1
  153. package/src/__tests__/crypto.test.ts +0 -169
  154. package/src/__tests__/messaging.test.ts +0 -83
  155. package/src/__tests__/policy.test.ts +0 -222
  156. package/src/__tests__/redact.test.ts +0 -41
  157. package/src/__tests__/signing.test.ts +0 -55
  158. package/src/crypto.ts +0 -235
  159. package/src/index.ts +0 -8
  160. package/src/mcp-catalog.ts +0 -181
  161. package/src/plans.ts +0 -116
  162. package/src/policy.ts +0 -216
  163. package/src/redact.ts +0 -131
  164. package/src/schemas.ts +0 -121
  165. package/src/signing.ts +0 -120
  166. package/src/types.ts +0 -213
  167. package/test-gateway.mjs +0 -47
  168. package/tsconfig.json +0 -10
  169. package/vitest.config.ts +0 -8
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VPN_LIMITS_BY_PLAN = exports.WireGuardConfigSchema = void 0;
4
+ exports.parseWireGuardConfig = parseWireGuardConfig;
5
+ const zod_1 = require("zod");
6
+ const WG_KEY_RE = /^[A-Za-z0-9+/]{43}=$/;
7
+ const WG_ENDPOINT_RE = /^[a-zA-Z0-9.-]+:\d{1,5}$/;
8
+ const WG_CIDR_RE = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$/;
9
+ function isValidIpv4Cidr(cidr) {
10
+ const [ip, prefix] = cidr.split('/');
11
+ if (!ip || !prefix)
12
+ return false;
13
+ const octets = ip.split('.');
14
+ if (octets.length !== 4)
15
+ return false;
16
+ for (const o of octets) {
17
+ const n = Number(o);
18
+ if (!Number.isInteger(n) || n < 0 || n > 255)
19
+ return false;
20
+ }
21
+ const p = Number(prefix);
22
+ return Number.isInteger(p) && p >= 0 && p <= 32;
23
+ }
24
+ /**
25
+ * Reject AllowedIPs entries that route so broadly that they would effectively
26
+ * turn the tunnel into a catch-all proxy. The HTTP/MCP connectors use the
27
+ * peer's `allowedIPs` as an SSRF exemption list; a 0/0 entry would make
28
+ * cloud-metadata endpoints and unrelated private networks reachable via a
29
+ * single misconfigured credential.
30
+ *
31
+ * Blocks:
32
+ * - 0.0.0.0/0 (default route)
33
+ * - Any prefix ≤ 7 (anything broader than /8 covers &gt; 1 Class-A network)
34
+ *
35
+ * A workspace admin who genuinely needs to proxy the whole internet must use
36
+ * narrower, intentionally listed CIDRs.
37
+ */
38
+ function isAllowedIpsEntry(cidr) {
39
+ if (!isValidIpv4Cidr(cidr))
40
+ return false;
41
+ const [ip, prefixStr] = cidr.split('/');
42
+ const prefix = Number(prefixStr);
43
+ // 0.0.0.0/0 is explicitly the "route everything" default — forbid.
44
+ if (ip === '0.0.0.0' && prefix === 0)
45
+ return false;
46
+ // Any prefix 0–7 is a supernet of many /8s and is almost never legitimate.
47
+ if (prefix < 8)
48
+ return false;
49
+ // Block ranges that must never be tunnel-reachable (loopback, link-local /
50
+ // cloud-metadata, 0.0.0.0/8) even via an otherwise-legitimate VPN — this
51
+ // closes the `169.254.169.254/32` SSRF-exemption pivot. RFC1918 / CGNAT stay
52
+ // allowed because reaching a private remote network is the point of a VPN.
53
+ if (allowedIpsOverlapsForbidden(cidr))
54
+ return false;
55
+ return true;
56
+ }
57
+ function ipv4ToInt(ip) {
58
+ const octets = ip.split('.');
59
+ if (octets.length !== 4)
60
+ return null;
61
+ let value = 0;
62
+ for (const o of octets) {
63
+ const n = Number(o);
64
+ if (!Number.isInteger(n) || n < 0 || n > 255)
65
+ return null;
66
+ value = value * 256 + n;
67
+ }
68
+ return value >>> 0;
69
+ }
70
+ function cidrRangeV4(cidr) {
71
+ const [ip, prefixStr] = cidr.split('/');
72
+ const base = ipv4ToInt(ip);
73
+ if (base === null)
74
+ return null;
75
+ const prefix = Number(prefixStr);
76
+ if (!Number.isInteger(prefix) || prefix < 0 || prefix > 32)
77
+ return null;
78
+ const mask = prefix === 0 ? 0 : (0xffffffff << (32 - prefix)) >>> 0;
79
+ const network = (base & mask) >>> 0;
80
+ const broadcast = (network | (~mask >>> 0)) >>> 0;
81
+ return [network, broadcast];
82
+ }
83
+ /**
84
+ * Addresses that must never be reachable through the tunnel, even though a
85
+ * tunnel's AllowedIPs are deliberately exempt from the SSRF guard. RFC1918 and
86
+ * CGNAT are intentionally NOT here — reaching a private remote network is the
87
+ * whole point of a VPN credential. What stays blocked is the runner's own
88
+ * loopback, the link-local / cloud-metadata range, and the 0.0.0.0/8 wildcard.
89
+ */
90
+ const TUNNEL_FORBIDDEN_V4_CIDRS = ['0.0.0.0/8', '127.0.0.0/8', '169.254.0.0/16'];
91
+ function isForbiddenTunnelIpv4(ip) {
92
+ const value = ipv4ToInt(ip);
93
+ if (value === null)
94
+ return false;
95
+ return TUNNEL_FORBIDDEN_V4_CIDRS.some((cidr) => {
96
+ const range = cidrRangeV4(cidr);
97
+ return range !== null && value >= range[0] && value <= range[1];
98
+ });
99
+ }
100
+ function isForbiddenTunnelIpv6(ip) {
101
+ const lower = ip.toLowerCase();
102
+ if (lower === '::1')
103
+ return true; // loopback
104
+ if (lower.startsWith('fe80:'))
105
+ return true; // link-local
106
+ const mapped = lower.match(/::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
107
+ if (mapped)
108
+ return isForbiddenTunnelIpv4(mapped[1]);
109
+ return false;
110
+ }
111
+ /** True if an AllowedIPs CIDR overlaps any tunnel-forbidden range. */
112
+ function allowedIpsOverlapsForbidden(cidr) {
113
+ const range = cidrRangeV4(cidr);
114
+ if (range === null)
115
+ return false;
116
+ return TUNNEL_FORBIDDEN_V4_CIDRS.some((blocked) => {
117
+ const b = cidrRangeV4(blocked);
118
+ return b !== null && range[0] <= b[1] && b[0] <= range[1];
119
+ });
120
+ }
121
+ exports.WireGuardConfigSchema = zod_1.z.object({
122
+ privateKey: zod_1.z.string().regex(WG_KEY_RE, 'Invalid WireGuard private key'),
123
+ address: zod_1.z
124
+ .string()
125
+ .regex(WG_CIDR_RE, 'Invalid CIDR for Address')
126
+ .refine(isValidIpv4Cidr, 'Invalid IPv4 CIDR'),
127
+ dns: zod_1.z
128
+ .array(zod_1.z
129
+ .string()
130
+ .ip()
131
+ .refine((ip) => !isForbiddenTunnelIpv4(ip) && !isForbiddenTunnelIpv6(ip), 'DNS server must not be a loopback, link-local or cloud-metadata address'))
132
+ .max(4)
133
+ .optional(),
134
+ mtu: zod_1.z.number().int().min(576).max(9000).optional(),
135
+ peer: zod_1.z.object({
136
+ publicKey: zod_1.z.string().regex(WG_KEY_RE, 'Invalid peer public key'),
137
+ presharedKey: zod_1.z.string().regex(WG_KEY_RE, 'Invalid preshared key').optional(),
138
+ endpoint: zod_1.z
139
+ .string()
140
+ .regex(WG_ENDPOINT_RE, 'Endpoint must be host:port')
141
+ .refine((s) => {
142
+ const port = Number(s.split(':').pop());
143
+ return Number.isInteger(port) && port >= 1 && port <= 65535;
144
+ }, 'Endpoint port must be between 1 and 65535'),
145
+ allowedIPs: zod_1.z
146
+ .array(zod_1.z
147
+ .string()
148
+ .regex(WG_CIDR_RE, 'Invalid CIDR in AllowedIPs')
149
+ .refine(isValidIpv4Cidr, 'Invalid IPv4 CIDR')
150
+ .refine(isAllowedIpsEntry, 'AllowedIPs entries broader than /8 are not allowed (e.g. 0.0.0.0/0). Use a narrower, intentional CIDR.'))
151
+ .min(1)
152
+ .max(20),
153
+ persistentKeepalive: zod_1.z.number().int().min(0).max(65535).optional(),
154
+ }).strict(),
155
+ }).strict();
156
+ /**
157
+ * Parse a wg-quick-style .conf file into a structured WireGuardConfig.
158
+ * Exactly one [Interface] and exactly one [Peer] block are required.
159
+ */
160
+ function parseWireGuardConfig(raw) {
161
+ const sections = {};
162
+ let current = null;
163
+ const peerBlocks = [];
164
+ for (const rawLine of raw.split('\n')) {
165
+ const line = rawLine.replace(/#.*$/, '').trim();
166
+ if (!line)
167
+ continue;
168
+ const sectionMatch = line.match(/^\[(\w+)\]$/);
169
+ if (sectionMatch) {
170
+ current = sectionMatch[1];
171
+ if (current === 'Peer') {
172
+ peerBlocks.push({});
173
+ }
174
+ else if (current === 'Interface') {
175
+ if (sections[current])
176
+ throw new Error('Duplicate [Interface] section');
177
+ sections[current] = {};
178
+ }
179
+ else {
180
+ sections[current] = {};
181
+ }
182
+ continue;
183
+ }
184
+ const kvMatch = line.match(/^([A-Za-z]+)\s*=\s*(.+)$/);
185
+ if (!kvMatch || !current)
186
+ continue;
187
+ const [, key, value] = kvMatch;
188
+ if (current === 'Peer') {
189
+ const block = peerBlocks[peerBlocks.length - 1];
190
+ if (key in block)
191
+ throw new Error(`Duplicate key: ${key}`);
192
+ block[key] = value;
193
+ }
194
+ else {
195
+ if (key in sections[current])
196
+ throw new Error(`Duplicate key: ${key}`);
197
+ sections[current][key] = value;
198
+ }
199
+ }
200
+ if (!sections.Interface)
201
+ throw new Error('Missing [Interface] section');
202
+ if (peerBlocks.length !== 1)
203
+ throw new Error('Config must contain exactly one [Peer] block');
204
+ const iface = sections.Interface;
205
+ const peer = peerBlocks[0];
206
+ const parsed = {
207
+ privateKey: iface.PrivateKey,
208
+ address: iface.Address,
209
+ ...(iface.DNS && { dns: iface.DNS.split(',').map((s) => s.trim()).filter(Boolean) }),
210
+ ...(iface.MTU && { mtu: parseInt(iface.MTU, 10) }),
211
+ peer: {
212
+ publicKey: peer.PublicKey,
213
+ ...(peer.PresharedKey && { presharedKey: peer.PresharedKey }),
214
+ endpoint: peer.Endpoint,
215
+ allowedIPs: (peer.AllowedIPs ?? '').split(',').map((s) => s.trim()).filter(Boolean),
216
+ ...(peer.PersistentKeepalive && { persistentKeepalive: parseInt(peer.PersistentKeepalive, 10) }),
217
+ },
218
+ };
219
+ return exports.WireGuardConfigSchema.parse(parsed);
220
+ }
221
+ exports.VPN_LIMITS_BY_PLAN = {
222
+ free: 0,
223
+ pro: 3,
224
+ team: 10,
225
+ };
226
+ //# sourceMappingURL=wireguard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wireguard.js","sourceRoot":"","sources":["../src/wireguard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,29 +1,42 @@
1
- {
2
- "name": "agentlock-shared",
3
- "version": "0.2.0",
4
- "main": "./dist/index.js",
5
- "types": "./dist/index.d.ts",
6
- "exports": {
7
- ".": {
8
- "import": "./dist/index.js",
9
- "require": "./dist/index.js",
10
- "types": "./dist/index.d.ts"
11
- }
12
- },
13
- "scripts": {
14
- "build": "tsc",
15
- "typecheck": "tsc --noEmit",
16
- "test": "vitest run",
17
- "test:watch": "vitest"
18
- },
19
- "dependencies": {
20
- "tweetnacl": "^1.0.3",
21
- "tweetnacl-util": "^0.15.1",
22
- "zod": "^3.23.8"
23
- },
24
- "devDependencies": {
25
- "@types/node": "^22.19.11",
26
- "typescript": "^5.6.0",
27
- "vitest": "^4.0.18"
28
- }
29
- }
1
+ {
2
+ "name": "agentlock-shared",
3
+ "version": "0.3.0",
4
+ "files": [
5
+ "dist"
6
+ ],
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.js"
14
+ },
15
+ "./ssrf": {
16
+ "types": "./dist/ssrf.d.ts",
17
+ "import": "./dist/ssrf.js",
18
+ "require": "./dist/ssrf.js"
19
+ },
20
+ "./dns-pinning": {
21
+ "types": "./dist/dns-pinning.d.ts",
22
+ "import": "./dist/dns-pinning.js",
23
+ "require": "./dist/dns-pinning.js"
24
+ }
25
+ },
26
+ "dependencies": {
27
+ "tweetnacl": "^1.0.3",
28
+ "tweetnacl-util": "^0.15.1",
29
+ "zod": "^3.23.8"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^22.19.11",
33
+ "typescript": "^5.6.0",
34
+ "vitest": "^4.0.18"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "typecheck": "tsc --noEmit",
39
+ "test": "vitest run",
40
+ "test:watch": "vitest"
41
+ }
42
+ }
@@ -1,4 +0,0 @@
1
-
2
- > agentlock-shared@0.1.0 build D:\agentlock\packages\shared
3
- > tsc
4
-
@@ -1,76 +0,0 @@
1
-
2
- > agentlock-shared@0.1.0 test D:\agentlock\packages\shared
3
- > vitest run
4
-
5
- ▲ [WARNING] The condition "types" here will never be used as it comes after both "import" and "require" [package.json]
6
-
7
- package.json:10:6:
8
- 10 │ "types": "./dist/index.d.ts"
9
- ╵ ~~~~~~~
10
-
11
- The "import" condition comes earlier and will be used for all "import" statements:
12
-
13
- package.json:8:6:
14
- 8 │ "import": "./dist/index.js",
15
- ╵ ~~~~~~~~
16
-
17
- The "require" condition comes earlier and will be used for all "require" calls:
18
-
19
- package.json:9:6:
20
- 9 │ "require": "./dist/index.js",
21
- ╵ ~~~~~~~~~
22
-
23
-
24
-  RUN  v4.0.18 D:/agentlock/packages/shared
25
-
26
- ❯ src/__tests__/policy.test.ts (21 tests | 1 failed) 12ms
27
-  × should ALLOW read actions by default 7ms
28
- ✓ should REQUIRE_APPROVAL for write actions 0ms
29
- ✓ should BLOCK admin actions 0ms
30
- ✓ should REQUIRE_APPROVAL for financial actions 0ms
31
- ✓ should BLOCK disallowed HTTP domains 0ms
32
- ✓ should BLOCK explicitly blocklisted domains 0ms
33
- ✓ should REQUIRE_APPROVAL for admin actions even when defaultMode is allow 0ms
34
- ✓ should REQUIRE_APPROVAL for financial actions even when defaultMode is allow 0ms
35
- ✓ should REQUIRE_APPROVAL for admin action even with explicit ALLOW rule 0ms
36
- ✓ should REQUIRE_APPROVAL for financial action even with explicit ALLOW rule 0ms
37
- ✓ should still respect explicit rules for admin even with defaultMode allow 0ms
38
- ✓ should BLOCK when cost exceeds limit 0ms
39
- ✓ should enforce HTTP domain allowlist even with mixed-case tool name 0ms
40
- ✓ should match tool-specific rules case-insensitively 0ms
41
- ✓ should not match subdomain of blocklisted domain (e.g., notevil.com vs evil.com) 0ms
42
- ✓ should BLOCK HTTP tool with no URL in payload 0ms
43
- ✓ should REQUIRE_APPROVAL for browser.open 0ms
44
- ✓ should BLOCK browser.* actions without a session (reaching policy engine) 0ms
45
- ✓ should BLOCK unknown action types 0ms
46
- ✓ should not enforce budget check when cost_estimate is omitted 0ms
47
- ✓ should REQUIRE_APPROVAL when HTTP allowlist is empty (safe default) 0ms
48
- ✓ src/__tests__/redact.test.ts (5 tests) 5ms
49
- ✓ src/__tests__/signing.test.ts (7 tests) 73ms
50
- ✓ src/__tests__/messaging.test.ts (11 tests) 7ms
51
-
52
- ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯
53
-
54
-  FAIL  src/__tests__/policy.test.ts > Policy Engine > should ALLOW read actions by default
55
- AssertionError: expected 'BLOCK' to be 'ALLOW' // Object.is equality
56
-
57
- Expected: "ALLOW"
58
- Received: "BLOCK"
59
-
60
-  ❯ src/__tests__/policy.test.ts:8:67
61
-  6|  it('should ALLOW read actions by default', () => {
62
-  7|  const action: AgentActionRequest = { action_type: 'read', tool: 'h…
63
-  8|  expect(evaluatePolicy(action, DEFAULT_POLICY_RULES).decision).toBe…
64
-  |  ^
65
-  9|  });
66
-  10| 
67
-
68
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯
69
-
70
-
71
-  Test Files  1 failed | 3 passed (4)
72
-  Tests  1 failed | 43 passed (44)
73
-  Start at  00:05:31
74
-  Duration  738ms (transform 982ms, setup 0ms, import 1.39s, tests 96ms, environment 1ms)
75
-
76
-  ELIFECYCLE  Test failed. See above for more details.
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=content-crypto.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"content-crypto.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/content-crypto.test.ts"],"names":[],"mappings":""}
@@ -1,117 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const vitest_1 = require("vitest");
7
- const content_crypto_1 = require("../content-crypto");
8
- const crypto_1 = require("../crypto");
9
- const tweetnacl_1 = __importDefault(require("tweetnacl"));
10
- const tweetnacl_util_1 = require("tweetnacl-util");
11
- (0, vitest_1.describe)('content-crypto', () => {
12
- (0, vitest_1.describe)('generateWCK', () => {
13
- (0, vitest_1.it)('returns a 32-byte key', () => {
14
- const wck = (0, content_crypto_1.generateWCK)();
15
- (0, vitest_1.expect)(wck).toBeInstanceOf(Uint8Array);
16
- (0, vitest_1.expect)(wck.length).toBe(32);
17
- });
18
- (0, vitest_1.it)('generates unique keys', () => {
19
- const a = (0, content_crypto_1.generateWCK)();
20
- const b = (0, content_crypto_1.generateWCK)();
21
- (0, vitest_1.expect)(Buffer.from(a).equals(Buffer.from(b))).toBe(false);
22
- });
23
- });
24
- (0, vitest_1.describe)('wrapKey / unwrapKey (server roundtrip)', () => {
25
- (0, vitest_1.it)('wraps and unwraps a WCK with MASTER_KEY', () => {
26
- const masterKey = (0, crypto_1.generateKey)();
27
- const wck = (0, content_crypto_1.generateWCK)();
28
- const { ciphertext, nonce } = (0, content_crypto_1.wrapKey)(wck, masterKey);
29
- (0, vitest_1.expect)(typeof ciphertext).toBe('string');
30
- (0, vitest_1.expect)(typeof nonce).toBe('string');
31
- const unwrapped = (0, content_crypto_1.unwrapKey)(ciphertext, nonce, masterKey);
32
- (0, vitest_1.expect)(Buffer.from(unwrapped).equals(Buffer.from(wck))).toBe(true);
33
- });
34
- (0, vitest_1.it)('throws with wrong wrapping key', () => {
35
- const masterKey = (0, crypto_1.generateKey)();
36
- const wrongKey = (0, crypto_1.generateKey)();
37
- const wck = (0, content_crypto_1.generateWCK)();
38
- const { ciphertext, nonce } = (0, content_crypto_1.wrapKey)(wck, masterKey);
39
- (0, vitest_1.expect)(() => (0, content_crypto_1.unwrapKey)(ciphertext, nonce, wrongKey)).toThrow('unwrapKey failed');
40
- });
41
- (0, vitest_1.it)('throws with corrupted ciphertext', () => {
42
- const masterKey = (0, crypto_1.generateKey)();
43
- const wck = (0, content_crypto_1.generateWCK)();
44
- const { ciphertext, nonce } = (0, content_crypto_1.wrapKey)(wck, masterKey);
45
- // Corrupt ciphertext
46
- const bytes = (0, tweetnacl_util_1.decodeBase64)(ciphertext);
47
- bytes[0] ^= 0xff;
48
- const corrupted = Buffer.from(bytes).toString('base64');
49
- (0, vitest_1.expect)(() => (0, content_crypto_1.unwrapKey)(corrupted, nonce, masterKey)).toThrow();
50
- });
51
- });
52
- (0, vitest_1.describe)('wrapWCKForUser / unwrapWCKFromUser (passphrase roundtrip)', () => {
53
- (0, vitest_1.it)('wraps and unwraps with passphrase', () => {
54
- const wck = (0, content_crypto_1.generateWCK)();
55
- const passphrase = 'my-strong-passphrase-2024!';
56
- const { ciphertext, nonce, salt } = (0, content_crypto_1.wrapWCKForUser)(wck, passphrase);
57
- (0, vitest_1.expect)(typeof ciphertext).toBe('string');
58
- (0, vitest_1.expect)(typeof nonce).toBe('string');
59
- (0, vitest_1.expect)(typeof salt).toBe('string');
60
- const unwrapped = (0, content_crypto_1.unwrapWCKFromUser)(ciphertext, nonce, salt, passphrase);
61
- (0, vitest_1.expect)(Buffer.from(unwrapped).equals(Buffer.from(wck))).toBe(true);
62
- });
63
- (0, vitest_1.it)('throws with wrong passphrase', () => {
64
- const wck = (0, content_crypto_1.generateWCK)();
65
- const { ciphertext, nonce, salt } = (0, content_crypto_1.wrapWCKForUser)(wck, 'correct-pass');
66
- (0, vitest_1.expect)(() => (0, content_crypto_1.unwrapWCKFromUser)(ciphertext, nonce, salt, 'wrong-pass')).toThrow();
67
- });
68
- });
69
- (0, vitest_1.describe)('deriveKEK', () => {
70
- (0, vitest_1.it)('is deterministic for same passphrase+salt', () => {
71
- const salt = tweetnacl_1.default.randomBytes(32);
72
- const kek1 = (0, content_crypto_1.deriveKEK)('test-passphrase', salt);
73
- const kek2 = (0, content_crypto_1.deriveKEK)('test-passphrase', salt);
74
- (0, vitest_1.expect)(Buffer.from(kek1).equals(Buffer.from(kek2))).toBe(true);
75
- });
76
- (0, vitest_1.it)('produces different keys for different passphrases', () => {
77
- const salt = tweetnacl_1.default.randomBytes(32);
78
- const kek1 = (0, content_crypto_1.deriveKEK)('pass-1', salt);
79
- const kek2 = (0, content_crypto_1.deriveKEK)('pass-2', salt);
80
- (0, vitest_1.expect)(Buffer.from(kek1).equals(Buffer.from(kek2))).toBe(false);
81
- });
82
- (0, vitest_1.it)('produces different keys for different salts', () => {
83
- const salt1 = tweetnacl_1.default.randomBytes(32);
84
- const salt2 = tweetnacl_1.default.randomBytes(32);
85
- const kek1 = (0, content_crypto_1.deriveKEK)('same-pass', salt1);
86
- const kek2 = (0, content_crypto_1.deriveKEK)('same-pass', salt2);
87
- (0, vitest_1.expect)(Buffer.from(kek1).equals(Buffer.from(kek2))).toBe(false);
88
- });
89
- (0, vitest_1.it)('returns a 32-byte key', () => {
90
- const salt = tweetnacl_1.default.randomBytes(32);
91
- const kek = (0, content_crypto_1.deriveKEK)('test', salt);
92
- (0, vitest_1.expect)(kek.length).toBe(32);
93
- });
94
- });
95
- (0, vitest_1.describe)('cross-compatibility with existing encrypt/decrypt', () => {
96
- (0, vitest_1.it)('WCK works as a key with existing encrypt/decrypt', () => {
97
- const wck = (0, content_crypto_1.generateWCK)();
98
- const data = JSON.stringify({ tool: 'demo.write', action_type: 'write' });
99
- const encrypted = (0, crypto_1.encrypt)(data, wck);
100
- const decrypted = (0, crypto_1.decrypt)(encrypted, wck);
101
- (0, vitest_1.expect)(decrypted).toBe(data);
102
- });
103
- (0, vitest_1.it)('data encrypted with WCK cannot be decrypted with MASTER_KEY', () => {
104
- const wck = (0, content_crypto_1.generateWCK)();
105
- const masterKey = (0, crypto_1.generateKey)();
106
- const encrypted = (0, crypto_1.encrypt)('sensitive data', wck);
107
- (0, vitest_1.expect)(() => (0, crypto_1.decrypt)(encrypted, masterKey)).toThrow();
108
- });
109
- });
110
- (0, vitest_1.describe)('version constants', () => {
111
- (0, vitest_1.it)('has correct version values', () => {
112
- (0, vitest_1.expect)(content_crypto_1.PAYLOAD_VERSION_LEGACY).toBe(0);
113
- (0, vitest_1.expect)(content_crypto_1.PAYLOAD_VERSION_WCK).toBe(1);
114
- });
115
- });
116
- });
117
- //# sourceMappingURL=content-crypto.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"content-crypto.test.js","sourceRoot":"","sources":["../../src/__tests__/content-crypto.test.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const signing_js_1 = require("../signing.js");
5
- (0, vitest_1.describe)('Ed25519 Signing', () => {
6
- (0, vitest_1.it)('should generate valid keypair', () => {
7
- const kp = (0, signing_js_1.generateKeypair)();
8
- (0, vitest_1.expect)(kp.publicKey).toBeTruthy();
9
- (0, vitest_1.expect)(kp.privateKey).toBeTruthy();
10
- (0, vitest_1.expect)(kp.publicKey.length).toBeGreaterThan(0);
11
- });
12
- (0, vitest_1.it)('should sign and verify a request', () => {
13
- const kp = (0, signing_js_1.generateKeypair)();
14
- const body = { action_type: 'write', tool: 'demo', payload: { key: 'value' } };
15
- const headers = (0, signing_js_1.signRequest)(body, 'agent-123', kp.privateKey);
16
- (0, vitest_1.expect)(() => (0, signing_js_1.verifyRequest)(body, headers, kp.publicKey)).not.toThrow();
17
- });
18
- (0, vitest_1.it)('should reject tampered body (top-level field)', () => {
19
- const kp = (0, signing_js_1.generateKeypair)();
20
- const body = { action_type: 'write', tool: 'demo', payload: { key: 'value' } };
21
- const headers = (0, signing_js_1.signRequest)(body, 'agent-123', kp.privateKey);
22
- const tampered = { ...body, tool: 'admin' };
23
- (0, vitest_1.expect)(() => (0, signing_js_1.verifyRequest)(tampered, headers, kp.publicKey)).toThrow('Invalid signature');
24
- });
25
- (0, vitest_1.it)('should reject tampered nested payload field', () => {
26
- const kp = (0, signing_js_1.generateKeypair)();
27
- const body = { action_type: 'write', tool: 'demo', payload: { key: 'value', amount: 100 } };
28
- const headers = (0, signing_js_1.signRequest)(body, 'agent-123', kp.privateKey);
29
- const tampered = { ...body, payload: { key: 'value', amount: 999999 } };
30
- (0, vitest_1.expect)(() => (0, signing_js_1.verifyRequest)(tampered, headers, kp.publicKey)).toThrow('Invalid signature');
31
- });
32
- (0, vitest_1.it)('canonicalStringify should sort keys recursively at all nesting levels', () => {
33
- const obj = { z: 1, a: { y: 2, b: 3 }, m: [{ q: 4, c: 5 }] };
34
- const result = (0, signing_js_1.canonicalStringify)(obj);
35
- // All object levels must have sorted keys
36
- (0, vitest_1.expect)(result).toBe('{"a":{"b":3,"y":2},"m":[{"c":5,"q":4}],"z":1}');
37
- });
38
- (0, vitest_1.it)('should reject missing headers', () => {
39
- const kp = (0, signing_js_1.generateKeypair)();
40
- const body = { action_type: 'write', tool: 'demo', payload: {} };
41
- (0, vitest_1.expect)(() => (0, signing_js_1.verifyRequest)(body, {}, kp.publicKey)).toThrow('Missing required signature headers');
42
- });
43
- (0, vitest_1.it)('should reject stale timestamp', () => {
44
- const kp = (0, signing_js_1.generateKeypair)();
45
- const body = { action_type: 'write', tool: 'demo', payload: {} };
46
- const headers = (0, signing_js_1.signRequest)(body, 'agent-123', kp.privateKey);
47
- headers['x-timestamp'] = String(Date.now() - 10 * 60 * 1000);
48
- (0, vitest_1.expect)(() => (0, signing_js_1.verifyRequest)(body, headers, kp.publicKey)).toThrow('Timestamp skew');
49
- });
50
- });
51
- //# sourceMappingURL=signing.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signing.test.js","sourceRoot":"","sources":["../../src/__tests__/signing.test.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- /** Payload encrypted with MASTER_KEY (legacy) */
2
- export declare const PAYLOAD_VERSION_LEGACY = 0;
3
- /** Payload encrypted with per-workspace WCK */
4
- export declare const PAYLOAD_VERSION_WCK = 1;
5
- /** Generate a random 32-byte Workspace Content Key */
6
- export declare function generateWCK(): Uint8Array;
7
- /** Wrap a WCK using a wrapping key (e.g. MASTER_KEY). Returns base64 ciphertext + nonce. */
8
- export declare function wrapKey(wck: Uint8Array, wrappingKey: Uint8Array): {
9
- ciphertext: string;
10
- nonce: string;
11
- };
12
- /** Unwrap a WCK using a wrapping key. Returns the raw 32-byte WCK. */
13
- export declare function unwrapKey(ciphertext: string, nonce: string, wrappingKey: Uint8Array): Uint8Array;
14
- /** Derive a Key Encryption Key from a passphrase using scrypt. */
15
- export declare function deriveKEK(passphrase: string, salt: Uint8Array): Uint8Array;
16
- /** Wrap a WCK for a user using their passphrase. Returns base64 strings. */
17
- export declare function wrapWCKForUser(wck: Uint8Array, passphrase: string): {
18
- ciphertext: string;
19
- nonce: string;
20
- salt: string;
21
- };
22
- /** Unwrap a WCK using a user's passphrase. Returns the raw 32-byte WCK. */
23
- export declare function unwrapWCKFromUser(ciphertext: string, nonce: string, salt: string, passphrase: string): Uint8Array;
24
- //# sourceMappingURL=content-crypto.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"content-crypto.d.ts","sourceRoot":"","sources":["../src/content-crypto.ts"],"names":[],"mappings":"AAIA,iDAAiD;AACjD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,sDAAsD;AACtD,wBAAgB,WAAW,IAAI,UAAU,CAExC;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CACrB,GAAG,EAAE,UAAU,EACf,WAAW,EAAE,UAAU,GACtB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAIvC;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CACvB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,UAAU,GACtB,UAAU,CAQZ;AAED,kEAAkE;AAClE,wBAAgB,SAAS,CACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,GACf,UAAU,CAGZ;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAC5B,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,MAAM,GACjB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKrD;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,UAAU,CAIZ"}