@rfkit/json-rpc-websocket 0.1.0 → 0.2.1
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/README.md +415 -31
- package/core/client.d.ts +107 -0
- package/core/client.d.ts.map +1 -0
- package/core/event-emitter.d.ts +31 -0
- package/core/event-emitter.d.ts.map +1 -0
- package/index.d.ts +11 -4
- package/index.d.ts.map +1 -0
- package/index.js +885 -1
- package/pack/deserializer.d.ts +10 -0
- package/pack/deserializer.d.ts.map +1 -0
- package/pack/index.d.ts +11 -0
- package/pack/index.d.ts.map +1 -0
- package/pack/serializer.d.ts +16 -0
- package/pack/serializer.d.ts.map +1 -0
- package/pack/types.d.ts +15 -0
- package/pack/types.d.ts.map +1 -0
- package/pack/utf8.d.ts +16 -0
- package/pack/utf8.d.ts.map +1 -0
- package/package.json +2 -2
- package/tools.d.ts +1 -0
- package/tools.d.ts.map +1 -0
- package/types/index.d.ts +6 -0
- package/types/index.d.ts.map +1 -0
- package/types/jsonrpc.d.ts +83 -0
- package/types/jsonrpc.d.ts.map +1 -0
- package/types/socket.d.ts +162 -0
- package/types/socket.d.ts.map +1 -0
- package/socket.d.ts +0 -103
- package/type.d.ts +0 -138
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 优化的 MessagePack 反序列化器
|
|
3
|
+
* 性能优化:
|
|
4
|
+
* - 添加边界检查
|
|
5
|
+
* - 类型安全
|
|
6
|
+
* - 优化读取逻辑
|
|
7
|
+
*/
|
|
8
|
+
import type { DeserializeOptions } from './types';
|
|
9
|
+
export declare function deserialize<T = unknown>(array: Uint8Array | ArrayBuffer | number[], options?: DeserializeOptions): T;
|
|
10
|
+
//# sourceMappingURL=deserializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deserializer.d.ts","sourceRoot":"","sources":["../../src/pack/deserializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,SAAS,CAAC;AAKjE,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,EACrC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,EAAE,EAC1C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,CA4PH"}
|
package/pack/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MessagePack 编解码(优化版本)
|
|
3
|
+
*/
|
|
4
|
+
import { deserialize as deserializeFunc } from './deserializer';
|
|
5
|
+
import { serialize as serializeFunc } from './serializer';
|
|
6
|
+
export declare const serialize: typeof serializeFunc;
|
|
7
|
+
export declare const deserialize: typeof deserializeFunc;
|
|
8
|
+
export declare const encode: typeof serializeFunc;
|
|
9
|
+
export declare const decode: typeof deserializeFunc;
|
|
10
|
+
export type { SerializeOptions, DeserializeOptions } from './types';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pack/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1D,eAAO,MAAM,SAAS,sBAAgB,CAAC;AACvC,eAAO,MAAM,WAAW,wBAAkB,CAAC;AAG3C,eAAO,MAAM,MAAM,sBAAgB,CAAC;AACpC,eAAO,MAAM,MAAM,wBAAkB,CAAC;AAGtC,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 优化的 MessagePack 序列化器
|
|
3
|
+
* 性能优化:
|
|
4
|
+
* - 类型安全(移除 any)
|
|
5
|
+
* - 优化的 buffer 增长策略(1.5倍)
|
|
6
|
+
* - 预分配常见大小
|
|
7
|
+
*/
|
|
8
|
+
import type { SerializeOptions } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* 可序列化的值类型
|
|
11
|
+
* 使用 unknown 保持类型安全,运行时检查具体类型
|
|
12
|
+
*/
|
|
13
|
+
type SerializableValue = unknown;
|
|
14
|
+
export declare function serialize(data: SerializableValue | SerializableValue[], options?: SerializeOptions): Uint8Array;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/pack/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGhD;;;GAGG;AACH,KAAK,iBAAiB,GAAG,OAAO,CAAC;AAKjC,wBAAgB,SAAS,CACvB,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EAC7C,OAAO,CAAC,EAAE,gBAAgB,GACzB,UAAU,CAwSZ"}
|
package/pack/types.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SerializeOptions {
|
|
2
|
+
multiple?: boolean;
|
|
3
|
+
invalidTypeReplacement?: ((value: unknown) => boolean | number | string | [] | object | null) | boolean | number | string | [] | object | null;
|
|
4
|
+
}
|
|
5
|
+
export interface DeserializeOptions {
|
|
6
|
+
multiple?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export type SerializableValue = undefined | null | boolean | number | string | Date | Uint8Array | Uint8ClampedArray | Int8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | SerializableValue[] | {
|
|
9
|
+
[key: string]: SerializableValue;
|
|
10
|
+
};
|
|
11
|
+
export interface ExtensionData {
|
|
12
|
+
type: number;
|
|
13
|
+
data: Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pack/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sBAAsB,CAAC,EACnB,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,GACpE,OAAO,GACP,MAAM,GACN,MAAM,GACN,EAAE,GACF,MAAM,GACN,IAAI,CAAC;CACV;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,UAAU,GACV,iBAAiB,GACjB,SAAS,GACT,UAAU,GACV,WAAW,GACX,UAAU,GACV,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,iBAAiB,EAAE,GACnB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB"}
|
package/pack/utf8.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 优化的 UTF-8 编解码
|
|
3
|
+
* 性能优化:
|
|
4
|
+
* - ASCII 快速路径(零拷贝)
|
|
5
|
+
* - 动态内存分配策略(1.5倍增长)
|
|
6
|
+
* - 减少边界检查次数
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 编码 UTF-8(优化版本)
|
|
10
|
+
*/
|
|
11
|
+
export declare function encodeUtf8(str: string): Uint8Array;
|
|
12
|
+
/**
|
|
13
|
+
* 解码 UTF-8(优化版本)
|
|
14
|
+
*/
|
|
15
|
+
export declare function decodeUtf8(bytes: Uint8Array, start: number, length: number): string;
|
|
16
|
+
//# sourceMappingURL=utf8.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utf8.d.ts","sourceRoot":"","sources":["../../src/pack/utf8.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAoElD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,CAyER"}
|
package/package.json
CHANGED
package/tools.d.ts
CHANGED
package/tools.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAC2B,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAO,MAQ/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,eAAU,KAAG,MAWvC,CAAC"}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON-RPC 2.0 核心类型定义
|
|
3
|
+
* 完全符合规范: https://www.jsonrpc.org/specification
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* JSON-RPC 2.0 请求
|
|
7
|
+
*/
|
|
8
|
+
export interface JsonRpcRequest<T = unknown> {
|
|
9
|
+
jsonrpc: '2.0';
|
|
10
|
+
method: string;
|
|
11
|
+
params?: T;
|
|
12
|
+
id?: string | number | null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* JSON-RPC 2.0 成功响应
|
|
16
|
+
*/
|
|
17
|
+
export interface JsonRpcSuccess<T = unknown> {
|
|
18
|
+
jsonrpc: '2.0';
|
|
19
|
+
result: T;
|
|
20
|
+
id: string | number | null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* JSON-RPC 2.0 错误响应
|
|
24
|
+
*/
|
|
25
|
+
export interface JsonRpcError {
|
|
26
|
+
jsonrpc: '2.0';
|
|
27
|
+
error: {
|
|
28
|
+
code: number;
|
|
29
|
+
message: string;
|
|
30
|
+
data?: unknown;
|
|
31
|
+
};
|
|
32
|
+
id: string | number | null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* JSON-RPC 2.0 通知(无需响应)
|
|
36
|
+
*/
|
|
37
|
+
export interface JsonRpcNotification<T = unknown> {
|
|
38
|
+
jsonrpc: '2.0';
|
|
39
|
+
method: string;
|
|
40
|
+
params?: T;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* JSON-RPC 2.0 响应(成功或错误)
|
|
44
|
+
*/
|
|
45
|
+
export type JsonRpcResponse<T = unknown> = JsonRpcSuccess<T> | JsonRpcError;
|
|
46
|
+
/**
|
|
47
|
+
* JSON-RPC 2.0 消息(请求、响应或通知)
|
|
48
|
+
*/
|
|
49
|
+
export type JsonRpcMessage<T = unknown> = JsonRpcRequest<T> | JsonRpcResponse<T> | JsonRpcNotification<T>;
|
|
50
|
+
/**
|
|
51
|
+
* 标准错误码
|
|
52
|
+
*/
|
|
53
|
+
export declare enum JsonRpcErrorCode {
|
|
54
|
+
ParseError = -32700,
|
|
55
|
+
InvalidRequest = -32600,
|
|
56
|
+
MethodNotFound = -32601,
|
|
57
|
+
InvalidParams = -32602,
|
|
58
|
+
InternalError = -32603,
|
|
59
|
+
ServerError = -32000,
|
|
60
|
+
Timeout = -32001,
|
|
61
|
+
ConnectionClosed = -32002
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 创建错误响应
|
|
65
|
+
*/
|
|
66
|
+
export declare function createErrorResponse(id: string | number | null, code: JsonRpcErrorCode, message: string, data?: unknown): JsonRpcError;
|
|
67
|
+
/**
|
|
68
|
+
* 创建成功响应
|
|
69
|
+
*/
|
|
70
|
+
export declare function createSuccessResponse<T>(id: string | number | null, result: T): JsonRpcSuccess<T>;
|
|
71
|
+
/**
|
|
72
|
+
* 类型守卫:检查是否为错误响应
|
|
73
|
+
*/
|
|
74
|
+
export declare function isJsonRpcError(response: JsonRpcResponse): response is JsonRpcError;
|
|
75
|
+
/**
|
|
76
|
+
* 类型守卫:检查是否为成功响应
|
|
77
|
+
*/
|
|
78
|
+
export declare function isJsonRpcSuccess<T>(response: JsonRpcResponse<T>): response is JsonRpcSuccess<T>;
|
|
79
|
+
/**
|
|
80
|
+
* 类型守卫:检查是否为通知
|
|
81
|
+
*/
|
|
82
|
+
export declare function isJsonRpcNotification(message: JsonRpcMessage): message is JsonRpcNotification;
|
|
83
|
+
//# sourceMappingURL=jsonrpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonrpc.d.ts","sourceRoot":"","sources":["../../src/types/jsonrpc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,CAAC,CAAC;IACV,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC9C,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAClC,cAAc,CAAC,CAAC,CAAC,GACjB,eAAe,CAAC,CAAC,CAAC,GAClB,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAE3B;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,UAAU,SAAS;IACnB,cAAc,SAAS;IACvB,cAAc,SAAS;IACvB,aAAa,SAAS;IACtB,aAAa,SAAS;IACtB,WAAW,SAAS;IACpB,OAAO,SAAS;IAChB,gBAAgB,SAAS;CAC1B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAC1B,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,GACb,YAAY,CAMd;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAC1B,MAAM,EAAE,CAAC,GACR,cAAc,CAAC,CAAC,CAAC,CAMnB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,eAAe,GACxB,QAAQ,IAAI,YAAY,CAE1B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,CAE/B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,GACtB,OAAO,IAAI,mBAAmB,CAEhC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket 客户端类型定义
|
|
3
|
+
*/
|
|
4
|
+
import type { JsonRpcResponse } from './jsonrpc';
|
|
5
|
+
/**
|
|
6
|
+
* WebSocket 连接状态
|
|
7
|
+
*/
|
|
8
|
+
export declare enum ConnectionState {
|
|
9
|
+
Connecting = 0,
|
|
10
|
+
Open = 1,
|
|
11
|
+
Closing = 2,
|
|
12
|
+
Closed = 3
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 连接配置
|
|
16
|
+
*/
|
|
17
|
+
export interface ConnectionOptions {
|
|
18
|
+
/** WebSocket URL */
|
|
19
|
+
url: string;
|
|
20
|
+
/** WebSocket 协议 */
|
|
21
|
+
protocols?: string | string[];
|
|
22
|
+
/** 自动重连 */
|
|
23
|
+
autoReconnect?: boolean;
|
|
24
|
+
/** 重连间隔(毫秒) */
|
|
25
|
+
reconnectInterval?: number;
|
|
26
|
+
/** 最大重连次数 */
|
|
27
|
+
maxReconnectAttempts?: number;
|
|
28
|
+
/** 默认超时时间(毫秒) */
|
|
29
|
+
defaultTimeout?: number;
|
|
30
|
+
/** 心跳间隔(毫秒),0 表示禁用 */
|
|
31
|
+
heartbeatInterval?: number;
|
|
32
|
+
/** 心跳方法名 */
|
|
33
|
+
heartbeatMethod?: string;
|
|
34
|
+
/** 是否启用调试日志 */
|
|
35
|
+
debug?: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 请求配置
|
|
39
|
+
*/
|
|
40
|
+
export interface RequestOptions<TParams = unknown> {
|
|
41
|
+
/** 方法名 */
|
|
42
|
+
method: string;
|
|
43
|
+
/** 参数 */
|
|
44
|
+
params?: TParams;
|
|
45
|
+
/** 超时时间(毫秒) */
|
|
46
|
+
timeout?: number;
|
|
47
|
+
/** 请求 ID(可选,自动生成) */
|
|
48
|
+
id?: string | number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 通知配置(不需要响应)
|
|
52
|
+
*/
|
|
53
|
+
export interface NotificationOptions<TParams = unknown> {
|
|
54
|
+
/** 方法名 */
|
|
55
|
+
method: string;
|
|
56
|
+
/** 参数 */
|
|
57
|
+
params?: TParams;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 流式请求配置
|
|
61
|
+
*/
|
|
62
|
+
export interface StreamOptions<TParams = unknown> {
|
|
63
|
+
/** 方法名 */
|
|
64
|
+
method: string;
|
|
65
|
+
/** 参数 */
|
|
66
|
+
params?: TParams;
|
|
67
|
+
/** 流 ID(可选,自动生成) */
|
|
68
|
+
id?: string | number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 流式响应控制器
|
|
72
|
+
*/
|
|
73
|
+
export interface StreamController {
|
|
74
|
+
/** 流 ID */
|
|
75
|
+
readonly id: string | number;
|
|
76
|
+
/** 关闭流 */
|
|
77
|
+
close(): void;
|
|
78
|
+
/** 流是否已关闭 */
|
|
79
|
+
readonly closed: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 消息事件数据(包含原始数据用于转发)
|
|
83
|
+
*/
|
|
84
|
+
export interface MessageEventData {
|
|
85
|
+
/** 解码后的消息 */
|
|
86
|
+
data: JsonRpcResponse;
|
|
87
|
+
/** 原始二进制数据(用于转发) */
|
|
88
|
+
rawData: ArrayBuffer;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 事件名称常量
|
|
92
|
+
*/
|
|
93
|
+
export declare const SocketEvent: {
|
|
94
|
+
readonly Open: "open";
|
|
95
|
+
readonly Close: "close";
|
|
96
|
+
readonly Error: "error";
|
|
97
|
+
readonly Message: "message";
|
|
98
|
+
readonly Reconnecting: "reconnecting";
|
|
99
|
+
readonly Reconnected: "reconnected";
|
|
100
|
+
readonly ReconnectFailed: "reconnect_failed";
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* 事件类型
|
|
104
|
+
*/
|
|
105
|
+
export interface SocketEvents extends Record<string, unknown> {
|
|
106
|
+
/** 连接打开 */
|
|
107
|
+
open: Event;
|
|
108
|
+
/** 连接关闭 */
|
|
109
|
+
close: CloseEvent;
|
|
110
|
+
/** 连接错误 */
|
|
111
|
+
error: Event;
|
|
112
|
+
/** 收到消息 */
|
|
113
|
+
message: MessageEventData;
|
|
114
|
+
/** 重连中 */
|
|
115
|
+
reconnecting: {
|
|
116
|
+
attempt: number;
|
|
117
|
+
maxAttempts: number;
|
|
118
|
+
};
|
|
119
|
+
/** 重连成功 */
|
|
120
|
+
reconnected: undefined;
|
|
121
|
+
/** 重连失败 */
|
|
122
|
+
reconnect_failed: undefined;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 事件监听器
|
|
126
|
+
*/
|
|
127
|
+
export type EventListener<T = unknown> = (data: T) => void;
|
|
128
|
+
/**
|
|
129
|
+
* 请求元数据
|
|
130
|
+
*/
|
|
131
|
+
export interface RequestMetadata {
|
|
132
|
+
/** 请求 ID */
|
|
133
|
+
id: string | number;
|
|
134
|
+
/** 发送时间戳 */
|
|
135
|
+
timestamp: number;
|
|
136
|
+
/** 超时定时器 */
|
|
137
|
+
timeoutId: NodeJS.Timeout;
|
|
138
|
+
/** 成功回调 */
|
|
139
|
+
resolve: (value: unknown) => void;
|
|
140
|
+
/** 失败回调 */
|
|
141
|
+
reject: (error: Error) => void;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 性能统计
|
|
145
|
+
*/
|
|
146
|
+
export interface PerformanceStats {
|
|
147
|
+
/** 发送的请求总数 */
|
|
148
|
+
requestsSent: number;
|
|
149
|
+
/** 接收的响应总数 */
|
|
150
|
+
responsesReceived: number;
|
|
151
|
+
/** 超时的请求数 */
|
|
152
|
+
timeouts: number;
|
|
153
|
+
/** 错误的响应数 */
|
|
154
|
+
errors: number;
|
|
155
|
+
/** 平均响应时间(毫秒) */
|
|
156
|
+
averageResponseTime: number;
|
|
157
|
+
/** 当前待处理请求数 */
|
|
158
|
+
pendingRequests: number;
|
|
159
|
+
/** 重连次数 */
|
|
160
|
+
reconnectCount: number;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/types/socket.ts"],"names":[],"mappings":"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"}
|
package/socket.d.ts
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import type { PropsType, SocketType, WithUrl } from './type';
|
|
2
|
-
/**
|
|
3
|
-
* Socket
|
|
4
|
-
* 基于WebSocket、msgpack、JSONRPC封装的实时通讯函数
|
|
5
|
-
* @export
|
|
6
|
-
* @class Socket
|
|
7
|
-
*/
|
|
8
|
-
export default class Socket {
|
|
9
|
-
private props;
|
|
10
|
-
private guidStorage;
|
|
11
|
-
private callbackStorage;
|
|
12
|
-
ws: WebSocket;
|
|
13
|
-
private streamID;
|
|
14
|
-
constructor(props: PropsType);
|
|
15
|
-
/**
|
|
16
|
-
* 初始化链接
|
|
17
|
-
*
|
|
18
|
-
* @private
|
|
19
|
-
* @returns {WebSocket}
|
|
20
|
-
* @memberof Socket
|
|
21
|
-
*/
|
|
22
|
-
private setupWS;
|
|
23
|
-
/**
|
|
24
|
-
* 存储guid
|
|
25
|
-
*
|
|
26
|
-
* @private
|
|
27
|
-
* @param {string} guid
|
|
28
|
-
* @returns {string}
|
|
29
|
-
* @memberof Socket
|
|
30
|
-
*/
|
|
31
|
-
private saveGUID;
|
|
32
|
-
/**
|
|
33
|
-
* 删除guid
|
|
34
|
-
*
|
|
35
|
-
* @private
|
|
36
|
-
* @param {string} guid
|
|
37
|
-
* @returns {boolean}
|
|
38
|
-
* @memberof Socket
|
|
39
|
-
*/
|
|
40
|
-
private deleteGUID;
|
|
41
|
-
/**
|
|
42
|
-
* send时触发超时函数
|
|
43
|
-
*
|
|
44
|
-
* @private
|
|
45
|
-
* @param {string} guid
|
|
46
|
-
* @memberof Socket
|
|
47
|
-
*/
|
|
48
|
-
private touchTimeout;
|
|
49
|
-
/**
|
|
50
|
-
* 存储回调方法
|
|
51
|
-
*
|
|
52
|
-
* @private
|
|
53
|
-
* @param {Communicate['callback']} callback
|
|
54
|
-
* @param {string} id
|
|
55
|
-
* @memberof Socket
|
|
56
|
-
*/
|
|
57
|
-
private saveResponse;
|
|
58
|
-
/**
|
|
59
|
-
* 执行回调方法并移除
|
|
60
|
-
*
|
|
61
|
-
* @private
|
|
62
|
-
* @param {string} id
|
|
63
|
-
* @returns
|
|
64
|
-
* @memberof Socket
|
|
65
|
-
*/
|
|
66
|
-
private finishResponse;
|
|
67
|
-
/**
|
|
68
|
-
* 接收数据
|
|
69
|
-
*
|
|
70
|
-
* @param {MessageEvent} buffer
|
|
71
|
-
* @returns
|
|
72
|
-
* @memberof Socket
|
|
73
|
-
*/
|
|
74
|
-
private onmessage;
|
|
75
|
-
/**
|
|
76
|
-
* 发送数据
|
|
77
|
-
*
|
|
78
|
-
* @param {Communicate} params
|
|
79
|
-
* @returns
|
|
80
|
-
* @memberof Socket
|
|
81
|
-
*/
|
|
82
|
-
send: SocketType['send'];
|
|
83
|
-
/**
|
|
84
|
-
* 启用流模式
|
|
85
|
-
*
|
|
86
|
-
* @type {SocketType['stream']}
|
|
87
|
-
* @memberof Socket
|
|
88
|
-
*/
|
|
89
|
-
stream: SocketType['stream'];
|
|
90
|
-
/**
|
|
91
|
-
* 关闭链接
|
|
92
|
-
*
|
|
93
|
-
* @memberof Socket
|
|
94
|
-
*/
|
|
95
|
-
close: SocketType['close'];
|
|
96
|
-
/**
|
|
97
|
-
* 更换url
|
|
98
|
-
*
|
|
99
|
-
* @type {WithUrl}
|
|
100
|
-
* @memberof Socket
|
|
101
|
-
*/
|
|
102
|
-
withUrl: WithUrl;
|
|
103
|
-
}
|
package/type.d.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 发送数据时回调函数参数类型
|
|
3
|
-
*
|
|
4
|
-
* @export
|
|
5
|
-
* @interface ResType
|
|
6
|
-
*/
|
|
7
|
-
export interface ResType {
|
|
8
|
-
jsonrpc: string;
|
|
9
|
-
result: object;
|
|
10
|
-
id: string;
|
|
11
|
-
error?: object;
|
|
12
|
-
message?: string;
|
|
13
|
-
data?: string | object;
|
|
14
|
-
res?: ResType['result'] | ResType['error'] | {
|
|
15
|
-
message: ResType['message'];
|
|
16
|
-
data: ResType['data'];
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* 发送数据的参数类型
|
|
21
|
-
*
|
|
22
|
-
* @export
|
|
23
|
-
* @interface Communicate
|
|
24
|
-
*/
|
|
25
|
-
export interface Communicate {
|
|
26
|
-
jsonrpc?: string;
|
|
27
|
-
method: string;
|
|
28
|
-
params?: Record<string, unknown>;
|
|
29
|
-
id?: string;
|
|
30
|
-
timeout?: number;
|
|
31
|
-
isInform?: boolean | undefined;
|
|
32
|
-
callback?: (res: ResType['res']) => void;
|
|
33
|
-
onerror?: (res: {
|
|
34
|
-
code?: string | number;
|
|
35
|
-
message?: string;
|
|
36
|
-
}) => void;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Socket的事件类型
|
|
40
|
-
*
|
|
41
|
-
* @export
|
|
42
|
-
* @interface PropsFuncType
|
|
43
|
-
*/
|
|
44
|
-
export interface PropsFuncType {
|
|
45
|
-
onopen: (e?: Event) => void;
|
|
46
|
-
onmessage: (e?: unknown) => void;
|
|
47
|
-
onclose: (e?: CloseEvent) => void;
|
|
48
|
-
onerror: (e?: Event) => void;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Socket的websocket参数类型
|
|
52
|
-
*
|
|
53
|
-
* @export
|
|
54
|
-
* @interface PropsType
|
|
55
|
-
*/
|
|
56
|
-
export interface PropsType {
|
|
57
|
-
url: string;
|
|
58
|
-
protocols?: string | string[] | undefined;
|
|
59
|
-
onopen?: PropsFuncType['onopen'];
|
|
60
|
-
onmessage?: PropsFuncType['onmessage'];
|
|
61
|
-
onclose?: PropsFuncType['onclose'];
|
|
62
|
-
onerror?: PropsFuncType['onerror'];
|
|
63
|
-
jsonrpc?: string;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* 发送数据时回调函数存储的类型
|
|
67
|
-
*
|
|
68
|
-
* @export
|
|
69
|
-
* @interface CallbackStorage
|
|
70
|
-
*/
|
|
71
|
-
export interface CallbackStorage {
|
|
72
|
-
[propName: string]: Communicate['callback'];
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* 更换url函数的数据类型
|
|
76
|
-
*
|
|
77
|
-
* @export
|
|
78
|
-
* @interface WithUrl
|
|
79
|
-
*/
|
|
80
|
-
export type WithUrl = (url: string) => void;
|
|
81
|
-
/**
|
|
82
|
-
* stream的类型
|
|
83
|
-
*
|
|
84
|
-
* @export
|
|
85
|
-
* @interface SocketStrem
|
|
86
|
-
*/
|
|
87
|
-
export interface SocketStrem {
|
|
88
|
-
close: (code?: number, reason?: string) => void;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* 实时通讯函暴露的API类型:public
|
|
92
|
-
*
|
|
93
|
-
* @export
|
|
94
|
-
* @interface SocketType
|
|
95
|
-
*/
|
|
96
|
-
export interface SocketType {
|
|
97
|
-
send: (send: Communicate) => void;
|
|
98
|
-
close: (code?: number, reason?: string) => void;
|
|
99
|
-
stream: (send: Communicate) => {
|
|
100
|
-
id: string;
|
|
101
|
-
close: SocketStrem['close'];
|
|
102
|
-
} | undefined;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* JSON-RPC 2.0 请求对象
|
|
106
|
-
*/
|
|
107
|
-
export interface JsonRpcRequest {
|
|
108
|
-
jsonrpc: '2.0';
|
|
109
|
-
method: string;
|
|
110
|
-
params?: unknown;
|
|
111
|
-
id?: string | number | null;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* JSON-RPC 2.0 响应对象
|
|
115
|
-
*/
|
|
116
|
-
export interface JsonRpcResponse {
|
|
117
|
-
jsonrpc: '2.0';
|
|
118
|
-
result?: unknown;
|
|
119
|
-
error?: JsonRpcError;
|
|
120
|
-
id: string | number | null;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* JSON-RPC 2.0 错误对象
|
|
124
|
-
*/
|
|
125
|
-
export interface JsonRpcError {
|
|
126
|
-
code: number;
|
|
127
|
-
message: string;
|
|
128
|
-
data?: unknown;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* 连接选项
|
|
132
|
-
*/
|
|
133
|
-
export interface ConnectionOptions {
|
|
134
|
-
reconnect?: boolean;
|
|
135
|
-
reconnectInterval?: number;
|
|
136
|
-
maxReconnectAttempts?: number;
|
|
137
|
-
timeout?: number;
|
|
138
|
-
}
|