@based/server 3.4.4 → 3.4.5

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 (130) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/auth/authorize.d.ts +2 -0
  3. package/dist/auth/authorize.js +8 -0
  4. package/dist/auth/authorize.js.map +1 -0
  5. package/dist/auth/dummyAuth.d.ts +2 -0
  6. package/dist/auth/dummyAuth.js +7 -0
  7. package/dist/auth/dummyAuth.js.map +1 -0
  8. package/dist/auth/index.d.ts +11 -0
  9. package/dist/auth/index.js +44 -0
  10. package/dist/auth/index.js.map +1 -0
  11. package/dist/clientContext.d.ts +0 -0
  12. package/dist/clientContext.js +83 -0
  13. package/dist/clientContext.js.map +1 -0
  14. package/dist/error.d.ts +66 -0
  15. package/dist/error.js +149 -0
  16. package/dist/error.js.map +1 -0
  17. package/dist/functions/index.d.ts +48 -0
  18. package/dist/functions/index.js +399 -0
  19. package/dist/functions/index.js.map +1 -0
  20. package/dist/functions/timeout.d.ts +3 -0
  21. package/dist/functions/timeout.js +23 -0
  22. package/dist/functions/timeout.js.map +1 -0
  23. package/dist/functions/workerPool.d.ts +0 -0
  24. package/dist/functions/workerPool.js +5 -0
  25. package/dist/functions/workerPool.js.map +1 -0
  26. package/dist/handlers/rest/file/storeFile.js +33 -23
  27. package/dist/handlers/rest/file/storeFile.js.map +1 -1
  28. package/dist/network/http/authorize.d.ts +3 -0
  29. package/dist/network/http/authorize.js +28 -0
  30. package/dist/network/http/authorize.js.map +1 -0
  31. package/dist/network/http/compress.d.ts +6 -0
  32. package/dist/network/http/compress.js +56 -0
  33. package/dist/network/http/compress.js.map +1 -0
  34. package/dist/network/http/end.d.ts +4 -0
  35. package/dist/network/http/end.js +19 -0
  36. package/dist/network/http/end.js.map +1 -0
  37. package/dist/network/http/function.d.ts +3 -0
  38. package/dist/network/http/function.js +47 -0
  39. package/dist/network/http/function.js.map +1 -0
  40. package/dist/network/http/get.d.ts +3 -0
  41. package/dist/network/http/get.js +129 -0
  42. package/dist/network/http/get.js.map +1 -0
  43. package/dist/network/http/index.d.ts +3 -0
  44. package/dist/network/http/index.js +122 -0
  45. package/dist/network/http/index.js.map +1 -0
  46. package/dist/network/http/readBody.d.ts +3 -0
  47. package/dist/network/http/readBody.js +112 -0
  48. package/dist/network/http/readBody.js.map +1 -0
  49. package/dist/network/http/send.d.ts +5 -0
  50. package/dist/network/http/send.js +60 -0
  51. package/dist/network/http/send.js.map +1 -0
  52. package/dist/network/http/streamFunction/DataStream.d.ts +7 -0
  53. package/dist/network/http/streamFunction/DataStream.js +19 -0
  54. package/dist/network/http/streamFunction/DataStream.js.map +1 -0
  55. package/dist/network/http/streamFunction/getExtension.d.ts +2 -0
  56. package/dist/network/http/streamFunction/getExtension.js +29 -0
  57. package/dist/network/http/streamFunction/getExtension.js.map +1 -0
  58. package/dist/network/http/streamFunction/index.d.ts +3 -0
  59. package/dist/network/http/streamFunction/index.js +81 -0
  60. package/dist/network/http/streamFunction/index.js.map +1 -0
  61. package/dist/network/http/streamFunction/multipartStream.d.ts +12 -0
  62. package/dist/network/http/streamFunction/multipartStream.js +208 -0
  63. package/dist/network/http/streamFunction/multipartStream.js.map +1 -0
  64. package/dist/network/http/streamFunction/stream.d.ts +5 -0
  65. package/dist/network/http/streamFunction/stream.js +103 -0
  66. package/dist/network/http/streamFunction/stream.js.map +1 -0
  67. package/dist/network/index.d.ts +4 -0
  68. package/dist/network/index.js +84 -0
  69. package/dist/network/index.js.map +1 -0
  70. package/dist/network/message/auth.d.ts +4 -0
  71. package/dist/network/message/auth.js +32 -0
  72. package/dist/network/message/auth.js.map +1 -0
  73. package/dist/network/message/function.d.ts +3 -0
  74. package/dist/network/message/function.js +67 -0
  75. package/dist/network/message/function.js.map +1 -0
  76. package/dist/network/message/get.d.ts +3 -0
  77. package/dist/network/message/get.js +109 -0
  78. package/dist/network/message/get.js.map +1 -0
  79. package/dist/network/message/index.d.ts +3 -0
  80. package/dist/network/message/index.js +62 -0
  81. package/dist/network/message/index.js.map +1 -0
  82. package/dist/network/message/observable.d.ts +5 -0
  83. package/dist/network/message/observable.js +103 -0
  84. package/dist/network/message/observable.js.map +1 -0
  85. package/dist/network/message/send.d.ts +4 -0
  86. package/dist/network/message/send.js +11 -0
  87. package/dist/network/message/send.js.map +1 -0
  88. package/dist/network/upgrade.d.ts +4 -0
  89. package/dist/network/upgrade.js +49 -0
  90. package/dist/network/upgrade.js.map +1 -0
  91. package/dist/network/worker/get.d.ts +0 -0
  92. package/dist/network/worker/get.js +122 -0
  93. package/dist/network/worker/get.js.map +1 -0
  94. package/dist/network/worker/observable.d.ts +0 -0
  95. package/dist/network/worker/observable.js +120 -0
  96. package/dist/network/worker/observable.js.map +1 -0
  97. package/dist/observable/index.d.ts +8 -0
  98. package/dist/observable/index.js +154 -0
  99. package/dist/observable/index.js.map +1 -0
  100. package/dist/protocol.d.ts +19 -0
  101. package/dist/protocol.js +212 -0
  102. package/dist/protocol.js.map +1 -0
  103. package/dist/security/index.d.ts +2 -0
  104. package/dist/security/index.js +57 -0
  105. package/dist/security/index.js.map +1 -0
  106. package/dist/server.d.ts +35 -0
  107. package/dist/server.js +99 -0
  108. package/dist/server.js.map +1 -0
  109. package/dist/worker/authorize.d.ts +5 -0
  110. package/dist/worker/authorize.js +15 -0
  111. package/dist/worker/authorize.js.map +1 -0
  112. package/dist/worker/fnMap.d.ts +2 -0
  113. package/dist/worker/fnMap.js +5 -0
  114. package/dist/worker/fnMap.js.map +1 -0
  115. package/dist/worker/functions.d.ts +3 -0
  116. package/dist/worker/functions.js +8 -0
  117. package/dist/worker/functions.js.map +1 -0
  118. package/dist/worker/http/function.d.ts +4 -0
  119. package/dist/worker/http/function.js +75 -0
  120. package/dist/worker/http/function.js.map +1 -0
  121. package/dist/worker/index.d.ts +1 -0
  122. package/dist/worker/index.js +101 -0
  123. package/dist/worker/index.js.map +1 -0
  124. package/dist/worker/observable.d.ts +15 -0
  125. package/dist/worker/observable.js +110 -0
  126. package/dist/worker/observable.js.map +1 -0
  127. package/dist/worker/ws/function.d.ts +3 -0
  128. package/dist/worker/ws/function.js +42 -0
  129. package/dist/worker/ws/function.js.map +1 -0
  130. package/package.json +1 -1
@@ -0,0 +1,120 @@
1
+ // import { isObservableFunctionSpec } from '../../functions'
2
+ // import { decodePayload, decodeName, readUint8 } from '../../protocol'
3
+ // import { BasedServer } from '../../server'
4
+ // import { create, unsubscribe, destroy, subscribe } from '../../observable'
5
+ // import { BasedErrorCode } from '../../error'
6
+ // import { sendError } from '../message/send'
7
+ // import { WebsocketClient, BasedFunctionRoute } from '../../types'
8
+ // gets worker (and client context)
9
+ // export const enableSubscribe = (
10
+ // server: BasedServer,
11
+ // client: WebsocketClient,
12
+ // id: number,
13
+ // checksum: number,
14
+ // name: string,
15
+ // payload: any,
16
+ // route: BasedFunctionRoute
17
+ // ) => {
18
+ // client.ws.subscribe(String(id))
19
+ // client.ws.obs.add(id)
20
+ // if (server.activeObservablesById.has(id)) {
21
+ // subscribe(server, id, checksum, client)
22
+ // } else {
23
+ // server.functions
24
+ // .install(name)
25
+ // .then((spec) => {
26
+ // if (spec && isObservableFunctionSpec(spec)) {
27
+ // const obs = create(server, name, id, payload)
28
+ // if (!client.ws?.obs.has(id)) {
29
+ // if (obs.clients.size === 0) {
30
+ // destroy(server, id)
31
+ // }
32
+ // } else {
33
+ // subscribe(server, id, checksum, client)
34
+ // }
35
+ // } else {
36
+ // sendError(server, client, BasedErrorCode.FunctionNotFound, route)
37
+ // }
38
+ // })
39
+ // .catch(() => {
40
+ // sendError(server, client, BasedErrorCode.FunctionNotFound, route)
41
+ // })
42
+ // }
43
+ // }
44
+ // export const subscribeMessage = (
45
+ // arr: Uint8Array,
46
+ // start: number,
47
+ // len: number,
48
+ // isDeflate: boolean,
49
+ // client: WebsocketClient,
50
+ // server: BasedServer
51
+ // ) => {
52
+ // // | 4 header | 8 id | 8 checksum | 1 name length | * name | * payload |
53
+ // const nameLen = arr[start + 20]
54
+ // const id = readUint8(arr, start + 4, 8)
55
+ // const checksum = readUint8(arr, start + 12, 8)
56
+ // const name = decodeName(arr, start + 21, start + 21 + nameLen)
57
+ // if (!name || !id) {
58
+ // return false
59
+ // }
60
+ // const route = server.functions.route(name)
61
+ // if (!route || !route.observable) {
62
+ // return false
63
+ // }
64
+ // if (route.maxPayloadSize !== -1 && len > route.maxPayloadSize) {
65
+ // sendError(server, client, BasedErrorCode.PayloadTooLarge, route)
66
+ // return false
67
+ // }
68
+ // if (client.ws?.obs.has(id)) {
69
+ // // allready subscribed to this id
70
+ // return true
71
+ // }
72
+ // const payload = decodePayload(
73
+ // new Uint8Array(arr.slice(start + 21 + nameLen, start + len)),
74
+ // isDeflate
75
+ // )
76
+ // server.auth.config
77
+ // .authorize(server, client, name, payload)
78
+ // .then((ok) => {
79
+ // if (!client.ws) {
80
+ // return
81
+ // }
82
+ // if (!ok) {
83
+ // client.ws.unauthorizedObs.add({ id, checksum, name, payload })
84
+ // sendError(server, client, BasedErrorCode.AuthorizeRejectedError, route)
85
+ // return false
86
+ // }
87
+ // enableSubscribe(server, client, id, checksum, name, payload, route)
88
+ // })
89
+ // .catch((err) => {
90
+ // sendError(server, client, BasedErrorCode.AuthorizeFunctionError, {
91
+ // route,
92
+ // observableId: id,
93
+ // err,
94
+ // })
95
+ // destroy(server, id)
96
+ // })
97
+ // return true
98
+ // }
99
+ // export const unsubscribeMessage = (
100
+ // arr: Uint8Array,
101
+ // start: number,
102
+ // client: WebsocketClient,
103
+ // server: BasedServer
104
+ // ) => {
105
+ // // | 4 header | 8 id |
106
+ // const id = readUint8(arr, start + 4, 8)
107
+ // if (!id) {
108
+ // return false
109
+ // }
110
+ // if (!client.ws) {
111
+ // return
112
+ // }
113
+ // if (!client.ws.obs.has(id)) {
114
+ // return true
115
+ // }
116
+ // client.ws.unsubscribe(String(id))
117
+ // unsubscribe(server, id, client)
118
+ // return true
119
+ // }
120
+ //# sourceMappingURL=observable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.js","sourceRoot":"","sources":["../../../src/network/worker/observable.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,wEAAwE;AACxE,6CAA6C;AAC7C,6EAA6E;AAC7E,+CAA+C;AAC/C,8CAA8C;AAC9C,oEAAoE;AAEpE,mCAAmC;AAEnC,mCAAmC;AACnC,yBAAyB;AACzB,6BAA6B;AAC7B,gBAAgB;AAChB,sBAAsB;AACtB,kBAAkB;AAClB,kBAAkB;AAClB,8BAA8B;AAC9B,SAAS;AACT,oCAAoC;AACpC,0BAA0B;AAE1B,gDAAgD;AAChD,8CAA8C;AAC9C,aAAa;AACb,uBAAuB;AACvB,uBAAuB;AACvB,0BAA0B;AAC1B,wDAAwD;AACxD,0DAA0D;AAC1D,2CAA2C;AAC3C,4CAA4C;AAC5C,oCAAoC;AACpC,gBAAgB;AAChB,qBAAqB;AACrB,sDAAsD;AACtD,cAAc;AACd,mBAAmB;AACnB,8EAA8E;AAC9E,YAAY;AACZ,WAAW;AACX,uBAAuB;AACvB,4EAA4E;AAC5E,WAAW;AACX,MAAM;AACN,IAAI;AAEJ,oCAAoC;AACpC,qBAAqB;AACrB,mBAAmB;AACnB,iBAAiB;AACjB,wBAAwB;AACxB,6BAA6B;AAC7B,wBAAwB;AACxB,SAAS;AACT,6EAA6E;AAE7E,oCAAoC;AAEpC,4CAA4C;AAC5C,mDAAmD;AACnD,mEAAmE;AAEnE,wBAAwB;AACxB,mBAAmB;AACnB,MAAM;AAEN,+CAA+C;AAE/C,uCAAuC;AACvC,mBAAmB;AACnB,MAAM;AAEN,qEAAqE;AACrE,uEAAuE;AACvE,mBAAmB;AACnB,MAAM;AAEN,kCAAkC;AAClC,wCAAwC;AACxC,kBAAkB;AAClB,MAAM;AAEN,mCAAmC;AACnC,oEAAoE;AACpE,gBAAgB;AAChB,MAAM;AAEN,uBAAuB;AACvB,gDAAgD;AAChD,sBAAsB;AACtB,0BAA0B;AAC1B,iBAAiB;AACjB,UAAU;AAEV,mBAAmB;AACnB,yEAAyE;AACzE,kFAAkF;AAClF,uBAAuB;AACvB,UAAU;AAEV,4EAA4E;AAC5E,SAAS;AACT,wBAAwB;AACxB,2EAA2E;AAC3E,iBAAiB;AACjB,4BAA4B;AAC5B,eAAe;AACf,WAAW;AACX,4BAA4B;AAC5B,SAAS;AAET,gBAAgB;AAChB,IAAI;AAEJ,sCAAsC;AACtC,qBAAqB;AACrB,mBAAmB;AACnB,6BAA6B;AAC7B,wBAAwB;AACxB,SAAS;AACT,2BAA2B;AAE3B,4CAA4C;AAE5C,eAAe;AACf,mBAAmB;AACnB,MAAM;AAEN,sBAAsB;AACtB,aAAa;AACb,MAAM;AAEN,kCAAkC;AAClC,kBAAkB;AAClB,MAAM;AAEN,sCAAsC;AAEtC,oCAAoC;AAEpC,gBAAgB;AAChB,IAAI"}
@@ -0,0 +1,8 @@
1
+ import { BasedServer } from '../server';
2
+ import { ActiveObservable, WebsocketClient } from '../types';
3
+ export declare const destroy: (server: BasedServer, id: number) => void;
4
+ export declare const subscribe: (server: BasedServer, id: number, checksum: number, client: WebsocketClient) => void;
5
+ export declare const unsubscribe: (server: BasedServer, id: number, client: WebsocketClient) => void;
6
+ export declare const unsubscribeIgnoreClient: (server: BasedServer, id: number, client: WebsocketClient) => void;
7
+ export declare const initFunction: (server: BasedServer, id: number) => Promise<void>;
8
+ export declare const create: (server: BasedServer, name: string, id: number, payload: any) => ActiveObservable;
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.create = exports.initFunction = exports.unsubscribeIgnoreClient = exports.unsubscribe = exports.subscribe = exports.destroy = void 0;
4
+ const destroy = (server, id) => {
5
+ const obs = server.activeObservablesById.get(id);
6
+ if (!obs) {
7
+ console.error('Observable', id, 'does not exists');
8
+ return;
9
+ }
10
+ if (obs.isDestroyed) {
11
+ return;
12
+ }
13
+ const spec = server.functions.observables[obs.name];
14
+ if (!spec) {
15
+ console.warn('Cannot find observable function spec!', obs.name);
16
+ return;
17
+ }
18
+ const memCacheTimeout = spec.memCacheTimeout ?? server.functions.config.memCacheTimeout;
19
+ if (!obs.beingDestroyed) {
20
+ obs.beingDestroyed = setTimeout(() => {
21
+ if (!server.activeObservables[obs.name]) {
22
+ console.info('Trying to destroy a removed observable function');
23
+ return;
24
+ }
25
+ obs.beingDestroyed = null;
26
+ server.activeObservables[obs.name].delete(id);
27
+ if (server.activeObservables[obs.name].size === 0) {
28
+ delete server.activeObservables[obs.name];
29
+ }
30
+ server.activeObservablesById.delete(id);
31
+ obs.isDestroyed = true;
32
+ obs.closeFunction();
33
+ }, memCacheTimeout);
34
+ }
35
+ };
36
+ exports.destroy = destroy;
37
+ const subscribe = (server, id, checksum, client) => {
38
+ if (!client.ws) {
39
+ return;
40
+ }
41
+ const obs = server.activeObservablesById.get(id);
42
+ client.ws.obs.add(id);
43
+ if (obs.beingDestroyed) {
44
+ clearTimeout(obs.beingDestroyed);
45
+ obs.beingDestroyed = null;
46
+ }
47
+ obs.clients.add(client.ws.id);
48
+ if (obs.cache && obs.checksum !== checksum) {
49
+ if (obs.diffCache && obs.previousChecksum === checksum) {
50
+ client.ws.send(obs.diffCache, true, false);
51
+ }
52
+ else {
53
+ client.ws.send(obs.cache, true, false);
54
+ }
55
+ }
56
+ };
57
+ exports.subscribe = subscribe;
58
+ const unsubscribe = (server, id, client) => {
59
+ if (!client.ws) {
60
+ return;
61
+ }
62
+ if (!client.ws.obs.has(id)) {
63
+ return;
64
+ }
65
+ const obs = server.activeObservablesById.get(id);
66
+ client.ws.obs.delete(id);
67
+ if (!obs) {
68
+ return;
69
+ }
70
+ obs.clients.delete(client.ws.id);
71
+ if (obs.clients.size === 0) {
72
+ (0, exports.destroy)(server, id);
73
+ }
74
+ };
75
+ exports.unsubscribe = unsubscribe;
76
+ const unsubscribeIgnoreClient = (server, id, client) => {
77
+ if (!client.ws) {
78
+ return;
79
+ }
80
+ const obs = server.activeObservablesById.get(id);
81
+ if (!obs) {
82
+ return;
83
+ }
84
+ obs.clients.delete(client.ws.id);
85
+ if (obs.clients.size === 0) {
86
+ (0, exports.destroy)(server, id);
87
+ }
88
+ };
89
+ exports.unsubscribeIgnoreClient = unsubscribeIgnoreClient;
90
+ const initFunction = async (server, id) => {
91
+ const obs = server.activeObservablesById.get(id);
92
+ if (obs.closeFunction) {
93
+ obs.closeFunction();
94
+ delete obs.closeFunction;
95
+ }
96
+ const spec = server.functions.observables[obs.name];
97
+ if (!spec) {
98
+ console.warn('Cannot find observable function spec!', obs.name);
99
+ return;
100
+ }
101
+ const payload = obs.payload;
102
+ const close = server.functions.runObservableFunction(spec, id,
103
+ // add isDeflate for http
104
+ (err) => {
105
+ if (err) {
106
+ console.error('ERROR TIMES /w obserbable', err);
107
+ }
108
+ }, (encodedDiffData, encodedData, checksum, isDeflate) => {
109
+ obs.previousChecksum = obs.checksum;
110
+ obs.checksum = checksum;
111
+ obs.cache = encodedData;
112
+ obs.isDeflate = isDeflate;
113
+ if (encodedDiffData) {
114
+ obs.diffCache = encodedDiffData;
115
+ server.uwsApp.publish(String(id), encodedDiffData, true, false);
116
+ }
117
+ else {
118
+ server.uwsApp.publish(String(id), encodedData, true, false);
119
+ }
120
+ if (obs.onNextData) {
121
+ const setObs = obs.onNextData;
122
+ delete obs.onNextData;
123
+ setObs.forEach((fn) => fn());
124
+ }
125
+ }, payload);
126
+ if (obs.isDestroyed) {
127
+ close();
128
+ }
129
+ else {
130
+ obs.closeFunction = close;
131
+ }
132
+ };
133
+ exports.initFunction = initFunction;
134
+ const create = (server, name, id, payload) => {
135
+ if (server.activeObservablesById.has(id)) {
136
+ return server.activeObservablesById.get(id);
137
+ }
138
+ const obs = {
139
+ payload,
140
+ clients: new Set(),
141
+ id,
142
+ name,
143
+ isDestroyed: false,
144
+ };
145
+ if (!server.activeObservables[name]) {
146
+ server.activeObservables[name] = new Map();
147
+ }
148
+ server.activeObservables[name].set(id, obs);
149
+ server.activeObservablesById.set(id, obs);
150
+ (0, exports.initFunction)(server, id);
151
+ return obs;
152
+ };
153
+ exports.create = create;
154
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observable/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /// <reference types="node" />
2
+ export declare const COMPRESS_FROM_BYTES = 150;
3
+ export declare const decodeHeader: (nr: number) => {
4
+ type: number;
5
+ isDeflate: boolean;
6
+ len: number;
7
+ };
8
+ export declare const storeUint8: (buff: Uint8Array, n: number, start: number, len: number) => void;
9
+ export declare const readUint8: (buff: Uint8Array, start: number, len: number) => number;
10
+ export declare const encodeHeader: (type: number, isDeflate: boolean, len: number) => number;
11
+ export declare const valueToBuffer: (payload: any) => Buffer;
12
+ export declare const decodePayload: (payload: Uint8Array, isDeflate: boolean) => any;
13
+ export declare const decodeName: (arr: Uint8Array, start: number, end: number) => string;
14
+ export declare const encodeFunctionResponse: (id: number, buffer: Buffer) => Uint8Array;
15
+ export declare const encodeGetResponse: (id: number) => Uint8Array;
16
+ export declare const encodeObservableResponse: (id: number, checksum: number, buffer: Buffer) => [Uint8Array, boolean];
17
+ export declare const encodeObservableDiffResponse: (id: number, checksum: number, previousChecksum: number, buffer: Buffer) => Uint8Array;
18
+ export declare const encodeAuthResponse: (buffer: Buffer) => Uint8Array;
19
+ export declare const encodeErrorResponse: (buffer: Buffer) => Uint8Array;
@@ -0,0 +1,212 @@
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.encodeErrorResponse = exports.encodeAuthResponse = exports.encodeObservableDiffResponse = exports.encodeObservableResponse = exports.encodeGetResponse = exports.encodeFunctionResponse = exports.decodeName = exports.decodePayload = exports.valueToBuffer = exports.encodeHeader = exports.readUint8 = exports.storeUint8 = exports.decodeHeader = exports.COMPRESS_FROM_BYTES = void 0;
7
+ const node_zlib_1 = __importDefault(require("node:zlib"));
8
+ const textDecoder = new TextDecoder();
9
+ exports.COMPRESS_FROM_BYTES = 150;
10
+ const decodeHeader = (nr) => {
11
+ // 4 bytes
12
+ // type (3 bits)
13
+ // 0 = function
14
+ // 1 = subscribe
15
+ // 2 = unsubscribe
16
+ // 3 = get from observable
17
+ // 4 = auth
18
+ // 5 = error
19
+ // isDeflate (1 bit)
20
+ // len (28 bits)
21
+ const len = nr >> 4;
22
+ const meta = nr & 15;
23
+ const type = meta >> 1;
24
+ const isDeflate = meta & 1;
25
+ return {
26
+ type,
27
+ isDeflate: isDeflate === 1,
28
+ len,
29
+ };
30
+ };
31
+ exports.decodeHeader = decodeHeader;
32
+ const storeUint8 = (buff, n, start, len) => {
33
+ for (let index = start; index < start + len; index++) {
34
+ const byte = n & 0xff;
35
+ buff[index] = byte;
36
+ n = (n - byte) / 256;
37
+ }
38
+ };
39
+ exports.storeUint8 = storeUint8;
40
+ const readUint8 = (buff, start, len) => {
41
+ let n = 0;
42
+ const s = len - 1 + start;
43
+ for (let i = s; i >= start; i--) {
44
+ n = n * 256 + buff[i];
45
+ }
46
+ return n;
47
+ };
48
+ exports.readUint8 = readUint8;
49
+ const encodeHeader = (type, isDeflate, len) => {
50
+ // 4 bytes
51
+ // type (3 bits)
52
+ // 0 = functionData
53
+ // 1 = subscriptionData
54
+ // 2 = subscriptionDiffData
55
+ // isDeflate (1 bit)
56
+ // len (28 bits)
57
+ // @ts-ignore
58
+ const encodedMeta = (type << 1) + (isDeflate | 0);
59
+ const nr = (len << 4) + encodedMeta;
60
+ return nr;
61
+ };
62
+ exports.encodeHeader = encodeHeader;
63
+ const valueToBuffer = (payload) => {
64
+ // can use a more elloborate typed response e.g. number etc in there
65
+ if (payload === undefined) {
66
+ return Buffer.from([]);
67
+ }
68
+ // only stringify if not string...
69
+ return Buffer.from(JSON.stringify(payload));
70
+ };
71
+ exports.valueToBuffer = valueToBuffer;
72
+ const decodePayload = (payload, isDeflate) => {
73
+ if (!isDeflate) {
74
+ return textDecoder.decode(payload);
75
+ }
76
+ const buffer = node_zlib_1.default.inflateRawSync(payload);
77
+ return textDecoder.decode(buffer);
78
+ };
79
+ exports.decodePayload = decodePayload;
80
+ const decodeName = (arr, start, end) => {
81
+ const name = new Uint8Array(arr.slice(start, end));
82
+ return textDecoder.decode(name);
83
+ };
84
+ exports.decodeName = decodeName;
85
+ const encodeFunctionResponse = (id, buffer) => {
86
+ // Type 0
87
+ // | 4 header | 3 id | * payload |
88
+ let isDeflate = false;
89
+ // implement later
90
+ const chunks = 1;
91
+ if (buffer.length > exports.COMPRESS_FROM_BYTES) {
92
+ isDeflate = true;
93
+ buffer = node_zlib_1.default.deflateRawSync(buffer, {});
94
+ }
95
+ if (chunks === 1) {
96
+ const headerSize = 4;
97
+ const idSize = 3;
98
+ const msgSize = idSize + buffer.length;
99
+ const header = (0, exports.encodeHeader)(0, isDeflate, msgSize);
100
+ // not very nessecary but ok
101
+ const buf = new SharedArrayBuffer(headerSize + msgSize);
102
+ const array = new Uint8Array(buf);
103
+ (0, exports.storeUint8)(array, header, 0, 4);
104
+ (0, exports.storeUint8)(array, id, 4, 3);
105
+ if (buffer.length) {
106
+ array.set(buffer, 7);
107
+ }
108
+ return array;
109
+ }
110
+ else {
111
+ console.warn('chunk not implemented yet');
112
+ return new Uint8Array(0);
113
+ }
114
+ };
115
+ exports.encodeFunctionResponse = encodeFunctionResponse;
116
+ const encodeGetResponse = (id) => {
117
+ // Type 4
118
+ // | 4 header | 8 id |
119
+ const header = (0, exports.encodeHeader)(3, false, 8);
120
+ const array = new Uint8Array(12);
121
+ (0, exports.storeUint8)(array, header, 0, 4);
122
+ (0, exports.storeUint8)(array, id, 4, 8);
123
+ return array;
124
+ };
125
+ exports.encodeGetResponse = encodeGetResponse;
126
+ const encodeObservableResponse = (id, checksum, buffer) => {
127
+ // Type 1 (full data)
128
+ // | 4 header | 8 id | 8 checksum | * payload |
129
+ let isDeflate = false;
130
+ // implement later
131
+ const chunks = 1;
132
+ if (buffer.length > exports.COMPRESS_FROM_BYTES) {
133
+ isDeflate = true;
134
+ buffer = node_zlib_1.default.deflateRawSync(buffer, {});
135
+ }
136
+ if (chunks === 1) {
137
+ const msgSize = 16 + buffer.length;
138
+ const header = (0, exports.encodeHeader)(1, isDeflate, msgSize);
139
+ const sBuff = new SharedArrayBuffer(4 + msgSize);
140
+ const array = new Uint8Array(sBuff);
141
+ (0, exports.storeUint8)(array, header, 0, 4);
142
+ (0, exports.storeUint8)(array, id, 4, 8);
143
+ (0, exports.storeUint8)(array, checksum, 12, 8);
144
+ if (buffer.length) {
145
+ array.set(buffer, 20);
146
+ }
147
+ return [array, isDeflate];
148
+ }
149
+ else {
150
+ console.warn('chunk not implemented yet');
151
+ return [new Uint8Array(0), false];
152
+ }
153
+ };
154
+ exports.encodeObservableResponse = encodeObservableResponse;
155
+ const encodeObservableDiffResponse = (id, checksum, previousChecksum, buffer) => {
156
+ // Type 2 (diff data)
157
+ // | 4 header | 8 id | 8 checksum | 8 previousChecksum | * diff |
158
+ let isDeflate = false;
159
+ // implement later
160
+ const chunks = 1;
161
+ if (buffer.length > exports.COMPRESS_FROM_BYTES) {
162
+ isDeflate = true;
163
+ buffer = node_zlib_1.default.deflateRawSync(buffer, {});
164
+ }
165
+ if (chunks === 1) {
166
+ const msgSize = 24 + buffer.length;
167
+ const header = (0, exports.encodeHeader)(2, isDeflate, msgSize);
168
+ const sBuff = new SharedArrayBuffer(4 + msgSize);
169
+ const array = new Uint8Array(sBuff);
170
+ (0, exports.storeUint8)(array, header, 0, 4);
171
+ (0, exports.storeUint8)(array, id, 4, 8);
172
+ (0, exports.storeUint8)(array, checksum, 12, 8);
173
+ (0, exports.storeUint8)(array, previousChecksum, 20, 8);
174
+ if (buffer.length) {
175
+ array.set(buffer, 28);
176
+ }
177
+ return array;
178
+ }
179
+ else {
180
+ console.warn('chunk not implemented yet');
181
+ return new Uint8Array(0);
182
+ }
183
+ };
184
+ exports.encodeObservableDiffResponse = encodeObservableDiffResponse;
185
+ const encodeSimpleResponse = (type, buffer) => {
186
+ // | 4 header | * payload |
187
+ let isDeflate = false;
188
+ if (buffer.length > exports.COMPRESS_FROM_BYTES) {
189
+ isDeflate = true;
190
+ buffer = node_zlib_1.default.deflateRawSync(buffer, {});
191
+ }
192
+ const headerSize = 4;
193
+ const msgSize = buffer.length;
194
+ const header = (0, exports.encodeHeader)(type, isDeflate, msgSize);
195
+ const array = new Uint8Array(headerSize + msgSize);
196
+ (0, exports.storeUint8)(array, header, 0, 4);
197
+ if (buffer.length) {
198
+ array.set(buffer, 4);
199
+ }
200
+ return array;
201
+ };
202
+ const encodeAuthResponse = (buffer) => {
203
+ // Type 4
204
+ return encodeSimpleResponse(4, buffer);
205
+ };
206
+ exports.encodeAuthResponse = encodeAuthResponse;
207
+ const encodeErrorResponse = (buffer) => {
208
+ // Type 5
209
+ return encodeSimpleResponse(5, buffer);
210
+ };
211
+ exports.encodeErrorResponse = encodeErrorResponse;
212
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;AAExB,QAAA,mBAAmB,GAAG,GAAG,CAAA;AAE/B,MAAM,YAAY,GAAG,CAC1B,EAAU,EACyC,EAAE;IACrD,UAAU;IACV,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,4BAA4B;IAC5B,aAAa;IACb,cAAc;IACd,oBAAoB;IACpB,gBAAgB;IAChB,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,CAAA;IACnB,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAA;IACpB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAA;IACtB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAA;IAC1B,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,SAAS,KAAK,CAAC;QAC1B,GAAG;KACJ,CAAA;AACH,CAAC,CAAA;AAtBY,QAAA,YAAY,gBAsBxB;AAEM,MAAM,UAAU,GAAG,CACxB,IAAgB,EAChB,CAAS,EACT,KAAa,EACb,GAAW,EACX,EAAE;IACF,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;QAClB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAA;KACrB;AACH,CAAC,CAAA;AAXY,QAAA,UAAU,cAWtB;AAEM,MAAM,SAAS,GAAG,CACvB,IAAgB,EAChB,KAAa,EACb,GAAW,EACH,EAAE;IACV,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAA;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/B,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;KACtB;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAXY,QAAA,SAAS,aAWrB;AAEM,MAAM,YAAY,GAAG,CAC1B,IAAY,EACZ,SAAkB,EAClB,GAAW,EACH,EAAE;IACV,UAAU;IACV,gBAAgB;IAChB,qBAAqB;IACrB,yBAAyB;IACzB,6BAA6B;IAC7B,oBAAoB;IACpB,gBAAgB;IAChB,aAAa;IACb,MAAM,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACjD,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,WAAW,CAAA;IACnC,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAhBY,QAAA,YAAY,gBAgBxB;AAEM,MAAM,aAAa,GAAG,CAAC,OAAY,EAAU,EAAE;IACpD,oEAAoE;IACpE,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KACvB;IACD,kCAAkC;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;AAC7C,CAAC,CAAA;AAPY,QAAA,aAAa,iBAOzB;AAEM,MAAM,aAAa,GAAG,CAAC,OAAmB,EAAE,SAAkB,EAAO,EAAE;IAC5E,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;KACnC;IAED,MAAM,MAAM,GAAG,mBAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3C,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC,CAAA;AAPY,QAAA,aAAa,iBAOzB;AAEM,MAAM,UAAU,GAAG,CACxB,GAAe,EACf,KAAa,EACb,GAAW,EACH,EAAE;IACV,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAClD,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC,CAAA;AAPY,QAAA,UAAU,cAOtB;AAEM,MAAM,sBAAsB,GAAG,CACpC,EAAU,EACV,MAAc,EACF,EAAE;IACd,SAAS;IACT,kCAAkC;IAElC,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,kBAAkB;IAClB,MAAM,MAAM,GAAG,CAAC,CAAA;IAEhB,IAAI,MAAM,CAAC,MAAM,GAAG,2BAAmB,EAAE;QACvC,SAAS,GAAG,IAAI,CAAA;QAChB,MAAM,GAAG,mBAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;KACzC;IAED,IAAI,MAAM,KAAK,CAAC,EAAE;QAChB,MAAM,UAAU,GAAG,CAAC,CAAA;QACpB,MAAM,MAAM,GAAG,CAAC,CAAA;QAChB,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QACtC,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAElD,4BAA4B;QAC5B,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,UAAU,GAAG,OAAO,CAAC,CAAA;QACvD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;QACjC,IAAA,kBAAU,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/B,IAAA,kBAAU,EAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;SACrB;QACD,OAAO,KAAK,CAAA;KACb;SAAM;QACL,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACzC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;KACzB;AACH,CAAC,CAAA;AAnCY,QAAA,sBAAsB,0BAmClC;AAEM,MAAM,iBAAiB,GAAG,CAAC,EAAU,EAAc,EAAE;IAC1D,SAAS;IACT,sBAAsB;IACtB,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACxC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IAChC,IAAA,kBAAU,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/B,IAAA,kBAAU,EAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AARY,QAAA,iBAAiB,qBAQ7B;AAEM,MAAM,wBAAwB,GAAG,CACtC,EAAU,EACV,QAAgB,EAChB,MAAc,EACS,EAAE;IACzB,qBAAqB;IACrB,+CAA+C;IAE/C,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,kBAAkB;IAClB,MAAM,MAAM,GAAG,CAAC,CAAA;IAEhB,IAAI,MAAM,CAAC,MAAM,GAAG,2BAAmB,EAAE;QACvC,SAAS,GAAG,IAAI,CAAA;QAChB,MAAM,GAAG,mBAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;KACzC;IAED,IAAI,MAAM,KAAK,CAAC,EAAE;QAChB,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA;QAClC,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAElD,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAC,CAAA;QAEhD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;QACnC,IAAA,kBAAU,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/B,IAAA,kBAAU,EAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,IAAA,kBAAU,EAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAClC,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;SACtB;QACD,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;KAC1B;SAAM;QACL,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;KAClC;AACH,CAAC,CAAA;AAnCY,QAAA,wBAAwB,4BAmCpC;AAEM,MAAM,4BAA4B,GAAG,CAC1C,EAAU,EACV,QAAgB,EAChB,gBAAwB,EACxB,MAAc,EACF,EAAE;IACd,qBAAqB;IACrB,iEAAiE;IAEjE,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,kBAAkB;IAClB,MAAM,MAAM,GAAG,CAAC,CAAA;IAEhB,IAAI,MAAM,CAAC,MAAM,GAAG,2BAAmB,EAAE;QACvC,SAAS,GAAG,IAAI,CAAA;QAChB,MAAM,GAAG,mBAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;KACzC;IAED,IAAI,MAAM,KAAK,CAAC,EAAE;QAChB,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA;QAClC,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAElD,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAC,CAAA;QAEhD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;QACnC,IAAA,kBAAU,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/B,IAAA,kBAAU,EAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3B,IAAA,kBAAU,EAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAClC,IAAA,kBAAU,EAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAC1C,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;SACtB;QACD,OAAO,KAAK,CAAA;KACb;SAAM;QACL,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACzC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;KACzB;AACH,CAAC,CAAA;AArCY,QAAA,4BAA4B,gCAqCxC;AAED,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAE,MAAc,EAAc,EAAE;IACxE,2BAA2B;IAC3B,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,IAAI,MAAM,CAAC,MAAM,GAAG,2BAAmB,EAAE;QACvC,SAAS,GAAG,IAAI,CAAA;QAChB,MAAM,GAAG,mBAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;KACzC;IAED,MAAM,UAAU,GAAG,CAAC,CAAA;IACpB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAA;IAC7B,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACrD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,GAAG,OAAO,CAAC,CAAA;IAClD,IAAA,kBAAU,EAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/B,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;KACrB;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAEM,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAc,EAAE;IAC/D,SAAS;IAET,OAAO,oBAAoB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC,CAAA;AAJY,QAAA,kBAAkB,sBAI9B;AAEM,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAc,EAAE;IAChE,SAAS;IAET,OAAO,oBAAoB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC,CAAA;AAJY,QAAA,mBAAmB,uBAI/B"}
@@ -0,0 +1,2 @@
1
+ import type { BasedServer } from '../server';
2
+ export declare const incomingCounter: (server: BasedServer, ip: string) => boolean;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.incomingCounter = void 0;
4
+ // import { BasedErrorCode } from '../error'
5
+ // import { HttpClient, isHttpClient, WebsocketClient } from '../types'
6
+ // token
7
+ const drainRequestCounter = (server) => {
8
+ server.requestsCounterInProgress = true;
9
+ server.requestsCounterTimeout = setTimeout(() => {
10
+ server.requestsCounterInProgress = false;
11
+ // every 30 second remove - 30 reqs
12
+ server.requestsCounter.forEach((value, ip) => {
13
+ if (!value.errors?.size) {
14
+ if (value.requests <= 0) {
15
+ server.requestsCounter.delete(ip);
16
+ return;
17
+ // check if client is still active ?
18
+ }
19
+ }
20
+ else {
21
+ console.info('error handle different');
22
+ }
23
+ console.info('DRAIN RATELIMIT TOKENS');
24
+ value.requests -= 60;
25
+ });
26
+ if (server.requestsCounter.size) {
27
+ drainRequestCounter(server);
28
+ }
29
+ }, 30e3);
30
+ };
31
+ // not counter also rate limit adder
32
+ const incomingCounter = (server, ip) => {
33
+ let ipReqCounter = server.requestsCounter.get(ip);
34
+ if (!ipReqCounter) {
35
+ ipReqCounter = {
36
+ requests: 1,
37
+ };
38
+ server.requestsCounter.set(ip, ipReqCounter);
39
+ }
40
+ else {
41
+ ipReqCounter.requests++;
42
+ }
43
+ // rate limit per route....
44
+ if (ipReqCounter.requests > 1000) {
45
+ // console.info('RATE LIMIT', ip)
46
+ // good indicator of malicious activity
47
+ // server.emit('ratelimit', client)
48
+ return true;
49
+ }
50
+ if (!server.requestsCounterInProgress) {
51
+ drainRequestCounter(server);
52
+ }
53
+ return false;
54
+ };
55
+ exports.incomingCounter = incomingCounter;
56
+ // incoming error counter is also a thing
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":";;;AAEA,4CAA4C;AAC5C,uEAAuE;AAEvE,QAAQ;AAER,MAAM,mBAAmB,GAAG,CAAC,MAAmB,EAAE,EAAE;IAClD,MAAM,CAAC,yBAAyB,GAAG,IAAI,CAAA;IACvC,MAAM,CAAC,sBAAsB,GAAG,UAAU,CAAC,GAAG,EAAE;QAC9C,MAAM,CAAC,yBAAyB,GAAG,KAAK,CAAA;QAExC,oCAAoC;QAEpC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;gBACvB,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE;oBACvB,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBACjC,OAAM;oBACN,oCAAoC;iBACrC;aACF;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;aACvC;YACD,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;YACtC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE;YAC/B,mBAAmB,CAAC,MAAM,CAAC,CAAA;SAC5B;IACH,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC,CAAA;AAED,oCAAoC;AAC7B,MAAM,eAAe,GAAG,CAAC,MAAmB,EAAE,EAAU,EAAW,EAAE;IAC1E,IAAI,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjD,IAAI,CAAC,YAAY,EAAE;QACjB,YAAY,GAAG;YACb,QAAQ,EAAE,CAAC;SACZ,CAAA;QACD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;KAC7C;SAAM;QACL,YAAY,CAAC,QAAQ,EAAE,CAAA;KACxB;IAED,2BAA2B;IAC3B,IAAI,YAAY,CAAC,QAAQ,GAAG,IAAI,EAAE;QAChC,kCAAkC;QAClC,uCAAuC;QACvC,mCAAmC;QACnC,OAAO,IAAI,CAAA;KACZ;IAED,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE;QACrC,mBAAmB,CAAC,MAAM,CAAC,CAAA;KAC5B;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAxBY,QAAA,eAAe,mBAwB3B;AAED,yCAAyC"}
@@ -0,0 +1,35 @@
1
+ /// <reference types="node" />
2
+ import uws from '@based/uws';
3
+ import type { ServerOptions, ActiveObservable, Listener, EventMap, Event, HttpClient, WebsocketClient } from './types';
4
+ import { BasedFunctions } from './functions';
5
+ import { BasedAuth } from './auth';
6
+ import { BasedErrorCode } from './error';
7
+ export declare class BasedServer {
8
+ functions: BasedFunctions;
9
+ auth: BasedAuth;
10
+ port: number;
11
+ uwsApp: uws.TemplatedApp;
12
+ listenSocket: any;
13
+ whiteList: Set<string>;
14
+ requestsCounter: Map<string, {
15
+ requests: number;
16
+ errors?: Map<BasedErrorCode, number>;
17
+ }>;
18
+ requestsCounterInProgress: boolean;
19
+ requestsCounterTimeout: NodeJS.Timeout;
20
+ activeObservables: {
21
+ [name: string]: Map<number, ActiveObservable>;
22
+ };
23
+ activeObservablesById: Map<number, ActiveObservable>;
24
+ listeners: {
25
+ [E in Event]?: Listener<EventMap[E]>[];
26
+ };
27
+ constructor(opts: ServerOptions);
28
+ emit(type: Event, client: HttpClient | WebsocketClient, val: EventMap[Event]): void;
29
+ on(type: Event, fn: Listener<EventMap[Event]>): void;
30
+ removeAllListeners(): void;
31
+ once(type: Event, fn: Listener<EventMap[Event]>): void;
32
+ off(type: Event, fn: Listener<EventMap[Event]>): void;
33
+ start(port?: number): Promise<BasedServer>;
34
+ destroy(): Promise<void>;
35
+ }