@livequery/rest 2.0.91 → 2.0.96

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/Socket.js ADDED
@@ -0,0 +1,77 @@
1
+ import { fromEvent, Observable, Subject, BehaviorSubject, merge, ReplaySubject, Subscription, of, interval, EMPTY } from "rxjs";
2
+ import { catchError, finalize, ignoreElements, map, mergeMap, retry, switchMap, takeUntil, tap } from "rxjs/operators";
3
+ import { v7 as uuidv7 } from 'uuid';
4
+ export class Socket extends BehaviorSubject {
5
+ endpoint;
6
+ client_id = uuidv7();
7
+ $gateway = new ReplaySubject(1);
8
+ $connected = new BehaviorSubject(false);
9
+ #topics = new Map();
10
+ #$input = new ReplaySubject(1000);
11
+ #running;
12
+ constructor(endpoint) {
13
+ super({
14
+ client_id: uuidv7(),
15
+ connected: false,
16
+ session: 0
17
+ });
18
+ this.endpoint = endpoint;
19
+ this.#init();
20
+ }
21
+ #init() {
22
+ if (typeof WebSocket == 'undefined')
23
+ return;
24
+ if (this.#running)
25
+ return;
26
+ this.#running = of(1).pipe(takeUntil(this.pipe(ignoreElements())), mergeMap(async () => new WebSocket(this.endpoint)), switchMap(ws => merge(fromEvent(ws, 'closed').pipe(map(e => { throw e; })), fromEvent(ws, 'close').pipe(map(e => { throw e; })), fromEvent(ws, 'error').pipe(map(e => { throw e; })), fromEvent(ws, 'open').pipe(switchMap(() => interval(60000)), tap(() => ws.send(JSON.stringify({ event: 'ping' })))), fromEvent(ws, 'open').pipe(tap(() => {
27
+ this.next({
28
+ ...this.value,
29
+ connected: true,
30
+ session: this.value.session + 1
31
+ });
32
+ console.log(this.value.session == 1 ? 'Websocket connected' : `Websocket re-connected (${this.value.session})`);
33
+ ws.send(JSON.stringify({ event: 'start', data: { id: this.client_id } }));
34
+ }), mergeMap(() => this.#$input), tap(data => ws.send(JSON.stringify(data)))), fromEvent(ws, 'message').pipe(tap((evt) => {
35
+ const e = JSON.parse(evt.data);
36
+ const fn = this[`$${e.event}`];
37
+ typeof fn == 'function' && fn.call(this, e);
38
+ }))).pipe(finalize(() => ws.close()))), catchError(e => {
39
+ this.$connected.next(false);
40
+ throw e;
41
+ }), retry({ delay: 1000 })).subscribe();
42
+ }
43
+ stop() {
44
+ this.complete();
45
+ }
46
+ $sync(e) {
47
+ for (const change of e.data.changes) {
48
+ change.collection_ref = change.ref;
49
+ this.#topics.get(change.ref)?.stream.next(change);
50
+ }
51
+ }
52
+ $hello(e) {
53
+ this.$gateway.next(e.gid);
54
+ }
55
+ subscribeWith(realtime_token) {
56
+ this.#$input.next({ event: 'subscribe', data: { realtime_token } });
57
+ }
58
+ listen(ref) {
59
+ if (!this.#topics.has(ref)) {
60
+ const stream = new Subject();
61
+ this.#topics.set(ref, { stream, listen_count: 0 });
62
+ }
63
+ const topic = this.#topics.get(ref);
64
+ if (!topic)
65
+ return EMPTY;
66
+ topic.listen_count++;
67
+ return topic.stream.pipe(finalize(() => {
68
+ topic.listen_count--;
69
+ setTimeout(() => {
70
+ if (topic.listen_count == 0) {
71
+ this.#$input.next({ event: 'unsubscribe', data: { ref } });
72
+ }
73
+ }, 2000);
74
+ }));
75
+ }
76
+ }
77
+ //# sourceMappingURL=Socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Socket.js","sourceRoot":"","sources":["../src/Socket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export const parseJson = (str) => {
2
+ try {
3
+ return JSON.parse(str);
4
+ }
5
+ catch (e) {
6
+ return null;
7
+ }
8
+ };
9
+ //# sourceMappingURL=parseJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseJson.js","sourceRoot":"","sources":["../../src/helpers/parseJson.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;IACrC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,IAAI,CAAA;IACf,CAAC;AACL,CAAC,CAAA"}