knight-server 1.0.5 → 1.0.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.
- package/Server.d.ts +1 -1
- package/Server.d.ts.map +1 -1
- package/module/http/HttpRouter.d.ts +2 -2
- package/module/http/HttpRouter.d.ts.map +1 -1
- package/module/http/HttpRouter.js +1 -1
- package/module/http/HttpRouter.js.map +1 -1
- package/module/websocket/WebSocketRouter.d.ts +2 -2
- package/module/websocket/WebSocketRouter.d.ts.map +1 -1
- package/module/websocket/WebSocketRouter.js.map +1 -1
- package/package.json +1 -1
package/Server.d.ts
CHANGED
package/Server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGpH,UAAU;AACV,qBAAa,MAAM;IAEf,WAAW;IACX,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,WAAkB,QAAQ,WAA+F;IACzH,WAAW;
|
|
1
|
+
{"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGpH,UAAU;AACV,qBAAa,MAAM;IAEf,WAAW;IACX,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,WAAkB,QAAQ,WAA+F;IACzH,WAAW;IACJ,MAAM,EAAE,YAAY,CAAC;IAC5B,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,YAAY;IACZ,SAAgB,QAAQ,EAAE,cAAc,CAAC;IACzC,aAAa;IACb,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,kBAAkB;IAClB,SAAgB,SAAS,EAAE,eAAe,CAAC;IAC3C,WAAW;IACX,OAAO,CAAC,KAAK,CAAkB;IAE/B,WAAW;IACX,OAAO;IAaP,WAAW;IACE,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzD,WAAW;IACE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC,eAAe;YACD,YAAY;CAK7B;AACD,YAAY;AACZ,MAAM,WAAW,YAAY;IAEzB,YAAY;IACZ,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,kBAAkB;IAClB,SAAS,EAAE,eAAe,CAAC;IAE3B,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -5,10 +5,10 @@ import { Server } from "../../Server";
|
|
|
5
5
|
export declare abstract class HttpRouter extends AbstractRouter {
|
|
6
6
|
/** 构造函数 */
|
|
7
7
|
constructor(server: Server);
|
|
8
|
-
/** 鉴权处理 */
|
|
9
|
-
abstract OnCheck(request: HttpRequest, response: HttpResponse): Promise<boolean>;
|
|
10
8
|
/** 逻辑处理 */
|
|
11
9
|
OnHandler(request: HttpRequest, response: HttpResponse): Promise<void>;
|
|
10
|
+
/** 鉴权处理 */
|
|
11
|
+
abstract OnCheck(server: Server, request: HttpRequest, response: HttpResponse): Promise<boolean>;
|
|
12
12
|
/** Get方法逻辑处理函数 */
|
|
13
13
|
protected abstract OnGetHandler(server: Server, request: HttpRequest, response: HttpResponse): Promise<void>;
|
|
14
14
|
/** Post方法逻辑处理函数 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpRouter.d.ts","sourceRoot":"","sources":["../../../src/module/http/HttpRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,eAAe;AACf,8BAAsB,UAAW,SAAQ,cAAc;IAEnD,WAAW;gBACQ,MAAM,EAAE,MAAM;IAIjC,WAAW;
|
|
1
|
+
{"version":3,"file":"HttpRouter.d.ts","sourceRoot":"","sources":["../../../src/module/http/HttpRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,eAAe;AACf,8BAAsB,UAAW,SAAQ,cAAc;IAEnD,WAAW;gBACQ,MAAM,EAAE,MAAM;IAIjC,WAAW;IACE,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnF,WAAW;aACK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IACvG,kBAAkB;IAClB,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5G,mBAAmB;IACnB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7G,kBAAkB;IAClB,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5G,qBAAqB;IACrB,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/G,sBAAsB;IACtB,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAChH,mBAAmB;IACnB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7G,oBAAoB;IACpB,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9G,oBAAoB;IACpB,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAEvG,SAAS,IAAI,IAAI;CAI3B;AACD,eAAe;AACf,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;AAClC,eAAe;AACf,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC"}
|
|
@@ -21,7 +21,7 @@ class HttpRouter extends base_1.AbstractRouter {
|
|
|
21
21
|
// response.status(ResponseCode.UNAUTHORIZED).send("未认证,请先登录");
|
|
22
22
|
// return false;
|
|
23
23
|
// }
|
|
24
|
-
const check = await this.OnCheck(request, response);
|
|
24
|
+
const check = await this.OnCheck(this.server, request, response);
|
|
25
25
|
if (!check) {
|
|
26
26
|
response.status(utility_1.NetworkUtility.ResponseCode.UNAUTHORIZED).send("令牌无效,请先登录");
|
|
27
27
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpRouter.js","sourceRoot":"","sources":["../../../src/module/http/HttpRouter.ts"],"names":[],"mappings":";;;AACA,qCAA4C;AAC5C,2CAA8D;AAG9D,eAAe;AACf,MAAsB,UAAW,SAAQ,qBAAc;IAEnD,WAAW;IACX,YAAmB,MAAc;QAE7B,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"HttpRouter.js","sourceRoot":"","sources":["../../../src/module/http/HttpRouter.ts"],"names":[],"mappings":";;;AACA,qCAA4C;AAC5C,2CAA8D;AAG9D,eAAe;AACf,MAAsB,UAAW,SAAQ,qBAAc;IAEnD,WAAW;IACX,YAAmB,MAAc;QAE7B,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IACD,WAAW;IACJ,KAAK,CAAC,SAAS,CAAC,OAAoB,EAAE,QAAsB;QAE/D,IAAI,IAAI,IAAI,OAAO,IAAI,uBAAa,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3F,6BAA6B;QAC7B,uDAAuD;QACvD,8DAA8D;QAC9D,IAAI;QACJ,mEAAmE;QACnE,oBAAoB;QACpB,IAAI;QAEJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,QAAQ,CAAC,MAAM,CAAC,wBAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpG,iBAAiB;QACjB,QAAQ,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EACpC,CAAC;YACG,KAAK,wBAAc,CAAC,cAAc,CAAC,GAAG;gBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACjG,KAAK,wBAAc,CAAC,cAAc,CAAC,IAAI;gBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACnG,KAAK,wBAAc,CAAC,cAAc,CAAC,GAAG;gBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACjG,KAAK,wBAAc,CAAC,cAAc,CAAC,MAAM;gBAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACvG,KAAK,wBAAc,CAAC,cAAc,CAAC,OAAO;gBAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACzG,KAAK,wBAAc,CAAC,cAAc,CAAC,IAAI;gBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACnG,KAAK,wBAAc,CAAC,cAAc,CAAC,KAAK;gBAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACrG,KAAK,wBAAc,CAAC,cAAc,CAAC,KAAK;gBAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACrG,OAAO,CAAC,CAAC,OAAO;QACpB,CAAC;IACL,CAAC;IAoBM,SAAS;QAEZ,KAAK,CAAC,SAAS,EAAE,CAAC;IACtB,CAAC;CACJ;AA1DD,gCA0DC"}
|
|
@@ -9,8 +9,6 @@ export declare abstract class WebSocketRouter extends AbstractRouter {
|
|
|
9
9
|
private readonly clients;
|
|
10
10
|
/** 构造函数 */
|
|
11
11
|
constructor(server: Server);
|
|
12
|
-
/** 鉴权处理 */
|
|
13
|
-
abstract OnCheck(server: Server, url: URL): Promise<boolean>;
|
|
14
12
|
/** 逻辑处理 */
|
|
15
13
|
OnHandler(websocket: WS.WebSocket, request: IncomingMessage): Promise<void>;
|
|
16
14
|
/** 添加客户端 */
|
|
@@ -21,6 +19,8 @@ export declare abstract class WebSocketRouter extends AbstractRouter {
|
|
|
21
19
|
OnGetClient(key: string): WebSocketClient;
|
|
22
20
|
/** 获取所有客户端 */
|
|
23
21
|
OnGetClients(): Array<WebSocketClient>;
|
|
22
|
+
/** 鉴权处理 */
|
|
23
|
+
abstract OnCheck(server: Server, url: URL): Promise<boolean>;
|
|
24
24
|
/** 连接 */
|
|
25
25
|
abstract OnConnect(server: Server, client: WebSocketClient): Promise<void>;
|
|
26
26
|
/** 断开 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketRouter.d.ts","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,wBAAwB;AACxB,8BAAsB,eAAgB,SAAQ,cAAc;IAExD,WAAW;IACX,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,WAAW;gBACQ,MAAM,EAAE,MAAM;IAKjC,WAAW;
|
|
1
|
+
{"version":3,"file":"WebSocketRouter.d.ts","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,wBAAwB;AACxB,8BAAsB,eAAgB,SAAQ,cAAc;IAExD,WAAW;IACX,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,WAAW;gBACQ,MAAM,EAAE,MAAM;IAKjC,WAAW;IACE,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBxF,YAAY;IACZ,OAAO,CAAC,WAAW;IAKnB,YAAY;IACL,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK3C,YAAY;IACL,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAIhD,cAAc;IACP,YAAY,IAAI,KAAK,CAAC,eAAe,CAAC;IAK7C,WAAW;aACK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IACnE,SAAS;aACO,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IACjF,SAAS;aACO,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IACpF,SAAS;aACO,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACxF,SAAS,IAAI,IAAI;CAO3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketRouter.js","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketRouter.ts"],"names":[],"mappings":";;;AAEA,qCAA4C;AAC5C,uDAAoD;AACpD,2CAA8D;AAG9D,wBAAwB;AACxB,MAAsB,eAAgB,SAAQ,qBAAc;IAIxD,WAAW;IACX,YAAmB,MAAc;QAE7B,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACtD,CAAC;
|
|
1
|
+
{"version":3,"file":"WebSocketRouter.js","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketRouter.ts"],"names":[],"mappings":"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"}
|