{"action":"created","comment":{"url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/comments/110912364","pull_request_review_id":32117106,"id":110912364,"diff_hunk":"@@ -235,330 +403,300 @@ CallStats.prototype.associateStreamWithVideoTag = function(\n         } else {\n             CallStats.reportsQueue.push({\n                 type: reportType.MST_WITH_USERID,\n+                pc: this.peerconnection,\n                 data: {\n                     callStatsId,\n                     containerId,\n                     ssrc,\n                     usageLabel\n                 }\n             });\n-            CallStats._checkInitialize();\n         }\n-    })();\n-};\n+    }\n \n-/* eslint-enable max-params */\n+    /* eslint-enable max-params */\n \n-/**\n- * Notifies CallStats for mute events\n- * @param mute {boolean} true for muted and false for not muted\n- * @param type {String} \"audio\"/\"video\"\n- * @param {CallStats} cs callstats instance related to the event\n- */\n-CallStats.sendMuteEvent = tryCatch((mute, type, cs) => {\n-    let event;\n+    /**\n+     * Notifies CallStats for mute events\n+     * @param mute {boolean} true for muted and false for not muted\n+     * @param type {String} \"audio\"/\"video\"\n+     * @param {CallStats} cs callstats instance related to the event\n+     */\n+    static sendMuteEvent(mute, type, cs) {\n+        let event;\n+\n+        if (type === 'video') {\n+            event = mute ? fabricEvent.videoPause : fabricEvent.videoResume;\n+        } else {\n+            event = mute ? fabricEvent.audioMute : fabricEvent.audioUnmute;\n+        }\n \n-    if (type === 'video') {\n-        event = mute ? fabricEvent.videoPause : fabricEvent.videoResume;\n-    } else {\n-        event = mute ? fabricEvent.audioMute : fabricEvent.audioUnmute;\n+        CallStats._reportEvent(cs, event);\n     }\n \n-    CallStats._reportEvent.call(cs, event);\n-});\n+    /**\n+     * Notifies CallStats for screen sharing events\n+     * @param start {boolean} true for starting screen sharing and\n+     * false for not stopping\n+     * @param {CallStats} cs callstats instance related to the event\n+     */\n+    static sendScreenSharingEvent(start, cs) {\n+        CallStats._reportEvent(\n+            cs,\n+            start ? fabricEvent.screenShareStart : fabricEvent.screenShareStop);\n+    }\n \n-/**\n- * Notifies CallStats for screen sharing events\n- * @param start {boolean} true for starting screen sharing and\n- * false for not stopping\n- * @param {CallStats} cs callstats instance related to the event\n- */\n-CallStats.sendScreenSharingEvent = tryCatch((start, cs) => {\n-    CallStats._reportEvent.call(\n-        cs,\n-        start ? fabricEvent.screenShareStart : fabricEvent.screenShareStop);\n-});\n+    /**\n+     * Notifies CallStats that we are the new dominant speaker in the\n+     * conference.\n+     * @param {CallStats} cs callstats instance related to the event\n+     */\n+    static sendDominantSpeakerEvent(cs) {\n+        CallStats._reportEvent(cs, fabricEvent.dominantSpeaker);\n+    }\n \n-/**\n- * Notifies CallStats that we are the new dominant speaker in the conference.\n- * @param {CallStats} cs callstats instance related to the event\n- */\n-CallStats.sendDominantSpeakerEvent = tryCatch(cs => {\n-    CallStats._reportEvent.call(cs, fabricEvent.dominantSpeaker);\n-});\n+    /**\n+     * Notifies CallStats about active device.\n+     * @param {{deviceList: {String:String}}} devicesData list of devices with\n+     * their data\n+     * @param {CallStats} cs callstats instance related to the event\n+     */\n+    static sendActiveDeviceListEvent(devicesData, cs) {\n+        CallStats._reportEvent(cs, fabricEvent.activeDeviceList, devicesData);\n+    }\n \n-/**\n- * Notifies CallStats about active device.\n- * @param {{deviceList: {String:String}}} list of devices with their data\n- * @param {CallStats} cs callstats instance related to the event\n- */\n-CallStats.sendActiveDeviceListEvent = tryCatch((devicesData, cs) => {\n-    CallStats._reportEvent.call(cs, fabricEvent.activeDeviceList, devicesData);\n-});\n+    /**\n+     * Reports an error to callstats.\n+     *\n+     * @param {CallStats} cs\n+     * @param event the type of the event, which will be one of the fabricEvent\n+     * @param eventData additional data to pass to event\n+     * @private\n+     */\n+    static _reportEvent(cs, event, eventData) {\n+        const pc = cs && cs.peerconnection;\n+        const confID = cs && cs.confID;\n \n-/**\n- * Reports an error to callstats.\n- *\n- * @param type the type of the error, which will be one of the wrtcFuncNames\n- * @param e the error\n- * @param pc the peerconnection\n- * @param eventData additional data to pass to event\n- * @private\n- */\n-CallStats._reportEvent = function(event, eventData) {\n-    if (CallStats.initialized) {\n-        callStats.sendFabricEvent(\n-            this.peerconnection, event, this.confID, eventData);\n-    } else {\n-        CallStats.reportsQueue.push({\n-            type: reportType.EVENT,\n-            data: { event,\n-                eventData }\n-        });\n-        CallStats._checkInitialize();\n+        if (CallStats.initialized) {\n+            backend.sendFabricEvent(pc, event, confID, eventData);\n+        } else {\n+            CallStats.reportsQueue.push({\n+                confID,\n+                pc,\n+                type: reportType.EVENT,\n+                data: { event,\n+                    eventData }\n+            });\n+        }\n     }\n-};\n \n-/* eslint-disable no-invalid-this */\n-/**\n- * Notifies CallStats for connection setup errors\n- */\n-CallStats.prototype.sendTerminateEvent = tryCatch(function() {\n-    if (!CallStats.initialized) {\n-        return;\n+    /* eslint-disable no-invalid-this */\n+    /**\n+     * Notifies CallStats that the fabric for the underlying peerconnection was\n+     * closed and no evens should be reported, after this call.\n+     */\n+    sendTerminateEvent() {\n+        if (CallStats.initialized) {\n+            backend.sendFabricEvent(\n+                this.peerconnection,\n+                backend.fabricEvent.fabricTerminated,\n+                this.confID);\n+        }\n     }\n-    callStats.sendFabricEvent(this.peerconnection,\n-        callStats.fabricEvent.fabricTerminated, this.confID);\n-});\n-\n-/* eslint-enable no-invalid-this */\n \n-/**\n- * Notifies CallStats for ice connection failed\n- * @param {RTCPeerConnection} pc connection on which failure occured.\n- * @param {CallStats} cs callstats instance related to the error (optional)\n- */\n-CallStats.prototype.sendIceConnectionFailedEvent = tryCatch((pc, cs) => {\n-    CallStats._reportError.call(\n-        cs, wrtcFuncNames.iceConnectionFailure, null, pc);\n-});\n+    /* eslint-enable no-invalid-this */\n+\n+    /**\n+     * Notifies CallStats for ice connection failed\n+     */\n+    sendIceConnectionFailedEvent() {\n+        CallStats._reportError(\n+            this,\n+            wrtcFuncNames.iceConnectionFailure,\n+            null,\n+            this.peerconnection);\n+    }\n \n-/* eslint-disable no-invalid-this */\n-/**\n- * Sends the given feedback through CallStats.\n- *\n- * @param overallFeedback an integer between 1 and 5 indicating the\n- * user feedback\n- * @param detailedFeedback detailed feedback from the user. Not yet used\n- */\n-CallStats.prototype.sendFeedback = tryCatch(\n-function(overallFeedback, detailedFeedback) {\n-    if (!CallStats.feedbackEnabled) {\n-        return;\n+    /* eslint-disable no-invalid-this */\n+    /**\n+     * Sends the given feedback through CallStats.\n+     *\n+     * @param {string} conferenceID the conference ID for which the feedback\n+     * will be reported.\n+     * @param overallFeedback an integer between 1 and 5 indicating the\n+     * user feedback\n+     * @param detailedFeedback detailed feedback from the user. Not yet used\n+     */\n+    static sendFeedback(conferenceID, overallFeedback, detailedFeedback) {\n+        if (backend) {\n+            backend.sendUserFeedback(\n+                conferenceID, {\n+                    userID: CallStats.userID,\n+                    overall: overallFeedback,\n+                    comment: detailedFeedback\n+                });\n+        } else {\n+            logger.error('Failed to submit feedback to CallStats - no backend');\n+        }\n     }\n \n-    callStats.sendUserFeedback(this.confID, {\n-        userID: this.userID,\n-        overall: overallFeedback,\n-        comment: detailedFeedback\n-    });\n-});\n+    /* eslint-enable no-invalid-this */\n+\n+    /* eslint-disable max-params */\n+    /**\n+     * Reports an error to callstats.\n+     *\n+     * @param {CallStats} [cs]\n+     * @param type the type of the error, which will be one of the wrtcFuncNames\n+     * @param e the error\n+     * @param pc the peerconnection\n+     * @private\n+     */\n+    static _reportError(cs, type, e, pc) {\n+        let error = e;\n+\n+        if (!error) {\n+            logger.warn('No error is passed!');\n+            error = new Error('Unknown error');\n+        }\n+        if (CallStats.initialized) {\n+            backend.reportError(pc, cs && cs.confID, type, error);\n+        } else {\n+            CallStats.reportsQueue.push({\n+                type: reportType.ERROR,\n+                data: {\n+                    error,\n+                    pc,\n+                    type\n+                }\n+            });\n+        }\n \n-/* eslint-enable no-invalid-this */\n+        // else just ignore it\n+    }\n \n-/**\n- * Reports an error to callstats.\n- *\n- * @param type the type of the error, which will be one of the wrtcFuncNames\n- * @param e the error\n- * @param pc the peerconnection\n- * @private\n- */\n-CallStats._reportError = function(type, e, pc) {\n-    let error = e;\n+    /* eslint-enable max-params */\n \n-    if (!error) {\n-        logger.warn('No error is passed!');\n-        error = new Error('Unknown error');\n+    /**\n+     * Notifies CallStats that getUserMedia failed.\n+     *\n+     * @param {Error} e error to send\n+     * @param {CallStats} cs callstats instance related to the error (optional)\n+     */\n+    static sendGetUserMediaFailed(e, cs) {","path":"modules/statistics/CallStats.js","position":783,"original_position":783,"commit_id":"59d5d049865f54c7c4ea45fdced6f9d7ad878eca","original_commit_id":"59d5d049865f54c7c4ea45fdced6f9d7ad878eca","user":{"login":"paweldomas","id":2965063,"avatar_url":"https://avatars0.githubusercontent.com/u/2965063?v=3","gravatar_id":"","url":"https://api.github.com/users/paweldomas","html_url":"https://github.com/paweldomas","followers_url":"https://api.github.com/users/paweldomas/followers","following_url":"https://api.github.com/users/paweldomas/following{/other_user}","gists_url":"https://api.github.com/users/paweldomas/gists{/gist_id}","starred_url":"https://api.github.com/users/paweldomas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paweldomas/subscriptions","organizations_url":"https://api.github.com/users/paweldomas/orgs","repos_url":"https://api.github.com/users/paweldomas/repos","events_url":"https://api.github.com/users/paweldomas/events{/privacy}","received_events_url":"https://api.github.com/users/paweldomas/received_events","type":"User","site_admin":false},"body":"but should static come before or after the constructor ?","created_at":"2017-04-11T14:11:31Z","updated_at":"2017-04-11T14:11:31Z","html_url":"https://github.com/jitsi/lib-jitsi-meet/pull/445#discussion_r110912364","pull_request_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/445","_links":{"self":{"href":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/comments/110912364"},"html":{"href":"https://github.com/jitsi/lib-jitsi-meet/pull/445#discussion_r110912364"},"pull_request":{"href":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/445"}}},"pull_request":{"url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/445","id":114959185,"html_url":"https://github.com/jitsi/lib-jitsi-meet/pull/445","diff_url":"https://github.com/jitsi/lib-jitsi-meet/pull/445.diff","patch_url":"https://github.com/jitsi/lib-jitsi-meet/pull/445.patch","issue_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues/445","number":445,"state":"open","locked":false,"title":"Report P2P to  CallStats","user":{"login":"paweldomas","id":2965063,"avatar_url":"https://avatars0.githubusercontent.com/u/2965063?v=3","gravatar_id":"","url":"https://api.github.com/users/paweldomas","html_url":"https://github.com/paweldomas","followers_url":"https://api.github.com/users/paweldomas/followers","following_url":"https://api.github.com/users/paweldomas/following{/other_user}","gists_url":"https://api.github.com/users/paweldomas/gists{/gist_id}","starred_url":"https://api.github.com/users/paweldomas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paweldomas/subscriptions","organizations_url":"https://api.github.com/users/paweldomas/orgs","repos_url":"https://api.github.com/users/paweldomas/repos","events_url":"https://api.github.com/users/paweldomas/events{/privacy}","received_events_url":"https://api.github.com/users/paweldomas/received_events","type":"User","site_admin":false},"body":"The goal here is to have both JVB and P2P connection reported to CallStats.\r\n\r\nPlease check each commit msg for more info.","created_at":"2017-04-08T20:05:03Z","updated_at":"2017-04-11T14:11:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7e76cf938fab79bc33c1bbddc51fad3172525288","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/445/commits","review_comments_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/445/comments","review_comment_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues/445/comments","statuses_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/statuses/59d5d049865f54c7c4ea45fdced6f9d7ad878eca","head":{"label":"jitsi:p2p_callstats","ref":"p2p_callstats","sha":"59d5d049865f54c7c4ea45fdced6f9d7ad878eca","user":{"login":"jitsi","id":3671647,"avatar_url":"https://avatars1.githubusercontent.com/u/3671647?v=3","gravatar_id":"","url":"https://api.github.com/users/jitsi","html_url":"https://github.com/jitsi","followers_url":"https://api.github.com/users/jitsi/followers","following_url":"https://api.github.com/users/jitsi/following{/other_user}","gists_url":"https://api.github.com/users/jitsi/gists{/gist_id}","starred_url":"https://api.github.com/users/jitsi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jitsi/subscriptions","organizations_url":"https://api.github.com/users/jitsi/orgs","repos_url":"https://api.github.com/users/jitsi/repos","events_url":"https://api.github.com/users/jitsi/events{/privacy}","received_events_url":"https://api.github.com/users/jitsi/received_events","type":"Organization","site_admin":false},"repo":{"id":50543360,"name":"lib-jitsi-meet","full_name":"jitsi/lib-jitsi-meet","owner":{"login":"jitsi","id":3671647,"avatar_url":"https://avatars1.githubusercontent.com/u/3671647?v=3","gravatar_id":"","url":"https://api.github.com/users/jitsi","html_url":"https://github.com/jitsi","followers_url":"https://api.github.com/users/jitsi/followers","following_url":"https://api.github.com/users/jitsi/following{/other_user}","gists_url":"https://api.github.com/users/jitsi/gists{/gist_id}","starred_url":"https://api.github.com/users/jitsi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jitsi/subscriptions","organizations_url":"https://api.github.com/users/jitsi/orgs","repos_url":"https://api.github.com/users/jitsi/repos","events_url":"https://api.github.com/users/jitsi/events{/privacy}","received_events_url":"https://api.github.com/users/jitsi/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/jitsi/lib-jitsi-meet","description":"A low-level JS video API that allows adding a completely custom video experience to web apps.","fork":false,"url":"https://api.github.com/repos/jitsi/lib-jitsi-meet","forks_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/forks","keys_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/teams","hooks_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/hooks","issue_events_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues/events{/number}","events_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/events","assignees_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/assignees{/user}","branches_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/branches{/branch}","tags_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/tags","blobs_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/refs{/sha}","trees_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/statuses/{sha}","languages_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/languages","stargazers_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/stargazers","contributors_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/contributors","subscribers_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/subscribers","subscription_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/subscription","commits_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/commits{/sha}","git_commits_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/commits{/sha}","comments_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/comments{/number}","issue_comment_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues/comments{/number}","contents_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/contents/{+path}","compare_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/merges","archive_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/downloads","issues_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues{/number}","pulls_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls{/number}","milestones_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/milestones{/number}","notifications_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/labels{/name}","releases_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/releases{/id}","deployments_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/deployments","created_at":"2016-01-27T22:44:09Z","updated_at":"2017-04-06T18:49:30Z","pushed_at":"2017-04-11T08:42:49Z","git_url":"git://github.com/jitsi/lib-jitsi-meet.git","ssh_url":"git@github.com:jitsi/lib-jitsi-meet.git","clone_url":"https://github.com/jitsi/lib-jitsi-meet.git","svn_url":"https://github.com/jitsi/lib-jitsi-meet","homepage":"","size":5858,"stargazers_count":32,"watchers_count":32,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":69,"mirror_url":null,"open_issues_count":24,"forks":69,"open_issues":24,"watchers":32,"default_branch":"master"}},"base":{"label":"jitsi:master","ref":"master","sha":"4273be510b20c352c673e51010dd13d135a580a6","user":{"login":"jitsi","id":3671647,"avatar_url":"https://avatars1.githubusercontent.com/u/3671647?v=3","gravatar_id":"","url":"https://api.github.com/users/jitsi","html_url":"https://github.com/jitsi","followers_url":"https://api.github.com/users/jitsi/followers","following_url":"https://api.github.com/users/jitsi/following{/other_user}","gists_url":"https://api.github.com/users/jitsi/gists{/gist_id}","starred_url":"https://api.github.com/users/jitsi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jitsi/subscriptions","organizations_url":"https://api.github.com/users/jitsi/orgs","repos_url":"https://api.github.com/users/jitsi/repos","events_url":"https://api.github.com/users/jitsi/events{/privacy}","received_events_url":"https://api.github.com/users/jitsi/received_events","type":"Organization","site_admin":false},"repo":{"id":50543360,"name":"lib-jitsi-meet","full_name":"jitsi/lib-jitsi-meet","owner":{"login":"jitsi","id":3671647,"avatar_url":"https://avatars1.githubusercontent.com/u/3671647?v=3","gravatar_id":"","url":"https://api.github.com/users/jitsi","html_url":"https://github.com/jitsi","followers_url":"https://api.github.com/users/jitsi/followers","following_url":"https://api.github.com/users/jitsi/following{/other_user}","gists_url":"https://api.github.com/users/jitsi/gists{/gist_id}","starred_url":"https://api.github.com/users/jitsi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jitsi/subscriptions","organizations_url":"https://api.github.com/users/jitsi/orgs","repos_url":"https://api.github.com/users/jitsi/repos","events_url":"https://api.github.com/users/jitsi/events{/privacy}","received_events_url":"https://api.github.com/users/jitsi/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/jitsi/lib-jitsi-meet","description":"A low-level JS video API that allows adding a completely custom video experience to web apps.","fork":false,"url":"https://api.github.com/repos/jitsi/lib-jitsi-meet","forks_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/forks","keys_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/teams","hooks_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/hooks","issue_events_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues/events{/number}","events_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/events","assignees_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/assignees{/user}","branches_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/branches{/branch}","tags_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/tags","blobs_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/refs{/sha}","trees_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/statuses/{sha}","languages_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/languages","stargazers_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/stargazers","contributors_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/contributors","subscribers_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/subscribers","subscription_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/subscription","commits_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/commits{/sha}","git_commits_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/git/commits{/sha}","comments_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/comments{/number}","issue_comment_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues/comments{/number}","contents_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/contents/{+path}","compare_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/merges","archive_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/downloads","issues_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues{/number}","pulls_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls{/number}","milestones_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/milestones{/number}","notifications_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/labels{/name}","releases_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/releases{/id}","deployments_url":"https://api.github.com/repos/jitsi/lib-jitsi-meet/deployments","created_at":"2016-01-27T22:44:09Z","updated_at":"2017-04-06T18:49:30Z","pushed_at":"2017-04-11T08:42:49Z","git_url":"git://github.com/jitsi/lib-jitsi-meet.git","ssh_url":"git@github.com:jitsi/lib-jitsi-meet.git","clone_url":"https://github.com/jitsi/lib-jitsi-meet.git","svn_url":"https://github.com/jitsi/lib-jitsi-meet","homepage":"","size":5858,"stargazers_count":32,"watchers_count":32,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":69,"mirror_url":null,"open_issues_count":24,"forks":69,"open_issues":24,"watchers":32,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/445"},"html":{"href":"https://github.com/jitsi/lib-jitsi-meet/pull/445"},"issue":{"href":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues/445"},"comments":{"href":"https://api.github.com/repos/jitsi/lib-jitsi-meet/issues/445/comments"},"review_comments":{"href":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/445/comments"},"review_comment":{"href":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jitsi/lib-jitsi-meet/pulls/445/commits"},"statuses":{"href":"https://api.github.com/repos/jitsi/lib-jitsi-meet/statuses/59d5d049865f54c7c4ea45fdced6f9d7ad878eca"}}}}
{"actor":{"display_login":"paweldomas"}}