@dropgate/core 2.2.0 → 3.0.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 +259 -128
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.cjs +2814 -1436
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +424 -283
- package/dist/index.d.ts +424 -283
- package/dist/index.js +2816 -1389
- package/dist/index.js.map +1 -1
- package/dist/p2p/index.cjs +495 -190
- package/dist/p2p/index.cjs.map +1 -1
- package/dist/p2p/index.d.cts +366 -5
- package/dist/p2p/index.d.ts +366 -5
- package/dist/p2p/index.js +497 -178
- package/dist/p2p/index.js.map +1 -1
- package/package.json +15 -12
package/dist/p2p/index.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ interface UploadCapabilities {
|
|
|
12
12
|
maxFileDownloads?: number;
|
|
13
13
|
/** Whether end-to-end encryption is supported. */
|
|
14
14
|
e2ee?: boolean;
|
|
15
|
+
/** Expected upload chunk size in bytes (server-configured). */
|
|
16
|
+
chunkSize?: number;
|
|
15
17
|
}
|
|
16
18
|
/**
|
|
17
19
|
* Server P2P (direct transfer) capabilities.
|
|
@@ -96,11 +98,11 @@ interface FileSource {
|
|
|
96
98
|
* Finite state machine states for P2P send sessions.
|
|
97
99
|
* Prevents race conditions and ensures callbacks fire in correct order.
|
|
98
100
|
*/
|
|
99
|
-
type P2PSendState = 'initializing' | 'listening' | 'negotiating' | 'transferring' | 'finishing' | 'completed' | 'cancelled' | 'closed';
|
|
101
|
+
type P2PSendState = 'initializing' | 'listening' | 'handshaking' | 'negotiating' | 'transferring' | 'finishing' | 'awaiting_ack' | 'completed' | 'cancelled' | 'closed';
|
|
100
102
|
/**
|
|
101
103
|
* Finite state machine states for P2P receive sessions.
|
|
102
104
|
*/
|
|
103
|
-
type P2PReceiveState = 'initializing' | 'connecting' | 'negotiating' | 'transferring' | 'completed' | 'cancelled' | 'closed';
|
|
105
|
+
type P2PReceiveState = 'initializing' | 'connecting' | 'handshaking' | 'negotiating' | 'transferring' | 'completed' | 'cancelled' | 'closed';
|
|
104
106
|
/**
|
|
105
107
|
* PeerJS Peer constructor interface.
|
|
106
108
|
* Consumer must provide this constructor to P2P functions.
|
|
@@ -204,6 +206,15 @@ interface P2PMetadataEvent {
|
|
|
204
206
|
total: number;
|
|
205
207
|
/** Call this to signal the sender to begin transfer (when autoReady is false). */
|
|
206
208
|
sendReady?: () => void;
|
|
209
|
+
/** v3: Total number of files in a multi-file transfer (undefined for single file). */
|
|
210
|
+
fileCount?: number;
|
|
211
|
+
/** v3: List of all files (names and sizes) in a multi-file transfer. */
|
|
212
|
+
files?: Array<{
|
|
213
|
+
name: string;
|
|
214
|
+
size: number;
|
|
215
|
+
}>;
|
|
216
|
+
/** v3: Total size across all files. */
|
|
217
|
+
totalSize?: number;
|
|
207
218
|
}
|
|
208
219
|
/** Completion event for P2P receive operations. */
|
|
209
220
|
interface P2PReceiveCompleteEvent {
|
|
@@ -217,12 +228,34 @@ interface P2PCancellationEvent {
|
|
|
217
228
|
/** Optional cancellation message. */
|
|
218
229
|
message?: string;
|
|
219
230
|
}
|
|
231
|
+
/** Connection health event for monitoring. */
|
|
232
|
+
interface P2PConnectionHealthEvent {
|
|
233
|
+
/** ICE connection state. */
|
|
234
|
+
iceConnectionState: 'connected' | 'disconnected' | 'failed' | 'checking' | 'new' | 'closed';
|
|
235
|
+
/** Estimated round-trip time in milliseconds. */
|
|
236
|
+
rtt?: number;
|
|
237
|
+
/** Bytes currently buffered waiting to send. */
|
|
238
|
+
bufferedAmount?: number;
|
|
239
|
+
/** Milliseconds since last activity. */
|
|
240
|
+
lastActivityMs: number;
|
|
241
|
+
}
|
|
242
|
+
/** Resumable transfer info. */
|
|
243
|
+
interface P2PResumeInfo {
|
|
244
|
+
/** Session ID to resume. */
|
|
245
|
+
sessionId: string;
|
|
246
|
+
/** Bytes already received in previous session. */
|
|
247
|
+
receivedBytes: number;
|
|
248
|
+
/** Total bytes expected. */
|
|
249
|
+
totalBytes: number;
|
|
250
|
+
/** Whether resume is possible. */
|
|
251
|
+
canResume: boolean;
|
|
252
|
+
}
|
|
220
253
|
/**
|
|
221
254
|
* Options for starting a P2P send session.
|
|
222
255
|
*/
|
|
223
256
|
interface P2PSendOptions extends P2PServerConfig {
|
|
224
|
-
/** File to send. */
|
|
225
|
-
file: FileSource;
|
|
257
|
+
/** File(s) to send. A single file or an array for multi-file transfers. */
|
|
258
|
+
file: FileSource | FileSource[];
|
|
226
259
|
/** PeerJS Peer constructor - REQUIRED. */
|
|
227
260
|
Peer: PeerConstructor;
|
|
228
261
|
/** Server info (optional, for capability checking). */
|
|
@@ -257,6 +290,16 @@ interface P2PSendOptions extends P2PServerConfig {
|
|
|
257
290
|
onDisconnect?: () => void;
|
|
258
291
|
/** Callback when transfer is cancelled by either party. */
|
|
259
292
|
onCancel?: (evt: P2PCancellationEvent) => void;
|
|
293
|
+
/** Enable chunk-level acknowledgments for flow control (default: true). */
|
|
294
|
+
chunkAcknowledgments?: boolean;
|
|
295
|
+
/** Maximum unacknowledged chunks before pausing (default: 32). */
|
|
296
|
+
maxUnackedChunks?: number;
|
|
297
|
+
/** ICE restart timeout in ms (default: 10000). */
|
|
298
|
+
iceRestartTimeoutMs?: number;
|
|
299
|
+
/** Connection health monitoring callback. */
|
|
300
|
+
onConnectionHealth?: (evt: P2PConnectionHealthEvent) => void;
|
|
301
|
+
/** Called when receiver requests resume from offset. */
|
|
302
|
+
onResumeRequest?: (info: P2PResumeInfo) => boolean;
|
|
260
303
|
}
|
|
261
304
|
/**
|
|
262
305
|
* Return value from startP2PSend containing session control.
|
|
@@ -311,6 +354,17 @@ interface P2PReceiveOptions extends P2PServerConfig {
|
|
|
311
354
|
onData?: (chunk: Uint8Array) => Promise<void> | void;
|
|
312
355
|
/** Callback for progress updates. */
|
|
313
356
|
onProgress?: (evt: P2PReceiveProgressEvent) => void;
|
|
357
|
+
/** Callback when an individual file starts in a multi-file transfer. */
|
|
358
|
+
onFileStart?: (evt: {
|
|
359
|
+
fileIndex: number;
|
|
360
|
+
name: string;
|
|
361
|
+
size: number;
|
|
362
|
+
}) => void;
|
|
363
|
+
/** Callback when an individual file ends in a multi-file transfer. */
|
|
364
|
+
onFileEnd?: (evt: {
|
|
365
|
+
fileIndex: number;
|
|
366
|
+
receivedBytes: number;
|
|
367
|
+
}) => void;
|
|
314
368
|
/** Callback when transfer completes. */
|
|
315
369
|
onComplete?: (evt: P2PReceiveCompleteEvent) => void;
|
|
316
370
|
/** Callback on error. */
|
|
@@ -337,6 +391,109 @@ interface P2PReceiveSession {
|
|
|
337
391
|
/** Get the current session ID (if received from sender). */
|
|
338
392
|
getSessionId: () => string | null;
|
|
339
393
|
}
|
|
394
|
+
/**
|
|
395
|
+
* Options for DropgateClient.p2pSend().
|
|
396
|
+
* Server connection, serverInfo, peerjsPath, iceServers, and cryptoObj
|
|
397
|
+
* are all provided internally by the client.
|
|
398
|
+
*/
|
|
399
|
+
interface P2PSendFileOptions {
|
|
400
|
+
/** File(s) to send. A single file or an array for multi-file transfers. */
|
|
401
|
+
file: FileSource | FileSource[];
|
|
402
|
+
/** PeerJS Peer constructor - REQUIRED. */
|
|
403
|
+
Peer: PeerConstructor;
|
|
404
|
+
/** Custom code generator function. */
|
|
405
|
+
codeGenerator?: (cryptoObj?: CryptoAdapter) => string;
|
|
406
|
+
/** Max attempts to register a peer ID. */
|
|
407
|
+
maxAttempts?: number;
|
|
408
|
+
/** Chunk size for data transfer. */
|
|
409
|
+
chunkSize?: number;
|
|
410
|
+
/** Timeout waiting for end acknowledgment. */
|
|
411
|
+
endAckTimeoutMs?: number;
|
|
412
|
+
/** Buffer high water mark for flow control. */
|
|
413
|
+
bufferHighWaterMark?: number;
|
|
414
|
+
/** Buffer low water mark for flow control. */
|
|
415
|
+
bufferLowWaterMark?: number;
|
|
416
|
+
/** Heartbeat interval in ms for long transfers (default: 5000, 0 to disable). */
|
|
417
|
+
heartbeatIntervalMs?: number;
|
|
418
|
+
/** Enable chunk-level acknowledgments for flow control (default: true). */
|
|
419
|
+
chunkAcknowledgments?: boolean;
|
|
420
|
+
/** Maximum unacknowledged chunks before pausing (default: 32). */
|
|
421
|
+
maxUnackedChunks?: number;
|
|
422
|
+
/** ICE restart timeout in ms (default: 10000). */
|
|
423
|
+
iceRestartTimeoutMs?: number;
|
|
424
|
+
/** Callback when code is generated. */
|
|
425
|
+
onCode?: (code: string, attempt: number) => void;
|
|
426
|
+
/** Callback for status updates. */
|
|
427
|
+
onStatus?: (evt: P2PStatusEvent) => void;
|
|
428
|
+
/** Callback for progress updates. */
|
|
429
|
+
onProgress?: (evt: P2PSendProgressEvent) => void;
|
|
430
|
+
/** Callback when transfer completes. */
|
|
431
|
+
onComplete?: () => void;
|
|
432
|
+
/** Callback on error. */
|
|
433
|
+
onError?: (err: Error) => void;
|
|
434
|
+
/** Callback when receiver disconnects. */
|
|
435
|
+
onDisconnect?: () => void;
|
|
436
|
+
/** Callback when transfer is cancelled by either party. */
|
|
437
|
+
onCancel?: (evt: P2PCancellationEvent) => void;
|
|
438
|
+
/** Connection health monitoring callback. */
|
|
439
|
+
onConnectionHealth?: (evt: P2PConnectionHealthEvent) => void;
|
|
440
|
+
/** Called when receiver requests resume from offset. */
|
|
441
|
+
onResumeRequest?: (info: P2PResumeInfo) => boolean;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Options for DropgateClient.p2pReceive().
|
|
445
|
+
* Server connection, serverInfo, peerjsPath, and iceServers
|
|
446
|
+
* are all provided internally by the client.
|
|
447
|
+
*/
|
|
448
|
+
interface P2PReceiveFileOptions {
|
|
449
|
+
/** Sharing code to connect to. */
|
|
450
|
+
code: string;
|
|
451
|
+
/** PeerJS Peer constructor - REQUIRED. */
|
|
452
|
+
Peer: PeerConstructor;
|
|
453
|
+
/**
|
|
454
|
+
* Whether to automatically send the "ready" signal after receiving metadata.
|
|
455
|
+
* Default: true.
|
|
456
|
+
* Set to false to show a preview and manually control when the transfer starts.
|
|
457
|
+
* When false, call the sendReady function passed to onMeta to start the transfer.
|
|
458
|
+
*/
|
|
459
|
+
autoReady?: boolean;
|
|
460
|
+
/**
|
|
461
|
+
* Timeout in ms for detecting dead connections (no data received).
|
|
462
|
+
* Default: 15000 (15 seconds). Set to 0 to disable.
|
|
463
|
+
*/
|
|
464
|
+
watchdogTimeoutMs?: number;
|
|
465
|
+
/** Callback for status updates. */
|
|
466
|
+
onStatus?: (evt: P2PStatusEvent) => void;
|
|
467
|
+
/**
|
|
468
|
+
* Callback when file metadata is received.
|
|
469
|
+
* When autoReady is false, this callback receives a sendReady function
|
|
470
|
+
* that must be called to signal the sender to begin the transfer.
|
|
471
|
+
*/
|
|
472
|
+
onMeta?: (evt: P2PMetadataEvent) => void;
|
|
473
|
+
/** Callback when data chunk is received - consumer handles file writing. */
|
|
474
|
+
onData?: (chunk: Uint8Array) => Promise<void> | void;
|
|
475
|
+
/** Callback for progress updates. */
|
|
476
|
+
onProgress?: (evt: P2PReceiveProgressEvent) => void;
|
|
477
|
+
/** Callback when an individual file starts in a multi-file transfer. */
|
|
478
|
+
onFileStart?: (evt: {
|
|
479
|
+
fileIndex: number;
|
|
480
|
+
name: string;
|
|
481
|
+
size: number;
|
|
482
|
+
}) => void;
|
|
483
|
+
/** Callback when an individual file ends in a multi-file transfer. */
|
|
484
|
+
onFileEnd?: (evt: {
|
|
485
|
+
fileIndex: number;
|
|
486
|
+
receivedBytes: number;
|
|
487
|
+
}) => void;
|
|
488
|
+
/** Callback when transfer completes. */
|
|
489
|
+
onComplete?: (evt: P2PReceiveCompleteEvent) => void;
|
|
490
|
+
/** Callback on error. */
|
|
491
|
+
onError?: (err: Error) => void;
|
|
492
|
+
/** Callback when sender disconnects. */
|
|
493
|
+
onDisconnect?: () => void;
|
|
494
|
+
/** Callback when transfer is cancelled by either party. */
|
|
495
|
+
onCancel?: (evt: P2PCancellationEvent) => void;
|
|
496
|
+
}
|
|
340
497
|
|
|
341
498
|
/**
|
|
342
499
|
* Start a direct transfer (P2P) sender session.
|
|
@@ -344,6 +501,12 @@ interface P2PReceiveSession {
|
|
|
344
501
|
* IMPORTANT: Consumer must provide the PeerJS Peer constructor.
|
|
345
502
|
* This removes DOM coupling (no script injection).
|
|
346
503
|
*
|
|
504
|
+
* Protocol v2 features:
|
|
505
|
+
* - Explicit version handshake
|
|
506
|
+
* - Chunk-level acknowledgments for flow control
|
|
507
|
+
* - Multiple end-ack retries for reliability
|
|
508
|
+
* - Stream-through design for unlimited file sizes
|
|
509
|
+
*
|
|
347
510
|
* Example:
|
|
348
511
|
* ```js
|
|
349
512
|
* import Peer from 'peerjs';
|
|
@@ -368,6 +531,12 @@ declare function startP2PSend(opts: P2PSendOptions): Promise<P2PSendSession>;
|
|
|
368
531
|
* IMPORTANT: Consumer must provide the PeerJS Peer constructor and handle file writing.
|
|
369
532
|
* This removes DOM coupling (no streamSaver).
|
|
370
533
|
*
|
|
534
|
+
* Protocol v2 features:
|
|
535
|
+
* - Explicit version handshake
|
|
536
|
+
* - Chunk-level acknowledgments for flow control
|
|
537
|
+
* - Multiple end-ack sends for reliability
|
|
538
|
+
* - Stream-through design for unlimited file sizes
|
|
539
|
+
*
|
|
371
540
|
* Example:
|
|
372
541
|
* ```js
|
|
373
542
|
* import Peer from 'peerjs';
|
|
@@ -441,4 +610,196 @@ declare function createPeerWithRetries(opts: CreatePeerWithRetriesOptions): Prom
|
|
|
441
610
|
code: string;
|
|
442
611
|
}>;
|
|
443
612
|
|
|
444
|
-
|
|
613
|
+
/**
|
|
614
|
+
* P2P Protocol Definitions
|
|
615
|
+
*
|
|
616
|
+
* This file defines the application-level protocol for P2P file transfers.
|
|
617
|
+
* Protocol version 2 introduces:
|
|
618
|
+
* - Explicit handshake with version negotiation
|
|
619
|
+
* - Chunk-level acknowledgments for flow control
|
|
620
|
+
* - Multiple end-ack retries for reliability
|
|
621
|
+
* - Resume capability support
|
|
622
|
+
*
|
|
623
|
+
* Protocol version 3 introduces:
|
|
624
|
+
* - Multi-file transfers via file_list, file_end, file_end_ack messages
|
|
625
|
+
* - Sequential file-by-file transfer within a single session
|
|
626
|
+
*/
|
|
627
|
+
declare const P2P_PROTOCOL_VERSION = 3;
|
|
628
|
+
/**
|
|
629
|
+
* All possible P2P message types.
|
|
630
|
+
*/
|
|
631
|
+
type P2PMessageType = 'hello' | 'file_list' | 'meta' | 'ready' | 'chunk' | 'chunk_ack' | 'file_end' | 'file_end_ack' | 'end' | 'end_ack' | 'ping' | 'pong' | 'error' | 'cancelled' | 'resume' | 'resume_ack';
|
|
632
|
+
/**
|
|
633
|
+
* Base interface for all P2P messages.
|
|
634
|
+
*/
|
|
635
|
+
interface P2PMessageBase {
|
|
636
|
+
t: P2PMessageType;
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* Initial handshake message exchanged between sender and receiver.
|
|
640
|
+
*/
|
|
641
|
+
interface P2PHelloMessage extends P2PMessageBase {
|
|
642
|
+
t: 'hello';
|
|
643
|
+
protocolVersion: number;
|
|
644
|
+
sessionId: string;
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* v3: File list sent by sender after handshake for multi-file transfers.
|
|
648
|
+
*/
|
|
649
|
+
interface P2PFileListMessage extends P2PMessageBase {
|
|
650
|
+
t: 'file_list';
|
|
651
|
+
fileCount: number;
|
|
652
|
+
files: Array<{
|
|
653
|
+
name: string;
|
|
654
|
+
size: number;
|
|
655
|
+
mime: string;
|
|
656
|
+
}>;
|
|
657
|
+
totalSize: number;
|
|
658
|
+
}
|
|
659
|
+
/**
|
|
660
|
+
* File metadata sent by sender after handshake (single file)
|
|
661
|
+
* or before each file's chunks in multi-file mode.
|
|
662
|
+
*/
|
|
663
|
+
interface P2PMetaMessage extends P2PMessageBase {
|
|
664
|
+
t: 'meta';
|
|
665
|
+
sessionId: string;
|
|
666
|
+
name: string;
|
|
667
|
+
size: number;
|
|
668
|
+
mime: string;
|
|
669
|
+
/** v3: File index within the file list (0-based). Absent for single-file transfers. */
|
|
670
|
+
fileIndex?: number;
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* Receiver signals readiness to receive data.
|
|
674
|
+
*/
|
|
675
|
+
interface P2PReadyMessage extends P2PMessageBase {
|
|
676
|
+
t: 'ready';
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* Chunk header sent before binary data.
|
|
680
|
+
* The actual binary data follows immediately after this message.
|
|
681
|
+
*/
|
|
682
|
+
interface P2PChunkMessage extends P2PMessageBase {
|
|
683
|
+
t: 'chunk';
|
|
684
|
+
seq: number;
|
|
685
|
+
offset: number;
|
|
686
|
+
size: number;
|
|
687
|
+
total: number;
|
|
688
|
+
}
|
|
689
|
+
/**
|
|
690
|
+
* Acknowledgment for a received chunk.
|
|
691
|
+
*/
|
|
692
|
+
interface P2PChunkAckMessage extends P2PMessageBase {
|
|
693
|
+
t: 'chunk_ack';
|
|
694
|
+
seq: number;
|
|
695
|
+
received: number;
|
|
696
|
+
}
|
|
697
|
+
/**
|
|
698
|
+
* v3: Sender signals all chunks for the current file have been sent.
|
|
699
|
+
*/
|
|
700
|
+
interface P2PFileEndMessage extends P2PMessageBase {
|
|
701
|
+
t: 'file_end';
|
|
702
|
+
fileIndex: number;
|
|
703
|
+
attempt?: number;
|
|
704
|
+
}
|
|
705
|
+
/**
|
|
706
|
+
* v3: Receiver confirms current file receipt.
|
|
707
|
+
*/
|
|
708
|
+
interface P2PFileEndAckMessage extends P2PMessageBase {
|
|
709
|
+
t: 'file_end_ack';
|
|
710
|
+
fileIndex: number;
|
|
711
|
+
received: number;
|
|
712
|
+
size: number;
|
|
713
|
+
}
|
|
714
|
+
/**
|
|
715
|
+
* Sender signals all chunks have been sent.
|
|
716
|
+
*/
|
|
717
|
+
interface P2PEndMessage extends P2PMessageBase {
|
|
718
|
+
t: 'end';
|
|
719
|
+
attempt?: number;
|
|
720
|
+
}
|
|
721
|
+
/**
|
|
722
|
+
* Receiver confirms transfer completion.
|
|
723
|
+
*/
|
|
724
|
+
interface P2PEndAckMessage extends P2PMessageBase {
|
|
725
|
+
t: 'end_ack';
|
|
726
|
+
received: number;
|
|
727
|
+
total: number;
|
|
728
|
+
}
|
|
729
|
+
/**
|
|
730
|
+
* Heartbeat ping.
|
|
731
|
+
*/
|
|
732
|
+
interface P2PPingMessage extends P2PMessageBase {
|
|
733
|
+
t: 'ping';
|
|
734
|
+
timestamp: number;
|
|
735
|
+
}
|
|
736
|
+
/**
|
|
737
|
+
* Heartbeat pong response.
|
|
738
|
+
*/
|
|
739
|
+
interface P2PPongMessage extends P2PMessageBase {
|
|
740
|
+
t: 'pong';
|
|
741
|
+
timestamp: number;
|
|
742
|
+
}
|
|
743
|
+
/**
|
|
744
|
+
* Error message sent when something goes wrong.
|
|
745
|
+
*/
|
|
746
|
+
interface P2PErrorMessage extends P2PMessageBase {
|
|
747
|
+
t: 'error';
|
|
748
|
+
message: string;
|
|
749
|
+
code?: string;
|
|
750
|
+
}
|
|
751
|
+
/**
|
|
752
|
+
* Cancellation message sent when user cancels transfer.
|
|
753
|
+
*/
|
|
754
|
+
interface P2PCancelledMessage extends P2PMessageBase {
|
|
755
|
+
t: 'cancelled';
|
|
756
|
+
reason?: string;
|
|
757
|
+
}
|
|
758
|
+
/**
|
|
759
|
+
* Resume request sent by receiver to continue interrupted transfer.
|
|
760
|
+
*/
|
|
761
|
+
interface P2PResumeMessage extends P2PMessageBase {
|
|
762
|
+
t: 'resume';
|
|
763
|
+
sessionId: string;
|
|
764
|
+
receivedBytes: number;
|
|
765
|
+
}
|
|
766
|
+
/**
|
|
767
|
+
* Resume acknowledgment from sender.
|
|
768
|
+
*/
|
|
769
|
+
interface P2PResumeAckMessage extends P2PMessageBase {
|
|
770
|
+
t: 'resume_ack';
|
|
771
|
+
resumeFromOffset: number;
|
|
772
|
+
accepted: boolean;
|
|
773
|
+
}
|
|
774
|
+
/**
|
|
775
|
+
* Union type of all possible P2P messages.
|
|
776
|
+
*/
|
|
777
|
+
type P2PMessage = P2PHelloMessage | P2PFileListMessage | P2PMetaMessage | P2PReadyMessage | P2PChunkMessage | P2PChunkAckMessage | P2PFileEndMessage | P2PFileEndAckMessage | P2PEndMessage | P2PEndAckMessage | P2PPingMessage | P2PPongMessage | P2PErrorMessage | P2PCancelledMessage | P2PResumeMessage | P2PResumeAckMessage;
|
|
778
|
+
/**
|
|
779
|
+
* Type guard to check if a value is a valid P2P message.
|
|
780
|
+
*/
|
|
781
|
+
declare function isP2PMessage(value: unknown): value is P2PMessage;
|
|
782
|
+
/**
|
|
783
|
+
* Check if protocol versions are compatible.
|
|
784
|
+
*/
|
|
785
|
+
declare function isProtocolCompatible(senderVersion: number, receiverVersion: number): boolean;
|
|
786
|
+
/**
|
|
787
|
+
* Default chunk size for P2P transfers (64KB).
|
|
788
|
+
* Smaller than standard upload to reduce latency and improve flow control.
|
|
789
|
+
*/
|
|
790
|
+
declare const P2P_CHUNK_SIZE: number;
|
|
791
|
+
/**
|
|
792
|
+
* Default maximum unacknowledged chunks before sender pauses.
|
|
793
|
+
* This creates backpressure when receiver is slow.
|
|
794
|
+
*/
|
|
795
|
+
declare const P2P_MAX_UNACKED_CHUNKS = 32;
|
|
796
|
+
/**
|
|
797
|
+
* Default timeout for waiting on end acknowledgment (ms).
|
|
798
|
+
*/
|
|
799
|
+
declare const P2P_END_ACK_TIMEOUT_MS = 15000;
|
|
800
|
+
/**
|
|
801
|
+
* Number of times to retry sending end message.
|
|
802
|
+
*/
|
|
803
|
+
declare const P2P_END_ACK_RETRIES = 3;
|
|
804
|
+
|
|
805
|
+
export { type DataConnection, type DataConnectionEvents, type P2PCancellationEvent, type P2PCancelledMessage, type P2PChunkAckMessage, type P2PChunkMessage, type P2PConnectionHealthEvent, type P2PEndAckMessage, type P2PEndMessage, type P2PErrorMessage, type P2PHelloMessage, type P2PMessage, type P2PMessageBase, type P2PMessageType, type P2PMetaMessage, type P2PMetadataEvent, type P2PPingMessage, type P2PPongMessage, type P2PReadyMessage, type P2PReceiveCompleteEvent, type P2PReceiveFileOptions, type P2PReceiveOptions, type P2PReceiveProgressEvent, type P2PReceiveSession, type P2PReceiveState, type P2PResumeAckMessage, type P2PResumeInfo, type P2PResumeMessage, type P2PSendFileOptions, type P2PSendOptions, type P2PSendProgressEvent, type P2PSendSession, type P2PSendState, type P2PServerConfig, type P2PStatusEvent, P2P_CHUNK_SIZE, P2P_END_ACK_RETRIES, P2P_END_ACK_TIMEOUT_MS, P2P_MAX_UNACKED_CHUNKS, P2P_PROTOCOL_VERSION, type PeerConstructor, type PeerInstance, type PeerInstanceEvents, type PeerOptions, buildPeerOptions, createPeerWithRetries, generateP2PCode, isLocalhostHostname, isP2PCodeLike, isP2PMessage, isProtocolCompatible, isSecureContextForP2P, resolvePeerConfig, startP2PReceive, startP2PSend };
|