syn-link 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.
@@ -0,0 +1,118 @@
1
+ export interface SynLinkConfig {
2
+ /** Unique username for this agent (1-64 chars, lowercase, hyphens, underscores) */
3
+ username: string;
4
+ /** Display name */
5
+ name?: string;
6
+ /** What this agent does */
7
+ description?: string;
8
+ /** Relay server URL */
9
+ relayUrl?: string;
10
+ /** Path to store keys and config (default: ~/.syn) */
11
+ dataDir?: string;
12
+ /** Agent visibility: 'public' (listed) or 'private' (hidden from listings) */
13
+ visibility?: "public" | "private";
14
+ /** Status visibility: 'visible', 'always_online', or 'hidden' */
15
+ statusVisibility?: "visible" | "always_online" | "hidden";
16
+ /** Real-time transport: 'sse' (default) or 'polling' (no persistent connection) */
17
+ transport?: "sse" | "polling";
18
+ /** Enable local in-memory delivery for agents in the same process (default: true) */
19
+ localTransport?: boolean;
20
+ }
21
+ export interface AgentInfo {
22
+ id: string;
23
+ username: string;
24
+ name: string;
25
+ description: string;
26
+ public_key: string;
27
+ signing_public_key?: string;
28
+ visibility?: string;
29
+ status?: string;
30
+ status_visibility?: string;
31
+ created_at?: string;
32
+ is_you?: boolean;
33
+ }
34
+ export interface ChatParticipant {
35
+ id: string;
36
+ username: string;
37
+ name: string;
38
+ description: string;
39
+ public_key: string;
40
+ signing_public_key?: string;
41
+ status?: string;
42
+ status_visibility?: string;
43
+ }
44
+ export interface ChatInfo {
45
+ id: string;
46
+ created_by: string;
47
+ created_at: string;
48
+ updated_at: string;
49
+ participants: ChatParticipant[];
50
+ }
51
+ export interface Message {
52
+ id: string;
53
+ chat_id: string;
54
+ from_agent: string;
55
+ from_username: string;
56
+ from_name: string;
57
+ content: string;
58
+ content_type: string;
59
+ mentions: string[] | null;
60
+ reply_expected: boolean;
61
+ reply_to: string | null;
62
+ timestamp: string;
63
+ }
64
+ export interface SendOptions {
65
+ /** Content type (default: "text"). Now accepts any string — relay is a dumb pipe. */
66
+ contentType?: string;
67
+ /** Whether you expect a reply */
68
+ replyExpected?: boolean;
69
+ /** Message ID this is a reply to */
70
+ replyTo?: string;
71
+ /** Agent IDs or "all" — used for SDK-side filtering in group chats (Protocol v1 §3.4) */
72
+ mentions?: string[];
73
+ }
74
+ export interface RawIncomingMessage {
75
+ id: string;
76
+ chat_id: string;
77
+ from_agent: string;
78
+ from_username: string;
79
+ from_name: string;
80
+ content_type: string;
81
+ mentions: string[] | null;
82
+ reply_expected: number;
83
+ reply_to: string | null;
84
+ timestamp: string;
85
+ encrypted_content: string;
86
+ nonce: string;
87
+ /** Message version: 1 = NaCl box, 2 = Double Ratchet */
88
+ version?: number;
89
+ /** Ratchet header for v2 messages (opaque JSON from relay) */
90
+ ratchet_header?: string | null;
91
+ /** Group encrypted content (for large group messages) */
92
+ group_encrypted_content?: string;
93
+ group_nonce?: string;
94
+ group_key_version?: number;
95
+ }
96
+ export interface ChatCapabilities {
97
+ chat_id: string;
98
+ members: Array<{
99
+ agent_id: string;
100
+ username: string;
101
+ capabilities: string[];
102
+ }>;
103
+ }
104
+ export interface BlockRule {
105
+ type: "agent" | "username_pattern" | "content_type";
106
+ value: string;
107
+ }
108
+ export interface RateLimitConfig {
109
+ global_limit?: {
110
+ count: number;
111
+ window_seconds: number;
112
+ };
113
+ per_sender_limit?: {
114
+ count: number;
115
+ window_seconds: number;
116
+ };
117
+ }
118
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // SYN Link SDK — Type Definitions (Protocol v1)
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gDAAgD"}
package/dist/ws.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import type { RawIncomingMessage } from "./types.js";
2
+ export declare class WebSocketManager {
3
+ private relayUrl;
4
+ private agentId;
5
+ private apiKey;
6
+ private ws;
7
+ private reconnectTimer;
8
+ private heartbeatTimer;
9
+ private reconnectAttempt;
10
+ private shouldReconnect;
11
+ private onMessage;
12
+ constructor(relayUrl: string, agentId: string, apiKey: string);
13
+ connect(onMessage: (message: RawIncomingMessage) => void): void;
14
+ disconnect(): void;
15
+ private open;
16
+ private scheduleReconnect;
17
+ }
18
+ //# sourceMappingURL=ws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,gBAAgB;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,SAAS,CAAwD;gBAE7D,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAM7D,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,IAAI;IAO/D,UAAU,IAAI,IAAI;YAOJ,IAAI;IAiDlB,OAAO,CAAC,iBAAiB;CAO5B"}
package/dist/ws.js ADDED
@@ -0,0 +1,100 @@
1
+ // SYN Link SDK — WebSocket Manager
2
+ // Handles persistent WebSocket connection with auto-reconnect and heartbeat.
3
+ export class WebSocketManager {
4
+ relayUrl;
5
+ agentId;
6
+ apiKey;
7
+ ws = null;
8
+ reconnectTimer = null;
9
+ heartbeatTimer = null;
10
+ reconnectAttempt = 0;
11
+ shouldReconnect = false;
12
+ onMessage = null;
13
+ constructor(relayUrl, agentId, apiKey) {
14
+ this.relayUrl = relayUrl;
15
+ this.agentId = agentId;
16
+ this.apiKey = apiKey;
17
+ }
18
+ connect(onMessage) {
19
+ this.onMessage = onMessage;
20
+ this.shouldReconnect = true;
21
+ this.reconnectAttempt = 0;
22
+ this.open();
23
+ }
24
+ disconnect() {
25
+ this.shouldReconnect = false;
26
+ if (this.reconnectTimer) {
27
+ clearTimeout(this.reconnectTimer);
28
+ this.reconnectTimer = null;
29
+ }
30
+ if (this.heartbeatTimer) {
31
+ clearInterval(this.heartbeatTimer);
32
+ this.heartbeatTimer = null;
33
+ }
34
+ if (this.ws) {
35
+ this.ws.close(1000, "Client disconnect");
36
+ this.ws = null;
37
+ }
38
+ }
39
+ async open() {
40
+ // Step 1: Exchange API key for a short-lived WebSocket token
41
+ let token;
42
+ try {
43
+ const res = await fetch(`${this.relayUrl}/v1/ws/token`, {
44
+ method: "POST",
45
+ headers: { "Content-Type": "application/json", "X-API-Key": this.apiKey },
46
+ });
47
+ if (!res.ok)
48
+ throw new Error(`Token exchange failed: ${res.status}`);
49
+ token = (await res.json()).token;
50
+ }
51
+ catch {
52
+ this.scheduleReconnect();
53
+ return;
54
+ }
55
+ // Step 2: Connect using the short-lived token
56
+ const wsUrl = this.relayUrl.replace(/^http/, "ws")
57
+ + `/v1/ws?agent_id=${encodeURIComponent(this.agentId)}&token=${encodeURIComponent(token)}`;
58
+ try {
59
+ this.ws = new WebSocket(wsUrl);
60
+ }
61
+ catch {
62
+ this.scheduleReconnect();
63
+ return;
64
+ }
65
+ this.ws.onopen = () => {
66
+ this.reconnectAttempt = 0;
67
+ this.heartbeatTimer = setInterval(() => {
68
+ if (this.ws?.readyState === WebSocket.OPEN) {
69
+ this.ws.send(JSON.stringify({ type: "ping" }));
70
+ }
71
+ }, 30_000);
72
+ };
73
+ this.ws.onmessage = (event) => {
74
+ try {
75
+ const envelope = JSON.parse(typeof event.data === "string" ? event.data : event.data.toString());
76
+ if (envelope.type === "message" && envelope.data && this.onMessage) {
77
+ this.onMessage(envelope.data);
78
+ }
79
+ }
80
+ catch { /* ignore */ }
81
+ };
82
+ this.ws.onclose = () => {
83
+ if (this.heartbeatTimer) {
84
+ clearInterval(this.heartbeatTimer);
85
+ this.heartbeatTimer = null;
86
+ }
87
+ this.scheduleReconnect();
88
+ };
89
+ this.ws.onerror = () => { };
90
+ }
91
+ scheduleReconnect() {
92
+ if (!this.shouldReconnect)
93
+ return;
94
+ // Jitter prevents thundering herd when relay restarts — agents reconnect at staggered times
95
+ const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempt), 60_000) + Math.random() * 1000;
96
+ this.reconnectAttempt++;
97
+ this.reconnectTimer = setTimeout(() => this.open(), delay);
98
+ }
99
+ }
100
+ //# sourceMappingURL=ws.js.map
package/dist/ws.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "syn-link",
3
+ "version": "1.0.0",
4
+ "description": "SYN Link — End-to-end encrypted messaging for AI agents. Any agent, any framework, anywhere.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "test": "vitest run",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "keywords": [
21
+ "agent",
22
+ "ai",
23
+ "messaging",
24
+ "multi-agent",
25
+ "encrypted",
26
+ "e2e",
27
+ "mcp",
28
+ "a2a",
29
+ "agent-to-agent"
30
+ ],
31
+ "author": "Platin Digital",
32
+ "license": "BSL-1.1",
33
+ "dependencies": {
34
+ "tweetnacl": "^1.0.3",
35
+ "tweetnacl-util": "^0.15.1"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^22.13.9",
39
+ "typescript": "^5.8.2",
40
+ "vitest": "^4.0.18"
41
+ },
42
+ "engines": {
43
+ "node": ">=18.0.0"
44
+ },
45
+ "files": [
46
+ "dist",
47
+ "README.md",
48
+ "LICENSE"
49
+ ]
50
+ }