sx-peerjs-http-util 1.0.6 → 1.2.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.
- package/README.md +27 -282
- package/dist/CallSession.d.ts +99 -0
- package/dist/CallSession.d.ts.map +1 -0
- package/dist/MessageHandler.d.ts +110 -0
- package/dist/MessageHandler.d.ts.map +1 -0
- package/dist/PeerJsWrapper.d.ts +172 -0
- package/dist/PeerJsWrapper.d.ts.map +1 -0
- package/dist/Router.d.ts +186 -0
- package/dist/Router.d.ts.map +1 -0
- package/dist/RoutingDB.d.ts +75 -0
- package/dist/RoutingDB.d.ts.map +1 -0
- package/dist/constants.d.ts +23 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/index.d.ts +3 -184
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +1308 -181
- package/dist/index.esm.js.map +3 -3
- package/dist/index.umd.js +1306 -181
- package/dist/index.umd.js.map +3 -3
- package/dist/types.d.ts +96 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PeerJsWrapper - 封装 PeerJS 为类似 HTTP 的 API
|
|
3
|
+
*
|
|
4
|
+
* 核心功能:
|
|
5
|
+
* 1. 类似 HTTP 的请求/响应机制(send/relaySend)
|
|
6
|
+
* 2. 语音/视频通话(call/onIncomingCall)
|
|
7
|
+
* 3. 中继路由(relaySend/getRoutingTable/getKnownNodes)
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // 基本请求
|
|
11
|
+
* const wrapper = new PeerJsWrapper();
|
|
12
|
+
* const data = await wrapper.send(peerId, '/api/hello', { name: 'world' });
|
|
13
|
+
*
|
|
14
|
+
* // 中继请求
|
|
15
|
+
* await wrapper.relaySend(targetId, '/api/data', 'test', ['relayNode1', 'relayNode2']);
|
|
16
|
+
*
|
|
17
|
+
* // 语音通话
|
|
18
|
+
* const call = await wrapper.call(peerId, { video: true });
|
|
19
|
+
*/
|
|
20
|
+
import type { Request, Response, SimpleHandler, CallOptions, CallSession, CallState, CallStateListener, IncomingCallEvent, IncomingCallListener, RouteEntry, RelayConfig, RelayMessage, ServerConfig } from './types';
|
|
21
|
+
export declare const VERSION: string;
|
|
22
|
+
/**
|
|
23
|
+
* PeerJsWrapper 主类
|
|
24
|
+
* 封装 PeerJS,提供类似 HTTP 的 API
|
|
25
|
+
*/
|
|
26
|
+
export declare class PeerJsWrapper {
|
|
27
|
+
/** 本地 Peer ID */
|
|
28
|
+
private myPeerId;
|
|
29
|
+
/** PeerJS 实例 */
|
|
30
|
+
private peerInstance;
|
|
31
|
+
/** 当前活跃的传入连接集合 */
|
|
32
|
+
private connections;
|
|
33
|
+
/** 待处理的请求映射表(用于请求-响应匹配) */
|
|
34
|
+
private pendingRequests;
|
|
35
|
+
/** 路径处理器映射表 */
|
|
36
|
+
private simpleHandlers;
|
|
37
|
+
/** 重连定时器 */
|
|
38
|
+
private reconnectTimer;
|
|
39
|
+
/** 是否已销毁 */
|
|
40
|
+
private isDestroyed;
|
|
41
|
+
/** 是否开启调试模式 */
|
|
42
|
+
private isDebug;
|
|
43
|
+
/** 服务器配置 */
|
|
44
|
+
private serverConfig?;
|
|
45
|
+
/** 当前活跃的通话 */
|
|
46
|
+
private activeCall;
|
|
47
|
+
/** 来电监听器集合 */
|
|
48
|
+
private incomingCallListeners;
|
|
49
|
+
/** 路由管理器 */
|
|
50
|
+
private router;
|
|
51
|
+
/** 消息处理器 */
|
|
52
|
+
private messageHandler;
|
|
53
|
+
/**
|
|
54
|
+
* 创建 PeerJsWrapper 实例
|
|
55
|
+
* @param peerId 可选的 Peer ID,如果不提供则自动生成 UUID
|
|
56
|
+
* @param isDebug 是否开启调试模式,开启后会打印事件日志
|
|
57
|
+
* @param server 可选的信令服务器配置,不提供则使用 PeerJS 公共服务器
|
|
58
|
+
* @param relayConfig 可选的中继配置
|
|
59
|
+
*/
|
|
60
|
+
constructor(peerId?: string, isDebug?: boolean, server?: ServerConfig, relayConfig?: RelayConfig);
|
|
61
|
+
/**
|
|
62
|
+
* 创建实例并等待就绪(语法糖)
|
|
63
|
+
* @param peerId 可选的 Peer ID
|
|
64
|
+
* @param isDebug 是否开启调试模式
|
|
65
|
+
* @param server 可选的信令服务器配置
|
|
66
|
+
* @param relayConfig 可选的中继配置
|
|
67
|
+
* @returns Promise<PeerJsWrapper>
|
|
68
|
+
*/
|
|
69
|
+
static create(peerId?: string, isDebug?: boolean, server?: ServerConfig, relayConfig?: RelayConfig): Promise<PeerJsWrapper>;
|
|
70
|
+
private debugLog;
|
|
71
|
+
private connect;
|
|
72
|
+
private setupPeerEventHandlers;
|
|
73
|
+
private scheduleReconnect;
|
|
74
|
+
private reconnect;
|
|
75
|
+
getPeerId(): string;
|
|
76
|
+
private whenReady;
|
|
77
|
+
private waitForReady;
|
|
78
|
+
getRoutingTable(): Record<string, RouteEntry>;
|
|
79
|
+
getKnownNodes(): string[];
|
|
80
|
+
/**
|
|
81
|
+
* 发送中继消息的辅助方法
|
|
82
|
+
* @param targetId 目标节点 ID
|
|
83
|
+
* @param message 中继消息
|
|
84
|
+
*/
|
|
85
|
+
private sendRelayMessage;
|
|
86
|
+
/**
|
|
87
|
+
* 尝试直连目标节点
|
|
88
|
+
* @param targetId 目标节点 ID
|
|
89
|
+
* @param path 请求路径
|
|
90
|
+
* @param data 请求数据
|
|
91
|
+
* @param requestId 请求 ID
|
|
92
|
+
* @returns Promise<unknown> - 响应数据
|
|
93
|
+
*/
|
|
94
|
+
private tryDirectConnect;
|
|
95
|
+
/**
|
|
96
|
+
* 通过中继节点转发请求
|
|
97
|
+
* @param nextHopId 下一跳节点 ID
|
|
98
|
+
* @param targetId 原始目标节点 ID
|
|
99
|
+
* @param path 请求路径
|
|
100
|
+
* @param data 请求数据
|
|
101
|
+
* @returns Promise<unknown> - 响应数据
|
|
102
|
+
*/
|
|
103
|
+
private relayVia;
|
|
104
|
+
/**
|
|
105
|
+
* 自动路由发送
|
|
106
|
+
*
|
|
107
|
+
* 1. 查路由表 → 有路由 → 尝试中继 → 全部失败 → 降级直连 → 失败 → 结束
|
|
108
|
+
* 2. 路由表无目标 → 直连 → 失败 → 结束
|
|
109
|
+
* @param peerId 目标节点 ID
|
|
110
|
+
* @param path 请求路径
|
|
111
|
+
* @param data 请求数据
|
|
112
|
+
* @returns Promise<unknown> - 响应数据
|
|
113
|
+
*/
|
|
114
|
+
send(peerId: string, path: string, data?: unknown): Promise<unknown>;
|
|
115
|
+
/**
|
|
116
|
+
* 处理发送错误
|
|
117
|
+
* @param peerId 目标节点 ID
|
|
118
|
+
* @param error 错误对象
|
|
119
|
+
* @returns Promise
|
|
120
|
+
*/
|
|
121
|
+
private handleSendError;
|
|
122
|
+
/**
|
|
123
|
+
* 降级到直连尝试
|
|
124
|
+
* @param peerId 目标节点 ID
|
|
125
|
+
* @param path 请求路径
|
|
126
|
+
* @param data 请求数据
|
|
127
|
+
* @param requestId 请求 ID
|
|
128
|
+
* @returns Promise
|
|
129
|
+
*/
|
|
130
|
+
private fallbackToDirect;
|
|
131
|
+
/**
|
|
132
|
+
* 尝试通过中继链转发
|
|
133
|
+
* @param targetId 目标节点 ID
|
|
134
|
+
* @param path 请求路径
|
|
135
|
+
* @param data 请求数据
|
|
136
|
+
* @param nextHops 下一跳列表
|
|
137
|
+
* @param index 当前尝试的下一跳索引
|
|
138
|
+
* @returns Promise<unknown>
|
|
139
|
+
*/
|
|
140
|
+
private tryRelayChain;
|
|
141
|
+
/**
|
|
142
|
+
* 执行路由发现
|
|
143
|
+
* @param targetId 目标节点 ID
|
|
144
|
+
* @param path 请求路径
|
|
145
|
+
* @param data 请求数据
|
|
146
|
+
* @param requestId 请求 ID
|
|
147
|
+
* @returns Promise<unknown>
|
|
148
|
+
*/
|
|
149
|
+
private performRouteDiscovery;
|
|
150
|
+
/**
|
|
151
|
+
* 中继发送(内部方法,不对外暴露)
|
|
152
|
+
* @param targetId 目标节点 ID
|
|
153
|
+
* @param path 请求路径
|
|
154
|
+
* @param data 请求数据
|
|
155
|
+
* @param relayNodes 手动指定的中继节点(可选,不指定则自动路由)
|
|
156
|
+
* @returns Promise<unknown>
|
|
157
|
+
*/
|
|
158
|
+
private relaySend;
|
|
159
|
+
private setupIncomingConnectionHandler;
|
|
160
|
+
call(peerId: string, options?: CallOptions): Promise<CallSession>;
|
|
161
|
+
onIncomingCall(listener: IncomingCallListener): void;
|
|
162
|
+
offIncomingCall(listener: IncomingCallListener): void;
|
|
163
|
+
getActiveCall(): CallSession | null;
|
|
164
|
+
private setupMediaConnectionHandlers;
|
|
165
|
+
private cleanupCall;
|
|
166
|
+
private handleIncomingCall;
|
|
167
|
+
registerHandler(path: string, handler: SimpleHandler): void;
|
|
168
|
+
unregisterHandler(path: string): void;
|
|
169
|
+
destroy(): void;
|
|
170
|
+
}
|
|
171
|
+
export type { Request, Response, SimpleHandler, CallOptions, CallSession, CallState, CallStateListener, IncomingCallEvent, IncomingCallListener, RouteEntry, RelayConfig, RelayMessage };
|
|
172
|
+
//# sourceMappingURL=PeerJsWrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeerJsWrapper.d.ts","sourceRoot":"","sources":["../src/PeerJsWrapper.ts"],"names":[],"mappings":"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"}
|
package/dist/Router.d.ts
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Router - 路由管理器
|
|
3
|
+
*
|
|
4
|
+
* 负责中继通信的核心功能:
|
|
5
|
+
* - 维护直连节点列表及延迟(directNodes)
|
|
6
|
+
* - 维护路由表(routingTable):目标节点 -> 多个下一跳(含延迟)
|
|
7
|
+
* - 广播路由更新到邻居节点
|
|
8
|
+
* - 路由发现:当直连和路由表都失败时,广播询问谁能连通目标
|
|
9
|
+
* - 处理路由查询和响应
|
|
10
|
+
*
|
|
11
|
+
* 路由机制:
|
|
12
|
+
* 1. 每次成功通信后,记录对方节点为直连节点并测量延迟
|
|
13
|
+
* 2. 成功后广播路由更新,告知对方自己可达的节点
|
|
14
|
+
* 3. 收到路由更新后,合并到本地路由表
|
|
15
|
+
* 4. 直连失败且路由表为空时,执行路由发现广播
|
|
16
|
+
*/
|
|
17
|
+
import type { Peer } from 'peerjs';
|
|
18
|
+
import type { RouteEntry, NextHop, DirectNodeLatency, RelayConfig, RelayMessage } from './types';
|
|
19
|
+
/**
|
|
20
|
+
* 路由管理器回调接口
|
|
21
|
+
*/
|
|
22
|
+
export interface RoutingCallbacks {
|
|
23
|
+
/** 获取本地 Peer ID */
|
|
24
|
+
getMyPeerId(): string;
|
|
25
|
+
/** 获取 PeerJS 实例 */
|
|
26
|
+
getPeerInstance(): Peer | null;
|
|
27
|
+
/** 调试日志函数 */
|
|
28
|
+
debugLog: (obj: string, event: string, data?: unknown) => void;
|
|
29
|
+
/** 发送中继消息 */
|
|
30
|
+
sendRelayMessage(targetId: string, message: RelayMessage): Promise<void>;
|
|
31
|
+
/** 处理路由查询响应 */
|
|
32
|
+
onRouteDiscoveryResponse?: (targetId: string, latency: number) => void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 路由器类
|
|
36
|
+
* 负责维护路由表、节点发现和自动路由选择
|
|
37
|
+
*/
|
|
38
|
+
export declare class Router {
|
|
39
|
+
/** 路由表:target -> RouteEntry */
|
|
40
|
+
private routingTable;
|
|
41
|
+
/** 直连节点及延迟列表 */
|
|
42
|
+
private directNodes;
|
|
43
|
+
/** 中继配置 */
|
|
44
|
+
private relayConfig;
|
|
45
|
+
/** 回调函数集合 */
|
|
46
|
+
private callbacks;
|
|
47
|
+
/** 等待路由发现响应的 pending 队列 */
|
|
48
|
+
private pendingRouteQueries;
|
|
49
|
+
/** 定时清理定时器 */
|
|
50
|
+
private cleanupTimer;
|
|
51
|
+
/** 周期广播定时器 */
|
|
52
|
+
private broadcastTimer;
|
|
53
|
+
/**
|
|
54
|
+
* 创建路由管理器
|
|
55
|
+
* @param callbacks 回调函数集合
|
|
56
|
+
* @param relayConfig 中继配置(可选)
|
|
57
|
+
*/
|
|
58
|
+
constructor(callbacks: RoutingCallbacks, relayConfig?: RelayConfig);
|
|
59
|
+
/**
|
|
60
|
+
* 初始化路由管理器(从 IndexedDB 加载数据并启动定时任务)
|
|
61
|
+
*/
|
|
62
|
+
init(): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* 从 IndexedDB 加载路由数据
|
|
65
|
+
*/
|
|
66
|
+
private loadFromDB;
|
|
67
|
+
/**
|
|
68
|
+
* 启动定时维护任务
|
|
69
|
+
*/
|
|
70
|
+
private startMaintenanceTasks;
|
|
71
|
+
/**
|
|
72
|
+
* 清理过期路由条目
|
|
73
|
+
*/
|
|
74
|
+
private cleanupExpiredEntries;
|
|
75
|
+
/**
|
|
76
|
+
* 持久化路由表到 IndexedDB
|
|
77
|
+
*/
|
|
78
|
+
persist(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* 销毁路由管理器(清理定时器)
|
|
81
|
+
*/
|
|
82
|
+
destroy(): void;
|
|
83
|
+
/**
|
|
84
|
+
* 记录成功的直连通信
|
|
85
|
+
* @param nodeId 节点 ID
|
|
86
|
+
* @param latency 延迟(毫秒)
|
|
87
|
+
*/
|
|
88
|
+
recordDirectNode(nodeId: string, latency: number): void;
|
|
89
|
+
/**
|
|
90
|
+
* 获取直连节点列表(按延迟升序)
|
|
91
|
+
* @returns 直连节点列表
|
|
92
|
+
*/
|
|
93
|
+
getDirectNodes(): DirectNodeLatency[];
|
|
94
|
+
/**
|
|
95
|
+
* 检查是否可以直连目标节点
|
|
96
|
+
* @param targetId 目标节点 ID
|
|
97
|
+
* @returns 是否可以直连
|
|
98
|
+
*/
|
|
99
|
+
canReachDirectly(targetId: string): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* 获取到直连节点的延迟
|
|
102
|
+
* @param nodeId 节点 ID
|
|
103
|
+
* @returns 延迟(毫秒),如果不存在返回 null
|
|
104
|
+
*/
|
|
105
|
+
getDirectLatency(nodeId: string): number | null;
|
|
106
|
+
/**
|
|
107
|
+
* 移除失效的路由(通信失败时调用)
|
|
108
|
+
* @param nodeId 失效的节点 ID
|
|
109
|
+
*/
|
|
110
|
+
removeRoute(nodeId: string): void;
|
|
111
|
+
/**
|
|
112
|
+
* 检查路由表是否为空
|
|
113
|
+
* @returns 是否为空
|
|
114
|
+
*/
|
|
115
|
+
isRoutingTableEmpty(): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* 记录成功通信的节点(兼容旧接口)
|
|
118
|
+
* @param nodeId 节点 ID
|
|
119
|
+
*/
|
|
120
|
+
recordSuccessfulNode(nodeId: string): void;
|
|
121
|
+
/**
|
|
122
|
+
* 广播路由更新
|
|
123
|
+
* 向所有直连节点发送路由更新消息,告知它们本节点可达的节点列表
|
|
124
|
+
*/
|
|
125
|
+
broadcastRouteUpdate(): Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* 获取本节点可达的节点列表
|
|
128
|
+
* @returns 可达节点数组(直连节点 + 自己)
|
|
129
|
+
*/
|
|
130
|
+
private getReachableNodes;
|
|
131
|
+
/**
|
|
132
|
+
* 发送路由更新到指定节点
|
|
133
|
+
* @param targetId 目标节点 ID
|
|
134
|
+
* @param reachableNodes 可达的节点列表
|
|
135
|
+
*/
|
|
136
|
+
private sendRouteUpdate;
|
|
137
|
+
/**
|
|
138
|
+
* 处理收到的路由更新
|
|
139
|
+
* 合并对端发来的可达节点信息到本地路由表
|
|
140
|
+
* @param fromPeerId 发送路由更新的节点 ID
|
|
141
|
+
* @param message 路由更新消息
|
|
142
|
+
*/
|
|
143
|
+
handleRouteUpdate(fromPeerId: string, message: RelayMessage): void;
|
|
144
|
+
/**
|
|
145
|
+
* 执行路由发现广播
|
|
146
|
+
* 当直连和路由表都失败时,向所有直连节点广播询问谁能连通目标
|
|
147
|
+
* @param targetId 目标节点 ID
|
|
148
|
+
* @returns 路由条目(如果发现)
|
|
149
|
+
*/
|
|
150
|
+
discoverRoute(targetId: string): Promise<RouteEntry | null>;
|
|
151
|
+
/**
|
|
152
|
+
* 处理路由查询消息
|
|
153
|
+
* @param fromPeerId 发送查询的节点
|
|
154
|
+
* @param message 路由查询消息
|
|
155
|
+
*/
|
|
156
|
+
handleRouteQuery(fromPeerId: string, message: RelayMessage): void;
|
|
157
|
+
/**
|
|
158
|
+
* 处理路由查询响应
|
|
159
|
+
* @param fromPeerId 响应者节点
|
|
160
|
+
* @param message 路由响应消息
|
|
161
|
+
*/
|
|
162
|
+
handleRouteResponse(fromPeerId: string, message: RelayMessage): void;
|
|
163
|
+
/**
|
|
164
|
+
* 查找到目标节点的下一跳
|
|
165
|
+
* @param targetId 目标节点 ID
|
|
166
|
+
* @returns 下一跳信息,如果没有则返回 null
|
|
167
|
+
*/
|
|
168
|
+
findNextHopToTarget(targetId: string): NextHop | null;
|
|
169
|
+
/**
|
|
170
|
+
* 获取到目标节点的所有下一跳(按延迟升序)
|
|
171
|
+
* @param targetId 目标节点 ID
|
|
172
|
+
* @returns 下一跳列表
|
|
173
|
+
*/
|
|
174
|
+
getNextHopsToTarget(targetId: string): NextHop[];
|
|
175
|
+
/**
|
|
176
|
+
* 获取路由表
|
|
177
|
+
* @returns 路由表对象
|
|
178
|
+
*/
|
|
179
|
+
getRoutingTable(): Record<string, RouteEntry>;
|
|
180
|
+
/**
|
|
181
|
+
* 获取已知节点列表(兼容旧接口)
|
|
182
|
+
* @returns 节点 ID 数组
|
|
183
|
+
*/
|
|
184
|
+
getKnownNodes(): string[];
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=Router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../src/Router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoutingDB.ts - 路由表 IndexedDB 持久化模块
|
|
3
|
+
*
|
|
4
|
+
* 提供路由表的持久化存储功能,使用 IndexedDB 而非 localStorage
|
|
5
|
+
* 以支持大规模路由表存储
|
|
6
|
+
*
|
|
7
|
+
* 数据库结构:
|
|
8
|
+
* - peerjs-routing-db (版本 1)
|
|
9
|
+
* - routing-table: 路由表条目 (keyPath: target)
|
|
10
|
+
* - direct-nodes: 直连节点 (keyPath: nodeId)
|
|
11
|
+
*/
|
|
12
|
+
import type { RouteEntry, DirectNodeLatency } from './types';
|
|
13
|
+
/**
|
|
14
|
+
* 初始化数据库
|
|
15
|
+
* @returns Promise<void>
|
|
16
|
+
*/
|
|
17
|
+
export declare function initRoutingDB(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* 保存路由表条目
|
|
20
|
+
* @param entry 路由表条目
|
|
21
|
+
*/
|
|
22
|
+
export declare function saveRouteEntry(entry: RouteEntry): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* 批量保存路由表条目
|
|
25
|
+
* @param entries 路由表条目数组
|
|
26
|
+
*/
|
|
27
|
+
export declare function saveRouteEntries(entries: RouteEntry[]): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* 删除路由表条目
|
|
30
|
+
* @param target 目标节点 ID
|
|
31
|
+
*/
|
|
32
|
+
export declare function deleteRouteEntry(target: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* 加载全部路由表
|
|
35
|
+
* @returns Promise<RouteEntry[]>
|
|
36
|
+
*/
|
|
37
|
+
export declare function loadRoutingTable(): Promise<RouteEntry[]>;
|
|
38
|
+
/**
|
|
39
|
+
* 清理过期路由表条目
|
|
40
|
+
* @param maxAgeMs 最大保留时间(毫秒),默认 5 分钟
|
|
41
|
+
* @returns Promise<number> 删除的条目数量
|
|
42
|
+
*/
|
|
43
|
+
export declare function cleanupExpiredRoutes(maxAgeMs?: number): Promise<number>;
|
|
44
|
+
/**
|
|
45
|
+
* 保存直连节点
|
|
46
|
+
* @param node 直连节点
|
|
47
|
+
*/
|
|
48
|
+
export declare function saveDirectNode(node: DirectNodeLatency): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* 批量保存直连节点
|
|
51
|
+
* @param nodes 直连节点数组
|
|
52
|
+
*/
|
|
53
|
+
export declare function saveDirectNodes(nodes: DirectNodeLatency[]): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* 加载全部直连节点
|
|
56
|
+
* @returns Promise<DirectNodeLatency[]>
|
|
57
|
+
*/
|
|
58
|
+
export declare function loadDirectNodes(): Promise<DirectNodeLatency[]>;
|
|
59
|
+
/**
|
|
60
|
+
* 删除直连节点
|
|
61
|
+
* @param nodeId 节点 ID
|
|
62
|
+
*/
|
|
63
|
+
export declare function deleteDirectNode(nodeId: string): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* 清理过期直连节点
|
|
66
|
+
* @param maxAgeMs 最大保留时间(毫秒),默认 5 分钟
|
|
67
|
+
* @returns Promise<number> 删除的节点数量
|
|
68
|
+
*/
|
|
69
|
+
export declare function cleanupExpiredNodes(maxAgeMs?: number): Promise<number>;
|
|
70
|
+
/**
|
|
71
|
+
* 清除全部路由数据
|
|
72
|
+
* @returns Promise<void>
|
|
73
|
+
*/
|
|
74
|
+
export declare function clearAllRoutingData(): Promise<void>;
|
|
75
|
+
//# sourceMappingURL=RoutingDB.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoutingDB.d.ts","sourceRoot":"","sources":["../src/RoutingDB.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA+E7D;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAc3E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAE9D;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,GAAE,MAA4B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBlG;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/E;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAEpE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,GAAE,MAA4B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBjG;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBzD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 常量定义
|
|
3
|
+
* 集中管理所有魔法数字和配置值
|
|
4
|
+
*/
|
|
5
|
+
/** 连接超时(毫秒) */
|
|
6
|
+
export declare const CONNECTION_TIMEOUT_MS = 30000;
|
|
7
|
+
/** 发送超时(毫秒) */
|
|
8
|
+
export declare const SEND_TIMEOUT_MS = 10000;
|
|
9
|
+
/** 重连延迟(毫秒) */
|
|
10
|
+
export declare const RECONNECT_DELAY_MS = 1000;
|
|
11
|
+
/** 路由过期时间(毫秒) */
|
|
12
|
+
export declare const ROUTE_EXPIRE_AGE_MS: number;
|
|
13
|
+
/** 路由表容量限制 */
|
|
14
|
+
export declare const MAX_ROUTING_ENTRIES = 50;
|
|
15
|
+
/** 直连节点容量限制 */
|
|
16
|
+
export declare const MAX_DIRECT_NODES = 5;
|
|
17
|
+
/** 路由清理周期(毫秒) */
|
|
18
|
+
export declare const ROUTE_CLEANUP_INTERVAL_MS: number;
|
|
19
|
+
/** 路由广播周期(毫秒) */
|
|
20
|
+
export declare const ROUTE_BROADCAST_INTERVAL_MS: number;
|
|
21
|
+
/** 默认 TTL(Time To Live)- 消息最大跳数 */
|
|
22
|
+
export declare const DEFAULT_TTL = 128;
|
|
23
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAe;AACf,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C,eAAe;AACf,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC,eAAe;AACf,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,iBAAiB;AACjB,eAAO,MAAM,mBAAmB,QAAgB,CAAC;AAEjD,cAAc;AACd,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,eAAe;AACf,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,iBAAiB;AACjB,eAAO,MAAM,yBAAyB,QAAY,CAAC;AAEnD,iBAAiB;AACjB,eAAO,MAAM,2BAA2B,QAAY,CAAC;AAErD,mCAAmC;AACnC,eAAO,MAAM,WAAW,MAAM,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,185 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
* 服务器配置(PeerJS 信令服务器)
|
|
5
|
-
*/
|
|
6
|
-
export interface ServerConfig {
|
|
7
|
-
host?: string;
|
|
8
|
-
port?: number;
|
|
9
|
-
path?: string;
|
|
10
|
-
secure?: boolean;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* PeerJsWrapper - 封装 PeerJS 为类似 HTTP 的 API
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```js
|
|
17
|
-
* const wrapper = new PeerJsWrapper();
|
|
18
|
-
* const data = await wrapper.send(peerId, '/api/hello', { name: 'world' });
|
|
19
|
-
* console.log(data); // 直接输出响应数据
|
|
20
|
-
*
|
|
21
|
-
* // 服务端注册处理器
|
|
22
|
-
* wrapper.registerHandler('/api/hello', (data) => {
|
|
23
|
-
* return { message: 'hello' }; // 直接返回数据
|
|
24
|
-
* });
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
export declare class PeerJsWrapper {
|
|
28
|
-
/**
|
|
29
|
-
* 本地 Peer ID,构造时确定(传入或自动生成)
|
|
30
|
-
*/
|
|
31
|
-
private myPeerId;
|
|
32
|
-
/**
|
|
33
|
-
* PeerJS 实例
|
|
34
|
-
*/
|
|
35
|
-
private peerInstance;
|
|
36
|
-
/**
|
|
37
|
-
* 当前活跃的传入连接集合
|
|
38
|
-
*/
|
|
39
|
-
private connections;
|
|
40
|
-
/**
|
|
41
|
-
* 待处理的请求映射表(用于请求-响应匹配)
|
|
42
|
-
*/
|
|
43
|
-
private pendingRequests;
|
|
44
|
-
/**
|
|
45
|
-
* 路径处理器映射表
|
|
46
|
-
*/
|
|
47
|
-
private simpleHandlers;
|
|
48
|
-
/**
|
|
49
|
-
* 重连定时器
|
|
50
|
-
*/
|
|
51
|
-
private reconnectTimer;
|
|
52
|
-
/**
|
|
53
|
-
* 是否已销毁
|
|
54
|
-
*/
|
|
55
|
-
private isDestroyed;
|
|
56
|
-
/**
|
|
57
|
-
* 是否开启调试模式
|
|
58
|
-
*/
|
|
59
|
-
private isDebug;
|
|
60
|
-
/**
|
|
61
|
-
* 服务器配置
|
|
62
|
-
*/
|
|
63
|
-
private serverConfig?;
|
|
64
|
-
/**
|
|
65
|
-
* 当前活跃的通话
|
|
66
|
-
*/
|
|
67
|
-
private activeCall;
|
|
68
|
-
/**
|
|
69
|
-
* 来电监听器集合
|
|
70
|
-
*/
|
|
71
|
-
private incomingCallListeners;
|
|
72
|
-
/**
|
|
73
|
-
* 创建 PeerJsWrapper 实例
|
|
74
|
-
* @param peerId 可选的 Peer ID,如果不提供则自动生成 UUID
|
|
75
|
-
* @param isDebug 是否开启调试模式,开启后会打印事件日志
|
|
76
|
-
* @param server 可选的信令服务器配置,不提供则使用 PeerJS 公共服务器
|
|
77
|
-
*/
|
|
78
|
-
constructor(peerId?: string, isDebug?: boolean, server?: ServerConfig);
|
|
79
|
-
/**
|
|
80
|
-
* 调试日志输出
|
|
81
|
-
* @param obj 对象名
|
|
82
|
-
* @param event 事件名
|
|
83
|
-
* @param data 事件数据
|
|
84
|
-
*/
|
|
85
|
-
private debugLog;
|
|
86
|
-
/**
|
|
87
|
-
* 连接到 PeerJS 服务器
|
|
88
|
-
*/
|
|
89
|
-
private connect;
|
|
90
|
-
/**
|
|
91
|
-
* 设置 Peer 实例的事件处理器
|
|
92
|
-
*/
|
|
93
|
-
private setupPeerEventHandlers;
|
|
94
|
-
/**
|
|
95
|
-
* 安排重连
|
|
96
|
-
*/
|
|
97
|
-
private scheduleReconnect;
|
|
98
|
-
/**
|
|
99
|
-
* 执行重连
|
|
100
|
-
*/
|
|
101
|
-
private reconnect;
|
|
102
|
-
/**
|
|
103
|
-
* 获取当前 Peer ID
|
|
104
|
-
* @returns string 当前 Peer ID
|
|
105
|
-
*/
|
|
106
|
-
getPeerId(): string;
|
|
107
|
-
/**
|
|
108
|
-
* 等待 Peer 连接就绪(连接到信令服务器)
|
|
109
|
-
* @returns Promise<void> 当连接成功时 resolve
|
|
110
|
-
*/
|
|
111
|
-
whenReady(): Promise<void>;
|
|
112
|
-
/**
|
|
113
|
-
* 等待 Peer 连接就绪
|
|
114
|
-
*/
|
|
115
|
-
private waitForReady;
|
|
116
|
-
/**
|
|
117
|
-
* 发送请求到指定 Peer
|
|
118
|
-
* @param peerId 对端设备 ID
|
|
119
|
-
* @param path 请求路径
|
|
120
|
-
* @param data 请求数据
|
|
121
|
-
* @returns Promise<unknown> 返回响应数据(自动拆箱,只返回 data 部分)
|
|
122
|
-
*/
|
|
123
|
-
send(peerId: string, path: string, data?: unknown): Promise<unknown>;
|
|
124
|
-
/**
|
|
125
|
-
* 设置传入连接处理器
|
|
126
|
-
*/
|
|
127
|
-
private setupIncomingConnectionHandler;
|
|
128
|
-
/**
|
|
129
|
-
* 发起语音/视频通话
|
|
130
|
-
* @param peerId 对端设备 ID
|
|
131
|
-
* @param options 通话选项
|
|
132
|
-
* @returns Promise<CallSession> 通话会话对象
|
|
133
|
-
*/
|
|
134
|
-
call(peerId: string, options?: CallOptions): Promise<CallSession>;
|
|
135
|
-
/**
|
|
136
|
-
* 注册来电监听器
|
|
137
|
-
* @param listener 来电回调函数
|
|
138
|
-
*/
|
|
139
|
-
onIncomingCall(listener: IncomingCallListener): void;
|
|
140
|
-
/**
|
|
141
|
-
* 移除来电监听器
|
|
142
|
-
* @param listener 来电回调函数
|
|
143
|
-
*/
|
|
144
|
-
offIncomingCall(listener: IncomingCallListener): void;
|
|
145
|
-
/**
|
|
146
|
-
* 获取当前活跃的通话
|
|
147
|
-
* @returns CallSession | null 当前通话会话,无通话时返回 null
|
|
148
|
-
*/
|
|
149
|
-
getActiveCall(): CallSession | null;
|
|
150
|
-
/**
|
|
151
|
-
* 设置 MediaConnection 事件处理器
|
|
152
|
-
*/
|
|
153
|
-
private setupMediaConnectionHandlers;
|
|
154
|
-
/**
|
|
155
|
-
* 清理通话资源
|
|
156
|
-
*/
|
|
157
|
-
private cleanupCall;
|
|
158
|
-
/**
|
|
159
|
-
* 处理来电
|
|
160
|
-
*/
|
|
161
|
-
private handleIncomingCall;
|
|
162
|
-
/**
|
|
163
|
-
* 注册简化处理器(直接返回数据,自动装箱)
|
|
164
|
-
* @param path 请求路径
|
|
165
|
-
* @param handler 处理器函数,接收请求数据,直接返回响应数据
|
|
166
|
-
*/
|
|
167
|
-
registerHandler(path: string, handler: SimpleHandler): void;
|
|
168
|
-
/**
|
|
169
|
-
* 注销简化处理器
|
|
170
|
-
* @param path 请求路径
|
|
171
|
-
*/
|
|
172
|
-
unregisterHandler(path: string): void;
|
|
173
|
-
/**
|
|
174
|
-
* 内部请求处理方法
|
|
175
|
-
* @param from 发送者的 Peer ID
|
|
176
|
-
* @param request 请求数据
|
|
177
|
-
*/
|
|
178
|
-
private handleRequest;
|
|
179
|
-
/**
|
|
180
|
-
* 关闭所有连接并销毁 Peer 实例
|
|
181
|
-
*/
|
|
182
|
-
destroy(): void;
|
|
183
|
-
}
|
|
184
|
-
export type { Request, Response, SimpleHandler, CallOptions, CallSession, CallState, CallStateListener, IncomingCallEvent, IncomingCallListener };
|
|
1
|
+
export { PeerJsWrapper, VERSION } from './PeerJsWrapper';
|
|
2
|
+
export { initRoutingDB, loadRoutingTable, saveRouteEntry, saveRouteEntries, deleteRouteEntry, loadDirectNodes, saveDirectNode, saveDirectNodes, clearAllRoutingData } from './RoutingDB';
|
|
3
|
+
export type { Request, Response, SimpleHandler, CallOptions, CallSession, CallState, CallStateListener, IncomingCallEvent, IncomingCallListener, RouteEntry, NextHop, DirectNodeLatency, RelayConfig, RelayMessage, ServerConfig } from './types';
|
|
185
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,OAAO,EACP,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,YAAY,EACb,MAAM,SAAS,CAAC"}
|