@based/server 3.4.5 → 3.4.7

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 (261) hide show
  1. package/dist/api/index.d.ts +7 -0
  2. package/dist/api/index.js +173 -0
  3. package/dist/api/index.js.map +1 -0
  4. package/dist/auth/dummyAuth.d.ts +1 -1
  5. package/dist/auth/dummyAuth.js +3 -2
  6. package/dist/auth/dummyAuth.js.map +1 -1
  7. package/dist/auth/index.d.ts +8 -4
  8. package/dist/auth/index.js +28 -23
  9. package/dist/auth/index.js.map +1 -1
  10. package/dist/auth/parseAuthState.d.ts +2 -0
  11. package/dist/auth/parseAuthState.js +16 -0
  12. package/dist/auth/parseAuthState.js.map +1 -0
  13. package/dist/auth/types.d.ts +10 -0
  14. package/dist/auth/types.js +3 -0
  15. package/dist/auth/types.js.map +1 -0
  16. package/dist/compress.d.ts +5 -0
  17. package/dist/{network/http/compress.js → compress.js} +2 -6
  18. package/dist/compress.js.map +1 -0
  19. package/dist/context.d.ts +54 -0
  20. package/dist/context.js +18 -0
  21. package/dist/context.js.map +1 -0
  22. package/dist/error/errorTypeHandlers.d.ts +6 -0
  23. package/dist/error/errorTypeHandlers.js +130 -0
  24. package/dist/error/errorTypeHandlers.js.map +1 -0
  25. package/dist/error/index.d.ts +5 -0
  26. package/dist/error/index.js +61 -0
  27. package/dist/error/index.js.map +1 -0
  28. package/dist/error/types.d.ts +105 -0
  29. package/dist/error/types.js +30 -0
  30. package/dist/error/types.js.map +1 -0
  31. package/dist/functions/index.d.ts +10 -24
  32. package/dist/functions/index.js +98 -287
  33. package/dist/functions/index.js.map +1 -1
  34. package/dist/functions/timeout.d.ts +1 -1
  35. package/dist/functions/types.d.ts +69 -0
  36. package/dist/functions/types.js +15 -0
  37. package/dist/functions/types.js.map +1 -0
  38. package/dist/handlers/bulkUpdate/index.d.ts +1 -1
  39. package/dist/handlers/configure/index.d.ts +1 -1
  40. package/dist/handlers/copy/index.d.ts +1 -1
  41. package/dist/handlers/copy/index.js +1 -1
  42. package/dist/handlers/copy/index.js.map +1 -1
  43. package/dist/handlers/delete/index.d.ts +1 -1
  44. package/dist/handlers/digest/index.d.ts +1 -1
  45. package/dist/handlers/get/index.d.ts +1 -1
  46. package/dist/handlers/getConfig/index.d.ts +1 -1
  47. package/dist/handlers/removeField/index.d.ts +1 -1
  48. package/dist/handlers/removeType/index.d.ts +1 -1
  49. package/dist/handlers/rest/file/stream.js +1 -2
  50. package/dist/handlers/rest/file/stream.js.map +1 -1
  51. package/dist/handlers/set/index.d.ts +1 -1
  52. package/dist/incoming/http/authorize.d.ts +4 -0
  53. package/dist/incoming/http/authorize.js +37 -0
  54. package/dist/incoming/http/authorize.js.map +1 -0
  55. package/dist/incoming/http/function.d.ts +4 -0
  56. package/dist/{network → incoming}/http/function.js +13 -13
  57. package/dist/incoming/http/function.js.map +1 -0
  58. package/dist/incoming/http/get.d.ts +4 -0
  59. package/dist/incoming/http/get.js +155 -0
  60. package/dist/incoming/http/get.js.map +1 -0
  61. package/dist/{network → incoming}/http/index.d.ts +0 -0
  62. package/dist/incoming/http/index.js +134 -0
  63. package/dist/incoming/http/index.js.map +1 -0
  64. package/dist/incoming/http/parseQuery.d.ts +4 -0
  65. package/dist/incoming/http/parseQuery.js +25 -0
  66. package/dist/incoming/http/parseQuery.js.map +1 -0
  67. package/dist/incoming/http/readBody.d.ts +4 -0
  68. package/dist/{network → incoming}/http/readBody.js +27 -32
  69. package/dist/incoming/http/readBody.js.map +1 -0
  70. package/dist/{network → incoming}/http/streamFunction/DataStream.d.ts +0 -0
  71. package/dist/{network → incoming}/http/streamFunction/DataStream.js +0 -0
  72. package/dist/incoming/http/streamFunction/DataStream.js.map +1 -0
  73. package/dist/{network → incoming}/http/streamFunction/getExtension.d.ts +0 -0
  74. package/dist/{network → incoming}/http/streamFunction/getExtension.js +0 -0
  75. package/dist/incoming/http/streamFunction/getExtension.js.map +1 -0
  76. package/dist/incoming/http/streamFunction/index.d.ts +4 -0
  77. package/dist/incoming/http/streamFunction/index.js +106 -0
  78. package/dist/incoming/http/streamFunction/index.js.map +1 -0
  79. package/dist/incoming/http/streamFunction/multipartStream.d.ts +13 -0
  80. package/dist/{network → incoming}/http/streamFunction/multipartStream.js +12 -12
  81. package/dist/incoming/http/streamFunction/multipartStream.js.map +1 -0
  82. package/dist/{network → incoming}/http/streamFunction/stream.d.ts +3 -2
  83. package/dist/{network → incoming}/http/streamFunction/stream.js +16 -11
  84. package/dist/incoming/http/streamFunction/stream.js.map +1 -0
  85. package/dist/incoming/index.d.ts +3 -0
  86. package/dist/{network → incoming}/index.js +28 -28
  87. package/dist/incoming/index.js.map +1 -0
  88. package/dist/incoming/upgrade.d.ts +4 -0
  89. package/dist/{network → incoming}/upgrade.js +24 -9
  90. package/dist/incoming/upgrade.js.map +1 -0
  91. package/dist/incoming/ws/auth.d.ts +5 -0
  92. package/dist/incoming/ws/auth.js +40 -0
  93. package/dist/incoming/ws/auth.js.map +1 -0
  94. package/dist/incoming/ws/function.d.ts +3 -0
  95. package/dist/incoming/ws/function.js +107 -0
  96. package/dist/incoming/ws/function.js.map +1 -0
  97. package/dist/incoming/ws/get.d.ts +3 -0
  98. package/dist/incoming/ws/get.js +136 -0
  99. package/dist/incoming/ws/get.js.map +1 -0
  100. package/dist/incoming/ws/index.d.ts +3 -0
  101. package/dist/{network/message → incoming/ws}/index.js +17 -18
  102. package/dist/incoming/ws/index.js.map +1 -0
  103. package/dist/incoming/ws/observable.d.ts +6 -0
  104. package/dist/incoming/ws/observable.js +112 -0
  105. package/dist/incoming/ws/observable.js.map +1 -0
  106. package/dist/ip.d.ts +2 -0
  107. package/dist/ip.js +8 -0
  108. package/dist/ip.js.map +1 -0
  109. package/dist/observable/create.d.ts +3 -0
  110. package/dist/observable/create.js +30 -0
  111. package/dist/observable/create.js.map +1 -0
  112. package/dist/observable/destroy.d.ts +2 -0
  113. package/dist/observable/destroy.js +51 -0
  114. package/dist/observable/destroy.js.map +1 -0
  115. package/dist/observable/error.d.ts +4 -0
  116. package/dist/observable/error.js +17 -0
  117. package/dist/observable/error.js.map +1 -0
  118. package/dist/observable/extendCache.d.ts +2 -0
  119. package/dist/observable/extendCache.js +11 -0
  120. package/dist/observable/extendCache.js.map +1 -0
  121. package/dist/observable/genObservableId.d.ts +1 -0
  122. package/dist/observable/genObservableId.js +9 -0
  123. package/dist/observable/genObservableId.js.map +1 -0
  124. package/dist/observable/get.d.ts +4 -0
  125. package/dist/observable/get.js +15 -0
  126. package/dist/observable/get.js.map +1 -0
  127. package/dist/observable/index.d.ts +11 -8
  128. package/dist/observable/index.js +25 -151
  129. package/dist/observable/index.js.map +1 -1
  130. package/dist/observable/send.d.ts +6 -0
  131. package/dist/observable/send.js +32 -0
  132. package/dist/observable/send.js.map +1 -0
  133. package/dist/observable/start/error.d.ts +3 -0
  134. package/dist/observable/start/error.js +36 -0
  135. package/dist/observable/start/error.js.map +1 -0
  136. package/dist/observable/start/index.d.ts +2 -0
  137. package/dist/observable/start/index.js +46 -0
  138. package/dist/observable/start/index.js.map +1 -0
  139. package/dist/observable/start/update.d.ts +6 -0
  140. package/dist/observable/start/update.js +104 -0
  141. package/dist/observable/start/update.js.map +1 -0
  142. package/dist/observable/subscribe.d.ts +7 -0
  143. package/dist/observable/subscribe.js +54 -0
  144. package/dist/observable/subscribe.js.map +1 -0
  145. package/dist/observable/types.d.ts +26 -0
  146. package/dist/observable/types.js +3 -0
  147. package/dist/observable/types.js.map +1 -0
  148. package/dist/observable/unsub.d.ts +6 -0
  149. package/dist/observable/unsub.js +43 -0
  150. package/dist/observable/unsub.js.map +1 -0
  151. package/dist/observable/verify.d.ts +4 -0
  152. package/dist/observable/verify.js +18 -0
  153. package/dist/observable/verify.js.map +1 -0
  154. package/dist/protocol.d.ts +2 -0
  155. package/dist/protocol.js +32 -11
  156. package/dist/protocol.js.map +1 -1
  157. package/dist/security.d.ts +6 -0
  158. package/dist/security.js +95 -0
  159. package/dist/security.js.map +1 -0
  160. package/dist/sendError.d.ts +5 -0
  161. package/dist/sendError.js +42 -0
  162. package/dist/sendError.js.map +1 -0
  163. package/dist/sendHttpResponse.d.ts +4 -0
  164. package/dist/sendHttpResponse.js +53 -0
  165. package/dist/sendHttpResponse.js.map +1 -0
  166. package/dist/server.d.ts +42 -8
  167. package/dist/server.js +26 -12
  168. package/dist/server.js.map +1 -1
  169. package/package.json +1 -1
  170. package/.turbo/turbo-build.log +0 -4
  171. package/dist/auth/authorize.d.ts +0 -2
  172. package/dist/auth/authorize.js +0 -8
  173. package/dist/auth/authorize.js.map +0 -1
  174. package/dist/clientContext.d.ts +0 -0
  175. package/dist/clientContext.js +0 -83
  176. package/dist/clientContext.js.map +0 -1
  177. package/dist/error.d.ts +0 -66
  178. package/dist/error.js +0 -149
  179. package/dist/error.js.map +0 -1
  180. package/dist/functions/workerPool.d.ts +0 -0
  181. package/dist/functions/workerPool.js +0 -5
  182. package/dist/functions/workerPool.js.map +0 -1
  183. package/dist/network/http/authorize.d.ts +0 -3
  184. package/dist/network/http/authorize.js +0 -28
  185. package/dist/network/http/authorize.js.map +0 -1
  186. package/dist/network/http/compress.d.ts +0 -6
  187. package/dist/network/http/compress.js.map +0 -1
  188. package/dist/network/http/end.d.ts +0 -4
  189. package/dist/network/http/end.js +0 -19
  190. package/dist/network/http/end.js.map +0 -1
  191. package/dist/network/http/function.d.ts +0 -3
  192. package/dist/network/http/function.js.map +0 -1
  193. package/dist/network/http/get.d.ts +0 -3
  194. package/dist/network/http/get.js +0 -129
  195. package/dist/network/http/get.js.map +0 -1
  196. package/dist/network/http/index.js +0 -122
  197. package/dist/network/http/index.js.map +0 -1
  198. package/dist/network/http/readBody.d.ts +0 -3
  199. package/dist/network/http/readBody.js.map +0 -1
  200. package/dist/network/http/send.d.ts +0 -5
  201. package/dist/network/http/send.js +0 -60
  202. package/dist/network/http/send.js.map +0 -1
  203. package/dist/network/http/streamFunction/DataStream.js.map +0 -1
  204. package/dist/network/http/streamFunction/getExtension.js.map +0 -1
  205. package/dist/network/http/streamFunction/index.d.ts +0 -3
  206. package/dist/network/http/streamFunction/index.js +0 -81
  207. package/dist/network/http/streamFunction/index.js.map +0 -1
  208. package/dist/network/http/streamFunction/multipartStream.d.ts +0 -12
  209. package/dist/network/http/streamFunction/multipartStream.js.map +0 -1
  210. package/dist/network/http/streamFunction/stream.js.map +0 -1
  211. package/dist/network/index.d.ts +0 -4
  212. package/dist/network/index.js.map +0 -1
  213. package/dist/network/message/auth.d.ts +0 -4
  214. package/dist/network/message/auth.js +0 -32
  215. package/dist/network/message/auth.js.map +0 -1
  216. package/dist/network/message/function.d.ts +0 -3
  217. package/dist/network/message/function.js +0 -67
  218. package/dist/network/message/function.js.map +0 -1
  219. package/dist/network/message/get.d.ts +0 -3
  220. package/dist/network/message/get.js +0 -109
  221. package/dist/network/message/get.js.map +0 -1
  222. package/dist/network/message/index.d.ts +0 -3
  223. package/dist/network/message/index.js.map +0 -1
  224. package/dist/network/message/observable.d.ts +0 -5
  225. package/dist/network/message/observable.js +0 -103
  226. package/dist/network/message/observable.js.map +0 -1
  227. package/dist/network/message/send.d.ts +0 -4
  228. package/dist/network/message/send.js +0 -11
  229. package/dist/network/message/send.js.map +0 -1
  230. package/dist/network/upgrade.d.ts +0 -4
  231. package/dist/network/upgrade.js.map +0 -1
  232. package/dist/network/worker/get.d.ts +0 -0
  233. package/dist/network/worker/get.js +0 -122
  234. package/dist/network/worker/get.js.map +0 -1
  235. package/dist/network/worker/observable.d.ts +0 -0
  236. package/dist/network/worker/observable.js +0 -120
  237. package/dist/network/worker/observable.js.map +0 -1
  238. package/dist/security/index.d.ts +0 -2
  239. package/dist/security/index.js +0 -57
  240. package/dist/security/index.js.map +0 -1
  241. package/dist/worker/authorize.d.ts +0 -5
  242. package/dist/worker/authorize.js +0 -15
  243. package/dist/worker/authorize.js.map +0 -1
  244. package/dist/worker/fnMap.d.ts +0 -2
  245. package/dist/worker/fnMap.js +0 -5
  246. package/dist/worker/fnMap.js.map +0 -1
  247. package/dist/worker/functions.d.ts +0 -3
  248. package/dist/worker/functions.js +0 -8
  249. package/dist/worker/functions.js.map +0 -1
  250. package/dist/worker/http/function.d.ts +0 -4
  251. package/dist/worker/http/function.js +0 -75
  252. package/dist/worker/http/function.js.map +0 -1
  253. package/dist/worker/index.d.ts +0 -1
  254. package/dist/worker/index.js +0 -101
  255. package/dist/worker/index.js.map +0 -1
  256. package/dist/worker/observable.d.ts +0 -15
  257. package/dist/worker/observable.js +0 -110
  258. package/dist/worker/observable.js.map +0 -1
  259. package/dist/worker/ws/function.d.ts +0 -3
  260. package/dist/worker/ws/function.js +0 -42
  261. package/dist/worker/ws/function.js.map +0 -1
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendHttpResponse = exports.end = void 0;
4
+ const compress_1 = require("./compress");
5
+ const end = (ctx, payload) => {
6
+ if (!ctx.session) {
7
+ return;
8
+ }
9
+ ctx.session.res.writeHeader('Access-Control-Allow-Origin', '*');
10
+ // only allowed headers
11
+ ctx.session.res.writeHeader('Access-Control-Allow-Headers', '*');
12
+ if (payload === undefined) {
13
+ ctx.session.res.end();
14
+ }
15
+ else {
16
+ ctx.session.res.end(payload);
17
+ }
18
+ ctx.session.res = null;
19
+ ctx.session.req = null;
20
+ ctx.session = null;
21
+ };
22
+ exports.end = end;
23
+ const sendHttpResponse = (ctx, result) => {
24
+ if (!ctx.session) {
25
+ return;
26
+ }
27
+ let cType;
28
+ // for functions there is never cache (idea is they are used to execute - observable fns are for cache)
29
+ let parsed;
30
+ if (typeof result === 'string') {
31
+ cType = 'text/plain';
32
+ parsed = result;
33
+ }
34
+ else {
35
+ cType = 'application/json';
36
+ parsed = JSON.stringify(result);
37
+ }
38
+ (0, compress_1.compress)(parsed, ctx.session.headers.encoding).then(({ payload, encoding }) => {
39
+ if (ctx.session.res) {
40
+ ctx.session.res.cork(() => {
41
+ ctx.session.res.writeStatus('200 OK');
42
+ ctx.session.res.writeHeader('Cache-Control', 'max-age=0, must-revalidate');
43
+ ctx.session.res.writeHeader('Content-Type', cType);
44
+ if (encoding) {
45
+ ctx.session.res.writeHeader('Content-Encoding', encoding);
46
+ }
47
+ (0, exports.end)(ctx, payload);
48
+ });
49
+ }
50
+ });
51
+ };
52
+ exports.sendHttpResponse = sendHttpResponse;
53
+ //# sourceMappingURL=sendHttpResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendHttpResponse.js","sourceRoot":"","sources":["../src/sendHttpResponse.ts"],"names":[],"mappings":";;;AACA,yCAAqC;AAE9B,MAAM,GAAG,GAAG,CACjB,GAAyB,EACzB,OAAsC,EACtC,EAAE;IACF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;QAChB,OAAM;KACP;IACD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;IAC/D,uBAAuB;IACvB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;IAChE,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;KACtB;SAAM;QACL,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;KAC7B;IACD,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAA;IACtB,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAA;IACtB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;AACpB,CAAC,CAAA;AAlBY,QAAA,GAAG,OAkBf;AAEM,MAAM,gBAAgB,GAAG,CAAC,GAAyB,EAAE,MAAW,EAAE,EAAE;IACzE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;QAChB,OAAM;KACP;IAED,IAAI,KAAa,CAAA;IAEjB,uGAAuG;IACvG,IAAI,MAAc,CAAA;IAClB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,KAAK,GAAG,YAAY,CAAA;QACpB,MAAM,GAAG,MAAM,CAAA;KAChB;SAAM;QACL,KAAK,GAAG,kBAAkB,CAAA;QAC1B,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;KAChC;IACD,IAAA,mBAAQ,EAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjD,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;YACnB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;gBACxB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;gBACrC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CACzB,eAAe,EACf,4BAA4B,CAC7B,CAAA;gBACD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;gBAClD,IAAI,QAAQ,EAAE;oBACZ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;iBAC1D;gBACD,IAAA,WAAG,EAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACnB,CAAC,CAAC,CAAA;SACH;IACH,CAAC,CACF,CAAA;AACH,CAAC,CAAA;AAlCY,QAAA,gBAAgB,oBAkC5B"}
package/dist/server.d.ts CHANGED
@@ -1,17 +1,49 @@
1
1
  /// <reference types="node" />
2
+ import type { Context } from './context';
3
+ import type { ActiveObservable } from './observable';
2
4
  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';
5
+ import { BasedFunctions, FunctionConfig } from './functions';
6
+ import { BasedAuth, AuthConfig } from './auth';
7
+ import { BasedErrorCode, BasedErrorData } from './error';
8
+ declare type EventMap = {
9
+ error: BasedErrorData;
10
+ ratelimit: void;
11
+ log: any;
12
+ };
13
+ declare type Event = keyof EventMap;
14
+ declare type Listener<T> = (context: Context, data?: T, err?: Error) => void;
15
+ declare type RateLimit = {
16
+ ws: number;
17
+ http: number;
18
+ drain: number;
19
+ };
20
+ export declare type ServerOptions = {
21
+ port?: number;
22
+ key?: string;
23
+ cert?: string;
24
+ functions?: FunctionConfig;
25
+ rateLimit?: RateLimit;
26
+ auth?: AuthConfig;
27
+ workerRequest?: (type: string, payload?: any) => void | Promise<any>;
28
+ ws?: {
29
+ open: (client: Context) => void;
30
+ close: (client: Context) => void;
31
+ };
32
+ http?: {
33
+ open: (client: Context) => void;
34
+ close: (client: Context) => void;
35
+ };
36
+ };
7
37
  export declare class BasedServer {
8
38
  functions: BasedFunctions;
9
39
  auth: BasedAuth;
10
40
  port: number;
11
41
  uwsApp: uws.TemplatedApp;
42
+ rateLimit: RateLimit;
12
43
  listenSocket: any;
13
- whiteList: Set<string>;
14
- requestsCounter: Map<string, {
44
+ blockedIps: Set<string>;
45
+ allowedIps: Set<string>;
46
+ rateLimitCounter: Map<string, {
15
47
  requests: number;
16
48
  errors?: Map<BasedErrorCode, number>;
17
49
  }>;
@@ -24,12 +56,14 @@ export declare class BasedServer {
24
56
  listeners: {
25
57
  [E in Event]?: Listener<EventMap[E]>[];
26
58
  };
59
+ workerRequest: (type: string, payload?: any) => void | Promise<any>;
27
60
  constructor(opts: ServerOptions);
28
- emit(type: Event, client: HttpClient | WebsocketClient, val: EventMap[Event]): void;
61
+ emit(type: Event, client: Context, val: EventMap[Event], err?: Error): void;
29
62
  on(type: Event, fn: Listener<EventMap[Event]>): void;
30
63
  removeAllListeners(): void;
31
64
  once(type: Event, fn: Listener<EventMap[Event]>): void;
32
65
  off(type: Event, fn: Listener<EventMap[Event]>): void;
33
- start(port?: number): Promise<BasedServer>;
66
+ start(port?: number, sharedSocket?: boolean): Promise<BasedServer>;
34
67
  destroy(): Promise<void>;
35
68
  }
69
+ export {};
package/dist/server.js CHANGED
@@ -5,28 +5,41 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BasedServer = void 0;
7
7
  const uws_1 = __importDefault(require("@based/uws"));
8
- const network_1 = __importDefault(require("./network"));
8
+ const incoming_1 = __importDefault(require("./incoming"));
9
9
  const functions_1 = require("./functions");
10
10
  const auth_1 = require("./auth");
11
+ const utils_1 = require("@saulx/utils");
11
12
  // extend emitter
12
13
  class BasedServer {
13
14
  constructor(opts) {
14
- // opposite of blocked can never get blocked
15
- this.whiteList = new Set();
15
+ this.rateLimit = {
16
+ ws: 2e3,
17
+ http: 1e3,
18
+ drain: 500,
19
+ };
20
+ this.blockedIps = new Set();
21
+ // opposite of blockedIps can never get blocked
22
+ this.allowedIps = new Set();
16
23
  // per ip so consitent unfortanetly
17
24
  // check how large it is and make a loop to downgrade it
18
- this.requestsCounter = new Map();
25
+ this.rateLimitCounter = new Map();
19
26
  this.requestsCounterInProgress = false;
20
27
  this.activeObservables = {};
21
28
  this.activeObservablesById = new Map();
22
29
  this.listeners = {};
23
30
  this.functions = new functions_1.BasedFunctions(this, opts.functions);
24
31
  this.auth = new auth_1.BasedAuth(this, opts.auth);
25
- (0, network_1.default)(this, opts);
32
+ if (opts.workerRequest) {
33
+ this.workerRequest = opts.workerRequest;
34
+ }
35
+ if (opts.rateLimit) {
36
+ this.rateLimit = opts.rateLimit;
37
+ }
38
+ (0, incoming_1.default)(this, opts);
26
39
  }
27
- emit(type, client, val) {
40
+ emit(type, client, val, err) {
28
41
  if (this.listeners[type]) {
29
- this.listeners[type].forEach((fn) => fn(client, val));
42
+ this.listeners[type].forEach((fn) => fn(client, val, err));
30
43
  }
31
44
  }
32
45
  on(type, fn) {
@@ -63,30 +76,31 @@ class BasedServer {
63
76
  }
64
77
  }
65
78
  }
66
- start(port) {
79
+ async start(port, sharedSocket) {
67
80
  if (!port) {
68
81
  port = this.port;
69
82
  }
70
83
  else {
71
84
  this.port = port;
72
85
  }
86
+ await (0, utils_1.wait)(10);
73
87
  return new Promise((resolve, reject) => {
74
- this.uwsApp.listen(this.port, (listenSocket) => {
88
+ this.uwsApp.listen(this.port, sharedSocket ? 0 : 1, (listenSocket) => {
75
89
  if (listenSocket) {
76
- console.info('💫 Based-server v2 listening on port:', this.port);
90
+ console.info('💫 Based-edge-server listening on port:', this.port);
77
91
  // do this better wrap a nice thing arround it
78
92
  this.listenSocket = listenSocket;
79
93
  resolve(this);
80
94
  }
81
95
  else {
82
- console.info('🤮 Based-server v2 error on port:', this.port);
96
+ console.info('🤮 Based-edge-server error on port:', this.port);
83
97
  reject(new Error('Cannot start based-server on port: ' + this.port));
84
98
  }
85
99
  });
86
100
  });
87
101
  }
88
102
  async destroy() {
89
- console.info('🔥 Based-server v2 Destroy based-server');
103
+ console.info('🔥 Destroy Based-edge-server');
90
104
  if (this.listenSocket) {
91
105
  uws_1.default.us_listen_socket_close(this.listenSocket);
92
106
  this.listenSocket = null;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@based/server",
3
- "version": "3.4.5",
3
+ "version": "3.4.7",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "module": "src/index.ts",
@@ -1,4 +0,0 @@
1
-
2
- > @based/server@3.4.2 build
3
- > npx tsc
4
-
@@ -1,2 +0,0 @@
1
- import { Authorize } from '../types';
2
- export declare const authorize: Authorize;
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.authorize = void 0;
4
- const authorize = async (_server, _ws, _name, _payload) => {
5
- return true;
6
- };
7
- exports.authorize = authorize;
8
- //# sourceMappingURL=authorize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authorize.js","sourceRoot":"","sources":["../../src/auth/authorize.ts"],"names":[],"mappings":";;;AAEO,MAAM,SAAS,GAAc,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC1E,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAFY,QAAA,SAAS,aAErB"}
File without changes
@@ -1,83 +0,0 @@
1
- // import { hash } from '@saulx/hash'
2
- /*
3
- sharedArrayBuffer UA
4
- // make a ua table and hash UA
5
- // ip just in buffer format
6
- // 250 bytes
7
- */
8
- // export const readIpFromContext = () => {
9
- // // what to read
10
- // // ip
11
- // // ua
12
- // // id
13
- // // authState
14
- // /*
15
- // function bytesToNumber(byteArray) {
16
- // let result = 0;
17
- // for (let i = byteArray.length - 1; i >= 0; i--) {
18
- // result = (result * 256) + byteArray[i];
19
- // }
20
- // return result;
21
- // }
22
- // */
23
- // }
24
- // export const readUaFromContext = () => {}
25
- // export const readQueryFromContext = () => {}
26
- // export const readEncodingFromContext = () => {}
27
- // export const readAuthStateFromContext = () => {}
28
- // /*
29
- // export type ClientContext = {
30
- // query: string
31
- // ua: string
32
- // ip: string
33
- // id: number
34
- // authState?: any
35
- // method: string // this will be removed
36
- // headers: {
37
- // 'content-length'?: number
38
- // authorization?: string
39
- // 'content-type'?: string
40
- // 'content-encoding'?: string
41
- // encoding?: string
42
- // }
43
- // }
44
- // */
45
- // const encoder = new TextEncoder()
46
- // export const createContext = (
47
- // ip: ArrayBuffer,
48
- // ua: string,
49
- // query: string,
50
- // authState: any, // maybe add refresh and token (token can then have )
51
- // forwardedFor: string,
52
- // outgoingEncoding: string
53
- // ): Uint8Array => {
54
- // // IP 16 bytes
55
- // // UA 8 bytes
56
- // // ENCODING 1 byte (in & out)
57
- // // forwarded for needs to be parsed to 16 bytes ipv6
58
- // let len = 16 + 8 + 1
59
- // const encodedQuery = encoder.encode(query)
60
- // len += encodedQuery.byteLength
61
- // const sharedBuffer = new SharedArrayBuffer(len)
62
- // const view = new Uint8Array(sharedBuffer)
63
- // view.set(new Uint8Array(ip), 0)
64
- // const uaHash = hash(ua)
65
- // let n = uaHash
66
- // for (let index = 16; index < 32; index++) {
67
- // const byte = n & 0xff
68
- // view[index] = byte
69
- // n = (n - byte) / 256
70
- // }
71
- // // typeof auth state is {} with refresh token and token
72
- // // then
73
- // // parse encoding
74
- // view[32] = outgoingEncoding.includes('deflate')
75
- // ? 1
76
- // : outgoingEncoding.includes('gzip')
77
- // ? 2
78
- // : outgoingEncoding.includes('br')
79
- // ? 3
80
- // : 0
81
- // return view
82
- // }
83
- //# sourceMappingURL=clientContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clientContext.js","sourceRoot":"","sources":["../src/clientContext.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC;;;;;IAKI;AAEJ,2CAA2C;AAC3C,oBAAoB;AACpB,UAAU;AACV,UAAU;AACV,UAAU;AACV,iBAAiB;AACjB,OAAO;AACP,wCAAwC;AACxC,sBAAsB;AACtB,wDAAwD;AACxD,kDAAkD;AAClD,QAAQ;AACR,qBAAqB;AACrB,IAAI;AACJ,OAAO;AACP,IAAI;AAEJ,4CAA4C;AAE5C,+CAA+C;AAE/C,kDAAkD;AAElD,mDAAmD;AAEnD,KAAK;AACL,gCAAgC;AAChC,kBAAkB;AAClB,eAAe;AACf,eAAe;AACf,eAAe;AACf,oBAAoB;AACpB,4CAA4C;AAC5C,eAAe;AACf,gCAAgC;AAChC,6BAA6B;AAC7B,8BAA8B;AAC9B,kCAAkC;AAClC,wBAAwB;AACxB,MAAM;AACN,IAAI;AACJ,KAAK;AAEL,oCAAoC;AAEpC,iCAAiC;AACjC,qBAAqB;AACrB,gBAAgB;AAChB,mBAAmB;AACnB,0EAA0E;AAC1E,0BAA0B;AAC1B,6BAA6B;AAC7B,qBAAqB;AACrB,mBAAmB;AACnB,kBAAkB;AAClB,kCAAkC;AAElC,yDAAyD;AACzD,yBAAyB;AAEzB,+CAA+C;AAE/C,mCAAmC;AAEnC,oDAAoD;AAEpD,8CAA8C;AAE9C,oCAAoC;AAEpC,4BAA4B;AAE5B,mBAAmB;AACnB,gDAAgD;AAChD,4BAA4B;AAC5B,yBAAyB;AACzB,2BAA2B;AAC3B,MAAM;AAEN,4DAA4D;AAC5D,YAAY;AAEZ,sBAAsB;AACtB,oDAAoD;AACpD,UAAU;AACV,0CAA0C;AAC1C,UAAU;AACV,wCAAwC;AACxC,UAAU;AACV,UAAU;AAEV,gBAAgB;AAChB,IAAI"}
package/dist/error.d.ts DELETED
@@ -1,66 +0,0 @@
1
- import { BasedServer } from './server';
2
- import { BasedFunctionRoute, HttpClient, WebsocketClient } from './types';
3
- export declare enum BasedErrorCode {
4
- FunctionError = 50001,
5
- AuthorizeFunctionError = 50002,
6
- NoOservableCacheAvailable = 50003,
7
- ObservableFunctionError = 50004,
8
- FunctionNotFound = 40401,
9
- FunctionIsNotObservable = 40402,
10
- FunctionIsObservable = 40403,
11
- FunctionIsStream = 40404,
12
- CannotStreamToObservableFunction = 40402,
13
- AuthorizeRejectedError = 40301,
14
- InvalidPayload = 40001,
15
- PayloadTooLarge = 40002,
16
- ChunkTooLarge = 40003,
17
- UnsupportedContentEncoding = 40004,
18
- NoBinaryProtocol = 40005,
19
- LengthRequired = 41101,
20
- MethodNotAllowed = 40501
21
- }
22
- declare type FunctionErrorProps = {
23
- err: Error;
24
- requestId?: number;
25
- route: BasedFunctionRoute;
26
- } | {
27
- observableId: number;
28
- err: Error;
29
- route: BasedFunctionRoute;
30
- };
31
- export declare type ErrorPayload = {
32
- [BasedErrorCode.NoBinaryProtocol]: any;
33
- [BasedErrorCode.FunctionError]: FunctionErrorProps;
34
- [BasedErrorCode.AuthorizeFunctionError]: FunctionErrorProps;
35
- [BasedErrorCode.NoOservableCacheAvailable]: {
36
- observableId: number;
37
- route: BasedFunctionRoute;
38
- };
39
- [BasedErrorCode.ObservableFunctionError]: {
40
- observableId: number;
41
- route: BasedFunctionRoute;
42
- };
43
- [BasedErrorCode.FunctionIsStream]: BasedFunctionRoute;
44
- [BasedErrorCode.FunctionNotFound]: BasedFunctionRoute;
45
- [BasedErrorCode.FunctionIsNotObservable]: BasedFunctionRoute;
46
- [BasedErrorCode.FunctionIsObservable]: BasedFunctionRoute;
47
- [BasedErrorCode.CannotStreamToObservableFunction]: BasedFunctionRoute;
48
- [BasedErrorCode.AuthorizeRejectedError]: BasedFunctionRoute;
49
- [BasedErrorCode.InvalidPayload]: BasedFunctionRoute;
50
- [BasedErrorCode.PayloadTooLarge]: BasedFunctionRoute;
51
- [BasedErrorCode.ChunkTooLarge]: BasedFunctionRoute;
52
- [BasedErrorCode.UnsupportedContentEncoding]: BasedFunctionRoute;
53
- [BasedErrorCode.LengthRequired]: BasedFunctionRoute;
54
- [BasedErrorCode.MethodNotAllowed]: BasedFunctionRoute;
55
- };
56
- export declare type BasedErrorData = {
57
- route: BasedFunctionRoute;
58
- message: string;
59
- code: BasedErrorCode;
60
- statusCode: number;
61
- statusMessage: string;
62
- requestId?: number;
63
- observableId?: number;
64
- };
65
- export declare const createError: (server: BasedServer, client: HttpClient | WebsocketClient, code: BasedErrorCode, payload: ErrorPayload[BasedErrorCode]) => BasedErrorData;
66
- export {};
package/dist/error.js DELETED
@@ -1,149 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createError = exports.BasedErrorCode = void 0;
4
- var BasedErrorCode;
5
- (function (BasedErrorCode) {
6
- BasedErrorCode[BasedErrorCode["FunctionError"] = 50001] = "FunctionError";
7
- BasedErrorCode[BasedErrorCode["AuthorizeFunctionError"] = 50002] = "AuthorizeFunctionError";
8
- BasedErrorCode[BasedErrorCode["NoOservableCacheAvailable"] = 50003] = "NoOservableCacheAvailable";
9
- BasedErrorCode[BasedErrorCode["ObservableFunctionError"] = 50004] = "ObservableFunctionError";
10
- BasedErrorCode[BasedErrorCode["FunctionNotFound"] = 40401] = "FunctionNotFound";
11
- BasedErrorCode[BasedErrorCode["FunctionIsNotObservable"] = 40402] = "FunctionIsNotObservable";
12
- BasedErrorCode[BasedErrorCode["FunctionIsObservable"] = 40403] = "FunctionIsObservable";
13
- BasedErrorCode[BasedErrorCode["FunctionIsStream"] = 40404] = "FunctionIsStream";
14
- BasedErrorCode[BasedErrorCode["CannotStreamToObservableFunction"] = 40402] = "CannotStreamToObservableFunction";
15
- BasedErrorCode[BasedErrorCode["AuthorizeRejectedError"] = 40301] = "AuthorizeRejectedError";
16
- BasedErrorCode[BasedErrorCode["InvalidPayload"] = 40001] = "InvalidPayload";
17
- BasedErrorCode[BasedErrorCode["PayloadTooLarge"] = 40002] = "PayloadTooLarge";
18
- BasedErrorCode[BasedErrorCode["ChunkTooLarge"] = 40003] = "ChunkTooLarge";
19
- BasedErrorCode[BasedErrorCode["UnsupportedContentEncoding"] = 40004] = "UnsupportedContentEncoding";
20
- BasedErrorCode[BasedErrorCode["NoBinaryProtocol"] = 40005] = "NoBinaryProtocol";
21
- BasedErrorCode[BasedErrorCode["LengthRequired"] = 41101] = "LengthRequired";
22
- BasedErrorCode[BasedErrorCode["MethodNotAllowed"] = 40501] = "MethodNotAllowed";
23
- })(BasedErrorCode = exports.BasedErrorCode || (exports.BasedErrorCode = {}));
24
- /*
25
- for functione errors
26
-
27
- // errorData.basedMessage =
28
- // typeof errorDefaults[basedCode]?.message === 'function'
29
- // ? errorDefaults[basedCode]?.message(err)
30
- // : errorDefaults[basedCode]?.message ||
31
- // errorDefaults[basedCode]?.status ||
32
- // 'Oops something went wrong'
33
- // if (payload && 'err' in payload && payload instanceof Error) {
34
- // Object.getOwnPropertyNames(payload.err).forEach((key: string) => {
35
- // errorData[key] = payload.err[key]
36
- // })
37
- // } else {
38
- // errorData.message = errorData.basedMessage
39
- // const captureTarget = { stack: null }
40
- // Error.captureStackTrace(captureTarget, createError)
41
- // errorData.stack = captureTarget.stack
42
- // }
43
- // }
44
- */
45
- const errorTypes = {
46
- [BasedErrorCode.FunctionError]: {
47
- statusCode: 500,
48
- statusMessage: 'Internal Server Error',
49
- message: (payload) => {
50
- // do it nice
51
- return `Error in function ${payload.route.name} [${payload.err.name}] ${payload.err.message}`;
52
- },
53
- },
54
- [BasedErrorCode.FunctionNotFound]: {
55
- statusCode: 404,
56
- statusMessage: 'Not Found',
57
- message: (payload) => `Function not found${payload.name ? ` '${payload.name}'` : ''}${payload.path ? ` path '${payload.path}'` : ''}`,
58
- },
59
- [BasedErrorCode.FunctionIsStream]: {
60
- statusCode: 400,
61
- statusMessage: 'Incorrect protocol',
62
- message: () => 'Cannot use stream functions over websockets',
63
- },
64
- [BasedErrorCode.CannotStreamToObservableFunction]: {
65
- statusCode: 404,
66
- statusMessage: 'Not Found',
67
- message: 'Cannot stream to observable function.',
68
- },
69
- [BasedErrorCode.AuthorizeFunctionError]: {
70
- statusCode: 403,
71
- statusMessage: 'Forbidden',
72
- message: 'Error in authorize function',
73
- },
74
- [BasedErrorCode.AuthorizeRejectedError]: {
75
- statusCode: 403,
76
- statusMessage: 'Forbidden',
77
- message: (payload) => `Authorize rejected access to ${payload.name}`,
78
- },
79
- [BasedErrorCode.InvalidPayload]: {
80
- statusCode: 400,
81
- statusMessage: 'Bad Request',
82
- message: (payload) => 'Invalid payload ' + payload.name,
83
- },
84
- [BasedErrorCode.NoBinaryProtocol]: {
85
- statusCode: 400,
86
- statusMessage: 'Protocol mismatch',
87
- message: () => 'Please upgrade to the latest based client',
88
- },
89
- [BasedErrorCode.PayloadTooLarge]: {
90
- statusCode: 413,
91
- status: 'Payload Too Large',
92
- message: (payload) => 'PayloadTooLarge ' + payload.name,
93
- },
94
- [BasedErrorCode.ChunkTooLarge]: {
95
- statusCode: 413,
96
- status: 'Payload Too Large',
97
- message: (payload) => 'ChunkTooLarge ' + payload.name,
98
- },
99
- [BasedErrorCode.UnsupportedContentEncoding]: {
100
- statusCode: 400,
101
- statusMessage: 'Incorrect content encoding',
102
- },
103
- [BasedErrorCode.LengthRequired]: { code: 411, status: 'Length Required' },
104
- [BasedErrorCode.MethodNotAllowed]: {
105
- statusCode: 405,
106
- statusMessage: 'Method Not Allowed',
107
- },
108
- [BasedErrorCode.NoOservableCacheAvailable]: {
109
- statusCode: 500,
110
- statusMessage: 'Internal Server Error',
111
- message: (payload) => `No observable cache available${payload.route.name} - ${payload.observableId}`,
112
- },
113
- };
114
- const isBasedFunctionRoute = (route) => {
115
- if (route && typeof route === 'object' && 'name' in route) {
116
- return true;
117
- }
118
- return false;
119
- };
120
- const EMPTY = {
121
- route: {
122
- name: 'no-route',
123
- },
124
- };
125
- const createError = (server, client, code, payload) => {
126
- const type = errorTypes[code];
127
- const route = !payload
128
- ? EMPTY.route
129
- : isBasedFunctionRoute(payload)
130
- ? payload
131
- : payload.route;
132
- const errorData = {
133
- code,
134
- statusCode: type.statusCode,
135
- statusMessage: type.statusMessage,
136
- message: typeof type.message === 'function' ? type.message(payload) : type.message,
137
- route,
138
- };
139
- if ('requestId' in payload) {
140
- errorData.requestId = payload.requestId;
141
- }
142
- if ('observableId' in payload) {
143
- errorData.observableId = payload.observableId;
144
- }
145
- server.emit('error', client, errorData);
146
- return errorData;
147
- };
148
- exports.createError = createError;
149
- //# sourceMappingURL=error.js.map
package/dist/error.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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"}
File without changes
@@ -1,5 +0,0 @@
1
- // add a few worker also handle errors of observables
2
- // think about making a dedicated worker for based client
3
- // also make a thing 'sticky worker'
4
- // cant get the server in a function like this , also not the client just PAYLOAD / OUTGOING PAYLOAD - outgoing
5
- //# sourceMappingURL=workerPool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workerPool.js","sourceRoot":"","sources":["../../src/functions/workerPool.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,yDAAyD;AACzD,oCAAoC;AAEpC,+GAA+G"}
@@ -1,3 +0,0 @@
1
- import { BasedServer } from '../../server';
2
- import { BasedFunctionRoute, HttpClient } from '../../types';
3
- export declare const authorizeRequest: (server: BasedServer, client: HttpClient, payload: any, route: BasedFunctionRoute, authorized: (payload: any) => void) => void;
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.authorizeRequest = void 0;
4
- const send_1 = require("./send");
5
- const error_1 = require("../../error");
6
- const authorizeRequest = (server, client, payload, route, authorized) => {
7
- server.auth
8
- .authorize(client.context, route.name, payload)
9
- .then((ok) => {
10
- if (!client.res) {
11
- return;
12
- }
13
- if (!ok) {
14
- (0, send_1.sendHttpError)(server, client, error_1.BasedErrorCode.AuthorizeRejectedError, route);
15
- }
16
- else {
17
- authorized(payload);
18
- }
19
- })
20
- .catch((err) => {
21
- (0, send_1.sendHttpError)(server, client, error_1.BasedErrorCode.AuthorizeFunctionError, {
22
- route,
23
- err,
24
- });
25
- });
26
- };
27
- exports.authorizeRequest = authorizeRequest;
28
- //# sourceMappingURL=authorize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authorize.js","sourceRoot":"","sources":["../../../src/network/http/authorize.ts"],"names":[],"mappings":";;;AAEA,iCAAsC;AACtC,uCAA4C;AAErC,MAAM,gBAAgB,GAAG,CAC9B,MAAmB,EACnB,MAAkB,EAClB,OAAY,EACZ,KAAyB,EACzB,UAAkC,EAClC,EAAE;IACF,MAAM,CAAC,IAAI;SACR,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;SAC9C,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;QACX,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YACf,OAAM;SACP;QACD,IAAI,CAAC,EAAE,EAAE;YACP,IAAA,oBAAa,EACX,MAAM,EACN,MAAM,EACN,sBAAc,CAAC,sBAAsB,EACrC,KAAK,CACN,CAAA;SACF;aAAM;YACL,UAAU,CAAC,OAAO,CAAC,CAAA;SACpB;IACH,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,IAAA,oBAAa,EAAC,MAAM,EAAE,MAAM,EAAE,sBAAc,CAAC,sBAAsB,EAAE;YACnE,KAAK;YACL,GAAG;SACJ,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACN,CAAC,CAAA;AA9BY,QAAA,gBAAgB,oBA8B5B"}
@@ -1,6 +0,0 @@
1
- /// <reference types="node" />
2
- import { HttpClient } from '../../types';
3
- export declare const compress: (client: HttpClient, payload: string | Buffer) => Promise<{
4
- payload: Buffer | string;
5
- encoding?: string;
6
- }>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/network/http/compress.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAC5B,yCAAqC;AAErC,6CAAoD;AAEpD,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,mBAAI,CAAC,OAAO,CAAC,CAAA;AACvC,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,mBAAI,CAAC,IAAI,CAAC,CAAA;AACjC,MAAM,EAAE,GAAG,IAAA,qBAAS,EAAC,mBAAI,CAAC,cAAc,CAAC,CAAA;AAEzC;;;;;EAKE;AAEF,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,8BAAmB,GAAG,GAAG,CAAC,CAAA;AAEzD,MAAM,QAAQ,GAAG,KAAK,EAC3B,MAAkB,EAClB,OAAwB,EACkC,EAAE;IAC5D,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;QACf,OAAM;KACP;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAA;IAEhD,IAAI,OAAO,YAAY,MAAM,IAAI,OAAO,CAAC,UAAU,IAAI,8BAAmB,EAAE;QAC1E,OAAO,EAAE,OAAO,EAAE,CAAA;KACnB;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,mBAAmB,EAAE;QACxC,OAAO,EAAE,OAAO,EAAE,CAAA;KACnB;IAED,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QAC5C,IAAI,gBAAwB,CAAA;QAC5B,IAAI,UAAkB,CAAA;QACtB,IAAI,CAAC,CAAC,OAAO,YAAY,MAAM,CAAC,EAAE;YAChC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SAC/B;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAChC,gBAAgB,GAAG,SAAS,CAAA;YAC5B,UAAU,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;SACpC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACpC,gBAAgB,GAAG,MAAM,CAAA;YACzB,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAA;SACjC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClC,gBAAgB,GAAG,IAAI,CAAA;YACvB,UAAU,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,CAAA;SAC/B;QACD,IAAI,UAAU,EAAE;YACd,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAA;SAC3D;KACF;IACD,OAAO,EAAE,OAAO,EAAE,CAAA;AACpB,CAAC,CAAA;AAvCY,QAAA,QAAQ,YAuCpB"}