virlen-remote 0.1.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 (99) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/LICENSE +21 -0
  3. package/README.md +192 -0
  4. package/dist/index.d.ts +44 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +34 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/protocol/answer.d.ts +48 -0
  9. package/dist/protocol/answer.d.ts.map +1 -0
  10. package/dist/protocol/answer.js +65 -0
  11. package/dist/protocol/answer.js.map +1 -0
  12. package/dist/protocol/api.d.ts +576 -0
  13. package/dist/protocol/api.d.ts.map +1 -0
  14. package/dist/protocol/api.js +38 -0
  15. package/dist/protocol/api.js.map +1 -0
  16. package/dist/protocol/endpoint.d.ts +76 -0
  17. package/dist/protocol/endpoint.d.ts.map +1 -0
  18. package/dist/protocol/endpoint.js +307 -0
  19. package/dist/protocol/endpoint.js.map +1 -0
  20. package/dist/protocol/errors.d.ts +32 -0
  21. package/dist/protocol/errors.d.ts.map +1 -0
  22. package/dist/protocol/errors.js +56 -0
  23. package/dist/protocol/errors.js.map +1 -0
  24. package/dist/protocol/frame.d.ts +51 -0
  25. package/dist/protocol/frame.d.ts.map +1 -0
  26. package/dist/protocol/frame.js +154 -0
  27. package/dist/protocol/frame.js.map +1 -0
  28. package/dist/protocol/hello.d.ts +73 -0
  29. package/dist/protocol/hello.d.ts.map +1 -0
  30. package/dist/protocol/hello.js +37 -0
  31. package/dist/protocol/hello.js.map +1 -0
  32. package/dist/protocol/host.d.ts +116 -0
  33. package/dist/protocol/host.d.ts.map +1 -0
  34. package/dist/protocol/host.js +52 -0
  35. package/dist/protocol/host.js.map +1 -0
  36. package/dist/protocol/identity.d.ts +107 -0
  37. package/dist/protocol/identity.d.ts.map +1 -0
  38. package/dist/protocol/identity.js +143 -0
  39. package/dist/protocol/identity.js.map +1 -0
  40. package/dist/protocol/ids.d.ts +2 -0
  41. package/dist/protocol/ids.d.ts.map +1 -0
  42. package/dist/protocol/ids.js +20 -0
  43. package/dist/protocol/ids.js.map +1 -0
  44. package/dist/protocol/pairing.d.ts +43 -0
  45. package/dist/protocol/pairing.d.ts.map +1 -0
  46. package/dist/protocol/pairing.js +78 -0
  47. package/dist/protocol/pairing.js.map +1 -0
  48. package/dist/testing/index.d.ts +6 -0
  49. package/dist/testing/index.d.ts.map +1 -0
  50. package/dist/testing/index.js +5 -0
  51. package/dist/testing/index.js.map +1 -0
  52. package/dist/testing/mock-host.d.ts +66 -0
  53. package/dist/testing/mock-host.d.ts.map +1 -0
  54. package/dist/testing/mock-host.js +573 -0
  55. package/dist/testing/mock-host.js.map +1 -0
  56. package/dist/transport/broadcast.d.ts +26 -0
  57. package/dist/transport/broadcast.d.ts.map +1 -0
  58. package/dist/transport/broadcast.js +71 -0
  59. package/dist/transport/broadcast.js.map +1 -0
  60. package/dist/transport/ice.d.ts +130 -0
  61. package/dist/transport/ice.d.ts.map +1 -0
  62. package/dist/transport/ice.js +338 -0
  63. package/dist/transport/ice.js.map +1 -0
  64. package/dist/transport/memory.d.ts +52 -0
  65. package/dist/transport/memory.d.ts.map +1 -0
  66. package/dist/transport/memory.js +135 -0
  67. package/dist/transport/memory.js.map +1 -0
  68. package/dist/transport/rtc.d.ts +76 -0
  69. package/dist/transport/rtc.d.ts.map +1 -0
  70. package/dist/transport/rtc.js +310 -0
  71. package/dist/transport/rtc.js.map +1 -0
  72. package/dist/transport/signaling.d.ts +101 -0
  73. package/dist/transport/signaling.d.ts.map +1 -0
  74. package/dist/transport/signaling.js +235 -0
  75. package/dist/transport/signaling.js.map +1 -0
  76. package/dist/transport/types.d.ts +41 -0
  77. package/dist/transport/types.d.ts.map +1 -0
  78. package/dist/transport/types.js +11 -0
  79. package/dist/transport/types.js.map +1 -0
  80. package/package.json +69 -0
  81. package/src/index.ts +155 -0
  82. package/src/protocol/answer.ts +89 -0
  83. package/src/protocol/api.ts +517 -0
  84. package/src/protocol/endpoint.ts +405 -0
  85. package/src/protocol/errors.ts +90 -0
  86. package/src/protocol/frame.ts +196 -0
  87. package/src/protocol/hello.ts +112 -0
  88. package/src/protocol/host.ts +150 -0
  89. package/src/protocol/identity.ts +184 -0
  90. package/src/protocol/ids.ts +20 -0
  91. package/src/protocol/pairing.ts +95 -0
  92. package/src/testing/index.ts +5 -0
  93. package/src/testing/mock-host.ts +691 -0
  94. package/src/transport/broadcast.ts +81 -0
  95. package/src/transport/ice.ts +402 -0
  96. package/src/transport/memory.ts +164 -0
  97. package/src/transport/rtc.ts +344 -0
  98. package/src/transport/signaling.ts +317 -0
  99. package/src/transport/types.ts +50 -0
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Transport 抽象 —— 协议层与「字节通道实现」之间的唯一边界。
3
+ *
4
+ * 两条关键设计:
5
+ * 1. **UI 永不直接碰这里**(docs/phone-control-bridge.md §1):协议层只依赖本接口,
6
+ * 将来把 RTC 整体挪到 Rust 时,**只换一个实现**,上面全部不动。
7
+ * 2. **`bufferedAmount` 是必需的**:DataChannel 的 `send()` 不阻塞,
8
+ * 接收慢时缓冲会静默堆积到爆内存 → 协议层据此做背压(§3.2)。
9
+ */
10
+
11
+ export type TransportState = 'connecting' | 'open' | 'closed'
12
+
13
+ export interface Transport {
14
+ readonly state: TransportState
15
+
16
+ /** 未发送出去的字节数(DataChannel 的 `bufferedAmount`;内存实现恒为 0)。 */
17
+ readonly bufferedAmount: number
18
+
19
+ /** 发送一帧(可能被实现内部缓冲/异步投递)。链路非 open 时实现方负责丢弃。 */
20
+ send(bytes: Uint8Array): void
21
+
22
+ /** 关闭链路。 */
23
+ close(): void
24
+
25
+ /** 订阅「收到一帧」;返回取消订阅函数。 */
26
+ onMessage(listener: (bytes: Uint8Array) => void): () => void
27
+
28
+ /** 订阅「链路状态变化」;返回取消订阅函数。 */
29
+ onStateChange(listener: (state: TransportState) => void): () => void
30
+
31
+ /**
32
+ * 可选:等待链路真正可用(RTC 需要先完成信令 + ICE 才 open)。
33
+ * 内存 / Broadcast 实现创建即 open,可不实现此方法。
34
+ */
35
+ whenReady?(): Promise<void>
36
+
37
+ /** 可选:启动链路(RTC 需要先加入信令房间并开始协商)。内存 / Broadcast 无需启动。 */
38
+ start?(): void | Promise<void>
39
+
40
+ /**
41
+ * 可选:订阅「链路级错误」。
42
+ *
43
+ * 为什么必需(M6):**被顶号**是一种错误而不是状态 —— 它对应的动作与「掉线(closed)」
44
+ * 完全相反(掉线要自动重连,被顶号绝不能)。只有 `code === 'E_REPLACED'` 会被这样使用,
45
+ * 见 `transport/rtc.ts` 与手机端 `store/connection.ts`。
46
+ *
47
+ * 内存 / Broadcast 实现没有致命错误,可不实现。
48
+ */
49
+ onError?(listener: (error: Error) => void): () => void
50
+ }