diff --git a/README.md b/README.md index 61ed19378..a04481162 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,13 @@ A. The message occurs when you use PeerJS with Webpack. It is not critical! It r ### [Documentation / API Reference](https://peerjs.com/docs/) + +### How does `peerjs` work? + +Check out this interactive walkthrough of the `peerjs` codebase on CodeCanvas [here](https://www.code-canvas.com/?session=unauthenticatedGithub&repo=peerjs&owner=peers&branch=master&OnboardingTutorial=true). + +image + ### [PeerServer](https://github.com/peers/peerjs-server) ### [Discuss PeerJS on our Telegram Channel](https://t.me/joinchat/ENhPuhTvhm8WlIxTjQf7Og) diff --git a/peerjs.CodeCanvas b/peerjs.CodeCanvas new file mode 100644 index 000000000..0bc2a3a2c --- /dev/null +++ b/peerjs.CodeCanvas @@ -0,0 +1,4167 @@ +{ + "drawioXML": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "fileName": "", + "fileURL": "github", + "repoData": { + "README.md": { + "path": "README.md", + "fileName": "README.md", + "cellName": "README.md", + "cellId": "b2cba3d3-e883-465c-8da6-ad3b01c62556", + "visible": true, + "children": [ + "README.md-simstep-a8004b5e-435a-4587-aeaa-dbf02b941b81", + "README.md-simstep-d570094d-8b39-4499-9ed6-b2c744ba0f5c" + ] + }, + "e2e": { + "path": "e2e", + "fileName": "e2e", + "cellName": "e2e", + "cellId": "a5d4968e-4523-4206-a553-b439e7be24a6", + "visible": true, + "children": [ + "e2e/mediachannel", + "e2e/datachannel" + ] + }, + "e2e/datachannel": { + "path": "e2e/datachannel", + "fileName": "datachannel", + "cellName": "datachannel", + "cellId": "7c06b1f9-bb23-4bb4-a08c-1e54b9b7a70b", + "visible": true, + "parentCellId": "a5d4968e-4523-4206-a553-b439e7be24a6", + "children": [ + "e2e/datachannel/serialization.js" + ] + }, + "e2e/datachannel/serialization.js": { + "path": "e2e/datachannel/serialization.js", + "fileName": "serialization.js", + "cellName": "serialization.js", + "cellId": "80400362-ec89-4a48-a9a7-b5d0f018176a", + "visible": true, + "parentCellId": "7c06b1f9-bb23-4bb4-a08c-1e54b9b7a70b", + "children": [ + "e2e/datachannel/serialization.js-simstep-fcb183cd-4bf9-4dde-8c95-7391e6836621", + "e2e/datachannel/serialization.js-simstep-06375578-5510-4e36-80f8-c87ce62297ae", + "e2e/datachannel/serialization.js-simstep-83f72513-88ed-4e5e-bce1-c01d1603d126" + ] + }, + "e2e/mediachannel": { + "path": "e2e/mediachannel", + "fileName": "mediachannel", + "cellName": "mediachannel", + "cellId": "188ed55a-17a9-440f-91d0-ac769db1b962", + "visible": true, + "parentCellId": "a5d4968e-4523-4206-a553-b439e7be24a6", + "children": [ + "e2e/mediachannel/close.js" + ] + }, + "e2e/mediachannel/close.js": { + "path": "e2e/mediachannel/close.js", + "fileName": "close.js", + "cellName": "close.js", + "cellId": "18984d8a-6baf-4849-8656-9cbf51bd3aa9", + "visible": true, + "parentCellId": "188ed55a-17a9-440f-91d0-ac769db1b962", + "children": [ + "e2e/mediachannel/close.js-simstep-cdacdbb4-b68d-4506-a1cf-3720702545bf", + "e2e/mediachannel/close.js-simstep-23a1a037-1f55-435a-b87f-627bed609c7e" + ] + }, + "lib": { + "path": "lib", + "fileName": "lib", + "cellName": "lib", + "cellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "visible": true, + "children": [ + "lib/peer.ts", + "lib/mediaconnection.ts", + "lib/negotiator.ts", + "lib/dataconnection", + "lib/socket.ts", + "lib/api.ts" + ] + }, + "lib/api.ts": { + "path": "lib/api.ts", + "fileName": "api.ts", + "cellName": "api.ts", + "cellId": "cd27f567-65b0-4ca2-b2d9-6b63840bc2ff", + "visible": true, + "parentCellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "children": [ + "lib/api.ts-simstep-db4a41e5-8ca8-46ae-916d-f4efb534bc25", + "lib/api.ts-simstep-504a2bba-0b24-403d-8cb0-fcd0af784d68" + ] + }, + "lib/dataconnection": { + "path": "lib/dataconnection", + "fileName": "dataconnection", + "cellName": "dataconnection", + "cellId": "268e02b5-a515-43d7-977d-9101b52c9e5b", + "visible": true, + "parentCellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "children": [ + "lib/dataconnection/DataConnection.ts", + "lib/dataconnection/BufferedConnection" + ] + }, + "lib/dataconnection/BufferedConnection": { + "path": "lib/dataconnection/BufferedConnection", + "fileName": "BufferedConnection", + "cellName": "BufferedConnection", + "cellId": "4994666f-426c-4274-b8ae-30fb15007f9f", + "visible": true, + "parentCellId": "268e02b5-a515-43d7-977d-9101b52c9e5b", + "children": [ + "lib/dataconnection/BufferedConnection/BufferedConnection.ts", + "lib/dataconnection/BufferedConnection/BinaryPack.ts", + "lib/dataconnection/BufferedConnection/Raw.ts" + ] + }, + "lib/dataconnection/BufferedConnection/BinaryPack.ts": { + "path": "lib/dataconnection/BufferedConnection/BinaryPack.ts", + "fileName": "BinaryPack.ts", + "cellName": "BinaryPack.ts", + "cellId": "dd0ed623-c1ab-4a65-8d8d-de683ae30b1e", + "visible": true, + "parentCellId": "4994666f-426c-4274-b8ae-30fb15007f9f", + "children": [ + "lib/dataconnection/BufferedConnection/BinaryPack.ts-simstep-01a86c94-f6fd-4bd3-825e-e71a8f087a4f", + "lib/dataconnection/BufferedConnection/BinaryPack.ts-simstep-794e5bce-e3f9-4256-945b-29cf293974d9", + "lib/dataconnection/BufferedConnection/BinaryPack.ts-simstep-5fd74bed-45a6-4a9b-831d-8d35aa789894" + ] + }, + "lib/dataconnection/BufferedConnection/BufferedConnection.ts": { + "path": "lib/dataconnection/BufferedConnection/BufferedConnection.ts", + "fileName": "BufferedConnection.ts", + "cellName": "BufferedConnection.ts", + "cellId": "a3c3c61a-29a8-46fe-b8ba-e68e555ec783", + "visible": true, + "parentCellId": "4994666f-426c-4274-b8ae-30fb15007f9f" + }, + "lib/dataconnection/BufferedConnection/Raw.ts": { + "path": "lib/dataconnection/BufferedConnection/Raw.ts", + "fileName": "Raw.ts", + "cellName": "Raw.ts", + "cellId": "c1dc8119-9517-48a6-91a6-cd926627e6fa", + "visible": true, + "parentCellId": "4994666f-426c-4274-b8ae-30fb15007f9f" + }, + "lib/dataconnection/DataConnection.ts": { + "path": "lib/dataconnection/DataConnection.ts", + "fileName": "DataConnection.ts", + "cellName": "DataConnection.ts", + "cellId": "23fed91f-ca9f-4528-93b9-dc99dbd24696", + "visible": true, + "parentCellId": "268e02b5-a515-43d7-977d-9101b52c9e5b", + "children": [ + "lib/dataconnection/DataConnection.ts-simstep-75e27aba-0219-4a66-8a2e-a2d06f30d951", + "lib/dataconnection/DataConnection.ts-simstep-199f5dba-c084-49d0-91ad-f04c887efdd9" + ] + }, + "lib/mediaconnection.ts": { + "path": "lib/mediaconnection.ts", + "fileName": "mediaconnection.ts", + "cellName": "mediaconnection.ts", + "cellId": "7951fe72-44e4-4be6-bb55-5a86978ed988", + "visible": true, + "parentCellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "children": [ + "lib/mediaconnection.ts-simstep-4b5be2c5-8bc4-4bc8-8992-4cfb58c3a63e", + "lib/mediaconnection.ts-simstep-892c2693-2db2-4241-9197-77922f03eff4" + ] + }, + "lib/negotiator.ts": { + "path": "lib/negotiator.ts", + "fileName": "negotiator.ts", + "cellName": "negotiator.ts", + "cellId": "b3bb7d9e-aeba-4e38-9f51-15f79bab31e5", + "visible": true, + "parentCellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "children": [ + "lib/negotiator.ts-simstep-d5738a3f-bc47-4ff7-a537-300764973e03", + "lib/negotiator.ts-simstep-8670a7e4-eff3-473f-9612-ef328428917e", + "lib/negotiator.ts-simstep-9595ab82-b36f-4297-a690-8348396c93ae" + ] + }, + "lib/peer.ts": { + "path": "lib/peer.ts", + "fileName": "peer.ts", + "cellName": "peer.ts", + "cellId": "5b38b322-b837-4492-aed7-db33427d3e54", + "visible": true, + "parentCellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "children": [ + "lib/peer.ts-simstep-0e274d86-51de-45fb-bd33-57fdd3b27f4c", + "lib/peer.ts-simstep-5eb34ba5-69d1-4d5b-9093-d27b1321cf9b", + "lib/peer.ts-simstep-c9533991-8150-49b9-9fc6-b1c968170f85", + "lib/peer.ts-simstep-ae4beac2-12cc-4a81-8f8b-9d45034225a2", + "lib/peer.ts-simstep-1fd658f9-72ff-4031-92f4-aa1b424eb44a", + "lib/peer.ts-simstep-084416b5-0ac8-4020-bb42-1fdce415aca7", + "lib/peer.ts-simstep-3ada1d79-9b1e-475b-b574-3b56ee29a368", + "lib/peer.ts-simstep-d1e1e4ae-236c-459c-95d5-a2bc97983cc9", + "lib/peer.ts-simstep-7eb36b5d-391b-4d6c-a8de-8da0097dec8f", + "lib/peer.ts-simstep-9cf58b7e-f3d7-4141-89a3-061e1ab52573", + "lib/peer.ts-simstep-aebef84f-0a5a-459c-b68b-6be8cd4d78e8", + "lib/peer.ts-simstep-3a52047f-7af1-4f85-a758-28dc6300c77e", + "lib/peer.ts-simstep-f17a79f6-282e-4690-a4b8-8a1a18cc3c7b", + "lib/peer.ts-simstep-7320147a-bbaa-4778-9698-3d2f4ba40791", + "lib/peer.ts-simstep-88626ea8-f46c-456c-81d7-69fa943ce099", + "lib/peer.ts-simstep-77523bb5-33a0-4cff-8fd2-0657cb0b5493", + "lib/peer.ts-simstep-87023e77-ac4b-4fa5-ae8f-a55bb65ca30f", + "lib/peer.ts-simstep-092c04f2-b591-4319-96f2-a74b7b9ec3b5", + "lib/peer.ts-simstep-41b8107e-528d-4395-8644-3d5baecebc52", + "lib/peer.ts-simstep-9a47ab98-7cd0-4331-990d-a75c95a524ca", + "lib/peer.ts-simstep-494d5251-244d-472f-a0f4-bbec417fdcaa", + "lib/peer.ts-simstep-1894c731-51ed-45d2-b6c5-c7dcb031929a", + "lib/peer.ts-simstep-c12f5630-4b94-4332-8ea8-c27485f1ca74", + "lib/peer.ts-simstep-6433b525-d8ab-4cf3-9a12-12ea093de979", + "lib/peer.ts-simstep-f8ad231f-bb2c-4308-8678-95244528ee3a" + ] + }, + "lib/socket.ts": { + "path": "lib/socket.ts", + "fileName": "socket.ts", + "cellName": "socket.ts", + "cellId": "9683ebba-b589-442c-832d-970d4a1ad143", + "visible": true, + "parentCellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "children": [ + "lib/socket.ts-simstep-489e003d-1712-4c03-8a30-b588ceec50da", + "lib/socket.ts-simstep-3db106d7-06a8-4398-9ccd-6e6de77d8ef6" + ] + }, + "40f371e2-c7eb-4d4b-9b06-46758b6ce41d": { + "path": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "fileName": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "cellName": "lib", + "cellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d", + "visible": true + }, + "a5d4968e-4523-4206-a553-b439e7be24a6": { + "path": "a5d4968e-4523-4206-a553-b439e7be24a6", + "fileName": "a5d4968e-4523-4206-a553-b439e7be24a6", + "cellName": "e2e", + "cellId": "a5d4968e-4523-4206-a553-b439e7be24a6", + "visible": true + }, + "5b38b322-b837-4492-aed7-db33427d3e54": { + "path": "5b38b322-b837-4492-aed7-db33427d3e54", + "fileName": "5b38b322-b837-4492-aed7-db33427d3e54", + "cellName": "peer.ts", + "cellId": "5b38b322-b837-4492-aed7-db33427d3e54", + "visible": true, + "parentCellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d" + }, + "7951fe72-44e4-4be6-bb55-5a86978ed988": { + "path": "7951fe72-44e4-4be6-bb55-5a86978ed988", + "fileName": "7951fe72-44e4-4be6-bb55-5a86978ed988", + "cellName": "mediaconnection.ts", + "cellId": "7951fe72-44e4-4be6-bb55-5a86978ed988", + "visible": true, + "parentCellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d" + }, + "b3bb7d9e-aeba-4e38-9f51-15f79bab31e5": { + "path": "b3bb7d9e-aeba-4e38-9f51-15f79bab31e5", + "fileName": "b3bb7d9e-aeba-4e38-9f51-15f79bab31e5", + "cellName": "negotiator.ts", + "cellId": "b3bb7d9e-aeba-4e38-9f51-15f79bab31e5", + "visible": true, + "parentCellId": "40f371e2-c7eb-4d4b-9b06-46758b6ce41d" + }, + "188ed55a-17a9-440f-91d0-ac769db1b962": { + "path": "188ed55a-17a9-440f-91d0-ac769db1b962", + "fileName": "188ed55a-17a9-440f-91d0-ac769db1b962", + "cellName": "mediachannel", + "cellId": "188ed55a-17a9-440f-91d0-ac769db1b962", + "visible": true, + "parentCellId": "a5d4968e-4523-4206-a553-b439e7be24a6" + }, + "18984d8a-6baf-4849-8656-9cbf51bd3aa9": { + "path": "18984d8a-6baf-4849-8656-9cbf51bd3aa9", + "fileName": "18984d8a-6baf-4849-8656-9cbf51bd3aa9", + "cellName": "close.js", + "cellId": "18984d8a-6baf-4849-8656-9cbf51bd3aa9", + "visible": true, + "parentCellId": "188ed55a-17a9-440f-91d0-ac769db1b962" + }, + "a96da84f-1e8f-499b-a900-284ac4fbef34": { + "path": "a96da84f-1e8f-499b-a900-284ac4fbef34", + "fileName": "a96da84f-1e8f-499b-a900-284ac4fbef34", + "cellName": "Caller: Initiate Media Call - peer.ts:L547-551", + "cellId": "a96da84f-1e8f-499b-a900-284ac4fbef34", + "visible": true, + "parentCellId": "5b38b322-b837-4492-aed7-db33427d3e54" + }, + "lib/peer.ts-simstep-0e274d86-51de-45fb-bd33-57fdd3b27f4c": { + "path": "lib/peer.ts-simstep-0e274d86-51de-45fb-bd33-57fdd3b27f4c", + "fileName": "peer.ts", + "wiki": "The caller's application invokes `peer.call()`, providing the ID of the peer to call and the local `MediaStream` to be sent. This creates a `MediaConnection` object and starts the connection process.", + "cellName": "Caller: Initiate Media Call - peer.ts:L547-551", + "cellId": "a96da84f-1e8f-499b-a900-284ac4fbef34", + "visible": true, + "startLine": 547, + "endLine": 551, + "parentCellId": "5b38b322-b837-4492-aed7-db33427d3e54", + "parentPath": "lib/peer.ts" + }, + "ce531e76-0bff-49ae-bb4b-2edd8b620d00": { + "path": "ce531e76-0bff-49ae-bb4b-2edd8b620d00", + "fileName": "ce531e76-0bff-49ae-bb4b-2edd8b620d00", + "cellName": "Caller: MediaConnection Initialization - mediaconnection.ts:L56-64", + "cellId": "ce531e76-0bff-49ae-bb4b-2edd8b620d00", + "visible": true, + "parentCellId": "7951fe72-44e4-4be6-bb55-5a86978ed988" + }, + "lib/mediaconnection.ts-simstep-4b5be2c5-8bc4-4bc8-8992-4cfb58c3a63e": { + "path": "lib/mediaconnection.ts-simstep-4b5be2c5-8bc4-4bc8-8992-4cfb58c3a63e", + "fileName": "mediaconnection.ts", + "wiki": "The `MediaConnection` constructor runs. It sets up the connection properties, including a unique `connectionId`, and initializes a `Negotiator` instance to handle the underlying WebRTC signaling.", + "cellName": "Caller: MediaConnection Initialization - mediaconnection.ts:L56-64", + "cellId": "ce531e76-0bff-49ae-bb4b-2edd8b620d00", + "visible": true, + "startLine": 56, + "endLine": 64, + "parentCellId": "7951fe72-44e4-4be6-bb55-5a86978ed988", + "parentPath": "lib/mediaconnection.ts" + }, + "ae99d4bb-3dd5-4ed1-8336-77ff7adb1e41": { + "path": "ae99d4bb-3dd5-4ed1-8336-77ff7adb1e41", + "fileName": "ae99d4bb-3dd5-4ed1-8336-77ff7adb1e41", + "cellName": "Receiver: Peer Handles Incoming Call - peer.ts:L396-405", + "cellId": "ae99d4bb-3dd5-4ed1-8336-77ff7adb1e41", + "visible": true, + "parentCellId": "5b38b322-b837-4492-aed7-db33427d3e54" + }, + "lib/peer.ts-simstep-5eb34ba5-69d1-4d5b-9093-d27b1321cf9b": { + "path": "lib/peer.ts-simstep-5eb34ba5-69d1-4d5b-9093-d27b1321cf9b", + "fileName": "peer.ts", + "wiki": "The receiver's `Peer` instance receives the `OFFER` message from the signaling server. It creates a new `MediaConnection` object to represent the incoming call and then emits a `call` event to notify the application.", + "cellName": "Receiver: Peer Handles Incoming Call - peer.ts:L396-405", + "cellId": "ae99d4bb-3dd5-4ed1-8336-77ff7adb1e41", + "visible": true, + "startLine": 396, + "endLine": 405, + "parentCellId": "5b38b322-b837-4492-aed7-db33427d3e54", + "parentPath": "lib/peer.ts" + }, + "4ff88491-3e0e-4cab-947a-39bbeca56385": { + "path": "4ff88491-3e0e-4cab-947a-39bbeca56385", + "fileName": "4ff88491-3e0e-4cab-947a-39bbeca56385", + "cellName": "Receiver: Application Receives 'call' Event - close.js:L29-46", + "cellId": "4ff88491-3e0e-4cab-947a-39bbeca56385", + "visible": true, + "parentCellId": "18984d8a-6baf-4849-8656-9cbf51bd3aa9" + }, + "e2e/mediachannel/close.js-simstep-cdacdbb4-b68d-4506-a1cf-3720702545bf": { + "path": "e2e/mediachannel/close.js-simstep-cdacdbb4-b68d-4506-a1cf-3720702545bf", + "fileName": "close.js", + "wiki": "The receiver's application code, which has a listener set up with `peer.on('call', ...)`, is executed. The application now has access to the `MediaConnection` object and can decide to answer the call.", + "cellName": "Receiver: Application Receives 'call' Event - close.js:L29-46", + "cellId": "4ff88491-3e0e-4cab-947a-39bbeca56385", + "visible": true, + "startLine": 29, + "endLine": 46, + "parentCellId": "18984d8a-6baf-4849-8656-9cbf51bd3aa9", + "parentPath": "e2e/mediachannel/close.js" + }, + "b33fd210-96ef-4739-8779-edcd271f78f5": { + "path": "b33fd210-96ef-4739-8779-edcd271f78f5", + "fileName": "b33fd210-96ef-4739-8779-edcd271f78f5", + "cellName": "Receiver: MediaConnection Processes Answer - mediaconnection.ts:L124-137", + "cellId": "b33fd210-96ef-4739-8779-edcd271f78f5", + "visible": true, + "parentCellId": "7951fe72-44e4-4be6-bb55-5a86978ed988" + }, + "lib/mediaconnection.ts-simstep-892c2693-2db2-4241-9197-77922f03eff4": { + "path": "lib/mediaconnection.ts-simstep-892c2693-2db2-4241-9197-77922f03eff4", + "fileName": "mediaconnection.ts", + "wiki": "The `MediaConnection.answer()` method is executed. It stores the provided local stream and prepares the `Negotiator` to create and send an SDP answer back to the caller.", + "cellName": "Receiver: MediaConnection Processes Answer - mediaconnection.ts:L124-137", + "cellId": "b33fd210-96ef-4739-8779-edcd271f78f5", + "visible": true, + "startLine": 124, + "endLine": 137, + "parentCellId": "7951fe72-44e4-4be6-bb55-5a86978ed988", + "parentPath": "lib/mediaconnection.ts" + }, + "eaa767f7-c086-499a-997b-78a80d9c6972": { + "path": "eaa767f7-c086-499a-997b-78a80d9c6972", + "fileName": "eaa767f7-c086-499a-997b-78a80d9c6972", + "cellName": "Both Peers: Remote Stream Received - negotiator.ts:L146-159", + "cellId": "eaa767f7-c086-499a-997b-78a80d9c6972", + "visible": true, + "parentCellId": "b3bb7d9e-aeba-4e38-9f51-15f79bab31e5" + }, + "lib/negotiator.ts-simstep-d5738a3f-bc47-4ff7-a537-300764973e03": { + "path": "lib/negotiator.ts-simstep-d5738a3f-bc47-4ff7-a537-300764973e03", + "fileName": "negotiator.ts", + "wiki": "After the offer/answer exchange is complete, a direct P2P connection is established. When media packets start flowing, the `ontrack` event is fired on the `RTCPeerConnection`. The `Negotiator` listens for this event to capture the remote media stream.", + "cellName": "Both Peers: Remote Stream Received - negotiator.ts:L146-159", + "cellId": "eaa767f7-c086-499a-997b-78a80d9c6972", + "visible": true, + "startLine": 146, + "endLine": 159, + "parentCellId": "b3bb7d9e-aeba-4e38-9f51-15f79bab31e5", + "parentPath": "lib/negotiator.ts" + }, + "ed9c7fc6-fdf0-47b3-af2e-d936d08007da": { + "path": "ed9c7fc6-fdf0-47b3-af2e-d936d08007da", + "fileName": "ed9c7fc6-fdf0-47b3-af2e-d936d08007da", + "cellName": "Both Peers: MediaConnection Emits 'stream' Event - negotiator.ts:L360-367", + "cellId": "ed9c7fc6-fdf0-47b3-af2e-d936d08007da", + "visible": true, + "parentCellId": "b3bb7d9e-aeba-4e38-9f51-15f79bab31e5" + }, + "lib/negotiator.ts-simstep-8670a7e4-eff3-473f-9612-ef328428917e": { + "path": "lib/negotiator.ts-simstep-8670a7e4-eff3-473f-9612-ef328428917e", + "fileName": "negotiator.ts", + "wiki": "The `mediaConnection.addStream()` method is called, which sets the remote stream property on the connection object and emits the `stream` event, passing the remote `MediaStream` to the application.", + "cellName": "Both Peers: MediaConnection Emits 'stream' Event - negotiator.ts:L360-367", + "cellId": "ed9c7fc6-fdf0-47b3-af2e-d936d08007da", + "visible": true, + "startLine": 360, + "endLine": 367, + "parentCellId": "b3bb7d9e-aeba-4e38-9f51-15f79bab31e5", + "parentPath": "lib/negotiator.ts" + }, + "2970dc45-6bdd-405e-ba6d-d4fd7e160633": { + "path": "2970dc45-6bdd-405e-ba6d-d4fd7e160633", + "fileName": "2970dc45-6bdd-405e-ba6d-d4fd7e160633", + "cellName": "Both Peers: Application Renders Remote Stream - close.js:L56-59", + "cellId": "2970dc45-6bdd-405e-ba6d-d4fd7e160633", + "visible": true, + "parentCellId": "18984d8a-6baf-4849-8656-9cbf51bd3aa9" + }, + "e2e/mediachannel/close.js-simstep-23a1a037-1f55-435a-b87f-627bed609c7e": { + "path": "e2e/mediachannel/close.js-simstep-23a1a037-1f55-435a-b87f-627bed609c7e", + "fileName": "close.js", + "wiki": "The application's `call.on('stream', ...)` listener is executed. The code attaches the received `remoteStream` to an HTML `