nips/100.md
2023-03-13 19:58:18 -04:00

1.5 KiB

NIP-100

WebRTC

draft optional author:jacany

This NIP defines how to do WebRTC communication over nostr

Broadcasting that you are present

Announces that you are here, and ready to connect to others. The connection ID is inferred from the provided pubkey.

{
    "kind": 25050,
    "pubkey": "<sender pubkey>",
    "tags": [
        ["type", "connect"]
    ]
}

Closing

{
    "kind": 25050,
    "pubkey": "<sender pubkey>",
    "tags": [
        ["type", "disconnect"]
    ]
}

Offering to connect

Used when responding to a type:connect. Offering to connect to that peer.

{
    "kind": 25050,
    "pubkey": "<sender pubkey>",
    "tags": [
        ["type", "offer"],
        ["p", "<reciever pubkey>"]
    ],
    "content": {
        "offer": "<offer>",
        "type": "offer"
    }
}

Answering an Offer

{
    "kind": 25050,
    "pubkey": "<sender pubkey>",
    "tags": [
        ["type", "answer"],
        ["p", "<reciever pubkey>"]
    ],
    "content": {
        "sdp": "<sdp>",
        "type": "answer"
    }
}

Broadcasting ICE Candidate

{
    "kind": 25050,
    "pubkey": "<sender pubkey>",
    "tags": [
        ["type", "answer"],
        ["p", "<reciever pubkey>"]
    ],
    "content": {
        "candidate": "<sdp>",
        <misc>
    }
}

Essentially, just directly feed what comes out of the WebRTC functions straight into the content field. It makes things cleaner and easier.