@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.
@@ -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;AASxC,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;IACL,CAAC;CACJ,CAAA;AAdY,+BAA+B;IAD3C,UAAU,EAAE;qCAGsB,SAAS;GAF/B,+BAA+B,CAc3C"}
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
- filters,
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":"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"}
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: new () => LivequeryDatasource<Options, StreamPayload, InjectList>, inject_tokens?: Array<symbol | string | any>, ...observables: Observable<StreamPayload>[]) => [(options: Options) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void, import("@nestjs/common").FactoryProvider<any>];
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": "1.0.98",
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": "1.0.79",
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
- }
@@ -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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"}