@livequery/nestjs 1.0.98 → 2.0.1
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/LivequeryDatasourceInterceptors.js.map +1 -1
- package/build/src/LivequeryInterceptor.js +1 -20
- package/build/src/LivequeryInterceptor.js.map +1 -1
- package/build/src/helpers/createDatasourceMapper.d.ts +3 -1
- package/package.json +4 -4
- package/build/src/ApiProxier.d.ts +0 -26
- package/build/src/ApiProxier.js +0 -130
- package/build/src/ApiProxier.js.map +0 -1
- package/build/src/LivequeryWebsocketProxy.d.ts +0 -19
- package/build/src/LivequeryWebsocketProxy.js +0 -111
- package/build/src/LivequeryWebsocketProxy.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LivequeryDatasourceInterceptors.js","sourceRoot":"","sources":["../../src/LivequeryDatasourceInterceptors.ts"],"names":[],"mappings":";AAAA,OAAO,EAAiC,UAAU,EAAmB,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"LivequeryDatasourceInterceptors.js","sourceRoot":"","sources":["../../src/LivequeryDatasourceInterceptors.ts"],"names":[],"mappings":";AAAA,OAAO,EAAiC,UAAU,EAAmB,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAKxC,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAA8D,CAAA;AAC5G,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,EAAE,CAAA;AAK5C,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;IAEpB;IAApB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAI,CAAC;IAE7C,KAAK,CAAC,SAAS,CAAC,GAAqB,EAAE,IAAiB;QAEpD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,2BAA2B,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;QAChF,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtH,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAA;QAC3C,GAAG,CAAC,kBAAkB,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACrB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAC1C,CAAA;IAEL,CAAC;CACJ,CAAA;AAfY,+BAA+B;IAD3C,UAAU,EAAE;qCAGsB,SAAS;GAF/B,+BAA+B,CAe3C"}
|
|
@@ -14,18 +14,6 @@ let LivequeryInterceptor = class LivequeryInterceptor {
|
|
|
14
14
|
}
|
|
15
15
|
async intercept(context, next) {
|
|
16
16
|
const req = context.switchToHttp().getRequest();
|
|
17
|
-
const { _limit = 20, _cursor, _order_by, _sort, _select, ...rest } = req.query;
|
|
18
|
-
const filters = Object
|
|
19
|
-
.keys(rest)
|
|
20
|
-
.map(key => {
|
|
21
|
-
const [name, expression] = key.split(':');
|
|
22
|
-
try {
|
|
23
|
-
return [name, expression || 'eq', JSON.parse(rest[key])];
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
return [name, expression || 'eq', rest[key]];
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
17
|
const { ref, is_collection, collection_ref, doc_id, } = PathHelper.parseHttpRequestPath(req._parsedUrl.pathname);
|
|
30
18
|
const { collection_ref: schema_collection_ref, ref: schema_ref } = PathHelper.parseHttpRequestPath(req.route.path);
|
|
31
19
|
req.livequery = {
|
|
@@ -35,14 +23,7 @@ let LivequeryInterceptor = class LivequeryInterceptor {
|
|
|
35
23
|
schema_collection_ref,
|
|
36
24
|
is_collection,
|
|
37
25
|
doc_id,
|
|
38
|
-
|
|
39
|
-
options: {
|
|
40
|
-
_limit: Number(_limit),
|
|
41
|
-
_cursor,
|
|
42
|
-
_order_by,
|
|
43
|
-
_sort,
|
|
44
|
-
..._select ? { _select: JSON.parse(_select) } : {}
|
|
45
|
-
},
|
|
26
|
+
options: req.query,
|
|
46
27
|
keys: req.params,
|
|
47
28
|
body: req.body,
|
|
48
29
|
method: req.method.toLowerCase()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LivequeryInterceptor.js","sourceRoot":"","sources":["../../src/LivequeryInterceptor.ts"],"names":[],"mappings":";AACA,OAAO,EAAiC,MAAM,EAAE,UAAU,EAAmB,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/H,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,GAAG,MAAM,cAAc,CAAA;AASvB,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAG2B;IACH;IAFrD,YACwD,sBAA8C,EACjD,qBAA6B;QAD1B,2BAAsB,GAAtB,sBAAsB,CAAwB;QACjD,0BAAqB,GAArB,qBAAqB,CAAQ;IAElF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAyB,EAAE,IAAiB;QAExD,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"LivequeryInterceptor.js","sourceRoot":"","sources":["../../src/LivequeryInterceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,6 @@ export type LivequeryDatasource<Options = {}, StreamPayload = {}, InjectList ext
|
|
|
8
8
|
query(query: LivequeryRequest): any;
|
|
9
9
|
enable_realtime?: (stream: Observable<StreamPayload>) => Observable<WebsocketSyncPayload>;
|
|
10
10
|
};
|
|
11
|
-
export declare const createDatasourceMapper: <Options, StreamPayload, InjectList extends any[] = undefined>(factory:
|
|
11
|
+
export declare const createDatasourceMapper: <Options, StreamPayload, InjectList extends any[] = undefined>(factory: {
|
|
12
|
+
new (): LivequeryDatasource<Options, StreamPayload, InjectList>;
|
|
13
|
+
}, inject_tokens?: Array<symbol | string | any>, ...observables: Array<Observable<StreamPayload>>) => [(options: Options) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void, import("@nestjs/common").FactoryProvider<any>];
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "git@github.com:livequery/nestjs.git"
|
|
7
7
|
},
|
|
8
|
-
"version": "
|
|
8
|
+
"version": "2.0.1",
|
|
9
9
|
"description": "Nestjs decorators for @livequery ecosystem",
|
|
10
10
|
"main": "./build/src/index.js",
|
|
11
11
|
"types": "./build/src/index.d.ts",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"type": "module",
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@livequery/types": "
|
|
25
|
+
"@livequery/types": "2.0.0",
|
|
26
26
|
"@nestjs/common": "x",
|
|
27
27
|
"@nestjs/core": "x",
|
|
28
28
|
"@types/express": "x",
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
"reflect-metadata": "x",
|
|
33
33
|
"rxjs": "x",
|
|
34
34
|
"tslib": "^2.6.1",
|
|
35
|
-
"typescript": "^5.1.6"
|
|
35
|
+
"typescript": "^5.1.6",
|
|
36
|
+
"@types/ws": "^8.5.10"
|
|
36
37
|
},
|
|
37
38
|
"scripts": {
|
|
38
39
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
@@ -41,7 +42,6 @@
|
|
|
41
42
|
},
|
|
42
43
|
"dependencies": {
|
|
43
44
|
"@nestjs/websockets": "^10.3.7",
|
|
44
|
-
"@types/ws": "^8.5.10",
|
|
45
45
|
"socket.io": "^4.7.5",
|
|
46
46
|
"socket.io-client": "^4.7.5"
|
|
47
47
|
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { Response } from 'express';
|
|
3
|
-
import { IncomingMessage } from 'http';
|
|
4
|
-
import { LivequeryWebsocketSync } from './LivequeryWebsocketSync.js';
|
|
5
|
-
export type Routing = {
|
|
6
|
-
[ref: string]: {
|
|
7
|
-
dpaths: string[];
|
|
8
|
-
children?: Routing;
|
|
9
|
-
methods?: {
|
|
10
|
-
[METHOD: string]: {
|
|
11
|
-
hosts: string[];
|
|
12
|
-
last_index: number;
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
export declare class ApiProxier {
|
|
18
|
-
#private;
|
|
19
|
-
private LivequeryWebsocketSync;
|
|
20
|
-
constructor(LivequeryWebsocketSync: LivequeryWebsocketSync);
|
|
21
|
-
join(host: string, port: number, http_paths: Array<{
|
|
22
|
-
method: string;
|
|
23
|
-
path: string;
|
|
24
|
-
}>, ws_path?: string): Promise<void>;
|
|
25
|
-
proxy(req: IncomingMessage, res: Response): Response<any, Record<string, any>>;
|
|
26
|
-
}
|
package/build/src/ApiProxier.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
-
import { Injectable, Optional, } from '@nestjs/common';
|
|
3
|
-
import * as https from 'http';
|
|
4
|
-
import { LivequeryWebsocketSync } from './LivequeryWebsocketSync.js';
|
|
5
|
-
let ApiProxier = class ApiProxier {
|
|
6
|
-
LivequeryWebsocketSync;
|
|
7
|
-
#routing = {};
|
|
8
|
-
constructor(LivequeryWebsocketSync) {
|
|
9
|
-
this.LivequeryWebsocketSync = LivequeryWebsocketSync;
|
|
10
|
-
}
|
|
11
|
-
#disconnect(host) {
|
|
12
|
-
for (let routes = [this.#routing]; routes.length > 0; routes = routes.map(c => [...Object.values(c)].map(c => c.children).filter(c => !!c)).flat(2)) {
|
|
13
|
-
for (const route of routes) {
|
|
14
|
-
for (const { methods } of Object.values(route)) {
|
|
15
|
-
for (const list of Object.values(methods)) {
|
|
16
|
-
if (list?.hosts.includes(host)) {
|
|
17
|
-
list.hosts = list?.hosts.filter(h => h != host);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
async join(host, port, http_paths, ws_path) {
|
|
25
|
-
const hostname = `${host}:${port}`;
|
|
26
|
-
ws_path && this.LivequeryWebsocketSync?.connect(`ws://${hostname}${http_paths}`);
|
|
27
|
-
for (const { method, path } of http_paths) {
|
|
28
|
-
const refs = path.split('/').map(r => {
|
|
29
|
-
if (r.includes(':')) {
|
|
30
|
-
return `${r.split(':')[0]}:`;
|
|
31
|
-
}
|
|
32
|
-
return r;
|
|
33
|
-
});
|
|
34
|
-
const merge = async (routes, refs) => {
|
|
35
|
-
if (refs.length == 0) {
|
|
36
|
-
if (!routes.methods) {
|
|
37
|
-
routes.methods = {};
|
|
38
|
-
}
|
|
39
|
-
const methods = routes.methods;
|
|
40
|
-
const METHOD = method.toUpperCase();
|
|
41
|
-
if (!methods[METHOD]) {
|
|
42
|
-
methods[METHOD] = {
|
|
43
|
-
hosts: [hostname],
|
|
44
|
-
last_index: 0
|
|
45
|
-
};
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
methods[METHOD].hosts = [...new Set([...methods[METHOD].hosts, hostname])];
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const ref = refs[0];
|
|
52
|
-
if (!routes.children[ref]) {
|
|
53
|
-
routes.children[ref] = {
|
|
54
|
-
children: {},
|
|
55
|
-
dpaths: []
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
if (ref != ':' && ref.includes(':')) {
|
|
59
|
-
const dref = ref.split(':')[0];
|
|
60
|
-
routes.children[ref].dpaths = [...new Set([...routes.children[ref].dpaths, dref])];
|
|
61
|
-
}
|
|
62
|
-
refs.length >= 0 && await merge(routes.children[ref], refs.slice(1));
|
|
63
|
-
};
|
|
64
|
-
await merge({ children: this.#routing, dpaths: [] }, refs);
|
|
65
|
-
console.log(JSON.stringify(this.#routing, null, 2));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
#match(routing, ref) {
|
|
69
|
-
const xm = routing.children[ref];
|
|
70
|
-
if (xm)
|
|
71
|
-
return xm;
|
|
72
|
-
if (routing.dpaths) {
|
|
73
|
-
const matched = routing.dpaths.find(c => ref.startsWith(c));
|
|
74
|
-
if (matched)
|
|
75
|
-
return routing.children[matched];
|
|
76
|
-
}
|
|
77
|
-
return routing.children[':'];
|
|
78
|
-
}
|
|
79
|
-
#resolve(path, method) {
|
|
80
|
-
const refs = path.split('/').slice(1);
|
|
81
|
-
console.log(`Find host for ${method}|${path}`);
|
|
82
|
-
for (let cur = refs.shift(), routes = this.#match({ dpaths: [], children: this.#routing }, cur); cur != undefined && routes; cur = refs.shift(), routes = this.#match(routes, cur)) {
|
|
83
|
-
console.log(JSON.stringify({ cur, refs, routes }, null, 2));
|
|
84
|
-
if (refs.length == 0) {
|
|
85
|
-
const metadata = routes.methods?.[method];
|
|
86
|
-
if (metadata) {
|
|
87
|
-
if (metadata.hosts.length == 0)
|
|
88
|
-
return null;
|
|
89
|
-
return metadata.hosts[metadata.last_index++ % metadata.hosts.length];
|
|
90
|
-
}
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
proxy(req, res) {
|
|
96
|
-
const target = this.#resolve(req.url, req.method.toUpperCase());
|
|
97
|
-
if (!target) {
|
|
98
|
-
return res.json({
|
|
99
|
-
error: {
|
|
100
|
-
code: target === null ? 'MICROSERVICE_OFFLINE' : 'SERVICE_NOT_FOUND'
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
const [host, port] = target.split(':');
|
|
105
|
-
const options = {
|
|
106
|
-
host,
|
|
107
|
-
port: Number(port || 80),
|
|
108
|
-
path: req.url,
|
|
109
|
-
method: req.method.toUpperCase(),
|
|
110
|
-
headers: req.headers,
|
|
111
|
-
insecureHTTPParser: true
|
|
112
|
-
};
|
|
113
|
-
req.pipe(https.request(options, (response) => {
|
|
114
|
-
response.pipe(res);
|
|
115
|
-
})
|
|
116
|
-
.on('error', e => {
|
|
117
|
-
console.error(e);
|
|
118
|
-
res.json({ error: { code: "PROXY_ERROR" } });
|
|
119
|
-
})
|
|
120
|
-
.on('upgrade', (ireq, socket, head) => {
|
|
121
|
-
}));
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
ApiProxier = __decorate([
|
|
125
|
-
Injectable(),
|
|
126
|
-
__param(0, Optional()),
|
|
127
|
-
__metadata("design:paramtypes", [LivequeryWebsocketSync])
|
|
128
|
-
], ApiProxier);
|
|
129
|
-
export { ApiProxier };
|
|
130
|
-
//# sourceMappingURL=ApiProxier.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ApiProxier.js","sourceRoot":"","sources":["../../src/ApiProxier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import WebSocket from 'ws';
|
|
2
|
-
export declare class LivequeryWebsocketProxy {
|
|
3
|
-
#private;
|
|
4
|
-
constructor();
|
|
5
|
-
connect(host: string): Promise<void>;
|
|
6
|
-
start(socket: WebSocket, { id: session_id }: {
|
|
7
|
-
id: string;
|
|
8
|
-
}): void;
|
|
9
|
-
stop(socket: WebSocket, { id: session_id }: {
|
|
10
|
-
id: string;
|
|
11
|
-
}): void;
|
|
12
|
-
subscribe({ realtime_token }: {
|
|
13
|
-
realtime_token: string;
|
|
14
|
-
}): void;
|
|
15
|
-
unsubscribe(socket: WebSocket, { ref, id }: {
|
|
16
|
-
ref: string;
|
|
17
|
-
id?: string;
|
|
18
|
-
}): void;
|
|
19
|
-
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
-
import { ConnectedSocket, MessageBody, SubscribeMessage, WebSocketGateway } from "@nestjs/websockets";
|
|
3
|
-
import WebSocket from 'ws';
|
|
4
|
-
let LivequeryWebsocketProxy = class LivequeryWebsocketProxy {
|
|
5
|
-
#sessions = new Map();
|
|
6
|
-
#sockets = new Map();
|
|
7
|
-
#targets = new Set();
|
|
8
|
-
constructor() {
|
|
9
|
-
setTimeout(() => this.connect('ws://128.199.217.97:80/livequery/realtime-updates'), 3000);
|
|
10
|
-
}
|
|
11
|
-
async connect(host) {
|
|
12
|
-
const ws = new WebSocket(host);
|
|
13
|
-
ws.on('message', data => {
|
|
14
|
-
console.log(data.toString());
|
|
15
|
-
try {
|
|
16
|
-
const parsed = JSON.parse(data.toString());
|
|
17
|
-
parsed.session_id && this.#sessions.get(parsed.session_id).socket.send(data.toString());
|
|
18
|
-
}
|
|
19
|
-
catch (e) {
|
|
20
|
-
console.error(e);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
ws.on('open', () => {
|
|
24
|
-
console.log('Connected');
|
|
25
|
-
this.#targets.add(ws);
|
|
26
|
-
});
|
|
27
|
-
ws.on('close', () => {
|
|
28
|
-
this.#targets.delete(ws);
|
|
29
|
-
});
|
|
30
|
-
ws.on('error', () => {
|
|
31
|
-
this.#targets.delete(ws);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
start(socket, { id: session_id }) {
|
|
35
|
-
if (!session_id || session_id.length > 36)
|
|
36
|
-
return;
|
|
37
|
-
this.#sockets.get(socket)?.add(session_id);
|
|
38
|
-
this.#sessions.set(session_id, {
|
|
39
|
-
refs: new Set(),
|
|
40
|
-
socket
|
|
41
|
-
});
|
|
42
|
-
[...this.#targets].forEach(s => s.send(JSON.stringify({
|
|
43
|
-
event: 'start',
|
|
44
|
-
data: { id: session_id }
|
|
45
|
-
})));
|
|
46
|
-
}
|
|
47
|
-
stop(socket, { id: session_id }) {
|
|
48
|
-
this.#sockets.get(socket)?.delete(session_id);
|
|
49
|
-
const session = this.#sessions.get(session_id);
|
|
50
|
-
if (!session)
|
|
51
|
-
return;
|
|
52
|
-
this.#sessions.delete(session_id);
|
|
53
|
-
[...this.#targets].forEach(s => s.send(JSON.stringify({
|
|
54
|
-
event: 'stop',
|
|
55
|
-
id: session_id
|
|
56
|
-
})));
|
|
57
|
-
}
|
|
58
|
-
subscribe({ realtime_token }) {
|
|
59
|
-
[...this.#targets].forEach(s => s.send(JSON.stringify({
|
|
60
|
-
event: 'subscribe',
|
|
61
|
-
realtime_token
|
|
62
|
-
})));
|
|
63
|
-
}
|
|
64
|
-
unsubscribe(socket, { ref, id }) {
|
|
65
|
-
const session_ids = id ? [id] : (this.#sockets.get(socket) || []);
|
|
66
|
-
for (const session_id of session_ids) {
|
|
67
|
-
[...this.#targets].forEach(s => s.send(JSON.stringify({
|
|
68
|
-
event: 'unsubscribe',
|
|
69
|
-
ref,
|
|
70
|
-
id: session_id
|
|
71
|
-
})));
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
__decorate([
|
|
76
|
-
SubscribeMessage('start'),
|
|
77
|
-
__param(0, ConnectedSocket()),
|
|
78
|
-
__param(1, MessageBody()),
|
|
79
|
-
__metadata("design:type", Function),
|
|
80
|
-
__metadata("design:paramtypes", [WebSocket, Object]),
|
|
81
|
-
__metadata("design:returntype", void 0)
|
|
82
|
-
], LivequeryWebsocketProxy.prototype, "start", null);
|
|
83
|
-
__decorate([
|
|
84
|
-
SubscribeMessage('stop'),
|
|
85
|
-
__param(0, ConnectedSocket()),
|
|
86
|
-
__param(1, MessageBody()),
|
|
87
|
-
__metadata("design:type", Function),
|
|
88
|
-
__metadata("design:paramtypes", [WebSocket, Object]),
|
|
89
|
-
__metadata("design:returntype", void 0)
|
|
90
|
-
], LivequeryWebsocketProxy.prototype, "stop", null);
|
|
91
|
-
__decorate([
|
|
92
|
-
SubscribeMessage('subscribe'),
|
|
93
|
-
__param(0, MessageBody()),
|
|
94
|
-
__metadata("design:type", Function),
|
|
95
|
-
__metadata("design:paramtypes", [Object]),
|
|
96
|
-
__metadata("design:returntype", void 0)
|
|
97
|
-
], LivequeryWebsocketProxy.prototype, "subscribe", null);
|
|
98
|
-
__decorate([
|
|
99
|
-
SubscribeMessage('unsubscribe'),
|
|
100
|
-
__param(0, ConnectedSocket()),
|
|
101
|
-
__param(1, MessageBody()),
|
|
102
|
-
__metadata("design:type", Function),
|
|
103
|
-
__metadata("design:paramtypes", [WebSocket, Object]),
|
|
104
|
-
__metadata("design:returntype", void 0)
|
|
105
|
-
], LivequeryWebsocketProxy.prototype, "unsubscribe", null);
|
|
106
|
-
LivequeryWebsocketProxy = __decorate([
|
|
107
|
-
WebSocketGateway({ path: process.env.REALTIME_UPDATE_SOCKET_PATH || '/livequery/realtime-updates' }),
|
|
108
|
-
__metadata("design:paramtypes", [])
|
|
109
|
-
], LivequeryWebsocketProxy);
|
|
110
|
-
export { LivequeryWebsocketProxy };
|
|
111
|
-
//# sourceMappingURL=LivequeryWebsocketProxy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LivequeryWebsocketProxy.js","sourceRoot":"","sources":["../../src/LivequeryWebsocketProxy.ts"],"names":[],"mappings":"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"}
|