@kya-os/mcp-i 0.1.0-alpha.1.0 → 0.1.0-alpha.2.1

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 (42) hide show
  1. package/README.md +66 -90
  2. package/dist/__tests__/challenge-response.test.d.ts +5 -0
  3. package/dist/__tests__/challenge-response.test.d.ts.map +1 -0
  4. package/dist/__tests__/challenge-response.test.js +218 -0
  5. package/dist/__tests__/challenge-response.test.js.map +1 -0
  6. package/dist/__tests__/crypto.test.d.ts +5 -0
  7. package/dist/__tests__/crypto.test.d.ts.map +1 -0
  8. package/dist/__tests__/crypto.test.js +153 -0
  9. package/dist/__tests__/crypto.test.js.map +1 -0
  10. package/dist/auto-enhance.d.ts +41 -0
  11. package/dist/auto-enhance.d.ts.map +1 -0
  12. package/dist/auto-enhance.js +193 -0
  13. package/dist/auto-enhance.js.map +1 -0
  14. package/dist/auto-init.d.ts +12 -0
  15. package/dist/auto-init.d.ts.map +1 -0
  16. package/dist/auto-init.js +166 -0
  17. package/dist/auto-init.js.map +1 -0
  18. package/dist/auto.d.ts +13 -0
  19. package/dist/auto.d.ts.map +1 -0
  20. package/dist/auto.js +24 -0
  21. package/dist/auto.js.map +1 -0
  22. package/dist/crypto.d.ts +32 -0
  23. package/dist/crypto.d.ts.map +1 -0
  24. package/dist/crypto.js +117 -0
  25. package/dist/crypto.js.map +1 -0
  26. package/dist/index.d.ts +43 -28
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +208 -28
  29. package/dist/index.js.map +1 -1
  30. package/dist/patch.d.ts +22 -0
  31. package/dist/patch.d.ts.map +1 -0
  32. package/dist/patch.js +164 -0
  33. package/dist/patch.js.map +1 -0
  34. package/dist/transparent.d.ts +40 -0
  35. package/dist/transparent.d.ts.map +1 -0
  36. package/dist/transparent.js +167 -0
  37. package/dist/transparent.js.map +1 -0
  38. package/dist/types.d.ts +79 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +6 -0
  41. package/dist/types.js.map +1 -0
  42. package/package.json +19 -4
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-enhancement module for transparent MCP-I integration
4
+ *
5
+ * This module automatically wraps MCP server instances to add identity
6
+ * without requiring any code changes or type modifications.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.enhanceMCPServer = enhanceMCPServer;
10
+ exports.createMCPServerProxy = createMCPServerProxy;
11
+ exports.resolve = resolve;
12
+ exports.load = load;
13
+ exports.getCurrentIdentity = getCurrentIdentity;
14
+ exports.initializeIdentity = initializeIdentity;
15
+ const index_1 = require("./index");
16
+ // Store the singleton identity instance
17
+ let globalIdentity = null;
18
+ /**
19
+ * Wrap a response handler to automatically add MCP-I identity
20
+ */
21
+ function wrapHandler(originalHandler, identity) {
22
+ return async function (...args) {
23
+ // Call the original handler
24
+ const response = await originalHandler.apply(this, args);
25
+ // If response is null/undefined, return as-is
26
+ if (!response)
27
+ return response;
28
+ // Add identity metadata without changing the response structure
29
+ // We use Object.defineProperty to make it non-enumerable
30
+ Object.defineProperty(response, '_mcp_identity', {
31
+ value: {
32
+ did: identity.did,
33
+ signature: '', // Will be filled below
34
+ timestamp: new Date().toISOString(),
35
+ conformanceLevel: 2
36
+ },
37
+ writable: true,
38
+ enumerable: false, // Hidden from JSON.stringify by default
39
+ configurable: true
40
+ });
41
+ // Sign the response content
42
+ const contentToSign = JSON.stringify({
43
+ ...response,
44
+ _mcp_identity: {
45
+ did: identity.did,
46
+ timestamp: response._mcp_identity.timestamp,
47
+ conformanceLevel: 2
48
+ }
49
+ });
50
+ response._mcp_identity.signature = await identity.sign(contentToSign);
51
+ // Override toJSON to include _mcp_identity when serializing
52
+ const originalToJSON = response.toJSON;
53
+ response.toJSON = function () {
54
+ const result = originalToJSON ? originalToJSON.call(this) : { ...this };
55
+ result._mcp_identity = response._mcp_identity;
56
+ return result;
57
+ };
58
+ return response;
59
+ };
60
+ }
61
+ /**
62
+ * Enhance an MCP server instance with automatic identity
63
+ */
64
+ async function enhanceMCPServer(server) {
65
+ // Skip if already enhanced
66
+ if (server._mcpIdentityEnhanced) {
67
+ return server;
68
+ }
69
+ // Initialize identity if not already done
70
+ if (!globalIdentity) {
71
+ globalIdentity = await index_1.MCPIdentity.init();
72
+ }
73
+ // Wrap setRequestHandler if it exists
74
+ if (server.setRequestHandler) {
75
+ const originalSetRequestHandler = server.setRequestHandler.bind(server);
76
+ server.setRequestHandler = function (schema, handler) {
77
+ const wrappedHandler = wrapHandler(handler, globalIdentity);
78
+ return originalSetRequestHandler(schema, wrappedHandler);
79
+ };
80
+ }
81
+ // Wrap tool method if it exists
82
+ if (server.tool) {
83
+ const originalTool = server.tool.bind(server);
84
+ server.tool = function (name, schema, handler) {
85
+ const wrappedHandler = wrapHandler(handler, globalIdentity);
86
+ return originalTool(name, schema, wrappedHandler);
87
+ };
88
+ }
89
+ // Wrap resource method if it exists
90
+ if (server.resource) {
91
+ const originalResource = server.resource.bind(server);
92
+ server.resource = function (name, template, handler) {
93
+ const wrappedHandler = wrapHandler(handler, globalIdentity);
94
+ return originalResource(name, template, wrappedHandler);
95
+ };
96
+ }
97
+ // Wrap prompt method if it exists
98
+ if (server.prompt) {
99
+ const originalPrompt = server.prompt.bind(server);
100
+ server.prompt = function (name, schema, handler) {
101
+ const wrappedHandler = wrapHandler(handler, globalIdentity);
102
+ return originalPrompt(name, schema, wrappedHandler);
103
+ };
104
+ }
105
+ // Mark as enhanced
106
+ server._mcpIdentityEnhanced = true;
107
+ return server;
108
+ }
109
+ /**
110
+ * Proxy constructor for automatic enhancement
111
+ */
112
+ function createMCPServerProxy(ServerClass) {
113
+ return new Proxy(ServerClass, {
114
+ construct(target, args) {
115
+ const instance = new target(...args);
116
+ // Enhance asynchronously after construction
117
+ setImmediate(async () => {
118
+ await enhanceMCPServer(instance);
119
+ });
120
+ return instance;
121
+ }
122
+ });
123
+ }
124
+ /**
125
+ * Module loader hook for automatic enhancement
126
+ * This can be used with Node.js --loader flag
127
+ */
128
+ async function resolve(specifier, context, defaultResolve) {
129
+ return defaultResolve(specifier, context);
130
+ }
131
+ async function load(url, context, defaultLoad) {
132
+ const result = await defaultLoad(url, context);
133
+ // Only process TypeScript/JavaScript files
134
+ if (!result.source || (!url.endsWith('.js') && !url.endsWith('.ts') && !url.endsWith('.mjs'))) {
135
+ return result;
136
+ }
137
+ const source = result.source.toString();
138
+ // Check if this imports MCP SDK
139
+ if (source.includes('@modelcontextprotocol/sdk')) {
140
+ // Inject our enhancement code
141
+ const enhancedSource = `
142
+ import { enhanceMCPServer } from '@kya-os/mcp-i/auto-enhance';
143
+
144
+ // Auto-enhance any Server or McpServer instances
145
+ const originalCode = ${JSON.stringify(source)};
146
+ const moduleExports = await import('data:text/javascript;base64,' + btoa(originalCode));
147
+
148
+ // Wrap server constructors
149
+ if (moduleExports.Server) {
150
+ const OriginalServer = moduleExports.Server;
151
+ moduleExports.Server = class extends OriginalServer {
152
+ constructor(...args) {
153
+ super(...args);
154
+ setImmediate(() => enhanceMCPServer(this));
155
+ }
156
+ };
157
+ }
158
+
159
+ if (moduleExports.McpServer) {
160
+ const OriginalMcpServer = moduleExports.McpServer;
161
+ moduleExports.McpServer = class extends OriginalMcpServer {
162
+ constructor(...args) {
163
+ super(...args);
164
+ setImmediate(() => enhanceMCPServer(this));
165
+ }
166
+ };
167
+ }
168
+
169
+ export * from moduleExports;
170
+ `;
171
+ return {
172
+ ...result,
173
+ source: enhancedSource
174
+ };
175
+ }
176
+ return result;
177
+ }
178
+ /**
179
+ * Get the current identity instance
180
+ */
181
+ function getCurrentIdentity() {
182
+ return globalIdentity;
183
+ }
184
+ /**
185
+ * Initialize identity explicitly (optional)
186
+ */
187
+ async function initializeIdentity(options) {
188
+ if (!globalIdentity) {
189
+ globalIdentity = await index_1.MCPIdentity.init(options);
190
+ }
191
+ return globalIdentity;
192
+ }
193
+ //# sourceMappingURL=auto-enhance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-enhance.js","sourceRoot":"","sources":["../src/auto-enhance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Auto-initialization module for @kya-os/mcp-i
3
+ *
4
+ * This file provides automatic enhancement of MCP servers when imported.
5
+ * Just add: import '@kya-os/mcp-i/auto-init'
6
+ */
7
+ /**
8
+ * Initialize auto-enhancement
9
+ */
10
+ declare function initialize(): Promise<void>;
11
+ export { initialize as initializeMCPIdentity };
12
+ //# sourceMappingURL=auto-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-init.d.ts","sourceRoot":"","sources":["../src/auto-init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiHH;;GAEG;AACH,iBAAe,UAAU,kBAqBxB;AAMD,OAAO,EAAE,UAAU,IAAI,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-initialization module for @kya-os/mcp-i
4
+ *
5
+ * This file provides automatic enhancement of MCP servers when imported.
6
+ * Just add: import '@kya-os/mcp-i/auto-init'
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.initializeMCPIdentity = initialize;
43
+ const auto_enhance_1 = require("./auto-enhance");
44
+ // Track if we've already hooked into the module system
45
+ let isInitialized = false;
46
+ /**
47
+ * Hook into CommonJS require to automatically enhance MCP servers
48
+ */
49
+ function hookRequire() {
50
+ const Module = require('module');
51
+ const originalRequire = Module.prototype.require;
52
+ Module.prototype.require = function (id) {
53
+ const exports = originalRequire.apply(this, arguments);
54
+ // Check if this is an MCP SDK module
55
+ if (id === '@modelcontextprotocol/sdk' ||
56
+ id === '@modelcontextprotocol/sdk/server' ||
57
+ id === '@modelcontextprotocol/sdk/server/index.js' ||
58
+ id === '@modelcontextprotocol/sdk/server/mcp.js') {
59
+ // Wrap Server constructor if it exists
60
+ if (exports.Server && !exports.Server._mcpIdentityWrapped) {
61
+ const OriginalServer = exports.Server;
62
+ exports.Server = class extends OriginalServer {
63
+ constructor(...args) {
64
+ super(...args);
65
+ // Enhance after construction
66
+ setImmediate(async () => {
67
+ await (0, auto_enhance_1.enhanceMCPServer)(this);
68
+ });
69
+ }
70
+ };
71
+ exports.Server._mcpIdentityWrapped = true;
72
+ }
73
+ // Wrap McpServer constructor if it exists
74
+ if (exports.McpServer && !exports.McpServer._mcpIdentityWrapped) {
75
+ const OriginalMcpServer = exports.McpServer;
76
+ exports.McpServer = class extends OriginalMcpServer {
77
+ constructor(...args) {
78
+ super(...args);
79
+ // Enhance after construction
80
+ setImmediate(async () => {
81
+ await (0, auto_enhance_1.enhanceMCPServer)(this);
82
+ });
83
+ }
84
+ };
85
+ exports.McpServer._mcpIdentityWrapped = true;
86
+ }
87
+ }
88
+ return exports;
89
+ };
90
+ }
91
+ /**
92
+ * Hook into ES module imports
93
+ */
94
+ async function hookESModules() {
95
+ // This requires Node.js experimental loader API
96
+ // Users would need to run with: node --loader @kya-os/mcp-i/loader
97
+ // For now, we'll use a different approach - monkey-patching the global
98
+ if (typeof globalThis !== 'undefined') {
99
+ // Store original import
100
+ const globalAny = globalThis;
101
+ const originalImport = globalAny.import || (async (id) => Promise.resolve(`${id}`).then(s => __importStar(require(s))));
102
+ // Override dynamic import
103
+ globalAny.import = async function (id) {
104
+ const module = await originalImport(id);
105
+ // Check if this is an MCP SDK module
106
+ if (id === '@modelcontextprotocol/sdk' ||
107
+ id === '@modelcontextprotocol/sdk/server' ||
108
+ id.includes('@modelcontextprotocol/sdk')) {
109
+ // Wrap constructors
110
+ if (module.Server && !module.Server._mcpIdentityWrapped) {
111
+ const OriginalServer = module.Server;
112
+ module.Server = class extends OriginalServer {
113
+ constructor(...args) {
114
+ super(...args);
115
+ setImmediate(async () => {
116
+ await (0, auto_enhance_1.enhanceMCPServer)(this);
117
+ });
118
+ }
119
+ };
120
+ module.Server._mcpIdentityWrapped = true;
121
+ }
122
+ if (module.McpServer && !module.McpServer._mcpIdentityWrapped) {
123
+ const OriginalMcpServer = module.McpServer;
124
+ module.McpServer = class extends OriginalMcpServer {
125
+ constructor(...args) {
126
+ super(...args);
127
+ setImmediate(async () => {
128
+ await (0, auto_enhance_1.enhanceMCPServer)(this);
129
+ });
130
+ }
131
+ };
132
+ module.McpServer._mcpIdentityWrapped = true;
133
+ }
134
+ }
135
+ return module;
136
+ };
137
+ }
138
+ }
139
+ /**
140
+ * Initialize auto-enhancement
141
+ */
142
+ async function initialize() {
143
+ if (isInitialized)
144
+ return;
145
+ isInitialized = true;
146
+ // Initialize identity immediately
147
+ (0, auto_enhance_1.initializeIdentity)().catch(err => {
148
+ console.error('[MCP-I] Failed to initialize identity:', err.message);
149
+ });
150
+ // Hook into module loading systems
151
+ try {
152
+ hookRequire();
153
+ }
154
+ catch (err) {
155
+ // CommonJS might not be available
156
+ }
157
+ try {
158
+ await hookESModules();
159
+ }
160
+ catch (err) {
161
+ // ES modules hooks might fail
162
+ }
163
+ }
164
+ // Auto-initialize when this module is imported
165
+ initialize();
166
+ //# sourceMappingURL=auto-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-init.js","sourceRoot":"","sources":["../src/auto-init.ts"],"names":[],"mappings":"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"}
package/dist/auto.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Auto-initialization for MCP Identity
3
+ *
4
+ * Just import this file to automatically enable MCP-I for any MCP server:
5
+ *
6
+ * ```typescript
7
+ * import "@kya-os/mcp-i/auto";
8
+ * ```
9
+ *
10
+ * That's it! Your MCP server now has identity.
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=auto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../src/auto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
package/dist/auto.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-initialization for MCP Identity
4
+ *
5
+ * Just import this file to automatically enable MCP-I for any MCP server:
6
+ *
7
+ * ```typescript
8
+ * import "@kya-os/mcp-i/auto";
9
+ * ```
10
+ *
11
+ * That's it! Your MCP server now has identity.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ const index_1 = require("./index");
15
+ // Auto-initialize on import
16
+ (async () => {
17
+ try {
18
+ await (0, index_1.enableMCPIdentity)();
19
+ }
20
+ catch (error) {
21
+ console.error('[MCP-I] Failed to auto-initialize:', error);
22
+ }
23
+ })();
24
+ //# sourceMappingURL=auto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.js","sourceRoot":"","sources":["../src/auto.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAEH,mCAA4C;AAE5C,4BAA4B;AAC5B,CAAC,KAAK,IAAI,EAAE;IACV,IAAI,CAAC;QACH,MAAM,IAAA,yBAAiB,GAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Cryptographic utilities for MCP-I
3
+ * Implements Ed25519 signing and verification for challenge-response authentication
4
+ */
5
+ /**
6
+ * Generate a new Ed25519 key pair
7
+ */
8
+ export declare function generateKeyPair(): Promise<{
9
+ publicKey: string;
10
+ privateKey: string;
11
+ }>;
12
+ /**
13
+ * Sign a message with Ed25519
14
+ */
15
+ export declare function sign(message: string | Buffer, privateKeyBase64: string): Promise<string>;
16
+ /**
17
+ * Verify an Ed25519 signature
18
+ */
19
+ export declare function verify(message: string | Buffer, signatureBase64: string, publicKeyBase64: string): Promise<boolean>;
20
+ /**
21
+ * Generate a cryptographically secure nonce
22
+ */
23
+ export declare function generateNonce(length?: number): string;
24
+ /**
25
+ * Constant-time string comparison to prevent timing attacks
26
+ */
27
+ export declare function constantTimeEqual(a: string, b: string): boolean;
28
+ /**
29
+ * Convert Ed25519 public key to did:key format
30
+ */
31
+ export declare function publicKeyToDid(publicKeyBase64: string): string;
32
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAQD;AAED;;GAEG;AACH,wBAAsB,IAAI,CACxB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAW/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAS9D"}
package/dist/crypto.js ADDED
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * Cryptographic utilities for MCP-I
4
+ * Implements Ed25519 signing and verification for challenge-response authentication
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.generateKeyPair = generateKeyPair;
41
+ exports.sign = sign;
42
+ exports.verify = verify;
43
+ exports.generateNonce = generateNonce;
44
+ exports.constantTimeEqual = constantTimeEqual;
45
+ exports.publicKeyToDid = publicKeyToDid;
46
+ const ed25519 = __importStar(require("@noble/ed25519"));
47
+ const crypto_1 = require("crypto");
48
+ /**
49
+ * Generate a new Ed25519 key pair
50
+ */
51
+ async function generateKeyPair() {
52
+ const privateKey = ed25519.utils.randomPrivateKey();
53
+ const publicKey = await ed25519.getPublicKeyAsync(privateKey);
54
+ return {
55
+ publicKey: Buffer.from(publicKey).toString('base64'),
56
+ privateKey: Buffer.from(privateKey).toString('base64')
57
+ };
58
+ }
59
+ /**
60
+ * Sign a message with Ed25519
61
+ */
62
+ async function sign(message, privateKeyBase64) {
63
+ const messageBuffer = typeof message === 'string'
64
+ ? Buffer.from(message, 'utf-8')
65
+ : message;
66
+ const privateKey = Buffer.from(privateKeyBase64, 'base64');
67
+ const signature = await ed25519.signAsync(messageBuffer, privateKey);
68
+ return Buffer.from(signature).toString('base64');
69
+ }
70
+ /**
71
+ * Verify an Ed25519 signature
72
+ */
73
+ async function verify(message, signatureBase64, publicKeyBase64) {
74
+ try {
75
+ const messageBuffer = typeof message === 'string'
76
+ ? Buffer.from(message, 'utf-8')
77
+ : message;
78
+ const signature = Buffer.from(signatureBase64, 'base64');
79
+ const publicKey = Buffer.from(publicKeyBase64, 'base64');
80
+ return await ed25519.verifyAsync(signature, messageBuffer, publicKey);
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ }
86
+ /**
87
+ * Generate a cryptographically secure nonce
88
+ */
89
+ function generateNonce(length = 32) {
90
+ return (0, crypto_1.randomBytes)(length).toString('hex');
91
+ }
92
+ /**
93
+ * Constant-time string comparison to prevent timing attacks
94
+ */
95
+ function constantTimeEqual(a, b) {
96
+ if (a.length !== b.length) {
97
+ return false;
98
+ }
99
+ let result = 0;
100
+ for (let i = 0; i < a.length; i++) {
101
+ result |= a.charCodeAt(i) ^ b.charCodeAt(i);
102
+ }
103
+ return result === 0;
104
+ }
105
+ /**
106
+ * Convert Ed25519 public key to did:key format
107
+ */
108
+ function publicKeyToDid(publicKeyBase64) {
109
+ const publicKey = Buffer.from(publicKeyBase64, 'base64');
110
+ // Multicodec ed25519-pub header (0xed 0x01)
111
+ const multicodec = Buffer.from([0xed, 0x01]);
112
+ const multikey = Buffer.concat([multicodec, publicKey]);
113
+ // Base58 encode (simplified - in production use a proper base58 library)
114
+ // For now, just return a placeholder
115
+ return `did:key:z${multikey.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '')}`;
116
+ }
117
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}