{"action":"created","comment":{"url":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/comments/114144558","pull_request_review_id":35587279,"id":114144558,"diff_hunk":"@@ -0,0 +1,265 @@\n+import {\n+    MESSAGE_TYPE_EVENT,\n+    MESSAGE_TYPE_RESPONSE,\n+    MESSAGE_TYPE_REQUEST\n+} from './constants';\n+\n+/**\n+ * Stores the currnet transport backend that have to be used. Also implements\n+ * request/response mechanism.\n+ */\n+export default class Transport {\n+    /**\n+     * Creates new instance.\n+     *\n+     * @param {Object} options - Optional parameters for configuration of the\n+     * transport backend.\n+     */\n+    constructor({ backend } = {}) {\n+        /**\n+         * The request ID counter used for the id property of the request. This\n+         * property is used to match the responses with the request.\n+         *\n+         * @type {number}\n+         */\n+        this._requestID = 0;\n+\n+        /**\n+         * Maps an IDs of the requests and handlers that will process the\n+         * responses of those requests.\n+         *\n+         * @type {Map<number, Function>}\n+         */\n+        this._responseHandlers = new Map();\n+\n+        /**\n+         * Maps an event name and listener that have been added to the Transport\n+         * instance.\n+         *\n+         * @type {Map<string, Function>}\n+         */\n+        this._listeners = new Map();\n+\n+        /**\n+         * A set with the events and requests that were received but not\n+         * processed by any listener. They are later passed on every new\n+         * listener until they are processed.\n+         *\n+         * @type {Set<Object>}\n+         */\n+        this._unprocessedMessages = new Set();\n+\n+        /**\n+         * Alias.\n+         */\n+        this.addListener = this.on;\n+\n+        if (backend) {\n+            this.setBackend(backend);\n+        }\n+    }\n+\n+    /**\n+     * Disposes the current transport backend.\n+     *\n+     * @returns {void}\n+     */\n+    _disposeBackend() {\n+        if (this._backend) {\n+            this._backend.dispose();\n+            this._backend = null;\n+        }\n+    }\n+\n+    /**\n+     * Handles incoming messages from the transport backend.\n+     *\n+     * @param {Object} message - The message.\n+     * @returns {void}\n+     */\n+    _onMessageReceived(message) {\n+        if (message.type === MESSAGE_TYPE_RESPONSE) {\n+            const handler = this._responseHandlers.get(message.id);\n+\n+            if (handler) {\n+                handler(message);\n+                this._responseHandlers.delete(message.id);\n+            }\n+        } else if (message.type === MESSAGE_TYPE_REQUEST) {\n+            this.emit('request', message.data, (result, error) => {\n+                this._backend.send({\n+                    type: MESSAGE_TYPE_RESPONSE,\n+                    error,\n+                    id: message.id,\n+                    result\n+                });\n+            });\n+        } else {\n+            this.emit('event', message.data);\n+        }\n+    }\n+\n+    /**\n+     * Disposes the allocated resources.\n+     *\n+     * @returns {void}\n+     */\n+    dispose() {\n+        this._responseHandlers.clear();\n+        this._unprocessedMessages.clear();\n+        this.removeAllListeners();\n+        this._disposeBackend();\n+    }\n+\n+    /**\n+     * Calls each of the listeners registered for the event named eventName, in\n+     * the order they were registered, passing the supplied arguments to each.\n+     *\n+     * @param {string} eventName -  The name of the event.\n+     * @returns {boolean} True if the event has been processed by any listener,\n+     * false otherwise.\n+     */\n+    emit(eventName, ...args) {\n+        const listenersForEvent = this._listeners.get(eventName);\n+        let isProcessed = false;\n+\n+        if (listenersForEvent && listenersForEvent.size) {\n+            listenersForEvent.forEach(listener => {\n+                isProcessed = listener(...args) || isProcessed;\n+            });\n+        }\n+\n+        if (!isProcessed) {\n+            this._unprocessedMessages.add(args);\n+        }\n+\n+        return isProcessed;\n+    }\n+\n+    /**\n+     * Adds the listener function to the listeners collection for the event\n+     * named eventName.\n+     *\n+     * @param {string} eventName -  The name of the event.\n+     * @param {Function} listener - The listener that will be added.\n+     * @returns {Transport} References to the instance of Transport class, so\n+     * that calls can be chained.\n+     */\n+    on(eventName, listener) {\n+        let listenersForEvent = this._listeners.get(eventName);\n+\n+        if (!listenersForEvent) {\n+            listenersForEvent = new Set();\n+            this._listeners.set(eventName, listenersForEvent);\n+        }\n+\n+        listenersForEvent.add(listener);\n+\n+        this._unprocessedMessages.forEach(args => {\n+            if (listener(...args)) {\n+                this._unprocessedMessages.delete(args);\n+            }\n+        });\n+\n+        return this;\n+    }\n+\n+    /**\n+     * Removes all listeners, or those of the specified eventName.\n+     *\n+     * @param {string} [eventName] - The name of the event. If this parameter is\n+     * not specified all listeners will be removed.\n+     * @returns {Transport} References to the instance of Transport class, so\n+     * that calls can be chained.\n+     */\n+    removeAllListeners(eventName) {\n+        if (eventName) {\n+            this._listeners.delete(eventName);\n+        } else {\n+            this._listeners.clear();\n+        }\n+\n+        return this;\n+    }\n+\n+    /**\n+     * Removes the listener function from the listeners collection for the event\n+     * named eventName.\n+     *\n+     * @param {string} eventName -  The name of the event.\n+     * @param {Function} listener - The listener that will be removed.\n+     * @returns {Transport} References to the instance of Transport class, so\n+     * that calls can be chained.\n+     */\n+    removeListener(eventName, listener) {\n+        const listenersForEvent = this._listeners.get(eventName);\n+\n+        if (listenersForEvent) {\n+            listenersForEvent.delete(listener);\n+        }\n+\n+        return this;\n+    }\n+\n+    /**\n+     * Sends the passed event.\n+     *\n+     * @param {Object} event - The event to be sent.\n+     * @returns {void}\n+     */\n+    sendEvent(event = {}) {\n+        if (this._backend) {\n+            this._backend.send({\n+                type: MESSAGE_TYPE_EVENT,\n+                data: event\n+            });\n+        }\n+    }\n+\n+    /**\n+     * Sending request.\n+     *\n+     * @param {Object} request - The request to be sent.\n+     * @returns {Promise}\n+     */\n+    sendRequest(request) {\n+        if (!this._backend) {\n+            return Promise.reject(new Error('No transport backend defined!'));\n+        }\n+\n+        this._requestID++;\n+\n+        const id = this._requestID;\n+\n+        return new Promise((resolve, reject) => {\n+            this._responseHandlers.set(this._requestID, ({ error, result }) => {","path":"modules/transport/Transport.js","position":235,"original_position":235,"commit_id":"96bde3ff4417cf3e051de57d679df6ec7c31a5a3","original_commit_id":"96bde3ff4417cf3e051de57d679df6ec7c31a5a3","user":{"login":"saghul","id":317464,"avatar_url":"https://avatars3.githubusercontent.com/u/317464?v=3","gravatar_id":"","url":"https://api.github.com/users/saghul","html_url":"https://github.com/saghul","followers_url":"https://api.github.com/users/saghul/followers","following_url":"https://api.github.com/users/saghul/following{/other_user}","gists_url":"https://api.github.com/users/saghul/gists{/gist_id}","starred_url":"https://api.github.com/users/saghul/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/saghul/subscriptions","organizations_url":"https://api.github.com/users/saghul/orgs","repos_url":"https://api.github.com/users/saghul/repos","events_url":"https://api.github.com/users/saghul/events{/privacy}","received_events_url":"https://api.github.com/users/saghul/received_events","type":"User","site_admin":false},"body":"instead of `this._requestID`, since you extracted it in the line above.","created_at":"2017-05-01T15:53:08Z","updated_at":"2017-05-01T15:53:09Z","html_url":"https://github.com/jitsi/jitsi-meet/pull/1539#discussion_r114144558","pull_request_url":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/1539","_links":{"self":{"href":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/comments/114144558"},"html":{"href":"https://github.com/jitsi/jitsi-meet/pull/1539#discussion_r114144558"},"pull_request":{"href":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/1539"}}},"pull_request":{"url":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/1539","id":117596145,"html_url":"https://github.com/jitsi/jitsi-meet/pull/1539","diff_url":"https://github.com/jitsi/jitsi-meet/pull/1539.diff","patch_url":"https://github.com/jitsi/jitsi-meet/pull/1539.patch","issue_url":"https://api.github.com/repos/jitsi/jitsi-meet/issues/1539","number":1539,"state":"open","locked":false,"title":"Abstract transport v2","user":{"login":"hristoterezov","id":1729265,"avatar_url":"https://avatars0.githubusercontent.com/u/1729265?v=3","gravatar_id":"","url":"https://api.github.com/users/hristoterezov","html_url":"https://github.com/hristoterezov","followers_url":"https://api.github.com/users/hristoterezov/followers","following_url":"https://api.github.com/users/hristoterezov/following{/other_user}","gists_url":"https://api.github.com/users/hristoterezov/gists{/gist_id}","starred_url":"https://api.github.com/users/hristoterezov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hristoterezov/subscriptions","organizations_url":"https://api.github.com/users/hristoterezov/orgs","repos_url":"https://api.github.com/users/hristoterezov/repos","events_url":"https://api.github.com/users/hristoterezov/events{/privacy}","received_events_url":"https://api.github.com/users/hristoterezov/received_events","type":"User","site_admin":false},"body":"Implements alternative approach for the abstract transport(see PR #1510 ).\r\n\r\nhttps://github.com/jitsi/jitsi-meet-electron/pull/9 should be merged after this PR.","created_at":"2017-04-25T22:38:15Z","updated_at":"2017-05-01T15:53:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a79a85c72fb7d9c54ca18f2ebced15a4bccb4b74","assignee":{"login":"yanas","id":3264676,"avatar_url":"https://avatars2.githubusercontent.com/u/3264676?v=3","gravatar_id":"","url":"https://api.github.com/users/yanas","html_url":"https://github.com/yanas","followers_url":"https://api.github.com/users/yanas/followers","following_url":"https://api.github.com/users/yanas/following{/other_user}","gists_url":"https://api.github.com/users/yanas/gists{/gist_id}","starred_url":"https://api.github.com/users/yanas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yanas/subscriptions","organizations_url":"https://api.github.com/users/yanas/orgs","repos_url":"https://api.github.com/users/yanas/repos","events_url":"https://api.github.com/users/yanas/events{/privacy}","received_events_url":"https://api.github.com/users/yanas/received_events","type":"User","site_admin":false},"assignees":[{"login":"yanas","id":3264676,"avatar_url":"https://avatars2.githubusercontent.com/u/3264676?v=3","gravatar_id":"","url":"https://api.github.com/users/yanas","html_url":"https://github.com/yanas","followers_url":"https://api.github.com/users/yanas/followers","following_url":"https://api.github.com/users/yanas/following{/other_user}","gists_url":"https://api.github.com/users/yanas/gists{/gist_id}","starred_url":"https://api.github.com/users/yanas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yanas/subscriptions","organizations_url":"https://api.github.com/users/yanas/orgs","repos_url":"https://api.github.com/users/yanas/repos","events_url":"https://api.github.com/users/yanas/events{/privacy}","received_events_url":"https://api.github.com/users/yanas/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/1539/commits","review_comments_url":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/1539/comments","review_comment_url":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jitsi/jitsi-meet/issues/1539/comments","statuses_url":"https://api.github.com/repos/jitsi/jitsi-meet/statuses/96bde3ff4417cf3e051de57d679df6ec7c31a5a3","head":{"label":"jitsi:abstract_transport2","ref":"abstract_transport2","sha":"96bde3ff4417cf3e051de57d679df6ec7c31a5a3","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":15225670,"name":"jitsi-meet","full_name":"jitsi/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/jitsi-meet","description":"Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.","fork":false,"url":"https://api.github.com/repos/jitsi/jitsi-meet","forks_url":"https://api.github.com/repos/jitsi/jitsi-meet/forks","keys_url":"https://api.github.com/repos/jitsi/jitsi-meet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jitsi/jitsi-meet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jitsi/jitsi-meet/teams","hooks_url":"https://api.github.com/repos/jitsi/jitsi-meet/hooks","issue_events_url":"https://api.github.com/repos/jitsi/jitsi-meet/issues/events{/number}","events_url":"https://api.github.com/repos/jitsi/jitsi-meet/events","assignees_url":"https://api.github.com/repos/jitsi/jitsi-meet/assignees{/user}","branches_url":"https://api.github.com/repos/jitsi/jitsi-meet/branches{/branch}","tags_url":"https://api.github.com/repos/jitsi/jitsi-meet/tags","blobs_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/refs{/sha}","trees_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jitsi/jitsi-meet/statuses/{sha}","languages_url":"https://api.github.com/repos/jitsi/jitsi-meet/languages","stargazers_url":"https://api.github.com/repos/jitsi/jitsi-meet/stargazers","contributors_url":"https://api.github.com/repos/jitsi/jitsi-meet/contributors","subscribers_url":"https://api.github.com/repos/jitsi/jitsi-meet/subscribers","subscription_url":"https://api.github.com/repos/jitsi/jitsi-meet/subscription","commits_url":"https://api.github.com/repos/jitsi/jitsi-meet/commits{/sha}","git_commits_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/commits{/sha}","comments_url":"https://api.github.com/repos/jitsi/jitsi-meet/comments{/number}","issue_comment_url":"https://api.github.com/repos/jitsi/jitsi-meet/issues/comments{/number}","contents_url":"https://api.github.com/repos/jitsi/jitsi-meet/contents/{+path}","compare_url":"https://api.github.com/repos/jitsi/jitsi-meet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jitsi/jitsi-meet/merges","archive_url":"https://api.github.com/repos/jitsi/jitsi-meet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jitsi/jitsi-meet/downloads","issues_url":"https://api.github.com/repos/jitsi/jitsi-meet/issues{/number}","pulls_url":"https://api.github.com/repos/jitsi/jitsi-meet/pulls{/number}","milestones_url":"https://api.github.com/repos/jitsi/jitsi-meet/milestones{/number}","notifications_url":"https://api.github.com/repos/jitsi/jitsi-meet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jitsi/jitsi-meet/labels{/name}","releases_url":"https://api.github.com/repos/jitsi/jitsi-meet/releases{/id}","deployments_url":"https://api.github.com/repos/jitsi/jitsi-meet/deployments","created_at":"2013-12-16T12:51:09Z","updated_at":"2017-05-01T15:30:30Z","pushed_at":"2017-04-30T16:59:39Z","git_url":"git://github.com/jitsi/jitsi-meet.git","ssh_url":"git@github.com:jitsi/jitsi-meet.git","clone_url":"https://github.com/jitsi/jitsi-meet.git","svn_url":"https://github.com/jitsi/jitsi-meet","homepage":"https://jitsi.org/meet","size":19216,"stargazers_count":1092,"watchers_count":1092,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":469,"mirror_url":null,"open_issues_count":249,"forks":469,"open_issues":249,"watchers":1092,"default_branch":"master"}},"base":{"label":"jitsi:master","ref":"master","sha":"6c676f8d5f2a93f1f194919798da54290ffdd72c","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":15225670,"name":"jitsi-meet","full_name":"jitsi/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/jitsi-meet","description":"Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.","fork":false,"url":"https://api.github.com/repos/jitsi/jitsi-meet","forks_url":"https://api.github.com/repos/jitsi/jitsi-meet/forks","keys_url":"https://api.github.com/repos/jitsi/jitsi-meet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jitsi/jitsi-meet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jitsi/jitsi-meet/teams","hooks_url":"https://api.github.com/repos/jitsi/jitsi-meet/hooks","issue_events_url":"https://api.github.com/repos/jitsi/jitsi-meet/issues/events{/number}","events_url":"https://api.github.com/repos/jitsi/jitsi-meet/events","assignees_url":"https://api.github.com/repos/jitsi/jitsi-meet/assignees{/user}","branches_url":"https://api.github.com/repos/jitsi/jitsi-meet/branches{/branch}","tags_url":"https://api.github.com/repos/jitsi/jitsi-meet/tags","blobs_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/refs{/sha}","trees_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jitsi/jitsi-meet/statuses/{sha}","languages_url":"https://api.github.com/repos/jitsi/jitsi-meet/languages","stargazers_url":"https://api.github.com/repos/jitsi/jitsi-meet/stargazers","contributors_url":"https://api.github.com/repos/jitsi/jitsi-meet/contributors","subscribers_url":"https://api.github.com/repos/jitsi/jitsi-meet/subscribers","subscription_url":"https://api.github.com/repos/jitsi/jitsi-meet/subscription","commits_url":"https://api.github.com/repos/jitsi/jitsi-meet/commits{/sha}","git_commits_url":"https://api.github.com/repos/jitsi/jitsi-meet/git/commits{/sha}","comments_url":"https://api.github.com/repos/jitsi/jitsi-meet/comments{/number}","issue_comment_url":"https://api.github.com/repos/jitsi/jitsi-meet/issues/comments{/number}","contents_url":"https://api.github.com/repos/jitsi/jitsi-meet/contents/{+path}","compare_url":"https://api.github.com/repos/jitsi/jitsi-meet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jitsi/jitsi-meet/merges","archive_url":"https://api.github.com/repos/jitsi/jitsi-meet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jitsi/jitsi-meet/downloads","issues_url":"https://api.github.com/repos/jitsi/jitsi-meet/issues{/number}","pulls_url":"https://api.github.com/repos/jitsi/jitsi-meet/pulls{/number}","milestones_url":"https://api.github.com/repos/jitsi/jitsi-meet/milestones{/number}","notifications_url":"https://api.github.com/repos/jitsi/jitsi-meet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jitsi/jitsi-meet/labels{/name}","releases_url":"https://api.github.com/repos/jitsi/jitsi-meet/releases{/id}","deployments_url":"https://api.github.com/repos/jitsi/jitsi-meet/deployments","created_at":"2013-12-16T12:51:09Z","updated_at":"2017-05-01T15:30:30Z","pushed_at":"2017-04-30T16:59:39Z","git_url":"git://github.com/jitsi/jitsi-meet.git","ssh_url":"git@github.com:jitsi/jitsi-meet.git","clone_url":"https://github.com/jitsi/jitsi-meet.git","svn_url":"https://github.com/jitsi/jitsi-meet","homepage":"https://jitsi.org/meet","size":19216,"stargazers_count":1092,"watchers_count":1092,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":469,"mirror_url":null,"open_issues_count":249,"forks":469,"open_issues":249,"watchers":1092,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/1539"},"html":{"href":"https://github.com/jitsi/jitsi-meet/pull/1539"},"issue":{"href":"https://api.github.com/repos/jitsi/jitsi-meet/issues/1539"},"comments":{"href":"https://api.github.com/repos/jitsi/jitsi-meet/issues/1539/comments"},"review_comments":{"href":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/1539/comments"},"review_comment":{"href":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jitsi/jitsi-meet/pulls/1539/commits"},"statuses":{"href":"https://api.github.com/repos/jitsi/jitsi-meet/statuses/96bde3ff4417cf3e051de57d679df6ec7c31a5a3"}}}}
{"actor":{"display_login":"saghul"}}