@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,200 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.RpcServerImpl = void 0;
30
+ const LocalSubscriptions_js_1 = require("./LocalSubscriptions.js");
31
+ const http_1 = __importDefault(require("http"));
32
+ const promises_js_1 = require("../utils/promises.js");
33
+ const http_js_1 = require("./http.js");
34
+ const rpc_js_1 = require("../rpc.js");
35
+ const logger_js_1 = require("../logger.js");
36
+ const middleware_js_1 = require("../utils/middleware.js");
37
+ const local_js_1 = require("./local.js");
38
+ const json_js_1 = require("../utils/json.js");
39
+ class RpcServerImpl {
40
+ constructor(services, options) {
41
+ this.services = services;
42
+ this.options = options;
43
+ this.localSubscriptions = new LocalSubscriptions_js_1.LocalSubscriptions();
44
+ this.invocationCache = new promises_js_1.PromiseCache();
45
+ this.connectionsServer = null;
46
+ this.call = async (connectionContext, itemName, parameters) => {
47
+ const item = this.getRemoteFunction(itemName);
48
+ if (!item) {
49
+ throw new rpc_js_1.RpcError(rpc_js_1.RpcErrors.NotFound, `Item ${itemName} not found`);
50
+ }
51
+ try {
52
+ return await this.invokeLocalFunction(connectionContext, itemName, item, parameters, rpc_js_1.InvocationType.Call);
53
+ }
54
+ catch (e) {
55
+ logger_js_1.log.error(`Cannot call item ${itemName}.`, e);
56
+ throw e;
57
+ }
58
+ };
59
+ this.subscribe = async (connectionContext, itemName, parameters) => {
60
+ const item = this.getRemoteFunction(itemName);
61
+ if (!item) {
62
+ throw new rpc_js_1.RpcError(rpc_js_1.RpcErrors.NotFound, `Item ${itemName} not found`);
63
+ }
64
+ try {
65
+ let lastDataJson = "";
66
+ const update = this.localSubscriptions.throttled(itemName, async (suppliedData) => {
67
+ try {
68
+ const newData = suppliedData !== undefined
69
+ ? suppliedData
70
+ : await this.invokeLocalFunction(connectionContext, itemName, item, parameters, rpc_js_1.InvocationType.Trigger);
71
+ const newDataJson = (0, json_js_1.safeStringify)(newData);
72
+ if (newDataJson != lastDataJson) {
73
+ lastDataJson = newDataJson;
74
+ this.connectionsServer?.publish(connectionContext.clientId, itemName, parameters, newData);
75
+ }
76
+ }
77
+ catch (e) {
78
+ logger_js_1.log.error("Cannot get data for subscription", e);
79
+ }
80
+ });
81
+ this.localSubscriptions.subscribe(connectionContext.clientId, itemName, parameters, update);
82
+ const lastData = await this.invokeLocalFunction(connectionContext, itemName, item, parameters, rpc_js_1.InvocationType.Subscribe);
83
+ lastDataJson = (0, json_js_1.safeStringify)(lastData);
84
+ return lastData;
85
+ }
86
+ catch (e) {
87
+ this.localSubscriptions.unsubscribe(connectionContext.clientId, itemName, parameters);
88
+ logger_js_1.log.error(`Failed to subscribe ${itemName}`, e);
89
+ throw e;
90
+ }
91
+ };
92
+ this.unsubscribe = async (connectionContext, itemName, parameters) => {
93
+ try {
94
+ this.localSubscriptions.unsubscribe(connectionContext.clientId, itemName, parameters);
95
+ }
96
+ catch (e) {
97
+ logger_js_1.log.error(`Failed to unsubscribe ${itemName}`, e);
98
+ throw e;
99
+ }
100
+ };
101
+ if ("server" in this.options) {
102
+ this.httpServer = this.options.server;
103
+ }
104
+ else {
105
+ this.httpServer = http_1.default.createServer();
106
+ // for our own server, respond 404 on unhandled URLs
107
+ this.httpServer.addListener("request", (req, res) => {
108
+ if (!req.url?.startsWith(options.path)) {
109
+ res.statusCode = 404;
110
+ res.end();
111
+ return;
112
+ }
113
+ });
114
+ }
115
+ this.httpServer.addListener("request", (req, res) => {
116
+ const hooks = {
117
+ call: this.call,
118
+ subscribe: this.subscribe,
119
+ unsubscribe: this.unsubscribe,
120
+ };
121
+ (0, http_js_1.serveHttpRequest)(req, res, options.path, options.createServerHooks ? options.createServerHooks(hooks, req) : hooks, options.createConnectionContext).catch((e) => {
122
+ logger_js_1.log.warn("Unhandled error serving HTTP request", e);
123
+ });
124
+ });
125
+ }
126
+ async createConnectionsServer() {
127
+ const { ConnectionsServer } = await Promise.resolve().then(() => __importStar(require("./ConnectionsServer.js")));
128
+ return new ConnectionsServer(this.httpServer, { pingInterval: this.options.pingInterval, path: this.options.path }, (clientId) => {
129
+ this.localSubscriptions.unsubscribeAll(clientId);
130
+ }, !("server" in this.options));
131
+ }
132
+ async start() {
133
+ this.connectionsServer = this.options.subscriptions
134
+ ? await this.createConnectionsServer()
135
+ : null;
136
+ if ("server" in this.options) {
137
+ return Promise.resolve();
138
+ }
139
+ if ("port" in this.options) {
140
+ const { port } = this.options;
141
+ return new Promise((resolve, reject) => {
142
+ this.httpServer.on("error", (err) => {
143
+ reject(err);
144
+ });
145
+ this.httpServer.listen(port, this.options.host, () => {
146
+ resolve();
147
+ });
148
+ });
149
+ }
150
+ }
151
+ async close() {
152
+ await this.connectionsServer?.close();
153
+ await new Promise((resolve, reject) => {
154
+ this.httpServer.closeAllConnections();
155
+ this.httpServer.close((err) => {
156
+ if (err)
157
+ reject(err);
158
+ else
159
+ resolve(err);
160
+ });
161
+ });
162
+ }
163
+ createServicesWithTriggers() {
164
+ return (0, local_js_1.withTriggers)(this.localSubscriptions, this.services);
165
+ }
166
+ _allSubscriptions() {
167
+ return this.localSubscriptions._allSubscriptions();
168
+ }
169
+ getRemoteFunction(itemName, root = this.services) {
170
+ const parts = itemName.split("/");
171
+ let item = root;
172
+ let parent;
173
+ for (const part of parts) {
174
+ if (!item)
175
+ return undefined;
176
+ parent = item;
177
+ item = item[part];
178
+ }
179
+ if (!item)
180
+ return undefined;
181
+ return {
182
+ function: item,
183
+ container: parent,
184
+ };
185
+ }
186
+ invokeLocalFunction(connectionContext, itemName, item, parameters, invocationType) {
187
+ return this.invocationCache.invoke({ clientId: connectionContext.clientId, itemName, parameters }, () => {
188
+ const parametersCopy = (0, json_js_1.safeParseJson)((0, json_js_1.safeStringify)(parameters));
189
+ const ctx = (0, json_js_1.safeParseJson)((0, json_js_1.safeStringify)(connectionContext));
190
+ ctx.itemName = itemName;
191
+ ctx.invocationType = invocationType;
192
+ const invokeItem = (...params) => {
193
+ return item.function.call(item.container, ...params, ctx);
194
+ };
195
+ return (0, middleware_js_1.withMiddlewares)(ctx, this.options.middleware, invokeItem, ...parametersCopy);
196
+ });
197
+ }
198
+ }
199
+ exports.RpcServerImpl = RpcServerImpl;
200
+ //# sourceMappingURL=RpcServerImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RpcServerImpl.js","sourceRoot":"","sources":["../../src/server/RpcServerImpl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" />
2
+ import { IncomingMessage, ServerResponse } from "http";
3
+ import { RpcConnectionContext } from "../rpc.js";
4
+ export declare function serveHttpRequest(req: IncomingMessage, res: ServerResponse, path: string, hooks: HttpServerHooks, createConnectionContext: (req: IncomingMessage) => Promise<RpcConnectionContext>): Promise<void>;
5
+ export type HttpServerHooks = {
6
+ call(ctx: RpcConnectionContext, itemName: string, parameters: unknown[]): Promise<unknown>;
7
+ subscribe(clientId: RpcConnectionContext, itemName: string, parameters: unknown[]): Promise<unknown>;
8
+ unsubscribe(clientId: RpcConnectionContext, itemName: string, parameters: unknown[]): Promise<unknown>;
9
+ };
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serveHttpRequest = void 0;
4
+ const json_js_1 = require("../utils/json.js");
5
+ const logger_js_1 = require("../logger.js");
6
+ const server_js_1 = require("../utils/server.js");
7
+ async function serveHttpRequest(req, res, path, hooks, createConnectionContext) {
8
+ // if port is in options - response 404 on other URLs
9
+ // oherwise just handle request
10
+ if (req.url?.startsWith(path)) {
11
+ try {
12
+ const ctx = await createConnectionContext(req);
13
+ const itemName = req.url.slice(path.length + 1);
14
+ const isJson = req.headers["content-type"]?.includes("application/json") ?? false;
15
+ const textBody = await readBody(req);
16
+ let body = isJson && !!textBody ? (0, json_js_1.safeParseJson)(textBody) : [];
17
+ if (!Array.isArray(body)) {
18
+ body = [body];
19
+ }
20
+ let result;
21
+ switch (req.method) {
22
+ case "POST":
23
+ result = await hooks.call(ctx, itemName, body);
24
+ break;
25
+ case "PUT":
26
+ result = await hooks.subscribe(ctx, itemName, body);
27
+ break;
28
+ case "PATCH":
29
+ result = await hooks.unsubscribe(ctx, itemName, body);
30
+ break;
31
+ default:
32
+ res.statusCode = 404;
33
+ res.end();
34
+ return;
35
+ }
36
+ if (typeof result == "undefined") {
37
+ res.statusCode = 204;
38
+ res.end();
39
+ return;
40
+ }
41
+ if (typeof result == "string") {
42
+ res.setHeader("Content-Type", "text/plain");
43
+ res.write(result);
44
+ res.end();
45
+ return;
46
+ }
47
+ res.setHeader("Content-Type", "application/json");
48
+ res.write((0, json_js_1.safeStringify)(result));
49
+ res.end();
50
+ }
51
+ catch (e) {
52
+ if (e.code) {
53
+ res.statusCode = e.code;
54
+ res.statusMessage = e.message;
55
+ const { code, message, stack, ...rest } = e;
56
+ if (Object.keys(rest).length > 0) {
57
+ res.setHeader("Content-Type", "application/json");
58
+ res.write((0, json_js_1.safeStringify)(rest));
59
+ }
60
+ res.end();
61
+ return;
62
+ }
63
+ else {
64
+ logger_js_1.log.warn(`Error in ${req.url}.`, e);
65
+ res.statusCode = 500;
66
+ res.statusMessage = e["message"] || "Internal Server Error";
67
+ res.end();
68
+ return;
69
+ }
70
+ }
71
+ }
72
+ }
73
+ exports.serveHttpRequest = serveHttpRequest;
74
+ function readBody(req) {
75
+ const decompressed = (0, server_js_1.decompressRequest)(req);
76
+ return new Promise((resolve, reject) => {
77
+ let body = "";
78
+ decompressed.on("data", (chunk) => {
79
+ body += chunk.toString();
80
+ });
81
+ decompressed.on("end", () => {
82
+ resolve(body);
83
+ });
84
+ decompressed.on("error", (error) => {
85
+ reject(error);
86
+ });
87
+ });
88
+ }
89
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /// <reference types="node" />
2
+ import { RpcConnectionContext, RpcContext, Services } from "../rpc.js";
3
+ import { ServicesWithTriggers } from "./local.js";
4
+ import { Middleware } from "../utils/middleware.js";
5
+ import http, { IncomingMessage } from "http";
6
+ import { HttpServerHooks } from "./http";
7
+ export declare function publishServices<S extends Services<S>, C extends RpcContext>(services: S, overrideOptions: Partial<PublishServicesOptions<C>> & ({
8
+ port: number;
9
+ } | {
10
+ server: http.Server;
11
+ })): Promise<{
12
+ server: RpcServer;
13
+ services: ServicesWithTriggers<S>;
14
+ httpServer: http.Server;
15
+ }>;
16
+ export type RpcServer = {
17
+ close(): Promise<void>;
18
+ _allSubscriptions(): Array<any[]>;
19
+ };
20
+ export type PublishServicesOptions<C extends RpcContext> = {
21
+ host: string;
22
+ path: string;
23
+ middleware: Middleware<C>[];
24
+ pingInterval: number;
25
+ subscriptions: boolean;
26
+ createConnectionContext(req: IncomingMessage): Promise<RpcConnectionContext>;
27
+ createServerHooks?(hooks: HttpServerHooks, req: IncomingMessage): HttpServerHooks;
28
+ } & ({
29
+ server: http.Server;
30
+ } | {
31
+ port: number;
32
+ } | {});
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publishServices = void 0;
4
+ const rpc_js_1 = require("../rpc.js");
5
+ const RpcServerImpl_js_1 = require("./RpcServerImpl.js");
6
+ async function publishServices(services, overrideOptions) {
7
+ const options = {
8
+ ...defaultOptions,
9
+ ...overrideOptions,
10
+ };
11
+ const rpcServer = new RpcServerImpl_js_1.RpcServerImpl(services, options);
12
+ await rpcServer.start();
13
+ return {
14
+ services: rpcServer.createServicesWithTriggers(),
15
+ server: rpcServer,
16
+ httpServer: rpcServer.httpServer,
17
+ };
18
+ }
19
+ exports.publishServices = publishServices;
20
+ const defaultOptions = {
21
+ path: "",
22
+ host: "0.0.0.0",
23
+ middleware: [],
24
+ pingInterval: 30 * 1000, // should be in-sync with client
25
+ subscriptions: true,
26
+ async createConnectionContext(req) {
27
+ const header = req.headers[rpc_js_1.CLIENT_ID_HEADER];
28
+ return {
29
+ clientId: (Array.isArray(header) ? header[0] : header) || "anon",
30
+ };
31
+ },
32
+ };
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;AAAA,sCAAsF;AAGtF,yDAAgD;AAIzC,KAAK,UAAU,eAAe,CACnC,QAAW,EACX,eAA8F;IAM9F,MAAM,OAAO,GAAG;QACd,GAAG,cAAc;QACjB,GAAG,eAAe;KACnB,CAAA;IAED,MAAM,SAAS,GAAG,IAAI,gCAAa,CAAO,QAAQ,EAAE,OAAO,CAAC,CAAA;IAE5D,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IAEvB,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,0BAA0B,EAAE;QAChD,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,SAAS,CAAC,UAAU;KACjC,CAAA;AACH,CAAC;AAtBD,0CAsBC;AA0BD,MAAM,cAAc,GAAqD;IACvE,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,EAAE;IACd,YAAY,EAAE,EAAE,GAAG,IAAI,EAAE,gCAAgC;IACzD,aAAa,EAAE,IAAI;IAEnB,KAAK,CAAC,uBAAuB,CAAC,GAAoB;QAChD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,yBAAgB,CAAC,CAAA;QAE5C,OAAO;YACL,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM;SACjE,CAAA;IACH,CAAC;CACF,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { RemoteFunction, Services } from "../rpc.js";
2
+ import { LocalSubscriptions } from "./LocalSubscriptions.js";
3
+ import { ExtractPromiseResult } from "../utils/types.js";
4
+ import { ThrottleArgsReducer } from "../utils/throttle.js";
5
+ export type ThrottleSettings<D> = {
6
+ timeout: number;
7
+ reducer?: ThrottleArgsReducer<D>;
8
+ };
9
+ export declare function withTriggers<T extends Services<T>>(localSubscriptions: LocalSubscriptions, services: T, name?: string): ServicesWithTriggers<T>;
10
+ export type ServicesWithTriggers<T extends Services<T>> = {
11
+ [K in keyof T]: T[K] extends RemoteFunction ? T[K] & {
12
+ trigger(filter?: Partial<Parameters<T[K]>[0]>, suppliedData?: ExtractPromiseResult<ReturnType<T[K]>>): void;
13
+ throttle(settings: ThrottleSettings<ExtractPromiseResult<ReturnType<T[K]>>>): void;
14
+ } : T[K] extends object ? ServicesWithTriggers<T[K]> : never;
15
+ };
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withTriggers = void 0;
4
+ function withTriggers(localSubscriptions, services, name = "") {
5
+ const cachedItems = {};
6
+ const skippedProps = ["length", "name", "prototype", "arguments", "caller"];
7
+ return new Proxy(services, {
8
+ get(target, propName) {
9
+ // skip internal props
10
+ if (typeof propName != "string")
11
+ return target[propName];
12
+ // skip other system props
13
+ if (["then", "catch", "toJSON", ...skippedProps].includes(propName))
14
+ return target[propName];
15
+ const itemName = name ? name + "/" + propName : propName;
16
+ if (typeof target[propName] == "function") {
17
+ const delegate = (...params) => {
18
+ return target[propName](...params);
19
+ };
20
+ delegate.trigger = (filter = {}, suppliedData) => {
21
+ // triggers are delayed for consumers to receive updates after the current call ends.
22
+ setTimeout(() => {
23
+ localSubscriptions.trigger(itemName, filter, suppliedData);
24
+ }, 0);
25
+ };
26
+ delegate.throttle = (settings) => {
27
+ localSubscriptions.throttleItem(itemName, settings);
28
+ };
29
+ return delegate;
30
+ }
31
+ else if (!cachedItems[propName]) {
32
+ cachedItems[propName] = withTriggers(localSubscriptions, services[propName], itemName);
33
+ }
34
+ return cachedItems[propName];
35
+ },
36
+ set(target, propName, value) {
37
+ cachedItems[propName] = value;
38
+ return true;
39
+ },
40
+ ownKeys() {
41
+ return [...skippedProps, ...Object.keys(cachedItems)];
42
+ },
43
+ });
44
+ }
45
+ exports.withTriggers = withTriggers;
46
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/server/local.ts"],"names":[],"mappings":";;;AAUA,SAAgB,YAAY,CAC1B,kBAAsC,EACtC,QAAW,EACX,IAAI,GAAG,EAAE;IAET,MAAM,WAAW,GAAQ,EAAE,CAAA;IAC3B,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;IAE3E,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QACzB,GAAG,CAAC,MAAW,EAAE,QAAgB;YAC/B,sBAAsB;YACtB,IAAI,OAAO,QAAQ,IAAI,QAAQ;gBAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;YAExD,0BAA0B;YAC1B,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;YAE5F,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;YAExD,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAiB,EAAE,EAAE;oBACxC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;gBACpC,CAAC,CAAA;gBAED,QAAQ,CAAC,OAAO,GAAG,CAAC,SAAkC,EAAE,EAAE,YAAsB,EAAE,EAAE;oBAClF,qFAAqF;oBACrF,UAAU,CAAC,GAAG,EAAE;wBACd,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;oBAC5D,CAAC,EAAE,CAAC,CAAC,CAAA;gBACP,CAAC,CAAA;gBAED,QAAQ,CAAC,QAAQ,GAAG,CAAC,QAAmC,EAAE,EAAE;oBAC1D,kBAAkB,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;gBACrD,CAAC,CAAA;gBAED,OAAO,QAAQ,CAAA;YACjB,CAAC;iBAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,WAAW,CAAC,QAAQ,CAAC,GAAG,YAAY,CAClC,kBAAkB,EAClB,QAAQ,CAAC,QAAmB,CAAQ,EACpC,QAAQ,CACT,CAAA;YACH,CAAC;YAED,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAA;QAC9B,CAAC;QAED,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK;YACzB,WAAW,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;YAC7B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO;YACL,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;QACvD,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAvDD,oCAuDC"}
@@ -0,0 +1,7 @@
1
+ /** Limited Cookie support for non-browser clients */
2
+ export declare class ClientCookies {
3
+ private cookies;
4
+ updateCookies(setCookies: string[]): void;
5
+ getCookieString(): string;
6
+ }
7
+ export declare function parseCookies(str: string): Record<string, string>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseCookies = exports.ClientCookies = void 0;
4
+ /** Limited Cookie support for non-browser clients */
5
+ class ClientCookies {
6
+ constructor() {
7
+ this.cookies = {};
8
+ }
9
+ updateCookies(setCookies) {
10
+ setCookies.forEach((c) => {
11
+ const [name, value] = c.split(";")[0].split("=");
12
+ this.cookies[name] = value;
13
+ });
14
+ }
15
+ getCookieString() {
16
+ return Object.entries(this.cookies)
17
+ .map(([k, v]) => `${k}=${v}`)
18
+ .join("; ");
19
+ }
20
+ }
21
+ exports.ClientCookies = ClientCookies;
22
+ function parseCookies(str) {
23
+ const rx = /([^;=\s]*)=([^;]*)/g;
24
+ const r = {};
25
+ for (let m; (m = rx.exec(str));) {
26
+ r[m[1]] = decodeURIComponent(m[2]);
27
+ }
28
+ return r;
29
+ }
30
+ exports.parseCookies = parseCookies;
31
+ //# sourceMappingURL=cookies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/utils/cookies.ts"],"names":[],"mappings":";;;AAAA,qDAAqD;AACrD,MAAa,aAAa;IAA1B;QACU,YAAO,GAA2B,EAAE,CAAA;IAc9C,CAAC;IAZC,aAAa,CAAC,UAAoB;QAChC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,eAAe;QACb,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;CACF;AAfD,sCAeC;AAED,SAAgB,YAAY,CAAC,GAAW;IACtC,MAAM,EAAE,GAAG,qBAAqB,CAAA;IAChC,MAAM,CAAC,GAA2B,EAAE,CAAA;IAEpC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAI,CAAC;QACjC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AARD,oCAQC"}
@@ -0,0 +1,6 @@
1
+ export declare enum Environment {
2
+ Browser = 0,
3
+ Node = 1,
4
+ ReactNative = 2
5
+ }
6
+ export declare const environment: Environment;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.environment = exports.Environment = void 0;
4
+ var Environment;
5
+ (function (Environment) {
6
+ Environment[Environment["Browser"] = 0] = "Browser";
7
+ Environment[Environment["Node"] = 1] = "Node";
8
+ Environment[Environment["ReactNative"] = 2] = "ReactNative";
9
+ })(Environment || (exports.Environment = Environment = {}));
10
+ exports.environment = getEnvironment();
11
+ function getEnvironment() {
12
+ if (typeof document !== "undefined") {
13
+ return Environment.Browser;
14
+ }
15
+ else if (typeof navigator !== "undefined" && navigator.product === "ReactNative") {
16
+ return Environment.ReactNative;
17
+ }
18
+ else {
19
+ return Environment.Node;
20
+ }
21
+ }
22
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,mDAAO,CAAA;IACP,6CAAI,CAAA;IACJ,2DAAW,CAAA;AACb,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAEY,QAAA,WAAW,GAAG,cAAc,EAAE,CAAA;AAE3C,SAAS,cAAc;IACrB,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,OAAO,CAAA;IAC5B,CAAC;SAAM,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QACnF,OAAO,WAAW,CAAC,WAAW,CAAA;IAChC,CAAC;SAAM,CAAC;QACN,OAAO,WAAW,CAAC,IAAI,CAAA;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function safeStringify(value: any): string;
2
+ export declare function safeParseJson(json: string): any;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.safeParseJson = exports.safeStringify = void 0;
7
+ const fast_stringify_1 = __importDefault(require("fast-stringify"));
8
+ function safeStringify(value) {
9
+ // @ts-ignore
10
+ return (0, fast_stringify_1.default)(value);
11
+ }
12
+ exports.safeStringify = safeStringify;
13
+ function safeParseJson(json) {
14
+ return JSON.parse(json, dateReviver);
15
+ }
16
+ exports.safeParseJson = safeParseJson;
17
+ function dateReviver(key, val) {
18
+ if (typeof val == "string") {
19
+ if (ISO8601_secs.test(val)) {
20
+ return new Date(val);
21
+ }
22
+ if (ISO8601.test(val)) {
23
+ return new Date(val);
24
+ }
25
+ if (ISO8601_date.test(val)) {
26
+ return new Date(val);
27
+ }
28
+ }
29
+ return val;
30
+ }
31
+ const ISO8601 = /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ$/;
32
+ const ISO8601_secs = /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ$/;
33
+ const ISO8601_date = /^\d\d\d\d-\d\d-\d\d$/;
34
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAsC;AAEtC,SAAgB,aAAa,CAAC,KAAU;IACtC,aAAa;IACb,OAAO,IAAA,wBAAS,EAAC,KAAK,CAAC,CAAA;AACzB,CAAC;AAHD,sCAGC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;AACtC,CAAC;AAFD,sCAEC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,GAAQ;IACxC,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QAED,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,OAAO,GAAG,6CAA6C,CAAA;AAC7D,MAAM,YAAY,GAAG,sCAAsC,CAAA;AAC3D,MAAM,YAAY,GAAG,sBAAsB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export type Middleware<Context> = (ctx: Context, next: (...params: unknown[]) => Promise<unknown>, ...params: unknown[]) => Promise<unknown>;
2
+ export declare function withMiddlewares<Context>(ctx: Context, middlewares: Middleware<Context>[], final: (...params: unknown[]) => Promise<unknown>, ...params: any): Promise<unknown>;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withMiddlewares = void 0;
4
+ function withMiddlewares(ctx, middlewares, final, ...params) {
5
+ return (function (next, ...params) {
6
+ let index = -1;
7
+ return dispatch(0, ...params);
8
+ function dispatch(i, ...p) {
9
+ if (i <= index)
10
+ return Promise.reject(new Error("next() called multiple times"));
11
+ // use previous invocation params
12
+ if (!p.length) {
13
+ p = params;
14
+ }
15
+ index = i;
16
+ try {
17
+ let result;
18
+ if (i === middlewares.length) {
19
+ result = next(...p);
20
+ }
21
+ else {
22
+ const dispatchNextMiddleware = dispatch.bind(null, i + 1);
23
+ result = middlewares[i](ctx, dispatchNextMiddleware, ...p);
24
+ }
25
+ return Promise.resolve(result);
26
+ }
27
+ catch (err) {
28
+ return Promise.reject(err);
29
+ }
30
+ }
31
+ })(final, ...params);
32
+ }
33
+ exports.withMiddlewares = withMiddlewares;
34
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/utils/middleware.ts"],"names":[],"mappings":";;;AAMA,SAAgB,eAAe,CAC7B,GAAY,EACZ,WAAkC,EAClC,KAAiD,EACjD,GAAG,MAAW;IAEd,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG,MAAM;QAC/B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;QACd,OAAO,QAAQ,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAA;QAE7B,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAG,CAAY;YAC1C,IAAI,CAAC,IAAI,KAAK;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAA;YAEhF,iCAAiC;YACjC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACd,CAAC,GAAG,MAAM,CAAA;YACZ,CAAC;YAED,KAAK,GAAG,CAAC,CAAA;YAET,IAAI,CAAC;gBACH,IAAI,MAAM,CAAA;gBAEV,IAAI,CAAC,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;oBAC7B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;gBACrB,CAAC;qBAAM,CAAC;oBACN,MAAM,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;oBACzD,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,sBAAsB,EAAE,GAAG,CAAC,CAAC,CAAA;gBAC5D,CAAC;gBAED,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAA;AACtB,CAAC;AApCD,0CAoCC"}
@@ -0,0 +1,5 @@
1
+ export declare class PromiseCache {
2
+ invoke<T>(cacheKey: unknown, supplier: () => Promise<T>): Promise<T>;
3
+ private cache;
4
+ }
5
+ export declare function adelay(ms: number): Promise<unknown>;