@kya-os/mcp-i-cloudflare 1.1.0 → 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.
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Cloudflare KV Proof Archive
3
+ *
4
+ * Stores detached cryptographic proofs for audit trails and compliance.
5
+ * Provides query capabilities for monitoring and debugging.
6
+ */
7
+ /**
8
+ * KV-based proof archive for Cloudflare Workers
9
+ */
10
+ export class KVProofArchive {
11
+ kv;
12
+ keyPrefix;
13
+ defaultTTL; // seconds, 0 = never expire
14
+ constructor(kv, options = {}) {
15
+ this.kv = kv;
16
+ this.keyPrefix = options.keyPrefix || 'proof:';
17
+ this.defaultTTL = options.ttl !== undefined ? options.ttl : 86400 * 30; // 30 days default
18
+ }
19
+ /**
20
+ * Store a proof in the archive
21
+ */
22
+ async store(proof, options = {}) {
23
+ // Normalize proof format (support both full and simplified formats)
24
+ const sessionId = proof.meta?.sessionId || proof.sessionId || `no-session-${Date.now()}`;
25
+ const ts = proof.meta?.ts || proof.timestamp || Date.now();
26
+ const did = proof.meta?.did || proof.did || 'unknown-did';
27
+ const audience = proof.meta?.audience || proof.audience || 'mcp-client';
28
+ // Generate unique ID based on session + timestamp
29
+ const id = this.generateProofId(sessionId, ts);
30
+ const record = {
31
+ id,
32
+ proof,
33
+ toolName: options.toolName,
34
+ storedAt: Date.now(),
35
+ expiresAt: options.ttl || this.defaultTTL > 0
36
+ ? Date.now() + (options.ttl || this.defaultTTL) * 1000
37
+ : undefined
38
+ };
39
+ const key = this.getKey(id);
40
+ const ttl = options.ttl || this.defaultTTL;
41
+ // Store with optional TTL
42
+ if (ttl > 0) {
43
+ await this.kv.put(key, JSON.stringify(record), {
44
+ expirationTtl: ttl,
45
+ metadata: {
46
+ did,
47
+ sessionId,
48
+ audience,
49
+ ts,
50
+ toolName: options.toolName
51
+ }
52
+ });
53
+ }
54
+ else {
55
+ await this.kv.put(key, JSON.stringify(record), {
56
+ metadata: {
57
+ did,
58
+ sessionId,
59
+ audience,
60
+ ts,
61
+ toolName: options.toolName
62
+ }
63
+ });
64
+ }
65
+ // Also store index entries for queries
66
+ await this.indexProof(proof, id);
67
+ return id;
68
+ }
69
+ /**
70
+ * Retrieve a proof by ID
71
+ */
72
+ async get(id) {
73
+ const key = this.getKey(id);
74
+ const value = await this.kv.get(key);
75
+ if (!value) {
76
+ return null;
77
+ }
78
+ try {
79
+ return JSON.parse(value);
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ /**
86
+ * Query proofs with filters
87
+ */
88
+ async query(query = {}) {
89
+ const limit = query.limit || 100;
90
+ const results = [];
91
+ // List keys with prefix
92
+ const listResult = await this.kv.list({
93
+ prefix: this.keyPrefix,
94
+ limit: Math.min(limit * 2, 1000) // Get more than needed for filtering
95
+ });
96
+ // Fetch and filter proofs
97
+ for (const key of listResult.keys) {
98
+ if (results.length >= limit)
99
+ break;
100
+ const value = await this.kv.get(key.name);
101
+ if (!value)
102
+ continue;
103
+ try {
104
+ const record = JSON.parse(value);
105
+ // Apply filters (handle both proof formats)
106
+ const recSessionId = record.proof.meta?.sessionId || record.proof.sessionId;
107
+ const recDid = record.proof.meta?.did || record.proof.did;
108
+ const recAudience = record.proof.meta?.audience;
109
+ const recTs = record.proof.meta?.ts || record.proof.timestamp;
110
+ if (query.sessionId && recSessionId !== query.sessionId)
111
+ continue;
112
+ if (query.did && recDid !== query.did)
113
+ continue;
114
+ if (query.audience && recAudience && recAudience !== query.audience)
115
+ continue;
116
+ if (query.after && recTs && recTs * 1000 < query.after)
117
+ continue;
118
+ if (query.before && recTs && recTs * 1000 > query.before)
119
+ continue;
120
+ results.push(record);
121
+ }
122
+ catch {
123
+ continue;
124
+ }
125
+ }
126
+ // Sort by timestamp desc (newest first)
127
+ results.sort((a, b) => {
128
+ const aTs = a.proof.meta?.ts || a.proof.timestamp || 0;
129
+ const bTs = b.proof.meta?.ts || b.proof.timestamp || 0;
130
+ return bTs - aTs;
131
+ });
132
+ return results.slice(0, limit);
133
+ }
134
+ /**
135
+ * Get proofs for a specific session
136
+ */
137
+ async getBySession(sessionId, limit = 100) {
138
+ return this.query({ sessionId, limit });
139
+ }
140
+ /**
141
+ * Get proofs by DID
142
+ */
143
+ async getByDID(did, limit = 100) {
144
+ return this.query({ did, limit });
145
+ }
146
+ /**
147
+ * Get recent proofs
148
+ */
149
+ async getRecent(limit = 100) {
150
+ return this.query({ limit });
151
+ }
152
+ /**
153
+ * Delete a proof by ID
154
+ */
155
+ async delete(id) {
156
+ const key = this.getKey(id);
157
+ await this.kv.delete(key);
158
+ }
159
+ /**
160
+ * Get storage statistics
161
+ */
162
+ async getStats() {
163
+ const now = Date.now();
164
+ const day24h = now - 86400 * 1000;
165
+ const day7d = now - 7 * 86400 * 1000;
166
+ let total = 0;
167
+ let last24h = 0;
168
+ let last7d = 0;
169
+ let oldestTimestamp;
170
+ let newestTimestamp;
171
+ // List all proof keys
172
+ const listResult = await this.kv.list({
173
+ prefix: this.keyPrefix,
174
+ limit: 1000
175
+ });
176
+ total = listResult.keys.length;
177
+ // Sample recent proofs for time-based stats
178
+ for (const key of listResult.keys.slice(0, 100)) {
179
+ if (key.metadata) {
180
+ const ts = key.metadata.ts;
181
+ if (ts) {
182
+ const tsMs = ts * 1000;
183
+ if (tsMs > day24h)
184
+ last24h++;
185
+ if (tsMs > day7d)
186
+ last7d++;
187
+ if (!oldestTimestamp || tsMs < oldestTimestamp) {
188
+ oldestTimestamp = tsMs;
189
+ }
190
+ if (!newestTimestamp || tsMs > newestTimestamp) {
191
+ newestTimestamp = tsMs;
192
+ }
193
+ }
194
+ }
195
+ }
196
+ return {
197
+ total,
198
+ last24h,
199
+ last7d,
200
+ oldestTimestamp,
201
+ newestTimestamp
202
+ };
203
+ }
204
+ /**
205
+ * Clear all proofs (use with caution!)
206
+ */
207
+ async clear() {
208
+ let deleted = 0;
209
+ let cursor;
210
+ do {
211
+ const listResult = await this.kv.list({
212
+ prefix: this.keyPrefix,
213
+ limit: 1000,
214
+ cursor
215
+ });
216
+ for (const key of listResult.keys) {
217
+ await this.kv.delete(key.name);
218
+ deleted++;
219
+ }
220
+ cursor = listResult.list_complete ? undefined : listResult.cursor;
221
+ } while (cursor);
222
+ return deleted;
223
+ }
224
+ /**
225
+ * Generate unique proof ID
226
+ */
227
+ generateProofId(sessionId, timestamp) {
228
+ // Use session + timestamp for unique ID
229
+ // Add random suffix to handle multiple proofs in same millisecond
230
+ const random = Math.random().toString(36).substring(2, 8);
231
+ return `${sessionId}-${timestamp}-${random}`;
232
+ }
233
+ /**
234
+ * Get KV key for proof ID
235
+ */
236
+ getKey(id) {
237
+ return `${this.keyPrefix}${id}`;
238
+ }
239
+ /**
240
+ * Create index entries for efficient queries
241
+ */
242
+ async indexProof(proof, id) {
243
+ // Create index entries for common queries
244
+ const sessionId = proof.meta?.sessionId || proof.sessionId || `no-session`;
245
+ const did = proof.meta?.did || proof.did || 'unknown-did';
246
+ const audience = proof.meta?.audience || proof.audience || 'mcp-client';
247
+ const indexes = [
248
+ `session:${sessionId}:${id}`,
249
+ `did:${did}:${id}`,
250
+ `audience:${audience}:${id}`
251
+ ];
252
+ const ttl = this.defaultTTL > 0 ? this.defaultTTL : undefined;
253
+ for (const indexKey of indexes) {
254
+ const key = `${this.keyPrefix}idx:${indexKey}`;
255
+ if (ttl) {
256
+ await this.kv.put(key, id, { expirationTtl: ttl });
257
+ }
258
+ else {
259
+ await this.kv.put(key, id);
260
+ }
261
+ }
262
+ }
263
+ }
264
+ //# sourceMappingURL=kv-proof-archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv-proof-archive.js","sourceRoot":"","sources":["../../src/storage/kv-proof-archive.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kya-os/mcp-i-cloudflare",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Cloudflare Workers implementation of MCP-I framework",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "scripts": {
19
19
  "build": "tsc",
20
20
  "dev": "tsc --watch",
21
- "test": "vitest",
21
+ "test": "vitest --run",
22
22
  "lint": "eslint src/**/*.ts",
23
23
  "type-check": "tsc --noEmit"
24
24
  },
@@ -32,8 +32,8 @@
32
32
  "edge"
33
33
  ],
34
34
  "dependencies": {
35
- "@kya-os/mcp-i-core": "^1.0.0",
36
- "@kya-os/contracts": "^1.2.0",
35
+ "@kya-os/mcp-i-core": "^1.1.0",
36
+ "@kya-os/contracts": "^1.3.0",
37
37
  "@modelcontextprotocol/sdk": "^1.11.4"
38
38
  },
39
39
  "devDependencies": {