@claw-network/node 0.2.2 → 0.3.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/dist/index.js CHANGED
@@ -15,6 +15,8 @@ import { IdentityService } from './services/identity-service.js';
15
15
  import { ReputationService } from './services/reputation-service.js';
16
16
  import { ContractsService } from './services/contracts-service.js';
17
17
  import { DaoService } from './services/dao-service.js';
18
+ import { MessagingService } from './services/messaging-service.js';
19
+ import { MessageStore } from './services/message-store.js';
18
20
  import { IndexerStore, EventIndexer, IndexerQuery } from './indexer/index.js';
19
21
  import { ApiKeyStore } from './api/api-key-store.js';
20
22
  export const DEFAULT_SYNC_RUNTIME_CONFIG = {
@@ -54,6 +56,8 @@ export class ClawNetNode {
54
56
  reputationService;
55
57
  contractsService;
56
58
  daoService;
59
+ messagingService;
60
+ messageStore;
57
61
  apiKeyStore;
58
62
  peerId;
59
63
  peerPrivateKey;
@@ -171,6 +175,18 @@ export class ClawNetNode {
171
175
  const apiKeysDbPath = join(storagePaths2.root, 'api-keys.sqlite');
172
176
  this.apiKeyStore = new ApiKeyStore(apiKeysDbPath);
173
177
  }
178
+ // ── Messaging service (P2P direct messaging) ─────────────────
179
+ if (this.p2p && this.cachedDid) {
180
+ const storagePaths3 = resolveStoragePaths(this.config.dataDir);
181
+ const msgDbPath = join(storagePaths3.root, 'messages.sqlite');
182
+ this.messageStore = new MessageStore(msgDbPath);
183
+ this.messagingService = new MessagingService(this.p2p, this.messageStore, this.cachedDid);
184
+ await this.messagingService.start();
185
+ // Wire peer:connect to messaging announce + outbox flush
186
+ this.p2p.onPeerConnect((peerId) => {
187
+ void this.messagingService?.onPeerConnected(peerId);
188
+ });
189
+ }
174
190
  const apiConfig = {
175
191
  host: this.config.api?.host ?? '127.0.0.1',
176
192
  port: this.config.api?.port ?? 9528,
@@ -200,6 +216,7 @@ export class ClawNetNode {
200
216
  getNodePeers: () => this.buildNodePeers(),
201
217
  getNodeConfig: () => this.buildNodeConfig(),
202
218
  apiKeyStore: this.apiKeyStore,
219
+ messagingService: this.messagingService,
203
220
  });
204
221
  await this.apiServer.start();
205
222
  }
@@ -225,6 +242,7 @@ export class ClawNetNode {
225
242
  this.stopSyncLoops();
226
243
  this.stopMeshAmplifier();
227
244
  const tasks = [
245
+ async () => this.messagingService?.stop(),
228
246
  async () => this.apiServer?.stop(),
229
247
  async () => this.eventIndexer?.stop(),
230
248
  async () => this.contractProvider?.destroy(),
@@ -250,6 +268,10 @@ export class ClawNetNode {
250
268
  this.apiKeyStore?.close();
251
269
  }
252
270
  catch { /* ignore */ }
271
+ try {
272
+ this.messageStore?.close();
273
+ }
274
+ catch { /* ignore */ }
253
275
  this.apiServer = undefined;
254
276
  this.sync = undefined;
255
277
  this.p2p = undefined;
@@ -270,6 +292,8 @@ export class ClawNetNode {
270
292
  this.reputationService = undefined;
271
293
  this.contractsService = undefined;
272
294
  this.daoService = undefined;
295
+ this.messagingService = undefined;
296
+ this.messageStore = undefined;
273
297
  this.peerId = undefined;
274
298
  this.peerPrivateKey = undefined;
275
299
  this.stopping = undefined;
@@ -626,18 +650,57 @@ export class ClawNetNode {
626
650
  *
627
651
  * Phase 1 (0–60 s): Aggressive mesh amplification every 5 s.
628
652
  * Discovers peers via DHT random-walk + peerStore dial.
629
- * Phase 2 (60 s+): Every 30 s, check connection count. If below
630
- * `minConnections` (1), re-dial bootstrap peers and
631
- * run another amplify cycle to rejoin the mesh.
653
+ * Phase 2 (60 s+): Every 30 s, check connection count. If any known peer
654
+ * has disconnected, re-dial it. If connections drop to 0,
655
+ * re-dial bootstrap peers and run a DHT walk.
632
656
  *
633
- * This replaces the old one-shot amplifier that stopped permanently after 60 s
634
- * and left the node unable to reconnect after transient network disruptions.
657
+ * Additionally, a `peer:disconnect` handler triggers an immediate re-dial
658
+ * attempt (with a short delay to let transient disconnects settle), so the
659
+ * node doesn't have to wait for the next 30 s watchdog tick.
635
660
  */
636
661
  startMeshAmplifier() {
637
662
  let attempts = 0;
638
663
  const aggressiveAttempts = 12; // 12 × 5 s = 60 s
639
664
  const aggressiveIntervalMs = 5_000;
640
665
  const watchdogIntervalMs = 30_000;
666
+ const reconnectDelayMs = 5_000; // delay before re-dial after disconnect
667
+ let reconnectTimer;
668
+ // ── Reactive reconnect on peer:disconnect ─────────────────────────
669
+ this.p2p?.onPeerDisconnect((peerId) => {
670
+ // Debounce: if a reconnect is already scheduled, don't stack another
671
+ if (reconnectTimer)
672
+ return;
673
+ reconnectTimer = setTimeout(() => {
674
+ reconnectTimer = undefined;
675
+ void reconnectPeer(peerId);
676
+ }, reconnectDelayMs);
677
+ });
678
+ const reconnectPeer = async (peerId) => {
679
+ const currentConns = new Set(this.p2p?.getConnections() ?? []);
680
+ if (currentConns.has(peerId))
681
+ return; // already reconnected
682
+ console.log(`[mesh] peer ${peerId.slice(0, 16)}… disconnected — attempting re-dial`);
683
+ try {
684
+ const ok = await this.p2p?.dialPeer(peerId) ?? false;
685
+ if (ok) {
686
+ console.log(`[mesh] re-dialled ${peerId.slice(0, 16)}… successfully`);
687
+ return;
688
+ }
689
+ }
690
+ catch { /* best-effort */ }
691
+ // If direct re-dial failed, try bootstrap + DHT walk as fallback
692
+ try {
693
+ const bootstrapCount = await this.p2p?.reconnectBootstrap() ?? 0;
694
+ const dhtCount = await this.p2p?.amplifyMesh() ?? 0;
695
+ if (bootstrapCount > 0 || dhtCount > 0) {
696
+ console.log(`[mesh] fallback reconnect: bootstrap=${bootstrapCount}, dht=${dhtCount}`);
697
+ }
698
+ else {
699
+ console.log(`[mesh] re-dial failed for ${peerId.slice(0, 16)}… — watchdog will keep retrying`);
700
+ }
701
+ }
702
+ catch { /* best-effort */ }
703
+ };
641
704
  const amplify = async () => {
642
705
  attempts++;
643
706
  try {
@@ -660,27 +723,44 @@ export class ClawNetNode {
660
723
  }
661
724
  };
662
725
  const watchdog = async () => {
663
- const conns = this.p2p?.getConnections().length ?? 0;
664
- if (conns > 0)
665
- return; // mesh is healthy
666
- console.log(`[mesh] 0 connections detected attempting reconnect`);
667
- try {
668
- const bootstrapCount = await this.p2p?.reconnectBootstrap() ?? 0;
669
- if (bootstrapCount > 0) {
670
- console.log(`[mesh] reconnected to ${bootstrapCount} bootstrap peer(s)`);
726
+ const currentConns = new Set(this.p2p?.getConnections() ?? []);
727
+ const knownPeers = this.p2p?.getKnownPeers() ?? new Set();
728
+ // Find peers that were previously connected but are now missing
729
+ const missingPeers = [...knownPeers].filter((p) => !currentConns.has(p));
730
+ if (missingPeers.length === 0)
731
+ return; // mesh is fully healthy
732
+ console.log(`[mesh] watchdog: ${missingPeers.length} known peer(s) missing (connected=${currentConns.size}, known=${knownPeers.size})`);
733
+ // Try to re-dial each missing peer directly
734
+ let recovered = 0;
735
+ for (const peerId of missingPeers) {
736
+ try {
737
+ const ok = await this.p2p?.dialPeer(peerId) ?? false;
738
+ if (ok) {
739
+ recovered++;
740
+ console.log(`[mesh] re-dialled ${peerId.slice(0, 16)}…`);
741
+ }
671
742
  }
672
- // Also try DHT walk to discover non-bootstrap peers
673
- const n = await this.p2p?.amplifyMesh() ?? 0;
674
- if (n > 0) {
675
- console.log(`[mesh] +${n} additional peer(s) via DHT walk`);
743
+ catch { /* best-effort */ }
744
+ }
745
+ // If direct re-dial didn't recover all, try bootstrap + DHT
746
+ if (recovered < missingPeers.length) {
747
+ try {
748
+ const bootstrapCount = await this.p2p?.reconnectBootstrap() ?? 0;
749
+ if (bootstrapCount > 0) {
750
+ console.log(`[mesh] reconnected to ${bootstrapCount} bootstrap peer(s)`);
751
+ }
752
+ const n = await this.p2p?.amplifyMesh() ?? 0;
753
+ if (n > 0) {
754
+ console.log(`[mesh] +${n} additional peer(s) via DHT walk`);
755
+ }
756
+ if (bootstrapCount === 0 && n === 0 && recovered === 0) {
757
+ console.log(`[mesh] reconnect failed — will retry in ${watchdogIntervalMs / 1000}s`);
758
+ }
676
759
  }
677
- if (bootstrapCount === 0 && n === 0) {
678
- console.log(`[mesh] reconnect failed — will retry in ${watchdogIntervalMs / 1000}s`);
760
+ catch {
761
+ // best-effort reconnect
679
762
  }
680
763
  }
681
- catch {
682
- // best-effort reconnect
683
- }
684
764
  };
685
765
  // First attempt immediately, then every 5 s for the aggressive phase
686
766
  void amplify();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * MessageStore — SQLite-backed inbox/outbox for P2P direct messaging.
3
+ *
4
+ * Inbox: messages received from other peers, waiting to be consumed by the local app.
5
+ * Outbox: messages pending delivery to offline peers, retried when the peer connects.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ export interface StoredMessage {
9
+ id: string;
10
+ sourceDid: string;
11
+ targetDid: string;
12
+ topic: string;
13
+ payload: string;
14
+ ttlSec: number;
15
+ sentAtMs: number;
16
+ receivedAtMs: number;
17
+ status: 'pending' | 'delivered' | 'consumed' | 'expired';
18
+ }
19
+ export interface InboxMessage {
20
+ messageId: string;
21
+ sourceDid: string;
22
+ topic: string;
23
+ payload: string;
24
+ receivedAtMs: number;
25
+ priority: number;
26
+ seq: number;
27
+ }
28
+ export interface OutboxEntry {
29
+ id: string;
30
+ targetDid: string;
31
+ topic: string;
32
+ payload: string;
33
+ ttlSec: number;
34
+ sentAtMs: number;
35
+ attempts: number;
36
+ lastAttempt: number;
37
+ }
38
+ export declare class MessageStore {
39
+ readonly db: Database.Database;
40
+ constructor(dbPath: string);
41
+ /**
42
+ * Store an inbound message in the inbox. Returns the messageId.
43
+ * If `idempotencyKey` is provided, deduplicates — returns existing messageId on duplicate.
44
+ */
45
+ addToInbox(msg: {
46
+ sourceDid: string;
47
+ targetDid: string;
48
+ topic: string;
49
+ payload: string;
50
+ ttlSec?: number;
51
+ sentAtMs?: number;
52
+ priority?: number;
53
+ idempotencyKey?: string;
54
+ }): string;
55
+ /** Increment and return the next inbox sequence number (monotonic). */
56
+ private nextSeq;
57
+ /** Get the current (latest) inbox sequence number. */
58
+ currentSeq(): number;
59
+ /** Fetch unconsumed inbox messages, ordered by priority then time. */
60
+ getInbox(opts?: {
61
+ topic?: string;
62
+ sinceMs?: number;
63
+ sinceSeq?: number;
64
+ limit?: number;
65
+ }): InboxMessage[];
66
+ /** Mark a message as consumed (acknowledged). */
67
+ consumeMessage(messageId: string): boolean;
68
+ /** Delete consumed and expired messages in batches to avoid locking. Also cleans dedup table. */
69
+ cleanupInbox(): number;
70
+ /** Queue a message for later delivery to an offline peer. */
71
+ addToOutbox(msg: {
72
+ targetDid: string;
73
+ topic: string;
74
+ payload: string;
75
+ ttlSec?: number;
76
+ priority?: number;
77
+ }): string;
78
+ /** Get pending outbox messages for a specific target DID, ordered by priority then time. */
79
+ getOutboxForTarget(targetDid: string, limit?: number): OutboxEntry[];
80
+ /** Increment attempt count for an outbox message. */
81
+ recordAttempt(messageId: string): void;
82
+ /** Remove a message from the outbox (successfully delivered). */
83
+ removeFromOutbox(messageId: string): boolean;
84
+ /** Clean up expired outbox entries in batches. */
85
+ cleanupOutbox(): number;
86
+ /** Total count of inbox messages (for rate limiting / stats). */
87
+ inboxCount(targetDid: string): number;
88
+ close(): void;
89
+ }
90
+ //# sourceMappingURL=message-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-store.d.ts","sourceRoot":"","sources":["../../src/services/message-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAKtC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;CAC1D;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AA8DD,qBAAa,YAAY;IACvB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBAEnB,MAAM,EAAE,MAAM;IAQ1B;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,MAAM;IA0BV,uEAAuE;IACvE,OAAO,CAAC,OAAO;IAMf,sDAAsD;IACtD,UAAU,IAAI,MAAM;IAKpB,sEAAsE;IACtE,QAAQ,CAAC,IAAI,GAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG,YAAY,EAAE;IAsCvB,iDAAiD;IACjD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAO1C,iGAAiG;IACjG,YAAY,IAAI,MAAM;IAsBtB,6DAA6D;IAC7D,WAAW,CAAC,GAAG,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,MAAM;IAUV,4FAA4F;IAC5F,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,WAAW,EAAE;IAwBjE,qDAAqD;IACrD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMtC,iEAAiE;IACjE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK5C,kDAAkD;IAClD,aAAa,IAAI,MAAM;IAcvB,iEAAiE;IACjE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAOrC,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * MessageStore — SQLite-backed inbox/outbox for P2P direct messaging.
3
+ *
4
+ * Inbox: messages received from other peers, waiting to be consumed by the local app.
5
+ * Outbox: messages pending delivery to offline peers, retried when the peer connects.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ import crypto from 'node:crypto';
9
+ // ── Schema ───────────────────────────────────────────────────────
10
+ const SCHEMA_SQL = `
11
+ CREATE TABLE IF NOT EXISTS inbox (
12
+ id TEXT PRIMARY KEY,
13
+ source_did TEXT NOT NULL,
14
+ target_did TEXT NOT NULL,
15
+ topic TEXT NOT NULL,
16
+ payload TEXT NOT NULL,
17
+ ttl_sec INTEGER NOT NULL DEFAULT 86400,
18
+ sent_at_ms INTEGER NOT NULL,
19
+ received_at_ms INTEGER NOT NULL,
20
+ consumed INTEGER NOT NULL DEFAULT 0,
21
+ priority INTEGER NOT NULL DEFAULT 0,
22
+ seq INTEGER NOT NULL DEFAULT 0
23
+ );
24
+
25
+ CREATE INDEX IF NOT EXISTS idx_inbox_topic ON inbox(topic, consumed);
26
+ CREATE INDEX IF NOT EXISTS idx_inbox_received ON inbox(received_at_ms);
27
+ CREATE INDEX IF NOT EXISTS idx_inbox_source ON inbox(source_did, consumed);
28
+ CREATE INDEX IF NOT EXISTS idx_inbox_unconsumed ON inbox(consumed, received_at_ms) WHERE consumed = 0;
29
+
30
+ CREATE TABLE IF NOT EXISTS outbox (
31
+ id TEXT PRIMARY KEY,
32
+ target_did TEXT NOT NULL,
33
+ topic TEXT NOT NULL,
34
+ payload TEXT NOT NULL,
35
+ ttl_sec INTEGER NOT NULL DEFAULT 86400,
36
+ sent_at_ms INTEGER NOT NULL,
37
+ attempts INTEGER NOT NULL DEFAULT 0,
38
+ last_attempt INTEGER,
39
+ priority INTEGER NOT NULL DEFAULT 0
40
+ );
41
+
42
+ CREATE INDEX IF NOT EXISTS idx_outbox_target ON outbox(target_did);
43
+ CREATE INDEX IF NOT EXISTS idx_outbox_retry ON outbox(attempts, last_attempt);
44
+
45
+ -- Deduplication table: stores idempotency keys with TTL for duplicate detection
46
+ CREATE TABLE IF NOT EXISTS dedup (
47
+ idempotency_key TEXT PRIMARY KEY,
48
+ message_id TEXT NOT NULL,
49
+ created_at_ms INTEGER NOT NULL
50
+ );
51
+
52
+ CREATE INDEX IF NOT EXISTS idx_dedup_created ON dedup(created_at_ms);
53
+
54
+ -- Sequence counter for ordered inbox replay
55
+ CREATE TABLE IF NOT EXISTS meta (
56
+ key TEXT PRIMARY KEY,
57
+ value TEXT NOT NULL
58
+ );
59
+
60
+ INSERT OR IGNORE INTO meta (key, value) VALUES ('inbox_seq', '0');
61
+ `;
62
+ /** Deduplication window: 24 hours */
63
+ const DEDUP_TTL_MS = 24 * 60 * 60 * 1000;
64
+ // ── Store ────────────────────────────────────────────────────────
65
+ export class MessageStore {
66
+ db;
67
+ constructor(dbPath) {
68
+ this.db = new Database(dbPath);
69
+ this.db.pragma('journal_mode = WAL');
70
+ this.db.exec(SCHEMA_SQL);
71
+ }
72
+ // ── Inbox ──────────────────────────────────────────────────────
73
+ /**
74
+ * Store an inbound message in the inbox. Returns the messageId.
75
+ * If `idempotencyKey` is provided, deduplicates — returns existing messageId on duplicate.
76
+ */
77
+ addToInbox(msg) {
78
+ // Deduplication check
79
+ if (msg.idempotencyKey) {
80
+ const existing = this.db.prepare('SELECT message_id FROM dedup WHERE idempotency_key = ?').get(msg.idempotencyKey);
81
+ if (existing)
82
+ return existing.message_id;
83
+ }
84
+ const id = `msg_${crypto.randomBytes(12).toString('hex')}`;
85
+ const now = Date.now();
86
+ const seq = this.nextSeq();
87
+ this.db.prepare(`
88
+ INSERT INTO inbox (id, source_did, target_did, topic, payload, ttl_sec, sent_at_ms, received_at_ms, priority, seq)
89
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
90
+ `).run(id, msg.sourceDid, msg.targetDid, msg.topic, msg.payload, msg.ttlSec ?? 86400, msg.sentAtMs ?? now, now, msg.priority ?? 0, seq);
91
+ // Record dedup key
92
+ if (msg.idempotencyKey) {
93
+ this.db.prepare('INSERT OR IGNORE INTO dedup (idempotency_key, message_id, created_at_ms) VALUES (?, ?, ?)').run(msg.idempotencyKey, id, now);
94
+ }
95
+ return id;
96
+ }
97
+ /** Increment and return the next inbox sequence number (monotonic). */
98
+ nextSeq() {
99
+ this.db.prepare("UPDATE meta SET value = CAST(CAST(value AS INTEGER) + 1 AS TEXT) WHERE key = 'inbox_seq'").run();
100
+ const row = this.db.prepare("SELECT value FROM meta WHERE key = 'inbox_seq'").get();
101
+ return parseInt(row.value, 10);
102
+ }
103
+ /** Get the current (latest) inbox sequence number. */
104
+ currentSeq() {
105
+ const row = this.db.prepare("SELECT value FROM meta WHERE key = 'inbox_seq'").get();
106
+ return row ? parseInt(row.value, 10) : 0;
107
+ }
108
+ /** Fetch unconsumed inbox messages, ordered by priority then time. */
109
+ getInbox(opts = {}) {
110
+ const limit = Math.min(opts.limit ?? 100, 500);
111
+ let sql = 'SELECT id, source_did, topic, payload, received_at_ms, priority, seq FROM inbox WHERE consumed = 0';
112
+ const params = [];
113
+ if (opts.topic) {
114
+ sql += ' AND topic = ?';
115
+ params.push(opts.topic);
116
+ }
117
+ if (opts.sinceMs) {
118
+ sql += ' AND received_at_ms > ?';
119
+ params.push(opts.sinceMs);
120
+ }
121
+ if (opts.sinceSeq !== undefined) {
122
+ sql += ' AND seq > ?';
123
+ params.push(opts.sinceSeq);
124
+ }
125
+ // Higher priority first, then by received time
126
+ sql += ' ORDER BY priority DESC, received_at_ms ASC LIMIT ?';
127
+ params.push(limit);
128
+ const rows = this.db.prepare(sql).all(...params);
129
+ return rows.map((r) => ({
130
+ messageId: r.id,
131
+ sourceDid: r.source_did,
132
+ topic: r.topic,
133
+ payload: r.payload,
134
+ receivedAtMs: r.received_at_ms,
135
+ priority: r.priority,
136
+ seq: r.seq,
137
+ }));
138
+ }
139
+ /** Mark a message as consumed (acknowledged). */
140
+ consumeMessage(messageId) {
141
+ const result = this.db.prepare('UPDATE inbox SET consumed = 1 WHERE id = ? AND consumed = 0').run(messageId);
142
+ return result.changes > 0;
143
+ }
144
+ /** Delete consumed and expired messages in batches to avoid locking. Also cleans dedup table. */
145
+ cleanupInbox() {
146
+ const now = Date.now();
147
+ let total = 0;
148
+ // Delete in batches of 500 to avoid long table locks
149
+ const stmt = this.db.prepare('DELETE FROM inbox WHERE id IN (SELECT id FROM inbox WHERE consumed = 1 OR (sent_at_ms + ttl_sec * 1000) <= ? LIMIT 500)');
150
+ let changes;
151
+ do {
152
+ changes = stmt.run(now).changes;
153
+ total += changes;
154
+ } while (changes > 0);
155
+ // Clean expired dedup entries
156
+ const dedupCutoff = now - DEDUP_TTL_MS;
157
+ this.db.prepare('DELETE FROM dedup WHERE created_at_ms < ?').run(dedupCutoff);
158
+ return total;
159
+ }
160
+ // ── Outbox ─────────────────────────────────────────────────────
161
+ /** Queue a message for later delivery to an offline peer. */
162
+ addToOutbox(msg) {
163
+ const id = `msg_${crypto.randomBytes(12).toString('hex')}`;
164
+ const now = Date.now();
165
+ this.db.prepare(`
166
+ INSERT INTO outbox (id, target_did, topic, payload, ttl_sec, sent_at_ms, priority)
167
+ VALUES (?, ?, ?, ?, ?, ?, ?)
168
+ `).run(id, msg.targetDid, msg.topic, msg.payload, msg.ttlSec ?? 86400, now, msg.priority ?? 0);
169
+ return id;
170
+ }
171
+ /** Get pending outbox messages for a specific target DID, ordered by priority then time. */
172
+ getOutboxForTarget(targetDid, limit = 100) {
173
+ const now = Date.now();
174
+ const rows = this.db.prepare(`
175
+ SELECT id, target_did, topic, payload, ttl_sec, sent_at_ms, attempts, last_attempt
176
+ FROM outbox
177
+ WHERE target_did = ? AND (sent_at_ms + ttl_sec * 1000) > ?
178
+ ORDER BY priority DESC, sent_at_ms ASC LIMIT ?
179
+ `).all(targetDid, now, limit);
180
+ return rows.map((r) => ({
181
+ id: r.id,
182
+ targetDid: r.target_did,
183
+ topic: r.topic,
184
+ payload: r.payload,
185
+ ttlSec: r.ttl_sec,
186
+ sentAtMs: r.sent_at_ms,
187
+ attempts: r.attempts,
188
+ lastAttempt: r.last_attempt ?? 0,
189
+ }));
190
+ }
191
+ /** Increment attempt count for an outbox message. */
192
+ recordAttempt(messageId) {
193
+ this.db.prepare('UPDATE outbox SET attempts = attempts + 1, last_attempt = ? WHERE id = ?').run(Date.now(), messageId);
194
+ }
195
+ /** Remove a message from the outbox (successfully delivered). */
196
+ removeFromOutbox(messageId) {
197
+ const result = this.db.prepare('DELETE FROM outbox WHERE id = ?').run(messageId);
198
+ return result.changes > 0;
199
+ }
200
+ /** Clean up expired outbox entries in batches. */
201
+ cleanupOutbox() {
202
+ const now = Date.now();
203
+ let total = 0;
204
+ const stmt = this.db.prepare('DELETE FROM outbox WHERE id IN (SELECT id FROM outbox WHERE (sent_at_ms + ttl_sec * 1000) <= ? LIMIT 500)');
205
+ let changes;
206
+ do {
207
+ changes = stmt.run(now).changes;
208
+ total += changes;
209
+ } while (changes > 0);
210
+ return total;
211
+ }
212
+ /** Total count of inbox messages (for rate limiting / stats). */
213
+ inboxCount(targetDid) {
214
+ const row = this.db.prepare('SELECT COUNT(*) as cnt FROM inbox WHERE target_did = ? AND consumed = 0').get(targetDid);
215
+ return row?.cnt ?? 0;
216
+ }
217
+ close() {
218
+ this.db.close();
219
+ }
220
+ }
221
+ //# sourceMappingURL=message-store.js.map