@mingzey/typedrpc 1.0.0

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 (96) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +228 -0
  3. package/README.zh-CN.md +228 -0
  4. package/dist/api.d.ts +16 -0
  5. package/dist/api.d.ts.map +1 -0
  6. package/dist/api.js +52 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/client.d.ts +28 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +50 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/connecitons/basic.d.ts +42 -0
  13. package/dist/connecitons/basic.d.ts.map +1 -0
  14. package/dist/connecitons/basic.js +9 -0
  15. package/dist/connecitons/basic.js.map +1 -0
  16. package/dist/connecitons/http.d.ts +38 -0
  17. package/dist/connecitons/http.d.ts.map +1 -0
  18. package/dist/connecitons/http.js +143 -0
  19. package/dist/connecitons/http.js.map +1 -0
  20. package/dist/connecitons/socket.d.ts +33 -0
  21. package/dist/connecitons/socket.d.ts.map +1 -0
  22. package/dist/connecitons/socket.js +210 -0
  23. package/dist/connecitons/socket.js.map +1 -0
  24. package/dist/connecitons/socketio.d.ts +32 -0
  25. package/dist/connecitons/socketio.d.ts.map +1 -0
  26. package/dist/connecitons/socketio.js +162 -0
  27. package/dist/connecitons/socketio.js.map +1 -0
  28. package/dist/connection.d.ts +5 -0
  29. package/dist/connection.d.ts.map +1 -0
  30. package/dist/connection.js +5 -0
  31. package/dist/connection.js.map +1 -0
  32. package/dist/context.d.ts +13 -0
  33. package/dist/context.d.ts.map +1 -0
  34. package/dist/context.js +2 -0
  35. package/dist/context.js.map +1 -0
  36. package/dist/core.d.ts +40 -0
  37. package/dist/core.d.ts.map +1 -0
  38. package/dist/core.js +97 -0
  39. package/dist/core.js.map +1 -0
  40. package/dist/define.d.ts +14 -0
  41. package/dist/define.d.ts.map +1 -0
  42. package/dist/define.js +40 -0
  43. package/dist/define.js.map +1 -0
  44. package/dist/handler.d.ts +30 -0
  45. package/dist/handler.d.ts.map +1 -0
  46. package/dist/handler.js +172 -0
  47. package/dist/handler.js.map +1 -0
  48. package/dist/index.d.ts +15 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +14 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/packet.d.ts +36 -0
  53. package/dist/packet.d.ts.map +1 -0
  54. package/dist/packet.js +40 -0
  55. package/dist/packet.js.map +1 -0
  56. package/dist/server.d.ts +34 -0
  57. package/dist/server.d.ts.map +1 -0
  58. package/dist/server.js +51 -0
  59. package/dist/server.js.map +1 -0
  60. package/dist/test/TestCase.d.ts +6 -0
  61. package/dist/test/TestCase.d.ts.map +1 -0
  62. package/dist/test/TestCase.js +5 -0
  63. package/dist/test/TestCase.js.map +1 -0
  64. package/dist/test/authorization.d.ts +8 -0
  65. package/dist/test/authorization.d.ts.map +1 -0
  66. package/dist/test/authorization.js +169 -0
  67. package/dist/test/authorization.js.map +1 -0
  68. package/dist/test/basic.d.ts +7 -0
  69. package/dist/test/basic.d.ts.map +1 -0
  70. package/dist/test/basic.js +35 -0
  71. package/dist/test/basic.js.map +1 -0
  72. package/dist/test/context.d.ts +7 -0
  73. package/dist/test/context.d.ts.map +1 -0
  74. package/dist/test/context.js +55 -0
  75. package/dist/test/context.js.map +1 -0
  76. package/dist/test/expressmix.d.ts +7 -0
  77. package/dist/test/expressmix.d.ts.map +1 -0
  78. package/dist/test/expressmix.js +63 -0
  79. package/dist/test/expressmix.js.map +1 -0
  80. package/dist/test/full-duplex.d.ts +12 -0
  81. package/dist/test/full-duplex.d.ts.map +1 -0
  82. package/dist/test/full-duplex.js +77 -0
  83. package/dist/test/full-duplex.js.map +1 -0
  84. package/dist/test/socket.d.ts +8 -0
  85. package/dist/test/socket.d.ts.map +1 -0
  86. package/dist/test/socket.js +71 -0
  87. package/dist/test/socket.js.map +1 -0
  88. package/dist/test.d.ts +2 -0
  89. package/dist/test.d.ts.map +1 -0
  90. package/dist/test.js +33 -0
  91. package/dist/test.js.map +1 -0
  92. package/dist/utils.d.ts +40 -0
  93. package/dist/utils.d.ts.map +1 -0
  94. package/dist/utils.js +46 -0
  95. package/dist/utils.js.map +1 -0
  96. package/package.json +27 -0
@@ -0,0 +1,15 @@
1
+ import { TypeRPCClient } from './client.js';
2
+ import { TypeRPCServer } from './server.js';
3
+ import { TypeRPCAPIDefine } from './define.js';
4
+ import { TypeRPCConnectionDefault, TypeRPCConnectionProviderDefault } from './connection.js';
5
+ import { TypeRPCHandlerMiddleware } from './handler.js';
6
+ import { TypeRPCPacketFactory } from './packet.js';
7
+ import { TypeRPCContextSymbol, type TypeRPCContext, type TypeRPCContextAware } from './context.js';
8
+ import { TypeRPCConnection, TypeRPCConnectionProvider } from './connecitons/basic.js';
9
+ import { TypeRPCConnectionHTTP, TypeRPCConnectionProviderHTTP } from './connecitons/http.js';
10
+ import { TypeRPCConnectionProviderSocket, TypeRPCConnectionSocket } from './connecitons/socket.js';
11
+ import { TypeRPCConnectionSocketIO } from './connecitons/socketio.js';
12
+ import { TypeRPCConnectionProviderSocketIO } from './connecitons/socketio.js';
13
+ export type { TypeRPCContext, TypeRPCContextAware, };
14
+ export { TypeRPCClient, TypeRPCServer, TypeRPCAPIDefine, TypeRPCConnection, TypeRPCConnectionProvider, TypeRPCConnectionDefault, TypeRPCConnectionProviderDefault, TypeRPCConnectionHTTP, TypeRPCConnectionProviderHTTP, TypeRPCConnectionSocket, TypeRPCConnectionProviderSocket, TypeRPCConnectionSocketIO, TypeRPCConnectionProviderSocketIO, TypeRPCHandlerMiddleware, TypeRPCPacketFactory, TypeRPCContextSymbol, };
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAE9E,YAAY,EACR,cAAc,EACd,mBAAmB,GACtB,CAAA;AAED,OAAO,EACH,aAAa,EACb,aAAa,EACb,gBAAgB,EAEhB,iBAAiB,EACjB,yBAAyB,EAEzB,wBAAwB,EACxB,gCAAgC,EAChC,qBAAqB,EACrB,6BAA6B,EAC7B,uBAAuB,EACvB,+BAA+B,EAC/B,yBAAyB,EACzB,iCAAiC,EAGjC,wBAAwB,EACxB,oBAAoB,EAEpB,oBAAoB,GACvB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ import { TypeRPCClient } from './client.js';
2
+ import { TypeRPCServer } from './server.js';
3
+ import { TypeRPCAPIDefine } from './define.js';
4
+ import { TypeRPCConnectionDefault, TypeRPCConnectionProviderDefault } from './connection.js';
5
+ import { TypeRPCHandlerMiddleware } from './handler.js';
6
+ import { TypeRPCPacketFactory } from './packet.js';
7
+ import { TypeRPCContextSymbol } from './context.js';
8
+ import { TypeRPCConnection, TypeRPCConnectionProvider } from './connecitons/basic.js';
9
+ import { TypeRPCConnectionHTTP, TypeRPCConnectionProviderHTTP } from './connecitons/http.js';
10
+ import { TypeRPCConnectionProviderSocket, TypeRPCConnectionSocket } from './connecitons/socket.js';
11
+ import { TypeRPCConnectionSocketIO } from './connecitons/socketio.js';
12
+ import { TypeRPCConnectionProviderSocketIO } from './connecitons/socketio.js';
13
+ export { TypeRPCClient, TypeRPCServer, TypeRPCAPIDefine, TypeRPCConnection, TypeRPCConnectionProvider, TypeRPCConnectionDefault, TypeRPCConnectionProviderDefault, TypeRPCConnectionHTTP, TypeRPCConnectionProviderHTTP, TypeRPCConnectionSocket, TypeRPCConnectionProviderSocket, TypeRPCConnectionSocketIO, TypeRPCConnectionProviderSocketIO, TypeRPCHandlerMiddleware, TypeRPCPacketFactory, TypeRPCContextSymbol, };
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAiD,MAAM,cAAc,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAO9E,OAAO,EACH,aAAa,EACb,aAAa,EACb,gBAAgB,EAEhB,iBAAiB,EACjB,yBAAyB,EAEzB,wBAAwB,EACxB,gCAAgC,EAChC,qBAAqB,EACrB,6BAA6B,EAC7B,uBAAuB,EACvB,+BAA+B,EAC/B,yBAAyB,EACzB,iCAAiC,EAGjC,wBAAwB,EACxB,oBAAoB,EAEpB,oBAAoB,GACvB,CAAA"}
@@ -0,0 +1,36 @@
1
+ export interface TypeRPCPacket {
2
+ id: string;
3
+ type: string;
4
+ meta?: {
5
+ [key: string]: any;
6
+ };
7
+ }
8
+ export interface TypeRPCRequestPacket extends TypeRPCPacket {
9
+ type: 'request';
10
+ serviceName: string;
11
+ methodName: string;
12
+ args: any[];
13
+ }
14
+ export interface TypeRPCResponsePacket extends TypeRPCPacket {
15
+ type: 'response';
16
+ requestId: string;
17
+ result?: any;
18
+ error?: any;
19
+ }
20
+ export declare class TypeRPCPacketFactory {
21
+ static createID(): string;
22
+ static createRequestPacket(data: {
23
+ serviceName: string;
24
+ methodName: string;
25
+ args: any[];
26
+ }): TypeRPCRequestPacket;
27
+ static createResponsePacket(data: {
28
+ requestId: string;
29
+ result?: any;
30
+ error?: any;
31
+ }): TypeRPCResponsePacket;
32
+ static isPacket(data: any): data is TypeRPCPacket;
33
+ static isRequestPacket(data: any): data is TypeRPCRequestPacket;
34
+ static isResponsePacket(data: any): data is TypeRPCResponsePacket;
35
+ }
36
+ //# sourceMappingURL=packet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../src/packet.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAC,MAAM,CAAC;IACV,IAAI,EAAC,MAAM,CAAC;IACZ,IAAI,CAAC,EAAC;QAAC,CAAC,GAAG,EAAC,MAAM,GAAE,GAAG,CAAA;KAAC,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACvD,IAAI,EAAC,SAAS,CAAC;IACf,WAAW,EAAC,MAAM,CAAC;IACnB,UAAU,EAAC,MAAM,CAAC;IAClB,IAAI,EAAC,GAAG,EAAE,CAAC;CACd;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IACxD,IAAI,EAAC,UAAU,CAAC;IAChB,SAAS,EAAC,MAAM,CAAC;IACjB,MAAM,CAAC,EAAC,GAAG,CAAC;IACZ,KAAK,CAAC,EAAC,GAAG,CAAC;CACd;AAID,qBAAa,oBAAoB;IAE7B,MAAM,CAAC,QAAQ,IAAG,MAAM;IAIxB,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAC;QAC5B,WAAW,EAAC,MAAM,CAAC;QACnB,UAAU,EAAC,MAAM,CAAC;QAClB,IAAI,EAAC,GAAG,EAAE,CAAA;KACb,GAAE,oBAAoB;IAUvB,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAC;QAC7B,SAAS,EAAC,MAAM,CAAC;QACjB,MAAM,CAAC,EAAC,GAAG,CAAC;QACZ,KAAK,CAAC,EAAC,GAAG,CAAC;KACd,GAAE,qBAAqB;IAUxB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAC,GAAG,GAAE,IAAI,IAAI,aAAa;IAI/C,MAAM,CAAC,eAAe,CAAC,IAAI,EAAC,GAAG,GAAE,IAAI,IAAI,oBAAoB;IAO7D,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAC,GAAG,GAAE,IAAI,IAAI,qBAAqB;CAMlE"}
package/dist/packet.js ADDED
@@ -0,0 +1,40 @@
1
+ import { IdMaker } from "./utils.js";
2
+ export class TypeRPCPacketFactory {
3
+ static createID() {
4
+ return IdMaker.makeId();
5
+ }
6
+ static createRequestPacket(data) {
7
+ return {
8
+ id: TypeRPCPacketFactory.createID(),
9
+ type: 'request',
10
+ serviceName: data.serviceName,
11
+ methodName: data.methodName,
12
+ args: data.args,
13
+ };
14
+ }
15
+ static createResponsePacket(data) {
16
+ return {
17
+ id: TypeRPCPacketFactory.createID(),
18
+ type: 'response',
19
+ requestId: data.requestId,
20
+ result: data.result,
21
+ error: data.error,
22
+ };
23
+ }
24
+ static isPacket(data) {
25
+ return data && typeof data === 'object' && 'id' in data && 'type' in data;
26
+ }
27
+ static isRequestPacket(data) {
28
+ if (!TypeRPCPacketFactory.isPacket(data)) {
29
+ return false;
30
+ }
31
+ return data.type === 'request';
32
+ }
33
+ static isResponsePacket(data) {
34
+ if (!TypeRPCPacketFactory.isPacket(data)) {
35
+ return false;
36
+ }
37
+ return data.type === 'response';
38
+ }
39
+ }
40
+ //# sourceMappingURL=packet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet.js","sourceRoot":"","sources":["../src/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAwBrC,MAAM,OAAO,oBAAoB;IAE7B,MAAM,CAAC,QAAQ;QACX,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,IAI1B;QACG,OAAO;YACH,EAAE,EAAC,oBAAoB,CAAC,QAAQ,EAAE;YAClC,IAAI,EAAC,SAAS;YACd,WAAW,EAAC,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAC,IAAI,CAAC,UAAU;YAC1B,IAAI,EAAC,IAAI,CAAC,IAAI;SACjB,CAAA;IACL,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,IAI3B;QACG,OAAO;YACH,EAAE,EAAC,oBAAoB,CAAC,QAAQ,EAAE;YAClC,IAAI,EAAC,UAAU;YACf,SAAS,EAAC,IAAI,CAAC,SAAS;YACxB,MAAM,EAAC,IAAI,CAAC,MAAM;YAClB,KAAK,EAAC,IAAI,CAAC,KAAK;SACnB,CAAA;IACL,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAQ;QACpB,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAQ;QAC3B,IAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,CAAC;YACrC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,IAAQ;QAC5B,IAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,CAAC;YACrC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;IACpC,CAAC;CACJ"}
@@ -0,0 +1,34 @@
1
+ import type { TypeRPCConnection, TypeRPCConnectionProvider } from "./connecitons/basic.js";
2
+ import { TypeRPCCore } from "./core.js";
3
+ import { TypeRPCAPIDefine } from "./define.js";
4
+ import { TypedEmitter, type TypeRPCDefineMethodBody, type TypeRPCDefineMethodName, type TypeRPCDefineServiceInstance, type TypeRPCDefineServiceName, type TypeRPCDefineToTypeRPCAPI } from "./utils.js";
5
+ type TypeRPCServerConfig<T extends TypeRPCAPIDefine<any>, R extends TypeRPCAPIDefine<any>> = {
6
+ local?: T;
7
+ remote?: R;
8
+ connection?: {
9
+ provider: TypeRPCConnectionProvider;
10
+ };
11
+ };
12
+ type TypeRPCServerEvents = {
13
+ connection: (connection: TypeRPCConnection) => void;
14
+ };
15
+ declare class TypeRPCServer<T extends TypeRPCAPIDefine<any>, R extends TypeRPCAPIDefine<any>> {
16
+ emitter: TypedEmitter<TypeRPCServerEvents>;
17
+ private config;
18
+ core: TypeRPCCore;
19
+ constructor(config?: TypeRPCServerConfig<T, R>);
20
+ hook<S extends TypeRPCDefineServiceName<T>, M extends TypeRPCDefineMethodName<T, S>>(serviceName: S, methodName: M, config: {
21
+ handler: TypeRPCDefineMethodBody<T, S, M>;
22
+ bind?: any;
23
+ }): void;
24
+ hookService<S extends TypeRPCDefineServiceName<T>>(serviceName: S, instance: TypeRPCDefineServiceInstance<T, S>): void;
25
+ get use(): (middleware: import("./handler.js").TypeRPCHandlerMiddleware) => import("./handler.js").TypeRPCHandler;
26
+ get listen(): (config: {
27
+ port: number;
28
+ hostname?: string;
29
+ }) => Promise<boolean>;
30
+ get close(): () => Promise<boolean>;
31
+ getAPI(connection: TypeRPCConnection): TypeRPCDefineToTypeRPCAPI<R>;
32
+ }
33
+ export { TypeRPCServer, };
34
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,KAAK,uBAAuB,EAAE,KAAK,uBAAuB,EAAE,KAAK,4BAA4B,EAAE,KAAK,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAExM,KAAK,mBAAmB,CAAC,CAAC,SAAS,gBAAgB,CAAC,GAAG,CAAC,EAAC,CAAC,SAAS,gBAAgB,CAAC,GAAG,CAAC,IAAI;IACxF,KAAK,CAAC,EAAC,CAAC,CAAC;IACT,MAAM,CAAC,EAAC,CAAC,CAAC;IACV,UAAU,CAAC,EAAC;QACR,QAAQ,EAAC,yBAAyB,CAAC;KACtC,CAAA;CACJ,CAAA;AAED,KAAK,mBAAmB,GAAG;IACvB,UAAU,EAAC,CAAC,UAAU,EAAC,iBAAiB,KAAG,IAAI,CAAC;CACnD,CAAA;AAED,cAAM,aAAa,CAAC,CAAC,SAAS,gBAAgB,CAAC,GAAG,CAAC,EAAC,CAAC,SAAS,gBAAgB,CAAC,GAAG,CAAC;IAExE,OAAO,oCAA2C;IACzD,OAAO,CAAC,MAAM,CAA0B;IACjC,IAAI,EAAC,WAAW,CAAC;gBAEZ,MAAM,CAAC,EAAC,mBAAmB,CAAC,CAAC,EAAC,CAAC,CAAC;IAW5C,IAAI,CAAC,CAAC,SAAS,wBAAwB,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,uBAAuB,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,WAAW,EAAC,CAAC,EAAC,UAAU,EAAC,CAAC,EAAC,MAAM,EAAC;QACjH,OAAO,EAAC,uBAAuB,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,EAAC,GAAG,CAAC;KACb;IAID,WAAW,CAAC,CAAC,SAAS,wBAAwB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAC,CAAC,EAAC,QAAQ,EAAC,4BAA4B,CAAC,CAAC,EAAC,CAAC,CAAC;IAU3G,IAAI,GAAG,2GAEN;IAED,IAAI,MAAM;;gBAwBmvB,CAAC;2BAtB7vB;IAED,IAAI,KAAK,2BAER;IAED,MAAM,CAAC,UAAU,EAAC,iBAAiB,GAAE,yBAAyB,CAAC,CAAC,CAAC;CAYpE;AAED,OAAO,EACH,aAAa,GAChB,CAAA"}
package/dist/server.js ADDED
@@ -0,0 +1,51 @@
1
+ import { TypeRPCAPI } from "./api.js";
2
+ import { TypeRPCCore } from "./core.js";
3
+ import { TypeRPCAPIDefine } from "./define.js";
4
+ import { TypedEmitter } from "./utils.js";
5
+ class TypeRPCServer {
6
+ emitter = new TypedEmitter();
7
+ config;
8
+ core;
9
+ constructor(config) {
10
+ const defaultConfig = {};
11
+ this.config = { ...defaultConfig, ...config };
12
+ this.core = new TypeRPCCore(this.config);
13
+ this.core.emitter.on('connection', (connection) => {
14
+ this.emitter.emit('connection', connection);
15
+ });
16
+ }
17
+ hook(serviceName, methodName, config) {
18
+ return this.core.hook(serviceName, methodName, config);
19
+ }
20
+ hookService(serviceName, instance) {
21
+ const methodList = TypeRPCAPIDefine.getMethodList(instance);
22
+ for (let methodName of methodList) {
23
+ this.hook(serviceName, methodName, {
24
+ handler: instance[methodName],
25
+ bind: instance,
26
+ });
27
+ }
28
+ }
29
+ get use() {
30
+ return this.core.handler.use.bind(this.core.handler);
31
+ }
32
+ get listen() {
33
+ return this.core.listen.bind(this.core);
34
+ }
35
+ get close() {
36
+ return this.core.close.bind(this.core);
37
+ }
38
+ getAPI(connection) {
39
+ const api = new TypeRPCAPI();
40
+ return api.interface(async (context) => {
41
+ return await this.core.request({
42
+ connection,
43
+ serviceName: context.serviceName,
44
+ methodName: context.methodName,
45
+ args: context.args,
46
+ });
47
+ });
48
+ }
49
+ }
50
+ export { TypeRPCServer, };
51
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAgK,MAAM,YAAY,CAAC;AAcxM,MAAM,aAAa;IAER,OAAO,GAAG,IAAI,YAAY,EAAuB,CAAC;IACjD,MAAM,CAA0B;IACjC,IAAI,CAAa;IAExB,YAAY,MAAgC;QACxC,MAAM,aAAa,GAA4B,EAE9C,CAAA;QACD,IAAI,CAAC,MAAM,GAAG,EAAC,GAAG,aAAa,EAAC,GAAG,MAAM,EAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAC,CAAC,UAAU,EAAE,EAAE;YAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAA+E,WAAa,EAAC,UAAY,EAAC,MAG7G;QACG,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAC,UAAU,EAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CAAwC,WAAa,EAAC,QAA0C;QACvG,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC5D,KAAI,IAAI,UAAU,IAAI,UAAU,EAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAC,UAA0C,EAAC;gBAC7D,OAAO,EAAC,QAAQ,CAAC,UAAU,CAAC;gBAC5B,IAAI,EAAC,QAAQ;aAChB,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,UAA4B;QAC/B,MAAM,GAAG,GAAG,IAAI,UAAU,EAAK,CAAC;QAChC,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACnC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC3B,UAAU;gBACV,WAAW,EAAC,OAAO,CAAC,WAAW;gBAC/B,UAAU,EAAC,OAAO,CAAC,UAAU;gBAC7B,IAAI,EAAC,OAAO,CAAC,IAAI;aACpB,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC;CAEJ;AAED,OAAO,EACH,aAAa,GAChB,CAAA"}
@@ -0,0 +1,6 @@
1
+ export declare abstract class TestCase {
2
+ abstract name(): string;
3
+ abstract run(): Promise<boolean>;
4
+ finally(): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=TestCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestCase.d.ts","sourceRoot":"","sources":["../../src/test/TestCase.ts"],"names":[],"mappings":"AAAA,8BAAsB,QAAQ;IAC1B,QAAQ,CAAC,IAAI,IAAG,MAAM;IACtB,QAAQ,CAAC,GAAG,IAAG,OAAO,CAAC,OAAO,CAAC;IAClB,OAAO,IAAG,OAAO,CAAC,IAAI,CAAC;CACvC"}
@@ -0,0 +1,5 @@
1
+ export class TestCase {
2
+ async finally() { }
3
+ ;
4
+ }
5
+ //# sourceMappingURL=TestCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestCase.js","sourceRoot":"","sources":["../../src/test/TestCase.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,QAAQ;IAGnB,KAAK,CAAC,OAAO,KAAiB,CAAC;IAAA,CAAC;CAC1C"}
@@ -0,0 +1,8 @@
1
+ import { TestCase } from "./TestCase.js";
2
+ declare class TestAuthorization extends TestCase {
3
+ name(): string;
4
+ run(): Promise<boolean>;
5
+ finally(): Promise<void>;
6
+ }
7
+ export default TestAuthorization;
8
+ //# sourceMappingURL=authorization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../../src/test/authorization.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAwIzC,cAAM,iBAAkB,SAAQ,QAAQ;IACpC,IAAI,IAAI,MAAM;IAGR,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;IA2ChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAKxC;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,169 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { TypeRPCClient } from "../index.js";
8
+ import { TypeRPCAPIDefine } from "../index.js";
9
+ import { TypeRPCHandlerMiddleware } from "../index.js";
10
+ import { TypeRPCPacketFactory } from "../index.js";
11
+ import { TypeRPCServer } from "../index.js";
12
+ import { TestCase } from "./TestCase.js";
13
+ const ServerAPIDefine = new TypeRPCAPIDefine();
14
+ class MathService {
15
+ add(a, b) {
16
+ return a + b;
17
+ }
18
+ }
19
+ __decorate([
20
+ TypeRPCAPIDefine.method()
21
+ ], MathService.prototype, "add", null);
22
+ class AuthService {
23
+ authUsers = new Map();
24
+ login(username, password) {
25
+ if (username === 'admin' && password === '123456') {
26
+ const token = Math.random().toString(36).substring(2);
27
+ this.authUsers.set(username, token);
28
+ return token;
29
+ }
30
+ return '';
31
+ }
32
+ checkToken(username, token) {
33
+ return this.authUsers.get(username) === token;
34
+ }
35
+ }
36
+ __decorate([
37
+ TypeRPCAPIDefine.method()
38
+ ], AuthService.prototype, "login", null);
39
+ class AuthMiddleware extends TypeRPCHandlerMiddleware {
40
+ auth;
41
+ username;
42
+ token;
43
+ constructor(auth) {
44
+ super();
45
+ this.auth = auth;
46
+ }
47
+ /**
48
+ * 对外站进入的请求包进行验证
49
+ */
50
+ async inbound(context) {
51
+ if (context.inbound) {
52
+ if (TypeRPCPacketFactory.isRequestPacket(context.inbound)) {
53
+ const protectService = ['math'];
54
+ if (protectService.includes(context.inbound.serviceName)) {
55
+ const unauthorizedPacket = TypeRPCPacketFactory.createResponsePacket({
56
+ requestId: context.inbound.id,
57
+ error: "unauthorized",
58
+ });
59
+ // 进行验证
60
+ const username = context.inbound.meta?.username;
61
+ const token = context.inbound.meta?.token;
62
+ if (!token || !username) {
63
+ context.outbound = unauthorizedPacket;
64
+ }
65
+ else {
66
+ if (!this.auth || !this.auth.checkToken(username, token)) {
67
+ context.outbound = unauthorizedPacket;
68
+ }
69
+ }
70
+ }
71
+ }
72
+ // 如果入站的是响应包,判断出站是否是登录包
73
+ if (TypeRPCPacketFactory.isResponsePacket(context.inbound)
74
+ && TypeRPCPacketFactory.isRequestPacket(context.outbound)
75
+ && context.outbound.serviceName == 'auth'
76
+ && context.outbound.methodName == 'login') {
77
+ const username = context.outbound.args?.[0];
78
+ const token = context.inbound.result;
79
+ this.token = token;
80
+ this.username = username;
81
+ }
82
+ }
83
+ return context;
84
+ }
85
+ async outbound(context) {
86
+ if (context.outbound) {
87
+ if (TypeRPCPacketFactory.isRequestPacket(context.outbound)) {
88
+ // 如果有token,附带token
89
+ if (this.token) {
90
+ context.outbound.meta = {
91
+ username: this.username,
92
+ token: this.token,
93
+ };
94
+ }
95
+ }
96
+ }
97
+ return context;
98
+ }
99
+ }
100
+ class ServerApp {
101
+ math = new MathService();
102
+ auth = new AuthService();
103
+ server = new TypeRPCServer({
104
+ local: ServerAPIDefine,
105
+ });
106
+ constructor() {
107
+ this.server.use(new AuthMiddleware(this.auth));
108
+ this.server.hookService('math', this.math);
109
+ this.server.hookService('auth', this.auth);
110
+ }
111
+ async start() {
112
+ return this.server.listen({
113
+ port: 3698,
114
+ });
115
+ }
116
+ async stop() {
117
+ return this.server.close();
118
+ }
119
+ }
120
+ const serverApp = new ServerApp();
121
+ class TestAuthorization extends TestCase {
122
+ name() {
123
+ return 'Authorization';
124
+ }
125
+ async run() {
126
+ await serverApp.start();
127
+ const client = new TypeRPCClient({
128
+ remote: ServerAPIDefine,
129
+ });
130
+ client.use(new AuthMiddleware());
131
+ const connection = await client.connect('localhost:3698');
132
+ const api = client.getAPI(connection);
133
+ // 未登录调用
134
+ const unauthorizedResult = await new Promise((resolve) => {
135
+ api.math.add.request({
136
+ args: [1, 2],
137
+ callback(result, req, res) {
138
+ resolve(result);
139
+ },
140
+ error(error, req, res) {
141
+ resolve(error);
142
+ },
143
+ });
144
+ });
145
+ if (unauthorizedResult != 'unauthorized') {
146
+ console.log('Unauthorized call result should be "unauthorized"');
147
+ return false;
148
+ }
149
+ // 进行登录
150
+ const token = await api.auth.login.call('admin', '123456');
151
+ if (!token) {
152
+ console.log('Login failed');
153
+ return false;
154
+ }
155
+ // 重新请求
156
+ const authorizedResult = await api.math.add.call(1, 2);
157
+ if (authorizedResult != 3) {
158
+ console.log('Authorized call result should be 3');
159
+ return false;
160
+ }
161
+ return true;
162
+ }
163
+ async finally() {
164
+ await serverApp.stop();
165
+ return;
166
+ }
167
+ }
168
+ export default TestAuthorization;
169
+ //# sourceMappingURL=authorization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization.js","sourceRoot":"","sources":["../../src/test/authorization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { TestCase } from "./TestCase.js";
2
+ export default class TestBasic extends TestCase {
3
+ name(): string;
4
+ run(): Promise<boolean>;
5
+ finally(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=basic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/test/basic.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAoBzC,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,QAAQ;IAC3C,IAAI,IAAI,MAAM;IAGR,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;IAahB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGxC"}
@@ -0,0 +1,35 @@
1
+ import { TypeRPCClient } from "../index.js";
2
+ import { TypeRPCAPIDefine } from "../index.js";
3
+ import { TypeRPCServer } from "../index.js";
4
+ import { TestCase } from "./TestCase.js";
5
+ const serverAPIDefine = new TypeRPCAPIDefine();
6
+ const server = new TypeRPCServer({
7
+ local: serverAPIDefine,
8
+ });
9
+ server.hook('math', 'add', {
10
+ handler: (a, b) => a + b,
11
+ });
12
+ const client = new TypeRPCClient({
13
+ remote: serverAPIDefine,
14
+ });
15
+ export default class TestBasic extends TestCase {
16
+ name() {
17
+ return 'Basic';
18
+ }
19
+ async run() {
20
+ await server.listen({
21
+ port: 3698,
22
+ });
23
+ const connection = await client.connect("localhost:3698");
24
+ const api = client.getAPI(connection);
25
+ const result = await api.math.add.call(1, 2);
26
+ if (result == 3) {
27
+ return true;
28
+ }
29
+ return false;
30
+ }
31
+ async finally() {
32
+ await server.close();
33
+ }
34
+ }
35
+ //# sourceMappingURL=basic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic.js","sourceRoot":"","sources":["../../src/test/basic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,eAAe,GAAG,IAAI,gBAAgB,EAIxC,CAAC;AAEL,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;IAC7B,KAAK,EAAC,eAAe;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAC,KAAK,EAAC;IACrB,OAAO,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAA,CAAC,GAAC,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;IAC7B,MAAM,EAAC,eAAe;CACzB,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,QAAQ;IAC3C,IAAI;QACA,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,KAAK,CAAC,GAAG;QACL,MAAM,MAAM,CAAC,MAAM,CAAC;YAChB,IAAI,EAAC,IAAI;SACZ,CAAC,CAAA;QACF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAC5C,IAAG,MAAM,IAAI,CAAC,EAAC,CAAC;YACZ,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ import { TestCase } from "./TestCase.js";
2
+ export default class TestBasic extends TestCase {
3
+ name(): string;
4
+ run(): Promise<boolean>;
5
+ finally(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/test/context.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAuCzC,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,QAAQ;IAC3C,IAAI,IAAI,MAAM;IAGR,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;IAahB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGxC"}
@@ -0,0 +1,55 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { TypeRPCClient } from "../index.js";
8
+ import { TypeRPCContextSymbol } from "../index.js";
9
+ import { TypeRPCAPIDefine } from "../index.js";
10
+ import { TypeRPCServer } from "../index.js";
11
+ import { TestCase } from "./TestCase.js";
12
+ const serverAPIDefine = new TypeRPCAPIDefine();
13
+ const server = new TypeRPCServer({
14
+ local: serverAPIDefine,
15
+ });
16
+ class MathService {
17
+ /** 通过 TypeRPCContextAware 接口,将上下文注入到服务中,允许在方法内访问RPC调用时的上下文 */
18
+ [TypeRPCContextSymbol] = null;
19
+ /** 使用hookService时,必须声明为TypeRPC方法,否则不予注册为hook,避免外部非法调用方法*/
20
+ add(a, b) {
21
+ const context = this[TypeRPCContextSymbol];
22
+ if (!context) {
23
+ throw new Error('context is null');
24
+ }
25
+ return a + b;
26
+ }
27
+ }
28
+ __decorate([
29
+ TypeRPCAPIDefine.method()
30
+ ], MathService.prototype, "add", null);
31
+ server.hookService('math', new MathService());
32
+ const client = new TypeRPCClient({
33
+ remote: serverAPIDefine,
34
+ });
35
+ export default class TestBasic extends TestCase {
36
+ name() {
37
+ return 'Context';
38
+ }
39
+ async run() {
40
+ await server.listen({
41
+ port: 3698,
42
+ });
43
+ const connection = await client.connect("localhost:3698");
44
+ const api = client.getAPI(connection);
45
+ const result = await api.math.add.call(1, 2);
46
+ if (result == 3) {
47
+ return true;
48
+ }
49
+ return false;
50
+ }
51
+ async finally() {
52
+ await server.close();
53
+ }
54
+ }
55
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/test/context.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAiD,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,MAAM,eAAe,GAAG,IAAI,gBAAgB,EAExC,CAAC;AAEL,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;IAC7B,KAAK,EAAC,eAAe;CACxB,CAAC,CAAC;AAEH,MAAM,WAAW;IAEb,8DAA8D;IAC9D,CAAC,oBAAoB,CAAC,GAA0B,IAAI,CAAC;IAErD,0DAA0D;IAE1D,GAAG,CAAC,CAAS,EAAE,CAAS;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAE,CAAC;QAC5C,IAAG,CAAC,OAAO,EAAC,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,CAAC,GAAC,CAAC,CAAC;IACf,CAAC;CACJ;AAPG;IADC,gBAAgB,CAAC,MAAM,EAAE;sCAOzB;AAGL,MAAM,CAAC,WAAW,CAAC,MAAM,EAAC,IAAI,WAAW,EAAE,CAAC,CAAC;AAE7C,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;IAC7B,MAAM,EAAC,eAAe;CACzB,CAAC,CAAC;AAKH,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,QAAQ;IAC3C,IAAI;QACA,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,KAAK,CAAC,GAAG;QACL,MAAM,MAAM,CAAC,MAAM,CAAC;YAChB,IAAI,EAAC,IAAI;SACZ,CAAC,CAAA;QACF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAC5C,IAAG,MAAM,IAAI,CAAC,EAAC,CAAC;YACZ,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ import { TestCase } from "./TestCase.js";
2
+ export default class TextExpressMix extends TestCase {
3
+ name(): string;
4
+ run(): Promise<boolean>;
5
+ finally(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=expressmix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressmix.d.ts","sourceRoot":"","sources":["../../src/test/expressmix.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA6CzC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,QAAQ;IAChD,IAAI,IAAI,MAAM;IAGR,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBhB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAIxC"}
@@ -0,0 +1,63 @@
1
+ import { TypeRPCAPIDefine, TypeRPCClient, TypeRPCConnectionProviderDefault, TypeRPCServer } from "../index.js";
2
+ import http from 'http';
3
+ import express from 'express';
4
+ import { TestCase } from "./TestCase.js";
5
+ const ServerAPIDefine = new TypeRPCAPIDefine();
6
+ const httpServer = http.createServer();
7
+ /**
8
+ * TypeRPCConnectionProviderDefault 是 TypeRPCConnectionProvider 的默认实现
9
+ * 你也可以自定义实现 TypeRPCConnectionProvider 与 TypeRPCConnection 来支持其他协议
10
+ * 例如基于IPC协议的连接、基于Websocket协议的连接、基于udp协议的连接
11
+ * */
12
+ const provider = new TypeRPCConnectionProviderDefault({
13
+ server: httpServer,
14
+ });
15
+ const server = new TypeRPCServer({
16
+ local: ServerAPIDefine,
17
+ connection: {
18
+ provider: provider,
19
+ }
20
+ });
21
+ server.hook('math', 'add', {
22
+ handler: (a, b) => a + b,
23
+ });
24
+ const app = express();
25
+ app.use("/test", (req, res) => {
26
+ res.end("hello world");
27
+ });
28
+ /**
29
+ * 通过provider注入express中间件
30
+ * provider会将无法识别的请求转发到express中间件
31
+ */
32
+ provider.use(app);
33
+ const client = new TypeRPCClient({
34
+ remote: ServerAPIDefine,
35
+ });
36
+ export default class TextExpressMix extends TestCase {
37
+ name() {
38
+ return "ExpressMix";
39
+ }
40
+ async run() {
41
+ await server.listen({
42
+ port: 3698
43
+ });
44
+ await new Promise(resolve => setTimeout(resolve, 100));
45
+ // RPC测试
46
+ const connection = await client.connect("localhost:3698");
47
+ const result = await client.getAPI(connection).math.add.call(1, 2);
48
+ if (result !== 3) {
49
+ throw new Error("RPC request result should be 3");
50
+ }
51
+ // express测试
52
+ const response = await fetch("http://localhost:3698/test");
53
+ const text = await response.text();
54
+ if (text !== "hello world") {
55
+ throw new Error("Express request result should be 'hello world'");
56
+ }
57
+ return true;
58
+ }
59
+ async finally() {
60
+ await server.close();
61
+ }
62
+ }
63
+ //# sourceMappingURL=expressmix.js.map