@onsignet/daemon 0.1.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 @@
1
+ {"version":3,"file":"relay-client.d.ts","sourceRoot":"","sources":["../src/relay-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,aAAa,KAAK,IAAI,CAAC;CACxD;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,OAAO,EAAE,kBAAkB;IAIvC,OAAO,IAAI,IAAI;IA4Gf,OAAO,CAAC,iBAAiB;IASzB,IAAI,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO;IAUvC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAUlC,UAAU,IAAI,IAAI;IAclB,WAAW,IAAI,OAAO;CAGvB"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ /**
3
+ * WebSocket client to relay: signed challenge auth, send envelopes, reconnect with backoff.
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RelayClient = void 0;
10
+ const ws_1 = __importDefault(require("ws"));
11
+ const core_1 = require("@onsignet/core");
12
+ const INITIAL_BACKOFF_MS = 500;
13
+ const MAX_BACKOFF_MS = 30_000;
14
+ const VERSION = process.env.SIGNET_VERSION ?? "0.1.0";
15
+ class RelayClient {
16
+ options;
17
+ ws = null;
18
+ backoff = INITIAL_BACKOFF_MS;
19
+ reconnectTimer = null;
20
+ registered = false;
21
+ awaitingChallenge = false;
22
+ constructor(options) {
23
+ this.options = options;
24
+ }
25
+ connect() {
26
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN)
27
+ return;
28
+ const ws = new ws_1.default(this.options.relayUrl);
29
+ this.ws = ws;
30
+ this.awaitingChallenge = true;
31
+ ws.on("open", () => {
32
+ // Wait for challenge from relay before sending handshake
33
+ });
34
+ ws.on("message", (data) => {
35
+ const raw = typeof data === "string" ? data : String(data);
36
+ // Phase 1: waiting for challenge from relay
37
+ if (this.awaitingChallenge) {
38
+ try {
39
+ const msg = JSON.parse(raw);
40
+ if (msg.type === "challenge" && typeof msg.challenge === "string") {
41
+ const challengeBytes = (0, core_1.decodeBase64)(msg.challenge);
42
+ const signature = (0, core_1.sign)(challengeBytes, this.options.ed25519KeyPair.secretKey);
43
+ ws.send(JSON.stringify({
44
+ nodeId: this.options.nodeId,
45
+ signature: (0, core_1.encodeBase64)(signature),
46
+ version: VERSION,
47
+ }));
48
+ this.awaitingChallenge = false;
49
+ return;
50
+ }
51
+ // Backward compat: if relay doesn't send challenge, send plain handshake
52
+ ws.send(JSON.stringify({ nodeId: this.options.nodeId, version: VERSION }));
53
+ this.awaitingChallenge = false;
54
+ }
55
+ catch {
56
+ // ignore
57
+ }
58
+ return;
59
+ }
60
+ // Phase 2: waiting for registration confirmation
61
+ if (!this.registered) {
62
+ try {
63
+ const msg = JSON.parse(raw);
64
+ if (msg.type === "registered") {
65
+ this.registered = true;
66
+ this.backoff = INITIAL_BACKOFF_MS;
67
+ if (msg.warning)
68
+ console.warn(`[relay] ${msg.warning}`);
69
+ this.options.onConnectionChange?.(true);
70
+ }
71
+ else if (msg.type === "error") {
72
+ console.error("[relay] Auth rejected:", raw);
73
+ ws.close();
74
+ }
75
+ }
76
+ catch {
77
+ // ignore
78
+ }
79
+ return;
80
+ }
81
+ // Phase 3: normal operation
82
+ try {
83
+ const parsed = JSON.parse(raw);
84
+ if (parsed.type === "signet_web_chat" && typeof parsed.sessionId === "string") {
85
+ this.options.onWebChatMessage?.({
86
+ sessionId: parsed.sessionId,
87
+ visitorAuthLevel: typeof parsed.visitorAuthLevel === "string" ? parsed.visitorAuthLevel : "anonymous",
88
+ content: parsed.content,
89
+ });
90
+ return;
91
+ }
92
+ if (parsed.type === "key_revocation" && parsed.revocation) {
93
+ this.options.onKeyRevocation?.(parsed.revocation);
94
+ return;
95
+ }
96
+ if (parsed.type === "error" && parsed.code === "E_KEY_REVOKED") {
97
+ console.error("[relay] This node's key has been revoked!");
98
+ this.options.onConnectionChange?.(false);
99
+ return;
100
+ }
101
+ const envelope = parsed;
102
+ if (envelope.protocol && envelope.to !== undefined) {
103
+ void this.options.onMessage(envelope);
104
+ }
105
+ }
106
+ catch {
107
+ // ignore non-envelope messages
108
+ }
109
+ });
110
+ ws.on("close", () => {
111
+ this.ws = null;
112
+ this.registered = false;
113
+ this.awaitingChallenge = false;
114
+ this.options.onConnectionChange?.(false);
115
+ this.scheduleReconnect();
116
+ });
117
+ ws.on("error", () => {
118
+ this.options.onConnectionChange?.(false);
119
+ });
120
+ }
121
+ scheduleReconnect() {
122
+ if (this.reconnectTimer)
123
+ return;
124
+ this.reconnectTimer = setTimeout(() => {
125
+ this.reconnectTimer = null;
126
+ this.connect();
127
+ this.backoff = Math.min(this.backoff * 2, MAX_BACKOFF_MS);
128
+ }, this.backoff);
129
+ }
130
+ send(wire) {
131
+ if (!this.ws || this.ws.readyState !== ws_1.default.OPEN || !this.registered)
132
+ return false;
133
+ try {
134
+ this.ws.send(JSON.stringify(wire));
135
+ return true;
136
+ }
137
+ catch {
138
+ return false;
139
+ }
140
+ }
141
+ sendRaw(payload) {
142
+ if (!this.ws || this.ws.readyState !== ws_1.default.OPEN || !this.registered)
143
+ return false;
144
+ try {
145
+ this.ws.send(JSON.stringify(payload));
146
+ return true;
147
+ }
148
+ catch {
149
+ return false;
150
+ }
151
+ }
152
+ disconnect() {
153
+ if (this.reconnectTimer) {
154
+ clearTimeout(this.reconnectTimer);
155
+ this.reconnectTimer = null;
156
+ }
157
+ if (this.ws) {
158
+ this.ws.close();
159
+ this.ws = null;
160
+ }
161
+ this.registered = false;
162
+ this.awaitingChallenge = false;
163
+ this.options.onConnectionChange?.(false);
164
+ }
165
+ isConnected() {
166
+ return this.ws?.readyState === ws_1.default.OPEN && this.registered;
167
+ }
168
+ }
169
+ exports.RelayClient = RelayClient;
170
+ //# sourceMappingURL=relay-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-client.js","sourceRoot":"","sources":["../src/relay-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Local HTTP API: POST /send, GET /messages, GET /status, GET /discover,
3
+ * GET /pending, POST /approve, POST /deny, GET /policies, PUT /policies, GET /activity.
4
+ * Optionally serves oversight UI static files from uiPath.
5
+ */
6
+ import express from "express";
7
+ import { type SignetEnvelope, type SignetEnvelopeWire } from "@onsignet/core";
8
+ import type { PolicyRule } from "./policies.js";
9
+ export interface PendingMessage {
10
+ messageId: string;
11
+ from: string;
12
+ to: string;
13
+ timestamp: string;
14
+ payload: {
15
+ type: string;
16
+ content: Record<string, unknown>;
17
+ };
18
+ capabilityScope?: string;
19
+ }
20
+ export interface HttpServerDeps {
21
+ nodeId: string;
22
+ relayUrl: string;
23
+ /** Base64 X25519 public key for recipients to use when sending to this daemon. */
24
+ x25519PublicKeyBase64: string;
25
+ ownerAttestation?: boolean;
26
+ isConnected: () => boolean;
27
+ /** to, payload, and recipient X25519 public key (base64) for encryption. */
28
+ buildAndSend: (_to: string, _payload: {
29
+ type: string;
30
+ content: Record<string, unknown>;
31
+ }, _recipientX25519PublicKeyBase64: string) => SignetEnvelopeWire | null;
32
+ getMessages: (_limit?: number) => SignetEnvelope[];
33
+ discoverAgents: () => Promise<Array<{
34
+ nodeId: string;
35
+ x25519PublicKey?: string;
36
+ }>>;
37
+ getPending: () => PendingMessage[];
38
+ approve: (_messageId: string) => boolean;
39
+ deny: (_messageId: string, _reason?: string) => boolean;
40
+ getPolicies: () => PolicyRule[];
41
+ setPolicies: (_rules: PolicyRule[]) => void;
42
+ getActivity: (_limit: number) => {
43
+ entries: unknown[];
44
+ lastHash: string;
45
+ chainValid: boolean;
46
+ };
47
+ /** Optional: get conversation history with a contact (from audit log). */
48
+ getConversationHistory?: (_withNodeId: string, _limit?: number) => Array<{
49
+ timestamp: string;
50
+ event: string;
51
+ messageId?: string;
52
+ from?: string;
53
+ to?: string;
54
+ }>;
55
+ /** Optional: send web chat reply back through relay to browser session. */
56
+ sendWebChatReply?: (_sessionId: string, _content: {
57
+ text: string;
58
+ }) => boolean;
59
+ /** Optional: get pending web chat messages (for dashboard). */
60
+ getWebChatIncoming?: () => Array<{
61
+ sessionId: string;
62
+ visitorAuthLevel: string;
63
+ content: unknown;
64
+ receivedAt: string;
65
+ }>;
66
+ /** Optional path to oversight UI static files (e.g. public folder). */
67
+ uiPath?: string;
68
+ /** Optional marketplace API base URL (legacy). */
69
+ marketplaceApiUrl?: string;
70
+ /** Optional directory API base URL. When set, /directory/* and /contacts/* proxy to directory API with X-AgentMesh-Node-Id. */
71
+ directoryApiUrl?: string;
72
+ /** Optional agent process status (Addendum A1 managed mode). */
73
+ getAgentStatus?: () => {
74
+ status: string;
75
+ pid: number | null;
76
+ restartCount: number;
77
+ lastExitCode: number | null;
78
+ lastExitSignal: string | null;
79
+ };
80
+ /** Revoke this daemon's key. Returns true if broadcast was sent. */
81
+ revokeKey?: (_reason: "compromise" | "rotation" | "decommission", _replacementNodeId?: string) => boolean;
82
+ /** Get list of revoked nodeIds known to this daemon. */
83
+ getRevokedKeys?: () => string[];
84
+ /** Rotate agent identity keys. Returns new nodeId or null on failure. */
85
+ rotateKey?: () => {
86
+ oldNodeId: string;
87
+ newNodeId: string;
88
+ } | null;
89
+ /** Halt the daemon gracefully. */
90
+ halt?: () => void;
91
+ }
92
+ export declare function createHttpServer(deps: HttpServerDeps): express.Application;
93
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}