{"version":3,"file":"y-webrtc.cjs","sources":["../src/crypto.js","../src/y-webrtc.js"],"sourcesContent":["/* eslint-env browser */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as promise from 'lib0/promise'\nimport * as error from 'lib0/error'\nimport * as string from 'lib0/string'\n\n/**\n * @param {string} secret\n * @param {string} roomName\n * @return {PromiseLike<CryptoKey>}\n */\nexport const deriveKey = (secret, roomName) => {\n  const secretBuffer = string.encodeUtf8(secret).buffer\n  const salt = string.encodeUtf8(roomName).buffer\n  return crypto.subtle.importKey(\n    'raw',\n    secretBuffer,\n    'PBKDF2',\n    false,\n    ['deriveKey']\n  ).then(keyMaterial =>\n    crypto.subtle.deriveKey(\n      {\n        name: 'PBKDF2',\n        salt,\n        iterations: 100000,\n        hash: 'SHA-256'\n      },\n      keyMaterial,\n      {\n        name: 'AES-GCM',\n        length: 256\n      },\n      true,\n      ['encrypt', 'decrypt']\n    )\n  )\n}\n\n/**\n * @param {Uint8Array} data data to be encrypted\n * @param {CryptoKey?} key\n * @return {PromiseLike<Uint8Array>} encrypted, base64 encoded message\n */\nexport const encrypt = (data, key) => {\n  if (!key) {\n    return /** @type {PromiseLike<Uint8Array>} */ (promise.resolve(data))\n  }\n  const iv = crypto.getRandomValues(new Uint8Array(12))\n  return crypto.subtle.encrypt(\n    {\n      name: 'AES-GCM',\n      iv\n    },\n    key,\n    data\n  ).then(cipher => {\n    const encryptedDataEncoder = encoding.createEncoder()\n    encoding.writeVarString(encryptedDataEncoder, 'AES-GCM')\n    encoding.writeVarUint8Array(encryptedDataEncoder, iv)\n    encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher))\n    return encoding.toUint8Array(encryptedDataEncoder)\n  })\n}\n\n/**\n * @param {Object} data data to be encrypted\n * @param {CryptoKey?} key\n * @return {PromiseLike<Uint8Array>} encrypted data, if key is provided\n */\nexport const encryptJson = (data, key) => {\n  const dataEncoder = encoding.createEncoder()\n  encoding.writeAny(dataEncoder, data)\n  return encrypt(encoding.toUint8Array(dataEncoder), key)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {CryptoKey?} key\n * @return {PromiseLike<Uint8Array>} decrypted buffer\n */\nexport const decrypt = (data, key) => {\n  if (!key) {\n    return /** @type {PromiseLike<Uint8Array>} */ (promise.resolve(data))\n  }\n  const dataDecoder = decoding.createDecoder(data)\n  const algorithm = decoding.readVarString(dataDecoder)\n  if (algorithm !== 'AES-GCM') {\n    promise.reject(error.create('Unknown encryption algorithm'))\n  }\n  const iv = decoding.readVarUint8Array(dataDecoder)\n  const cipher = decoding.readVarUint8Array(dataDecoder)\n  return crypto.subtle.decrypt(\n    {\n      name: 'AES-GCM',\n      iv\n    },\n    key,\n    cipher\n  ).then(data => new Uint8Array(data))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {CryptoKey?} key\n * @return {PromiseLike<Object>} decrypted object\n */\nexport const decryptJson = (data, key) =>\n  decrypt(data, key).then(decryptedValue =>\n    decoding.readAny(decoding.createDecoder(new Uint8Array(decryptedValue)))\n  )\n","import * as ws from 'lib0/websocket'\nimport * as map from 'lib0/map'\nimport * as error from 'lib0/error'\nimport * as random from 'lib0/random'\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport { ObservableV2 } from 'lib0/observable'\nimport * as logging from 'lib0/logging'\nimport * as promise from 'lib0/promise'\nimport * as bc from 'lib0/broadcastchannel'\nimport * as buffer from 'lib0/buffer'\nimport * as math from 'lib0/math'\nimport { createMutex } from 'lib0/mutex'\n\nimport * as Y from 'yjs' // eslint-disable-line\nimport Peer from 'simple-peer/simplepeer.min.js'\n\nimport * as syncProtocol from 'y-protocols/sync'\nimport * as awarenessProtocol from 'y-protocols/awareness'\n\nimport * as cryptoutils from './crypto.js'\n\nconst log = logging.createModuleLogger('y-webrtc')\n\nconst messageSync = 0\nconst messageQueryAwareness = 3\nconst messageAwareness = 1\nconst messageBcPeerId = 4\n\n/**\n * @type {Map<string, SignalingConn>}\n */\nconst signalingConns = new Map()\n\n/**\n * @type {Map<string,Room>}\n */\nconst rooms = new Map()\n\n/**\n * @param {Room} room\n */\nconst checkIsSynced = room => {\n  let synced = true\n  room.webrtcConns.forEach(peer => {\n    if (!peer.synced) {\n      synced = false\n    }\n  })\n  if ((!synced && room.synced) || (synced && !room.synced)) {\n    room.synced = synced\n    room.provider.emit('synced', [{ synced }])\n    log('synced ', logging.BOLD, room.name, logging.UNBOLD, ' with all peers')\n  }\n}\n\n/**\n * @param {Room} room\n * @param {Uint8Array} buf\n * @param {function} syncedCallback\n * @return {encoding.Encoder?}\n */\nconst readMessage = (room, buf, syncedCallback) => {\n  const decoder = decoding.createDecoder(buf)\n  const encoder = encoding.createEncoder()\n  const messageType = decoding.readVarUint(decoder)\n  if (room === undefined) {\n    return null\n  }\n  const awareness = room.awareness\n  const doc = room.doc\n  let sendReply = false\n  switch (messageType) {\n    case messageSync: {\n      encoding.writeVarUint(encoder, messageSync)\n      const syncMessageType = syncProtocol.readSyncMessage(decoder, encoder, doc, room)\n      if (syncMessageType === syncProtocol.messageYjsSyncStep2 && !room.synced) {\n        syncedCallback()\n      }\n      if (syncMessageType === syncProtocol.messageYjsSyncStep1) {\n        sendReply = true\n      }\n      break\n    }\n    case messageQueryAwareness:\n      encoding.writeVarUint(encoder, messageAwareness)\n      encoding.writeVarUint8Array(encoder, awarenessProtocol.encodeAwarenessUpdate(awareness, Array.from(awareness.getStates().keys())))\n      sendReply = true\n      break\n    case messageAwareness:\n      awarenessProtocol.applyAwarenessUpdate(awareness, decoding.readVarUint8Array(decoder), room)\n      break\n    case messageBcPeerId: {\n      const add = decoding.readUint8(decoder) === 1\n      const peerName = decoding.readVarString(decoder)\n      if (peerName !== room.peerId && ((room.bcConns.has(peerName) && !add) || (!room.bcConns.has(peerName) && add))) {\n        const removed = []\n        const added = []\n        if (add) {\n          room.bcConns.add(peerName)\n          added.push(peerName)\n        } else {\n          room.bcConns.delete(peerName)\n          removed.push(peerName)\n        }\n        room.provider.emit('peers', [{\n          added,\n          removed,\n          webrtcPeers: Array.from(room.webrtcConns.keys()),\n          bcPeers: Array.from(room.bcConns)\n        }])\n        broadcastBcPeerId(room)\n      }\n      break\n    }\n    default:\n      console.error('Unable to compute message')\n      return encoder\n  }\n  if (!sendReply) {\n    // nothing has been written, no answer created\n    return null\n  }\n  return encoder\n}\n\n/**\n * @param {WebrtcConn} peerConn\n * @param {Uint8Array} buf\n * @return {encoding.Encoder?}\n */\nconst readPeerMessage = (peerConn, buf) => {\n  const room = peerConn.room\n  log('received message from ', logging.BOLD, peerConn.remotePeerId, logging.GREY, ' (', room.name, ')', logging.UNBOLD, logging.UNCOLOR)\n  return readMessage(room, buf, () => {\n    peerConn.synced = true\n    log('synced ', logging.BOLD, room.name, logging.UNBOLD, ' with ', logging.BOLD, peerConn.remotePeerId)\n    checkIsSynced(room)\n  })\n}\n\n/**\n * @param {WebrtcConn} webrtcConn\n * @param {encoding.Encoder} encoder\n */\nconst sendWebrtcConn = (webrtcConn, encoder) => {\n  log('send message to ', logging.BOLD, webrtcConn.remotePeerId, logging.UNBOLD, logging.GREY, ' (', webrtcConn.room.name, ')', logging.UNCOLOR)\n  try {\n    webrtcConn.peer.send(encoding.toUint8Array(encoder))\n  } catch (e) {}\n}\n\n/**\n * @param {Room} room\n * @param {Uint8Array} m\n */\nconst broadcastWebrtcConn = (room, m) => {\n  log('broadcast message in ', logging.BOLD, room.name, logging.UNBOLD)\n  room.webrtcConns.forEach(conn => {\n    try {\n      conn.peer.send(m)\n    } catch (e) {}\n  })\n}\n\nexport class WebrtcConn {\n  /**\n   * @param {SignalingConn} signalingConn\n   * @param {boolean} initiator\n   * @param {string} remotePeerId\n   * @param {Room} room\n   */\n  constructor (signalingConn, initiator, remotePeerId, room) {\n    log('establishing connection to ', logging.BOLD, remotePeerId)\n    this.room = room\n    this.remotePeerId = remotePeerId\n    this.glareToken = undefined\n    this.closed = false\n    this.connected = false\n    this.synced = false\n    /**\n     * @type {any}\n     */\n    this.peer = new Peer({ initiator, ...room.provider.peerOpts })\n    this.peer.on('signal', signal => {\n      if (this.glareToken === undefined) {\n        // add some randomness to the timestamp of the offer\n        this.glareToken = Date.now() + Math.random()\n      }\n      publishSignalingMessage(signalingConn, room, { to: remotePeerId, from: room.peerId, type: 'signal', token: this.glareToken, signal })\n    })\n    this.peer.on('connect', () => {\n      log('connected to ', logging.BOLD, remotePeerId)\n      this.connected = true\n      // send sync step 1\n      const provider = room.provider\n      const doc = provider.doc\n      const awareness = room.awareness\n      const encoder = encoding.createEncoder()\n      encoding.writeVarUint(encoder, messageSync)\n      syncProtocol.writeSyncStep1(encoder, doc)\n      sendWebrtcConn(this, encoder)\n      const awarenessStates = awareness.getStates()\n      if (awarenessStates.size > 0) {\n        const encoder = encoding.createEncoder()\n        encoding.writeVarUint(encoder, messageAwareness)\n        encoding.writeVarUint8Array(encoder, awarenessProtocol.encodeAwarenessUpdate(awareness, Array.from(awarenessStates.keys())))\n        sendWebrtcConn(this, encoder)\n      }\n    })\n    this.peer.on('close', () => {\n      this.connected = false\n      this.closed = true\n      if (room.webrtcConns.has(this.remotePeerId)) {\n        room.webrtcConns.delete(this.remotePeerId)\n        room.provider.emit('peers', [{\n          removed: [this.remotePeerId],\n          added: [],\n          webrtcPeers: Array.from(room.webrtcConns.keys()),\n          bcPeers: Array.from(room.bcConns)\n        }])\n      }\n      checkIsSynced(room)\n      this.peer.destroy()\n      log('closed connection to ', logging.BOLD, remotePeerId)\n      announceSignalingInfo(room)\n    })\n    this.peer.on('error', err => {\n      log('Error in connection to ', logging.BOLD, remotePeerId, ': ', err)\n      announceSignalingInfo(room)\n    })\n    this.peer.on('data', data => {\n      const answer = readPeerMessage(this, data)\n      if (answer !== null) {\n        sendWebrtcConn(this, answer)\n      }\n    })\n  }\n\n  destroy () {\n    this.peer.destroy()\n  }\n}\n\n/**\n * @param {Room} room\n * @param {Uint8Array} m\n */\nconst broadcastBcMessage = (room, m) => cryptoutils.encrypt(m, room.key).then(data =>\n  room.mux(() =>\n    bc.publish(room.name, data)\n  )\n)\n\n/**\n * @param {Room} room\n * @param {Uint8Array} m\n */\nconst broadcastRoomMessage = (room, m) => {\n  if (room.bcconnected) {\n    broadcastBcMessage(room, m)\n  }\n  broadcastWebrtcConn(room, m)\n}\n\n/**\n * @param {Room} room\n */\nconst announceSignalingInfo = room => {\n  signalingConns.forEach(conn => {\n    // only subscribe if connection is established, otherwise the conn automatically subscribes to all rooms\n    if (conn.connected) {\n      conn.send({ type: 'subscribe', topics: [room.name] })\n      if (room.webrtcConns.size < room.provider.maxConns) {\n        publishSignalingMessage(conn, room, { type: 'announce', from: room.peerId })\n      }\n    }\n  })\n}\n\n/**\n * @param {Room} room\n */\nconst broadcastBcPeerId = room => {\n  if (room.provider.filterBcConns) {\n    // broadcast peerId via broadcastchannel\n    const encoderPeerIdBc = encoding.createEncoder()\n    encoding.writeVarUint(encoderPeerIdBc, messageBcPeerId)\n    encoding.writeUint8(encoderPeerIdBc, 1)\n    encoding.writeVarString(encoderPeerIdBc, room.peerId)\n    broadcastBcMessage(room, encoding.toUint8Array(encoderPeerIdBc))\n  }\n}\n\nexport class Room {\n  /**\n   * @param {Y.Doc} doc\n   * @param {WebrtcProvider} provider\n   * @param {string} name\n   * @param {CryptoKey|null} key\n   */\n  constructor (doc, provider, name, key) {\n    /**\n     * Do not assume that peerId is unique. This is only meant for sending signaling messages.\n     *\n     * @type {string}\n     */\n    this.peerId = random.uuidv4()\n    this.doc = doc\n    /**\n     * @type {awarenessProtocol.Awareness}\n     */\n    this.awareness = provider.awareness\n    this.provider = provider\n    this.synced = false\n    this.name = name\n    // @todo make key secret by scoping\n    this.key = key\n    /**\n     * @type {Map<string, WebrtcConn>}\n     */\n    this.webrtcConns = new Map()\n    /**\n     * @type {Set<string>}\n     */\n    this.bcConns = new Set()\n    this.mux = createMutex()\n    this.bcconnected = false\n    /**\n     * @param {ArrayBuffer} data\n     */\n    this._bcSubscriber = data =>\n      cryptoutils.decrypt(new Uint8Array(data), key).then(m =>\n        this.mux(() => {\n          const reply = readMessage(this, m, () => {})\n          if (reply) {\n            broadcastBcMessage(this, encoding.toUint8Array(reply))\n          }\n        })\n      )\n    /**\n     * Listens to Yjs updates and sends them to remote peers\n     *\n     * @param {Uint8Array} update\n     * @param {any} _origin\n     */\n    this._docUpdateHandler = (update, _origin) => {\n      const encoder = encoding.createEncoder()\n      encoding.writeVarUint(encoder, messageSync)\n      syncProtocol.writeUpdate(encoder, update)\n      broadcastRoomMessage(this, encoding.toUint8Array(encoder))\n    }\n    /**\n     * Listens to Awareness updates and sends them to remote peers\n     *\n     * @param {any} changed\n     * @param {any} _origin\n     */\n    this._awarenessUpdateHandler = ({ added, updated, removed }, _origin) => {\n      const changedClients = added.concat(updated).concat(removed)\n      const encoderAwareness = encoding.createEncoder()\n      encoding.writeVarUint(encoderAwareness, messageAwareness)\n      encoding.writeVarUint8Array(encoderAwareness, awarenessProtocol.encodeAwarenessUpdate(this.awareness, changedClients))\n      broadcastRoomMessage(this, encoding.toUint8Array(encoderAwareness))\n    }\n\n    this._beforeUnloadHandler = () => {\n      awarenessProtocol.removeAwarenessStates(this.awareness, [doc.clientID], 'window unload')\n      rooms.forEach(room => {\n        room.disconnect()\n      })\n    }\n\n    if (typeof window !== 'undefined') {\n      window.addEventListener('beforeunload', this._beforeUnloadHandler)\n    } else if (typeof process !== 'undefined') {\n      process.on('exit', this._beforeUnloadHandler)\n    }\n  }\n\n  connect () {\n    this.doc.on('update', this._docUpdateHandler)\n    this.awareness.on('update', this._awarenessUpdateHandler)\n    // signal through all available signaling connections\n    announceSignalingInfo(this)\n    const roomName = this.name\n    bc.subscribe(roomName, this._bcSubscriber)\n    this.bcconnected = true\n    // broadcast peerId via broadcastchannel\n    broadcastBcPeerId(this)\n    // write sync step 1\n    const encoderSync = encoding.createEncoder()\n    encoding.writeVarUint(encoderSync, messageSync)\n    syncProtocol.writeSyncStep1(encoderSync, this.doc)\n    broadcastBcMessage(this, encoding.toUint8Array(encoderSync))\n    // broadcast local state\n    const encoderState = encoding.createEncoder()\n    encoding.writeVarUint(encoderState, messageSync)\n    syncProtocol.writeSyncStep2(encoderState, this.doc)\n    broadcastBcMessage(this, encoding.toUint8Array(encoderState))\n    // write queryAwareness\n    const encoderAwarenessQuery = encoding.createEncoder()\n    encoding.writeVarUint(encoderAwarenessQuery, messageQueryAwareness)\n    broadcastBcMessage(this, encoding.toUint8Array(encoderAwarenessQuery))\n    // broadcast local awareness state\n    const encoderAwarenessState = encoding.createEncoder()\n    encoding.writeVarUint(encoderAwarenessState, messageAwareness)\n    encoding.writeVarUint8Array(encoderAwarenessState, awarenessProtocol.encodeAwarenessUpdate(this.awareness, [this.doc.clientID]))\n    broadcastBcMessage(this, encoding.toUint8Array(encoderAwarenessState))\n  }\n\n  disconnect () {\n    // signal through all available signaling connections\n    signalingConns.forEach(conn => {\n      if (conn.connected) {\n        conn.send({ type: 'unsubscribe', topics: [this.name] })\n      }\n    })\n    awarenessProtocol.removeAwarenessStates(this.awareness, [this.doc.clientID], 'disconnect')\n    // broadcast peerId removal via broadcastchannel\n    const encoderPeerIdBc = encoding.createEncoder()\n    encoding.writeVarUint(encoderPeerIdBc, messageBcPeerId)\n    encoding.writeUint8(encoderPeerIdBc, 0) // remove peerId from other bc peers\n    encoding.writeVarString(encoderPeerIdBc, this.peerId)\n    broadcastBcMessage(this, encoding.toUint8Array(encoderPeerIdBc))\n\n    bc.unsubscribe(this.name, this._bcSubscriber)\n    this.bcconnected = false\n    this.doc.off('update', this._docUpdateHandler)\n    this.awareness.off('update', this._awarenessUpdateHandler)\n    this.webrtcConns.forEach(conn => conn.destroy())\n  }\n\n  destroy () {\n    this.disconnect()\n    if (typeof window !== 'undefined') {\n      window.removeEventListener('beforeunload', this._beforeUnloadHandler)\n    } else if (typeof process !== 'undefined') {\n      process.off('exit', this._beforeUnloadHandler)\n    }\n  }\n}\n\n/**\n * @param {Y.Doc} doc\n * @param {WebrtcProvider} provider\n * @param {string} name\n * @param {CryptoKey|null} key\n * @return {Room}\n */\nconst openRoom = (doc, provider, name, key) => {\n  // there must only be one room\n  if (rooms.has(name)) {\n    throw error.create(`A Yjs Doc connected to room \"${name}\" already exists!`)\n  }\n  const room = new Room(doc, provider, name, key)\n  rooms.set(name, /** @type {Room} */ (room))\n  return room\n}\n\n/**\n * @param {SignalingConn} conn\n * @param {Room} room\n * @param {any} data\n */\nconst publishSignalingMessage = (conn, room, data) => {\n  if (room.key) {\n    cryptoutils.encryptJson(data, room.key).then(data => {\n      conn.send({ type: 'publish', topic: room.name, data: buffer.toBase64(data) })\n    })\n  } else {\n    conn.send({ type: 'publish', topic: room.name, data })\n  }\n}\n\nexport class SignalingConn extends ws.WebsocketClient {\n  constructor (url) {\n    super(url)\n    /**\n     * @type {Set<WebrtcProvider>}\n     */\n    this.providers = new Set()\n    this.on('connect', () => {\n      log(`connected (${url})`)\n      const topics = Array.from(rooms.keys())\n      this.send({ type: 'subscribe', topics })\n      rooms.forEach(room =>\n        publishSignalingMessage(this, room, { type: 'announce', from: room.peerId })\n      )\n    })\n    this.on('message', m => {\n      switch (m.type) {\n        case 'publish': {\n          const roomName = m.topic\n          const room = rooms.get(roomName)\n          if (room == null || typeof roomName !== 'string') {\n            return\n          }\n          const execMessage = data => {\n            const webrtcConns = room.webrtcConns\n            const peerId = room.peerId\n            if (data == null || data.from === peerId || (data.to !== undefined && data.to !== peerId) || room.bcConns.has(data.from)) {\n              // ignore messages that are not addressed to this conn, or from clients that are connected via broadcastchannel\n              return\n            }\n            const emitPeerChange = webrtcConns.has(data.from)\n              ? () => {}\n              : () =>\n                room.provider.emit('peers', [{\n                  removed: [],\n                  added: [data.from],\n                  webrtcPeers: Array.from(room.webrtcConns.keys()),\n                  bcPeers: Array.from(room.bcConns)\n                }])\n            switch (data.type) {\n              case 'announce':\n                if (webrtcConns.size < room.provider.maxConns) {\n                  map.setIfUndefined(webrtcConns, data.from, () => new WebrtcConn(this, true, data.from, room))\n                  emitPeerChange()\n                }\n                break\n              case 'signal':\n                if (data.signal.type === 'offer') {\n                  const existingConn = webrtcConns.get(data.from)\n                  if (existingConn) {\n                    const remoteToken = data.token\n                    const localToken = existingConn.glareToken\n                    if (localToken && localToken > remoteToken) {\n                      log('offer rejected: ', data.from)\n                      return\n                    }\n                    // if we don't reject the offer, we will be accepting it and answering it\n                    existingConn.glareToken = undefined\n                  }\n                }\n                if (data.signal.type === 'answer') {\n                  log('offer answered by: ', data.from)\n                  const existingConn = webrtcConns.get(data.from)\n                  existingConn.glareToken = undefined\n                }\n                if (data.to === peerId) {\n                  map.setIfUndefined(webrtcConns, data.from, () => new WebrtcConn(this, false, data.from, room)).peer.signal(data.signal)\n                  emitPeerChange()\n                }\n                break\n            }\n          }\n          if (room.key) {\n            if (typeof m.data === 'string') {\n              cryptoutils.decryptJson(buffer.fromBase64(m.data), room.key).then(execMessage)\n            }\n          } else {\n            execMessage(m.data)\n          }\n        }\n      }\n    })\n    this.on('disconnect', () => log(`disconnect (${url})`))\n  }\n}\n\n/**\n * @typedef {Object} ProviderOptions\n * @property {Array<string>} [signaling]\n * @property {string} [password]\n * @property {awarenessProtocol.Awareness} [awareness]\n * @property {number} [maxConns]\n * @property {boolean} [filterBcConns]\n * @property {any} [peerOpts]\n */\n\n/**\n * @param {WebrtcProvider} provider\n */\nconst emitStatus = provider => {\n  provider.emit('status', [{\n    connected: provider.connected\n  }])\n}\n\n/**\n * @typedef {Object} WebrtcProviderEvents\n * @property {function({connected:boolean}):void} WebrtcProviderEvent.status\n * @property {function({synced:boolean}):void} WebrtcProviderEvent.synced\n * @property {function({added:Array<string>,removed:Array<string>,webrtcPeers:Array<string>,bcPeers:Array<string>}):void} WebrtcProviderEvent.peers\n */\n\n/**\n * @extends ObservableV2<WebrtcProviderEvents>\n */\nexport class WebrtcProvider extends ObservableV2 {\n  /**\n   * @param {string} roomName\n   * @param {Y.Doc} doc\n   * @param {ProviderOptions?} opts\n   */\n  constructor (\n    roomName,\n    doc,\n    {\n      signaling = ['wss://y-webrtc-eu.fly.dev'],\n      password = null,\n      awareness = new awarenessProtocol.Awareness(doc),\n      maxConns = 20 + math.floor(random.rand() * 15), // the random factor reduces the chance that n clients form a cluster\n      filterBcConns = true,\n      peerOpts = {} // simple-peer options. See https://github.com/feross/simple-peer#peer--new-peeropts\n    } = {}\n  ) {\n    super()\n    this.roomName = roomName\n    this.doc = doc\n    this.filterBcConns = filterBcConns\n    /**\n     * @type {awarenessProtocol.Awareness}\n     */\n    this.awareness = awareness\n    this.shouldConnect = false\n    this.signalingUrls = signaling\n    this.signalingConns = []\n    this.maxConns = maxConns\n    this.peerOpts = peerOpts\n    /**\n     * @type {PromiseLike<CryptoKey | null>}\n     */\n    this.key = password ? cryptoutils.deriveKey(password, roomName) : /** @type {PromiseLike<null>} */ (promise.resolve(null))\n    /**\n     * @type {Room|null}\n     */\n    this.room = null\n    this.key.then(key => {\n      this.room = openRoom(doc, this, roomName, key)\n      if (this.shouldConnect) {\n        this.room.connect()\n      } else {\n        this.room.disconnect()\n      }\n      emitStatus(this)\n    })\n    this.connect()\n    this.destroy = this.destroy.bind(this)\n    doc.on('destroy', this.destroy)\n  }\n\n  /**\n   * Indicates whether the provider is looking for other peers.\n   *\n   * Other peers can be found via signaling servers or via broadcastchannel (cross browser-tab\n   * communication). You never know when you are connected to all peers. You also don't know if\n   * there are other peers. connected doesn't mean that you are connected to any physical peers\n   * working on the same resource as you. It does not change unless you call provider.disconnect()\n   *\n   * `this.on('status', (event) => { console.log(event.connected) })`\n   *\n   * @type {boolean}\n   */\n  get connected () {\n    return this.room !== null && this.shouldConnect\n  }\n\n  connect () {\n    this.shouldConnect = true\n    this.signalingUrls.forEach(url => {\n      const signalingConn = map.setIfUndefined(signalingConns, url, () => new SignalingConn(url))\n      this.signalingConns.push(signalingConn)\n      signalingConn.providers.add(this)\n    })\n    if (this.room) {\n      this.room.connect()\n      emitStatus(this)\n    }\n  }\n\n  disconnect () {\n    this.shouldConnect = false\n    this.signalingConns.forEach(conn => {\n      conn.providers.delete(this)\n      if (conn.providers.size === 0) {\n        conn.destroy()\n        signalingConns.delete(conn.url)\n      }\n    })\n    if (this.room) {\n      this.room.disconnect()\n      emitStatus(this)\n    }\n  }\n\n  destroy () {\n    this.doc.off('destroy', this.destroy)\n    // need to wait for key before deleting room\n    this.key.then(() => {\n      /** @type {Room} */ (this.room).destroy()\n      rooms.delete(this.roomName)\n    })\n    super.destroy()\n  }\n}\n"],"names":["string.encodeUtf8","promise.resolve","encoding.createEncoder","encoding.writeVarString","encoding.writeVarUint8Array","encoding.toUint8Array","encoding.writeAny","decoding.createDecoder","decoding.readVarString","promise.reject","error.create","decoding.readVarUint8Array","decoding.readAny","logging.createModuleLogger","logging.BOLD","logging.UNBOLD","decoding.readVarUint","encoding.writeVarUint","syncProtocol.readSyncMessage","syncProtocol.messageYjsSyncStep2","syncProtocol.messageYjsSyncStep1","awarenessProtocol.encodeAwarenessUpdate","awarenessProtocol.applyAwarenessUpdate","decoding.readUint8","logging.GREY","logging.UNCOLOR","syncProtocol.writeSyncStep1","cryptoutils.encrypt","bc.publish","encoding.writeUint8","random.uuidv4","createMutex","cryptoutils.decrypt","syncProtocol.writeUpdate","awarenessProtocol.removeAwarenessStates","bc.subscribe","syncProtocol.writeSyncStep2","bc.unsubscribe","cryptoutils.encryptJson","buffer.toBase64","ws.WebsocketClient","map.setIfUndefined","cryptoutils.decryptJson","buffer.fromBase64","ObservableV2","awarenessProtocol.Awareness","math.floor","random.rand","cryptoutils.deriveKey"],"mappings":"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"}