@claw-network/node 0.3.0 → 0.4.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/api/routes/messaging.d.ts.map +1 -1
- package/dist/api/routes/messaging.js +12 -1
- package/dist/api/routes/messaging.js.map +1 -1
- package/dist/api/ws-messaging.d.ts.map +1 -1
- package/dist/api/ws-messaging.js +2 -1
- package/dist/api/ws-messaging.js.map +1 -1
- package/dist/services/message-store.d.ts +16 -0
- package/dist/services/message-store.d.ts.map +1 -1
- package/dist/services/message-store.js +46 -0
- package/dist/services/message-store.js.map +1 -1
- package/dist/services/messaging-service.d.ts +33 -17
- package/dist/services/messaging-service.d.ts.map +1 -1
- package/dist/services/messaging-service.js +412 -158
- package/dist/services/messaging-service.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../src/api/routes/messaging.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../src/api/routes/messaging.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAYlD,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CA0L3D"}
|
|
@@ -10,6 +10,16 @@
|
|
|
10
10
|
import { Router } from '../router.js';
|
|
11
11
|
import { ok, created, noContent, badRequest, internalError, tooManyRequests } from '../response.js';
|
|
12
12
|
import { RateLimitError } from '../../services/messaging-service.js';
|
|
13
|
+
/** Type guard: checks if a value is a Record<string, string>. */
|
|
14
|
+
function isStringRecord(v) {
|
|
15
|
+
if (typeof v !== 'object' || v === null || Array.isArray(v))
|
|
16
|
+
return false;
|
|
17
|
+
for (const val of Object.values(v)) {
|
|
18
|
+
if (typeof val !== 'string')
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
13
23
|
export function messagingRoutes(ctx) {
|
|
14
24
|
const r = new Router();
|
|
15
25
|
// ── POST /send — send a message to a target DID ──────────────
|
|
@@ -88,6 +98,7 @@ export function messagingRoutes(ctx) {
|
|
|
88
98
|
const priority = typeof body.priority === 'number' ? body.priority : undefined;
|
|
89
99
|
const compress = typeof body.compress === 'boolean' ? body.compress : undefined;
|
|
90
100
|
const idempotencyKey = typeof body.idempotencyKey === 'string' ? body.idempotencyKey : undefined;
|
|
101
|
+
const recipientKeys = isStringRecord(body.recipientKeys) ? body.recipientKeys : undefined;
|
|
91
102
|
if (!Array.isArray(targetDids) || targetDids.length === 0) {
|
|
92
103
|
badRequest(res, 'Missing or empty "targetDids" array', route.url.pathname);
|
|
93
104
|
return;
|
|
@@ -116,7 +127,7 @@ export function messagingRoutes(ctx) {
|
|
|
116
127
|
}
|
|
117
128
|
try {
|
|
118
129
|
const result = await ctx.messagingService.sendMulticast(targetDids, topic, payload, {
|
|
119
|
-
ttlSec, priority, compress, idempotencyKey,
|
|
130
|
+
ttlSec, priority, compress, idempotencyKey, recipientKeys,
|
|
120
131
|
});
|
|
121
132
|
created(res, result, { self: '/api/v1/messaging/inbox' });
|
|
122
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/api/routes/messaging.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/api/routes/messaging.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-messaging.d.ts","sourceRoot":"","sources":["../../src/api/ws-messaging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,eAAe,EAAkB,MAAM,IAAI,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAmB,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"ws-messaging.d.ts","sourceRoot":"","sources":["../../src/api/ws-messaging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,eAAe,EAAkB,MAAM,IAAI,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAmB,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,kCAAkC,CAAC;AAEvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAYtD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,MAAM,gBAAgB,GAAG,SAAS,EACvD,WAAW,CAAC,EAAE,WAAW,GACxB,eAAe,CAgHjB"}
|
package/dist/api/ws-messaging.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* { type: "ping" }
|
|
17
17
|
*/
|
|
18
18
|
import { WebSocketServer } from 'ws';
|
|
19
|
+
import { RECEIPT_TOPIC } from '../services/messaging-service.js';
|
|
19
20
|
const WS_PATH = '/api/v1/messaging/subscribe';
|
|
20
21
|
const HEARTBEAT_INTERVAL_MS = 30_000;
|
|
21
22
|
const TOPIC_PATTERN = /^[a-zA-Z0-9._\-:/]{1,128}$/;
|
|
@@ -82,7 +83,7 @@ export function attachWebSocketHandler(server, getMessagingService, apiKeyStore)
|
|
|
82
83
|
return;
|
|
83
84
|
if (ws.readyState !== ws.OPEN)
|
|
84
85
|
return;
|
|
85
|
-
const frame = msg.topic ===
|
|
86
|
+
const frame = msg.topic === RECEIPT_TOPIC
|
|
86
87
|
? { type: 'receipt', data: JSON.parse(msg.payload) }
|
|
87
88
|
: { type: 'message', data: msg };
|
|
88
89
|
ws.send(JSON.stringify(frame));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-messaging.js","sourceRoot":"","sources":["../../src/api/ws-messaging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,eAAe,EAAkB,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ws-messaging.js","sourceRoot":"","sources":["../../src/api/ws-messaging.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,5 +86,21 @@ export declare class MessageStore {
|
|
|
86
86
|
/** Total count of inbox messages (for rate limiting / stats). */
|
|
87
87
|
inboxCount(targetDid: string): number;
|
|
88
88
|
close(): void;
|
|
89
|
+
/** Persist or update a DID → PeerId mapping. */
|
|
90
|
+
upsertDidPeer(did: string, peerId: string): void;
|
|
91
|
+
/** Load all persisted DID → PeerId mappings (including update timestamps for TTL). */
|
|
92
|
+
getAllDidPeers(): Array<{
|
|
93
|
+
did: string;
|
|
94
|
+
peerId: string;
|
|
95
|
+
updatedAtMs: number;
|
|
96
|
+
}>;
|
|
97
|
+
/** Remove a DID mapping (e.g. when a peer is permanently gone). */
|
|
98
|
+
removeDidPeer(did: string): boolean;
|
|
99
|
+
/** Record a rate-limit event for the given bucket. */
|
|
100
|
+
recordRateEvent(bucket: string): void;
|
|
101
|
+
/** Count rate-limit events for a bucket within the sliding window. */
|
|
102
|
+
countRateEvents(bucket: string, windowStartMs: number): number;
|
|
103
|
+
/** Delete rate-limit events older than the given timestamp. */
|
|
104
|
+
pruneRateEvents(beforeMs: number): number;
|
|
89
105
|
}
|
|
90
106
|
//# sourceMappingURL=message-store.d.ts.map
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"message-store.d.ts","sourceRoot":"","sources":["../../src/services/message-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,24 @@ CREATE TABLE IF NOT EXISTS meta (
|
|
|
58
58
|
);
|
|
59
59
|
|
|
60
60
|
INSERT OR IGNORE INTO meta (key, value) VALUES ('inbox_seq', '0');
|
|
61
|
+
|
|
62
|
+
-- DID → PeerId mapping persistence (survives restarts)
|
|
63
|
+
CREATE TABLE IF NOT EXISTS did_peers (
|
|
64
|
+
did TEXT PRIMARY KEY,
|
|
65
|
+
peer_id TEXT NOT NULL,
|
|
66
|
+
updated_at_ms INTEGER NOT NULL
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
CREATE INDEX IF NOT EXISTS idx_did_peers_peer ON did_peers(peer_id);
|
|
70
|
+
|
|
71
|
+
-- Rate limiting: sliding-window event log (shared across processes via SQLite)
|
|
72
|
+
CREATE TABLE IF NOT EXISTS rate_limits (
|
|
73
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
74
|
+
bucket TEXT NOT NULL,
|
|
75
|
+
ts_ms INTEGER NOT NULL
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_rate_bucket_ts ON rate_limits(bucket, ts_ms);
|
|
61
79
|
`;
|
|
62
80
|
/** Deduplication window: 24 hours */
|
|
63
81
|
const DEDUP_TTL_MS = 24 * 60 * 60 * 1000;
|
|
@@ -217,5 +235,33 @@ export class MessageStore {
|
|
|
217
235
|
close() {
|
|
218
236
|
this.db.close();
|
|
219
237
|
}
|
|
238
|
+
// ── DID → PeerId Mapping ───────────────────────────────────
|
|
239
|
+
/** Persist or update a DID → PeerId mapping. */
|
|
240
|
+
upsertDidPeer(did, peerId) {
|
|
241
|
+
this.db.prepare('INSERT INTO did_peers (did, peer_id, updated_at_ms) VALUES (?, ?, ?) ON CONFLICT(did) DO UPDATE SET peer_id = excluded.peer_id, updated_at_ms = excluded.updated_at_ms').run(did, peerId, Date.now());
|
|
242
|
+
}
|
|
243
|
+
/** Load all persisted DID → PeerId mappings (including update timestamps for TTL). */
|
|
244
|
+
getAllDidPeers() {
|
|
245
|
+
const rows = this.db.prepare('SELECT did, peer_id, updated_at_ms FROM did_peers').all();
|
|
246
|
+
return rows.map((r) => ({ did: r.did, peerId: r.peer_id, updatedAtMs: r.updated_at_ms }));
|
|
247
|
+
}
|
|
248
|
+
/** Remove a DID mapping (e.g. when a peer is permanently gone). */
|
|
249
|
+
removeDidPeer(did) {
|
|
250
|
+
return this.db.prepare('DELETE FROM did_peers WHERE did = ?').run(did).changes > 0;
|
|
251
|
+
}
|
|
252
|
+
// ── Rate Limiting ──────────────────────────────────────────
|
|
253
|
+
/** Record a rate-limit event for the given bucket. */
|
|
254
|
+
recordRateEvent(bucket) {
|
|
255
|
+
this.db.prepare('INSERT INTO rate_limits (bucket, ts_ms) VALUES (?, ?)').run(bucket, Date.now());
|
|
256
|
+
}
|
|
257
|
+
/** Count rate-limit events for a bucket within the sliding window. */
|
|
258
|
+
countRateEvents(bucket, windowStartMs) {
|
|
259
|
+
const row = this.db.prepare('SELECT COUNT(*) as cnt FROM rate_limits WHERE bucket = ? AND ts_ms > ?').get(bucket, windowStartMs);
|
|
260
|
+
return row.cnt;
|
|
261
|
+
}
|
|
262
|
+
/** Delete rate-limit events older than the given timestamp. */
|
|
263
|
+
pruneRateEvents(beforeMs) {
|
|
264
|
+
return this.db.prepare('DELETE FROM rate_limits WHERE ts_ms <= ?').run(beforeMs).changes;
|
|
265
|
+
}
|
|
220
266
|
}
|
|
221
267
|
//# sourceMappingURL=message-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-store.js","sourceRoot":"","sources":["../../src/services/message-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,MAAM,MAAM,aAAa,CAAC;AAqCjC,oEAAoE;AAEpE,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"message-store.js","sourceRoot":"","sources":["../../src/services/message-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { P2PNode } from '@claw-network/core';
|
|
12
12
|
import { MessageStore } from './message-store.js';
|
|
13
|
+
/** Topic used for delivery receipt notifications via WebSocket. */
|
|
14
|
+
export declare const RECEIPT_TOPIC: "_receipt";
|
|
13
15
|
/** Priority levels — higher number = higher priority. */
|
|
14
16
|
export declare enum MessagePriority {
|
|
15
17
|
LOW = 0,
|
|
@@ -52,6 +54,8 @@ export interface SendOptions {
|
|
|
52
54
|
encryptForKeyHex?: string;
|
|
53
55
|
/** Idempotency key for deduplication. */
|
|
54
56
|
idempotencyKey?: string;
|
|
57
|
+
/** Per-recipient X25519 public key hex map (DID → key) for multicast E2E encryption. */
|
|
58
|
+
recipientKeys?: Record<string, string>;
|
|
55
59
|
}
|
|
56
60
|
/** Callback for WebSocket subscribers — called when a new message arrives in the inbox. */
|
|
57
61
|
export type InboxSubscriber = (message: InboxMessage) => void;
|
|
@@ -63,19 +67,14 @@ export declare class MessagingService {
|
|
|
63
67
|
private cleanupTimer?;
|
|
64
68
|
/**
|
|
65
69
|
* DID → PeerId mapping. Populated via the did-announce protocol when
|
|
66
|
-
* peers connect.
|
|
67
|
-
* but may become stale when peers go offline.
|
|
70
|
+
* peers connect. Persisted to SQLite and restored on startup.
|
|
68
71
|
*/
|
|
69
72
|
private readonly didToPeerId;
|
|
70
73
|
private readonly peerIdToDid;
|
|
74
|
+
/** Tracks when each DID→PeerId mapping was last confirmed (for TTL-based re-resolve). */
|
|
75
|
+
private readonly didPeerUpdatedAt;
|
|
71
76
|
/** WebSocket subscribers that receive real-time inbox pushes. */
|
|
72
77
|
private readonly subscribers;
|
|
73
|
-
/** Sliding-window rate limiter: DID → array of timestamps (ms). */
|
|
74
|
-
private readonly rateBuckets;
|
|
75
|
-
/** Inbound rate limiter: peerId → array of timestamps. */
|
|
76
|
-
private readonly inboundRateBuckets;
|
|
77
|
-
/** Timer for periodic rate-bucket garbage collection. */
|
|
78
|
-
private rateBucketGcTimer?;
|
|
79
78
|
constructor(p2p: P2PNode, store: MessageStore, localDid: string);
|
|
80
79
|
start(): Promise<void>;
|
|
81
80
|
stop(): Promise<void>;
|
|
@@ -94,7 +93,7 @@ export declare class MessagingService {
|
|
|
94
93
|
getInbox(opts?: InboxQueryOptions): InboxMessage[];
|
|
95
94
|
/** Acknowledge (consume) a message from inbox. */
|
|
96
95
|
ackMessage(messageId: string): boolean;
|
|
97
|
-
/** Flush outbox: attempt to deliver all pending messages for a specific DID with
|
|
96
|
+
/** Flush outbox: attempt to deliver all pending messages for a specific DID with bounded concurrency. */
|
|
98
97
|
flushOutboxForDid(targetDid: string): Promise<number>;
|
|
99
98
|
/**
|
|
100
99
|
* Called when a peer connects. Announces our DID and flushes any
|
|
@@ -113,7 +112,7 @@ export declare class MessagingService {
|
|
|
113
112
|
private notifySubscribers;
|
|
114
113
|
/**
|
|
115
114
|
* Check rate limit for a DID. Throws if limit exceeded.
|
|
116
|
-
* Uses
|
|
115
|
+
* Uses SQLite-backed sliding window for cross-process correctness.
|
|
117
116
|
*/
|
|
118
117
|
enforceRateLimit(did: string): void;
|
|
119
118
|
/** Check if a DID is currently rate-limited (without consuming a slot). */
|
|
@@ -124,17 +123,22 @@ export declare class MessagingService {
|
|
|
124
123
|
*/
|
|
125
124
|
private enforceInboundRateLimit;
|
|
126
125
|
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
126
|
+
* Enforce global aggregate inbound rate limit (all peers combined).
|
|
127
|
+
* Prevents total flooding even when spread across many peers.
|
|
128
|
+
*/
|
|
129
|
+
private enforceGlobalInboundRateLimit;
|
|
130
|
+
/**
|
|
131
|
+
* Core rate-limit check: count events in the sliding window via SQLite,
|
|
132
|
+
* record a new event, throw if over limit.
|
|
129
133
|
*/
|
|
130
134
|
private checkRateBucket;
|
|
131
|
-
/** Binary search: find first index where timestamps[i] >= target. */
|
|
132
|
-
private bisectLeft;
|
|
133
|
-
/** Remove empty and stale rate-limit buckets to prevent memory leaks. */
|
|
134
|
-
private pruneRateBuckets;
|
|
135
135
|
/**
|
|
136
136
|
* Encode a payload: optionally compress (gzip) then optionally encrypt (X25519+AES-256-GCM).
|
|
137
|
-
*
|
|
137
|
+
*
|
|
138
|
+
* Returns:
|
|
139
|
+
* - `payloadBytes`: raw binary payload for FlatBuffers wire format (Uint8Array)
|
|
140
|
+
* - `storagePayload`: string representation for SQLite TEXT storage (backward compat)
|
|
141
|
+
* - `compressed` / `encrypted` flags
|
|
138
142
|
*/
|
|
139
143
|
private encodePayload;
|
|
140
144
|
/**
|
|
@@ -152,6 +156,13 @@ export declare class MessagingService {
|
|
|
152
156
|
private deliverDirect;
|
|
153
157
|
private handleInboundMessage;
|
|
154
158
|
private handleDidAnnounce;
|
|
159
|
+
private handleDidResolve;
|
|
160
|
+
/**
|
|
161
|
+
* Query connected peers to resolve an unknown DID → PeerId.
|
|
162
|
+
* Sends DID resolve requests to up to DID_RESOLVE_MAX_PEERS peers concurrently.
|
|
163
|
+
* Returns the first PeerId found, or null if none of the queried peers know the DID.
|
|
164
|
+
*/
|
|
165
|
+
private resolveDidViaPeers;
|
|
155
166
|
/** Announce our DID to a specific peer. */
|
|
156
167
|
private announceDidToPeer;
|
|
157
168
|
/** Announce our DID to all currently connected peers. */
|
|
@@ -159,8 +170,13 @@ export declare class MessagingService {
|
|
|
159
170
|
/**
|
|
160
171
|
* Deliver to multiple targets concurrently with bounded concurrency.
|
|
161
172
|
* Uses Promise.allSettled so one failure doesn't block others.
|
|
173
|
+
* Supports per-recipient E2E encryption when recipientKeys are provided.
|
|
162
174
|
*/
|
|
163
175
|
private deliverMulticast;
|
|
176
|
+
/** Update in-memory maps AND persist the DID→PeerId mapping to SQLite. */
|
|
177
|
+
private registerDidPeer;
|
|
178
|
+
/** Check if a DID→PeerId mapping is older than the TTL threshold. */
|
|
179
|
+
private isStalePeerMapping;
|
|
164
180
|
/** Send a delivery receipt to the sender after receiving a message. */
|
|
165
181
|
private sendDeliveryReceipt;
|
|
166
182
|
/** Handle an incoming delivery receipt from a remote peer. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging-service.d.ts","sourceRoot":"","sources":["../../src/services/messaging-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"messaging-service.d.ts","sourceRoot":"","sources":["../../src/services/messaging-service.ts"],"names":[],"mappings":"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"}
|