@livequery/nestjs 2.0.57 → 2.0.146

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.
Files changed (49) hide show
  1. package/build/src/ApiGatewayLinker.d.ts +15 -7
  2. package/build/src/ApiGatewayLinker.js +55 -48
  3. package/build/src/ApiGatewayLinker.js.map +1 -1
  4. package/build/src/ApiServiceLinker.d.ts +12 -0
  5. package/build/src/ApiServiceLinker.js +46 -0
  6. package/build/src/ApiServiceLinker.js.map +1 -0
  7. package/build/src/LivequeryDatasourceInterceptors.d.ts +8 -2
  8. package/build/src/LivequeryDatasourceInterceptors.js +16 -8
  9. package/build/src/LivequeryDatasourceInterceptors.js.map +1 -1
  10. package/build/src/LivequeryInterceptor.d.ts +4 -9
  11. package/build/src/LivequeryInterceptor.js +33 -31
  12. package/build/src/LivequeryInterceptor.js.map +1 -1
  13. package/build/src/LivequeryWebsocketSync.d.ts +1 -61
  14. package/build/src/LivequeryWebsocketSync.js +4 -224
  15. package/build/src/LivequeryWebsocketSync.js.map +1 -1
  16. package/build/src/RxjsUdp.d.ts +11 -11
  17. package/build/src/RxjsUdp.js +37 -32
  18. package/build/src/RxjsUdp.js.map +1 -1
  19. package/build/src/SimpleApiGateway.d.ts +5 -0
  20. package/build/src/SimpleApiGateway.js +14 -0
  21. package/build/src/SimpleApiGateway.js.map +1 -0
  22. package/build/src/UdpDiscovery.d.ts +35 -0
  23. package/build/src/UdpDiscovery.js +231 -0
  24. package/build/src/UdpDiscovery.js.map +1 -0
  25. package/build/src/WebsocketGateway.d.ts +29 -0
  26. package/build/src/WebsocketGateway.js +257 -0
  27. package/build/src/WebsocketGateway.js.map +1 -0
  28. package/build/src/const.d.ts +1 -1
  29. package/build/src/const.js +1 -1
  30. package/build/src/const.js.map +1 -1
  31. package/build/src/helpers/PathHelper.d.ts +1 -1
  32. package/build/src/helpers/createDatasourceMapper.d.ts +3 -3
  33. package/build/src/helpers/createDatasourceMapper.js +2 -2
  34. package/build/src/helpers/createDatasourceMapper.js.map +1 -1
  35. package/build/src/helpers/hidePrivateFields.d.ts +1 -1
  36. package/build/src/helpers/listPaths.d.ts +2 -2
  37. package/build/src/helpers/listPaths.js +30 -19
  38. package/build/src/helpers/listPaths.js.map +1 -1
  39. package/build/src/index.d.ts +6 -4
  40. package/build/src/index.js +5 -3
  41. package/build/src/index.js.map +1 -1
  42. package/build/tsconfig.tsbuildinfo +1 -1
  43. package/package.json +3 -1
  44. package/build/tests/gateway.d.ts +0 -2
  45. package/build/tests/gateway.js +0 -17
  46. package/build/tests/gateway.js.map +0 -1
  47. package/build/tests/service.d.ts +0 -14
  48. package/build/tests/service.js +0 -73
  49. package/build/tests/service.js.map +0 -1
@@ -1,229 +1,9 @@
1
- import { __decorate, __metadata, __param } from "tslib";
2
- import { ConnectedSocket, MessageBody, SubscribeMessage, WebSocketGateway } from "@nestjs/websockets";
3
- import { Subject, tap, switchMap, retry, timer, BehaviorSubject, takeWhile } from "rxjs";
4
- import WebSocket from 'ws';
5
- import { of, fromEvent, map, finalize, merge, EMPTY, filter, mergeAll } from 'rxjs';
6
- import { randomUUID } from "crypto";
7
- import { NODE_ID } from "./const.js";
8
- const ENDPOINT_RESTARTED = 'ENDPOINT_RESTARTED';
9
- export const WEBSOCKET_PATH = process.env.REALTIME_UPDATE_SOCKET_PATH || '/livequery/realtime-updates';
10
- let LivequeryWebsocketSync = class LivequeryWebsocketSync extends Subject {
11
- #connections = new Map();
12
- #subscriptions = new Map();
13
- #pipes = new Map();
14
- id = NODE_ID;
15
- auth = randomUUID();
16
- constructor() {
17
- super();
18
- this.subscribe(({ ref, data, type }) => {
19
- const targets = [
20
- ...this.#subscriptions.get(ref) || new Map(),
21
- ...this.#subscriptions.get(`${ref}/${data.id}`) || new Map()
22
- ].reduce((p, [client_id, { gateway_id }]) => {
23
- const connection_id = gateway_id == NODE_ID ? client_id : gateway_id;
24
- const old = p.get(connection_id);
25
- const socket = old ? old.socket : this.#connections.get(connection_id);
26
- if (!socket)
27
- return p;
28
- const cids = [...old ? old.cids : [], client_id];
29
- p.set(connection_id, { cids, socket });
30
- return p;
31
- }, new Map());
32
- for (const [_, { cids, socket }] of targets) {
33
- const event = {
34
- event: 'sync',
35
- cids,
36
- data: { changes: [{ ref, data, type }] }
37
- };
38
- const payload = JSON.stringify(event);
39
- socket.send(payload);
40
- }
41
- });
42
- }
43
- async link(ref, handler) {
44
- if (!this.#subscriptions.has(ref))
45
- return;
46
- const m = this.#pipes.get(ref);
47
- const merged = handler(m?.o);
48
- const o = merged instanceof Promise ? await merged : merged;
49
- if (!o || o == m?.o)
50
- return;
51
- m?.s.unsubscribe();
52
- this.#pipes.set(ref, {
53
- o,
54
- s: o.pipe(finalize(() => {
55
- this.#pipes.delete(ref);
56
- })).subscribe(data => this.next(data))
57
- });
58
- }
59
- connect(url, auth, ondisconect) {
60
- const gateway$ = new BehaviorSubject({ id: '', stop: false });
61
- return of(0).pipe(takeWhile(() => !gateway$.getValue().stop), map(() => new WebSocket(url)), switchMap((ws) => {
62
- return merge(fromEvent(ws, 'open').pipe(tap(() => {
63
- const payload = { event: 'start', data: { id: NODE_ID, auth } };
64
- ws.send(JSON.stringify(payload));
65
- })), fromEvent(ws, 'close').pipe(map(() => { throw 'CLOSED'; })), fromEvent(ws, 'error').pipe(map(e => { throw e; })), fromEvent(ws, 'message').pipe(map((event) => {
66
- const data = event.data;
67
- const parsed = JSON.parse(data.toString());
68
- if (parsed.event == 'hello') {
69
- ws.id = parsed.gid;
70
- const old_id = gateway$.getValue().id;
71
- if (old_id == '') {
72
- gateway$.next({ id: ws.id, stop: false });
73
- }
74
- if (old_id != '' && old_id != ws.id) {
75
- gateway$.next({ id: ws.id, stop: true });
76
- throw ENDPOINT_RESTARTED;
77
- }
78
- this.#connections.set(parsed.gid, ws);
79
- return;
80
- }
81
- if (parsed.event == 'subscribe') {
82
- this.listen([parsed]);
83
- return;
84
- }
85
- return parsed;
86
- }), filter(Boolean), map(({ event, cids, data }) => cids.map(client_id => ({ event, data, client_id }))), mergeAll(), tap(({ client_id, ...event }) => {
87
- const socket = this.#connections.get(client_id);
88
- socket && socket.send(JSON.stringify(event));
89
- }))).pipe(finalize(() => {
90
- this.#connections.delete(ws.id);
91
- }));
92
- }), retry({
93
- delay: (e, n) => {
94
- if (n >= 5 || e == ENDPOINT_RESTARTED)
95
- return EMPTY;
96
- return timer(1000);
97
- }
98
- }), finalize(() => {
99
- ondisconect?.();
100
- })).subscribe();
101
- }
102
- start(socket, { id, auth }) {
103
- if (socket.id)
104
- return;
105
- if (auth && auth != this.auth) {
106
- socket.close();
107
- return;
108
- }
109
- if (this.#connections.has(id)) {
110
- socket.close();
111
- return;
112
- }
113
- socket.id = id;
114
- socket.gateway = auth == this.auth;
115
- socket.refs = new Set();
116
- this.#connections.set(id, socket);
117
- const payload = { event: 'hello', gid: NODE_ID };
118
- socket.send(JSON.stringify(payload));
119
- }
120
- unref(socket, body) {
121
- const client_id = body.client_id || socket.id;
122
- const refs = [
123
- ...body.ref ? [body.ref] : [],
124
- ...body.refs || []
125
- ];
126
- for (const ref of refs) {
127
- const map = this.#subscriptions.get(ref);
128
- if (!map)
129
- return;
130
- const routing = map.get(client_id);
131
- map.delete(client_id);
132
- if (map.size == 0) {
133
- const $ = this.#pipes.get(ref);
134
- $?.s?.unsubscribe();
135
- this.#subscriptions.delete(ref);
136
- }
137
- this.#connections.get(client_id)?.refs?.delete(ref);
138
- if (routing.listener_node_id != NODE_ID) {
139
- const gateway = this.#connections.get(routing.listener_node_id);
140
- if (gateway) {
141
- const payload = { event: 'unsubscribe', data: { ref, client_id } };
142
- gateway && gateway.send(JSON.stringify(payload));
143
- }
144
- }
145
- }
146
- }
147
- handleDisconnect(socket) {
148
- if (socket.gateway) {
149
- for (const [ref, map] of this.#subscriptions) {
150
- for (const [client_id, { gateway_id }] of map) {
151
- if (gateway_id == socket.id) {
152
- map.delete(client_id);
153
- }
154
- }
155
- if (map.size == 0) {
156
- const $ = this.#pipes.get(ref);
157
- $?.s?.unsubscribe();
158
- this.#subscriptions.delete(ref);
159
- }
160
- }
161
- }
162
- else {
163
- const refs = [...socket.refs || []];
164
- refs.length > 0 && this.unref(socket, { refs });
165
- }
166
- this.#connections.delete(socket.id);
167
- }
168
- listen(e) {
169
- for (const { ref, client_id, gateway_id, listener_node_id } of e) {
170
- if (client_id == gateway_id)
171
- continue;
172
- const socket = this.#connections.get(client_id);
173
- if (gateway_id == NODE_ID && (!socket || socket.refs?.has(ref))) {
174
- if (listener_node_id != NODE_ID) {
175
- const target = this.#connections.get(listener_node_id);
176
- if (target) {
177
- const e = {
178
- event: 'unsubscribe',
179
- data: { client_id, ref }
180
- };
181
- target.send(JSON.stringify(e));
182
- }
183
- }
184
- continue;
185
- }
186
- const map = this.#subscriptions.get(ref) || new Map();
187
- if (map.has(client_id))
188
- continue;
189
- map.set(client_id, { gateway_id, listener_node_id });
190
- this.#subscriptions.set(ref, map);
191
- this.#connections.get(client_id)?.refs?.add(ref);
192
- if (gateway_id != NODE_ID) {
193
- const target = this.#connections.get(gateway_id);
194
- if (target) {
195
- const payload = {
196
- client_id,
197
- event: 'subscribe',
198
- gateway_id,
199
- ref,
200
- listener_node_id
201
- };
202
- target.send(JSON.stringify(payload));
203
- }
204
- }
205
- }
206
- }
1
+ import { __decorate } from "tslib";
2
+ import { Injectable } from '@nestjs/common';
3
+ let LivequeryWebsocketSync = class LivequeryWebsocketSync {
207
4
  };
208
- __decorate([
209
- SubscribeMessage('start'),
210
- __param(0, ConnectedSocket()),
211
- __param(1, MessageBody()),
212
- __metadata("design:type", Function),
213
- __metadata("design:paramtypes", [Object, Object]),
214
- __metadata("design:returntype", void 0)
215
- ], LivequeryWebsocketSync.prototype, "start", null);
216
- __decorate([
217
- SubscribeMessage('unsubscribe'),
218
- __param(0, ConnectedSocket()),
219
- __param(1, MessageBody()),
220
- __metadata("design:type", Function),
221
- __metadata("design:paramtypes", [Object, Object]),
222
- __metadata("design:returntype", void 0)
223
- ], LivequeryWebsocketSync.prototype, "unref", null);
224
5
  LivequeryWebsocketSync = __decorate([
225
- WebSocketGateway({ path: WEBSOCKET_PATH }),
226
- __metadata("design:paramtypes", [])
6
+ Injectable()
227
7
  ], LivequeryWebsocketSync);
228
8
  export { LivequeryWebsocketSync };
229
9
  //# sourceMappingURL=LivequeryWebsocketSync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LivequeryWebsocketSync.js","sourceRoot":"","sources":["../../src/LivequeryWebsocketSync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LivequeryWebsocketSync.js","sourceRoot":"","sources":["../../src/LivequeryWebsocketSync.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKpC,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CAAG,CAAA;AAAzB,sBAAsB;IADlC,UAAU,EAAE;GACA,sBAAsB,CAAG"}
@@ -1,21 +1,21 @@
1
- import { BehaviorSubject, ReplaySubject } from "rxjs";
2
- export type NodeMetadata<T = {}> = T & {
3
- host: string;
1
+ import { Observable } from "rxjs";
2
+ export type BaseNodeInfo = {
4
3
  node_id: string;
5
4
  namespace: string;
5
+ host: string;
6
6
  };
7
- export type MdnsMessage<T extends NodeMetadata> = {
7
+ export type MdnsMessage<T> = {
8
+ version: number;
8
9
  hi: boolean;
9
10
  node: T;
10
- sender_id: string;
11
11
  forwarder_id?: string;
12
12
  receiver_id?: string;
13
+ time: number;
14
+ hash: string;
13
15
  };
14
- export declare class RxjsUdp {
16
+ export declare class RxjsUdp<T extends BaseNodeInfo> extends Observable<T> {
15
17
  #private;
16
- constructor();
17
- broadcast<T extends NodeMetadata>(data: MdnsMessage<T>, ips?: string[]): Promise<void>;
18
- link<T extends NodeMetadata>(metadata$: BehaviorSubject<T> | ReplaySubject<T>): import("rxjs").Observable<import("rxjs").TruthyTypesOf<T & {
19
- host: any;
20
- }>>;
18
+ private key;
19
+ constructor(metadata: T, key: string);
20
+ broadcast(data: Omit<MdnsMessage<T>, 'hash' | 'time' | 'version'>, ips?: string[]): Promise<void>;
21
21
  }
@@ -1,16 +1,21 @@
1
1
  import { createSocket } from "dgram";
2
2
  import { networkInterfaces } from "os";
3
+ import { createHmac } from "crypto";
3
4
  import { API_GATEWAY_WHITELIST_ADDRESS, API_GATEWAY_MULTICAST_PORT, API_GATEWAY_MULTICAST_ADDRESS } from "./const.js";
4
- import { debounceTime, from, map } from "rxjs";
5
- import { firstValueFrom, fromEvent } from "rxjs";
6
- import { switchMap, mergeMap, filter } from "rxjs/operators";
5
+ import { map, Observable } from "rxjs";
6
+ import { fromEvent } from "rxjs";
7
+ import { mergeMap, filter } from "rxjs/operators";
7
8
  import { unpack, pack } from 'msgpackr';
8
- export class RxjsUdp {
9
+ export class RxjsUdp extends Observable {
10
+ key;
9
11
  #udp4 = createSocket({
10
12
  type: 'udp4',
11
13
  reuseAddr: true
12
14
  });
13
15
  #localAddress = new Set(Object.values(networkInterfaces()).flat(2).map(e => e?.address).filter(Boolean));
16
+ #computeHmac(data) {
17
+ return createHmac('sha256', this.key).update(pack(data)).digest('hex');
18
+ }
14
19
  #broadcastAddress = new Set([
15
20
  API_GATEWAY_MULTICAST_ADDRESS,
16
21
  ...(API_GATEWAY_WHITELIST_ADDRESS || '').split(',').map(e => {
@@ -24,7 +29,9 @@ export class RxjsUdp {
24
29
  return [];
25
30
  }).flat(2)
26
31
  ]);
27
- constructor() {
32
+ constructor(metadata, key) {
33
+ super();
34
+ this.key = key;
28
35
  this.#udp4.on('listening', () => {
29
36
  this.#udp4.setMulticastInterface("127.0.0.1");
30
37
  this.#udp4.addMembership(API_GATEWAY_MULTICAST_ADDRESS, "127.0.0.1");
@@ -33,33 +40,16 @@ export class RxjsUdp {
33
40
  throw e;
34
41
  });
35
42
  this.#udp4.bind(API_GATEWAY_MULTICAST_PORT, '0.0.0.0');
36
- }
37
- async broadcast(data, ips = [...this.#broadcastAddress]) {
38
- const msg = pack(data);
39
- for (const ip of ips) {
40
- this.#udp4.send(msg, 0, msg.length, API_GATEWAY_MULTICAST_PORT, ip, e => {
41
- e && console.error('UDP Broadcast error', e);
42
- });
43
- }
44
- }
45
- link(metadata$) {
46
- return from(firstValueFrom(metadata$)).pipe(debounceTime(1000), mergeMap(async (metadata) => {
47
- this.broadcast({
48
- node: metadata,
49
- hi: true,
50
- sender_id: metadata.node_id
51
- });
52
- return metadata;
53
- }), switchMap(metadata => fromEvent(this.#udp4, 'message').pipe(map(([raw, r]) => ({ raw, r, metadata })))), mergeMap(async ({ raw, r, metadata }) => {
43
+ fromEvent(this.#udp4, 'message').pipe(map(([raw, r]) => ({ raw, r }))).pipe(mergeMap(async ({ raw, r }) => {
54
44
  try {
55
45
  const msg = unpack(raw);
56
- if (msg.node.node_id == metadata.node_id)
46
+ if (msg.version != 2)
57
47
  return;
58
- if (msg.sender_id == metadata.node_id)
48
+ if (msg.time <= Date.now() - 500)
59
49
  return;
60
- if (msg.forwarder_id == metadata.node_id)
50
+ if (msg.node.node_id == metadata.node_id)
61
51
  return;
62
- if (msg.node.namespace != metadata.namespace)
52
+ if (msg.forwarder_id == metadata.node_id)
63
53
  return;
64
54
  const node = { ...msg.node, host: msg.node.host || r.address };
65
55
  const is_remote = !this.#localAddress.has(r.address);
@@ -68,21 +58,36 @@ export class RxjsUdp {
68
58
  node,
69
59
  forwarder_id: metadata.node_id
70
60
  }, [API_GATEWAY_MULTICAST_ADDRESS]);
61
+ if (msg.node.namespace != metadata.namespace)
62
+ return;
63
+ if (msg.hash !== this.#computeHmac(msg))
64
+ return;
71
65
  if (msg.receiver_id && msg.receiver_id != metadata.node_id)
72
66
  return;
73
67
  if (msg.hi) {
74
- const node = await firstValueFrom(metadata$);
75
68
  await this.broadcast({
76
- node,
69
+ node: metadata,
77
70
  hi: false,
78
- sender_id: node.node_id,
79
- receiver_id: msg.sender_id
71
+ receiver_id: msg.node.node_id
80
72
  }, [is_remote ? r.address : API_GATEWAY_MULTICAST_ADDRESS]);
81
73
  }
82
74
  return node;
83
75
  }
84
76
  catch (e) { }
85
- }), filter(Boolean));
77
+ }), filter(Boolean)).subscribe();
78
+ }
79
+ async broadcast(data, ips = [...this.#broadcastAddress]) {
80
+ const metadata = { ...data, time: Date.now(), version: 2 };
81
+ const signed = {
82
+ ...metadata,
83
+ hash: this.#computeHmac(metadata)
84
+ };
85
+ const msg = pack(signed);
86
+ for (const ip of ips) {
87
+ this.#udp4.send(msg, 0, msg.length, API_GATEWAY_MULTICAST_PORT, ip, e => {
88
+ e && console.error('UDP Broadcast error', e);
89
+ });
90
+ }
86
91
  }
87
92
  }
88
93
  //# sourceMappingURL=RxjsUdp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RxjsUdp.js","sourceRoot":"","sources":["../../src/RxjsUdp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RxjsUdp.js","sourceRoot":"","sources":["../../src/RxjsUdp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ApiGatewayHandler, type ApiGatewayOptions } from '@livequery/core';
2
+ export declare class SimpleApiGateway extends ApiGatewayHandler {
3
+ constructor(options?: ApiGatewayOptions);
4
+ }
5
+ export type { RegisterOptions } from '@livequery/core';
@@ -0,0 +1,14 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Injectable } from '@nestjs/common';
3
+ import { ApiGatewayHandler } from '@livequery/core';
4
+ let SimpleApiGateway = class SimpleApiGateway extends ApiGatewayHandler {
5
+ constructor(options = {}) {
6
+ super(options);
7
+ }
8
+ };
9
+ SimpleApiGateway = __decorate([
10
+ Injectable(),
11
+ __metadata("design:paramtypes", [Object])
12
+ ], SimpleApiGateway);
13
+ export { SimpleApiGateway };
14
+ //# sourceMappingURL=SimpleApiGateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleApiGateway.js","sourceRoot":"","sources":["../../src/SimpleApiGateway.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAA0B,MAAM,iBAAiB,CAAA;AAGpE,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,iBAAiB;IACnD,YAAY,UAA6B,EAAE;QACvC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;CACJ,CAAA;AAJY,gBAAgB;IAD5B,UAAU,EAAE;;GACA,gBAAgB,CAI5B"}
@@ -0,0 +1,35 @@
1
+ import { Observable } from 'rxjs';
2
+ export type UdpDiscoveryNode = {
3
+ node_id: string;
4
+ namespace: string;
5
+ host?: string;
6
+ };
7
+ export type UdpDiscoveryOptions = {
8
+ key: string;
9
+ port?: number;
10
+ localRelayPort?: number;
11
+ multicastAddress?: string;
12
+ peers?: string[];
13
+ announceIntervalMs?: number;
14
+ packetTtlMs?: number;
15
+ seenTtlMs?: number;
16
+ };
17
+ export type UdpDiscoveryPacket<T extends UdpDiscoveryNode> = {
18
+ version: 1;
19
+ id: string;
20
+ sender_id: string;
21
+ timestamp: number;
22
+ node: T;
23
+ signature: string;
24
+ };
25
+ export declare class UdpDiscovery<T extends UdpDiscoveryNode> {
26
+ #private;
27
+ private readonly node;
28
+ readonly nodes$: Observable<T>;
29
+ readonly errors$: Observable<unknown>;
30
+ constructor(node: T, options: UdpDiscoveryOptions);
31
+ announce(): Promise<void>;
32
+ broadcastTo(ip: string): Promise<void>;
33
+ broadcast(ips?: string[]): Promise<void>;
34
+ close(): void;
35
+ }