@nokai/cli 1.0.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/LICENSE +21 -0
- package/README.md +193 -0
- package/dist/connection-manager.d.ts +45 -0
- package/dist/connection-manager.d.ts.map +1 -0
- package/dist/connection-manager.js +262 -0
- package/dist/connection-manager.js.map +1 -0
- package/dist/crypto.d.ts +8 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +42 -0
- package/dist/crypto.js.map +1 -0
- package/dist/db.d.ts +47 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +195 -0
- package/dist/db.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/message-protocol.d.ts +9 -0
- package/dist/message-protocol.d.ts.map +1 -0
- package/dist/message-protocol.js +85 -0
- package/dist/message-protocol.js.map +1 -0
- package/dist/peer-connection.d.ts +40 -0
- package/dist/peer-connection.d.ts.map +1 -0
- package/dist/peer-connection.js +159 -0
- package/dist/peer-connection.js.map +1 -0
- package/dist/profile.d.ts +11 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +62 -0
- package/dist/profile.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +185 -0
- package/dist/server.js.map +1 -0
- package/dist/shared/constants.d.ts +20 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +23 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +19 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/types.d.ts +128 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +41 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/signaling-client.d.ts +19 -0
- package/dist/signaling-client.d.ts.map +1 -0
- package/dist/signaling-client.js +83 -0
- package/dist/signaling-client.js.map +1 -0
- package/dist/tools/approve.d.ts +30 -0
- package/dist/tools/approve.d.ts.map +1 -0
- package/dist/tools/approve.js +46 -0
- package/dist/tools/approve.js.map +1 -0
- package/dist/tools/ask.d.ts +29 -0
- package/dist/tools/ask.d.ts.map +1 -0
- package/dist/tools/ask.js +43 -0
- package/dist/tools/ask.js.map +1 -0
- package/dist/tools/audit.d.ts +24 -0
- package/dist/tools/audit.d.ts.map +1 -0
- package/dist/tools/audit.js +39 -0
- package/dist/tools/audit.js.map +1 -0
- package/dist/tools/connect.d.ts +15 -0
- package/dist/tools/connect.d.ts.map +1 -0
- package/dist/tools/connect.js +62 -0
- package/dist/tools/connect.js.map +1 -0
- package/dist/tools/connections.d.ts +13 -0
- package/dist/tools/connections.d.ts.map +1 -0
- package/dist/tools/connections.js +34 -0
- package/dist/tools/connections.js.map +1 -0
- package/dist/tools/disconnect.d.ts +19 -0
- package/dist/tools/disconnect.d.ts.map +1 -0
- package/dist/tools/disconnect.js +23 -0
- package/dist/tools/disconnect.js.map +1 -0
- package/dist/tools/history.d.ts +24 -0
- package/dist/tools/history.d.ts.map +1 -0
- package/dist/tools/history.js +47 -0
- package/dist/tools/history.js.map +1 -0
- package/dist/tools/join.d.ts +22 -0
- package/dist/tools/join.d.ts.map +1 -0
- package/dist/tools/join.js +60 -0
- package/dist/tools/join.js.map +1 -0
- package/dist/tools/permissions.d.ts +24 -0
- package/dist/tools/permissions.d.ts.map +1 -0
- package/dist/tools/permissions.js +32 -0
- package/dist/tools/permissions.js.map +1 -0
- package/dist/tools/profile-tool.d.ts +29 -0
- package/dist/tools/profile-tool.d.ts.map +1 -0
- package/dist/tools/profile-tool.js +72 -0
- package/dist/tools/profile-tool.js.map +1 -0
- package/dist/tools/reconnect.d.ts +22 -0
- package/dist/tools/reconnect.d.ts.map +1 -0
- package/dist/tools/reconnect.js +88 -0
- package/dist/tools/reconnect.js.map +1 -0
- package/dist/tools/respond.d.ts +37 -0
- package/dist/tools/respond.d.ts.map +1 -0
- package/dist/tools/respond.js +31 -0
- package/dist/tools/respond.js.map +1 -0
- package/dist/tools/tell.d.ts +29 -0
- package/dist/tools/tell.d.ts.map +1 -0
- package/dist/tools/tell.js +45 -0
- package/dist/tools/tell.js.map +1 -0
- package/package.json +54 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNokaiServer = createNokaiServer;
|
|
4
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const profile_js_1 = require("./profile.js");
|
|
9
|
+
const db_js_1 = require("./db.js");
|
|
10
|
+
const signaling_client_js_1 = require("./signaling-client.js");
|
|
11
|
+
const connection_manager_js_1 = require("./connection-manager.js");
|
|
12
|
+
const connect_js_1 = require("./tools/connect.js");
|
|
13
|
+
const join_js_1 = require("./tools/join.js");
|
|
14
|
+
const ask_js_1 = require("./tools/ask.js");
|
|
15
|
+
const respond_js_1 = require("./tools/respond.js");
|
|
16
|
+
const connections_js_1 = require("./tools/connections.js");
|
|
17
|
+
const disconnect_js_1 = require("./tools/disconnect.js");
|
|
18
|
+
const reconnect_js_1 = require("./tools/reconnect.js");
|
|
19
|
+
const history_js_1 = require("./tools/history.js");
|
|
20
|
+
const approve_js_1 = require("./tools/approve.js");
|
|
21
|
+
const tell_js_1 = require("./tools/tell.js");
|
|
22
|
+
const permissions_js_1 = require("./tools/permissions.js");
|
|
23
|
+
const audit_js_1 = require("./tools/audit.js");
|
|
24
|
+
const profile_tool_js_1 = require("./tools/profile-tool.js");
|
|
25
|
+
const peer_connection_js_1 = require("./peer-connection.js");
|
|
26
|
+
const SIGNALING_URL = process.env.NOKAI_SIGNALING_URL || "wss://nokai-signaling.your-domain.workers.dev";
|
|
27
|
+
async function createNokaiServer() {
|
|
28
|
+
const TURN_SERVER = process.env.NOKAI_TURN_SERVER || "";
|
|
29
|
+
const TURN_USERNAME = process.env.NOKAI_TURN_USERNAME || "";
|
|
30
|
+
const TURN_PASSWORD = process.env.NOKAI_TURN_PASSWORD || "";
|
|
31
|
+
function createPeerConnectionWithConfig() {
|
|
32
|
+
return new peer_connection_js_1.PeerConnection({
|
|
33
|
+
turnServer: TURN_SERVER || undefined,
|
|
34
|
+
turnUsername: TURN_USERNAME || undefined,
|
|
35
|
+
turnPassword: TURN_PASSWORD || undefined,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const pcConfig = {
|
|
39
|
+
turnServer: TURN_SERVER || undefined,
|
|
40
|
+
turnUsername: TURN_USERNAME || undefined,
|
|
41
|
+
turnPassword: TURN_PASSWORD || undefined,
|
|
42
|
+
};
|
|
43
|
+
const profileDir = (0, profile_js_1.getProfileDir)();
|
|
44
|
+
let profile = (0, profile_js_1.loadProfile)(profileDir);
|
|
45
|
+
if (!profile) {
|
|
46
|
+
const name = process.env.NOKAI_AGENT_NAME || "Agent";
|
|
47
|
+
profile = (0, profile_js_1.createProfile)(name, profileDir);
|
|
48
|
+
}
|
|
49
|
+
const db = (0, db_js_1.createDatabase)((0, node_path_1.join)(profileDir, "nokai.db"));
|
|
50
|
+
const signalingClient = new signaling_client_js_1.SignalingClient(SIGNALING_URL);
|
|
51
|
+
const connectionManager = new connection_manager_js_1.ConnectionManager(db, profile);
|
|
52
|
+
try {
|
|
53
|
+
await signalingClient.connect();
|
|
54
|
+
signalingClient.register(profile.name, profile.publicKey, profile.deviceId);
|
|
55
|
+
signalingClient.goOnline(profile.deviceId);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
console.error("Failed to connect to signaling server:", err.message);
|
|
59
|
+
}
|
|
60
|
+
connectionManager.onIncomingMessage((msg, peerName) => {
|
|
61
|
+
if (msg.type === "query") {
|
|
62
|
+
console.error(`[NokAI] Incoming question from ${peerName}: ${msg.content}`);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// Auto-accept reconnect requests from known peers
|
|
66
|
+
signalingClient.on("reconnect_ask", async (data) => {
|
|
67
|
+
const savedConn = db.getConnectionByPeerPublicKey(data.peerPublicKey);
|
|
68
|
+
if (!savedConn) {
|
|
69
|
+
console.error(`[NokAI] Reconnect request from unknown peer: ${data.peerName}`);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
console.error(`[NokAI] Reconnect request from ${data.peerName} — auto-accepting`);
|
|
73
|
+
signalingClient.reconnectAccept(data.peerId, profile.name, profile.publicKey, profile.deviceId);
|
|
74
|
+
const pc = createPeerConnectionWithConfig();
|
|
75
|
+
pc.onIceCandidate((candidate) => {
|
|
76
|
+
signalingClient.signal(data.peerId, { type: "ice", ...candidate });
|
|
77
|
+
});
|
|
78
|
+
const signalHandler = async (signalData) => {
|
|
79
|
+
if (signalData.from === data.peerId) {
|
|
80
|
+
if (signalData.data.type === "ice") {
|
|
81
|
+
pc.addIceCandidate({
|
|
82
|
+
candidate: signalData.data.candidate,
|
|
83
|
+
mid: signalData.data.mid,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else if (signalData.data.type === "offer") {
|
|
87
|
+
const answer = await pc.createAnswer({
|
|
88
|
+
type: "offer",
|
|
89
|
+
sdp: signalData.data.sdp,
|
|
90
|
+
});
|
|
91
|
+
signalingClient.signal(data.peerId, { type: "answer", sdp: answer.sdp });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
signalingClient.on("signal", signalHandler);
|
|
96
|
+
await pc.waitForDataChannel();
|
|
97
|
+
// Remove the signal handler after connection established
|
|
98
|
+
signalingClient.removeListener("signal", signalHandler);
|
|
99
|
+
connectionManager.reactivateConnection(savedConn.id, (msg) => pc.send(msg));
|
|
100
|
+
connectionManager.setPeerClose(savedConn.id, () => pc.close());
|
|
101
|
+
pc.onMessage((msg) => connectionManager.handleIncomingMessage(savedConn.id, msg));
|
|
102
|
+
console.error(`[NokAI] Reconnected with ${data.peerName}`);
|
|
103
|
+
});
|
|
104
|
+
const server = new mcp_js_1.McpServer({
|
|
105
|
+
name: "nokai",
|
|
106
|
+
version: "0.1.0",
|
|
107
|
+
});
|
|
108
|
+
server.tool("nokai_connect", "Generate a one-time connection code (OTP) to connect with another developer's Claude Code instance.", {}, async () => ({
|
|
109
|
+
content: [{ type: "text", text: await (0, connect_js_1.handleConnect)(profile, signalingClient, connectionManager, pcConfig) }],
|
|
110
|
+
}));
|
|
111
|
+
server.tool("nokai_join", "Join a connection using a 6-digit OTP code shared by another developer.", { otp: zod_1.z.string().describe("The 6-digit connection code") }, async (args) => ({
|
|
112
|
+
content: [{ type: "text", text: await (0, join_js_1.handleJoin)(args, profile, signalingClient, connectionManager, pcConfig) }],
|
|
113
|
+
}));
|
|
114
|
+
server.tool("nokai_ask", "Send a question to a connected peer's AI agent.", {
|
|
115
|
+
peer: zod_1.z.string().describe("Name of the connected peer"),
|
|
116
|
+
question: zod_1.z.string().describe("Question to ask"),
|
|
117
|
+
context: zod_1.z.string().optional().describe("Optional context"),
|
|
118
|
+
}, async (args) => ({
|
|
119
|
+
content: [{ type: "text", text: await (0, ask_js_1.handleAsk)(args, connectionManager) }],
|
|
120
|
+
}));
|
|
121
|
+
server.tool("nokai_respond", "Reply to an incoming question from a connected peer.", {
|
|
122
|
+
peer: zod_1.z.string().describe("Name of the peer to respond to"),
|
|
123
|
+
reply_to: zod_1.z.string().describe("Message ID being answered"),
|
|
124
|
+
response: zod_1.z.string().describe("Your response"),
|
|
125
|
+
source_files: zod_1.z.array(zod_1.z.string()).optional().describe("Referenced source files"),
|
|
126
|
+
}, async (args) => ({
|
|
127
|
+
content: [{ type: "text", text: await (0, respond_js_1.handleRespond)(args, connectionManager) }],
|
|
128
|
+
}));
|
|
129
|
+
server.tool("nokai_connections", "List all active and saved NokAI connections.", {}, async () => ({
|
|
130
|
+
content: [{ type: "text", text: await (0, connections_js_1.handleConnections)(connectionManager, db) }],
|
|
131
|
+
}));
|
|
132
|
+
server.tool("nokai_disconnect", "Disconnect from a connected peer.", { peer: zod_1.z.string().describe("Name of peer to disconnect") }, async (args) => ({
|
|
133
|
+
content: [{ type: "text", text: await (0, disconnect_js_1.handleDisconnect)(args, connectionManager) }],
|
|
134
|
+
}));
|
|
135
|
+
server.tool("nokai_reconnect", "Reconnect to a previously connected peer without a new OTP. Leave peer empty to list saved connections.", { peer: zod_1.z.string().describe("Name of saved peer to reconnect to") }, async (args) => ({
|
|
136
|
+
content: [{ type: "text", text: await (0, reconnect_js_1.handleReconnect)(args, profile, signalingClient, connectionManager, pcConfig) }],
|
|
137
|
+
}));
|
|
138
|
+
server.tool("nokai_history", "View past message exchanges with a peer.", {
|
|
139
|
+
peer: zod_1.z.string().describe("Name of the peer"),
|
|
140
|
+
limit: zod_1.z.number().optional().describe("Max messages to show (default: 50)"),
|
|
141
|
+
}, async (args) => ({
|
|
142
|
+
content: [{ type: "text", text: await (0, history_js_1.handleHistory)(args, db) }],
|
|
143
|
+
}));
|
|
144
|
+
server.tool("nokai_approve", "Toggle manual approval mode for incoming queries from a peer. Actions: enable, disable, status.", {
|
|
145
|
+
peer: zod_1.z.string().describe("Name of the peer"),
|
|
146
|
+
action: zod_1.z.string().describe("enable, disable, or status"),
|
|
147
|
+
message_id: zod_1.z.string().optional().describe("Message ID for approve/reject"),
|
|
148
|
+
}, async (args) => ({
|
|
149
|
+
content: [{ type: "text", text: await (0, approve_js_1.handleApprove)(args, connectionManager, db) }],
|
|
150
|
+
}));
|
|
151
|
+
server.tool("nokai_tell", "Send an action request to a connected peer. Requires read-write permission.", {
|
|
152
|
+
peer: zod_1.z.string().describe("Name of the connected peer"),
|
|
153
|
+
instruction: zod_1.z.string().describe("What to tell the peer's agent to do"),
|
|
154
|
+
context: zod_1.z.string().optional().describe("Why this action is needed"),
|
|
155
|
+
}, async (args) => ({
|
|
156
|
+
content: [{ type: "text", text: await (0, tell_js_1.handleTell)(args, connectionManager) }],
|
|
157
|
+
}));
|
|
158
|
+
server.tool("nokai_permissions", "View or change permission level for a connection (read-only, read-write, ask-only).", {
|
|
159
|
+
peer: zod_1.z.string().describe("Name of the peer"),
|
|
160
|
+
level: zod_1.z.string().optional().describe("New level: read-only, read-write, or ask-only"),
|
|
161
|
+
}, async (args) => ({
|
|
162
|
+
content: [{ type: "text", text: await (0, permissions_js_1.handlePermissions)(args, db) }],
|
|
163
|
+
}));
|
|
164
|
+
server.tool("nokai_audit", "View the audit log of NokAI events (connections, messages, reconnections).", {
|
|
165
|
+
limit: zod_1.z.number().optional().describe("Number of events (default: 20)"),
|
|
166
|
+
peer: zod_1.z.string().optional().describe("Filter by peer name"),
|
|
167
|
+
}, async (args) => ({
|
|
168
|
+
content: [{ type: "text", text: await (0, audit_js_1.handleAudit)(args, db) }],
|
|
169
|
+
}));
|
|
170
|
+
server.tool("nokai_profile", "View or update your agent profile and capability card.", {
|
|
171
|
+
action: zod_1.z.string().describe("view, add_capability, remove_capability, or clear_capabilities"),
|
|
172
|
+
name: zod_1.z.string().optional().describe("Capability name"),
|
|
173
|
+
description: zod_1.z.string().optional().describe("Capability description"),
|
|
174
|
+
}, async (args) => ({
|
|
175
|
+
content: [{ type: "text", text: await (0, profile_tool_js_1.handleProfile)(args, profile) }],
|
|
176
|
+
}));
|
|
177
|
+
process.on("beforeExit", () => {
|
|
178
|
+
if (signalingClient.isConnected()) {
|
|
179
|
+
signalingClient.goOffline(profile.deviceId);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
183
|
+
await server.connect(transport);
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Length of OTP codes (digits) */
|
|
2
|
+
export declare const OTP_LENGTH = 6;
|
|
3
|
+
/** OTP time-to-live in milliseconds (5 minutes) */
|
|
4
|
+
export declare const OTP_TTL_MS: number;
|
|
5
|
+
/** Protocol version for message compatibility */
|
|
6
|
+
export declare const PROTOCOL_VERSION = 1;
|
|
7
|
+
/** Default permission level for new connections */
|
|
8
|
+
export declare const DEFAULT_PERMISSION: "read-only";
|
|
9
|
+
/** Timeout for waiting for peer to accept reconnection (30 seconds) */
|
|
10
|
+
export declare const RECONNECT_TIMEOUT_MS: number;
|
|
11
|
+
/** Default STUN server */
|
|
12
|
+
export declare const DEFAULT_STUN_SERVER = "stun:stun.l.google.com:19302";
|
|
13
|
+
/** ICE connection timeout in milliseconds (10 seconds) */
|
|
14
|
+
export declare const ICE_TIMEOUT_MS: number;
|
|
15
|
+
/** WebSocket close codes */
|
|
16
|
+
export declare const WS_CLOSE_NORMAL = 1000;
|
|
17
|
+
export declare const WS_CLOSE_OTP_EXPIRED = 4001;
|
|
18
|
+
export declare const WS_CLOSE_OTP_INVALID = 4002;
|
|
19
|
+
export declare const WS_CLOSE_RATE_LIMITED = 4003;
|
|
20
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,mDAAmD;AACnD,eAAO,MAAM,UAAU,QAAgB,CAAC;AAExC,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,EAAG,WAAoB,CAAC;AAEvD,uEAAuE;AACvE,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAE9C,0BAA0B;AAC1B,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAElE,0DAA0D;AAC1D,eAAO,MAAM,cAAc,QAAY,CAAC;AAExC,4BAA4B;AAC5B,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,qBAAqB,OAAO,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WS_CLOSE_RATE_LIMITED = exports.WS_CLOSE_OTP_INVALID = exports.WS_CLOSE_OTP_EXPIRED = exports.WS_CLOSE_NORMAL = exports.ICE_TIMEOUT_MS = exports.DEFAULT_STUN_SERVER = exports.RECONNECT_TIMEOUT_MS = exports.DEFAULT_PERMISSION = exports.PROTOCOL_VERSION = exports.OTP_TTL_MS = exports.OTP_LENGTH = void 0;
|
|
4
|
+
/** Length of OTP codes (digits) */
|
|
5
|
+
exports.OTP_LENGTH = 6;
|
|
6
|
+
/** OTP time-to-live in milliseconds (5 minutes) */
|
|
7
|
+
exports.OTP_TTL_MS = 5 * 60 * 1000;
|
|
8
|
+
/** Protocol version for message compatibility */
|
|
9
|
+
exports.PROTOCOL_VERSION = 1;
|
|
10
|
+
/** Default permission level for new connections */
|
|
11
|
+
exports.DEFAULT_PERMISSION = "read-only";
|
|
12
|
+
/** Timeout for waiting for peer to accept reconnection (30 seconds) */
|
|
13
|
+
exports.RECONNECT_TIMEOUT_MS = 30 * 1000;
|
|
14
|
+
/** Default STUN server */
|
|
15
|
+
exports.DEFAULT_STUN_SERVER = "stun:stun.l.google.com:19302";
|
|
16
|
+
/** ICE connection timeout in milliseconds (10 seconds) */
|
|
17
|
+
exports.ICE_TIMEOUT_MS = 10 * 1000;
|
|
18
|
+
/** WebSocket close codes */
|
|
19
|
+
exports.WS_CLOSE_NORMAL = 1000;
|
|
20
|
+
exports.WS_CLOSE_OTP_EXPIRED = 4001;
|
|
21
|
+
exports.WS_CLOSE_OTP_INVALID = 4002;
|
|
22
|
+
exports.WS_CLOSE_RATE_LIMITED = 4003;
|
|
23
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACtB,QAAA,UAAU,GAAG,CAAC,CAAC;AAE5B,mDAAmD;AACtC,QAAA,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,iDAAiD;AACpC,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAElC,mDAAmD;AACtC,QAAA,kBAAkB,GAAG,WAAoB,CAAC;AAEvD,uEAAuE;AAC1D,QAAA,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,0BAA0B;AACb,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AAElE,0DAA0D;AAC7C,QAAA,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,4BAA4B;AACf,QAAA,eAAe,GAAG,IAAI,CAAC;AACvB,QAAA,oBAAoB,GAAG,IAAI,CAAC;AAC5B,QAAA,oBAAoB,GAAG,IAAI,CAAC;AAC5B,QAAA,qBAAqB,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types.js"), exports);
|
|
18
|
+
__exportStar(require("./constants.js"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,iDAA+B"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
export interface AgentProfile {
|
|
2
|
+
name: string;
|
|
3
|
+
publicKey: string;
|
|
4
|
+
privateKey: string;
|
|
5
|
+
deviceId: string;
|
|
6
|
+
}
|
|
7
|
+
export type Permission = "read-only" | "read-write" | "ask-only";
|
|
8
|
+
export interface ConnectionRecord {
|
|
9
|
+
id: string;
|
|
10
|
+
peerName: string;
|
|
11
|
+
peerPublicKey: string;
|
|
12
|
+
permission: Permission;
|
|
13
|
+
createdAt: string;
|
|
14
|
+
lastConnected: string | null;
|
|
15
|
+
status: "active" | "dormant";
|
|
16
|
+
}
|
|
17
|
+
export interface BaseMessage {
|
|
18
|
+
id: string;
|
|
19
|
+
from: string;
|
|
20
|
+
type: string;
|
|
21
|
+
content: string;
|
|
22
|
+
timestamp: string;
|
|
23
|
+
}
|
|
24
|
+
export interface QueryMessage extends BaseMessage {
|
|
25
|
+
type: "query";
|
|
26
|
+
context?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ResponseMessage extends BaseMessage {
|
|
29
|
+
type: "response";
|
|
30
|
+
replyTo: string;
|
|
31
|
+
sourceFiles?: string[];
|
|
32
|
+
}
|
|
33
|
+
export interface StatusMessage extends BaseMessage {
|
|
34
|
+
type: "status";
|
|
35
|
+
}
|
|
36
|
+
export interface ActionMessage extends BaseMessage {
|
|
37
|
+
type: "action";
|
|
38
|
+
context?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface ActionResultMessage extends BaseMessage {
|
|
41
|
+
type: "action_result";
|
|
42
|
+
replyTo: string;
|
|
43
|
+
success: boolean;
|
|
44
|
+
sourceFiles?: string[];
|
|
45
|
+
}
|
|
46
|
+
export type PeerMessage = QueryMessage | ResponseMessage | StatusMessage | ActionMessage | ActionResultMessage;
|
|
47
|
+
export declare function isQueryMessage(msg: unknown): msg is QueryMessage;
|
|
48
|
+
export declare function isResponseMessage(msg: unknown): msg is ResponseMessage;
|
|
49
|
+
export declare function isStatusMessage(msg: unknown): msg is StatusMessage;
|
|
50
|
+
export declare function isActionMessage(msg: unknown): msg is ActionMessage;
|
|
51
|
+
export declare function isActionResultMessage(msg: unknown): msg is ActionResultMessage;
|
|
52
|
+
export interface RegisterEvent {
|
|
53
|
+
event: "register";
|
|
54
|
+
agentName: string;
|
|
55
|
+
publicKey: string;
|
|
56
|
+
deviceId: string;
|
|
57
|
+
}
|
|
58
|
+
export interface CreateOTPEvent {
|
|
59
|
+
event: "create_otp";
|
|
60
|
+
}
|
|
61
|
+
export interface JoinOTPEvent {
|
|
62
|
+
event: "join_otp";
|
|
63
|
+
otp: string;
|
|
64
|
+
agentName: string;
|
|
65
|
+
publicKey: string;
|
|
66
|
+
}
|
|
67
|
+
export interface SignalEvent {
|
|
68
|
+
event: "signal";
|
|
69
|
+
to: string;
|
|
70
|
+
data: Record<string, unknown>;
|
|
71
|
+
}
|
|
72
|
+
export interface GoOnlineEvent {
|
|
73
|
+
event: "go_online";
|
|
74
|
+
deviceId: string;
|
|
75
|
+
}
|
|
76
|
+
export interface GoOfflineEvent {
|
|
77
|
+
event: "go_offline";
|
|
78
|
+
deviceId: string;
|
|
79
|
+
}
|
|
80
|
+
export interface ReconnectRequestEvent {
|
|
81
|
+
event: "reconnect_req";
|
|
82
|
+
targetDeviceId: string;
|
|
83
|
+
agentName: string;
|
|
84
|
+
publicKey: string;
|
|
85
|
+
deviceId: string;
|
|
86
|
+
}
|
|
87
|
+
export interface ReconnectAskEvent {
|
|
88
|
+
event: "reconnect_ask";
|
|
89
|
+
peerName: string;
|
|
90
|
+
peerPublicKey: string;
|
|
91
|
+
peerId: string;
|
|
92
|
+
}
|
|
93
|
+
export interface ReconnectAcceptEvent {
|
|
94
|
+
event: "reconnect_accept";
|
|
95
|
+
targetDeviceId: string;
|
|
96
|
+
agentName: string;
|
|
97
|
+
publicKey: string;
|
|
98
|
+
deviceId: string;
|
|
99
|
+
}
|
|
100
|
+
export interface PeerOnlineEvent {
|
|
101
|
+
event: "peer_online";
|
|
102
|
+
peerDeviceId: string;
|
|
103
|
+
peerName: string;
|
|
104
|
+
}
|
|
105
|
+
export type ClientEvent = RegisterEvent | CreateOTPEvent | JoinOTPEvent | SignalEvent | GoOnlineEvent | GoOfflineEvent | ReconnectRequestEvent | ReconnectAcceptEvent;
|
|
106
|
+
export interface OTPCreatedEvent {
|
|
107
|
+
event: "otp_created";
|
|
108
|
+
otp: string;
|
|
109
|
+
expiresAt: string;
|
|
110
|
+
}
|
|
111
|
+
export interface OTPMatchedEvent {
|
|
112
|
+
event: "otp_matched";
|
|
113
|
+
peerName: string;
|
|
114
|
+
peerPublicKey: string;
|
|
115
|
+
peerId: string;
|
|
116
|
+
}
|
|
117
|
+
export interface SignalForwardEvent {
|
|
118
|
+
event: "signal";
|
|
119
|
+
from: string;
|
|
120
|
+
data: Record<string, unknown>;
|
|
121
|
+
}
|
|
122
|
+
export interface ErrorEvent {
|
|
123
|
+
event: "error";
|
|
124
|
+
message: string;
|
|
125
|
+
code?: string;
|
|
126
|
+
}
|
|
127
|
+
export type ServerEvent = OTPCreatedEvent | OTPMatchedEvent | SignalForwardEvent | ErrorEvent | ReconnectAskEvent | PeerOnlineEvent;
|
|
128
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// --- Agent Identity ---
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.isQueryMessage = isQueryMessage;
|
|
5
|
+
exports.isResponseMessage = isResponseMessage;
|
|
6
|
+
exports.isStatusMessage = isStatusMessage;
|
|
7
|
+
exports.isActionMessage = isActionMessage;
|
|
8
|
+
exports.isActionResultMessage = isActionResultMessage;
|
|
9
|
+
// --- Type Guards ---
|
|
10
|
+
function hasRequiredFields(msg) {
|
|
11
|
+
if (typeof msg !== "object" || msg === null)
|
|
12
|
+
return false;
|
|
13
|
+
const m = msg;
|
|
14
|
+
return (typeof m.id === "string" &&
|
|
15
|
+
typeof m.from === "string" &&
|
|
16
|
+
typeof m.type === "string" &&
|
|
17
|
+
typeof m.content === "string" &&
|
|
18
|
+
typeof m.timestamp === "string");
|
|
19
|
+
}
|
|
20
|
+
function isQueryMessage(msg) {
|
|
21
|
+
return hasRequiredFields(msg) && msg.type === "query";
|
|
22
|
+
}
|
|
23
|
+
function isResponseMessage(msg) {
|
|
24
|
+
if (!hasRequiredFields(msg))
|
|
25
|
+
return false;
|
|
26
|
+
const m = msg;
|
|
27
|
+
return m.type === "response" && typeof m.replyTo === "string";
|
|
28
|
+
}
|
|
29
|
+
function isStatusMessage(msg) {
|
|
30
|
+
return hasRequiredFields(msg) && msg.type === "status";
|
|
31
|
+
}
|
|
32
|
+
function isActionMessage(msg) {
|
|
33
|
+
return hasRequiredFields(msg) && msg.type === "action";
|
|
34
|
+
}
|
|
35
|
+
function isActionResultMessage(msg) {
|
|
36
|
+
if (!hasRequiredFields(msg))
|
|
37
|
+
return false;
|
|
38
|
+
const m = msg;
|
|
39
|
+
return m.type === "action_result" && typeof m.replyTo === "string" && typeof m.success === "boolean";
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":";AAAA,yBAAyB;;AA8EzB,wCAEC;AAED,8CAIC;AAED,0CAEC;AAED,0CAEC;AAED,sDAIC;AApCD,sBAAsB;AAEtB,SAAS,iBAAiB,CAAC,GAAY;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,CACL,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;QACxB,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAC7B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAChC,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,GAAY;IACzC,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAK,GAAmB,CAAC,IAAI,KAAK,OAAO,CAAC;AACzE,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC;AAChE,CAAC;AAED,SAAgB,eAAe,CAAC,GAAY;IAC1C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAK,GAAmB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1E,CAAC;AAED,SAAgB,eAAe,CAAC,GAAY;IAC1C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAK,GAAmB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1E,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAY;IAChD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;AACvG,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
export declare class SignalingClient extends EventEmitter {
|
|
3
|
+
private ws;
|
|
4
|
+
private url;
|
|
5
|
+
constructor(url: string);
|
|
6
|
+
connect(): Promise<void>;
|
|
7
|
+
isConnected(): boolean;
|
|
8
|
+
private send;
|
|
9
|
+
register(agentName: string, publicKey: string, deviceId: string): void;
|
|
10
|
+
createOTP(): void;
|
|
11
|
+
joinOTP(otp: string, agentName: string, publicKey: string): void;
|
|
12
|
+
signal(to: string, data: Record<string, unknown>): void;
|
|
13
|
+
goOnline(deviceId: string): void;
|
|
14
|
+
goOffline(deviceId: string): void;
|
|
15
|
+
reconnectRequest(targetDeviceId: string, agentName: string, publicKey: string, deviceId: string): void;
|
|
16
|
+
reconnectAccept(targetDeviceId: string, agentName: string, publicKey: string, deviceId: string): void;
|
|
17
|
+
disconnect(): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=signaling-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signaling-client.d.ts","sourceRoot":"","sources":["../src/signaling-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;gBAER,GAAG,EAAE,MAAM;IAKvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BxB,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,IAAI;IAOZ,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAItE,SAAS,IAAI,IAAI;IAIjB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIhE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIhC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIjC,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAItG,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrG,UAAU,IAAI,IAAI;CAMnB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
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
|
+
exports.SignalingClient = void 0;
|
|
7
|
+
const ws_1 = __importDefault(require("ws"));
|
|
8
|
+
const node_events_1 = require("node:events");
|
|
9
|
+
class SignalingClient extends node_events_1.EventEmitter {
|
|
10
|
+
ws = null;
|
|
11
|
+
url;
|
|
12
|
+
constructor(url) {
|
|
13
|
+
super();
|
|
14
|
+
this.url = url;
|
|
15
|
+
}
|
|
16
|
+
connect() {
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
this.ws = new ws_1.default(this.url);
|
|
19
|
+
this.ws.on("open", () => {
|
|
20
|
+
resolve();
|
|
21
|
+
});
|
|
22
|
+
this.ws.on("message", (data) => {
|
|
23
|
+
try {
|
|
24
|
+
const parsed = JSON.parse(data.toString());
|
|
25
|
+
if (parsed.event) {
|
|
26
|
+
this.emit(parsed.event, parsed);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// ignore malformed messages
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
this.ws.on("error", (err) => {
|
|
34
|
+
reject(err);
|
|
35
|
+
});
|
|
36
|
+
this.ws.on("close", () => {
|
|
37
|
+
this.ws = null;
|
|
38
|
+
this.emit("disconnected");
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
isConnected() {
|
|
43
|
+
return this.ws !== null && this.ws.readyState === ws_1.default.OPEN;
|
|
44
|
+
}
|
|
45
|
+
send(data) {
|
|
46
|
+
if (!this.ws || this.ws.readyState !== ws_1.default.OPEN) {
|
|
47
|
+
throw new Error("Not connected to signaling server");
|
|
48
|
+
}
|
|
49
|
+
this.ws.send(JSON.stringify(data));
|
|
50
|
+
}
|
|
51
|
+
register(agentName, publicKey, deviceId) {
|
|
52
|
+
this.send({ event: "register", agentName, publicKey, deviceId });
|
|
53
|
+
}
|
|
54
|
+
createOTP() {
|
|
55
|
+
this.send({ event: "create_otp" });
|
|
56
|
+
}
|
|
57
|
+
joinOTP(otp, agentName, publicKey) {
|
|
58
|
+
this.send({ event: "join_otp", otp, agentName, publicKey });
|
|
59
|
+
}
|
|
60
|
+
signal(to, data) {
|
|
61
|
+
this.send({ event: "signal", to, data });
|
|
62
|
+
}
|
|
63
|
+
goOnline(deviceId) {
|
|
64
|
+
this.send({ event: "go_online", deviceId });
|
|
65
|
+
}
|
|
66
|
+
goOffline(deviceId) {
|
|
67
|
+
this.send({ event: "go_offline", deviceId });
|
|
68
|
+
}
|
|
69
|
+
reconnectRequest(targetDeviceId, agentName, publicKey, deviceId) {
|
|
70
|
+
this.send({ event: "reconnect_req", targetDeviceId, agentName, publicKey, deviceId });
|
|
71
|
+
}
|
|
72
|
+
reconnectAccept(targetDeviceId, agentName, publicKey, deviceId) {
|
|
73
|
+
this.send({ event: "reconnect_accept", targetDeviceId, agentName, publicKey, deviceId });
|
|
74
|
+
}
|
|
75
|
+
disconnect() {
|
|
76
|
+
if (this.ws) {
|
|
77
|
+
this.ws.close();
|
|
78
|
+
this.ws = null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.SignalingClient = SignalingClient;
|
|
83
|
+
//# sourceMappingURL=signaling-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signaling-client.js","sourceRoot":"","sources":["../src/signaling-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ConnectionManager } from "../connection-manager.js";
|
|
2
|
+
import type { NokaiDB } from "../db.js";
|
|
3
|
+
export declare const approveToolDefinition: {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object";
|
|
8
|
+
properties: {
|
|
9
|
+
peer: {
|
|
10
|
+
type: string;
|
|
11
|
+
description: string;
|
|
12
|
+
};
|
|
13
|
+
action: {
|
|
14
|
+
type: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
message_id: {
|
|
18
|
+
type: string;
|
|
19
|
+
description: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
required: string[];
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export declare function handleApprove(args: {
|
|
26
|
+
peer: string;
|
|
27
|
+
action: string;
|
|
28
|
+
message_id?: string;
|
|
29
|
+
}, connectionManager: ConnectionManager, db: NokaiDB): Promise<string>;
|
|
30
|
+
//# sourceMappingURL=approve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/tools/approve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;CAajC,CAAC;AAEF,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3D,iBAAiB,EAAE,iBAAiB,EACpC,EAAE,EAAE,OAAO,GACV,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
|