{"_id":"@adeeliore/p2p-core","name":"@adeeliore/p2p-core","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@adeeliore/p2p-core","description":"Reusable P2P session runtime for React Native apps built on WebSocket signaling and WebRTC DataChannels.","version":"0.1.0","license":"0BSD","private":false,"main":"./dist/index.js","react-native":"./dist/index.js","types":"./dist/index.d.ts","sideEffects":false,"exports":{".":{"types":"./dist/index.d.ts","react-native":"./dist/index.js","default":"./dist/index.js"}},"keywords":["p2p","webrtc","react-native","signaling","datachannel","collaboration"],"scripts":{"build":"node ../../node_modules/typescript/lib/tsc.js -p tsconfig.build.json","typecheck":"node ../../node_modules/typescript/lib/tsc.js -p tsconfig.json --noEmit","test":"npm run build && node --test tests/**/*.test.cjs","prepublishOnly":"npm run build"},"publishConfig":{"access":"public"},"peerDependencies":{"react-native":"*","react-native-webrtc":"^124.0.7"},"gitHead":"74318bed01a4f6b791c068c385586f072cfb9a4a","_id":"@adeeliore/p2p-core@0.1.0","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-tOuA+RwBWZU43hRVXchNalxpq3gZj2W62JnS4Hf0jSK4wWhNv8K8bQYCTkm5VC+ZagB6gy99+8U7CWrf+28MWg==","shasum":"be11e71c0ba844d91ba82c9caac90635e3cb76e0","tarball":"https://registry.npmjs.org/@adeeliore/p2p-core/-/p2p-core-0.1.0.tgz","fileCount":83,"unpackedSize":119736,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE9Peseao2+YFpNky9eNfcC60cuVU7vJ7/qjQXWz8xGIAiBkNt96Ph0n/ISIK56KDhvUpAPcALiSoLs8kDFa8HN+AA=="}]},"_npmUser":{"name":"adeeliore","email":"adelyaflaffy@gmail.com"},"directories":{},"maintainers":[{"name":"adeeliore","email":"adelyaflaffy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/p2p-core_0.1.0_1780778421773_0.3458428009153771"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-06T20:40:21.647Z","0.1.0":"2026-06-06T20:40:21.921Z","modified":"2026-06-06T20:40:22.142Z"},"maintainers":[{"name":"adeeliore","email":"adelyaflaffy@gmail.com"}],"description":"Reusable P2P session runtime for React Native apps built on WebSocket signaling and WebRTC DataChannels.","keywords":["p2p","webrtc","react-native","signaling","datachannel","collaboration"],"license":"0BSD","readme":"# `@adeeliore/p2p-core`\n\nReusable P2P session runtime for React Native collaborative apps.\n\nThis package gives you a focused application runtime for:\n\n- signaling connection management;\n- WebRTC peer lifecycle;\n- DataChannel messaging;\n- reconnect and heartbeat behavior;\n- domain-level synchronization through a sync engine.\n\nIt does not own your product protocol or state model. You keep control over:\n\n- payload format;\n- board, poll, chat or document state;\n- snapshot strategy;\n- QR or room-discovery flows;\n- UI and platform-specific setup.\n\n## Installation\n\n```bash\nnpm install @adeeliore/p2p-core react-native-webrtc\n```\n\n## Primary Use Case\n\nUse `@adeeliore/p2p-core` when your app needs:\n\n- a room/session abstraction above WebRTC;\n- signaling over WebSocket or a custom provider;\n- peer events exposed as a clean API;\n- a reusable sync mechanism for multiple app domains.\n\n## Quick Start\n\n```ts\nimport { createP2PSession } from '@adeeliore/p2p-core';\n\nconst session = createP2PSession({\n  signalBaseUrl: 'wss://example.com',\n  sessionId: 'ROOM-1234',\n  clientId: 'teacher',\n  accessToken: 'shared-secret',\n  autoCreateOffers: true,\n});\n\nsession.on('welcome', ({ clientId, peers }) => {\n  console.log('local peer', clientId);\n  console.log('existing peers', peers);\n});\n\nsession.on('peerDataOpen', ({ peerId }) => {\n  console.log('ready for P2P messages', peerId);\n});\n\nsession.on('peerMessage', ({ peerId, message }) => {\n  console.log('message from', peerId, JSON.parse(message));\n});\n\nsession.connect();\n```\n\n## Sending App Messages\n\n`p2p-core` transports strings. Most apps serialize JSON and keep protocol ownership in application code.\n\n```ts\nsession.broadcast(JSON.stringify({\n  type: 'cursor',\n  payload: { x: 120, y: 48 },\n}));\n\nsession.sendTo('peer-a', JSON.stringify({\n  type: 'presence',\n  payload: { state: 'ready' },\n}));\n```\n\n## Using The Sync Engine\n\nThe sync engine is the package-level mechanism for domain synchronization.\n\n```ts\nimport { createP2PSession, createP2PSyncEngine } from '@adeeliore/p2p-core';\n\nconst session = createP2PSession({\n  signalBaseUrl: 'wss://example.com',\n  sessionId: 'ROOM-1234',\n});\n\nconst sync = createP2PSyncEngine(session);\n\nsync.registerDomain({\n  domain: 'board',\n  strategy: 'snapshot-and-live',\n  getSnapshot: () => boardStore.exportSnapshot(),\n  applySnapshot: (snapshot) => boardStore.importSnapshot(snapshot),\n  applyEvent: (event) => boardStore.applyRemoteEvent(event),\n});\n\nsession.connect();\n\nsync.sendEvent('board', {\n  type: 'drawPath',\n  payload: { points: [10, 12, 15, 20] },\n});\n```\n\nBuilt-in strategies:\n\n- `events`\n- `pull-on-connect`\n- `push-to-new-peer`\n- `snapshot-and-live`\n\n## Using A Custom Signaling Provider\n\nIf you do not want the built-in WebSocket provider, pass your own `signalingProvider`.\n\n```ts\nimport { createP2PSession } from '@adeeliore/p2p-core';\n\nconst session = createP2PSession({\n  sessionId: 'ROOM-1234',\n  signalingProvider: myCustomProvider,\n});\n```\n\nThis is how `@adeeliore/p2p-lan-signaling` plugs into the same runtime.\n\n## Consumer API\n\nMost consumers only need:\n\n- `createP2PSession`\n- `createP2PSyncEngine`\n- `session.connect()`\n- `session.disconnect()`\n- `session.on(...)`\n- `session.sendTo(...)`\n- `session.broadcast(...)`\n\n## Error Model\n\nRuntime error payloads include stable error codes.\n\nExamples:\n\n- `ERR_SIGNALING_CONFIGURATION_REQUIRED`\n- `ERR_SIGNALING_PROVIDER_ERROR`\n- `ERR_SIGNALING_CONNECT_FAILED`\n- `ERR_SIGNALING_NOT_CONNECTED`\n- `ERR_PEER_MANAGER_UNAVAILABLE`\n- `ERR_TRANSPORT_SEND_FAILED`\n- `ERR_RELAY_SEND_FAILED`\n- `ERR_PROTOCOL_INVALID_MESSAGE`\n\n## Documentation\n\n- usage-oriented API reference: [API_REFERENCE.md](/Users/whoami/diplom-p2p/DrawingApp/packages/p2p-core/API_REFERENCE.md)\n- changelog: [CHANGELOG.md](/Users/whoami/diplom-p2p/DrawingApp/packages/p2p-core/CHANGELOG.md)\n- example: [examples/basic-session.ts](/Users/whoami/diplom-p2p/DrawingApp/packages/p2p-core/examples/basic-session.ts)\n","readmeFilename":"README.md","_rev":"1-723bc45822816fbedb56db73fd60568f"}