@feng3d/chuantou-shared 0.0.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.
package/README.md ADDED
@@ -0,0 +1,98 @@
1
+ # @feng3d/chuantou-shared
2
+
3
+ 内网穿透转发系统的共享类型定义和消息协议。
4
+
5
+ ## 特性
6
+
7
+ - 完整的 TypeScript 类型定义
8
+ - 服务端和客户端通用的消息协议
9
+ - 代理配置类型
10
+ - 连接管理类型
11
+
12
+ ## 安装
13
+
14
+ ```bash
15
+ npm install @feng3d/chuantou-shared
16
+ ```
17
+
18
+ ## 使用
19
+
20
+ ```typescript
21
+ import { MessageType, ProxyConfig, ClientConfig } from '@feng3d/chuantou-shared';
22
+
23
+ // 创建代理配置
24
+ const proxyConfig: ProxyConfig = {
25
+ remotePort: 8080,
26
+ protocol: 'http',
27
+ localPort: 3000,
28
+ localHost: 'localhost'
29
+ };
30
+
31
+ // 创建消息
32
+ const message = createMessage(MessageType.REGISTER, {
33
+ remotePort: 8080,
34
+ protocol: 'http',
35
+ localPort: 3000,
36
+ localHost: 'localhost'
37
+ });
38
+ ```
39
+
40
+ ## 类型
41
+
42
+ ### ProxyConfig
43
+
44
+ 代理配置接口:
45
+
46
+ ```typescript
47
+ interface ProxyConfig {
48
+ remotePort: number; // 公网端口
49
+ protocol: 'http' | 'websocket'; // 协议类型
50
+ localPort: number; // 本地端口
51
+ localHost?: string; // 本地地址
52
+ }
53
+ ```
54
+
55
+ ### ClientConfig
56
+
57
+ 客户端配置接口:
58
+
59
+ ```typescript
60
+ interface ClientConfig {
61
+ serverUrl: string; // 服务器地址
62
+ token: string; // 认证令牌
63
+ reconnectInterval: number; // 重连间隔
64
+ maxReconnectAttempts: number; // 最大重连次数
65
+ proxies: ProxyConfig[]; // 代理配置列表
66
+ }
67
+ ```
68
+
69
+ ### ServerConfig
70
+
71
+ 服务端配置接口:
72
+
73
+ ```typescript
74
+ interface ServerConfig {
75
+ host: string; // 监听地址
76
+ controlPort: number; // 控制端口
77
+ authTokens: string[]; // 认证令牌列表
78
+ heartbeatInterval: number; // 心跳间隔
79
+ sessionTimeout: number; // 会话超时
80
+ }
81
+ ```
82
+
83
+ ## 消息类型
84
+
85
+ - `AUTH` - 客户端认证
86
+ - `AUTH_RESP` - 认证响应
87
+ - `REGISTER` - 注册代理服务
88
+ - `REGISTER_RESP` - 注册响应
89
+ - `UNREGISTER` - 注销代理服务
90
+ - `HEARTBEAT` - 心跳
91
+ - `HEARTBEAT_RESP` - 心跳响应
92
+ - `NEW_CONNECTION` - 新连接通知
93
+ - `CONNECTION_CLOSE` - 连接关闭通知
94
+ - `CONNECTION_ERROR` - 连接错误通知
95
+
96
+ ## 许可证
97
+
98
+ ISC
@@ -0,0 +1,3 @@
1
+ export * from './messages.js';
2
+ export * from './protocol.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAE9B,cAAc,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // 导出所有消息类型
2
+ export * from './messages.js';
3
+ // 导出协议定义
4
+ export * from './protocol.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,eAAe,CAAC;AAC9B,SAAS;AACT,cAAc,eAAe,CAAC"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * 消息类型枚举
3
+ */
4
+ export declare enum MessageType {
5
+ AUTH = "auth",
6
+ AUTH_RESP = "auth_resp",
7
+ REGISTER = "register",
8
+ UNREGISTER = "unregister",
9
+ REGISTER_RESP = "register_resp",
10
+ HEARTBEAT = "heartbeat",
11
+ HEARTBEAT_RESP = "heartbeat_resp",
12
+ NEW_CONNECTION = "new_connection",
13
+ CONNECTION_CLOSE = "connection_close",
14
+ CONNECTION_ERROR = "connection_error"
15
+ }
16
+ /**
17
+ * 协议类型
18
+ */
19
+ export type Protocol = 'http' | 'websocket';
20
+ /**
21
+ * 基础消息接口
22
+ */
23
+ export interface Message {
24
+ type: MessageType;
25
+ id: string;
26
+ payload: unknown;
27
+ }
28
+ /**
29
+ * 认证消息
30
+ */
31
+ export interface AuthMessage extends Message {
32
+ type: MessageType.AUTH;
33
+ payload: {
34
+ token: string;
35
+ };
36
+ }
37
+ /**
38
+ * 认证响应消息
39
+ */
40
+ export interface AuthRespMessage extends Message {
41
+ type: MessageType.AUTH_RESP;
42
+ payload: {
43
+ success: boolean;
44
+ error?: string;
45
+ };
46
+ }
47
+ /**
48
+ * 注册代理服务消息
49
+ */
50
+ export interface RegisterMessage extends Message {
51
+ type: MessageType.REGISTER;
52
+ payload: {
53
+ remotePort: number;
54
+ protocol: Protocol;
55
+ localPort: number;
56
+ localHost?: string;
57
+ };
58
+ }
59
+ /**
60
+ * 注册响应消息
61
+ */
62
+ export interface RegisterRespMessage extends Message {
63
+ type: MessageType.REGISTER_RESP;
64
+ payload: {
65
+ success: boolean;
66
+ remotePort?: number;
67
+ remoteUrl?: string;
68
+ error?: string;
69
+ };
70
+ }
71
+ /**
72
+ * 注销代理服务消息
73
+ */
74
+ export interface UnregisterMessage extends Message {
75
+ type: MessageType.UNREGISTER;
76
+ payload: {
77
+ remotePort: number;
78
+ };
79
+ }
80
+ /**
81
+ * 心跳消息
82
+ */
83
+ export interface HeartbeatMessage extends Message {
84
+ type: MessageType.HEARTBEAT;
85
+ payload: {
86
+ timestamp: number;
87
+ };
88
+ }
89
+ /**
90
+ * 心跳响应消息
91
+ */
92
+ export interface HeartbeatRespMessage extends Message {
93
+ type: MessageType.HEARTBEAT_RESP;
94
+ payload: {
95
+ timestamp: number;
96
+ };
97
+ }
98
+ /**
99
+ * HTTP请求头信息
100
+ */
101
+ export interface HttpHeaders {
102
+ [key: string]: string | string[] | undefined;
103
+ }
104
+ /**
105
+ * 新连接通知消息
106
+ */
107
+ export interface NewConnectionMessage extends Message {
108
+ type: MessageType.NEW_CONNECTION;
109
+ payload: {
110
+ connectionId: string;
111
+ protocol: Protocol;
112
+ method?: string;
113
+ url?: string;
114
+ headers?: HttpHeaders;
115
+ body?: string | Buffer;
116
+ wsHeaders?: HttpHeaders;
117
+ };
118
+ }
119
+ /**
120
+ * HTTP响应数据
121
+ */
122
+ export interface HttpResponseData {
123
+ statusCode: number;
124
+ headers: HttpHeaders;
125
+ body?: string | Buffer;
126
+ }
127
+ /**
128
+ * 连接关闭消息
129
+ */
130
+ export interface ConnectionCloseMessage extends Message {
131
+ type: MessageType.CONNECTION_CLOSE;
132
+ payload: {
133
+ connectionId: string;
134
+ };
135
+ }
136
+ /**
137
+ * 连接错误消息
138
+ */
139
+ export interface ConnectionErrorMessage extends Message {
140
+ type: MessageType.CONNECTION_ERROR;
141
+ payload: {
142
+ connectionId: string;
143
+ error: string;
144
+ };
145
+ }
146
+ /**
147
+ * 所有消息类型的联合类型
148
+ */
149
+ export type AnyMessage = AuthMessage | AuthRespMessage | RegisterMessage | RegisterRespMessage | UnregisterMessage | HeartbeatMessage | HeartbeatRespMessage | NewConnectionMessage | ConnectionCloseMessage | ConnectionErrorMessage;
150
+ /**
151
+ * 消息类型守卫
152
+ */
153
+ export declare function isMessage(obj: unknown): obj is Message;
154
+ /**
155
+ * 检查消息是否为指定类型
156
+ */
157
+ export declare function isMessageType<T extends AnyMessage>(msg: Message, type: T['type']): msg is T;
158
+ /**
159
+ * 创建消息
160
+ */
161
+ export declare function createMessage<T extends Omit<AnyMessage, 'id'>>(type: T['type'], payload: T['payload'], id?: string): T & {
162
+ id: string;
163
+ };
164
+ /**
165
+ * 生成消息ID
166
+ */
167
+ export declare function generateMessageId(): string;
168
+ /**
169
+ * 序列化消息
170
+ */
171
+ export declare function serializeMessage(msg: Message): string;
172
+ /**
173
+ * 反序列化消息
174
+ */
175
+ export declare function deserializeMessage(data: string): Message;
176
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * 消息类型枚举
3
+ */
4
+ export var MessageType;
5
+ (function (MessageType) {
6
+ // 认证消息
7
+ MessageType["AUTH"] = "auth";
8
+ MessageType["AUTH_RESP"] = "auth_resp";
9
+ // 控制消息
10
+ MessageType["REGISTER"] = "register";
11
+ MessageType["UNREGISTER"] = "unregister";
12
+ MessageType["REGISTER_RESP"] = "register_resp";
13
+ MessageType["HEARTBEAT"] = "heartbeat";
14
+ MessageType["HEARTBEAT_RESP"] = "heartbeat_resp";
15
+ // 连接通知
16
+ MessageType["NEW_CONNECTION"] = "new_connection";
17
+ MessageType["CONNECTION_CLOSE"] = "connection_close";
18
+ MessageType["CONNECTION_ERROR"] = "connection_error";
19
+ })(MessageType || (MessageType = {}));
20
+ /**
21
+ * 消息类型守卫
22
+ */
23
+ export function isMessage(obj) {
24
+ if (typeof obj !== 'object' || obj === null) {
25
+ return false;
26
+ }
27
+ const msg = obj;
28
+ return typeof msg.type === 'string' && typeof msg.id === 'string';
29
+ }
30
+ /**
31
+ * 检查消息是否为指定类型
32
+ */
33
+ export function isMessageType(msg, type) {
34
+ return msg.type === type;
35
+ }
36
+ /**
37
+ * 创建消息
38
+ */
39
+ export function createMessage(type, payload, id) {
40
+ return {
41
+ type,
42
+ id: id || generateMessageId(),
43
+ payload,
44
+ };
45
+ }
46
+ /**
47
+ * 生成消息ID
48
+ */
49
+ export function generateMessageId() {
50
+ return `msg_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
51
+ }
52
+ /**
53
+ * 序列化消息
54
+ */
55
+ export function serializeMessage(msg) {
56
+ return JSON.stringify(msg);
57
+ }
58
+ /**
59
+ * 反序列化消息
60
+ */
61
+ export function deserializeMessage(data) {
62
+ try {
63
+ const msg = JSON.parse(data);
64
+ if (!isMessage(msg)) {
65
+ throw new Error('Invalid message format');
66
+ }
67
+ return msg;
68
+ }
69
+ catch (error) {
70
+ throw new Error(`Failed to deserialize message: ${error}`);
71
+ }
72
+ }
73
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,WAgBX;AAhBD,WAAY,WAAW;IACrB,OAAO;IACP,4BAAa,CAAA;IACb,sCAAuB,CAAA;IAEvB,OAAO;IACP,oCAAqB,CAAA;IACrB,wCAAyB,CAAA;IACzB,8CAA+B,CAAA;IAC/B,sCAAuB,CAAA;IACvB,gDAAiC,CAAA;IAEjC,OAAO;IACP,gDAAiC,CAAA;IACjC,oDAAqC,CAAA;IACrC,oDAAqC,CAAA;AACvC,CAAC,EAhBW,WAAW,KAAX,WAAW,QAgBtB;AAmKD;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,GAAG,GAAG,GAAuB,CAAC;IACpC,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAY,EACZ,IAAe;IAEf,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAe,EACf,OAAqB,EACrB,EAAW;IAEX,OAAO;QACL,IAAI;QACJ,EAAE,EAAE,EAAE,IAAI,iBAAiB,EAAE;QAC7B,OAAO;KACc,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * 协议常量
3
+ */
4
+ export declare const PROTOCOL: {
5
+ readonly VERSION: "1.0.0";
6
+ readonly CONTROL_PATH: "/control";
7
+ };
8
+ /**
9
+ * 协议错误码
10
+ */
11
+ export declare enum ErrorCode {
12
+ AUTH_FAILED = "AUTH_FAILED",
13
+ AUTH_TIMEOUT = "AUTH_TIMEOUT",
14
+ PORT_ALREADY_REGISTERED = "PORT_ALREADY_REGISTERED",
15
+ PORT_OUT_OF_RANGE = "PORT_OUT_OF_RANGE",
16
+ INVALID_PORT = "INVALID_PORT",
17
+ CONNECTION_NOT_FOUND = "CONNECTION_NOT_FOUND",
18
+ CONNECTION_TIMEOUT = "CONNECTION_TIMEOUT",
19
+ CLIENT_NOT_FOUND = "CLIENT_NOT_FOUND",
20
+ INVALID_MESSAGE = "INVALID_MESSAGE",
21
+ INTERNAL_ERROR = "INTERNAL_ERROR"
22
+ }
23
+ /**
24
+ * 协议错误类
25
+ */
26
+ export declare class ProtocolError extends Error {
27
+ code: ErrorCode;
28
+ constructor(code: ErrorCode, message: string);
29
+ }
30
+ /**
31
+ * HTTP状态码
32
+ */
33
+ export declare const HTTP_STATUS: {
34
+ readonly OK: 200;
35
+ readonly BAD_REQUEST: 400;
36
+ readonly UNAUTHORIZED: 401;
37
+ readonly NOT_FOUND: 404;
38
+ readonly INTERNAL_SERVER_ERROR: 500;
39
+ readonly BAD_GATEWAY: 502;
40
+ readonly SERVICE_UNAVAILABLE: 503;
41
+ };
42
+ /**
43
+ * 默认配置
44
+ */
45
+ export declare const DEFAULT_CONFIG: {
46
+ readonly CONTROL_PORT: 9000;
47
+ readonly CONTROL_PATH: "/control";
48
+ readonly HEARTBEAT_INTERVAL: 30000;
49
+ readonly HEARTBEAT_TIMEOUT: 60000;
50
+ readonly SESSION_TIMEOUT: 120000;
51
+ readonly RECONNECT_INTERVAL: 5000;
52
+ readonly MAX_RECONNECT_ATTEMPTS: 10;
53
+ readonly MIN_PORT: 1024;
54
+ readonly MAX_PORT: 65535;
55
+ readonly BUFFER_SIZE: number;
56
+ };
57
+ /**
58
+ * 代理配置接口
59
+ */
60
+ export interface ProxyConfig {
61
+ remotePort: number;
62
+ protocol: 'http' | 'websocket';
63
+ localPort: number;
64
+ localHost?: string;
65
+ }
66
+ /**
67
+ * 服务器配置接口
68
+ */
69
+ export interface ServerConfig {
70
+ host: string;
71
+ controlPort: number;
72
+ authTokens: string[];
73
+ heartbeatInterval: number;
74
+ sessionTimeout: number;
75
+ }
76
+ /**
77
+ * 客户端配置接口
78
+ */
79
+ export interface ClientConfig {
80
+ serverUrl: string;
81
+ token: string;
82
+ reconnectInterval: number;
83
+ maxReconnectAttempts: number;
84
+ proxies: ProxyConfig[];
85
+ }
86
+ /**
87
+ * 连接信息接口
88
+ */
89
+ export interface ConnectionInfo {
90
+ id: string;
91
+ remoteAddress: string;
92
+ protocol: 'http' | 'websocket';
93
+ createdAt: number;
94
+ }
95
+ /**
96
+ * 客户端信息接口
97
+ */
98
+ export interface ClientInfo {
99
+ id: string;
100
+ authenticated: boolean;
101
+ authenticatedAt?: number;
102
+ lastHeartbeat?: number;
103
+ registeredPorts: Set<number>;
104
+ connections: Map<string, ConnectionInfo>;
105
+ }
106
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;CAGX,CAAC;AAEX;;GAEG;AACH,oBAAY,SAAS;IAEnB,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAG7B,uBAAuB,4BAA4B;IACnD,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAG7B,oBAAoB,yBAAyB;IAC7C,kBAAkB,uBAAuB;IACzC,gBAAgB,qBAAqB;IAGrC,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAE7B,IAAI,EAAE,SAAS;gBAAf,IAAI,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM;CAKlB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;CAQd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;CAsBjB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC1C"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * 协议常量
3
+ */
4
+ export const PROTOCOL = {
5
+ VERSION: '1.0.0',
6
+ CONTROL_PATH: '/control',
7
+ };
8
+ /**
9
+ * 协议错误码
10
+ */
11
+ export var ErrorCode;
12
+ (function (ErrorCode) {
13
+ // 认证错误
14
+ ErrorCode["AUTH_FAILED"] = "AUTH_FAILED";
15
+ ErrorCode["AUTH_TIMEOUT"] = "AUTH_TIMEOUT";
16
+ // 注册错误
17
+ ErrorCode["PORT_ALREADY_REGISTERED"] = "PORT_ALREADY_REGISTERED";
18
+ ErrorCode["PORT_OUT_OF_RANGE"] = "PORT_OUT_OF_RANGE";
19
+ ErrorCode["INVALID_PORT"] = "INVALID_PORT";
20
+ // 连接错误
21
+ ErrorCode["CONNECTION_NOT_FOUND"] = "CONNECTION_NOT_FOUND";
22
+ ErrorCode["CONNECTION_TIMEOUT"] = "CONNECTION_TIMEOUT";
23
+ ErrorCode["CLIENT_NOT_FOUND"] = "CLIENT_NOT_FOUND";
24
+ // 通用错误
25
+ ErrorCode["INVALID_MESSAGE"] = "INVALID_MESSAGE";
26
+ ErrorCode["INTERNAL_ERROR"] = "INTERNAL_ERROR";
27
+ })(ErrorCode || (ErrorCode = {}));
28
+ /**
29
+ * 协议错误类
30
+ */
31
+ export class ProtocolError extends Error {
32
+ constructor(code, message) {
33
+ super(message);
34
+ this.code = code;
35
+ this.name = 'ProtocolError';
36
+ }
37
+ }
38
+ /**
39
+ * HTTP状态码
40
+ */
41
+ export const HTTP_STATUS = {
42
+ OK: 200,
43
+ BAD_REQUEST: 400,
44
+ UNAUTHORIZED: 401,
45
+ NOT_FOUND: 404,
46
+ INTERNAL_SERVER_ERROR: 500,
47
+ BAD_GATEWAY: 502,
48
+ SERVICE_UNAVAILABLE: 503,
49
+ };
50
+ /**
51
+ * 默认配置
52
+ */
53
+ export const DEFAULT_CONFIG = {
54
+ // 控制通道配置
55
+ CONTROL_PORT: 9000,
56
+ CONTROL_PATH: '/control',
57
+ // 心跳配置
58
+ HEARTBEAT_INTERVAL: 30000, // 30秒
59
+ HEARTBEAT_TIMEOUT: 60000, // 60秒
60
+ // 会话配置
61
+ SESSION_TIMEOUT: 120000, // 2分钟
62
+ // 重连配置
63
+ RECONNECT_INTERVAL: 5000, // 5秒
64
+ MAX_RECONNECT_ATTEMPTS: 10, // 最多重连10次
65
+ // 端口范围
66
+ MIN_PORT: 1024,
67
+ MAX_PORT: 65535,
68
+ // 缓冲区大小
69
+ BUFFER_SIZE: 64 * 1024, // 64KB
70
+ };
71
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,UAAU;CAChB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAN,IAAY,SAkBX;AAlBD,WAAY,SAAS;IACnB,OAAO;IACP,wCAA2B,CAAA;IAC3B,0CAA6B,CAAA;IAE7B,OAAO;IACP,gEAAmD,CAAA;IACnD,oDAAuC,CAAA;IACvC,0CAA6B,CAAA;IAE7B,OAAO;IACP,0DAA6C,CAAA;IAC7C,sDAAyC,CAAA;IACzC,kDAAqC,CAAA;IAErC,OAAO;IACP,gDAAmC,CAAA;IACnC,8CAAiC,CAAA;AACnC,CAAC,EAlBW,SAAS,KAAT,SAAS,QAkBpB;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YACS,IAAe,EACtB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAW;QAItB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,GAAG;IACP,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,qBAAqB,EAAE,GAAG;IAC1B,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,GAAG;CAChB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS;IACT,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,UAAU;IAExB,OAAO;IACP,kBAAkB,EAAE,KAAK,EAAE,MAAM;IACjC,iBAAiB,EAAE,KAAK,EAAG,MAAM;IAEjC,OAAO;IACP,eAAe,EAAE,MAAM,EAAG,MAAM;IAEhC,OAAO;IACP,kBAAkB,EAAE,IAAI,EAAM,KAAK;IACnC,sBAAsB,EAAE,EAAE,EAAI,UAAU;IAExC,OAAO;IACP,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,KAAK;IAEf,QAAQ;IACR,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO;CACvB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@feng3d/chuantou-shared",
3
+ "version": "0.0.2",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "watch": "tsc --watch"
19
+ },
20
+ "devDependencies": {
21
+ "typescript": "^5.3.3"
22
+ }
23
+ }