p2party 0.8.0 → 0.14.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.
Files changed (182) hide show
  1. package/LICENSE.md +202 -661
  2. package/README.md +736 -404
  3. package/THIRD_PARTY_NOTICES.md +458 -0
  4. package/docs/assets/p2party-cat.svg +1 -0
  5. package/docs/getting-started.md +203 -0
  6. package/docs/protocol-v4-security.md +158 -0
  7. package/docs/references.md +157 -0
  8. package/docs/session-api.md +457 -0
  9. package/docs/wire-format.md +103 -0
  10. package/examples/standalone-e2ee.ts +194 -0
  11. package/lib/api/signalingServerApi.d.ts +6 -7
  12. package/lib/api/webrtc/baseQuery.d.ts +1 -2
  13. package/lib/api/webrtc/disconnectFromAllRoomsQuery.d.ts +1 -2
  14. package/lib/api/webrtc/disconnectFromChannelLabelQuery.d.ts +1 -2
  15. package/lib/api/webrtc/disconnectFromPeerChannelLabelQuery.d.ts +1 -2
  16. package/lib/api/webrtc/disconnectFromPeerQuery.d.ts +3 -3
  17. package/lib/api/webrtc/disconnectFromRoomQuery.d.ts +1 -2
  18. package/lib/api/webrtc/disconnectQuery.d.ts +1 -2
  19. package/lib/api/webrtc/iceGeneration.d.ts +17 -0
  20. package/lib/api/webrtc/iceRepair.d.ts +10 -0
  21. package/lib/api/webrtc/index.d.ts +13 -13
  22. package/lib/api/webrtc/interfaces.d.ts +67 -11
  23. package/lib/api/webrtc/negotiationLock.d.ts +12 -0
  24. package/lib/api/webrtc/openChannelQuery.d.ts +1 -2
  25. package/lib/api/webrtc/pendingIceCandidates.d.ts +14 -0
  26. package/lib/api/webrtc/roomPeer.d.ts +11 -0
  27. package/lib/api/webrtc/sendMessageQuery.d.ts +7 -4
  28. package/lib/api/webrtc/setCandidateQuery.d.ts +1 -2
  29. package/lib/api/webrtc/setDescriptionQuery.d.ts +1 -2
  30. package/lib/cryptography/coverCell.d.ts +65 -0
  31. package/lib/cryptography/cpace.d.ts +41 -0
  32. package/lib/cryptography/ed25519.d.ts +0 -1
  33. package/lib/cryptography/hashStream.d.ts +15 -0
  34. package/lib/cryptography/hkdf.d.ts +3 -0
  35. package/lib/cryptography/identityCrossSig.d.ts +7 -0
  36. package/lib/cryptography/interfaces.d.ts +28 -13
  37. package/lib/cryptography/memory.d.ts +2 -4
  38. package/lib/cryptography/merkle.d.ts +0 -1
  39. package/lib/cryptography/mlkem.d.ts +117 -0
  40. package/lib/cryptography/mnemonic.d.ts +0 -1
  41. package/lib/cryptography/pqHealing.d.ts +268 -0
  42. package/lib/cryptography/pqHealingFrame.d.ts +39 -0
  43. package/lib/cryptography/pqMessageKey.d.ts +30 -0
  44. package/lib/cryptography/random.d.ts +22 -0
  45. package/lib/cryptography/ratchet.d.ts +146 -0
  46. package/lib/cryptography/testModule.d.ts +7 -0
  47. package/lib/cryptography/utils.d.ts +0 -1
  48. package/lib/cryptography/wasmLoader.d.ts +6 -1
  49. package/lib/cryptography/x25519.d.ts +15 -0
  50. package/lib/cryptography/x3dh.d.ts +9 -0
  51. package/lib/db/api.d.ts +54 -22
  52. package/lib/db/db.worker.d.ts +0 -1
  53. package/lib/db/ratchetWrap.d.ts +36 -0
  54. package/lib/db/src/getDB.d.ts +17 -4
  55. package/lib/db/types.d.ts +274 -32
  56. package/lib/db.worker.js +1 -2
  57. package/lib/handlers/chunkFrame.d.ts +13 -0
  58. package/lib/handlers/connectionSignal.d.ts +26 -0
  59. package/lib/handlers/coverEdge.d.ts +42 -0
  60. package/lib/handlers/coverRuntime.d.ts +91 -0
  61. package/lib/handlers/coverScheduler.d.ts +184 -0
  62. package/lib/handlers/coverTransfer.d.ts +46 -0
  63. package/lib/handlers/frameType.d.ts +10 -0
  64. package/lib/handlers/handleChallenge.d.ts +0 -1
  65. package/lib/handlers/handleConnectToPeer.d.ts +0 -1
  66. package/lib/handlers/handleHandshake.d.ts +74 -0
  67. package/lib/handlers/handleMessageQueueing.d.ts +53 -4
  68. package/lib/handlers/handleOpenChannel.d.ts +4 -2
  69. package/lib/handlers/handleQueuedIceCandidates.d.ts +0 -1
  70. package/lib/handlers/handleReadReceipt.d.ts +17 -4
  71. package/lib/handlers/handleReceiveMessage.d.ts +21 -3
  72. package/lib/handlers/handleSendMessage.d.ts +110 -2
  73. package/lib/handlers/handleWebSocketMessage.d.ts +1 -3
  74. package/lib/handlers/handshakeCore.d.ts +95 -0
  75. package/lib/handlers/messageChunkCrypto.d.ts +70 -0
  76. package/lib/handlers/peerRosterDelta.d.ts +12 -0
  77. package/lib/handlers/pqHealingOrchestrator.d.ts +46 -0
  78. package/lib/handlers/pqHealingRuntime.d.ts +82 -0
  79. package/lib/handlers/ratchetGate.d.ts +18 -0
  80. package/lib/handlers/ratchetPersist.d.ts +53 -0
  81. package/lib/handlers/receiptFrame.d.ts +18 -0
  82. package/lib/handlers/receiveMessageKeyLifetime.d.ts +24 -0
  83. package/lib/handlers/reconcile.d.ts +16 -0
  84. package/lib/handlers/transferAbort.d.ts +42 -0
  85. package/lib/index.d.ts +203 -46
  86. package/lib/index.js +1 -2
  87. package/lib/index.min.js +1 -2
  88. package/lib/index.mjs +1 -2
  89. package/lib/libcrypto.provenance.json +45 -0
  90. package/lib/libcrypto.wasm +0 -0
  91. package/lib/middleware/keyPairListenerMiddleware.d.ts +0 -1
  92. package/lib/middleware/roomListenerMiddleware.d.ts +0 -1
  93. package/lib/reducers/commonSlice.d.ts +0 -1
  94. package/lib/reducers/keyPairSlice.d.ts +0 -1
  95. package/lib/reducers/roomSlice.d.ts +65 -3
  96. package/lib/reducers/signalingServerSlice.d.ts +25 -4
  97. package/lib/roomInvite.d.ts +18 -0
  98. package/lib/roomPinAttempts.d.ts +12 -0
  99. package/lib/roomPinVault.d.ts +26 -0
  100. package/lib/roomPolicy.d.ts +60 -0
  101. package/lib/session.d.ts +110 -0
  102. package/lib/session.js +1 -0
  103. package/lib/session.mjs +1 -0
  104. package/lib/store.d.ts +40 -41
  105. package/lib/utils/channelLabel.d.ts +0 -1
  106. package/lib/utils/chunkBounds.d.ts +9 -0
  107. package/lib/utils/constants.d.ts +50 -6
  108. package/lib/utils/debug.d.ts +25 -0
  109. package/lib/utils/drainAndClose.d.ts +5 -0
  110. package/lib/utils/identityRole.d.ts +19 -0
  111. package/lib/utils/interfaces.d.ts +31 -43
  112. package/lib/utils/leafHash.d.ts +13 -0
  113. package/lib/utils/messageTypes.d.ts +0 -1
  114. package/lib/utils/metadata.d.ts +6 -1
  115. package/lib/utils/mutex.d.ts +24 -0
  116. package/lib/utils/protocolVersion.d.ts +5 -0
  117. package/lib/utils/receiptToken.d.ts +7 -0
  118. package/lib/utils/sendQueueKey.d.ts +2 -0
  119. package/lib/utils/signalingAuth.d.ts +8 -0
  120. package/lib/utils/signalingBounds.d.ts +9 -0
  121. package/lib/utils/splitToChunks.d.ts +7 -4
  122. package/lib/utils/uint8array.d.ts +1 -2
  123. package/lib/utils/waitForOpen.d.ts +3 -0
  124. package/lib/utils/zeroFree.d.ts +10 -0
  125. package/package.json +109 -49
  126. package/lib/api/signalingServerApi.d.ts.map +0 -1
  127. package/lib/api/webrtc/baseQuery.d.ts.map +0 -1
  128. package/lib/api/webrtc/disconnectFromAllRoomsQuery.d.ts.map +0 -1
  129. package/lib/api/webrtc/disconnectFromChannelLabelQuery.d.ts.map +0 -1
  130. package/lib/api/webrtc/disconnectFromPeerChannelLabelQuery.d.ts.map +0 -1
  131. package/lib/api/webrtc/disconnectFromPeerQuery.d.ts.map +0 -1
  132. package/lib/api/webrtc/disconnectFromRoomQuery.d.ts.map +0 -1
  133. package/lib/api/webrtc/disconnectQuery.d.ts.map +0 -1
  134. package/lib/api/webrtc/index.d.ts.map +0 -1
  135. package/lib/api/webrtc/interfaces.d.ts.map +0 -1
  136. package/lib/api/webrtc/openChannelQuery.d.ts.map +0 -1
  137. package/lib/api/webrtc/sendMessageQuery.d.ts.map +0 -1
  138. package/lib/api/webrtc/setCandidateQuery.d.ts.map +0 -1
  139. package/lib/api/webrtc/setDescriptionQuery.d.ts.map +0 -1
  140. package/lib/cryptography/chacha20poly1305.d.ts +0 -116
  141. package/lib/cryptography/chacha20poly1305.d.ts.map +0 -1
  142. package/lib/cryptography/ed25519.d.ts.map +0 -1
  143. package/lib/cryptography/interfaces.d.ts.map +0 -1
  144. package/lib/cryptography/memory.d.ts.map +0 -1
  145. package/lib/cryptography/merkle.d.ts.map +0 -1
  146. package/lib/cryptography/mnemonic.d.ts.map +0 -1
  147. package/lib/cryptography/utils.d.ts.map +0 -1
  148. package/lib/cryptography/wasmLoader.d.ts.map +0 -1
  149. package/lib/db/api.d.ts.map +0 -1
  150. package/lib/db/db.worker.d.ts.map +0 -1
  151. package/lib/db/src/getDB.d.ts.map +0 -1
  152. package/lib/db/types.d.ts.map +0 -1
  153. package/lib/db.worker.js.map +0 -1
  154. package/lib/handlers/handleChallenge.d.ts.map +0 -1
  155. package/lib/handlers/handleConnectToPeer.d.ts.map +0 -1
  156. package/lib/handlers/handleMessageQueueing.d.ts.map +0 -1
  157. package/lib/handlers/handleOpenChannel.d.ts.map +0 -1
  158. package/lib/handlers/handleQueuedIceCandidates.d.ts.map +0 -1
  159. package/lib/handlers/handleReadReceipt.d.ts.map +0 -1
  160. package/lib/handlers/handleReceiveMessage.d.ts.map +0 -1
  161. package/lib/handlers/handleSendMessage.d.ts.map +0 -1
  162. package/lib/handlers/handleWebSocketMessage.d.ts.map +0 -1
  163. package/lib/index.d.ts.map +0 -1
  164. package/lib/index.js.map +0 -1
  165. package/lib/index.min.js.map +0 -1
  166. package/lib/index.mjs.map +0 -1
  167. package/lib/middleware/keyPairListenerMiddleware.d.ts.map +0 -1
  168. package/lib/middleware/roomListenerMiddleware.d.ts.map +0 -1
  169. package/lib/reducers/commonSlice.d.ts.map +0 -1
  170. package/lib/reducers/keyPairSlice.d.ts.map +0 -1
  171. package/lib/reducers/roomSlice.d.ts.map +0 -1
  172. package/lib/reducers/signalingServerSlice.d.ts.map +0 -1
  173. package/lib/store.d.ts.map +0 -1
  174. package/lib/utils/allocators.d.ts +0 -22
  175. package/lib/utils/allocators.d.ts.map +0 -1
  176. package/lib/utils/channelLabel.d.ts.map +0 -1
  177. package/lib/utils/constants.d.ts.map +0 -1
  178. package/lib/utils/interfaces.d.ts.map +0 -1
  179. package/lib/utils/messageTypes.d.ts.map +0 -1
  180. package/lib/utils/metadata.d.ts.map +0 -1
  181. package/lib/utils/splitToChunks.d.ts.map +0 -1
  182. package/lib/utils/uint8array.d.ts.map +0 -1
package/lib/store.d.ts CHANGED
@@ -1,55 +1,54 @@
1
1
  export declare const store: import("@reduxjs/toolkit").EnhancedStore<{
2
2
  commonState: import("./reducers/commonSlice").CommonState;
3
- keyPair: import("./reducers/keyPairSlice").KeyPair;
4
- rooms: import("./reducers/roomSlice").Room[];
5
- signalingServer: import("./reducers/signalingServerSlice").SignalingState;
6
- signalingServerApi: import("@reduxjs/toolkit/dist/query").CombinedState<{
7
- connectWebSocket: import("@reduxjs/toolkit/dist/query").MutationDefinition<string, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, void, "signalingServerApi", undefined>;
8
- disconnectWebSocket: import("@reduxjs/toolkit/dist/query").MutationDefinition<void, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, void, "signalingServerApi", undefined>;
9
- sendMessage: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/signalingServerApi").WebSocketMessage, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, void, "signalingServerApi", undefined>;
10
- connectWithPeer: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./utils/interfaces").WebSocketPeerConnectionParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, void, "signalingServerApi", undefined>;
3
+ keyPair: import(".").KeyPair;
4
+ rooms: import(".").Room[];
5
+ signalingServer: import(".").SignalingState;
6
+ signalingServerApi: import("@reduxjs/toolkit/query").CombinedState<{
7
+ connectWebSocket: import("@reduxjs/toolkit/query").MutationDefinition<string, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, undefined, "signalingServerApi", undefined>;
8
+ disconnectWebSocket: import("@reduxjs/toolkit/query").MutationDefinition<undefined, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, undefined, "signalingServerApi", undefined>;
9
+ sendMessage: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/signalingServerApi").WebSocketMessage, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, undefined, "signalingServerApi", undefined>;
10
+ connectWithPeer: import("@reduxjs/toolkit/query").MutationDefinition<import("./utils/interfaces").WebSocketPeerConnectionParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, undefined, "signalingServerApi", undefined>;
11
11
  }, never, "signalingServerApi">;
12
- webrtcApi: import("@reduxjs/toolkit/dist/query").CombinedState<{
13
- connectWithPeer: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCPeerConnectionParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
14
- setDescription: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSetDescriptionParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
15
- setCandidate: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSetCandidateParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
16
- openChannel: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCOpenChannelParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
17
- sendMessage: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSendMessageParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
18
- disconnect: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
19
- disconnectFromRoom: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromRoomParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
20
- disconnectFromAllRooms: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromAllRoomsParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
21
- disconnectFromPeer: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromPeerParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
22
- disconnectFromChannelLabel: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromChannelLabelParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
23
- disconnectFromPeerChannelLabel: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromPeerChannelLabelParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
12
+ webrtcApi: import("@reduxjs/toolkit/query").CombinedState<{
13
+ connectWithPeer: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCPeerConnectionParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
14
+ setDescription: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSetDescriptionParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
15
+ setCandidate: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSetCandidateParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
16
+ openChannel: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCOpenChannelParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
17
+ sendMessage: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSendMessageParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, import("./handlers/handleSendMessage").SendMessageResult | undefined, "webrtcApi", undefined>;
18
+ disconnect: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
19
+ disconnectFromRoom: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromRoomParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
20
+ disconnectFromAllRooms: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromAllRoomsParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
21
+ disconnectFromPeer: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromPeerParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
22
+ disconnectFromChannelLabel: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromChannelLabelParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
23
+ disconnectFromPeerChannelLabel: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromPeerChannelLabelParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
24
24
  }, never, "webrtcApi">;
25
25
  }, import("redux").UnknownAction, import("@reduxjs/toolkit").Tuple<[import("redux").StoreEnhancer<{
26
26
  dispatch: import("redux-thunk").ThunkDispatch<{
27
27
  commonState: import("./reducers/commonSlice").CommonState;
28
- keyPair: import("./reducers/keyPairSlice").KeyPair;
29
- rooms: import("./reducers/roomSlice").Room[];
30
- signalingServer: import("./reducers/signalingServerSlice").SignalingState;
31
- signalingServerApi: import("@reduxjs/toolkit/dist/query").CombinedState<{
32
- connectWebSocket: import("@reduxjs/toolkit/dist/query").MutationDefinition<string, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, void, "signalingServerApi", undefined>;
33
- disconnectWebSocket: import("@reduxjs/toolkit/dist/query").MutationDefinition<void, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, void, "signalingServerApi", undefined>;
34
- sendMessage: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/signalingServerApi").WebSocketMessage, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, void, "signalingServerApi", undefined>;
35
- connectWithPeer: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./utils/interfaces").WebSocketPeerConnectionParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, void, "signalingServerApi", undefined>;
28
+ keyPair: import(".").KeyPair;
29
+ rooms: import(".").Room[];
30
+ signalingServer: import(".").SignalingState;
31
+ signalingServerApi: import("@reduxjs/toolkit/query").CombinedState<{
32
+ connectWebSocket: import("@reduxjs/toolkit/query").MutationDefinition<string, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, undefined, "signalingServerApi", undefined>;
33
+ disconnectWebSocket: import("@reduxjs/toolkit/query").MutationDefinition<undefined, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, undefined, "signalingServerApi", undefined>;
34
+ sendMessage: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/signalingServerApi").WebSocketMessage, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, undefined, "signalingServerApi", undefined>;
35
+ connectWithPeer: import("@reduxjs/toolkit/query").MutationDefinition<import("./utils/interfaces").WebSocketPeerConnectionParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/signalingServerApi").WebSocketParams, undefined>, never, undefined, "signalingServerApi", undefined>;
36
36
  }, never, "signalingServerApi">;
37
- webrtcApi: import("@reduxjs/toolkit/dist/query").CombinedState<{
38
- connectWithPeer: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCPeerConnectionParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
39
- setDescription: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSetDescriptionParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
40
- setCandidate: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSetCandidateParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
41
- openChannel: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCOpenChannelParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
42
- sendMessage: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSendMessageParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
43
- disconnect: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
44
- disconnectFromRoom: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromRoomParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
45
- disconnectFromAllRooms: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromAllRoomsParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
46
- disconnectFromPeer: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromPeerParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
47
- disconnectFromChannelLabel: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromChannelLabelParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
48
- disconnectFromPeerChannelLabel: import("@reduxjs/toolkit/dist/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromPeerChannelLabelParams, import("@reduxjs/toolkit/dist/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, void, unknown>, never, void, "webrtcApi", void>;
37
+ webrtcApi: import("@reduxjs/toolkit/query").CombinedState<{
38
+ connectWithPeer: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCPeerConnectionParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
39
+ setDescription: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSetDescriptionParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
40
+ setCandidate: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSetCandidateParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
41
+ openChannel: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCOpenChannelParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
42
+ sendMessage: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCSendMessageParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, import("./handlers/handleSendMessage").SendMessageResult | undefined, "webrtcApi", undefined>;
43
+ disconnect: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
44
+ disconnectFromRoom: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromRoomParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
45
+ disconnectFromAllRooms: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromAllRoomsParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
46
+ disconnectFromPeer: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromPeerParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
47
+ disconnectFromChannelLabel: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromChannelLabelParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
48
+ disconnectFromPeerChannelLabel: import("@reduxjs/toolkit/query").MutationDefinition<import("./api/webrtc/interfaces").RTCDisconnectFromPeerChannelLabelParams, import("@reduxjs/toolkit/query").BaseQueryFn<import("./api/webrtc/baseQuery").RTCPeerConnectionParamsExtend, undefined>, never, undefined, "webrtcApi", undefined>;
49
49
  }, never, "webrtcApi">;
50
50
  }, undefined, import("redux").UnknownAction> & ((action: import("redux").Action<"listenerMiddleware/add">) => import("@reduxjs/toolkit").UnsubscribeListener);
51
51
  }>, import("redux").StoreEnhancer]>>;
52
52
  export type AppDispatch = typeof store.dispatch;
53
53
  export type State = ReturnType<typeof store.getState>;
54
54
  export declare const dispatch: AppDispatch;
55
- //# sourceMappingURL=store.d.ts.map
@@ -7,4 +7,3 @@ export declare const decompileChannelMessageLabel: (channelMessageLabel: string)
7
7
  merkleRootHex: string;
8
8
  merkleRoot: Uint8Array;
9
9
  }>;
10
- //# sourceMappingURL=channelLabel.d.ts.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Whether a sender-declared real-data range is safe to slice out of a decrypted
3
+ * chunk and store. The indices come from attacker-controllable metadata, so they
4
+ * must be validated before use: `chunk.slice()` is memory-safe but out-of-range
5
+ * or inverted indices would silently store the wrong bytes and corrupt reassembly
6
+ * (savedSize accounting). Decoy chunks are detected separately (their
7
+ * end - start exceeds totalSize) and never reach this check.
8
+ */
9
+ export declare const isStorableChunkRange: (chunkStartIndex: number, chunkEndIndex: number, chunkLength: number) => boolean;
@@ -1,13 +1,57 @@
1
1
  export declare const MESSAGE_LEN: number;
2
+ export declare const MAX_MESSAGE_SIZE: number;
2
3
  export declare const MAX_BUFFERED_AMOUNT: number;
3
4
  export declare const NAME_LEN = 256;
4
5
  export declare const METADATA_LEN: number;
5
6
  export declare const PROOF_LEN: number;
6
- export declare const MESSAGE_START: number;
7
7
  export declare const CHUNK_START: number;
8
- export declare const MESSAGE_DATA_BEFORE_START_INDEX: number;
9
- export declare const IMPORTANT_DATA_LEN: number;
8
+ export declare const CHUNK_PLAINTEXT_LEN = 65405;
10
9
  export declare const CHUNK_LEN: number;
11
- export declare const DECRYPTED_LEN: number;
12
- export declare const ENCRYPTED_LEN: number;
13
- //# sourceMappingURL=constants.d.ts.map
10
+ export declare const CHUNK_SIZE_FLOOR: number;
11
+ export declare const DECRYPTED_LEN = 65405;
12
+ export declare const PROTOCOL_VERSION = 4;
13
+ export declare const FRAME_TYPE_LEN = 1;
14
+ export declare const FRAME_TYPE_HANDSHAKE = 1;
15
+ export declare const FRAME_TYPE_CHUNK = 2;
16
+ export declare const FRAME_TYPE_RECEIPT = 3;
17
+ export declare const FRAME_TYPE_COVER = 4;
18
+ export declare const FRAME_TYPE_PQ_CONTROL = 5;
19
+ export declare const RECEIPT_TOKEN_LEN: number;
20
+ export declare const WIRE_RECEIPT_FRAME_LEN: number;
21
+ export declare const PQ_TAG_LEN = 1;
22
+ export declare const PQ_TAG: Uint8Array<ArrayBuffer>;
23
+ export declare const RATCHET_DHPUB_LEN = 32;
24
+ export declare const RATCHET_N_LEN = 8;
25
+ export declare const RATCHET_PN_LEN = 8;
26
+ export declare const PQ_EPOCH_LEN = 8;
27
+ export declare const RATCHET_NONCE_LEN = 12;
28
+ export declare const CHUNK_AAD_HEADER_LEN: number;
29
+ export declare const CHUNK_HEADER_LEN: number;
30
+ export declare const MESSAGE_START: number;
31
+ export declare const WIRE_CHUNK_FRAME_LEN: number;
32
+ export declare const IDENTITY_CROSS_SIGN_DOMAIN_BYTES: Uint8Array<ArrayBuffer>;
33
+ export declare const CPACE_RISTRETTO255_DSI = "CPaceRistretto255";
34
+ export declare const CPACE_RISTRETTO255_ISK_DSI = "CPaceRistretto255_ISK";
35
+ export declare const RATCHET_ROOT_SUITE_MLKEM512: "hybrid-3dh-mlkem512-cpace21-v4";
36
+ export declare const RATCHET_ROOT_SUITE_MLKEM768: "hybrid-3dh-mlkem768-cpace21-v4";
37
+ export declare const RATCHET_ROOT_SUITE_MLKEM1024: "hybrid-3dh-mlkem1024-cpace21-v4";
38
+ export declare const RATCHET_ROOT_SUITES: readonly ["hybrid-3dh-mlkem512-cpace21-v4", "hybrid-3dh-mlkem768-cpace21-v4", "hybrid-3dh-mlkem1024-cpace21-v4"];
39
+ export type RatchetRootSuite = (typeof RATCHET_ROOT_SUITES)[number];
40
+ /** Backward source alias for the 0.10 default suite. */
41
+ export declare const RATCHET_ROOT_SUITE: "hybrid-3dh-mlkem768-cpace21-v4";
42
+ export declare const isRatchetRootSuite: (value: unknown) => value is RatchetRootSuite;
43
+ export declare const KDF_RK_LABEL = "p2party-rk-v1";
44
+ export declare const KDF_CK_LABEL = "p2party-ck-v1";
45
+ export declare const KDF_MK_LABEL = "p2party-mk-v1";
46
+ export declare const MAX_SKIP = 512;
47
+ export declare const MAX_SKIP_SESSION = 2000;
48
+ export declare const MAX_RETRANSMITS = 5;
49
+ export declare const RETRANSMIT_TIMEOUT_MS = 2000;
50
+ export declare const CHANNEL_OPEN_TIMEOUT_MS = 3000;
51
+ export declare const CHANNEL_OPEN_POLL_MS = 25;
52
+ export declare const RECONNECT_RESUME_TIMEOUT_MS = 30000;
53
+ export declare const RECONNECT_RESUME_POLL_MS = 500;
54
+ export declare const MAX_RESUME_ATTEMPTS = 3;
55
+ export declare const HASH_WINDOW_BYTES: number;
56
+ export declare const HASH_WASM_CHUNK_BYTES: number;
57
+ export declare const OPFS_REASSEMBLE_DIR = "p2party-reassembled";
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Opt-in diagnostic logging.
3
+ *
4
+ * The library previously called console.log directly in 36 places across the
5
+ * signaling, WebRTC and middleware paths. That is useful while debugging a
6
+ * connection and unacceptable in a dependency: an application embedding this
7
+ * had its console filled with `[roomListenerMiddleware] setRoom: {...}` on
8
+ * every room change, with no way to turn it off.
9
+ *
10
+ * Diagnostics are kept — they are genuinely hard to reconstruct after the fact
11
+ * — but silent unless asked for. Errors and warnings still go out
12
+ * unconditionally through console.error/console.warn; those are for the
13
+ * application, not for us.
14
+ *
15
+ * Enable at runtime:
16
+ * p2party.setDebugLogging(true)
17
+ *
18
+ * or persistently, before the library loads:
19
+ * localStorage.setItem("p2party:debug", "1")
20
+ */
21
+ /** Turn diagnostic logging on or off for the rest of the session. */
22
+ export declare const setDebugLogging: (value: boolean) => void;
23
+ export declare const isDebugLogging: () => boolean;
24
+ /** console.log, but only when diagnostics are switched on. */
25
+ export declare const debugLog: (...args: unknown[]) => void;
@@ -0,0 +1,5 @@
1
+ export declare const drainAndClose: (dc: {
2
+ readyState: string;
3
+ bufferedAmount: number;
4
+ close: () => void;
5
+ }, timeoutMs?: number, pollMs?: number) => Promise<void>;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Deterministic role for one stable Ed25519 identity edge.
3
+ *
4
+ * Lexical ordering is safe only for the one canonical wire representation:
5
+ * exactly 32 bytes encoded as 64 lowercase hexadecimal characters. Rejecting
6
+ * uppercase/invalid encodings is part of role agreement, not cosmetic input
7
+ * cleanup — otherwise two peers can compare different strings for the same key
8
+ * and both (or neither) decide to open the persistent `main` channel.
9
+ */
10
+ export declare const CANONICAL_ED25519_IDENTITY_RE: RegExp;
11
+ export declare const isCanonicalEd25519Identity: (publicKey: unknown) => publicKey is string;
12
+ export declare const assertCanonicalEd25519Identity: (publicKey: string, label?: string) => void;
13
+ export declare const isIdentityInitiator: (selfPublicKey: string, peerPublicKey: string) => boolean;
14
+ /**
15
+ * Only the non-opener may accept a remotely-created `main` DataChannel. The
16
+ * designated opener receives `main`; accepting another inbound copy on that
17
+ * side would allow duplicate handshakes to race for one room/peer edge.
18
+ */
19
+ export declare const shouldAcceptIncomingMain: (selfPublicKey: string, peerPublicKey: string) => boolean;
@@ -1,24 +1,3 @@
1
- import type { IRTCPeerConnectionRoomId } from "../api/webrtc/interfaces";
2
- export interface WSPeerConnectionRoomId extends IRTCPeerConnectionRoomId {
3
- queue: Uint8Array[];
4
- seen: Set<string>;
5
- draining: boolean;
6
- ptr1: number | undefined;
7
- decrypted: Uint8Array | undefined;
8
- ptr2: number | undefined;
9
- messageArray: Uint8Array | undefined;
10
- ptr3: number | undefined;
11
- merkleRootArray: Uint8Array | undefined;
12
- ptr4: number | undefined;
13
- senderPublicKeyArray: Uint8Array | undefined;
14
- ptr5: number | undefined;
15
- receiverSecretKeyArray: Uint8Array | undefined;
16
- }
17
- export interface WSPeerConnection {
18
- withPeerId: string;
19
- withPeerPublicKey: string;
20
- rooms: WSPeerConnectionRoomId[];
21
- }
22
1
  export interface WebSocketMessagePingRequest {
23
2
  type: "ping";
24
3
  }
@@ -30,10 +9,7 @@ export interface WebSocketMessageChallengeRequest {
30
9
  type: "peerId";
31
10
  peerId: string;
32
11
  challenge: string;
33
- signature?: string;
34
- challengeId?: string;
35
- username?: string;
36
- credential?: string;
12
+ protocolVersion: number;
37
13
  message: string;
38
14
  }
39
15
  export interface WebSocketMessageChallengeResponse {
@@ -41,10 +17,12 @@ export interface WebSocketMessageChallengeResponse {
41
17
  challenge: string;
42
18
  signature: string;
43
19
  fromPeerId: string;
20
+ protocolVersion: number;
44
21
  }
45
22
  export interface WebSocketMessageSuccessfulChallenge {
46
23
  type: "challenge";
47
24
  challengeId: string;
25
+ protocolVersion: number;
48
26
  username?: string;
49
27
  credential?: string;
50
28
  }
@@ -52,11 +30,21 @@ export interface WebSocketMessageRoomIdRequest {
52
30
  type: "room";
53
31
  fromPeerId: string;
54
32
  roomUrl: string;
33
+ protocolVersion: number;
34
+ }
35
+ export interface TurnCredentials {
36
+ urls: string[];
37
+ username: string;
38
+ credential: string;
39
+ ttl: number;
55
40
  }
56
41
  export interface WebSocketMessageRoomIdResponse {
57
42
  type: "roomId";
58
43
  roomId: string;
59
44
  roomUrl: string;
45
+ turnCredentials?: TurnCredentials;
46
+ /** Optional only so missing/pre-v3 server responses fail closed at runtime. */
47
+ protocolVersion?: number;
60
48
  }
61
49
  export interface WebSocketMessageDescriptionSend {
62
50
  type: "description";
@@ -65,6 +53,7 @@ export interface WebSocketMessageDescriptionSend {
65
53
  fromPeerPublicKey: string;
66
54
  toPeerId: string;
67
55
  roomId: string;
56
+ protocolVersion: number;
68
57
  }
69
58
  export interface WebSocketMessageDescriptionReceive {
70
59
  type: "description";
@@ -72,23 +61,30 @@ export interface WebSocketMessageDescriptionReceive {
72
61
  fromPeerId: string;
73
62
  fromPeerPublicKey: string;
74
63
  roomId: string;
64
+ /** Optional only so missing/pre-v3 messages can be rejected at runtime. */
65
+ protocolVersion?: number;
75
66
  }
76
67
  export interface WebSocketMessageCandidateSend {
77
68
  type: "candidate";
78
- candidate: RTCIceCandidate;
69
+ candidate: RTCIceCandidateInit | RTCIceCandidate;
79
70
  fromPeerId: string;
80
71
  toPeerId: string;
81
72
  roomId: string;
73
+ protocolVersion: number;
82
74
  }
83
75
  export interface WebSocketMessageCandidateReceive {
84
76
  type: "candidate";
85
- candidate: RTCIceCandidate;
77
+ candidate: RTCIceCandidateInit | RTCIceCandidate;
86
78
  fromPeerId: string;
79
+ roomId: string;
80
+ /** Optional only so missing/pre-v3 messages can be rejected at runtime. */
81
+ protocolVersion?: number;
87
82
  }
88
83
  export interface WebSocketMessagePeersRequest {
89
84
  type: "peers";
90
85
  fromPeerId: string;
91
86
  roomId: string;
87
+ protocolVersion: number;
92
88
  }
93
89
  export interface RoomPeer {
94
90
  id: string;
@@ -98,17 +94,22 @@ export interface WebSocketMessagePeersResponse {
98
94
  type: "peers";
99
95
  roomId: string;
100
96
  peers: RoomPeer[];
97
+ /** Optional only so missing/pre-v3 server responses fail closed at runtime. */
98
+ protocolVersion?: number;
101
99
  }
102
100
  export interface WebSocketMessageConnectionRequest {
103
101
  type: "peerConnection";
104
102
  roomId: string;
105
103
  peer: RoomPeer;
104
+ /** Optional only so missing/pre-v3 messages can be rejected at runtime. */
105
+ protocolVersion?: number;
106
106
  }
107
107
  export interface WebSocketMessageConnectionResponse {
108
108
  type: "peerConnection";
109
109
  roomId: string;
110
110
  fromPeerId: string;
111
111
  toPeerId: string;
112
+ protocolVersion: number;
112
113
  }
113
114
  export interface WebSocketMessagePeerConnectionRequest {
114
115
  type: "connection";
@@ -116,6 +117,7 @@ export interface WebSocketMessagePeerConnectionRequest {
116
117
  fromPeerId: string;
117
118
  toPeerId: string;
118
119
  labels: string[];
120
+ protocolVersion: number;
119
121
  }
120
122
  export interface WebSocketMessagePeerConnectionResponse {
121
123
  type: "connection";
@@ -123,21 +125,8 @@ export interface WebSocketMessagePeerConnectionResponse {
123
125
  fromPeerId: string;
124
126
  fromPeerPublicKey: string;
125
127
  labels: string[];
126
- }
127
- export interface WebSocketMessageMessageSendRequest {
128
- type: "message";
129
- message: string;
130
- roomId: string;
131
- fromPeerId: string;
132
- toPeerId: string;
133
- label: string;
134
- }
135
- export interface WebSocketMessageMessageSendResponse {
136
- type: "message";
137
- message: string;
138
- roomId: string;
139
- fromPeerId: string;
140
- label: string;
128
+ /** Optional only so a pre-v3/malformed server response can be rejected. */
129
+ protocolVersion?: number;
141
130
  }
142
131
  export interface WebSocketPeerConnectionParams {
143
132
  peerId: string;
@@ -156,4 +145,3 @@ export interface WebSocketMessageError {
156
145
  [key: string]: unknown;
157
146
  };
158
147
  }
159
- //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1,13 @@
1
+ import type { LibCrypto } from "../cryptography/libcrypto";
2
+ export declare const MERKLE_LEAF_DOMAIN = 0;
3
+ /**
4
+ * Domain-separated Merkle leaf hash computed in **libsodium (C)**:
5
+ * `SHA-512(0x00 ‖ chunk)`, byte-identical to the WebCrypto `hashMerkleLeaf`
6
+ * above and to the C `receive_message_with_key` leaf (pake_ratchet.c:155-164).
7
+ * Synchronous — the WASM SHA-512 runs inline (init → update(0x00 ‖ chunk) →
8
+ * final). Used on the RECEIVE path (Merkle verification + the receipt token) so
9
+ * every leaf hash there is libsodium rather than browser crypto. `module` must
10
+ * expose `_sha512_init/update/final` + `_malloc/_free` (the main crypto module).
11
+ */
12
+ export declare const hashMerkleLeafWasm: (chunk: Uint8Array, module: LibCrypto) => Uint8Array;
13
+ export declare const hashMerkleLeaf: (chunk: Uint8Array) => Promise<Uint8Array>;
@@ -85,4 +85,3 @@ export declare const getMessageType: (data: string | File) => number;
85
85
  export declare const getFileExtension: (messageType: number) => FileExtension;
86
86
  export declare const getMimeType: (messageType: number) => MimeType;
87
87
  export declare const getMessageCategory: (messageType: number) => string;
88
- //# sourceMappingURL=messageTypes.d.ts.map
@@ -11,7 +11,12 @@ export interface BasicMetadata {
11
11
  export interface Metadata extends BasicMetadata {
12
12
  chunkIndex: number;
13
13
  }
14
+ /**
15
+ * Validate the authenticated metadata profile before any offsets are used or
16
+ * storage is allocated. All numeric wire fields are uint64s; converting a
17
+ * value above 2^53-1 to Number loses precision, so those values fail closed.
18
+ */
19
+ export declare const assertMetadataV1: (metadata: Metadata) => void;
14
20
  export declare const formatSize: (size: number) => string;
15
21
  export declare const serializeMetadata: (metadata: Metadata) => Uint8Array;
16
22
  export declare const deserializeMetadata: (buffer: Uint8Array) => Metadata;
17
- //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * A simple async mutex for serializing access to shared resources.
3
+ *
4
+ * In this codebase, shared WebAssembly.Memory objects back WASM module
5
+ * instances used across async operations. Because JavaScript is
6
+ * single-threaded, synchronous WASM calls between `await` points are
7
+ * atomic. However, multiple async operations (e.g. concurrent RTK Query
8
+ * mutations) can interleave at `await` boundaries, leading to
9
+ * corruption of the shared linear memory (overlapping _malloc regions,
10
+ * stale ArrayBuffer views after memory growth, etc.).
11
+ *
12
+ * Wrapping the critical section with this mutex ensures only one async
13
+ * operation accesses the shared WASM memory at a time.
14
+ */
15
+ export declare class AsyncMutex {
16
+ private queue;
17
+ private locked;
18
+ private idleWaiters;
19
+ acquire(): Promise<void>;
20
+ release(): void;
21
+ isIdle(): boolean;
22
+ whenIdle(): Promise<void>;
23
+ runExclusive<T>(fn: () => Promise<T>): Promise<T>;
24
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * The signaling version is a fail-closed compatibility check, not a suite
3
+ * negotiation mechanism. Missing, malformed, older, and newer values all fail.
4
+ */
5
+ export declare const isProtocolVersionCompatible: (peerProtocolVersion?: number) => boolean;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Chunk receipts are deliberately not raw Merkle leaf hashes. Binding the
3
+ * receipt to the message root and leaf position prevents an identical leaf in
4
+ * another transfer from acknowledging the wrong outbound chunk.
5
+ */
6
+ export declare const CHUNK_RECEIPT_DOMAIN: Uint8Array<ArrayBuffer>;
7
+ export declare const createChunkReceiptToken: (merkleRoot: Uint8Array, chunkIndex: number, leafHash: Uint8Array) => Promise<Uint8Array>;
@@ -0,0 +1,2 @@
1
+ /** Scope the legacy IndexedDB send-queue key to one room without changing its schema. */
2
+ export declare const roomSendQueueLabel: (roomId: string, label: string) => string;
@@ -0,0 +1,8 @@
1
+ import type { WebSocketMessageChallengeRequest, WebSocketMessageSuccessfulChallenge } from "./interfaces";
2
+ /**
3
+ * Exact protocol-v3 server challenge. Legacy reconnect credentials are
4
+ * deliberately not accepted: every WebSocket must prove possession anew.
5
+ */
6
+ export declare const isFreshV3Challenge: (value: unknown) => value is WebSocketMessageChallengeRequest;
7
+ /** Exact protocol-v3 proof-success response, with an all-or-none TURN pair. */
8
+ export declare const isV3ChallengeSuccess: (value: unknown) => value is WebSocketMessageSuccessfulChallenge;
@@ -0,0 +1,9 @@
1
+ export declare const MAX_SIGNALING_MESSAGE_CHARS: number;
2
+ export declare const MAX_SDP_CHARS: number;
3
+ export declare const MAX_ICE_CANDIDATE_CHARS = 4096;
4
+ export declare const MAX_ICE_FIELD_CHARS = 256;
5
+ export declare const MAX_SIGNALING_LABELS = 64;
6
+ export declare const MAX_DATA_CHANNEL_LABEL_CHARS = 193;
7
+ export declare const isBoundedDescription: (description: RTCSessionDescription | RTCSessionDescriptionInit) => boolean;
8
+ export declare const isBoundedIceCandidate: (candidate: RTCIceCandidateInit | RTCIceCandidate) => boolean;
9
+ export declare const areBoundedDataChannelLabels: (labels: unknown) => labels is string[];
@@ -1,8 +1,11 @@
1
1
  import type { BaseQueryApi } from "@reduxjs/toolkit/query";
2
2
  import type { Room } from "../reducers/roomSlice";
3
3
  import type { LibCrypto } from "../cryptography/libcrypto";
4
+ import type { TransferAbortHandle } from "../handlers/transferAbort";
4
5
  export declare const metadataSchemaVersions: number[];
5
- export declare const CANCEL_SEND = "CANCEL_SEND";
6
+ export declare const planMessageChunkCount: (totalSize: number, minChunks?: number, chunkSize?: number, percentageFilledChunk?: number) => number;
7
+ export declare const OUTBOUND_CHUNK_RECORD_OVERHEAD = 2048;
8
+ export declare const estimateOutboundStagingBytes: (totalSize: number, totalChunks: number, chunkSize: number) => number;
6
9
  /**
7
10
  * Splits a Uint8Array into chunks of a specified size, padding with noise if necessary.
8
11
  * Ensures a minimum number of chunks are created.
@@ -11,10 +14,11 @@ export declare const CANCEL_SEND = "CANCEL_SEND";
11
14
  * @param data - The Uint8Array to be split.
12
15
  * @param minChunks - The minimum number of chunks to produce.
13
16
  * @param chunkSize - The desired size of each chunk.
14
- * @param percentageFilledChunk - If = 1 then all chunk is filled with useful data. Range (0, 1].
17
+ * @param percentageFilledChunk - Useful-data fraction, range (0, 0.99]. The
18
+ * remaining RNG padding gives each send a fresh Merkle-root namespace.
15
19
  * @returns An object containing the chunks, their merkle proofs and the last valid byte index.
16
20
  */
17
- export declare const splitToChunks: (message: string | File, api: BaseQueryApi, label: string, room: Room, merkleModule: LibCrypto, minChunks?: number, chunkSize?: number, percentageFilledChunk?: number, metadataSchemaVersion?: number) => Promise<{
21
+ export declare const splitToChunks: (message: string | File, api: BaseQueryApi, label: string, room: Room, merkleModule: LibCrypto, transfer: Pick<TransferAbortHandle, "transferId" | "signal" | "bindHash">, minChunks?: number, chunkSize?: number, percentageFilledChunk?: number, metadataSchemaVersion?: number) => Promise<{
18
22
  merkleRoot: Uint8Array;
19
23
  merkleRootHex: string;
20
24
  hash: Uint8Array;
@@ -24,4 +28,3 @@ export declare const splitToChunks: (message: string | File, api: BaseQueryApi,
24
28
  messageType: number;
25
29
  chunkHashes: Uint8Array;
26
30
  }>;
27
- //# sourceMappingURL=splitToChunks.d.ts.map
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export declare const concatUint8Arrays: (arrays: Uint8Array[]) => Promise<Uint8Array>;
5
5
  /**
6
- * Compares two Uint8Arrays.
6
+ * Compares two Uint8Arrays in constant time to prevent timing attacks.
7
7
  */
8
8
  export declare const uint8ArraysAreEqual: (array1: Uint8Array, array2: Uint8Array) => Promise<boolean>;
9
9
  /**
@@ -14,4 +14,3 @@ export declare const uint8ArrayToHex: (array: Uint8Array) => string;
14
14
  * Converts hex string to Uint8Array.
15
15
  */
16
16
  export declare const hexToUint8Array: (hexString: string) => Uint8Array<ArrayBuffer>;
17
- //# sourceMappingURL=uint8array.d.ts.map
@@ -0,0 +1,3 @@
1
+ export declare const waitForOpen: (dc: {
2
+ readyState: string;
3
+ }, timeoutMs?: number, pollMs?: number, signal?: AbortSignal) => Promise<boolean>;
@@ -0,0 +1,10 @@
1
+ import type { LibCrypto } from "../cryptography/libcrypto";
2
+ /**
3
+ * Wipe a secret-bearing WASM buffer before returning it to the allocator.
4
+ *
5
+ * WASM `_malloc`/`_free` does not zero memory, and the encryption/receive heaps
6
+ * are long-lived and reused, so freed secret key material would otherwise linger
7
+ * in the ArrayBuffer. This mirrors the `sodium_free` discipline used on the C
8
+ * side. Pass the live view over the buffer; its `byteOffset` is the pointer.
9
+ */
10
+ export declare const zeroFree: (module: LibCrypto, view: Uint8Array) => void;