pelagora 0.1.8 → 0.2.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/CHANGELOG.md +45 -4
- package/dist/api/conversations.d.ts +3 -0
- package/dist/api/conversations.d.ts.map +1 -0
- package/dist/api/conversations.js +294 -0
- package/dist/api/conversations.js.map +1 -0
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +70 -4
- package/dist/api/index.js.map +1 -1
- package/dist/api/media.d.ts.map +1 -1
- package/dist/api/media.js +13 -2
- package/dist/api/media.js.map +1 -1
- package/dist/api/negotiations.d.ts.map +1 -1
- package/dist/api/negotiations.js +57 -6
- package/dist/api/negotiations.js.map +1 -1
- package/dist/api/refs.d.ts.map +1 -1
- package/dist/api/refs.js +55 -4
- package/dist/api/refs.js.map +1 -1
- package/dist/api/scans.d.ts.map +1 -1
- package/dist/api/scans.js +5 -1
- package/dist/api/scans.js.map +1 -1
- package/dist/api/settings.d.ts.map +1 -1
- package/dist/api/settings.js +115 -2
- package/dist/api/settings.js.map +1 -1
- package/dist/db/conversation-queries.d.ts +57 -0
- package/dist/db/conversation-queries.d.ts.map +1 -0
- package/dist/db/conversation-queries.js +152 -0
- package/dist/db/conversation-queries.js.map +1 -0
- package/dist/db/queries.d.ts +3 -0
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +42 -6
- package/dist/db/queries.js.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +96 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/dht/discovery.d.ts +29 -1
- package/dist/dht/discovery.d.ts.map +1 -1
- package/dist/dht/discovery.js +93 -0
- package/dist/dht/discovery.js.map +1 -1
- package/dist/index.js +93 -6
- package/dist/index.js.map +1 -1
- package/dist/skills/loader.d.ts +1 -1
- package/dist/skills/loader.js +6 -6
- package/dist/skills/loader.js.map +1 -1
- package/dist/sync/conversation-poller.d.ts +19 -0
- package/dist/sync/conversation-poller.d.ts.map +1 -0
- package/dist/sync/conversation-poller.js +112 -0
- package/dist/sync/conversation-poller.js.map +1 -0
- package/dist/sync/index.d.ts +29 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +82 -7
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/negotiation-poller.d.ts +17 -0
- package/dist/sync/negotiation-poller.d.ts.map +1 -0
- package/dist/sync/negotiation-poller.js +63 -0
- package/dist/sync/negotiation-poller.js.map +1 -0
- package/dist/sync/network-publisher.d.ts +76 -0
- package/dist/sync/network-publisher.d.ts.map +1 -0
- package/dist/sync/network-publisher.js +302 -0
- package/dist/sync/network-publisher.js.map +1 -0
- package/dist/sync/reffo-client.d.ts +12 -0
- package/dist/sync/reffo-client.d.ts.map +1 -1
- package/dist/sync/reffo-client.js +16 -0
- package/dist/sync/reffo-client.js.map +1 -1
- package/dist/ui.d.ts +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +2111 -1224
- package/dist/ui.js.map +1 -1
- package/favicon.ico +0 -0
- package/footer-brand.png +0 -0
- package/package.json +9 -4
package/dist/index.js
CHANGED
|
@@ -11,6 +11,8 @@ const health_1 = require("./api/health");
|
|
|
11
11
|
const dht_1 = require("./dht");
|
|
12
12
|
const db_1 = require("./db");
|
|
13
13
|
const sync_1 = require("./sync");
|
|
14
|
+
const network_publisher_1 = require("./sync/network-publisher");
|
|
15
|
+
const conversation_poller_1 = require("./sync/conversation-poller");
|
|
14
16
|
const reffo_client_1 = require("./sync/reffo-client");
|
|
15
17
|
const version_1 = require("./version");
|
|
16
18
|
const skills_1 = require("./skills");
|
|
@@ -35,6 +37,10 @@ function loadEnv() {
|
|
|
35
37
|
}
|
|
36
38
|
loadEnv();
|
|
37
39
|
const PORT = parseInt(process.env.PORT || '3000', 10);
|
|
40
|
+
const HOST = process.env.HOST || '127.0.0.1';
|
|
41
|
+
function isNonLocalhost(host) {
|
|
42
|
+
return host !== '127.0.0.1' && host !== 'localhost' && host !== '::1';
|
|
43
|
+
}
|
|
38
44
|
function getOrCreateBeaconId() {
|
|
39
45
|
if (process.env.BEACON_ID)
|
|
40
46
|
return process.env.BEACON_ID;
|
|
@@ -50,17 +56,65 @@ function getOrCreateBeaconId() {
|
|
|
50
56
|
}
|
|
51
57
|
}
|
|
52
58
|
const BEACON_ID = getOrCreateBeaconId();
|
|
59
|
+
// Generate or load a local auth token (prevents rogue local processes from accessing data)
|
|
60
|
+
function getOrCreateLocalToken() {
|
|
61
|
+
const tokenFile = path_1.default.join(process.cwd(), 'data', 'local-token');
|
|
62
|
+
try {
|
|
63
|
+
return fs_1.default.readFileSync(tokenFile, 'utf-8').trim();
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
const token = crypto_1.default.randomBytes(32).toString('hex');
|
|
67
|
+
fs_1.default.mkdirSync(path_1.default.dirname(tokenFile), { recursive: true });
|
|
68
|
+
fs_1.default.writeFileSync(tokenFile, token, { mode: 0o600 });
|
|
69
|
+
return token;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const LOCAL_TOKEN = getOrCreateLocalToken();
|
|
73
|
+
// Secure sensitive files — restrict to owner-only read/write (chmod 600)
|
|
74
|
+
function secureSensitiveFiles() {
|
|
75
|
+
const filesToSecure = [
|
|
76
|
+
path_1.default.join(process.cwd(), '.env'),
|
|
77
|
+
path_1.default.join(process.cwd(), 'pelagora.db'),
|
|
78
|
+
path_1.default.join(process.cwd(), 'pelagora.db-wal'),
|
|
79
|
+
path_1.default.join(process.cwd(), 'pelagora.db-shm'),
|
|
80
|
+
path_1.default.join(process.cwd(), 'data', 'beacon-id'),
|
|
81
|
+
path_1.default.join(process.cwd(), 'data', 'local-token'),
|
|
82
|
+
];
|
|
83
|
+
for (const filePath of filesToSecure) {
|
|
84
|
+
try {
|
|
85
|
+
if (fs_1.default.existsSync(filePath)) {
|
|
86
|
+
fs_1.default.chmodSync(filePath, 0o600);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Non-fatal: Windows doesn't support chmod, skip silently
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
53
94
|
async function main() {
|
|
54
95
|
// Ensure uploads directory exists
|
|
55
96
|
fs_1.default.mkdirSync(path_1.default.join(process.cwd(), 'uploads'), { recursive: true });
|
|
97
|
+
// Secure sensitive files on startup
|
|
98
|
+
secureSensitiveFiles();
|
|
56
99
|
// Initialize database
|
|
57
100
|
(0, db_1.getDb)();
|
|
58
101
|
console.log('[DB] SQLite initialized');
|
|
59
|
-
// Create Express app
|
|
60
|
-
const app = (0, api_1.createApp)();
|
|
102
|
+
// Create Express app with local auth token
|
|
103
|
+
const app = (0, api_1.createApp)(LOCAL_TOKEN);
|
|
61
104
|
app.set('beaconId', BEACON_ID);
|
|
62
105
|
app.set('startTime', Date.now());
|
|
63
106
|
(0, health_1.setBeaconId)(BEACON_ID);
|
|
107
|
+
// Initialize network publisher (always — no API key needed)
|
|
108
|
+
const webappUrl = process.env.REFFO_WEBAPP_URL || process.env.REFFO_API_URL || 'https://reffo.ai';
|
|
109
|
+
const networkPublisher = new network_publisher_1.NetworkPublisher(BEACON_ID, webappUrl);
|
|
110
|
+
app.set('networkPublisher', networkPublisher);
|
|
111
|
+
networkPublisher.startReconciliation();
|
|
112
|
+
networkPublisher.startHeartbeat();
|
|
113
|
+
console.log('[Network] Publisher initialized — public items will be mirrored to', webappUrl);
|
|
114
|
+
// Poll for conversation messages from webapp (no API key needed)
|
|
115
|
+
const conversationPoller = new conversation_poller_1.ConversationPoller(BEACON_ID, webappUrl);
|
|
116
|
+
conversationPoller.start();
|
|
117
|
+
app.set('conversationPoller', conversationPoller);
|
|
64
118
|
// Initialize Reffo.ai sync if API key is configured
|
|
65
119
|
const reffoApiKey = process.env.REFFO_API_KEY;
|
|
66
120
|
if (reffoApiKey) {
|
|
@@ -91,6 +145,23 @@ async function main() {
|
|
|
91
145
|
const dht = new dht_1.DhtDiscovery(BEACON_ID);
|
|
92
146
|
dht.httpPort = PORT;
|
|
93
147
|
app.set('dht', dht);
|
|
148
|
+
// Wire DHT conversation sync: when a chat message is received via DHT, also push to webapp
|
|
149
|
+
const syncMgr = app.get('syncManager');
|
|
150
|
+
if (syncMgr) {
|
|
151
|
+
dht.setOnChatMessageReceived((data) => {
|
|
152
|
+
syncMgr.pushConversationMessage({
|
|
153
|
+
conversationId: data.conversationId,
|
|
154
|
+
messageId: data.messageId,
|
|
155
|
+
refId: data.refId,
|
|
156
|
+
refName: data.refName,
|
|
157
|
+
buyerBeaconId: data.senderBeaconId,
|
|
158
|
+
messageType: data.messageType,
|
|
159
|
+
content: data.content,
|
|
160
|
+
amount: data.amount,
|
|
161
|
+
currency: data.currency,
|
|
162
|
+
}).catch(() => { });
|
|
163
|
+
});
|
|
164
|
+
}
|
|
94
165
|
// Load skill plugins
|
|
95
166
|
const db = (0, db_1.getDb)();
|
|
96
167
|
const skillLoader = new skills_1.SkillLoader(db, BEACON_ID, dht);
|
|
@@ -175,9 +246,23 @@ async function main() {
|
|
|
175
246
|
(0, health_1.setDhtStatus)({ connected: dht.isConnected, peers: peerCount });
|
|
176
247
|
});
|
|
177
248
|
(0, health_1.setDhtStatus)({ connected: dht.isConnected, peers: dht.peerCount });
|
|
249
|
+
// Expose bound-host flag so the UI can show a warning banner
|
|
250
|
+
app.set('nonLocalhost', isNonLocalhost(HOST));
|
|
251
|
+
// Security status endpoint for UI
|
|
252
|
+
app.get('/api/security-status', (_req, res) => {
|
|
253
|
+
res.json({ nonLocalhost: isNonLocalhost(HOST) });
|
|
254
|
+
});
|
|
178
255
|
// Start HTTP server
|
|
179
|
-
const server = app.listen(PORT, () => {
|
|
180
|
-
console.log(`[Pelagora] Running on http
|
|
256
|
+
const server = app.listen(PORT, HOST, () => {
|
|
257
|
+
console.log(`[Pelagora] Running on http://${HOST}:${PORT}`);
|
|
258
|
+
if (isNonLocalhost(HOST)) {
|
|
259
|
+
console.log('');
|
|
260
|
+
console.log('\x1b[41m\x1b[97m !! SECURITY WARNING !! \x1b[0m');
|
|
261
|
+
console.log('\x1b[91m This beacon is listening on %s\x1b[0m', HOST);
|
|
262
|
+
console.log('\x1b[91m Anyone who can reach this port can access your data.\x1b[0m');
|
|
263
|
+
console.log('\x1b[91m Consider running behind a firewall or VPN.\x1b[0m');
|
|
264
|
+
console.log('');
|
|
265
|
+
}
|
|
181
266
|
console.log(`[Pelagora] Node ID: ${BEACON_ID.slice(0, 16)}...`);
|
|
182
267
|
console.log(`[Pelagora] Endpoints:`);
|
|
183
268
|
console.log(` GET / - Web UI`);
|
|
@@ -188,14 +273,16 @@ async function main() {
|
|
|
188
273
|
console.log(` POST /refs/:id/media - Upload media`);
|
|
189
274
|
console.log(` GET /offers - List offers`);
|
|
190
275
|
console.log(` POST /offers - Create offer`);
|
|
191
|
-
console.log(` GET /
|
|
192
|
-
console.log(` POST /
|
|
276
|
+
console.log(` GET /conversations - List conversations`);
|
|
277
|
+
console.log(` POST /conversations - Start conversation`);
|
|
193
278
|
console.log(` GET /search?q=... - Search peer network`);
|
|
194
279
|
});
|
|
195
280
|
// Graceful shutdown
|
|
196
281
|
const shutdown = async () => {
|
|
197
282
|
console.log('\n[Pelagora] Shutting down...');
|
|
198
283
|
server.close();
|
|
284
|
+
networkPublisher.stop();
|
|
285
|
+
conversationPoller.stop();
|
|
199
286
|
// Force exit after 2s if DHT hangs
|
|
200
287
|
const forceExit = setTimeout(() => process.exit(0), 2000);
|
|
201
288
|
try {
|
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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"}
|
package/dist/skills/loader.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Skill Loader — discovers and loads skill plugins on startup.
|
|
3
3
|
*
|
|
4
4
|
* Skills are discovered from:
|
|
5
|
-
* 1. node_modules/@
|
|
5
|
+
* 1. node_modules/@pelagora/skill-* packages
|
|
6
6
|
* 2. Local skills/ directory (for development)
|
|
7
7
|
*
|
|
8
8
|
* Each skill must export a default Skill object.
|
package/dist/skills/loader.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Skill Loader — discovers and loads skill plugins on startup.
|
|
4
4
|
*
|
|
5
5
|
* Skills are discovered from:
|
|
6
|
-
* 1. node_modules/@
|
|
6
|
+
* 1. node_modules/@pelagora/skill-* packages
|
|
7
7
|
* 2. Local skills/ directory (for development)
|
|
8
8
|
*
|
|
9
9
|
* Each skill must export a default Skill object.
|
|
@@ -50,14 +50,14 @@ class SkillLoader {
|
|
|
50
50
|
discoverSkills() {
|
|
51
51
|
const paths = [];
|
|
52
52
|
const root = process.cwd();
|
|
53
|
-
// 1. Check node_modules/@
|
|
54
|
-
const
|
|
55
|
-
if (fs_1.default.existsSync(
|
|
53
|
+
// 1. Check node_modules/@pelagora/skill-*
|
|
54
|
+
const pelagoraModules = path_1.default.join(root, 'node_modules', '@pelagora');
|
|
55
|
+
if (fs_1.default.existsSync(pelagoraModules)) {
|
|
56
56
|
try {
|
|
57
|
-
const entries = fs_1.default.readdirSync(
|
|
57
|
+
const entries = fs_1.default.readdirSync(pelagoraModules, { withFileTypes: true });
|
|
58
58
|
for (const entry of entries) {
|
|
59
59
|
if (entry.isDirectory() && entry.name.startsWith('skill-')) {
|
|
60
|
-
paths.push(path_1.default.join(
|
|
60
|
+
paths.push(path_1.default.join(pelagoraModules, entry.name));
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;AAEH,4CAAoB;AACpB,gDAAwB;AAKxB,yCAA2C;AAE3C,MAAa,WAAW;IACd,MAAM,GAAuB,IAAI,GAAG,EAAE,CAAC;IACvC,EAAE,CAAoB;IACtB,QAAQ,CAAS;IACjB,GAAG,CAAe;IAClB,QAAQ,CAAgB;IAEhC,YAAY,EAAqB,EAAE,QAAgB,EAAE,GAAiB;QACpE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,IAAI,wBAAa,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,OAAO,CAAC,GAAY;QACxB,+BAA+B;QAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAExB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEzC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBAC9C,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,4EAA4E;IACpE,cAAc;QACpB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE3B,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConversationPoller — Polls the Reffo webapp for new conversation messages
|
|
3
|
+
* addressed to this beacon (buyer-role conversations). No API key required —
|
|
4
|
+
* uses the public /api/network/conversations endpoint.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ConversationPoller {
|
|
7
|
+
private baseUrl;
|
|
8
|
+
private beaconId;
|
|
9
|
+
private conversations;
|
|
10
|
+
private timer;
|
|
11
|
+
private lastPollTime;
|
|
12
|
+
constructor(beaconId: string, baseUrl?: string);
|
|
13
|
+
start(): void;
|
|
14
|
+
stop(): void;
|
|
15
|
+
pollAll(): Promise<{
|
|
16
|
+
received: number;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=conversation-poller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-poller.d.ts","sourceRoot":"","sources":["../../src/sync/conversation-poller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,YAAY,CAAuB;gBAE/B,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAM9C,KAAK,IAAI,IAAI;IAcb,IAAI,IAAI,IAAI;IAON,OAAO,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAsF/C"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ConversationPoller — Polls the Reffo webapp for new conversation messages
|
|
4
|
+
* addressed to this beacon (buyer-role conversations). No API key required —
|
|
5
|
+
* uses the public /api/network/conversations endpoint.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ConversationPoller = void 0;
|
|
9
|
+
const conversation_queries_1 = require("../db/conversation-queries");
|
|
10
|
+
const queries_1 = require("../db/queries");
|
|
11
|
+
const DEFAULT_WEBAPP_URL = 'https://reffo.ai';
|
|
12
|
+
const POLL_INTERVAL = 5 * 1000; // 5 seconds for near-realtime chat
|
|
13
|
+
class ConversationPoller {
|
|
14
|
+
baseUrl;
|
|
15
|
+
beaconId;
|
|
16
|
+
conversations;
|
|
17
|
+
timer = null;
|
|
18
|
+
lastPollTime = null;
|
|
19
|
+
constructor(beaconId, baseUrl) {
|
|
20
|
+
this.beaconId = beaconId;
|
|
21
|
+
this.baseUrl = (baseUrl || DEFAULT_WEBAPP_URL).replace(/\/$/, '');
|
|
22
|
+
this.conversations = new conversation_queries_1.ConversationQueries();
|
|
23
|
+
}
|
|
24
|
+
start() {
|
|
25
|
+
if (this.timer)
|
|
26
|
+
return;
|
|
27
|
+
// Initial poll
|
|
28
|
+
this.pollAll().catch(() => { });
|
|
29
|
+
console.log(`[ConversationPoller] Started (${POLL_INTERVAL / 1000}s interval)`);
|
|
30
|
+
this.timer = setInterval(() => {
|
|
31
|
+
this.pollAll().catch((err) => {
|
|
32
|
+
console.error('[ConversationPoller] Poll error:', err instanceof Error ? err.message : err);
|
|
33
|
+
});
|
|
34
|
+
}, POLL_INTERVAL);
|
|
35
|
+
}
|
|
36
|
+
stop() {
|
|
37
|
+
if (this.timer) {
|
|
38
|
+
clearInterval(this.timer);
|
|
39
|
+
this.timer = null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async pollAll() {
|
|
43
|
+
let received = 0;
|
|
44
|
+
try {
|
|
45
|
+
const params = new URLSearchParams({ beaconId: this.beaconId });
|
|
46
|
+
if (this.lastPollTime) {
|
|
47
|
+
params.set('since', this.lastPollTime);
|
|
48
|
+
}
|
|
49
|
+
const res = await fetch(`${this.baseUrl}/api/network/conversations?${params.toString()}`);
|
|
50
|
+
if (!res.ok)
|
|
51
|
+
return { received };
|
|
52
|
+
const data = await res.json();
|
|
53
|
+
const messages = data.messages || [];
|
|
54
|
+
// Track the latest message timestamp to use as the next `since` cursor
|
|
55
|
+
let latestTimestamp = this.lastPollTime;
|
|
56
|
+
for (const msg of messages) {
|
|
57
|
+
try {
|
|
58
|
+
// Track the newest message timestamp we've seen
|
|
59
|
+
if (!latestTimestamp || msg.createdAt > latestTimestamp) {
|
|
60
|
+
latestTimestamp = msg.createdAt;
|
|
61
|
+
}
|
|
62
|
+
// Skip messages we sent ourselves
|
|
63
|
+
if (msg.senderBeaconId === this.beaconId)
|
|
64
|
+
continue;
|
|
65
|
+
// Determine our role: check if we own the item (seller) or not (buyer).
|
|
66
|
+
// We can't rely on buyerBeaconId matching because the webapp stores
|
|
67
|
+
// the remote beacon's ID in buyer_beacon_id regardless of actual role.
|
|
68
|
+
const refs = new queries_1.RefQueries();
|
|
69
|
+
const ownedRef = refs.get(msg.refId);
|
|
70
|
+
const isSeller = !!ownedRef; // If we have this item in our inventory, we're the seller
|
|
71
|
+
const counterpartId = isSeller ? msg.buyerBeaconId : msg.sellerBeaconId;
|
|
72
|
+
const role = isSeller ? 'seller' : 'buyer';
|
|
73
|
+
// Ensure the conversation exists locally
|
|
74
|
+
const conversation = this.conversations.getOrCreate(msg.refId, msg.refName, counterpartId, role);
|
|
75
|
+
// Check if we already have this message
|
|
76
|
+
const existingMessages = this.conversations.getMessages(conversation.id);
|
|
77
|
+
const alreadyExists = existingMessages.some(m => m.id === msg.messageId);
|
|
78
|
+
if (alreadyExists)
|
|
79
|
+
continue;
|
|
80
|
+
// Add the message to the local conversation
|
|
81
|
+
this.conversations.addMessage({
|
|
82
|
+
id: msg.messageId,
|
|
83
|
+
conversationId: conversation.id,
|
|
84
|
+
senderBeaconId: msg.senderBeaconId,
|
|
85
|
+
messageType: msg.messageType,
|
|
86
|
+
content: msg.content || undefined,
|
|
87
|
+
amount: msg.amount || undefined,
|
|
88
|
+
currency: msg.currency || 'USD',
|
|
89
|
+
});
|
|
90
|
+
received++;
|
|
91
|
+
console.log(`[ConversationPoller] Added message ${msg.messageId} to conversation ${conversation.id}`);
|
|
92
|
+
}
|
|
93
|
+
catch (innerErr) {
|
|
94
|
+
console.error('[ConversationPoller] Message processing error:', innerErr instanceof Error ? innerErr.message : innerErr);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Advance cursor to the latest message we've seen (not current time)
|
|
98
|
+
if (latestTimestamp) {
|
|
99
|
+
this.lastPollTime = latestTimestamp;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
console.error('[ConversationPoller] Poll error:', err instanceof Error ? err.message : err);
|
|
104
|
+
}
|
|
105
|
+
if (received > 0) {
|
|
106
|
+
console.log(`[ConversationPoller] Received ${received} new message(s)`);
|
|
107
|
+
}
|
|
108
|
+
return { received };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.ConversationPoller = ConversationPoller;
|
|
112
|
+
//# sourceMappingURL=conversation-poller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-poller.js","sourceRoot":"","sources":["../../src/sync/conversation-poller.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/index.d.ts
CHANGED
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
export declare class SyncManager {
|
|
5
5
|
private client;
|
|
6
6
|
private beaconId;
|
|
7
|
+
private baseUrl;
|
|
7
8
|
private heartbeatInterval;
|
|
8
9
|
private refs;
|
|
9
10
|
private offers;
|
|
10
11
|
private media;
|
|
11
12
|
private negotiations;
|
|
13
|
+
private conversations;
|
|
12
14
|
private lastOfferPoll;
|
|
13
15
|
private lastRefPull;
|
|
14
16
|
registered: boolean;
|
|
@@ -47,10 +49,37 @@ export declare class SyncManager {
|
|
|
47
49
|
received: number;
|
|
48
50
|
errors: string[];
|
|
49
51
|
}>;
|
|
52
|
+
pushIncomingProposal(proposal: {
|
|
53
|
+
negotiationId: string;
|
|
54
|
+
refId: string;
|
|
55
|
+
refName: string;
|
|
56
|
+
buyerBeaconId: string;
|
|
57
|
+
price: number;
|
|
58
|
+
priceCurrency: string;
|
|
59
|
+
message: string;
|
|
60
|
+
}): Promise<{
|
|
61
|
+
ok: boolean;
|
|
62
|
+
error?: string;
|
|
63
|
+
}>;
|
|
50
64
|
pushOfferResponse(offerId: string, status: string, counterAmount?: number, responseMessage?: string): Promise<{
|
|
51
65
|
ok: boolean;
|
|
52
66
|
error?: string;
|
|
53
67
|
}>;
|
|
68
|
+
pushConversationMessage(data: {
|
|
69
|
+
conversationId: string;
|
|
70
|
+
messageId: string;
|
|
71
|
+
refId: string;
|
|
72
|
+
refName: string;
|
|
73
|
+
buyerBeaconId: string;
|
|
74
|
+
sellerBeaconId?: string;
|
|
75
|
+
messageType: string;
|
|
76
|
+
content?: string;
|
|
77
|
+
amount?: number;
|
|
78
|
+
currency?: string;
|
|
79
|
+
}): Promise<{
|
|
80
|
+
ok: boolean;
|
|
81
|
+
error?: string;
|
|
82
|
+
}>;
|
|
54
83
|
private handleHeartbeatResult;
|
|
55
84
|
startHeartbeat(intervalMs?: number): void;
|
|
56
85
|
stopHeartbeat(): void;
|
package/dist/sync/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/index.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.SyncManager = void 0;
|
|
7
7
|
const reffo_client_1 = require("./reffo-client");
|
|
8
8
|
const queries_1 = require("../db/queries");
|
|
9
|
+
const conversation_queries_1 = require("../db/conversation-queries");
|
|
9
10
|
const version_1 = require("../version");
|
|
10
11
|
const health_1 = require("../api/health");
|
|
11
12
|
function semverNewer(remote, local) {
|
|
@@ -22,11 +23,13 @@ function semverNewer(remote, local) {
|
|
|
22
23
|
class SyncManager {
|
|
23
24
|
client;
|
|
24
25
|
beaconId;
|
|
26
|
+
baseUrl;
|
|
25
27
|
heartbeatInterval = null;
|
|
26
28
|
refs;
|
|
27
29
|
offers;
|
|
28
30
|
media;
|
|
29
31
|
negotiations;
|
|
32
|
+
conversations;
|
|
30
33
|
lastOfferPoll = null;
|
|
31
34
|
lastRefPull = null;
|
|
32
35
|
registered = false;
|
|
@@ -36,10 +39,12 @@ class SyncManager {
|
|
|
36
39
|
constructor(apiKey, beaconId, baseUrl) {
|
|
37
40
|
this.client = new reffo_client_1.ReffoClient(apiKey, baseUrl);
|
|
38
41
|
this.beaconId = beaconId;
|
|
42
|
+
this.baseUrl = (baseUrl || 'https://reffo.ai').replace(/\/$/, '');
|
|
39
43
|
this.refs = new queries_1.RefQueries();
|
|
40
44
|
this.offers = new queries_1.OfferQueries();
|
|
41
45
|
this.media = new queries_1.MediaQueries();
|
|
42
46
|
this.negotiations = new queries_1.NegotiationQueries();
|
|
47
|
+
this.conversations = new conversation_queries_1.ConversationQueries();
|
|
43
48
|
}
|
|
44
49
|
async testConnection() {
|
|
45
50
|
return this.client.testConnection();
|
|
@@ -231,6 +236,9 @@ class SyncManager {
|
|
|
231
236
|
// Build a map of synced refs: local ref ID -> ref (keyed by local ID which is also the ref ID on webapp)
|
|
232
237
|
const syncedRefs = this.refs.listSynced();
|
|
233
238
|
const syncedRefMap = new Map(syncedRefs.map(ref => [ref.id, ref]));
|
|
239
|
+
// Track the earliest skipped offer so we don't advance the poll
|
|
240
|
+
// timestamp past offers we couldn't process yet
|
|
241
|
+
let earliestSkippedAt = null;
|
|
234
242
|
for (const offer of result.offers) {
|
|
235
243
|
// Check if we already have this negotiation
|
|
236
244
|
const existing = this.negotiations.get(offer.id);
|
|
@@ -240,6 +248,9 @@ class SyncManager {
|
|
|
240
248
|
const localRef = syncedRefMap.get(offer.item_id);
|
|
241
249
|
if (!localRef) {
|
|
242
250
|
console.warn(`[Sync] Offer ${offer.id} references unknown ref ${offer.item_id}, skipping`);
|
|
251
|
+
if (!earliestSkippedAt || offer.created_at < earliestSkippedAt) {
|
|
252
|
+
earliestSkippedAt = offer.created_at;
|
|
253
|
+
}
|
|
243
254
|
continue;
|
|
244
255
|
}
|
|
245
256
|
try {
|
|
@@ -262,8 +273,16 @@ class SyncManager {
|
|
|
262
273
|
errors.push(`Offer ${offer.id}: ${err.message}`);
|
|
263
274
|
}
|
|
264
275
|
}
|
|
265
|
-
//
|
|
266
|
-
|
|
276
|
+
// Only advance poll timestamp if no offers were skipped; otherwise
|
|
277
|
+
// rewind to just before the earliest skipped offer so it's retried
|
|
278
|
+
if (earliestSkippedAt) {
|
|
279
|
+
const rewindMs = new Date(earliestSkippedAt).getTime() - 1000;
|
|
280
|
+
this.lastOfferPoll = new Date(rewindMs).toISOString();
|
|
281
|
+
console.warn(`[Sync] ${errors.length || 'Some'} offer(s) skipped — rewinding poll timestamp to retry`);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
this.lastOfferPoll = new Date().toISOString();
|
|
285
|
+
}
|
|
267
286
|
}
|
|
268
287
|
catch (err) {
|
|
269
288
|
errors.push(err.message);
|
|
@@ -273,6 +292,23 @@ class SyncManager {
|
|
|
273
292
|
}
|
|
274
293
|
return { received, errors };
|
|
275
294
|
}
|
|
295
|
+
async pushIncomingProposal(proposal) {
|
|
296
|
+
try {
|
|
297
|
+
const result = await this.client.pushProposal(proposal);
|
|
298
|
+
if (!result.ok) {
|
|
299
|
+
console.warn(`[Sync] Failed to push incoming proposal ${proposal.negotiationId}: ${result.error}`);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
console.log(`[Sync] Pushed incoming proposal ${proposal.negotiationId} to webapp`);
|
|
303
|
+
}
|
|
304
|
+
return result;
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
const msg = err.message;
|
|
308
|
+
console.warn(`[Sync] Failed to push incoming proposal ${proposal.negotiationId}: ${msg}`);
|
|
309
|
+
return { ok: false, error: msg };
|
|
310
|
+
}
|
|
311
|
+
}
|
|
276
312
|
async pushOfferResponse(offerId, status, counterAmount, responseMessage) {
|
|
277
313
|
try {
|
|
278
314
|
const result = await this.client.pushOfferResponse(offerId, status, counterAmount, responseMessage);
|
|
@@ -290,6 +326,42 @@ class SyncManager {
|
|
|
290
326
|
return { ok: false, error: msg };
|
|
291
327
|
}
|
|
292
328
|
}
|
|
329
|
+
async pushConversationMessage(data) {
|
|
330
|
+
try {
|
|
331
|
+
const url = `${this.baseUrl}/api/network/conversations`;
|
|
332
|
+
const res = await fetch(url, {
|
|
333
|
+
method: 'POST',
|
|
334
|
+
headers: {
|
|
335
|
+
'Content-Type': 'application/json',
|
|
336
|
+
},
|
|
337
|
+
body: JSON.stringify({
|
|
338
|
+
conversationId: data.conversationId,
|
|
339
|
+
messageId: data.messageId,
|
|
340
|
+
refId: data.refId,
|
|
341
|
+
refName: data.refName,
|
|
342
|
+
buyerBeaconId: data.buyerBeaconId,
|
|
343
|
+
sellerBeaconId: data.sellerBeaconId,
|
|
344
|
+
messageType: data.messageType,
|
|
345
|
+
content: data.content,
|
|
346
|
+
amount: data.amount,
|
|
347
|
+
currency: data.currency,
|
|
348
|
+
}),
|
|
349
|
+
});
|
|
350
|
+
if (!res.ok) {
|
|
351
|
+
const body = await res.json();
|
|
352
|
+
const error = body.error || `HTTP ${res.status}`;
|
|
353
|
+
console.warn(`[Sync] Failed to push conversation message ${data.messageId}: ${error}`);
|
|
354
|
+
return { ok: false, error };
|
|
355
|
+
}
|
|
356
|
+
console.log(`[Sync] Pushed conversation message ${data.messageId} to webapp`);
|
|
357
|
+
return { ok: true };
|
|
358
|
+
}
|
|
359
|
+
catch (err) {
|
|
360
|
+
const msg = err.message;
|
|
361
|
+
console.warn(`[Sync] Failed to push conversation message ${data.messageId}: ${msg}`);
|
|
362
|
+
return { ok: false, error: msg };
|
|
363
|
+
}
|
|
364
|
+
}
|
|
293
365
|
handleHeartbeatResult(result) {
|
|
294
366
|
if (result.ok && result.latestVersion) {
|
|
295
367
|
const local = (0, version_1.getVersion)();
|
|
@@ -302,18 +374,21 @@ class SyncManager {
|
|
|
302
374
|
startHeartbeat(intervalMs = 5 * 60 * 1000) {
|
|
303
375
|
if (this.heartbeatInterval)
|
|
304
376
|
return;
|
|
305
|
-
// Initial heartbeat + offer poll
|
|
377
|
+
// Initial heartbeat + ref pull then offer poll (refs must be pulled first
|
|
378
|
+
// so pollOffers can match item_ids to local refs)
|
|
306
379
|
this.client.heartbeat(this.beaconId)
|
|
307
|
-
.then((result) => {
|
|
380
|
+
.then(async (result) => {
|
|
308
381
|
this.handleHeartbeatResult(result);
|
|
309
|
-
|
|
382
|
+
await this.pullRefs();
|
|
383
|
+
await this.pollOffers();
|
|
310
384
|
})
|
|
311
385
|
.catch(() => { });
|
|
312
386
|
this.heartbeatInterval = setInterval(() => {
|
|
313
387
|
this.client.heartbeat(this.beaconId)
|
|
314
|
-
.then((result) => {
|
|
388
|
+
.then(async (result) => {
|
|
315
389
|
this.handleHeartbeatResult(result);
|
|
316
|
-
|
|
390
|
+
await this.pullRefs();
|
|
391
|
+
await this.pollOffers();
|
|
317
392
|
})
|
|
318
393
|
.catch((err) => {
|
|
319
394
|
console.warn('[Sync] Heartbeat failed:', err.message);
|