@livequery/nestjs 2.0.21 → 2.0.22
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/build/src/ApiGateway.d.ts +6 -4
- package/build/src/ApiGateway.js +83 -41
- package/build/src/ApiGateway.js.map +1 -1
- package/build/src/ApiGatewayLinker.d.ts +2 -8
- package/build/src/ApiGatewayLinker.js +31 -48
- package/build/src/ApiGatewayLinker.js.map +1 -1
- package/build/src/GatewayLinker.d.ts +8 -0
- package/build/src/GatewayLinker.js +53 -0
- package/build/src/GatewayLinker.js.map +1 -0
- package/build/src/LivequeryInterceptor.d.ts +2 -1
- package/build/src/LivequeryInterceptor.js +9 -17
- package/build/src/LivequeryInterceptor.js.map +1 -1
- package/build/src/LivequeryWebsocketSync.d.ts +38 -22
- package/build/src/LivequeryWebsocketSync.js +114 -118
- package/build/src/LivequeryWebsocketSync.js.map +1 -1
- package/build/src/RxjsUdp.d.ts +6 -2
- package/build/src/RxjsUdp.js +9 -3
- package/build/src/RxjsUdp.js.map +1 -1
- package/build/src/const.js +1 -1
- package/build/src/const.js.map +1 -1
- package/build/src/helpers/createDatasourceMapper.d.ts +15 -10
- package/build/src/helpers/createDatasourceMapper.js +13 -14
- package/build/src/helpers/createDatasourceMapper.js.map +1 -1
- package/build/src/index.d.ts +1 -1
- package/build/src/index.js +1 -1
- package/build/src/index.js.map +1 -1
- package/build/tests/gateway.d.ts +2 -0
- package/build/tests/gateway.js +19 -0
- package/build/tests/gateway.js.map +1 -0
- package/build/tests/service.d.ts +13 -0
- package/build/tests/service.js +65 -0
- package/build/tests/service.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/package.json +7 -3
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
import { __decorate, __metadata, __param } from "tslib";
|
|
2
2
|
import { ConnectedSocket, MessageBody, SubscribeMessage, WebSocketGateway } from "@nestjs/websockets";
|
|
3
3
|
import { Subject, tap, switchMap } from "rxjs";
|
|
4
|
-
import { Optional } from "@nestjs/common";
|
|
5
|
-
import { InjectWebsocketPublicKey } from "./UseWebsocketShareKeyPair.js";
|
|
6
|
-
import JWT from 'jsonwebtoken';
|
|
7
|
-
import { Socket } from "dgram";
|
|
8
4
|
import WebSocket from 'ws';
|
|
9
|
-
import { of,
|
|
5
|
+
import { of, fromEvent, map, finalize, merge, catchError, EMPTY, filter, mergeAll } from 'rxjs';
|
|
10
6
|
import { hidePrivateFields } from "./helpers/hidePrivateFields.js";
|
|
7
|
+
import { randomUUID } from "crypto";
|
|
11
8
|
export const WEBSOCKET_PATH = process.env.REALTIME_UPDATE_SOCKET_PATH || '/livequery/realtime-updates';
|
|
12
9
|
let LivequeryWebsocketSync = class LivequeryWebsocketSync {
|
|
13
|
-
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
#connections = new Map();
|
|
11
|
+
#subscriptions = new Map();
|
|
12
|
+
id = randomUUID();
|
|
13
|
+
auth = randomUUID();
|
|
17
14
|
changes = new Subject();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.secret_or_public_key = secret_or_public_key;
|
|
15
|
+
constructor() {
|
|
16
|
+
this.changes.pipe();
|
|
21
17
|
this.changes.subscribe(({ ref, data, type }) => {
|
|
22
|
-
const
|
|
23
|
-
...this.#
|
|
24
|
-
...this.#
|
|
25
|
-
])
|
|
26
|
-
|
|
18
|
+
const targets = [
|
|
19
|
+
...this.#subscriptions.get(ref) || new Map(),
|
|
20
|
+
...this.#subscriptions.get(`${ref}/${data.id}`) || new Map()
|
|
21
|
+
].reduce((p, [client_id, gateway_id]) => {
|
|
22
|
+
const connection_id = gateway_id == this.id ? client_id : gateway_id;
|
|
23
|
+
const old = p.get(connection_id);
|
|
24
|
+
const socket = old ? old.socket : this.#connections.get(connection_id);
|
|
25
|
+
const cids = [...old ? old.cids : [], client_id];
|
|
26
|
+
p.set(connection_id, { cids, socket });
|
|
27
|
+
return p;
|
|
28
|
+
}, new Map());
|
|
29
|
+
for (const [_, { cids, socket }] of targets) {
|
|
27
30
|
const event = {
|
|
28
31
|
event: 'sync',
|
|
29
|
-
|
|
32
|
+
cids,
|
|
30
33
|
data: { changes: [{ ref, data, type }] }
|
|
31
34
|
};
|
|
32
35
|
const payload = JSON.stringify(event);
|
|
@@ -34,40 +37,41 @@ let LivequeryWebsocketSync = class LivequeryWebsocketSync {
|
|
|
34
37
|
}
|
|
35
38
|
});
|
|
36
39
|
}
|
|
37
|
-
connect(url, ondisconect) {
|
|
38
|
-
return of(0).pipe(map(() => new WebSocket(url)), switchMap(ws => {
|
|
39
|
-
return merge(fromEvent(ws, 'open').pipe(tap(() =>
|
|
40
|
+
connect(url, auth, ondisconect) {
|
|
41
|
+
return of(0).pipe(map(() => new WebSocket(url)), switchMap((ws) => {
|
|
42
|
+
return merge(fromEvent(ws, 'open').pipe(tap(() => {
|
|
43
|
+
const payload = { event: 'start', data: { id: this.id, auth } };
|
|
44
|
+
ws.send(JSON.stringify(payload));
|
|
45
|
+
})), fromEvent(ws, 'close').pipe(map(() => { throw 'CLOSED'; })), fromEvent(ws, 'error').pipe(map(e => { throw e; })), fromEvent(ws, 'message').pipe(map((event) => {
|
|
40
46
|
const data = event.data;
|
|
41
47
|
try {
|
|
42
48
|
const parsed = JSON.parse(data.toString());
|
|
43
|
-
parsed.
|
|
49
|
+
if (parsed.event == 'hello') {
|
|
50
|
+
ws.id = parsed.gid;
|
|
51
|
+
this.#connections.set(parsed.gid, ws);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (parsed.event == 'subscribe') {
|
|
55
|
+
this.listen([parsed]);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
return parsed;
|
|
44
59
|
}
|
|
45
60
|
catch (e) {
|
|
46
61
|
console.error(e);
|
|
47
62
|
}
|
|
48
|
-
}))
|
|
49
|
-
|
|
63
|
+
}), filter(Boolean), map(({ event, cids, data }) => cids.map(client_id => ({ event, data, client_id }))), mergeAll(), tap(({ client_id, ...event }) => {
|
|
64
|
+
const socket = this.#connections.get(client_id);
|
|
65
|
+
socket && socket.send(JSON.stringify(event));
|
|
66
|
+
}))).pipe(finalize(() => {
|
|
67
|
+
this.#connections.delete(ws.id);
|
|
68
|
+
}));
|
|
69
|
+
}), catchError(() => {
|
|
70
|
+
return EMPTY;
|
|
71
|
+
}), finalize(() => {
|
|
50
72
|
ondisconect?.();
|
|
51
73
|
})).subscribe();
|
|
52
74
|
}
|
|
53
|
-
handleDisconnect(socket) {
|
|
54
|
-
const sessions = this.#sockets.get(socket);
|
|
55
|
-
if (!sessions)
|
|
56
|
-
return;
|
|
57
|
-
this.#sockets.delete(socket);
|
|
58
|
-
for (const session_id of sessions) {
|
|
59
|
-
const session = this.#sessions.get(session_id);
|
|
60
|
-
if (!session)
|
|
61
|
-
continue;
|
|
62
|
-
this.#sessions.delete(session_id);
|
|
63
|
-
for (const ref of session.refs) {
|
|
64
|
-
this.#refs.get(ref)?.delete(session_id);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
handleConnection(socket) {
|
|
69
|
-
this.#sockets.set(socket, new Set());
|
|
70
|
-
}
|
|
71
75
|
broadcast(event) {
|
|
72
76
|
const id = event.old_data?.id || event.new_data?.id;
|
|
73
77
|
if (!id)
|
|
@@ -118,110 +122,102 @@ let LivequeryWebsocketSync = class LivequeryWebsocketSync {
|
|
|
118
122
|
return;
|
|
119
123
|
}
|
|
120
124
|
}
|
|
121
|
-
start(socket, { id
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
this.#sockets.get(socket)?.add(session_id);
|
|
126
|
-
this.#sessions.set(session_id, {
|
|
127
|
-
refs: new Set(),
|
|
128
|
-
socket
|
|
125
|
+
start(socket, { id, auth }) {
|
|
126
|
+
process.env.LIVEQUERY_API_GATEWAY_DEBUG && console.log({
|
|
127
|
+
new_node: id,
|
|
128
|
+
gateway: auth == this.auth
|
|
129
129
|
});
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
130
|
+
if (socket.id)
|
|
131
|
+
return;
|
|
132
|
+
if (this.#connections.has(id)) {
|
|
133
|
+
socket.close();
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
socket.id = id;
|
|
137
|
+
socket.gateway = auth == this.auth;
|
|
138
|
+
socket.refs = new Set();
|
|
139
|
+
this.#connections.set(id, socket);
|
|
140
|
+
const payload = { event: 'hello', gid: this.id };
|
|
141
|
+
socket.send(JSON.stringify(payload));
|
|
134
142
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
id: session_id
|
|
139
|
-
})));
|
|
140
|
-
this.#sockets.get(socket)?.delete(session_id);
|
|
141
|
-
const session = this.#sessions.get(session_id);
|
|
142
|
-
if (!session)
|
|
143
|
+
unsubscribe(socket, { ref, client_id = socket.id }) {
|
|
144
|
+
const subscriptions = this.#subscriptions.get(ref);
|
|
145
|
+
if (!subscriptions)
|
|
143
146
|
return;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
+
const gateway_id = subscriptions.get(client_id);
|
|
148
|
+
subscriptions.delete(client_id);
|
|
149
|
+
if (gateway_id == this.id) {
|
|
150
|
+
const socket = this.#connections.get(client_id);
|
|
151
|
+
socket.refs.delete(ref);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const gateway = this.#connections.get(gateway_id);
|
|
155
|
+
const payload = { event: 'unsubscribe', data: { ref, client_id } };
|
|
156
|
+
gateway && gateway.send(JSON.stringify(payload));
|
|
147
157
|
}
|
|
148
158
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
this.
|
|
159
|
+
handleDisconnect(socket) {
|
|
160
|
+
process.env.LIVEQUERY_API_GATEWAY_DEBUG && console.log({ disconnected: socket.id });
|
|
161
|
+
this.#connections.delete(socket.id);
|
|
162
|
+
if (socket.gateway) {
|
|
163
|
+
for (const [ref, map] of this.#subscriptions) {
|
|
164
|
+
for (const [client_id, gateway_id] of map) {
|
|
165
|
+
gateway_id == socket.id && map.delete(client_id);
|
|
166
|
+
}
|
|
167
|
+
map.size == 0 && this.#subscriptions.delete(ref);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
for (const ref of socket.refs) {
|
|
172
|
+
const subscriptions = this.#subscriptions.get(ref);
|
|
173
|
+
if (subscriptions) {
|
|
174
|
+
subscriptions.delete(ref);
|
|
175
|
+
subscriptions.size == 9 && this.#subscriptions.delete(ref);
|
|
176
|
+
}
|
|
158
177
|
}
|
|
159
178
|
}
|
|
160
179
|
}
|
|
161
|
-
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
})));
|
|
169
|
-
this.#refs.get(ref)?.delete(session_id);
|
|
170
|
-
this.#sockets.get(socket)?.delete(session_id);
|
|
171
|
-
const session = this.#sessions.get(session_id);
|
|
172
|
-
if (!session)
|
|
180
|
+
listen(e) {
|
|
181
|
+
for (const { collection_ref, doc_id, client_id, gateway_id } of e) {
|
|
182
|
+
if (client_id == gateway_id)
|
|
183
|
+
continue;
|
|
184
|
+
const ref = `${collection_ref}${doc_id ? `/${doc_id}` : ''}`;
|
|
185
|
+
const subscriptions = this.#subscriptions.get(ref) || new Map();
|
|
186
|
+
if (subscriptions.get(client_id) == gateway_id)
|
|
173
187
|
continue;
|
|
174
|
-
|
|
188
|
+
subscriptions.set(client_id, gateway_id);
|
|
189
|
+
this.#subscriptions.set(ref, subscriptions);
|
|
190
|
+
if (gateway_id == this.id) {
|
|
191
|
+
const socket = this.#connections.get(client_id);
|
|
192
|
+
socket && socket.refs.add(ref);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
const gateway = this.#connections.get(gateway_id);
|
|
196
|
+
const payload = { client_id, event: 'subscribe', gateway_id, collection_ref, doc_id };
|
|
197
|
+
gateway && gateway.send(JSON.stringify(payload));
|
|
198
|
+
}
|
|
175
199
|
}
|
|
176
200
|
}
|
|
177
|
-
listen({ collection_ref, doc_id, session_id }) {
|
|
178
|
-
const session = this.#sessions.get(session_id);
|
|
179
|
-
if (!session)
|
|
180
|
-
return;
|
|
181
|
-
const ref = `${collection_ref}${doc_id ? `/${doc_id}` : ''}`;
|
|
182
|
-
const { socket, refs } = session;
|
|
183
|
-
refs.add(ref);
|
|
184
|
-
!this.#refs.has(ref) && this.#refs.set(ref, new Map());
|
|
185
|
-
!this.#refs.get(ref).has(session_id) && this.#refs.get(ref).set(session_id, socket);
|
|
186
|
-
}
|
|
187
201
|
};
|
|
188
202
|
__decorate([
|
|
189
203
|
SubscribeMessage('start'),
|
|
190
204
|
__param(0, ConnectedSocket()),
|
|
191
205
|
__param(1, MessageBody()),
|
|
192
206
|
__metadata("design:type", Function),
|
|
193
|
-
__metadata("design:paramtypes", [
|
|
207
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
194
208
|
__metadata("design:returntype", void 0)
|
|
195
209
|
], LivequeryWebsocketSync.prototype, "start", null);
|
|
196
|
-
__decorate([
|
|
197
|
-
SubscribeMessage('stop'),
|
|
198
|
-
__param(0, ConnectedSocket()),
|
|
199
|
-
__param(1, MessageBody()),
|
|
200
|
-
__metadata("design:type", Function),
|
|
201
|
-
__metadata("design:paramtypes", [Socket, Object]),
|
|
202
|
-
__metadata("design:returntype", void 0)
|
|
203
|
-
], LivequeryWebsocketSync.prototype, "stop", null);
|
|
204
|
-
__decorate([
|
|
205
|
-
SubscribeMessage('subscribe'),
|
|
206
|
-
__param(0, ConnectedSocket()),
|
|
207
|
-
__param(1, MessageBody()),
|
|
208
|
-
__metadata("design:type", Function),
|
|
209
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
210
|
-
__metadata("design:returntype", Promise)
|
|
211
|
-
], LivequeryWebsocketSync.prototype, "subscribe", null);
|
|
212
210
|
__decorate([
|
|
213
211
|
SubscribeMessage('unsubscribe'),
|
|
214
212
|
__param(0, ConnectedSocket()),
|
|
215
213
|
__param(1, MessageBody()),
|
|
216
214
|
__metadata("design:type", Function),
|
|
217
|
-
__metadata("design:paramtypes", [
|
|
215
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
218
216
|
__metadata("design:returntype", void 0)
|
|
219
217
|
], LivequeryWebsocketSync.prototype, "unsubscribe", null);
|
|
220
218
|
LivequeryWebsocketSync = __decorate([
|
|
221
219
|
WebSocketGateway({ path: WEBSOCKET_PATH }),
|
|
222
|
-
|
|
223
|
-
__param(0, InjectWebsocketPublicKey()),
|
|
224
|
-
__metadata("design:paramtypes", [String])
|
|
220
|
+
__metadata("design:paramtypes", [])
|
|
225
221
|
], LivequeryWebsocketSync);
|
|
226
222
|
export { LivequeryWebsocketSync };
|
|
227
223
|
//# sourceMappingURL=LivequeryWebsocketSync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LivequeryWebsocketSync.js","sourceRoot":"","sources":["../../src/LivequeryWebsocketSync.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"LivequeryWebsocketSync.js","sourceRoot":"","sources":["../../src/LivequeryWebsocketSync.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAS,MAAM,MAAM,CAAC;AAItD,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AA8CpC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,6BAA6B,CAAA;AAG/F,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAE/B,YAAY,GAAG,IAAI,GAAG,EAA+C,CAAA;IACrE,cAAc,GAAG,IAAI,GAAG,EAAiC,CAAA;IAIzC,EAAE,GAAG,UAAU,EAAE,CAAA;IACjB,IAAI,GAAG,UAAU,EAAE,CAAA;IAClB,OAAO,GAAG,IAAI,OAAO,EAAe,CAAA;IAErD;QACI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACnB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;YAE3C,MAAM,OAAO,GAAG;gBACZ,GAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE;gBAC7C,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE;aAC/D,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE;gBACpC,MAAM,aAAa,GAAG,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;gBACpE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;gBAChC,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;gBACtE,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;gBAChD,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;gBACtC,OAAO,CAAC,CAAA;YACZ,CAAC,EAAE,IAAI,GAAG,EAAiD,CAAC,CAAA;YAE5D,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAuB;oBAC9B,KAAK,EAAE,MAAM;oBACb,IAAI;oBACJ,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;iBAC3C,CAAA;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;gBACrC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC;QAGL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,IAAY,EAAE,WAAsB;QACrD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CACb,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,EAC7B,SAAS,CAAC,CAAC,EAAyB,EAAE,EAAE;YACpC,OAAO,KAAK,CACR,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;gBAChC,MAAM,OAAO,GAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAA;gBACpF,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;YACpC,CAAC,CAAC,CAAC,EACH,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAA,CAAC,CAAC,CAAC,CAAC,EAC1D,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,EAClD,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,CACzB,GAAG,CAAC,CAAC,KAAuB,EAAE,EAAE;gBAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;gBACvB,IAAI,CAAC;oBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAuE,CAAA;oBAEhH,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC1B,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAA;wBAClB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;wBACrC,OAAM;oBACV,CAAC;oBACD,IAAI,MAAM,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;wBAC9B,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;wBACrB,OAAM;oBACV,CAAC;oBAED,OAAO,MAAM,CAAA;gBACjB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpB,CAAC;YACL,CAAC,CAAC,EACF,MAAM,CAAC,OAAO,CAAC,EACf,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EACnF,QAAQ,EAAE,EACV,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;gBAC/C,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;YAChD,CAAC,CAAC,CACL,CACJ,CAAC,IAAI,CACF,QAAQ,CAAC,GAAG,EAAE;gBACV,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YACnC,CAAC,CAAC,CACL,CAAA;QACL,CAAC,CAAC,EAEF,UAAU,CAAC,GAAG,EAAE;YACZ,OAAO,KAAK,CAAA;QAChB,CAAC,CAAC,EACF,QAAQ,CAAC,GAAG,EAAE;YACV,WAAW,EAAE,EAAE,CAAA;QACnB,CAAC,CAAC,CACL,CAAC,SAAS,EAAE,CAAA;IAEjB,CAAC;IAED,SAAS,CAAsD,KAA8B;QACzF,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;QACnD,IAAI,CAAC,EAAE;YAAE,OAAM;QAEf,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,iBAAiB,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;gBAClD,GAAG,EAAE,KAAK,CAAC,OAAO;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;aACnB,CAAC,CAAA;YACF,OAAM;QACV,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG;oBACZ,GAAG,MAAM;yBACJ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;yBACpB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;yBACjF,MAAM,CACH,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAC/D;oBACL,EAAE;iBACL,CAAA;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE,KAAK,CAAC,OAAO;oBAClB,IAAI,EAAE,OAAO;iBAChB,CAAC,CAAA;YACN,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,SAAS;oBACf,GAAG,EAAE,KAAK,CAAC,OAAO;oBAClB,IAAI,EAAE,EAAE,EAAE,EAAE;iBACf,CAAC,CAAA;gBAEF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,KAAK,CAAC,OAAO;oBAClB,IAAI,EAAE,iBAAiB,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;iBACpF,CAAC,CAAA;YACN,CAAC;YACD,OAAM;QACV,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,EAAE,EAAE,EAAE;gBACZ,GAAG,EAAE,KAAK,CAAC,OAAO;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;aACnB,CAAC,CAAA;YACF,OAAM;QACV,CAAC;IACL,CAAC;IAGD,KAAK,CACkB,MAA6B,EACjC,EAAE,EAAE,EAAE,IAAI,EAA+B;QAExD,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,OAAO,CAAC,GAAG,CAAC;YACnD,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI;SAC7B,CAAC,CAAA;QACF,IAAI,MAAM,CAAC,EAAE;YAAE,OAAM;QACrB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,EAAE,CAAA;YACd,OAAM;QACV,CAAC;QACD,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;QACd,MAAM,CAAC,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAA;QAClC,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACjC,MAAM,OAAO,GAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;QACrE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACxC,CAAC;IAGD,WAAW,CACY,MAA6B,EACjC,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,CAAC,EAAE,EAAuC;QAElF,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClD,IAAI,CAAC,aAAa;YAAE,OAAM;QAC1B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC/C,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAG/B,IAAI,UAAU,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC/C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;aAAM,CAAC;YACJ,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACjD,MAAM,OAAO,GAA8B,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAA;YAC7F,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;QACpD,CAAC;IAEL,CAAC;IAEO,gBAAgB,CAAC,MAA6B;QAClD,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;QACnF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC3C,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC;oBACxC,UAAU,IAAI,MAAM,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBACpD,CAAC;gBACD,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACpD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAClD,IAAI,aAAa,EAAE,CAAC;oBAChB,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;oBACzB,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC9D,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAGD,MAAM,CAAC,CAAyB;QAE5B,KAAK,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YAChE,IAAI,SAAS,IAAI,UAAU;gBAAE,SAAQ;YACrC,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;YAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAuB,CAAA;YACpF,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,UAAU;gBAAE,SAAQ;YACxD,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;YACxC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;YAE3C,IAAI,UAAU,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;gBAC/C,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAClC,CAAC;iBAAM,CAAC;gBACJ,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBACjD,MAAM,OAAO,GAA4B,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,CAAA;gBAC9G,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;YACpD,CAAC;QACL,CAAC;IACL,CAAC;CACJ,CAAA;AArFG;IADC,gBAAgB,CAAC,OAAO,CAAC;IAErB,WAAA,eAAe,EAAE,CAAA;IACjB,WAAA,WAAW,EAAE,CAAA;;;;mDAiBjB;AAGD;IADC,gBAAgB,CAAC,aAAa,CAAC;IAE3B,WAAA,eAAe,EAAE,CAAA;IACjB,WAAA,WAAW,EAAE,CAAA;;;;yDAiBjB;AAnMQ,sBAAsB;IADlC,gBAAgB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;;GAC9B,sBAAsB,CA+OlC"}
|
package/build/src/RxjsUdp.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { Observable } from "rxjs";
|
|
2
2
|
import { ServiceApiMetadata } from "./ApiGateway.js";
|
|
3
|
-
export declare class RxjsUdp extends Observable<ServiceApiMetadata
|
|
3
|
+
export declare class RxjsUdp extends Observable<ServiceApiMetadata & {
|
|
4
|
+
host: string;
|
|
5
|
+
}> {
|
|
4
6
|
#private;
|
|
7
|
+
private static isGateway;
|
|
5
8
|
readonly id: `${string}-${string}-${string}-${string}-${string}`;
|
|
6
9
|
constructor();
|
|
7
|
-
broadcast(metadata: ServiceApiMetadata): Promise<void>;
|
|
10
|
+
broadcast(metadata: ServiceApiMetadata, ip?: string): Promise<void>;
|
|
11
|
+
forService(): void;
|
|
8
12
|
}
|
package/build/src/RxjsUdp.js
CHANGED
|
@@ -4,12 +4,13 @@ import { networkInterfaces } from 'os';
|
|
|
4
4
|
import { API_GATEWAY_NAMESPACE, API_GATEWAY_UDP_ADDRESS, API_GATEWAY_UDP_PORT } from "./const.js";
|
|
5
5
|
import { randomUUID } from "crypto";
|
|
6
6
|
export class RxjsUdp extends Observable {
|
|
7
|
+
static isGateway = false;
|
|
7
8
|
id = randomUUID();
|
|
8
9
|
#udp = createSocket({
|
|
9
10
|
type: 'udp4',
|
|
10
11
|
reuseAddr: true
|
|
11
12
|
});
|
|
12
|
-
#broadcast_ips = ['localhost'
|
|
13
|
+
#broadcast_ips = ['localhost'];
|
|
13
14
|
constructor() {
|
|
14
15
|
super(o => {
|
|
15
16
|
this.#udp.bind({
|
|
@@ -40,10 +41,15 @@ export class RxjsUdp extends Observable {
|
|
|
40
41
|
}
|
|
41
42
|
});
|
|
42
43
|
}
|
|
43
|
-
async broadcast(metadata) {
|
|
44
|
-
for (const host of
|
|
44
|
+
async broadcast(metadata, ip) {
|
|
45
|
+
for (const host of [
|
|
46
|
+
...this.#broadcast_ips,
|
|
47
|
+
...ip ? [ip] : []
|
|
48
|
+
]) {
|
|
45
49
|
await this.#udp.send(JSON.stringify({ ...metadata, id: this.id }), API_GATEWAY_UDP_PORT, host);
|
|
46
50
|
}
|
|
47
51
|
}
|
|
52
|
+
forService() {
|
|
53
|
+
}
|
|
48
54
|
}
|
|
49
55
|
//# sourceMappingURL=RxjsUdp.js.map
|
package/build/src/RxjsUdp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RxjsUdp.js","sourceRoot":"","sources":["../../src/RxjsUdp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAA;AACtC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjG,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"RxjsUdp.js","sourceRoot":"","sources":["../../src/RxjsUdp.ts"],"names":[],"mappings":"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"}
|
package/build/src/const.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const LIVEQUERY_MAGIC_KEY = `${process.env.LIVEQUERY_MAGIC_KEY || 'livequery'}/`;
|
|
2
2
|
export const API_GATEWAY_NAMESPACE = process.env.API_GATEWAY_NAMESPACE || 'default';
|
|
3
3
|
export const API_GATEWAY_UDP_PORT = Number(process.env.API_GATEWAY_UDP_PORT || 13579);
|
|
4
|
-
export const API_GATEWAY_UDP_ADDRESS = process.env.API_GATEWAY_UDP_ADDRESS || '';
|
|
4
|
+
export const API_GATEWAY_UDP_ADDRESS = process.env.API_GATEWAY_UDP_ADDRESS || '0.0.0.0';
|
|
5
5
|
//# sourceMappingURL=const.js.map
|
package/build/src/const.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,WACrE,GAAG,CAAA;AAEP,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,SAAS,CAAA;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,KAAK,CAAC,CAAA;AACrF,MAAM,CAAC,MAAM,uBAAuB,GAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,WACrE,GAAG,CAAA;AAEP,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,SAAS,CAAA;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,KAAK,CAAC,CAAA;AACrF,MAAM,CAAC,MAAM,uBAAuB,GAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,SAAS,CAAA"}
|
|
@@ -3,15 +3,20 @@ import { LivequeryRequest, WebsocketSyncPayload } from "@livequery/types";
|
|
|
3
3
|
export type LivequeryDatasourceOptions<T> = Array<T & {
|
|
4
4
|
refs: string[];
|
|
5
5
|
}>;
|
|
6
|
-
export type
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export type LivequeryDatasourceProps<OptionsType = {}, RawDataChangeType = {}, InjectType = any> = {
|
|
7
|
+
routes: LivequeryDatasourceOptions<OptionsType>;
|
|
8
|
+
deps: {
|
|
9
|
+
[name: string]: InjectType;
|
|
10
|
+
};
|
|
11
|
+
rawChanges: Observable<RawDataChangeType>;
|
|
12
|
+
};
|
|
13
|
+
export type LivequeryDatasource<OptionsType = {}, RawDataChangeType = {}, InjectType = any> = {
|
|
14
|
+
init(props: LivequeryDatasourceProps<OptionsType, RawDataChangeType, InjectType>): any;
|
|
10
15
|
query(query: LivequeryRequest): any;
|
|
11
|
-
|
|
16
|
+
$: Observable<WebsocketSyncPayload>;
|
|
12
17
|
};
|
|
13
|
-
export declare const createDatasourceMapper: <
|
|
14
|
-
new (): LivequeryDatasource<
|
|
15
|
-
},
|
|
16
|
-
[
|
|
17
|
-
},
|
|
18
|
+
export declare const createDatasourceMapper: <OptionsType = {}, RawDataChangeType = {}, InjectType = any>(factory: {
|
|
19
|
+
new (): LivequeryDatasource<OptionsType, RawDataChangeType, InjectType>;
|
|
20
|
+
}, injectTokens: {
|
|
21
|
+
[name: string]: any;
|
|
22
|
+
}, rawChanges: Observable<RawDataChangeType>) => [(options: OptionsType) => <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void, import("@nestjs/common").FactoryProvider<any>];
|
|
@@ -2,28 +2,27 @@ import { applyDecorators, UseInterceptors } from "@nestjs/common";
|
|
|
2
2
|
import { LivequeryDatasourceInterceptors, $__datasource_factory_token } from "../LivequeryDatasourceInterceptors.js";
|
|
3
3
|
import { UseLivequeryInterceptor } from "../LivequeryInterceptor.js";
|
|
4
4
|
import { PathHelper } from "./PathHelper.js";
|
|
5
|
-
import { merge } from "rxjs";
|
|
6
5
|
import { LivequeryWebsocketSync } from "../LivequeryWebsocketSync.js";
|
|
7
|
-
export const createDatasourceMapper = (factory,
|
|
8
|
-
const observable = merge(...observables);
|
|
6
|
+
export const createDatasourceMapper = (factory, injectTokens, rawChanges) => {
|
|
9
7
|
const RouteConfigList = [];
|
|
10
|
-
const decorator = (options) => applyDecorators((target, method) => RouteConfigList.push({
|
|
8
|
+
const decorator = (options) => applyDecorators((target, method) => RouteConfigList.push({
|
|
9
|
+
...(options || {}),
|
|
10
|
+
refs: PathHelper.join(Reflect.getMetadata('path', target.constructor), Reflect.getMetadata('path', target[method])).map(PathHelper.trimLivequeryHotkey)
|
|
11
|
+
}), UseLivequeryInterceptor(), UseInterceptors(LivequeryDatasourceInterceptors), (_target, _method, descriptor) => {
|
|
11
12
|
Reflect.defineMetadata($__datasource_factory_token, factory, descriptor.value);
|
|
12
13
|
});
|
|
13
|
-
const getDatasourceMetadatas = () => RouteConfigList.map(config => {
|
|
14
|
-
return {
|
|
15
|
-
...(config.options || {}),
|
|
16
|
-
refs: PathHelper.join(Reflect.getMetadata('path', config.target.constructor), Reflect.getMetadata('path', config.target[config.method])).map(PathHelper.trimLivequeryHotkey)
|
|
17
|
-
};
|
|
18
|
-
});
|
|
19
14
|
const provider = {
|
|
20
15
|
provide: factory,
|
|
21
|
-
inject: [{ token: LivequeryWebsocketSync, optional: true }, ...Object.values(
|
|
16
|
+
inject: [{ token: LivequeryWebsocketSync, optional: true }, ...Object.values(injectTokens)],
|
|
22
17
|
useFactory: async (ws, ...injects) => {
|
|
18
|
+
const deps = Object.keys(injectTokens).reduce((acc, key, i) => ({ ...acc, [key]: injects[i] }), {});
|
|
23
19
|
const ds = new factory();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
await ds.init({
|
|
21
|
+
deps,
|
|
22
|
+
rawChanges,
|
|
23
|
+
routes: RouteConfigList
|
|
24
|
+
});
|
|
25
|
+
ds.$.subscribe(d => ws.broadcast(d));
|
|
27
26
|
return ds;
|
|
28
27
|
}
|
|
29
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDatasourceMapper.js","sourceRoot":"","sources":["../../../src/helpers/createDatasourceMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAY,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AACrH,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"createDatasourceMapper.js","sourceRoot":"","sources":["../../../src/helpers/createDatasourceMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAY,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AACrH,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAgBtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAClC,OAAmF,EACnF,YAAqC,EACrC,UAAyC,EAC3C,EAAE;IAGA,MAAM,eAAe,GAEhB,EAAE,CAAC;IAER,MAAM,SAAS,GAAG,CAAC,OAAoB,EAAE,EAAE,CAAC,eAAe,CACvD,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAgB;QACjC,IAAI,EAAE,UAAU,CAAC,IAAI,CACjB,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,EAC/C,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAC9C,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC;KACxC,CAAC,EACF,uBAAuB,EAAE,EACzB,eAAe,CAAC,+BAA+B,CAAC,EAChD,CAAC,OAAO,EAAE,OAAO,EAAE,UAA8B,EAAE,EAAE;QACjD,OAAO,CAAC,cAAc,CAAC,2BAA2B,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;IAClF,CAAC,CACJ,CAAA;IAED,MAAM,QAAQ,GAAa;QACvB,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC3F,UAAU,EAAE,KAAK,EAAE,EAA0B,EAAE,GAAG,OAAO,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YACnG,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAA;YACxB,MAAM,EAAE,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,UAAU;gBACV,MAAM,EAAE,eAAe;aAC1B,CAAC,CAAA;YACF,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;YACpC,OAAO,EAAE,CAAA;QACb,CAAC;KACJ,CAAA;IAGD,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAwC,CAAA;AACvE,CAAC,CAAA"}
|
package/build/src/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { ApiGatewayLinker } from './ApiGatewayLinker.js';
|
|
1
2
|
export { listPaths } from './helpers/listPaths.js';
|
|
2
3
|
export { LivequeryRequest } from './LivequeryRequest.js';
|
|
3
4
|
export { LivequeryInterceptor, RealtimeSubscription, UseLivequeryInterceptor } from './LivequeryInterceptor.js';
|
|
@@ -6,4 +7,3 @@ export { createDatasourceMapper, LivequeryDatasourceOptions, LivequeryDatasource
|
|
|
6
7
|
export { LivequeryDatasourceInterceptors, LivequeryItemMapper } from './LivequeryDatasourceInterceptors.js';
|
|
7
8
|
export { UseWebsocketPublicKey, UseWebsocketPrivateKey } from './UseWebsocketShareKeyPair.js';
|
|
8
9
|
export { ApiGateway } from './ApiGateway.js';
|
|
9
|
-
export { ApiGatewayLinker } from './ApiGatewayLinker.js';
|
package/build/src/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { ApiGatewayLinker } from './ApiGatewayLinker.js';
|
|
1
2
|
export { listPaths } from './helpers/listPaths.js';
|
|
2
3
|
export { LivequeryRequest } from './LivequeryRequest.js';
|
|
3
4
|
export { LivequeryInterceptor, UseLivequeryInterceptor } from './LivequeryInterceptor.js';
|
|
@@ -6,5 +7,4 @@ export { createDatasourceMapper } from './helpers/createDatasourceMapper.js';
|
|
|
6
7
|
export { LivequeryDatasourceInterceptors, LivequeryItemMapper } from './LivequeryDatasourceInterceptors.js';
|
|
7
8
|
export { UseWebsocketPublicKey, UseWebsocketPrivateKey } from './UseWebsocketShareKeyPair.js';
|
|
8
9
|
export { ApiGateway } from './ApiGateway.js';
|
|
9
|
-
export { ApiGatewayLinker } from './ApiGatewayLinker.js';
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/build/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAwB,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAC/G,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAmD,MAAM,qCAAqC,CAAA;AAC7H,OAAO,EAAE,+BAA+B,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC3G,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAwB,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAC/G,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAmD,MAAM,qCAAqC,CAAA;AAC7H,OAAO,EAAE,+BAA+B,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC3G,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Module } from "@nestjs/common";
|
|
3
|
+
import { ApiGateway } from "../src/ApiGateway.js";
|
|
4
|
+
import { NestFactory } from "@nestjs/core";
|
|
5
|
+
import { LivequeryWebsocketSync } from "../src/LivequeryWebsocketSync.js";
|
|
6
|
+
import { WsAdapter } from '@nestjs/platform-ws';
|
|
7
|
+
let AppModule = class AppModule {
|
|
8
|
+
};
|
|
9
|
+
AppModule = __decorate([
|
|
10
|
+
Module({
|
|
11
|
+
controllers: [ApiGateway],
|
|
12
|
+
providers: [LivequeryWebsocketSync]
|
|
13
|
+
})
|
|
14
|
+
], AppModule);
|
|
15
|
+
export { AppModule };
|
|
16
|
+
const app = await NestFactory.create(AppModule, { rawBody: true });
|
|
17
|
+
app.useWebSocketAdapter(new WsAdapter(app));
|
|
18
|
+
await app.listen(8081);
|
|
19
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../tests/gateway.ts"],"names":[],"mappings":";AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAA;AAMtC,IAAM,SAAS,GAAf,MAAM,SAAS;CAAI,CAAA;AAAb,SAAS;IAJrB,MAAM,CAAC;QACJ,WAAW,EAAE,CAAC,UAAU,CAAC;QACzB,SAAS,EAAE,CAAC,sBAAsB,CAAC;KACtC,CAAC;GACW,SAAS,CAAI;;AAG1B,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AAClE,GAAG,CAAC,mBAAmB,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;AAC3C,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LivequeryWebsocketSync } from "../src/LivequeryWebsocketSync.js";
|
|
2
|
+
export declare class PetCollection {
|
|
3
|
+
private ws;
|
|
4
|
+
constructor(ws: LivequeryWebsocketSync);
|
|
5
|
+
list(): {
|
|
6
|
+
items: {
|
|
7
|
+
id: string;
|
|
8
|
+
legnth: number;
|
|
9
|
+
}[];
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare class AppModule {
|
|
13
|
+
}
|