@push-rpc/next 2.0.12 → 2.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/client/HttpClient.d.ts +11 -0
  2. package/dist/client/HttpClient.js +84 -0
  3. package/dist/client/HttpClient.js.map +1 -0
  4. package/dist/client/RemoteSubscriptions.d.ts +18 -0
  5. package/dist/client/RemoteSubscriptions.js +120 -0
  6. package/dist/client/RemoteSubscriptions.js.map +1 -0
  7. package/dist/client/RpcClientImpl.d.ts +22 -0
  8. package/dist/client/RpcClientImpl.js +121 -0
  9. package/dist/client/RpcClientImpl.js.map +1 -0
  10. package/dist/client/WebSocketConnection.d.ts +36 -0
  11. package/dist/client/WebSocketConnection.js +161 -0
  12. package/dist/client/WebSocketConnection.js.map +1 -0
  13. package/dist/client/index.d.ts +29 -0
  14. package/dist/client/index.js +39 -0
  15. package/dist/client/index.js.map +1 -0
  16. package/dist/client/remote.d.ts +14 -0
  17. package/dist/client/remote.js +66 -0
  18. package/dist/client/remote.js.map +1 -0
  19. package/dist/index.d.ts +13 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/logger.d.ts +8 -0
  22. package/dist/logger.js +9 -0
  23. package/dist/logger.js.map +1 -0
  24. package/dist/rpc.d.ts +37 -0
  25. package/dist/rpc.js +33 -0
  26. package/dist/rpc.js.map +1 -0
  27. package/dist/server/ConnectionsServer.d.ts +13 -0
  28. package/dist/server/ConnectionsServer.js +72 -0
  29. package/dist/server/ConnectionsServer.js.map +1 -0
  30. package/dist/server/LocalSubscriptions.d.ts +12 -0
  31. package/dist/server/LocalSubscriptions.js +113 -0
  32. package/dist/server/LocalSubscriptions.js.map +1 -0
  33. package/dist/server/RpcServerImpl.d.ts +24 -0
  34. package/dist/server/RpcServerImpl.js +200 -0
  35. package/dist/server/RpcServerImpl.js.map +1 -0
  36. package/dist/server/http.d.ts +9 -0
  37. package/dist/server/http.js +89 -0
  38. package/dist/server/http.js.map +1 -0
  39. package/dist/server/index.d.ts +32 -0
  40. package/dist/server/index.js +33 -0
  41. package/dist/server/index.js.map +1 -0
  42. package/dist/server/local.d.ts +15 -0
  43. package/dist/server/local.js +46 -0
  44. package/dist/server/local.js.map +1 -0
  45. package/dist/utils/cookies.d.ts +7 -0
  46. package/dist/utils/cookies.js +31 -0
  47. package/dist/utils/cookies.js.map +1 -0
  48. package/dist/utils/env.d.ts +6 -0
  49. package/dist/utils/env.js +22 -0
  50. package/dist/utils/env.js.map +1 -0
  51. package/dist/utils/json.d.ts +2 -0
  52. package/dist/utils/json.js +34 -0
  53. package/dist/utils/json.js.map +1 -0
  54. package/dist/utils/middleware.d.ts +2 -0
  55. package/dist/utils/middleware.js +34 -0
  56. package/dist/utils/middleware.js.map +1 -0
  57. package/dist/utils/promises.d.ts +5 -0
  58. package/dist/utils/promises.js +29 -0
  59. package/dist/utils/promises.js.map +1 -0
  60. package/dist/utils/server.d.ts +5 -0
  61. package/dist/utils/server.js +48 -0
  62. package/dist/utils/server.js.map +1 -0
  63. package/dist/utils/throttle.d.ts +4 -0
  64. package/dist/utils/throttle.js +40 -0
  65. package/dist/utils/throttle.js.map +1 -0
  66. package/dist/utils/types.d.ts +1 -0
  67. package/dist/utils/types.js +3 -0
  68. package/dist/utils/types.js.map +1 -0
  69. package/package.json +1 -1
  70. package/package-lock.json +0 -1291
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.consumeServices = void 0;
4
+ const RpcClientImpl_js_1 = require("./RpcClientImpl.js");
5
+ async function consumeServices(url, overrideOptions = {}) {
6
+ if (url.endsWith("/")) {
7
+ throw new Error("URL must not end with /");
8
+ }
9
+ const options = {
10
+ ...defaultOptions,
11
+ ...overrideOptions,
12
+ };
13
+ const client = new RpcClientImpl_js_1.RpcClientImpl(url, options);
14
+ if (options.connectOnCreate) {
15
+ await client.connect();
16
+ }
17
+ return {
18
+ client,
19
+ remote: client.createRemote(),
20
+ };
21
+ }
22
+ exports.consumeServices = consumeServices;
23
+ const defaultOptions = {
24
+ callTimeout: 5 * 1000,
25
+ reconnectDelay: 0,
26
+ errorDelayMaxDuration: 15 * 1000,
27
+ pingInterval: null, // if set, should be in-sync with server, ie 30 * 1000
28
+ subscriptions: true,
29
+ middleware: [],
30
+ notificationsMiddleware: [],
31
+ connectOnCreate: false,
32
+ onConnected: () => { },
33
+ onDisconnected: () => { },
34
+ getHeaders: async () => ({}),
35
+ getSubscriptionsUrl(url) {
36
+ return url.replace(/^https(.*)/, "wss$1").replace(/^http(.*)/, "ws$1");
37
+ },
38
+ };
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;AAEA,yDAAgD;AA8BzC,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,kBAAmD,EAAE;IAKrD,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,OAAO,GAAG;QACd,GAAG,cAAc;QACjB,GAAG,eAAe;KACnB,CAAA;IAED,MAAM,MAAM,GAAG,IAAI,gCAAa,CAAI,GAAG,EAAE,OAAO,CAAC,CAAA;IAEjD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;IACxB,CAAC;IAED,OAAO;QACL,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE;KAC9B,CAAA;AACH,CAAC;AA1BD,0CA0BC;AAED,MAAM,cAAc,GAA2B;IAC7C,WAAW,EAAE,CAAC,GAAG,IAAI;IACrB,cAAc,EAAE,CAAC;IACjB,qBAAqB,EAAE,EAAE,GAAG,IAAI;IAChC,YAAY,EAAE,IAAI,EAAE,sDAAsD;IAC1E,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,EAAE;IACd,uBAAuB,EAAE,EAAE;IAC3B,eAAe,EAAE,KAAK;IACtB,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;IACrB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IACxB,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAE5B,mBAAmB,CAAC,GAAW;QAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACxE,CAAC;CACF,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { CallOptions, Consumer, RemoteFunction, Services } from "../rpc.js";
2
+ export declare function createRemote<S extends Services<S>>(hooks: RemoteHooks, name?: string): ServicesWithSubscriptions<S>;
3
+ export type RemoteHooks = {
4
+ call(itemName: string, parameters: unknown[], callOptions?: CallOptions): Promise<unknown>;
5
+ subscribe(itemName: string, parameters: unknown[], consumer: (d: unknown) => void, callOptions?: CallOptions): Promise<void>;
6
+ unsubscribe(itemName: string, parameters: unknown[], consumer: (d: unknown) => void, callOptions?: CallOptions): Promise<void>;
7
+ };
8
+ export type AddParameters<TFunction extends (...args: any) => any, TParameters extends [...args: any]> = (...args: [...Parameters<TFunction>, ...TParameters]) => ReturnType<TFunction>;
9
+ export type ServicesWithSubscriptions<T extends Services<T>> = {
10
+ [K in keyof T]: T[K] extends RemoteFunction ? AddParameters<T[K], [CallOptions?]> & {
11
+ subscribe(consumer: Consumer<T[K]>, ...parameters: [...Parameters<T[K]>, CallOptions?]): Promise<void>;
12
+ unsubscribe(consumer: Consumer<T[K]>, ...parameters: [...Parameters<T[K]>, CallOptions?]): Promise<void>;
13
+ } : T[K] extends object ? ServicesWithSubscriptions<T[K]> : never;
14
+ };
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRemote = void 0;
4
+ const rpc_js_1 = require("../rpc.js");
5
+ function createRemote(hooks, name = "") {
6
+ // start with remote function
7
+ const remoteItem = (...paramsWithCallOptions) => {
8
+ const { params, callOptions } = extractCallOptions(paramsWithCallOptions);
9
+ return hooks.call(name, params, callOptions);
10
+ };
11
+ // add subscription methods
12
+ const subscription = {
13
+ subscribe: (consumer, ...paramsWithCallOptions) => {
14
+ const { params, callOptions } = extractCallOptions(paramsWithCallOptions);
15
+ return hooks.subscribe(name, params, consumer, callOptions);
16
+ },
17
+ unsubscribe: (consumer, ...paramsWithCallOptions) => {
18
+ const { params, callOptions } = extractCallOptions(paramsWithCallOptions);
19
+ return hooks.unsubscribe(name, params, consumer, callOptions);
20
+ },
21
+ };
22
+ Object.assign(remoteItem, subscription);
23
+ // then add proxy creating subitems
24
+ const cachedItems = {};
25
+ return new Proxy(remoteItem, {
26
+ get(target, propName) {
27
+ // skip internal props
28
+ if (typeof propName != "string")
29
+ return target[propName];
30
+ // skip other system props
31
+ if (["then", "catch", "toJSON", ...skippedRemoteProps].includes(propName))
32
+ return target[propName];
33
+ // skip subscription methods
34
+ if (Object.keys(subscription).includes(propName))
35
+ return target[propName];
36
+ if (!cachedItems[propName]) {
37
+ cachedItems[propName] = createRemote(hooks, name ? name + "/" + propName : propName);
38
+ }
39
+ return cachedItems[propName];
40
+ },
41
+ set(target, propName, value) {
42
+ cachedItems[propName] = value;
43
+ return true;
44
+ },
45
+ // Used in resubscribe
46
+ ownKeys() {
47
+ return [...skippedRemoteProps, ...Object.keys(cachedItems)];
48
+ },
49
+ });
50
+ }
51
+ exports.createRemote = createRemote;
52
+ function extractCallOptions(params) {
53
+ if (params.length > 0 &&
54
+ typeof params[params.length - 1] == "object" &&
55
+ params[params.length - 1] != null &&
56
+ params[params.length - 1].kind == rpc_js_1.CallOptions.KIND) {
57
+ const options = params.pop();
58
+ return {
59
+ params,
60
+ callOptions: options,
61
+ };
62
+ }
63
+ return { params };
64
+ }
65
+ const skippedRemoteProps = ["length", "name", "prototype", "arguments", "caller"];
66
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/client/remote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type { RemoteFunction, Services, Consumer, RpcContext, RpcConnectionContext } from "./rpc.js";
2
+ export { RpcError, RpcErrors, CallOptions } from "./rpc.js";
3
+ export type { Middleware } from "./utils/middleware.js";
4
+ export { withMiddlewares } from "./utils/middleware.js";
5
+ export type { RpcServer, PublishServicesOptions } from "./server/index.js";
6
+ export type { HttpServerHooks } from "./server/http.js";
7
+ export { publishServices } from "./server/index.js";
8
+ export type { ServicesWithTriggers } from "./server/local.js";
9
+ export type { RpcClient, ConsumeServicesOptions } from "./client/index.js";
10
+ export { consumeServices } from "./client/index.js";
11
+ export type { ServicesWithSubscriptions } from "./client/remote.js";
12
+ export { log, setLogger } from "./logger.js";
13
+ export { safeStringify, safeParseJson } from "./utils/json.js";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,mCAAyD;AAAjD,kGAAA,QAAQ,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,qGAAA,WAAW,OAAA;AAGxC,uDAAqD;AAA7C,gHAAA,eAAe,OAAA;AAIvB,8CAAiD;AAAzC,2GAAA,eAAe,OAAA;AAKvB,8CAAiD;AAAzC,2GAAA,eAAe,OAAA;AAIvB,yCAA0C;AAAlC,gGAAA,GAAG,OAAA;AAAE,sGAAA,SAAS,OAAA;AACtB,2CAA4D;AAApD,wGAAA,aAAa,OAAA;AAAE,wGAAA,aAAa,OAAA"}
@@ -0,0 +1,8 @@
1
+ export interface Logger {
2
+ info(s: unknown, ...params: unknown[]): void;
3
+ error(s: unknown, ...params: unknown[]): void;
4
+ warn(s: unknown, ...params: unknown[]): void;
5
+ debug(s: unknown, ...params: unknown[]): void;
6
+ }
7
+ export declare let log: Logger;
8
+ export declare function setLogger(l: Logger): void;
package/dist/logger.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setLogger = exports.log = void 0;
4
+ exports.log = console;
5
+ function setLogger(l) {
6
+ exports.log = l;
7
+ }
8
+ exports.setLogger = setLogger;
9
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAOW,QAAA,GAAG,GAAW,OAAO,CAAA;AAEhC,SAAgB,SAAS,CAAC,CAAS;IACjC,WAAG,GAAG,CAAC,CAAA;AACT,CAAC;AAFD,8BAEC"}
package/dist/rpc.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ import { ExtractPromiseResult } from "./utils/types.js";
2
+ export type RemoteFunction = (...args: any[]) => Promise<any>;
3
+ export type Services<SubType> = {
4
+ [K in keyof SubType]: Services<SubType[K]> | RemoteFunction;
5
+ };
6
+ export type Consumer<T extends RemoteFunction> = (data: ExtractPromiseResult<ReturnType<T>>) => void;
7
+ export declare class RpcError extends Error {
8
+ readonly code: number;
9
+ constructor(code: number, message?: string);
10
+ }
11
+ export declare enum RpcErrors {
12
+ NotFound = 404,
13
+ Timeout = 504
14
+ }
15
+ export declare class CallOptions {
16
+ constructor(options: {
17
+ timeout: number;
18
+ });
19
+ readonly timeout: number;
20
+ readonly kind: string;
21
+ static KIND: string;
22
+ }
23
+ export declare const CLIENT_ID_HEADER = "x-rpc-client-id";
24
+ export type RpcConnectionContext = {
25
+ clientId: string;
26
+ };
27
+ export type RpcContext = RpcConnectionContext & {
28
+ itemName: string;
29
+ invocationType: InvocationType;
30
+ };
31
+ export declare enum InvocationType {
32
+ Call = "Call",
33
+ Subscribe = "Subscribe",
34
+ Unsubscribe = "Unsubscribe",// client only
35
+ Update = "Update",// client only
36
+ Trigger = "Trigger"
37
+ }
package/dist/rpc.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvocationType = exports.CLIENT_ID_HEADER = exports.CallOptions = exports.RpcErrors = exports.RpcError = void 0;
4
+ class RpcError extends Error {
5
+ constructor(code, message) {
6
+ super(message);
7
+ this.code = code;
8
+ }
9
+ }
10
+ exports.RpcError = RpcError;
11
+ var RpcErrors;
12
+ (function (RpcErrors) {
13
+ RpcErrors[RpcErrors["NotFound"] = 404] = "NotFound";
14
+ RpcErrors[RpcErrors["Timeout"] = 504] = "Timeout";
15
+ })(RpcErrors || (exports.RpcErrors = RpcErrors = {}));
16
+ class CallOptions {
17
+ constructor(options) {
18
+ this.kind = CallOptions.KIND; // to distinguish from other parameters in remote call
19
+ this.timeout = options.timeout;
20
+ }
21
+ }
22
+ exports.CallOptions = CallOptions;
23
+ CallOptions.KIND = "CallOptions";
24
+ exports.CLIENT_ID_HEADER = "x-rpc-client-id";
25
+ var InvocationType;
26
+ (function (InvocationType) {
27
+ InvocationType["Call"] = "Call";
28
+ InvocationType["Subscribe"] = "Subscribe";
29
+ InvocationType["Unsubscribe"] = "Unsubscribe";
30
+ InvocationType["Update"] = "Update";
31
+ InvocationType["Trigger"] = "Trigger";
32
+ })(InvocationType || (exports.InvocationType = InvocationType = {}));
33
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":";;;AASA,MAAa,QAAS,SAAQ,KAAK;IACjC,YACkB,IAAY,EAC5B,OAAgB;QAEhB,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAQ;IAI9B,CAAC;CACF;AAPD,4BAOC;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,mDAAc,CAAA;IACd,iDAAa,CAAA;AACf,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,MAAa,WAAW;IACtB,YAAY,OAA0B;QAKtB,SAAI,GAAG,WAAW,CAAC,IAAI,CAAA,CAAC,sDAAsD;QAJ5F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAChC,CAAC;;AAHH,kCASC;AADe,gBAAI,GAAG,aAAa,AAAhB,CAAgB;AAGvB,QAAA,gBAAgB,GAAG,iBAAiB,CAAA;AAWjD,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,yCAAuB,CAAA;IACvB,6CAA2B,CAAA;IAC3B,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;AACrB,CAAC,EANW,cAAc,8BAAd,cAAc,QAMzB"}
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ import http from "http";
3
+ export declare class ConnectionsServer {
4
+ constructor(server: http.Server, options: ConnectionsServerOptions, connectionClosed: (clientId: string) => void, closeSocketsWithDifferentPath: boolean);
5
+ publish(clientId: string, itemName: string, parameters: unknown[], data: unknown): void;
6
+ private wss;
7
+ private clientSockets;
8
+ close(): Promise<void>;
9
+ }
10
+ export type ConnectionsServerOptions = {
11
+ pingInterval: number;
12
+ path: string;
13
+ };
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectionsServer = void 0;
4
+ const json_js_1 = require("../utils/json.js");
5
+ const ws_1 = require("ws");
6
+ const logger_js_1 = require("../logger.js");
7
+ class ConnectionsServer {
8
+ constructor(server, options, connectionClosed, closeSocketsWithDifferentPath) {
9
+ this.clientSockets = new Map();
10
+ this.wss = new ws_1.WebSocketServer({ noServer: true });
11
+ server.on("upgrade", (request, socket, head) => {
12
+ if (request.url?.startsWith(options.path)) {
13
+ this.wss.handleUpgrade(request, socket, head, (ws) => {
14
+ this.wss.emit("connection", ws, request);
15
+ });
16
+ }
17
+ else {
18
+ if (closeSocketsWithDifferentPath) {
19
+ socket.destroy();
20
+ }
21
+ }
22
+ });
23
+ this.wss.on("connection", (ws) => {
24
+ ws.alive = true;
25
+ const clientId = ws.protocol || "anon";
26
+ this.clientSockets.set(clientId, ws);
27
+ ws.on("error", (e) => {
28
+ logger_js_1.log.error("Error in WS", e);
29
+ });
30
+ ws.on("close", () => {
31
+ this.clientSockets.delete(clientId);
32
+ connectionClosed(clientId);
33
+ });
34
+ ws.on("pong", () => {
35
+ ws.alive = true;
36
+ });
37
+ });
38
+ const pingTimer = setInterval(() => {
39
+ this.clientSockets.forEach((ws) => {
40
+ if (!ws.alive) {
41
+ // missing 2nd keep-alive period
42
+ ws.terminate();
43
+ return;
44
+ }
45
+ ws.alive = false;
46
+ ws.ping();
47
+ });
48
+ }, options.pingInterval);
49
+ this.wss.on("close", () => {
50
+ clearInterval(pingTimer);
51
+ });
52
+ }
53
+ publish(clientId, itemName, parameters, data) {
54
+ const message = [itemName, data, ...parameters];
55
+ const ws = this.clientSockets.get(clientId);
56
+ if (ws) {
57
+ ws.send((0, json_js_1.safeStringify)(message));
58
+ }
59
+ }
60
+ async close() {
61
+ return new Promise((resolve, reject) => {
62
+ this.wss.close((err) => {
63
+ if (err)
64
+ reject(err);
65
+ else
66
+ resolve();
67
+ });
68
+ });
69
+ }
70
+ }
71
+ exports.ConnectionsServer = ConnectionsServer;
72
+ //# sourceMappingURL=ConnectionsServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionsServer.js","sourceRoot":"","sources":["../../src/server/ConnectionsServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ThrottleSettings } from "./local.js";
2
+ export declare class LocalSubscriptions {
3
+ subscribe(clientId: string, itemName: string, parameters: unknown[], update: (suppliedData?: unknown) => void): void;
4
+ unsubscribe(clientId: string, itemName: string, parameters: unknown[]): void;
5
+ unsubscribeAll(clientId: string): void;
6
+ trigger(itemName: string, triggerFilter?: Record<string, unknown>, suppliedData?: unknown): void;
7
+ throttled(itemName: string, f: (d: unknown) => void): (d: unknown) => void;
8
+ throttleItem(itemName: string, settings: ThrottleSettings<unknown>): void;
9
+ private itemThrottleSettings;
10
+ private byItem;
11
+ _allSubscriptions(): [itemName: string, parameters: unknown[], consumer: unknown][];
12
+ }
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocalSubscriptions = void 0;
4
+ const json_js_1 = require("../utils/json.js");
5
+ const throttle_js_1 = require("../utils/throttle.js");
6
+ class LocalSubscriptions {
7
+ constructor() {
8
+ this.itemThrottleSettings = new Map();
9
+ this.byItem = new Map();
10
+ }
11
+ subscribe(clientId, itemName, parameters, update) {
12
+ const itemSubscriptions = this.byItem.get(itemName) || { byFilter: new Map() };
13
+ this.byItem.set(itemName, itemSubscriptions);
14
+ const filterKey = getFilterKey(parameters);
15
+ const subscriptions = itemSubscriptions.byFilter.get(filterKey) || {
16
+ filter: parameters?.[0],
17
+ subscribedClients: [],
18
+ };
19
+ itemSubscriptions.byFilter.set(filterKey, subscriptions);
20
+ if (!subscriptions.subscribedClients.some((c) => c.clientId == clientId)) {
21
+ subscriptions.subscribedClients.push({ clientId, update });
22
+ }
23
+ }
24
+ unsubscribe(clientId, itemName, parameters) {
25
+ const itemSubscriptions = this.byItem.get(itemName);
26
+ if (!itemSubscriptions)
27
+ return;
28
+ const filterKey = getFilterKey(parameters);
29
+ const subscriptions = itemSubscriptions.byFilter.get(filterKey);
30
+ if (!subscriptions)
31
+ return;
32
+ subscriptions.subscribedClients = subscriptions.subscribedClients.filter((subscription) => subscription.clientId != clientId);
33
+ if (!subscriptions.subscribedClients.length) {
34
+ itemSubscriptions.byFilter.delete(filterKey);
35
+ if (itemSubscriptions.byFilter.size == 0) {
36
+ this.byItem.delete(itemName);
37
+ }
38
+ }
39
+ }
40
+ unsubscribeAll(clientId) {
41
+ for (const [itemName, itemSubscriptions] of this.byItem.entries()) {
42
+ for (const [filterKey, subscriptions] of itemSubscriptions.byFilter.entries()) {
43
+ subscriptions.subscribedClients = subscriptions.subscribedClients.filter((subscription) => subscription.clientId != clientId);
44
+ if (!subscriptions.subscribedClients.length) {
45
+ itemSubscriptions.byFilter.delete(filterKey);
46
+ }
47
+ }
48
+ if (itemSubscriptions.byFilter.size == 0) {
49
+ this.byItem.delete(itemName);
50
+ }
51
+ }
52
+ }
53
+ trigger(itemName, triggerFilter = {}, suppliedData) {
54
+ const itemSub = this.byItem.get(itemName);
55
+ if (!itemSub)
56
+ return;
57
+ for (const { filter: subscriptionFilter, subscribedClients } of itemSub.byFilter.values()) {
58
+ if (!filterContains(triggerFilter, subscriptionFilter))
59
+ continue;
60
+ subscribedClients.forEach((subscribedClient) => {
61
+ subscribedClient.update(suppliedData);
62
+ });
63
+ }
64
+ }
65
+ throttled(itemName, f) {
66
+ const settings = this.itemThrottleSettings.get(itemName) || {
67
+ timeout: 500,
68
+ reducer: throttle_js_1.lastValueReducer,
69
+ };
70
+ if (!settings.timeout)
71
+ return f;
72
+ return (0, throttle_js_1.throttle)(f, settings.timeout, settings.reducer || throttle_js_1.lastValueReducer);
73
+ }
74
+ throttleItem(itemName, settings) {
75
+ this.itemThrottleSettings.set(itemName, settings);
76
+ }
77
+ // test-only
78
+ _allSubscriptions() {
79
+ const result = [];
80
+ for (const [itemName, itemSubscriptions] of this.byItem) {
81
+ for (const [, parameterSubscriptions] of itemSubscriptions.byFilter) {
82
+ for (const client of parameterSubscriptions.subscribedClients) {
83
+ result.push([itemName, [parameterSubscriptions.filter], client.clientId]);
84
+ }
85
+ }
86
+ }
87
+ return result;
88
+ }
89
+ }
90
+ exports.LocalSubscriptions = LocalSubscriptions;
91
+ function filterContains(triggerFilter, subscriptionFilter) {
92
+ if (subscriptionFilter == null)
93
+ return true; // subscribe to all data
94
+ if (triggerFilter == null)
95
+ return true; // all data modified
96
+ for (const key of Object.keys(subscriptionFilter)) {
97
+ if (triggerFilter[key] == undefined)
98
+ continue;
99
+ if (subscriptionFilter[key] == triggerFilter[key])
100
+ continue;
101
+ if (Array.isArray(triggerFilter[key]) && Array.isArray(subscriptionFilter[key])) {
102
+ if ((0, json_js_1.safeStringify)(triggerFilter[key]) == (0, json_js_1.safeStringify)(subscriptionFilter[key])) {
103
+ continue;
104
+ }
105
+ }
106
+ return false;
107
+ }
108
+ return true;
109
+ }
110
+ function getFilterKey(parameters) {
111
+ return (0, json_js_1.safeStringify)(parameters?.[0] ?? null);
112
+ }
113
+ //# sourceMappingURL=LocalSubscriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalSubscriptions.js","sourceRoot":"","sources":["../../src/server/LocalSubscriptions.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAC9C,sDAA+D;AAG/D,MAAa,kBAAkB;IAA/B;QA2FU,yBAAoB,GAA2C,IAAI,GAAG,EAAE,CAAA;QAExE,WAAM,GAAkC,IAAI,GAAG,EAAE,CAAA;IAgB3D,CAAC;IA5GC,SAAS,CACP,QAAgB,EAChB,QAAgB,EAChB,UAAqB,EACrB,MAAwC;QAExC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAC,CAAA;QAC5E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAA;QAE5C,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;QAE1C,MAAM,aAAa,GAAuB,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI;YACrF,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACvB,iBAAiB,EAAE,EAAE;SACtB,CAAA;QACD,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QAExD,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,CAAC;YACzE,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAE,UAAqB;QACnE,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACnD,IAAI,CAAC,iBAAiB;YAAE,OAAM;QAE9B,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;QAE1C,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC/D,IAAI,CAAC,aAAa;YAAE,OAAM;QAE1B,aAAa,CAAC,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC,MAAM,CACtE,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,IAAI,QAAQ,CACpD,CAAA;QAED,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;YAC5C,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YAE5C,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,KAAK,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAClE,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC9E,aAAa,CAAC,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC,MAAM,CACtE,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,IAAI,QAAQ,CACpD,CAAA;gBAED,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;oBAC5C,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;YAED,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,QAAgB,EAAE,gBAAyC,EAAE,EAAE,YAAsB;QAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACzC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,KAAK,MAAM,EAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACxF,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,kBAAkB,CAAC;gBAAE,SAAQ;YAEhE,iBAAiB,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,EAAE;gBAC7C,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YACvC,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,SAAS,CAAC,QAAgB,EAAE,CAAuB;QACjD,MAAM,QAAQ,GAA8B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI;YACrF,OAAO,EAAE,GAAG;YACZ,OAAO,EAAE,8BAAgB;SAC1B,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAO,CAAC,CAAA;QAE/B,OAAO,IAAA,sBAAQ,EAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,8BAAgB,CAAC,CAAA;IAC5E,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,QAAmC;QAChE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACnD,CAAC;IAMD,YAAY;IACZ,iBAAiB;QACf,MAAM,MAAM,GAAwE,EAAE,CAAA;QAEtF,KAAK,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACxD,KAAK,MAAM,CAAC,EAAE,sBAAsB,CAAC,IAAI,iBAAiB,CAAC,QAAQ,EAAE,CAAC;gBACpE,KAAK,MAAM,MAAM,IAAI,sBAAsB,CAAC,iBAAiB,EAAE,CAAC;oBAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAC3E,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AA7GD,gDA6GC;AAgBD,SAAS,cAAc,CACrB,aAAsC,EACtC,kBAA2C;IAE3C,IAAI,kBAAkB,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA,CAAC,wBAAwB;IACpE,IAAI,aAAa,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA,CAAC,oBAAoB;IAE3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAClD,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,SAAS;YAAE,SAAQ;QAC7C,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC;YAAE,SAAQ;QAE3D,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChF,IAAI,IAAA,uBAAa,EAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAA,uBAAa,EAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAChF,SAAQ;YACV,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,YAAY,CAAC,UAAqB;IACzC,OAAO,IAAA,uBAAa,EAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA;AAC/C,CAAC"}
@@ -0,0 +1,24 @@
1
+ /// <reference types="node" />
2
+ import { PublishServicesOptions, RpcServer } from "./index.js";
3
+ import http from "http";
4
+ import { RpcContext, Services } from "../rpc.js";
5
+ import { ServicesWithTriggers } from "./local.js";
6
+ export declare class RpcServerImpl<S extends Services<S>, C extends RpcContext> implements RpcServer {
7
+ private readonly services;
8
+ private readonly options;
9
+ constructor(services: S, options: PublishServicesOptions<C>);
10
+ private createConnectionsServer;
11
+ start(): Promise<void>;
12
+ close(): Promise<void>;
13
+ createServicesWithTriggers(): ServicesWithTriggers<S>;
14
+ _allSubscriptions(): [itemName: string, parameters: unknown[], consumer: unknown][];
15
+ private readonly localSubscriptions;
16
+ private readonly invocationCache;
17
+ private connectionsServer;
18
+ readonly httpServer: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>;
19
+ private call;
20
+ private subscribe;
21
+ private unsubscribe;
22
+ private getRemoteFunction;
23
+ private invokeLocalFunction;
24
+ }