@adeeliore/p2p-core 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 (83) hide show
  1. package/API_REFERENCE.md +164 -0
  2. package/CHANGELOG.md +13 -0
  3. package/LICENSE +12 -0
  4. package/README.md +164 -0
  5. package/dist/errors.d.ts +16 -0
  6. package/dist/errors.d.ts.map +1 -0
  7. package/dist/errors.js +13 -0
  8. package/dist/index.d.ts +13 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +22 -0
  11. package/dist/rtc/PeerConnectionManager.d.ts +34 -0
  12. package/dist/rtc/PeerConnectionManager.d.ts.map +1 -0
  13. package/dist/rtc/PeerConnectionManager.js +231 -0
  14. package/dist/rtc/constants.d.ts +15 -0
  15. package/dist/rtc/constants.d.ts.map +1 -0
  16. package/dist/rtc/constants.js +65 -0
  17. package/dist/rtc/defaults.d.ts +13 -0
  18. package/dist/rtc/defaults.d.ts.map +1 -0
  19. package/dist/rtc/defaults.js +15 -0
  20. package/dist/rtc/index.d.ts +6 -0
  21. package/dist/rtc/index.d.ts.map +1 -0
  22. package/dist/rtc/index.js +21 -0
  23. package/dist/rtc/native.d.ts +11 -0
  24. package/dist/rtc/native.d.ts.map +1 -0
  25. package/dist/rtc/native.js +31 -0
  26. package/dist/rtc/options.d.ts +6 -0
  27. package/dist/rtc/options.d.ts.map +1 -0
  28. package/dist/rtc/options.js +22 -0
  29. package/dist/rtc/payloadParsers.d.ts +4 -0
  30. package/dist/rtc/payloadParsers.d.ts.map +1 -0
  31. package/dist/rtc/payloadParsers.js +33 -0
  32. package/dist/rtc/runtime.d.ts +22 -0
  33. package/dist/rtc/runtime.d.ts.map +1 -0
  34. package/dist/rtc/runtime.js +25 -0
  35. package/dist/rtc/types.d.ts +56 -0
  36. package/dist/rtc/types.d.ts.map +1 -0
  37. package/dist/rtc/types.js +2 -0
  38. package/dist/session/P2PSession.d.ts +10 -0
  39. package/dist/session/P2PSession.d.ts.map +1 -0
  40. package/dist/session/P2PSession.js +285 -0
  41. package/dist/session/constants.d.ts +4 -0
  42. package/dist/session/constants.d.ts.map +1 -0
  43. package/dist/session/constants.js +6 -0
  44. package/dist/session/index.d.ts +3 -0
  45. package/dist/session/index.d.ts.map +1 -0
  46. package/dist/session/index.js +18 -0
  47. package/dist/session/runtimeSupport.d.ts +36 -0
  48. package/dist/session/runtimeSupport.d.ts.map +1 -0
  49. package/dist/session/runtimeSupport.js +144 -0
  50. package/dist/session/serverMessageHandlers.d.ts +21 -0
  51. package/dist/session/serverMessageHandlers.d.ts.map +1 -0
  52. package/dist/session/serverMessageHandlers.js +30 -0
  53. package/dist/session/types.d.ts +195 -0
  54. package/dist/session/types.d.ts.map +1 -0
  55. package/dist/session/types.js +2 -0
  56. package/dist/signaling/SignalingClient.d.ts +39 -0
  57. package/dist/signaling/SignalingClient.d.ts.map +1 -0
  58. package/dist/signaling/SignalingClient.js +130 -0
  59. package/dist/signaling/constants.d.ts +14 -0
  60. package/dist/signaling/constants.d.ts.map +1 -0
  61. package/dist/signaling/constants.js +20 -0
  62. package/dist/signaling/index.d.ts +5 -0
  63. package/dist/signaling/index.d.ts.map +1 -0
  64. package/dist/signaling/index.js +20 -0
  65. package/dist/signaling/provider.d.ts +56 -0
  66. package/dist/signaling/provider.d.ts.map +1 -0
  67. package/dist/signaling/provider.js +87 -0
  68. package/dist/signaling/types.d.ts +62 -0
  69. package/dist/signaling/types.d.ts.map +1 -0
  70. package/dist/signaling/types.js +2 -0
  71. package/dist/sync/constants.d.ts +10 -0
  72. package/dist/sync/constants.d.ts.map +1 -0
  73. package/dist/sync/constants.js +12 -0
  74. package/dist/sync/engine.d.ts +13 -0
  75. package/dist/sync/engine.d.ts.map +1 -0
  76. package/dist/sync/engine.js +137 -0
  77. package/dist/sync/index.d.ts +4 -0
  78. package/dist/sync/index.d.ts.map +1 -0
  79. package/dist/sync/index.js +19 -0
  80. package/dist/sync/types.d.ts +61 -0
  81. package/dist/sync/types.d.ts.map +1 -0
  82. package/dist/sync/types.js +2 -0
  83. package/package.json +46 -0
@@ -0,0 +1,164 @@
1
+ # API Reference
2
+
3
+ ## Install
4
+
5
+ ```bash
6
+ npm install @adeeliore/p2p-core react-native-webrtc
7
+ ```
8
+
9
+ ## 1. Create A Session
10
+
11
+ ```ts
12
+ import { createP2PSession } from '@adeeliore/p2p-core';
13
+
14
+ const session = createP2PSession({
15
+ signalBaseUrl: 'wss://example.com',
16
+ sessionId: 'ROOM-1234',
17
+ clientId: 'teacher',
18
+ accessToken: 'shared-secret',
19
+ autoCreateOffers: true,
20
+ });
21
+ ```
22
+
23
+ ### `createP2PSession(options)`
24
+
25
+ Creates the main runtime object used by the application.
26
+
27
+ Important options:
28
+
29
+ - `signalBaseUrl`: base URL for the built-in WebSocket signaling provider.
30
+ - `signalingProvider`: custom provider when the built-in WebSocket transport is not used.
31
+ - `sessionId`: logical room id.
32
+ - `clientId`: optional desired client id.
33
+ - `accessToken`: shared token sent to signaling.
34
+ - `autoCreateOffers`: whether offers should be created automatically.
35
+ - `offerDelayMs`: delay before automatic offer creation.
36
+ - `rtcConfig`: custom ICE server config.
37
+ - `heartbeat`: heartbeat timing overrides.
38
+ - `reconnect`: reconnect timing overrides.
39
+
40
+ ## 2. Connect And Disconnect
41
+
42
+ ```ts
43
+ session.connect();
44
+ session.disconnect();
45
+ ```
46
+
47
+ ### Runtime methods
48
+
49
+ - `connect()`: opens signaling transport and starts the runtime.
50
+ - `disconnect(code?, reason?)`: closes signaling and all peers.
51
+ - `isConnected()`: returns current signaling connectivity state.
52
+ - `getState()`: returns current session snapshot.
53
+ - `getLocalPeerId()`: returns the resolved local peer id.
54
+ - `getPeerIds()`: returns current remote peer ids.
55
+
56
+ ## 3. Listen To Events
57
+
58
+ ```ts
59
+ session.on('welcome', ({ clientId, peers }) => {
60
+ console.log(clientId, peers);
61
+ });
62
+
63
+ session.on('peerDataOpen', ({ peerId, joinKind }) => {
64
+ console.log('ready', peerId, joinKind);
65
+ });
66
+
67
+ session.on('peerMessage', ({ peerId, message }) => {
68
+ console.log(peerId, JSON.parse(message));
69
+ });
70
+ ```
71
+
72
+ ### Event names
73
+
74
+ - `signalingOpen`
75
+ - `signalingClose`
76
+ - `signalingError`
77
+ - `protocolError`
78
+ - `serverError`
79
+
80
+ Error-bearing events such as `signalingError`, `transportError` and `protocolError`
81
+ carry stable error codes so app code can react without parsing free-form strings.
82
+ - `welcome`
83
+ - `peerJoined`
84
+ - `peerLeft`
85
+ - `peerDataOpen`
86
+ - `peerDataClose`
87
+ - `peerMessage`
88
+ - `iceStateChange`
89
+ - `transportError`
90
+ - `pong`
91
+
92
+ ## 4. Send P2P Messages
93
+
94
+ ```ts
95
+ session.sendTo('peer-a', JSON.stringify({
96
+ type: 'presence',
97
+ payload: { state: 'ready' },
98
+ }));
99
+
100
+ session.broadcast(JSON.stringify({
101
+ type: 'cursor',
102
+ payload: { x: 12, y: 44 },
103
+ }));
104
+ ```
105
+
106
+ ### Messaging methods
107
+
108
+ - `sendTo(peerId, message)`: sends one raw string to a peer.
109
+ - `broadcast(message, peerIds?)`: sends one raw string to all peers or a subset.
110
+ - `createOffer(peerId)`: explicitly creates an offer for a peer.
111
+ - `sendPing()`: sends signaling-level ping through the provider.
112
+
113
+ ## 5. Add Sync Domains
114
+
115
+ ```ts
116
+ import { createP2PSyncEngine } from '@adeeliore/p2p-core';
117
+
118
+ const sync = createP2PSyncEngine(session);
119
+
120
+ sync.registerDomain({
121
+ domain: 'poll',
122
+ strategy: 'snapshot-and-live',
123
+ getSnapshot: () => pollStore.exportSnapshot(),
124
+ applySnapshot: (snapshot) => pollStore.importSnapshot(snapshot),
125
+ applyEvent: (event) => pollStore.applyRemoteEvent(event),
126
+ });
127
+ ```
128
+
129
+ ### `createP2PSyncEngine(session)`
130
+
131
+ Creates a sync engine on top of an existing `P2PSession`.
132
+
133
+ ### Sync engine methods
134
+
135
+ - `registerDomain(registration)`: registers one domain and returns an unsubscribe function.
136
+ - `sendEvent(domain, payload, options?)`: sends a domain event.
137
+ - `requestSnapshot(domain, targetPeerId)`: requests state from a peer.
138
+ - `destroy()`: removes listeners and clears internal registrations.
139
+
140
+ ### Sync strategies
141
+
142
+ - `events`: only live events, no snapshots.
143
+ - `pull-on-connect`: ask existing peers for snapshot after connect.
144
+ - `push-to-new-peer`: push snapshot to newly joined peers.
145
+ - `snapshot-and-live`: combine snapshots with live event stream.
146
+
147
+ ## 6. Use A Custom Signaling Provider
148
+
149
+ ```ts
150
+ const session = createP2PSession({
151
+ sessionId: 'ROOM-1234',
152
+ signalingProvider: myProvider,
153
+ });
154
+ ```
155
+
156
+ Provider contract methods:
157
+
158
+ - `connect(options, handlers)`
159
+ - `disconnect(code?, reason?)`
160
+ - `sendPing()`
161
+ - `sendRelay(type, to, payload)`
162
+ - `isConnected()`
163
+
164
+ `@adeeliore/p2p-lan-signaling` implements this contract for LAN/offline sessions.
package/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0
4
+
5
+ Initial package extraction from DrawingApp.
6
+
7
+ Included in this release:
8
+
9
+ - signaling client
10
+ - WebRTC peer manager
11
+ - high-level `P2PSession` runtime
12
+ - TypeScript public API
13
+ - package-level docs and example
package/LICENSE ADDED
@@ -0,0 +1,12 @@
1
+ Copyright (C) 2026
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for any
4
+ purpose with or without fee is hereby granted.
5
+
6
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
7
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
8
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
9
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
10
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
11
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
12
+ PERFORMANCE OF THIS SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,164 @@
1
+ # `@adeeliore/p2p-core`
2
+
3
+ Reusable P2P session runtime for React Native collaborative apps.
4
+
5
+ This package gives you a focused application runtime for:
6
+
7
+ - signaling connection management;
8
+ - WebRTC peer lifecycle;
9
+ - DataChannel messaging;
10
+ - reconnect and heartbeat behavior;
11
+ - domain-level synchronization through a sync engine.
12
+
13
+ It does not own your product protocol or state model. You keep control over:
14
+
15
+ - payload format;
16
+ - board, poll, chat or document state;
17
+ - snapshot strategy;
18
+ - QR or room-discovery flows;
19
+ - UI and platform-specific setup.
20
+
21
+ ## Installation
22
+
23
+ ```bash
24
+ npm install @adeeliore/p2p-core react-native-webrtc
25
+ ```
26
+
27
+ ## Primary Use Case
28
+
29
+ Use `@adeeliore/p2p-core` when your app needs:
30
+
31
+ - a room/session abstraction above WebRTC;
32
+ - signaling over WebSocket or a custom provider;
33
+ - peer events exposed as a clean API;
34
+ - a reusable sync mechanism for multiple app domains.
35
+
36
+ ## Quick Start
37
+
38
+ ```ts
39
+ import { createP2PSession } from '@adeeliore/p2p-core';
40
+
41
+ const session = createP2PSession({
42
+ signalBaseUrl: 'wss://example.com',
43
+ sessionId: 'ROOM-1234',
44
+ clientId: 'teacher',
45
+ accessToken: 'shared-secret',
46
+ autoCreateOffers: true,
47
+ });
48
+
49
+ session.on('welcome', ({ clientId, peers }) => {
50
+ console.log('local peer', clientId);
51
+ console.log('existing peers', peers);
52
+ });
53
+
54
+ session.on('peerDataOpen', ({ peerId }) => {
55
+ console.log('ready for P2P messages', peerId);
56
+ });
57
+
58
+ session.on('peerMessage', ({ peerId, message }) => {
59
+ console.log('message from', peerId, JSON.parse(message));
60
+ });
61
+
62
+ session.connect();
63
+ ```
64
+
65
+ ## Sending App Messages
66
+
67
+ `p2p-core` transports strings. Most apps serialize JSON and keep protocol ownership in application code.
68
+
69
+ ```ts
70
+ session.broadcast(JSON.stringify({
71
+ type: 'cursor',
72
+ payload: { x: 120, y: 48 },
73
+ }));
74
+
75
+ session.sendTo('peer-a', JSON.stringify({
76
+ type: 'presence',
77
+ payload: { state: 'ready' },
78
+ }));
79
+ ```
80
+
81
+ ## Using The Sync Engine
82
+
83
+ The sync engine is the package-level mechanism for domain synchronization.
84
+
85
+ ```ts
86
+ import { createP2PSession, createP2PSyncEngine } from '@adeeliore/p2p-core';
87
+
88
+ const session = createP2PSession({
89
+ signalBaseUrl: 'wss://example.com',
90
+ sessionId: 'ROOM-1234',
91
+ });
92
+
93
+ const sync = createP2PSyncEngine(session);
94
+
95
+ sync.registerDomain({
96
+ domain: 'board',
97
+ strategy: 'snapshot-and-live',
98
+ getSnapshot: () => boardStore.exportSnapshot(),
99
+ applySnapshot: (snapshot) => boardStore.importSnapshot(snapshot),
100
+ applyEvent: (event) => boardStore.applyRemoteEvent(event),
101
+ });
102
+
103
+ session.connect();
104
+
105
+ sync.sendEvent('board', {
106
+ type: 'drawPath',
107
+ payload: { points: [10, 12, 15, 20] },
108
+ });
109
+ ```
110
+
111
+ Built-in strategies:
112
+
113
+ - `events`
114
+ - `pull-on-connect`
115
+ - `push-to-new-peer`
116
+ - `snapshot-and-live`
117
+
118
+ ## Using A Custom Signaling Provider
119
+
120
+ If you do not want the built-in WebSocket provider, pass your own `signalingProvider`.
121
+
122
+ ```ts
123
+ import { createP2PSession } from '@adeeliore/p2p-core';
124
+
125
+ const session = createP2PSession({
126
+ sessionId: 'ROOM-1234',
127
+ signalingProvider: myCustomProvider,
128
+ });
129
+ ```
130
+
131
+ This is how `@adeeliore/p2p-lan-signaling` plugs into the same runtime.
132
+
133
+ ## Consumer API
134
+
135
+ Most consumers only need:
136
+
137
+ - `createP2PSession`
138
+ - `createP2PSyncEngine`
139
+ - `session.connect()`
140
+ - `session.disconnect()`
141
+ - `session.on(...)`
142
+ - `session.sendTo(...)`
143
+ - `session.broadcast(...)`
144
+
145
+ ## Error Model
146
+
147
+ Runtime error payloads include stable error codes.
148
+
149
+ Examples:
150
+
151
+ - `ERR_SIGNALING_CONFIGURATION_REQUIRED`
152
+ - `ERR_SIGNALING_PROVIDER_ERROR`
153
+ - `ERR_SIGNALING_CONNECT_FAILED`
154
+ - `ERR_SIGNALING_NOT_CONNECTED`
155
+ - `ERR_PEER_MANAGER_UNAVAILABLE`
156
+ - `ERR_TRANSPORT_SEND_FAILED`
157
+ - `ERR_RELAY_SEND_FAILED`
158
+ - `ERR_PROTOCOL_INVALID_MESSAGE`
159
+
160
+ ## Documentation
161
+
162
+ - usage-oriented API reference: [API_REFERENCE.md](/Users/whoami/diplom-p2p/DrawingApp/packages/p2p-core/API_REFERENCE.md)
163
+ - changelog: [CHANGELOG.md](/Users/whoami/diplom-p2p/DrawingApp/packages/p2p-core/CHANGELOG.md)
164
+ - example: [examples/basic-session.ts](/Users/whoami/diplom-p2p/DrawingApp/packages/p2p-core/examples/basic-session.ts)
@@ -0,0 +1,16 @@
1
+ export declare const P2P_CORE_ERROR_CODE: {
2
+ readonly SIGNALING_CONFIGURATION_REQUIRED: "ERR_SIGNALING_CONFIGURATION_REQUIRED";
3
+ readonly SIGNALING_PROVIDER_ERROR: "ERR_SIGNALING_PROVIDER_ERROR";
4
+ readonly SIGNALING_CONNECT_FAILED: "ERR_SIGNALING_CONNECT_FAILED";
5
+ readonly SIGNALING_NOT_CONNECTED: "ERR_SIGNALING_NOT_CONNECTED";
6
+ readonly PEER_MANAGER_UNAVAILABLE: "ERR_PEER_MANAGER_UNAVAILABLE";
7
+ readonly TRANSPORT_SEND_FAILED: "ERR_TRANSPORT_SEND_FAILED";
8
+ readonly RELAY_SEND_FAILED: "ERR_RELAY_SEND_FAILED";
9
+ readonly PROTOCOL_INVALID_MESSAGE: "ERR_PROTOCOL_INVALID_MESSAGE";
10
+ };
11
+ export type P2PCoreErrorCode = typeof P2P_CORE_ERROR_CODE[keyof typeof P2P_CORE_ERROR_CODE];
12
+ export interface P2PCoreErrorPayload {
13
+ code: P2PCoreErrorCode;
14
+ message: string;
15
+ }
16
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB;;;;;;;;;CAStB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GACxB,OAAO,mBAAmB,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACnB"}
package/dist/errors.js ADDED
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.P2P_CORE_ERROR_CODE = void 0;
4
+ exports.P2P_CORE_ERROR_CODE = {
5
+ SIGNALING_CONFIGURATION_REQUIRED: 'ERR_SIGNALING_CONFIGURATION_REQUIRED',
6
+ SIGNALING_PROVIDER_ERROR: 'ERR_SIGNALING_PROVIDER_ERROR',
7
+ SIGNALING_CONNECT_FAILED: 'ERR_SIGNALING_CONNECT_FAILED',
8
+ SIGNALING_NOT_CONNECTED: 'ERR_SIGNALING_NOT_CONNECTED',
9
+ PEER_MANAGER_UNAVAILABLE: 'ERR_PEER_MANAGER_UNAVAILABLE',
10
+ TRANSPORT_SEND_FAILED: 'ERR_TRANSPORT_SEND_FAILED',
11
+ RELAY_SEND_FAILED: 'ERR_RELAY_SEND_FAILED',
12
+ PROTOCOL_INVALID_MESSAGE: 'ERR_PROTOCOL_INVALID_MESSAGE',
13
+ };
@@ -0,0 +1,13 @@
1
+ export { P2P_CORE_ERROR_CODE, } from './errors';
2
+ export type { P2PCoreErrorCode, P2PCoreErrorPayload, } from './errors';
3
+ export { WEBRTC_CONFIG_DIAGNOSTICS } from './rtc/constants';
4
+ export { createWebRtcPeerManager, isWebRtcRuntimeAvailable } from './rtc/runtime';
5
+ export type { IceConnectionState, WebRtcConfiguration, WebRtcHeartbeatConfig, WebRtcReconnectConfig, } from './rtc/types';
6
+ export { createP2PSession } from './session/P2PSession';
7
+ export type { P2PSession, P2PSessionErrorEvent, P2PSessionEventMap, P2PSessionIceStateChangeEvent, P2PSessionOptions, P2PSessionPeerDataOpenEvent, P2PSessionPeerEvent, P2PSessionPeerMessageEvent, P2PSessionProtocolErrorEvent, P2PSessionServerErrorEvent, P2PSessionSignalingCloseEvent, P2PSessionState, P2PSessionStatus, P2PSessionTransportErrorEvent, P2PSessionWelcomeEvent, PeerJoinKind, } from './session/types';
8
+ export { createWebSocketSignalingProvider, WebSocketSignalingProvider, } from './signaling/provider';
9
+ export type { SignalingProvider, SignalingProviderCloseEvent, SignalingProviderConnectOptions, SignalingProviderErrorEvent, SignalingProviderHandlers, SignalingProviderStatus, WebSocketSignalingProviderOptions, } from './signaling/provider';
10
+ export { createP2PSyncEngine } from './sync/engine';
11
+ export { DEFAULT_SYNC_STRATEGY, SYNC_NAMESPACE, SYNC_STRATEGY, SYNC_VERSION, } from './sync/constants';
12
+ export type { P2PSyncEngine, SyncDomainRegistration, SyncEnvelope, SyncEventContext, SyncEventSendOptions, SyncSnapshotContext, SyncStrategy, } from './sync/types';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,GACtB,MAAM,UAAU,CAAC;AAClB,YAAY,EACR,gBAAgB,EAChB,mBAAmB,GACtB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAClF,YAAY,EACR,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EACR,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,6BAA6B,EAC7B,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,6BAA6B,EAC7B,eAAe,EACf,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACtB,YAAY,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACH,gCAAgC,EAChC,0BAA0B,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACR,iBAAiB,EACjB,2BAA2B,EAC3B,+BAA+B,EAC/B,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,iCAAiC,GACpC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACH,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,YAAY,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACR,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,GACf,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SYNC_VERSION = exports.SYNC_STRATEGY = exports.SYNC_NAMESPACE = exports.DEFAULT_SYNC_STRATEGY = exports.createP2PSyncEngine = exports.WebSocketSignalingProvider = exports.createWebSocketSignalingProvider = exports.createP2PSession = exports.isWebRtcRuntimeAvailable = exports.createWebRtcPeerManager = exports.WEBRTC_CONFIG_DIAGNOSTICS = exports.P2P_CORE_ERROR_CODE = void 0;
4
+ var errors_1 = require("./errors");
5
+ Object.defineProperty(exports, "P2P_CORE_ERROR_CODE", { enumerable: true, get: function () { return errors_1.P2P_CORE_ERROR_CODE; } });
6
+ var constants_1 = require("./rtc/constants");
7
+ Object.defineProperty(exports, "WEBRTC_CONFIG_DIAGNOSTICS", { enumerable: true, get: function () { return constants_1.WEBRTC_CONFIG_DIAGNOSTICS; } });
8
+ var runtime_1 = require("./rtc/runtime");
9
+ Object.defineProperty(exports, "createWebRtcPeerManager", { enumerable: true, get: function () { return runtime_1.createWebRtcPeerManager; } });
10
+ Object.defineProperty(exports, "isWebRtcRuntimeAvailable", { enumerable: true, get: function () { return runtime_1.isWebRtcRuntimeAvailable; } });
11
+ var P2PSession_1 = require("./session/P2PSession");
12
+ Object.defineProperty(exports, "createP2PSession", { enumerable: true, get: function () { return P2PSession_1.createP2PSession; } });
13
+ var provider_1 = require("./signaling/provider");
14
+ Object.defineProperty(exports, "createWebSocketSignalingProvider", { enumerable: true, get: function () { return provider_1.createWebSocketSignalingProvider; } });
15
+ Object.defineProperty(exports, "WebSocketSignalingProvider", { enumerable: true, get: function () { return provider_1.WebSocketSignalingProvider; } });
16
+ var engine_1 = require("./sync/engine");
17
+ Object.defineProperty(exports, "createP2PSyncEngine", { enumerable: true, get: function () { return engine_1.createP2PSyncEngine; } });
18
+ var constants_2 = require("./sync/constants");
19
+ Object.defineProperty(exports, "DEFAULT_SYNC_STRATEGY", { enumerable: true, get: function () { return constants_2.DEFAULT_SYNC_STRATEGY; } });
20
+ Object.defineProperty(exports, "SYNC_NAMESPACE", { enumerable: true, get: function () { return constants_2.SYNC_NAMESPACE; } });
21
+ Object.defineProperty(exports, "SYNC_STRATEGY", { enumerable: true, get: function () { return constants_2.SYNC_STRATEGY; } });
22
+ Object.defineProperty(exports, "SYNC_VERSION", { enumerable: true, get: function () { return constants_2.SYNC_VERSION; } });
@@ -0,0 +1,34 @@
1
+ import { WebRtcConfiguration, WebRtcEvents, WebRtcHeartbeatConfig, WebRtcReconnectConfig, WebRtcPeerManager, WebRtcSignalEmitter } from './types';
2
+ interface PeerConnectionManagerOptions {
3
+ signalEmitter: WebRtcSignalEmitter;
4
+ events?: WebRtcEvents;
5
+ rtcConfig?: WebRtcConfiguration;
6
+ heartbeat?: WebRtcHeartbeatConfig;
7
+ reconnect?: WebRtcReconnectConfig;
8
+ }
9
+ export declare class PeerConnectionManager implements WebRtcPeerManager {
10
+ private readonly signalEmitter;
11
+ private readonly events;
12
+ private readonly rtcConfig;
13
+ private readonly peers;
14
+ private readonly heartbeatConfig;
15
+ private readonly reconnectConfig;
16
+ constructor(options: PeerConnectionManagerOptions);
17
+ createOffer(peerId: string): Promise<void>;
18
+ handleRemoteOffer(peerId: string, payload: unknown): Promise<void>;
19
+ handleRemoteAnswer(peerId: string, payload: unknown): Promise<void>;
20
+ handleRemoteIce(peerId: string, payload: unknown): Promise<void>;
21
+ sendData(peerId: string, message: string): void;
22
+ closePeer(peerId: string): void;
23
+ closeAll(): void;
24
+ private getOrCreatePeerContext;
25
+ private attachDataChannel;
26
+ private startHeartbeat;
27
+ private stopHeartbeat;
28
+ private handleIceStateChange;
29
+ private scheduleReconnect;
30
+ private stopReconnect;
31
+ private handleHeartbeatMessage;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=PeerConnectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeerConnectionManager.d.ts","sourceRoot":"","sources":["../../src/rtc/PeerConnectionManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAGH,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACtB,MAAM,SAAS,CAAC;AA2BjB,UAAU,4BAA4B;IAClC,aAAa,EAAE,mBAAmB,CAAC;IACnC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAED,qBAAa,qBAAsB,YAAW,iBAAiB;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkC;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;gBAEtD,OAAO,EAAE,4BAA4B;IAQ3C,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1C,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAelE,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAa/C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgB/B,QAAQ,IAAI,IAAI;IAKhB,OAAO,CAAC,sBAAsB;IAiD9B,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,sBAAsB;CAgBjC"}