vortez 5.0.3 → 6.0.0-dev.2

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 (144) hide show
  1. package/build/Template/Template.d.ts +0 -5
  2. package/build/Template/Template.js +5 -5
  3. package/build/Template/Template.js.map +1 -1
  4. package/build/Vortez.d.ts +2 -2
  5. package/build/Vortez.js +2 -2
  6. package/build/Vortez.js.map +1 -1
  7. package/build/beta/Mail.d.ts +2 -8
  8. package/build/beta/Mail.js +7 -2
  9. package/build/beta/Mail.js.map +1 -1
  10. package/build/server/Cookie.d.ts +9 -5
  11. package/build/server/Cookie.js +28 -24
  12. package/build/server/Cookie.js.map +1 -1
  13. package/build/server/LoggerManager.d.ts +1 -1
  14. package/build/server/LoggerManager.js +5 -5
  15. package/build/server/LoggerManager.js.map +1 -1
  16. package/build/server/Response.d.ts +6 -0
  17. package/build/server/Response.js +29 -12
  18. package/build/server/Response.js.map +1 -1
  19. package/build/server/Server.js +4 -4
  20. package/build/server/Server.js.map +1 -1
  21. package/build/server/ServerDebug.d.ts +1 -1
  22. package/build/server/ServerDebug.js +1 -1
  23. package/build/server/ServerDebug.js.map +1 -1
  24. package/build/server/config/Config.d.ts +109 -130
  25. package/build/server/config/Config.js +32 -43
  26. package/build/server/config/Config.js.map +1 -1
  27. package/build/server/config/Loader.js +5 -5
  28. package/build/server/config/Loader.js.map +1 -1
  29. package/build/server/router/HttpRule.d.ts +2 -2
  30. package/build/server/router/HttpRule.js +1 -1
  31. package/build/server/router/HttpRule.js.map +1 -1
  32. package/build/server/router/Router.d.ts +1 -1
  33. package/build/server/router/Router.js +5 -5
  34. package/build/server/router/Router.js.map +1 -1
  35. package/build/server/router/Rule.d.ts +1 -1
  36. package/build/server/router/WsRule.d.ts +2 -2
  37. package/build/server/router/WsRule.js +2 -2
  38. package/build/server/router/WsRule.js.map +1 -1
  39. package/build/server/router/algorithm/Algorithm.d.ts +1 -1
  40. package/build/server/router/algorithm/Algorithm.js +2 -2
  41. package/build/server/router/algorithm/Algorithm.js.map +1 -1
  42. package/build/server/router/algorithm/FIFO.d.ts +1 -1
  43. package/build/server/router/algorithm/FIFO.js +2 -2
  44. package/build/server/router/algorithm/FIFO.js.map +1 -1
  45. package/build/server/router/algorithm/Tree.d.ts +1 -1
  46. package/build/server/router/algorithm/Tree.js.map +1 -1
  47. package/build/server/router/middleware/Middleware.d.ts +5 -5
  48. package/build/server/router/middleware/WsMiddleware.d.ts +4 -4
  49. package/build/server/router/middleware/WsMiddleware.js +24 -23
  50. package/build/server/router/middleware/WsMiddleware.js.map +1 -1
  51. package/build/server/security/PathSecurity.js +5 -5
  52. package/build/server/security/PathSecurity.js.map +1 -1
  53. package/build/server/websocket/Codec.d.ts +128 -0
  54. package/build/server/websocket/Codec.js +192 -0
  55. package/build/server/websocket/Codec.js.map +1 -0
  56. package/build/server/websocket/Websocket.d.ts +38 -89
  57. package/build/server/websocket/Websocket.js +41 -249
  58. package/build/server/websocket/Websocket.js.map +1 -1
  59. package/build/server/websocket/WebsocketBase.d.ts +130 -0
  60. package/build/server/websocket/WebsocketBase.js +272 -0
  61. package/build/server/websocket/WebsocketBase.js.map +1 -0
  62. package/build/server/websocket/WebsocketCSInit.d.ts +57 -0
  63. package/build/server/websocket/WebsocketCSInit.js +95 -0
  64. package/build/server/websocket/WebsocketCSInit.js.map +1 -0
  65. package/build/server/websocket/WebsocketSSInit.d.ts +24 -0
  66. package/build/server/websocket/WebsocketSSInit.js +46 -0
  67. package/build/server/websocket/WebsocketSSInit.js.map +1 -0
  68. package/build/server/websocket/frame/Frame.d.ts +31 -0
  69. package/build/server/websocket/frame/Frame.js +45 -0
  70. package/build/server/websocket/frame/Frame.js.map +1 -0
  71. package/build/server/websocket/frame/Header.d.ts +31 -0
  72. package/build/server/websocket/frame/Header.js +31 -0
  73. package/build/server/websocket/frame/Header.js.map +1 -0
  74. package/build/server/websocket/frame/HeaderParser.d.ts +58 -0
  75. package/build/server/websocket/frame/HeaderParser.js +109 -0
  76. package/build/server/websocket/frame/HeaderParser.js.map +1 -0
  77. package/build/server/websocket/handshake/CSHandshaker.d.ts +46 -0
  78. package/build/server/websocket/handshake/CSHandshaker.js +122 -0
  79. package/build/server/websocket/handshake/CSHandshaker.js.map +1 -0
  80. package/build/server/websocket/handshake/SSHandshaker.d.ts +57 -0
  81. package/build/server/websocket/handshake/SSHandshaker.js +113 -0
  82. package/build/server/websocket/handshake/SSHandshaker.js.map +1 -0
  83. package/build/server/websocket/messageAssembler/Message.d.ts +21 -0
  84. package/build/server/websocket/messageAssembler/Message.js +20 -0
  85. package/build/server/websocket/messageAssembler/Message.js.map +1 -0
  86. package/build/server/websocket/messageAssembler/MessageAssembler.d.ts +25 -0
  87. package/build/server/websocket/messageAssembler/MessageAssembler.js +47 -0
  88. package/build/server/websocket/messageAssembler/MessageAssembler.js.map +1 -0
  89. package/changes.md +28 -0
  90. package/package.json +7 -2
  91. package/build/logger/Debug.d.ts +0 -174
  92. package/build/logger/Debug.js +0 -295
  93. package/build/logger/Debug.js.map +0 -1
  94. package/build/logger/Logger.d.ts +0 -38
  95. package/build/logger/Logger.js +0 -48
  96. package/build/logger/Logger.js.map +0 -1
  97. package/build/server/websocket/Chunk.d.ts +0 -36
  98. package/build/server/websocket/Chunk.js +0 -81
  99. package/build/server/websocket/Chunk.js.map +0 -1
  100. package/build/utilities/ConsoleUI.d.ts +0 -89
  101. package/build/utilities/ConsoleUI.js +0 -142
  102. package/build/utilities/ConsoleUI.js.map +0 -1
  103. package/build/utilities/DebugUI.d.ts +0 -66
  104. package/build/utilities/DebugUI.js +0 -98
  105. package/build/utilities/DebugUI.js.map +0 -1
  106. package/build/utilities/Encoding.d.ts +0 -22
  107. package/build/utilities/Encoding.js +0 -26
  108. package/build/utilities/Encoding.js.map +0 -1
  109. package/build/utilities/Env.d.ts +0 -81
  110. package/build/utilities/Env.js +0 -140
  111. package/build/utilities/Env.js.map +0 -1
  112. package/build/utilities/File.d.ts +0 -10
  113. package/build/utilities/File.js +0 -19
  114. package/build/utilities/File.js.map +0 -1
  115. package/build/utilities/Flatten.d.ts +0 -73
  116. package/build/utilities/Flatten.js +0 -76
  117. package/build/utilities/Flatten.js.map +0 -1
  118. package/build/utilities/Object.d.ts +0 -16
  119. package/build/utilities/Object.js +0 -48
  120. package/build/utilities/Object.js.map +0 -1
  121. package/build/utilities/Path.d.ts +0 -44
  122. package/build/utilities/Path.js +0 -69
  123. package/build/utilities/Path.js.map +0 -1
  124. package/build/utilities/Time.d.ts +0 -21
  125. package/build/utilities/Time.js +0 -25
  126. package/build/utilities/Time.js.map +0 -1
  127. package/build/utilities/Utilities.d.ts +0 -118
  128. package/build/utilities/Utilities.js +0 -112
  129. package/build/utilities/Utilities.js.map +0 -1
  130. package/build/utilities/schema/Introspection.d.ts +0 -24
  131. package/build/utilities/schema/Introspection.js +0 -87
  132. package/build/utilities/schema/Introspection.js.map +0 -1
  133. package/build/utilities/schema/JSONSchema.d.ts +0 -68
  134. package/build/utilities/schema/JSONSchema.js +0 -13
  135. package/build/utilities/schema/JSONSchema.js.map +0 -1
  136. package/build/utilities/schema/Schema.d.ts +0 -253
  137. package/build/utilities/schema/Schema.js +0 -241
  138. package/build/utilities/schema/Schema.js.map +0 -1
  139. package/build/utilities/schema/SchemaError.d.ts +0 -10
  140. package/build/utilities/schema/SchemaError.js +0 -13
  141. package/build/utilities/schema/SchemaError.js.map +0 -1
  142. package/build/utilities/schema/Validator.d.ts +0 -94
  143. package/build/utilities/schema/Validator.js +0 -246
  144. package/build/utilities/schema/Validator.js.map +0 -1
@@ -10,10 +10,10 @@ export class Algorithm {
10
10
  route(request, client) {
11
11
  if (client instanceof Response)
12
12
  return this.routeHttp(request, client);
13
- else if (client instanceof Websocket)
13
+ else if (client instanceof Websocket.WebsocketSSInit)
14
14
  return this.routeWebsocket(request, client);
15
15
  else
16
- throw new Error('Invalid client type');
16
+ throw new Error(`Invalid client type`);
17
17
  }
18
18
  }
19
19
  export default Algorithm;
@@ -1 +1 @@
1
- {"version":3,"file":"Algorithm.js","sourceRoot":"","sources":["../../../../src/server/router/algorithm/Algorithm.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,SAAS,MAAM,8BAA8B,CAAC;AAIrD,MAAM,OAAgB,SAAS;IAsB3B;;;;;OAKG;IACI,KAAK,CAAC,OAAgB,EAAE,MAA4B;QACvD,IAAI,MAAM,YAAY,QAAQ;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAClE,IAAI,MAAM,YAAY,SAAS;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;;YAC7E,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC;CACJ;AAID,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Algorithm.js","sourceRoot":"","sources":["../../../../src/server/router/algorithm/Algorithm.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,SAAS,MAAM,8BAA8B,CAAC;AAIrD,MAAM,OAAgB,SAAS;IAsB3B;;;;;OAKG;IACI,KAAK,CAAC,OAAgB,EAAE,MAA4C;QACvE,IAAI,MAAM,YAAY,QAAQ;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAClE,IAAI,MAAM,YAAY,SAAS,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;;YAC7F,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC;CACJ;AAID,eAAe,SAAS,CAAC"}
@@ -9,7 +9,7 @@ export declare class FIFO extends Algorithm {
9
9
  get allRules(): (HttpRule | WsRule)[];
10
10
  add(...rules: Algorithm.ruleType[]): Promise<void> | void;
11
11
  protected routeHttp(request: Request, client: Response): boolean;
12
- protected routeWebsocket(request: Request, client: Websocket): boolean;
12
+ protected routeWebsocket(request: Request, connection: Websocket.WebsocketSSInit): boolean;
13
13
  }
14
14
  export declare namespace FIFO { }
15
15
  export default FIFO;
@@ -12,11 +12,11 @@ export class FIFO extends Algorithm {
12
12
  rule.exec(request, client);
13
13
  return true;
14
14
  }
15
- routeWebsocket(request, client) {
15
+ routeWebsocket(request, connection) {
16
16
  const rule = this.rules.find((rule) => rule instanceof WsRule && rule.test(request));
17
17
  if (!rule)
18
18
  return false;
19
- rule.exec(request, client);
19
+ rule.exec(request, connection);
20
20
  return true;
21
21
  }
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FIFO.js","sourceRoot":"","sources":["../../../../src/server/router/algorithm/FIFO.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAKvC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,MAAM,OAAO,IAAK,SAAQ,SAAS;IACrB,KAAK,GAA0B,EAAE,CAAC;IAC5C,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,KAA2B,IAA0B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrF,SAAS,CAAC,OAAgB,EAAE,MAAgB;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAoB,EAAE,CAAC,IAAI,YAAY,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IACkB,cAAc,CAAC,OAAgB,EAAE,MAAiB;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,YAAY,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"FIFO.js","sourceRoot":"","sources":["../../../../src/server/router/algorithm/FIFO.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAKvC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,MAAM,OAAO,IAAK,SAAQ,SAAS;IACrB,KAAK,GAA0B,EAAE,CAAC;IAC5C,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,KAA2B,IAA0B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrF,SAAS,CAAC,OAAgB,EAAE,MAAgB;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAoB,EAAE,CAAC,IAAI,YAAY,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IACkB,cAAc,CAAC,OAAgB,EAAE,UAAqC;QACrF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,YAAY,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,eAAe,IAAI,CAAC"}
@@ -20,7 +20,7 @@ export declare class Tree extends Algorithm {
20
20
  * @param client - The client to route the request to.
21
21
  * @returns True if the request was routed, false otherwise.
22
22
  */
23
- protected routeWebsocket(request: Request, client: Websocket): boolean;
23
+ protected routeWebsocket(request: Request, client: Websocket.WebsocketSSInit): boolean;
24
24
  /**
25
25
  * Navigate to a route node.
26
26
  * @param request - The request to navigate to.
@@ -1 +1 @@
1
- {"version":3,"file":"Tree.js","sourceRoot":"","sources":["../../../../src/server/router/algorithm/Tree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tree.js","sourceRoot":"","sources":["../../../../src/server/router/algorithm/Tree.ts"],"names":[],"mappings":"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"}
@@ -62,14 +62,14 @@ export declare namespace Middleware {
62
62
  interface State {
63
63
  [key: string]: any;
64
64
  }
65
- type next = (error?: unknown) => void;
65
+ type next = (error?: unknown) => Promise<void>;
66
66
  namespace action {
67
- type http = (request: Request, response: Response, next: next, state: State) => void | Promise<void>;
68
- type ws = (request: Request, client: Websocket, next: next, state: State) => void | Promise<void>;
67
+ type http = (request: Request, response: Response, next: next, state: State) => Promise<void>;
68
+ type ws = (request: Request, client: Websocket.WebsocketSSInit, next: next, state: State) => Promise<void>;
69
69
  }
70
70
  namespace errorAction {
71
- type http = (error: unknown, request: Request, response: Response, next: next, state: State) => void | Promise<void>;
72
- type ws = (error: unknown, request: Request, client: Websocket, next: next, state: State) => void | Promise<void>;
71
+ type http = (error: unknown, request: Request, response: Response, next: next, state: State) => Promise<void>;
72
+ type ws = (error: unknown, request: Request, client: Websocket.WebsocketSSInit, next: next, state: State) => Promise<void>;
73
73
  }
74
74
  type action<Rule extends HttpRule | WsRule> = Rule extends WsRule ? action.ws : action.http;
75
75
  type errorAction<Rule extends HttpRule | WsRule> = Rule extends WsRule ? errorAction.ws : errorAction.http;
@@ -12,13 +12,13 @@ export declare class WsMiddleware extends Middleware<WsRule> {
12
12
  /**
13
13
  * Runs the middleware pipeline.
14
14
  * @param request The request received by the server.
15
- * @param client The WebSocket connection.
15
+ * @param websocket The WebSocket connection.
16
16
  * @param action The action to execute after the middleware pipeline.
17
17
  * @param state The state to pass to the middleware and action.
18
18
  */
19
- run(request: Request, client: Websocket, action: WsRule.action, state?: Middleware.State): Promise<void>;
20
- runError(error: unknown, request: Request, client: Websocket, state?: Middleware.State): Promise<void>;
21
- protected errorHandler(error: unknown, request: Request, client: Websocket): Promise<void>;
19
+ run(request: Request, websocket: Websocket.WebsocketSSInit, action: WsRule.action, state?: Middleware.State): Promise<void>;
20
+ runError(error: unknown, request: Request, websocket: Websocket.WebsocketSSInit, state?: Middleware.State): Promise<void>;
21
+ protected errorHandler(error: unknown, request: Request, websocket: Websocket.WebsocketSSInit): Promise<void>;
22
22
  }
23
23
  export declare namespace WsMiddleware { }
24
24
  export default WsMiddleware;
@@ -12,77 +12,78 @@ export class WsMiddleware extends Middleware {
12
12
  /**
13
13
  * Runs the middleware pipeline.
14
14
  * @param request The request received by the server.
15
- * @param client The WebSocket connection.
15
+ * @param websocket The WebSocket connection.
16
16
  * @param action The action to execute after the middleware pipeline.
17
17
  * @param state The state to pass to the middleware and action.
18
18
  */
19
- async run(request, client, action, state = {}) {
19
+ async run(request, websocket, action, state = {}) {
20
20
  try {
21
21
  let index = 0;
22
22
  const next = async (error) => {
23
23
  if (error)
24
24
  throw error;
25
- if (client.isClosed)
25
+ if (websocket.isClosed)
26
26
  return void logger.warn('websocket was closed when calling next()');
27
- if (client.status === 'rejected')
27
+ if (websocket.status === 'closed')
28
28
  return void logger.warn('websocket was rejected when calling next()');
29
29
  if (index >= this.pipeline.length) {
30
- if (client.status === 'pending')
31
- client.accept();
32
- return await action(request, client, state);
30
+ if (websocket.status === 'handshake')
31
+ websocket.accept();
32
+ await action(request, websocket, state);
33
+ return websocket.flush();
33
34
  }
34
35
  const current = this.pipeline[index++];
35
- return await current(request, client, next, state);
36
+ return await current(request, websocket, next, state);
36
37
  };
37
38
  await next();
38
39
  }
39
40
  catch (error) {
40
41
  if (this.errorPipeline.length === 0)
41
- return this.errorHandler(error, request, client);
42
+ return this.errorHandler(error, request, websocket);
42
43
  else
43
- return this.runError(error, request, client, state);
44
+ return this.runError(error, request, websocket, state);
44
45
  }
45
46
  }
46
- async runError(error, request, client, state = {}) {
47
+ async runError(error, request, websocket, state = {}) {
47
48
  try {
48
49
  let index = 0;
49
50
  const next = async (caughtError) => {
50
51
  if (caughtError)
51
52
  throw caughtError;
52
53
  if (index >= this.errorPipeline.length)
53
- return await this.errorHandler(error, request, client);
54
+ return await this.errorHandler(error, request, websocket);
54
55
  const current = this.errorPipeline[index++];
55
- return await current(error, request, client, next, state);
56
+ return await current(error, request, websocket, next, state);
56
57
  };
57
58
  await next();
58
59
  }
59
60
  catch (error) {
60
- return this.errorHandler(error, request, client);
61
+ return this.errorHandler(error, request, websocket);
61
62
  }
62
63
  }
63
- async errorHandler(error, request, client) {
64
+ async errorHandler(error, request, websocket) {
64
65
  if (error instanceof ServerError) {
65
66
  if (error.isSended)
66
67
  return;
67
- if (client.isClosed)
68
+ if (websocket.isClosed)
68
69
  return void logger.error(error);
69
- if (client.status !== 'pending')
70
+ if (websocket.status !== 'handshake')
70
71
  return;
71
- client.reject(error.status, error.message);
72
+ websocket.reject(error.status, error.message);
72
73
  }
73
74
  else if (error instanceof Error) {
74
75
  logger.error(error);
75
- if (client.isClosed || client.status !== 'pending')
76
+ if (websocket.isClosed || websocket.status !== 'handshake')
76
77
  return;
77
- client.reject(500, error.message);
78
+ websocket.reject(500, error.message);
78
79
  }
79
80
  else {
80
81
  logger.error(error);
81
- if (client.isClosed || client.status !== 'pending')
82
+ if (websocket.isClosed || websocket.status !== 'handshake')
82
83
  return;
83
- if (client.isClosed)
84
+ if (websocket.isClosed)
84
85
  return;
85
- client.reject(500, 'Internal Server Error');
86
+ websocket.reject(500, 'Internal Server Error');
86
87
  }
87
88
  }
88
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WsMiddleware.js","sourceRoot":"","sources":["../../../../src/server/router/middleware/WsMiddleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WsMiddleware.js","sourceRoot":"","sources":["../../../../src/server/router/middleware/WsMiddleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,aAAa,MAAM,wBAAwB,CAAC;AAEnD,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAGzC,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;AAE3C,MAAM,OAAO,YAAa,SAAQ,UAAkB;IACzC,KAAK,KAAmB,OAAO,IAAI,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG;;;;;;OAMG;IACI,KAAK,CAAC,GAAG,CAAC,OAAgB,EAAE,SAAoC,EAAE,MAAqB,EAAE,QAA0B,EAAE;QACxH,IAAI,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,IAAI,GAAoB,KAAK,EAAE,KAAe,EAAE,EAAE;gBACpD,IAAI,KAAK;oBAAE,MAAM,KAAK,CAAC;gBACvB,IAAI,SAAS,CAAC,QAAQ;oBAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;gBAC5F,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ;oBAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBACzG,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAChC,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW;wBAAE,SAAS,CAAC,MAAM,EAAE,CAAC;oBACzD,MAAM,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;oBACxC,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC;gBAC7B,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvC,OAAO,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC,CAAC;YACF,MAAM,IAAI,EAAE,CAAC;QACjB,CAAC;QAAC,OAAM,KAAK,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;;gBACpF,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;IACL,CAAC;IACM,KAAK,CAAC,QAAQ,CAAC,KAAc,EAAE,OAAgB,EAAE,SAAoC,EAAE,QAA0B,EAAE;QACtH,IAAI,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,IAAI,GAAoB,KAAK,EAAE,WAAqB,EAAE,EAAE;gBAC1D,IAAI,WAAW;oBAAE,MAAM,WAAW,CAAC;gBACnC,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM;oBAAE,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBAClG,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC5C,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACjE,CAAC,CAAC;YACF,MAAM,IAAI,EAAE,CAAC;QACjB,CAAC;QAAC,OAAM,KAAK,EAAE,CAAC;YAAC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAAC,CAAC;IAC3E,CAAC;IACS,KAAK,CAAC,YAAY,CAAC,KAAc,EAAE,OAAgB,EAAE,SAAoC;QAC/F,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,QAAQ;gBAAE,OAAO;YAC3B,IAAI,SAAS,CAAC,QAAQ;gBAAE,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW;gBAAE,OAAO;YAC7C,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW;gBAAE,OAAO;YACnE,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW;gBAAE,OAAO;YACnE,IAAI,SAAS,CAAC,QAAQ;gBAAE,OAAO;YAC/B,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;CACJ;AAED,eAAe,YAAY,CAAC"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import FS from 'fs';
7
7
  import PATH from 'path';
8
- import Utilities from '../../utilities/Utilities.js';
8
+ import { Path } from '@netfeez/common-node';
9
9
  export class PathSecurity {
10
10
  static maxRealPathCacheSize = 128;
11
11
  static realPathCache = new Map();
@@ -16,8 +16,8 @@ export class PathSecurity {
16
16
  * @returns A safe absolute path or null if the path escapes the base.
17
17
  */
18
18
  static async resolveInsideBase(base, plus) {
19
- base = Utilities.Path.resolve(base);
20
- plus = Utilities.Path.normalize(plus);
19
+ base = Path.resolve(base);
20
+ plus = Path.normalize(plus);
21
21
  if (this.hasTraversalUnderflow(plus))
22
22
  return null;
23
23
  const candidate = this.getCandidate(base, plus);
@@ -69,8 +69,8 @@ export class PathSecurity {
69
69
  */
70
70
  static getCandidate(base, plus) {
71
71
  plus = plus.replace(/^[\\/]+/, '');
72
- const candidate = Utilities.Path.join(base, plus);
73
- return Utilities.Path.resolve(candidate);
72
+ const candidate = Path.join(base, plus);
73
+ return Path.resolve(candidate);
74
74
  }
75
75
  /**
76
76
  * Retrieves a safe real path for the given base path, using caching to optimize performance while preventing cache overflow.
@@ -1 +1 @@
1
- {"version":3,"file":"PathSecurity.js","sourceRoot":"","sources":["../../../src/server/security/PathSecurity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PathSecurity.js","sourceRoot":"","sources":["../../../src/server/security/PathSecurity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ export declare class Codec {
2
+ /**
3
+ * Decodes a WebSocket frame's payload using the provided information about the frame.
4
+ *
5
+ * @param data - The complete WebSocket frame data to decode.
6
+ * @param bytesInfo - The number of bytes used for the frame's header and extended payload length.
7
+ * @param maskKeys - The masking keys if the frame is masked, or null if it is not masked.
8
+ * @return A Buffer containing the decoded payload data.
9
+ *
10
+ * Note: The `decode` method is designed for server use and expects the data to be unmasked.
11
+ * For **client-side** decoding, use `clientDecode` which can handle masked frames as per the WebSocket protocol requirements.
12
+ */
13
+ static decode(data: Buffer, bytesInfo: number, maskKeys?: Buffer | null): Buffer;
14
+ /**
15
+ * Encodes a WebSocket frame with the given data and opcode.
16
+ *
17
+ * By default, it encodes as a binary frame **(opcode 0x2)** without masking, suitable **for server-to-client** communication.
18
+ * For **client-to-server** communication, use `clientEncode` which applies masking as required by the WebSocket protocol.
19
+ *
20
+ * @param data - The payload data to encode.
21
+ * @param opCode - The opcode for the frame.
22
+ * @return A Buffer containing the encoded WebSocket frame.
23
+ *
24
+ * Note: The `encode` method is intended for server use and does not apply masking, while `clientEncode` should be used for **client-side** encoding to ensure compliance with the WebSocket protocol.
25
+ * |OpCode|Description|
26
+ * |:-----|:------------|
27
+ * | 0x0 | Continuation frame |
28
+ * | 0x1 | Text frame |
29
+ * | 0x2 | Binary frame |
30
+ * | 0x8 | Connection close frame |
31
+ * | 0x9 | Ping frame |
32
+ * | 0xA | Pong frame |
33
+
34
+ */
35
+ static encode(data: Buffer, opCode?: number): Buffer;
36
+ /**
37
+ * Encodes a WebSocket message into multiple frames when the payload is too large or when fragmentation is desired.
38
+ *
39
+ * The first frame keeps the provided opcode and the rest use opcode `0x0` continuation frames.
40
+ * The last frame is marked with FIN = 1.
41
+ *
42
+ * @param data - The payload data to encode.
43
+ * @param opCode - The opcode for the first frame.
44
+ * @param fragmentSize - The maximum payload size per frame.
45
+ * @return An array of encoded frames ready to be written in order.
46
+ */
47
+ static encodeFragments(data: Buffer, opCode?: number, fragmentSize?: number): Buffer[];
48
+ /**
49
+ * Encodes a WebSocket frame for **client-to-server** communication, applying masking as required by the WebSocket protocol.
50
+ * This method should be used when encoding frames on the client side, as it ensures that the payload is masked with a random 4-byte key, which is a requirement for frames sent from clients to servers.
51
+ *
52
+ * @param data - The payload data to encode.
53
+ * @param opCode - The opcode for the frame.
54
+ * @return A Buffer containing the encoded WebSocket frame with masking applied.
55
+ *
56
+ * Note: The `clientEncode` method is specifically designed for client-side use and applies masking to the payload, which is mandatory for frames sent from clients to servers according to the WebSocket protocol. For server-side encoding, use the `encode` method which does not apply masking.
57
+ * |OpCode|Description|
58
+ * |:-----|:------------|
59
+ * | 0x0 | Continuation frame |
60
+ * | 0x1 | Text frame |
61
+ * | 0x2 | Binary frame |
62
+ * | 0x8 | Connection close frame |
63
+ * | 0x9 | Ping frame |
64
+ * | 0xA | Pong frame |
65
+ */
66
+ static clientEncode(data: Buffer, opCode?: number): Buffer;
67
+ /**
68
+ * Encodes a client WebSocket message into multiple masked frames.
69
+ *
70
+ * @param data - The payload data to encode.
71
+ * @param opCode - The opcode for the first frame.
72
+ * @param fragmentSize - The maximum payload size per frame.
73
+ * @return An array of masked frames ready to be written in order.
74
+ */
75
+ static clientEncodeFragments(data: Buffer, opCode?: number, fragmentSize?: number): Buffer[];
76
+ /**
77
+ * Builds a WebSocket frame with the specified data, opcode, and masking option.
78
+ * This method is a helper function used by both `encode` and `clientEncode` to construct the WebSocket frame according to the protocol specifications.
79
+ * It handles the framing of the data, including setting the appropriate header fields based on the opcode and masking requirements.
80
+ *
81
+ * @param data - The payload data to include in the frame.
82
+ * @param opCode - The opcode for the frame, indicating the type of frame being sent.
83
+ * @param mask - A boolean indicating whether to apply masking to the payload (true for client-to-server frames, false for server-to-client frames).
84
+ * @return A Buffer containing the complete WebSocket frame ready for transmission.
85
+ *
86
+ * Note: The `buildFrame` method is an internal helper function and is not intended for direct use outside of the `Codec` class. It is responsible for constructing the WebSocket frame according to the protocol specifications, including handling the framing of the data and applying masking when required.
87
+ * |OpCode|Description|
88
+ * |:-----|:------------|
89
+ * | 0x0 | Continuation frame |
90
+ * | 0x1 | Text frame |
91
+ * | 0x2 | Binary frame |
92
+ * | 0x8 | Connection close frame |
93
+ * | 0x9 | Ping frame |
94
+ * | 0xA | Pong frame |
95
+ */
96
+ private static buildFrame;
97
+ /**
98
+ * Splits a payload into protocol-compliant WebSocket fragments.
99
+ *
100
+ * @param data - The payload data to fragment.
101
+ * @param opCode - The opcode for the first frame.
102
+ * @param mask - Whether the frames should be masked.
103
+ * @param fragmentSize - The maximum payload size per frame.
104
+ * @return An array of encoded frames.
105
+ */
106
+ private static buildFragments;
107
+ /**
108
+ * Applies a masking key to the given data using the XOR operation, as required by the WebSocket protocol for client-to-server frames.
109
+ * This method takes the payload data and the masking key, and returns a new Buffer containing the masked data.
110
+ * The masking is performed by XORing each byte of the payload with the corresponding byte of the masking key, which is repeated as necessary.
111
+ *
112
+ * @param data - The payload data to be masked.
113
+ * @param maskKey - The 4-byte masking key to apply to the data.
114
+ * @return A Buffer containing the masked payload data.
115
+ *
116
+ * Note: The `applyMask` method is an internal helper function used by the `buildFrame` method when encoding client-to-server frames. It is responsible for applying the masking to the payload data according to the WebSocket protocol specifications.
117
+ */
118
+ private static applyMask;
119
+ /**
120
+ * Decodes the payload of a WebSocket frame, applying the masking key if the frame is masked.
121
+ * This method takes the complete frame data, the number of bytes used for the header and extended payload length, and the masking keys if applicable.
122
+ * It returns a Buffer containing the decoded payload data, which is obtained by applying the XOR operation with the masking keys if the frame is masked, or by simply slicing the data if it is not masked.
123
+ *
124
+ * @param data - The complete WebSocket frame data to decode.
125
+ */
126
+ private static decodePayload;
127
+ }
128
+ export default Codec;
@@ -0,0 +1,192 @@
1
+ /**
2
+ * @author NetFeez <netfeez.dev@gmail.com>
3
+ * @description WebSocket frame codec for Vortez.
4
+ * @license Apache-2.0
5
+ */
6
+ import CRYPTO from 'crypto';
7
+ export class Codec {
8
+ /**
9
+ * Decodes a WebSocket frame's payload using the provided information about the frame.
10
+ *
11
+ * @param data - The complete WebSocket frame data to decode.
12
+ * @param bytesInfo - The number of bytes used for the frame's header and extended payload length.
13
+ * @param maskKeys - The masking keys if the frame is masked, or null if it is not masked.
14
+ * @return A Buffer containing the decoded payload data.
15
+ *
16
+ * Note: The `decode` method is designed for server use and expects the data to be unmasked.
17
+ * For **client-side** decoding, use `clientDecode` which can handle masked frames as per the WebSocket protocol requirements.
18
+ */
19
+ static decode(data, bytesInfo, maskKeys) {
20
+ return Codec.decodePayload(data, bytesInfo, maskKeys ?? null);
21
+ }
22
+ /**
23
+ * Encodes a WebSocket frame with the given data and opcode.
24
+ *
25
+ * By default, it encodes as a binary frame **(opcode 0x2)** without masking, suitable **for server-to-client** communication.
26
+ * For **client-to-server** communication, use `clientEncode` which applies masking as required by the WebSocket protocol.
27
+ *
28
+ * @param data - The payload data to encode.
29
+ * @param opCode - The opcode for the frame.
30
+ * @return A Buffer containing the encoded WebSocket frame.
31
+ *
32
+ * Note: The `encode` method is intended for server use and does not apply masking, while `clientEncode` should be used for **client-side** encoding to ensure compliance with the WebSocket protocol.
33
+ * |OpCode|Description|
34
+ * |:-----|:------------|
35
+ * | 0x0 | Continuation frame |
36
+ * | 0x1 | Text frame |
37
+ * | 0x2 | Binary frame |
38
+ * | 0x8 | Connection close frame |
39
+ * | 0x9 | Ping frame |
40
+ * | 0xA | Pong frame |
41
+
42
+ */
43
+ static encode(data, opCode = 0x2) {
44
+ return Codec.buildFrame(data, opCode, false, true);
45
+ }
46
+ /**
47
+ * Encodes a WebSocket message into multiple frames when the payload is too large or when fragmentation is desired.
48
+ *
49
+ * The first frame keeps the provided opcode and the rest use opcode `0x0` continuation frames.
50
+ * The last frame is marked with FIN = 1.
51
+ *
52
+ * @param data - The payload data to encode.
53
+ * @param opCode - The opcode for the first frame.
54
+ * @param fragmentSize - The maximum payload size per frame.
55
+ * @return An array of encoded frames ready to be written in order.
56
+ */
57
+ static encodeFragments(data, opCode = 0x2, fragmentSize = 16384) {
58
+ return Codec.buildFragments(data, opCode, false, fragmentSize);
59
+ }
60
+ /**
61
+ * Encodes a WebSocket frame for **client-to-server** communication, applying masking as required by the WebSocket protocol.
62
+ * This method should be used when encoding frames on the client side, as it ensures that the payload is masked with a random 4-byte key, which is a requirement for frames sent from clients to servers.
63
+ *
64
+ * @param data - The payload data to encode.
65
+ * @param opCode - The opcode for the frame.
66
+ * @return A Buffer containing the encoded WebSocket frame with masking applied.
67
+ *
68
+ * Note: The `clientEncode` method is specifically designed for client-side use and applies masking to the payload, which is mandatory for frames sent from clients to servers according to the WebSocket protocol. For server-side encoding, use the `encode` method which does not apply masking.
69
+ * |OpCode|Description|
70
+ * |:-----|:------------|
71
+ * | 0x0 | Continuation frame |
72
+ * | 0x1 | Text frame |
73
+ * | 0x2 | Binary frame |
74
+ * | 0x8 | Connection close frame |
75
+ * | 0x9 | Ping frame |
76
+ * | 0xA | Pong frame |
77
+ */
78
+ static clientEncode(data, opCode = 0x2) {
79
+ return Codec.buildFrame(data, opCode, true, true);
80
+ }
81
+ /**
82
+ * Encodes a client WebSocket message into multiple masked frames.
83
+ *
84
+ * @param data - The payload data to encode.
85
+ * @param opCode - The opcode for the first frame.
86
+ * @param fragmentSize - The maximum payload size per frame.
87
+ * @return An array of masked frames ready to be written in order.
88
+ */
89
+ static clientEncodeFragments(data, opCode = 0x2, fragmentSize = 16384) {
90
+ return Codec.buildFragments(data, opCode, true, fragmentSize);
91
+ }
92
+ /**
93
+ * Builds a WebSocket frame with the specified data, opcode, and masking option.
94
+ * This method is a helper function used by both `encode` and `clientEncode` to construct the WebSocket frame according to the protocol specifications.
95
+ * It handles the framing of the data, including setting the appropriate header fields based on the opcode and masking requirements.
96
+ *
97
+ * @param data - The payload data to include in the frame.
98
+ * @param opCode - The opcode for the frame, indicating the type of frame being sent.
99
+ * @param mask - A boolean indicating whether to apply masking to the payload (true for client-to-server frames, false for server-to-client frames).
100
+ * @return A Buffer containing the complete WebSocket frame ready for transmission.
101
+ *
102
+ * Note: The `buildFrame` method is an internal helper function and is not intended for direct use outside of the `Codec` class. It is responsible for constructing the WebSocket frame according to the protocol specifications, including handling the framing of the data and applying masking when required.
103
+ * |OpCode|Description|
104
+ * |:-----|:------------|
105
+ * | 0x0 | Continuation frame |
106
+ * | 0x1 | Text frame |
107
+ * | 0x2 | Binary frame |
108
+ * | 0x8 | Connection close frame |
109
+ * | 0x9 | Ping frame |
110
+ * | 0xA | Pong frame |
111
+ */
112
+ static buildFrame(data, opCode, mask, fin) {
113
+ const header = [(fin ? 0x80 : 0x00) | (opCode & 0x0f)];
114
+ const length = data.length;
115
+ let maskKey = null;
116
+ if (length <= 125) {
117
+ header.push((mask ? 0x80 : 0x00) | length);
118
+ }
119
+ else if (length <= 65535) {
120
+ header.push((mask ? 0x80 : 0x00) | 126, (length >> 8) & 255, length & 255);
121
+ }
122
+ else {
123
+ header.push((mask ? 0x80 : 0x00) | 127);
124
+ const extendedLength = BigInt(length);
125
+ for (let shift = 56n; shift >= 0n; shift -= 8n) {
126
+ header.push(Number((extendedLength >> shift) & 0xffn));
127
+ }
128
+ }
129
+ const payload = mask ? Codec.applyMask(data, maskKey = CRYPTO.randomBytes(4)) : data;
130
+ return Buffer.concat(maskKey ? [Buffer.from(header), maskKey, payload] : [Buffer.from(header), payload]);
131
+ }
132
+ /**
133
+ * Splits a payload into protocol-compliant WebSocket fragments.
134
+ *
135
+ * @param data - The payload data to fragment.
136
+ * @param opCode - The opcode for the first frame.
137
+ * @param mask - Whether the frames should be masked.
138
+ * @param fragmentSize - The maximum payload size per frame.
139
+ * @return An array of encoded frames.
140
+ */
141
+ static buildFragments(data, opCode, mask, fragmentSize) {
142
+ if (fragmentSize < 1)
143
+ throw new RangeError('fragmentSize must be greater than 0');
144
+ if (data.length === 0)
145
+ return [Codec.buildFrame(data, opCode, mask, true)];
146
+ const frames = [];
147
+ for (let offset = 0, index = 0; offset < data.length; offset += fragmentSize, index++) {
148
+ const chunk = data.subarray(offset, offset + fragmentSize);
149
+ const isFirst = index === 0;
150
+ const isLast = offset + fragmentSize >= data.length;
151
+ const frameOpCode = isFirst ? opCode : 0x0;
152
+ frames.push(Codec.buildFrame(chunk, frameOpCode, mask, isLast));
153
+ }
154
+ return frames;
155
+ }
156
+ /**
157
+ * Applies a masking key to the given data using the XOR operation, as required by the WebSocket protocol for client-to-server frames.
158
+ * This method takes the payload data and the masking key, and returns a new Buffer containing the masked data.
159
+ * The masking is performed by XORing each byte of the payload with the corresponding byte of the masking key, which is repeated as necessary.
160
+ *
161
+ * @param data - The payload data to be masked.
162
+ * @param maskKey - The 4-byte masking key to apply to the data.
163
+ * @return A Buffer containing the masked payload data.
164
+ *
165
+ * Note: The `applyMask` method is an internal helper function used by the `buildFrame` method when encoding client-to-server frames. It is responsible for applying the masking to the payload data according to the WebSocket protocol specifications.
166
+ */
167
+ static applyMask(data, maskKey) {
168
+ const masked = Buffer.allocUnsafe(data.length);
169
+ for (let index = 0; index < data.length; index++) {
170
+ masked[index] = data[index] ^ maskKey[index % 4];
171
+ }
172
+ return masked;
173
+ }
174
+ /**
175
+ * Decodes the payload of a WebSocket frame, applying the masking key if the frame is masked.
176
+ * This method takes the complete frame data, the number of bytes used for the header and extended payload length, and the masking keys if applicable.
177
+ * It returns a Buffer containing the decoded payload data, which is obtained by applying the XOR operation with the masking keys if the frame is masked, or by simply slicing the data if it is not masked.
178
+ *
179
+ * @param data - The complete WebSocket frame data to decode.
180
+ */
181
+ static decodePayload(data, bytesInfo, maskKeys) {
182
+ if (!maskKeys)
183
+ return data.subarray(bytesInfo);
184
+ const payload = Buffer.allocUnsafe(data.length - bytesInfo);
185
+ for (let index = bytesInfo, payloadIndex = 0; index < data.length; index++, payloadIndex++) {
186
+ payload[payloadIndex] = data[index] ^ maskKeys[payloadIndex % 4];
187
+ }
188
+ return payload;
189
+ }
190
+ }
191
+ export default Codec;
192
+ //# sourceMappingURL=Codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Codec.js","sourceRoot":"","sources":["../../../src/server/websocket/Codec.ts"],"names":[],"mappings":"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"}