Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/cocalc
Path: blob/master/src/packages/database/conat/changefeed-api.ts
1503 views
1
/*
2
3
DEVELOPMENT:
4
5
Turn off conat-server handling for the hub for changefeeds by sending this message from a browser as an admin:
6
7
await cc.client.conat_client.hub.system.terminate({service:'changefeeds'})
8
9
In a node session:
10
11
DEBUG=cocalc*changefeed* DEBUG_CONSOLE=yes node
12
13
require('@cocalc/backend/conat'); require('@cocalc/database/conat/changefeed-api').init()
14
15
In another session:
16
17
require('@cocalc/backend/conat'); c = require('@cocalc/conat/changefeed/client');
18
account_id = '6aae57c6-08f1-4bb5-848b-3ceb53e61ede';
19
cf = await c.changefeed({account_id,query:{accounts:[{account_id, first_name:null}]}, heartbeat:5000, lifetime:30000});
20
21
const {value:{id}} = await cf.next();
22
console.log({id});
23
for await (const x of cf) { console.log(new Date(), {x}); }
24
25
await c.renew({account_id, id})
26
*/
27
28
import {
29
changefeedServer,
30
type ConatSocketServer,
31
} from "@cocalc/conat/hub/changefeeds";
32
33
import { db } from "@cocalc/database";
34
import { conat } from "@cocalc/backend/conat";
35
36
let server: ConatSocketServer | null = null;
37
export function init() {
38
const D = db();
39
server = changefeedServer({
40
client: conat(),
41
userQuery: D.user_query.bind(D),
42
cancelQuery: (id: string) => D.user_query_cancel_changefeed({ id }),
43
});
44
}
45
46
export function close() {
47
server?.close();
48
server = null;
49
}
50
51