@livequery/nestjs 2.0.57 → 2.0.147
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/ApiGatewayLinker.d.ts +15 -7
- package/build/src/ApiGatewayLinker.js +55 -48
- package/build/src/ApiGatewayLinker.js.map +1 -1
- package/build/src/ApiServiceLinker.d.ts +12 -0
- package/build/src/ApiServiceLinker.js +46 -0
- package/build/src/ApiServiceLinker.js.map +1 -0
- package/build/src/LivequeryDatasourceInterceptors.d.ts +8 -2
- package/build/src/LivequeryDatasourceInterceptors.js +16 -8
- package/build/src/LivequeryDatasourceInterceptors.js.map +1 -1
- package/build/src/LivequeryInterceptor.d.ts +4 -9
- package/build/src/LivequeryInterceptor.js +33 -31
- package/build/src/LivequeryInterceptor.js.map +1 -1
- package/build/src/LivequeryWebsocketSync.d.ts +1 -61
- package/build/src/LivequeryWebsocketSync.js +4 -224
- package/build/src/LivequeryWebsocketSync.js.map +1 -1
- package/build/src/RxjsUdp.d.ts +11 -11
- package/build/src/RxjsUdp.js +37 -32
- package/build/src/RxjsUdp.js.map +1 -1
- package/build/src/SimpleApiGateway.d.ts +5 -0
- package/build/src/SimpleApiGateway.js +14 -0
- package/build/src/SimpleApiGateway.js.map +1 -0
- package/build/src/UdpDiscovery.d.ts +35 -0
- package/build/src/UdpDiscovery.js +231 -0
- package/build/src/UdpDiscovery.js.map +1 -0
- package/build/src/WebsocketGateway.d.ts +29 -0
- package/build/src/WebsocketGateway.js +257 -0
- package/build/src/WebsocketGateway.js.map +1 -0
- package/build/src/const.d.ts +1 -1
- package/build/src/const.js +1 -1
- package/build/src/const.js.map +1 -1
- package/build/src/helpers/PathHelper.d.ts +1 -1
- package/build/src/helpers/createDatasourceMapper.d.ts +3 -3
- package/build/src/helpers/createDatasourceMapper.js +2 -2
- package/build/src/helpers/createDatasourceMapper.js.map +1 -1
- package/build/src/helpers/hidePrivateFields.d.ts +1 -1
- package/build/src/helpers/listPaths.d.ts +2 -2
- package/build/src/helpers/listPaths.js +30 -19
- package/build/src/helpers/listPaths.js.map +1 -1
- package/build/src/index.d.ts +6 -4
- package/build/src/index.js +5 -3
- package/build/src/index.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/build/tests/gateway.d.ts +0 -2
- package/build/tests/gateway.js +0 -17
- package/build/tests/gateway.js.map +0 -1
- package/build/tests/service.d.ts +0 -14
- package/build/tests/service.js +0 -73
- package/build/tests/service.js.map +0 -1
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { HttpAdapterHost } from '@nestjs/core';
|
|
3
|
+
import { type ServiceApiMetadata, type ServiceApiStatus, UdpDiscovery, WebsocketGateway } from '@livequery/core';
|
|
4
|
+
export type { ServiceApiMetadata, ServiceApiStatus };
|
|
5
|
+
export type ApiGatewayClientOptions = {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
controllers: any[];
|
|
9
|
+
port: number;
|
|
10
|
+
};
|
|
11
|
+
export declare class ApiGateway implements OnModuleInit, OnModuleDestroy {
|
|
12
|
+
#private;
|
|
13
|
+
constructor(lws: WebsocketGateway, discovery: UdpDiscovery<ServiceApiMetadata> | undefined, httpAdapterHost: HttpAdapterHost | undefined);
|
|
14
|
+
onModuleInit(): void;
|
|
15
|
+
onModuleDestroy(): void;
|
|
8
16
|
}
|
|
@@ -1,55 +1,62 @@
|
|
|
1
|
-
var ApiGatewayLinker_1;
|
|
2
1
|
import { __decorate, __metadata, __param } from "tslib";
|
|
3
|
-
import { Controller, Inject,
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
};
|
|
30
|
-
return metadata;
|
|
31
|
-
}));
|
|
32
|
-
const udp$ = new RxjsUdp();
|
|
33
|
-
udp$.link(metadata$).pipe(filter(node => node.role == 'gateway'), debounceTime(1000), mergeMap(async (node) => {
|
|
34
|
-
const metadata = await firstValueFrom(metadata$);
|
|
35
|
-
await udp$.broadcast({
|
|
36
|
-
hi: false,
|
|
37
|
-
node: metadata,
|
|
38
|
-
sender_id: metadata.node_id
|
|
39
|
-
});
|
|
40
|
-
})).subscribe();
|
|
2
|
+
import { Controller, Inject, Optional } from '@nestjs/common';
|
|
3
|
+
import { HttpAdapterHost } from '@nestjs/core';
|
|
4
|
+
import { ApiGatewayHandler, UdpDiscovery, WebsocketGateway } from '@livequery/core';
|
|
5
|
+
let ApiGateway = class ApiGateway {
|
|
6
|
+
#linker;
|
|
7
|
+
#lws;
|
|
8
|
+
#httpAdapterHost;
|
|
9
|
+
constructor(lws, discovery, httpAdapterHost) {
|
|
10
|
+
this.#lws = lws;
|
|
11
|
+
this.#httpAdapterHost = httpAdapterHost;
|
|
12
|
+
this.#linker = new ApiGatewayHandler({
|
|
13
|
+
ws: lws,
|
|
14
|
+
...(discovery ? { discovery } : {}),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
onModuleInit() {
|
|
18
|
+
const app = this.#httpAdapterHost?.httpAdapter?.getInstance?.();
|
|
19
|
+
if (!app)
|
|
20
|
+
return;
|
|
21
|
+
for (const method of ['get', 'post', 'patch', 'put', 'delete']) {
|
|
22
|
+
if (typeof app[method] === 'function') {
|
|
23
|
+
app[method]('*', (req, res) => {
|
|
24
|
+
void this.#proxy(req, res);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
41
28
|
}
|
|
42
|
-
|
|
43
|
-
this
|
|
29
|
+
onModuleDestroy() {
|
|
30
|
+
this.#linker.close();
|
|
31
|
+
}
|
|
32
|
+
#proxy(req, res) {
|
|
33
|
+
if (Number(req.headers['content-length'] || 0) > 0 && !req.rawBody) {
|
|
34
|
+
res.status(500);
|
|
35
|
+
return res.json({
|
|
36
|
+
error: {
|
|
37
|
+
status: 500,
|
|
38
|
+
code: 'MISSING_API_GATEWAY_RAW_BODY',
|
|
39
|
+
message: 'Please enable rawBody = true in NestFactory.create()'
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
const client_id = req.headers['x-lcid'] || req.headers['socket_id'];
|
|
44
|
+
const extraHeaders = client_id && this.#lws ? {
|
|
45
|
+
'x-lcid': client_id,
|
|
46
|
+
'x-lgid': (req.headers['x-lgid'] ?? this.#lws.id)
|
|
47
|
+
} : undefined;
|
|
48
|
+
return this.#linker.fetch(req, res, extraHeaders);
|
|
44
49
|
}
|
|
45
50
|
};
|
|
46
|
-
|
|
51
|
+
ApiGateway = __decorate([
|
|
47
52
|
Controller(),
|
|
48
|
-
Injectable(),
|
|
49
53
|
__param(0, Optional()),
|
|
50
|
-
__param(0, Inject()),
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
__param(0, Inject(WebsocketGateway)),
|
|
55
|
+
__param(1, Optional()),
|
|
56
|
+
__param(1, Inject(UdpDiscovery)),
|
|
57
|
+
__param(2, Optional()),
|
|
58
|
+
__param(2, Inject(HttpAdapterHost)),
|
|
59
|
+
__metadata("design:paramtypes", [WebsocketGateway, Object, Object])
|
|
60
|
+
], ApiGateway);
|
|
61
|
+
export { ApiGateway };
|
|
55
62
|
//# sourceMappingURL=ApiGatewayLinker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiGatewayLinker.js","sourceRoot":"","sources":["../../src/ApiGatewayLinker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ApiGatewayLinker.js","sourceRoot":"","sources":["../../src/ApiGatewayLinker.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAiC,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EAAE,iBAAiB,EAAkD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAW5H,IAAM,UAAU,GAAhB,MAAM,UAAU;IACV,OAAO,CAAmB;IAC1B,IAAI,CAAmB;IACvB,gBAAgB,CAA6B;IAEtD,YAC0C,GAAqB,EACzB,SAAuD,EACpD,eAA4C;QAEjF,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAA;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAiB,CAAC;YACjC,EAAE,EAAE,GAAG;YACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtC,CAAC,CAAA;IACN,CAAC;IAED,YAAY;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,CAAA;QAC/D,IAAI,CAAC,GAAG;YAAE,OAAM;QAEhB,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAU,EAAE,CAAC;YACtE,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;gBACpC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAuE,EAAE,GAAa,EAAE,EAAE;oBACxG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBAC9B,CAAC,CAAC,CAAA;YACN,CAAC;QACL,CAAC;IACL,CAAC;IAED,eAAe;QACX,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IAED,MAAM,CAAC,GAAuE,EAAE,GAAa;QACzF,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACf,OAAO,GAAG,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE;oBACH,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE,8BAA8B;oBACpC,OAAO,EAAE,sDAAsD;iBAClE;aACJ,CAAC,CAAA;QACN,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACnE,MAAM,YAAY,GAAG,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,QAAQ,EAAE,SAAmB;YAC7B,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAW;SAC9D,CAAC,CAAC,CAAC,SAAS,CAAA;QAEb,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAgC,EAAE,YAAY,CAAC,CAAA;IAClF,CAAC;CACJ,CAAA;AAvDY,UAAU;IADtB,UAAU,EAAE;IAOJ,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACpC,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,YAAY,CAAC,CAAA;IAChC,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,eAAe,CAAC,CAAA;qCAFO,gBAAgB;GANtD,UAAU,CAuDtB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { OnModuleDestroy } from '@nestjs/common';
|
|
2
|
+
import { ModulesContainer } from '@nestjs/core';
|
|
3
|
+
import { UdpDiscovery, type ServiceApiMetadata, WebsocketGateway } from '@livequery/core';
|
|
4
|
+
export declare class ApiServiceLinker implements OnModuleDestroy {
|
|
5
|
+
#private;
|
|
6
|
+
private static readonly instances;
|
|
7
|
+
constructor(lws: WebsocketGateway, discovery: UdpDiscovery<ServiceApiMetadata> | undefined, modulesContainer: ModulesContainer);
|
|
8
|
+
start(name: string, port: number): void;
|
|
9
|
+
close(): void;
|
|
10
|
+
onModuleDestroy(): void;
|
|
11
|
+
static broadcast(name: string, port: number): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var ApiServiceLinker_1;
|
|
2
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
3
|
+
import { Controller, Inject, Injectable, Optional } from '@nestjs/common';
|
|
4
|
+
import { ModulesContainer } from '@nestjs/core';
|
|
5
|
+
import { ApiServiceLinker as CoreApiServiceLinker, UdpDiscovery, WebsocketGateway } from '@livequery/core';
|
|
6
|
+
import { listPaths } from './helpers/listPaths.js';
|
|
7
|
+
let ApiServiceLinker = class ApiServiceLinker {
|
|
8
|
+
static { ApiServiceLinker_1 = this; }
|
|
9
|
+
static instances = new Set();
|
|
10
|
+
#linker;
|
|
11
|
+
constructor(lws, discovery, modulesContainer) {
|
|
12
|
+
const paths = [...modulesContainer.values()].flatMap(m => (listPaths([...m.controllers.keys()].map(c => c))));
|
|
13
|
+
this.#linker = new CoreApiServiceLinker({
|
|
14
|
+
paths,
|
|
15
|
+
ws: lws,
|
|
16
|
+
...(discovery ? { discovery } : {}),
|
|
17
|
+
});
|
|
18
|
+
ApiServiceLinker_1.instances.add(this);
|
|
19
|
+
}
|
|
20
|
+
start(name, port) {
|
|
21
|
+
this.#linker.start(name, port);
|
|
22
|
+
}
|
|
23
|
+
close() {
|
|
24
|
+
ApiServiceLinker_1.instances.delete(this);
|
|
25
|
+
this.#linker.close();
|
|
26
|
+
}
|
|
27
|
+
onModuleDestroy() {
|
|
28
|
+
this.close();
|
|
29
|
+
}
|
|
30
|
+
static async broadcast(name, port) {
|
|
31
|
+
for (const instance of this.instances) {
|
|
32
|
+
instance.start(name, port);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
ApiServiceLinker = ApiServiceLinker_1 = __decorate([
|
|
37
|
+
Controller(),
|
|
38
|
+
Injectable(),
|
|
39
|
+
__param(0, Optional()),
|
|
40
|
+
__param(0, Inject(WebsocketGateway)),
|
|
41
|
+
__param(1, Optional()),
|
|
42
|
+
__param(1, Inject(UdpDiscovery)),
|
|
43
|
+
__metadata("design:paramtypes", [WebsocketGateway, Object, ModulesContainer])
|
|
44
|
+
], ApiServiceLinker);
|
|
45
|
+
export { ApiServiceLinker };
|
|
46
|
+
//# sourceMappingURL=ApiServiceLinker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiServiceLinker.js","sourceRoot":"","sources":["../../src/ApiServiceLinker.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAmB,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,YAAY,EAA2B,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACnI,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAI3C,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;;IACjB,MAAM,CAAU,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAA;IAEtD,OAAO,CAAsB;IAEtC,YAC0C,GAAqB,EACzB,SAAuD,EACzF,gBAAkC;QAElC,MAAM,KAAK,GAAG,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CACtD,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC;YACpC,KAAK;YACL,EAAE,EAAE,GAAG;YACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtC,CAAC,CAAA;QACF,kBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,IAAY;QAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,KAAK;QACD,kBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IAED,eAAe;QACX,IAAI,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,IAAY;QAC7C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC9B,CAAC;IACL,CAAC;;AAtCQ,gBAAgB;IAF5B,UAAU,EAAE;IACZ,UAAU,EAAE;IAOJ,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACpC,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,YAAY,CAAC,CAAA;qCADU,gBAAgB,UAEzC,gBAAgB;GAR7B,gBAAgB,CAuC5B"}
|
|
@@ -12,7 +12,10 @@ export type LivequeryDatasource<Config, RouteOptions> = Subject<WebsocketSyncPay
|
|
|
12
12
|
method: number;
|
|
13
13
|
options: RouteOptions;
|
|
14
14
|
}>): Promise<void>;
|
|
15
|
-
query: (query: LivequeryRequest, options: RouteOptions) => Promise<
|
|
15
|
+
query: (query: LivequeryRequest, options: RouteOptions) => Promise<{
|
|
16
|
+
items: any[];
|
|
17
|
+
item: any;
|
|
18
|
+
}>;
|
|
16
19
|
};
|
|
17
20
|
export type DatatasourceRouteMetadata<RouteOptions> = {
|
|
18
21
|
datasource: Symbol;
|
|
@@ -28,5 +31,8 @@ export declare class LivequeryDatasourceInterceptors implements NestInterceptor
|
|
|
28
31
|
options: Options;
|
|
29
32
|
method: any;
|
|
30
33
|
}[];
|
|
31
|
-
intercept(ctx: ExecutionContext, next: CallHandler): Promise<import("rxjs").Observable<
|
|
34
|
+
intercept(ctx: ExecutionContext, next: CallHandler): Promise<import("rxjs").Observable<{
|
|
35
|
+
items: any[];
|
|
36
|
+
item: any;
|
|
37
|
+
}>>;
|
|
32
38
|
}
|
|
@@ -3,14 +3,20 @@ import { __decorate, __metadata } from "tslib";
|
|
|
3
3
|
import { Injectable } from '@nestjs/common';
|
|
4
4
|
import { map, mergeMap } from 'rxjs';
|
|
5
5
|
import { DiscoveryService, ModuleRef, Reflector } from '@nestjs/core';
|
|
6
|
-
import { hidePrivateFields } from '
|
|
7
|
-
import { PathHelper } from './helpers/PathHelper.js';
|
|
6
|
+
import { hidePrivateFields } from '@livequery/core';
|
|
8
7
|
export class LivequeryItemMapper {
|
|
9
8
|
mapper;
|
|
10
9
|
constructor(mapper) {
|
|
11
10
|
this.mapper = mapper;
|
|
12
11
|
}
|
|
13
12
|
}
|
|
13
|
+
function normalizeRouteRef(path) {
|
|
14
|
+
const pathname = path.split('?')[0].split('~')[0];
|
|
15
|
+
const segments = pathname.split('/').filter(Boolean);
|
|
16
|
+
const livequeryIndex = segments.indexOf('livequery');
|
|
17
|
+
const refSegments = livequeryIndex === -1 ? segments : segments.slice(livequeryIndex + 1);
|
|
18
|
+
return refSegments.map(segment => segment.startsWith(':') ? segment.slice(1) : segment).join('/');
|
|
19
|
+
}
|
|
14
20
|
let LivequeryDatasourceInterceptors = LivequeryDatasourceInterceptors_1 = class LivequeryDatasourceInterceptors {
|
|
15
21
|
reflector;
|
|
16
22
|
discovery;
|
|
@@ -23,22 +29,24 @@ let LivequeryDatasourceInterceptors = LivequeryDatasourceInterceptors_1 = class
|
|
|
23
29
|
getRoutes(token) {
|
|
24
30
|
const controllers = this.discovery.getControllers();
|
|
25
31
|
return controllers.map(controller => {
|
|
26
|
-
const
|
|
32
|
+
const metatype = controller.metatype;
|
|
33
|
+
if (!metatype)
|
|
34
|
+
return [];
|
|
35
|
+
const names = Object.getOwnPropertyNames(metatype.prototype) || [];
|
|
27
36
|
return names.map(name => {
|
|
28
|
-
const fn =
|
|
37
|
+
const fn = metatype.prototype[name];
|
|
29
38
|
const metadata = this.reflector.get(LivequeryDatasourceInterceptors_1, fn);
|
|
30
39
|
if (!metadata || (token && metadata.datasource != token))
|
|
31
40
|
return [];
|
|
32
|
-
const cpaths = [Reflect.getMetadata('path',
|
|
41
|
+
const cpaths = [Reflect.getMetadata('path', metatype)].flat(2);
|
|
33
42
|
const mpaths = [Reflect.getMetadata('path', fn)].flat(2);
|
|
34
43
|
const paths = cpaths.map(a => mpaths.map(b => {
|
|
35
44
|
const x = (a || '').trim().replace(/^\/+|\/+$/g, '');
|
|
36
45
|
const y = (b || '').trim().replace(/^\/+|\/+$/g, '');
|
|
37
46
|
const joined = (x == '' || y == '') ? `${x}${y}` : `${x}/${y}`;
|
|
38
|
-
|
|
39
|
-
return ref;
|
|
47
|
+
return normalizeRouteRef(joined);
|
|
40
48
|
})).flat(2);
|
|
41
|
-
const method = Reflect.getMetadata('method',
|
|
49
|
+
const method = Reflect.getMetadata('method', metatype.prototype[name]);
|
|
42
50
|
return paths.map(path => ({
|
|
43
51
|
path,
|
|
44
52
|
options: metadata.options,
|
|
@@ -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,QAAQ,EAAW,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"LivequeryDatasourceInterceptors.js","sourceRoot":"","sources":["../../src/LivequeryDatasourceInterceptors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { CallHandler, ExecutionContext, NestInterceptor } from "@nestjs/common";
|
|
2
|
-
import {
|
|
3
|
-
export type RealtimeSubscription = {
|
|
4
|
-
ref: string;
|
|
5
|
-
client_id: string;
|
|
6
|
-
gateway_id: string;
|
|
7
|
-
listener_node_id: string;
|
|
8
|
-
};
|
|
2
|
+
import { WebsocketGateway } from "@livequery/core";
|
|
9
3
|
export declare class LivequeryInterceptor implements NestInterceptor {
|
|
10
|
-
private
|
|
11
|
-
|
|
4
|
+
#private;
|
|
5
|
+
private WebsocketGateway?;
|
|
6
|
+
constructor(WebsocketGateway?: WebsocketGateway | undefined);
|
|
12
7
|
intercept(context: ExecutionContext, next: CallHandler): Promise<import("rxjs").Observable<any>>;
|
|
13
8
|
}
|
|
14
9
|
export declare const UseLivequeryInterceptor: () => MethodDecorator & ClassDecorator;
|
|
@@ -1,40 +1,42 @@
|
|
|
1
1
|
import { __decorate, __metadata, __param } from "tslib";
|
|
2
2
|
import { Inject, Injectable, Optional, UseInterceptors } from "@nestjs/common";
|
|
3
3
|
import { map } from "rxjs/operators";
|
|
4
|
-
import {
|
|
5
|
-
import { LivequeryWebsocketSync } from "./LivequeryWebsocketSync.js";
|
|
6
|
-
import { hidePrivateFields } from "./helpers/hidePrivateFields.js";
|
|
4
|
+
import { hidePrivateFields, LivequeryRequestParser, WebsocketGateway } from "@livequery/core";
|
|
7
5
|
let LivequeryInterceptor = class LivequeryInterceptor {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
WebsocketGateway;
|
|
7
|
+
#parser = new LivequeryRequestParser();
|
|
8
|
+
constructor(WebsocketGateway) {
|
|
9
|
+
this.WebsocketGateway = WebsocketGateway;
|
|
11
10
|
}
|
|
12
11
|
async intercept(context, next) {
|
|
13
12
|
const req = context.switchToHttp().getRequest();
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
keys: req.params,
|
|
25
|
-
body: req.body,
|
|
26
|
-
method: req.method.toLowerCase()
|
|
27
|
-
};
|
|
28
|
-
const client_id = req.headers['x-lcid'] || req.headers.socket_id;
|
|
29
|
-
const gateway_id = req.headers['x-lgid'] || this.LivequeryWebsocketSync?.id;
|
|
30
|
-
const cursor = req.query[':after'] || req.query[':before'] || req.query[':around'];
|
|
31
|
-
const e = {
|
|
32
|
-
client_id,
|
|
33
|
-
gateway_id,
|
|
34
|
-
ref: req.livequery.ref,
|
|
35
|
-
listener_node_id: this.LivequeryWebsocketSync.id
|
|
13
|
+
const ctx = {
|
|
14
|
+
request: {
|
|
15
|
+
path: req.originalUrl ?? req.url ?? req._parsedUrl?.pathname ?? '',
|
|
16
|
+
ref: req.route?.path ?? req.path ?? req.url ?? '',
|
|
17
|
+
params: req.params ?? {},
|
|
18
|
+
query: req.query ?? {},
|
|
19
|
+
body: req.body,
|
|
20
|
+
method: req.method,
|
|
21
|
+
headers: new Headers(req.headers),
|
|
22
|
+
}
|
|
36
23
|
};
|
|
37
|
-
|
|
24
|
+
this.#parser.handle(ctx);
|
|
25
|
+
const parsed = ctx.livequery;
|
|
26
|
+
if (parsed) {
|
|
27
|
+
req.livequery = {
|
|
28
|
+
...parsed,
|
|
29
|
+
schema_ref: parsed.schema_collection_ref,
|
|
30
|
+
is_collection: parsed.document_id === undefined,
|
|
31
|
+
doc_id: parsed.document_id,
|
|
32
|
+
options: parsed.query,
|
|
33
|
+
method: parsed.method.toLowerCase(),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const cursor = req.query?.[':after'] || req.query?.[':before'] || req.query?.[':around'];
|
|
37
|
+
if (parsed && req.method === 'GET' && !cursor) {
|
|
38
|
+
this.WebsocketGateway?.handle(ctx);
|
|
39
|
+
}
|
|
38
40
|
return next.handle().pipe(map(response => {
|
|
39
41
|
if (response.item) {
|
|
40
42
|
return {
|
|
@@ -49,8 +51,8 @@ let LivequeryInterceptor = class LivequeryInterceptor {
|
|
|
49
51
|
LivequeryInterceptor = __decorate([
|
|
50
52
|
Injectable(),
|
|
51
53
|
__param(0, Optional()),
|
|
52
|
-
__param(0, Inject(
|
|
53
|
-
__metadata("design:paramtypes", [
|
|
54
|
+
__param(0, Inject(WebsocketGateway)),
|
|
55
|
+
__metadata("design:paramtypes", [WebsocketGateway])
|
|
54
56
|
], LivequeryInterceptor);
|
|
55
57
|
export { LivequeryInterceptor };
|
|
56
58
|
export const UseLivequeryInterceptor = () => UseInterceptors(LivequeryInterceptor);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LivequeryInterceptor.js","sourceRoot":"","sources":["../../src/LivequeryInterceptor.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"LivequeryInterceptor.js","sourceRoot":"","sources":["../../src/LivequeryInterceptor.ts"],"names":[],"mappings":";AAAA,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,iBAAiB,EAAE,sBAAsB,EAAE,gBAAgB,EAAyB,MAAM,iBAAiB,CAAC;AAM9G,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAIqB;IAHzC,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAA;IAE/C,YACkD,gBAAmC;QAAnC,qBAAgB,GAAhB,gBAAgB,CAAmB;IAErF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAyB,EAAE,IAAiB;QAExD,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAA;QAC/C,MAAM,GAAG,GAAqB;YAC1B,OAAO,EAAE;gBACL,IAAI,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE;gBAClE,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE;gBACjD,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;gBACxB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE;gBACtB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,OAAsB,CAAmC;aACrF;SACJ,CAAA;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAExB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAA;QAC5B,IAAI,MAAM,EAAE,CAAC;YACT,GAAG,CAAC,SAAS,GAAG;gBACZ,GAAG,MAAM;gBACT,UAAU,EAAE,MAAM,CAAC,qBAAqB;gBACxC,aAAa,EAAE,MAAM,CAAC,WAAW,KAAK,SAAS;gBAC/C,MAAM,EAAE,MAAM,CAAC,WAAW;gBAC1B,OAAO,EAAE,MAAM,CAAC,KAAK;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;aACF,CAAA;QACzC,CAAC;QAGD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAA;QACxF,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5C,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACtC,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACrB,GAAG,CAAC,QAAQ,CAAC,EAAE;YACX,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO;oBACH,GAAG,QAAQ;oBACX,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;iBACzF,CAAA;YACL,CAAC;YACD,OAAO,QAAQ,CAAA;QACnB,CAAC,CAAC,CACL,CAAA;IACL,CAAC;CACJ,CAAA;AAvDY,oBAAoB;IADhC,UAAU,EAAE;IAKJ,WAAA,QAAQ,EAAE,CAAA;IAAE,WAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;qCAA4B,gBAAgB;GAJ5E,oBAAoB,CAuDhC;;AAGD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA"}
|
|
@@ -1,62 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { RealtimeSubscription } from "./LivequeryInterceptor.js";
|
|
3
|
-
import { UpdatedData, LivequeryBaseEntity } from "@livequery/types";
|
|
4
|
-
import WebSocket from 'ws';
|
|
5
|
-
export type WebSocketHelloEvent = {
|
|
6
|
-
event: 'hello';
|
|
7
|
-
gid: string;
|
|
8
|
-
};
|
|
9
|
-
export type WebSocketUnsubscribeEvent = {
|
|
10
|
-
event: 'unsubscribe';
|
|
11
|
-
data: {
|
|
12
|
-
ref?: string;
|
|
13
|
-
refs?: string;
|
|
14
|
-
client_id: string;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
export type WebSocketStartEvent = {
|
|
18
|
-
event: 'start';
|
|
19
|
-
data: {
|
|
20
|
-
id: string;
|
|
21
|
-
auth: string;
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
export type WebSocketSubscribeEvent = RealtimeSubscription & {
|
|
25
|
-
event: 'subscribe';
|
|
26
|
-
};
|
|
27
|
-
export type WebSocketSyncEvent = {
|
|
28
|
-
event: 'sync';
|
|
29
|
-
cids: string[];
|
|
30
|
-
data?: {
|
|
31
|
-
changes: UpdatedData[];
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
export type WebsocketWithMetadata = WebSocket & {
|
|
35
|
-
gateway: boolean;
|
|
36
|
-
id: string;
|
|
37
|
-
refs: Set<string>;
|
|
38
|
-
};
|
|
39
|
-
export type SubscriptionMetadata = {
|
|
40
|
-
gateway_id: string;
|
|
41
|
-
listener_node_id: string;
|
|
42
|
-
};
|
|
43
|
-
export type SubscriberMetadata = Map<Ref, Subject<'STOP'>>;
|
|
44
|
-
type Ref = string;
|
|
45
|
-
export declare const WEBSOCKET_PATH: string;
|
|
46
|
-
export declare class LivequeryWebsocketSync extends Subject<UpdatedData> {
|
|
47
|
-
#private;
|
|
48
|
-
readonly id: `${string}-${string}-${string}-${string}-${string}`;
|
|
49
|
-
readonly auth: `${string}-${string}-${string}-${string}-${string}`;
|
|
50
|
-
constructor();
|
|
51
|
-
link<T extends LivequeryBaseEntity>(ref: string, handler: (o?: Observable<UpdatedData<T>>) => Promise<Observable<UpdatedData<T>>> | Observable<UpdatedData<T>> | undefined | void): Promise<void>;
|
|
52
|
-
connect(url: string, auth: string, ondisconect?: Function): Subscription;
|
|
53
|
-
start(socket: WebsocketWithMetadata, { id, auth }: WebSocketStartEvent['data']): void;
|
|
54
|
-
unref(socket: WebsocketWithMetadata, body: {
|
|
55
|
-
ref?: string;
|
|
56
|
-
client_id?: string;
|
|
57
|
-
refs?: string[];
|
|
58
|
-
}): void;
|
|
59
|
-
private handleDisconnect;
|
|
60
|
-
listen(e: Array<RealtimeSubscription>): void;
|
|
1
|
+
export declare class LivequeryWebsocketSync {
|
|
61
2
|
}
|
|
62
|
-
export {};
|