{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/comments/45869681","id":45869681,"diff_hunk":"@@ -291,211 +58,284 @@ module Microsoft.ApplicationInsights {\n                     return result;\n                 }\n \n-                function interceptOpen() {\n+        private instrumentOpen() {\n                     var originalOpen = XMLHttpRequest.prototype.open;\n+            var ajaxMonitorInstance = this;\n                     XMLHttpRequest.prototype.open = function (method, url, async) {\n-                        if (isMonitoredInstance.call(this, true)) {\n-                            this.ajaxData = new ajaxRecord();\n-                            attachToOnReadyStateChange.call(this);\n-                            commands.TryCatchTraceWrapper.call(this, \"openPrefix\", function () {\n-                                var self = this;\n-                                self.ajaxData.method = method;\n-                                self.ajaxData.requestUrl = url;\n-                                self.ajaxData.requestSize += url.length;\n-\n+                try {\n+                    if (ajaxMonitorInstance.isMonitoredInstance(this, true)) {\n+                        var ajaxData = new ajaxRecord();\n+                        ajaxData.method = method;\n+                        ajaxData.requestUrl = url;\n+                        ajaxData.requestSize += url.length;\n                                 // If not set async defaults to true \n-                                self.ajaxData.async = extensions.IsNullOrUndefined(async) ? true : async;\n+                        ajaxData.async = extensions.IsNullOrUndefined(async) ? true : async;\n+                        this.ajaxData = ajaxData;\n \n-                            });\n+                        ajaxMonitorInstance.attachToOnReadyStateChange(this);\n+                    }\n+                } catch (e) {\n+                    _InternalLogging.throwInternalNonUserActionable(\n+                        LoggingSeverity.CRITICAL,\n+                        \"Failed to monitor XMLHttpRequest.open, monitoring data for this ajax call may be incorrect: \"\n+                        + Microsoft.ApplicationInsights.Util.dump(e));\n                         }\n \n                         return originalOpen.apply(this, arguments);\n                     };\n                 }\n \n-                function interceptSend() {\n+        private instrumentSetRequestHeader() {\n+            var originalSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;\n+            var ajaxMonitorInstance = this;\n+            XMLHttpRequest.prototype.setRequestHeader = function (name, value) {\n+                try {\n+                    if (ajaxMonitorInstance.isMonitoredInstance(this)) {                    \n+                        // 2 is the length of \": \" which is added to each header\n+                        this.ajaxData.requestSize += stringUtils.GetLength(name) + stringUtils.GetLength(value) + 2;\n+                    }\n+                } catch (e) {\n+                    _InternalLogging.throwInternalNonUserActionable(\n+                        LoggingSeverity.CRITICAL,\n+                        \"Failed to monitor XMLHttpRequest.setRequestHeader, monitoring data for this ajax call may be incorrect: \"\n+                        + Microsoft.ApplicationInsights.Util.dump(e));\n+                }\n+\n+                return originalSetRequestHeader.apply(this, arguments);\n+            };\n+        }\n+\n+        private instrumentSend() {\n                     var originalSend = XMLHttpRequest.prototype.send;\n+            var ajaxMonitorInstance = this;\n                     XMLHttpRequest.prototype.send = function (content) {\n-                        sendPrefixInterceptor.call(this, content);\n+                try {\n+                    ajaxMonitorInstance.sendPrefixInstrumentor(this, content);\n+                } catch (e) {\n+                    _InternalLogging.throwInternalNonUserActionable(\n+                        LoggingSeverity.CRITICAL,\n+                        \"Failed to monitor XMLHttpRequest.send, monitoring data for this ajax call may be incorrect: \"\n+                        + Microsoft.ApplicationInsights.Util.dump(e));\n+                }\n+\n                         return originalSend.apply(this, arguments);\n                     };\n                 }\n \n-                function sendPrefixInterceptor(content) {\n-                    if (isMonitoredInstance.call(this)) {\n-                        commands.TryCatchTraceWrapper.call(this, \"sendPrefix\", function () {\n+        private sendPrefixInstrumentor(xhr: XMLHttpRequest, content) {\n+            if (this.isMonitoredInstance(xhr)) {\n                             if (!extensions.IsNullOrUndefined(content) && !extensions.IsNullOrUndefined(content.length)) {\n \n                                 // http://www.w3.org/TR/XMLHttpRequest/: If the request method is a case-sensitive match for GET or HEAD act as if data is null.\n-                                if (this.ajaxData.method !== \"GET\" && this.ajaxData.method !== \"HEAD\") {\n-                                    this.ajaxData.requestSize += content.length;\n+                    if ((<any>xhr).ajaxData.method !== \"GET\" && (<any>this).ajaxData.method !== \"HEAD\") {\n+                        (<any>xhr).ajaxData.requestSize += content.length;\n                                 }\n                             }\n \n-                            this.ajaxData.requestSentTime = dateTime.Now();\n-                            this.ajaxData.loadingRequest = document.readyState === \"loading\";\n+                (<any>xhr).ajaxData.requestSentTime = dateTime.Now();\n+                (<any>xhr).ajaxData.loadingRequest = document.readyState === \"loading\";\n \n-                            if (!this.ajaxData.onreadystatechangeCallbackAttached) {\n+                if (!(<any>xhr).ajaxData.onreadystatechangeCallbackAttached) {\n \n-                                // IE 8 and below does not support xmlh.addEventListener. This the last place for the browsers that does not support addEventListenener to intercept onreadystatechange\n-                                var that = this;\n-                                setTimeout(function () {\n-                                    if (that.readyState === 4) {\n+                    // IE 8 and below does not support xmlh.addEventListener. \n+                    // This is the last place for the browsers that does not support addEventListenener to instrument onreadystatechange\n \n+                    var ajaxMonitorInstance = this;\n+                                setTimeout(function () {\n+                        try {\n+                            if (xhr.readyState === 4) {\n                                         // ajax is cached, onreadystatechange didn't fire, but it is completed\n-                                        commands.TryCatchTraceWrapper.call(that, \"readyState(4)\", collectResponseData);\n-                                        onAjaxComplete.call(that);\n+                                ajaxMonitorInstance.collectResponseData(xhr);\n+                                ajaxMonitorInstance.onAjaxComplete(xhr)\n                                     }\n                                     else {\n-                                        interceptOnReadyStateChange.call(that);\n+                                ajaxMonitorInstance.instrumentOnReadyStateChange(xhr);\n+                            }\n+                        } catch (e) {\n+                            _InternalLogging.throwInternalNonUserActionable(\n+                                LoggingSeverity.CRITICAL,\n+                                \"Failed to instrument XMLHttpRequest.onreadystatechange, monitoring data for this ajax call may be incorrect: \"\n+                                + Microsoft.ApplicationInsights.Util.dump(e));\n                                     }\n                                 }, 5);\n                             }\n-                        });\n                     }\n                 }\n \n-                function interceptAbort() {\n+        private instrumentAbort() {\n                     var originalAbort = XMLHttpRequest.prototype.abort;\n+            var ajaxMonitorInstance = this;\n                     XMLHttpRequest.prototype.abort = function () {\n-                        if (isMonitoredInstance.call(this)) {\n+                try {\n+                    if (ajaxMonitorInstance.isMonitoredInstance(this)) {\n                             this.ajaxData.aborted = 1;\n                         }\n+                } catch (e) {\n+                    _InternalLogging.throwInternalNonUserActionable(\n+                        LoggingSeverity.CRITICAL,\n+                        \"Failed to monitor XMLHttpRequest.abort, monitoring data for this ajax call may be incorrect: \"\n+                        + Microsoft.ApplicationInsights.Util.dump(e));\n+                }\n \n                         return originalAbort.apply(this, arguments);\n                     };\n                 }\n \n-                ///<summary>Intercept onreadystatechange callback</summary>\n-                ///<returns>True, if onreadystatechange is intercepted, otherwise false</returns>\n-                function interceptOnReadyStateChange() {\n+        ///<summary>instrument onreadystatechange callback</summary>\n+        ///<returns>True, if onreadystatechange is instrumented, otherwise false</returns>\n+        private instrumentOnReadyStateChange(xhr: XMLHttpRequest) {\n                     var result = false;\n \n-                    // do not intercept onreadystatechange if it is defined and not a function, because we are not able to call original function in this case, which happends on Firefox 13 and lower\n-                    if (extensions.IsNullOrUndefined(this.onreadystatechange) || (typeof (this.onreadystatechange) === \"function\")) {\n-                        if ((typeof (this.onreadystatechange) === \"function\") && (this.onreadystatechange.name !== \"onreadystatechangeWrapper\")) {\n-                            this.ajaxData.originalOnreadystatechage = this.onreadystatechange;\n-                        }\n-                        this.onreadystatechange = onreadystatechangeWrapper;\n+            // do not instrument onreadystatechange if it is defined and not a function, because we are not able to call original function in this case, which happends on Firefox 13 and lower\n+            if (extensions.IsNullOrUndefined(xhr.onreadystatechange) ||\n+                (typeof (xhr.onreadystatechange) === \"function\" && !(<any>xhr.onreadystatechange).instrumentedByAppInsights)) {\n+                (<any>xhr).ajaxData.originalOnreadystatechage = (<any>xhr).onreadystatechange;\n+                (<any>xhr).onreadystatechange = this.onreadystatechangeWrapper(xhr);\n                         result = true;\n                     }\n \n                     return result;\n                 }\n \n-                function attachToOnReadyStateChange() {\n-                    this.ajaxData.onreadystatechangeCallbackAttached = commands.AttachEvent(this, \"readystatechange\", onreadyStateChangeCallback);\n+        private attachToOnReadyStateChange(xhr: XMLHttpRequest) {\n+            var ajaxMonitorInstance = this;\n+            (<any>xhr).ajaxData.onreadystatechangeCallbackAttached = EventHelper.AttachEvent(xhr, \"readystatechange\", () => {\n+                try {\n+                    ajaxMonitorInstance.onreadyStateChangeCallback(xhr);\n+                } catch (e) {\n+                    _InternalLogging.throwInternalNonUserActionable(\n+                        LoggingSeverity.CRITICAL,\n+                        \"Failed to monitor XMLHttpRequest 'readystatechange' event handler, monitoring data for this ajax call may be incorrect: \"\n+                        + Microsoft.ApplicationInsights.Util.dump(e));\n+                }\n+            });\n                 }\n \n-                function onreadyStateChangeCallback() {\n-                    if (isMonitoredInstance.call(this)) {\n-                        if (this.onreadystatechange !== onreadystatechangeWrapper) {\n-\n-                            if (this.readyState < 3) {\n+        private onreadyStateChangeCallback(xhr: XMLHttpRequest) {\n+            if (this.isMonitoredInstance(xhr)) {\n+                if (!xhr.onreadystatechange || !(<any>xhr.onreadystatechange).instrumentedByAppInsights) {\n+                    if (xhr.readyState < 3) {\n \n                                 // it is possible to define onreadystatechange event after xhr.send method was invoked.\n-                                // intercepting xhr.onreadystatechange in order to measure callback time\n-                                interceptOnReadyStateChange.call(this);\n+                        // instrumenting xhr.onreadystatechange in order to measure callback time\n+                        this.instrumentOnReadyStateChange(xhr);\n                             }\n                             else {\n \n                                 // On Firefox 13- we cannot override readystatechange, because it is not a function. \n                                 // In this case we don't include callback time in Ajax Total time on this browser\n-                                onReadStateChangePrefix.call(this);\n-                                onReadyStateChangePostfix.call(this);\n+                        this.onReadStateChangePrefix(xhr);\n+                        this.onReadyStateChangePostfix(xhr);\n                             }\n                         }\n                     }\n                 }\n \n-                function onreadystatechangeWrapper() {\n-                    if (isMonitoredInstance.call(this)) {\n-                        onReadStateChangePrefix.call(this);\n+        private onreadystatechangeWrapper(xhr: XMLHttpRequest) {\n+            var ajaxMonitorInstance = this;\n+            var wrapper = () => {\n+                try {\n+                    // NOTE: this is onreadystatechange event handler of XMLHttpRequest. Therefore 'this' refers to the current instance of XMLHttpRequest.\n+                    if (ajaxMonitorInstance.isMonitoredInstance(xhr)) {\n+                        ajaxMonitorInstance.onReadStateChangePrefix(xhr);\n                         try {\n-\n-                            // customer's callback can raise exception. We need to proceed monitor ajax call in this case as well.\n-                            if (!extensions.IsNullOrUndefined(this.ajaxData.originalOnreadystatechage)) {\n-                                this.ajaxData.originalOnreadystatechage.call(this);\n+                            if (!extensions.IsNullOrUndefined((<any>xhr).ajaxData.originalOnreadystatechage)) {\n+                                (<any>xhr).ajaxData.originalOnreadystatechage.call(xhr);\n                             }\n                         } catch (ex) {\n-                            this.ajaxData.clientFailure = 1;\n+                            (<any>xhr).ajaxData.clientFailure = 1;\n                             throw ex;\n-\n                         } finally {\n-                            if (!extensions.IsNullOrUndefined(this.ajaxData.originalOnreadystatechage)) {\n-                                commands.TryCatchTraceWrapper.call(this, \"callbackFinishedTime\", function () {\n-                                    if (this.readyState === 4) {\n-                                        this.ajaxData.callbackFinishedTime = dateTime.Now();\n+                            if (!extensions.IsNullOrUndefined((<any>xhr).ajaxData.originalOnreadystatechage)) {\n+                                if ((<any>this).readyState === 4) {\n+                                    (<any>this).ajaxData.callbackFinishedTime = dateTime.Now();\n                                     }\n-                                });\n                             }\n \n-                            onReadyStateChangePostfix.call(this);\n+                            ajaxMonitorInstance.onReadyStateChangePostfix(xhr);\n                         }\n                     }\n-                };\n+                } catch (e) {\n+                    _InternalLogging.throwInternalNonUserActionable(\n+                        LoggingSeverity.CRITICAL,\n+                        \"Failed to monitor XMLHttpRequest.onreadystatechange, monitoring data for this ajax call may be incorrect: \"\n+                        + Microsoft.ApplicationInsights.Util.dump(e));\n+                }\n+                        }\n+            (<any>wrapper).instrumentedByAppInsights = true;\n+\n+            return wrapper;\n+                    }\n \n-                function onReadStateChangePrefix() {\n-                    switch (this.readyState) {\n+        private onReadStateChangePrefix(xhr: XMLHttpRequest) {\n+            switch (xhr.readyState) {\n                         case 3:\n-                            commands.TryCatchTraceWrapper.call(this, \"readyState(3)\", function () {\n-                                this.ajaxData.responseStartedTime = dateTime.Now();\n-                            });\n+                    (<any>xhr).ajaxData.responseStartedTime = dateTime.Now();\n                             break;\n                         case 4:\n-                            commands.TryCatchTraceWrapper.call(this, \"readyState(4)\", collectResponseData);\n+                    this.collectResponseData(xhr);\n                             break;\n                     }\n                 }\n \n-                function onReadyStateChangePostfix() {\n-                    if (this.readyState === 4) {\n-                        onAjaxComplete.call(this);\n+        private onReadyStateChangePostfix(xhr: XMLHttpRequest) {\n+            if (xhr.readyState === 4) {\n+                this.onAjaxComplete(xhr);\n                     }\n                 }\n \n-                function onAjaxComplete() {\n-                    commands.TryCatchTraceWrapper.call(this, \"publishData\", function () {\n-                        this.ajaxData.CalculateMetrics();\n+        private onAjaxComplete(xhr: XMLHttpRequest) {\n+            try {\n+                (<any>xhr).ajaxData.CalculateMetrics();\n \n                         var successStatuses = [200, 201, 202, 203, 204, 301, 302, 303, 304];\n \n-                        appInsights.trackAjax(\n-                            this.ajaxData.getAbsoluteUrl(),\n-                            this.ajaxData.async,\n-                            this.ajaxData.ajaxTotalDuration,\n-                            successStatuses.indexOf(+this.ajaxData.status) != -1\n+                this.appInsights.trackAjax(\n+                    (<any>xhr).ajaxData.getAbsoluteUrl(),","path":"JavaScript/JavaScriptSDK/ajax/ajax.ts","position":631,"original_position":631,"commit_id":"722e2d956f843905b74e14e74a0115eb81630fd1","original_commit_id":"722e2d956f843905b74e14e74a0115eb81630fd1","user":{"login":"AlexBulankou","id":11968377,"avatar_url":"https://avatars.githubusercontent.com/u/11968377?v=3","gravatar_id":"","url":"https://api.github.com/users/AlexBulankou","html_url":"https://github.com/AlexBulankou","followers_url":"https://api.github.com/users/AlexBulankou/followers","following_url":"https://api.github.com/users/AlexBulankou/following{/other_user}","gists_url":"https://api.github.com/users/AlexBulankou/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexBulankou/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexBulankou/subscriptions","organizations_url":"https://api.github.com/users/AlexBulankou/orgs","repos_url":"https://api.github.com/users/AlexBulankou/repos","events_url":"https://api.github.com/users/AlexBulankou/events{/privacy}","received_events_url":"https://api.github.com/users/AlexBulankou/received_events","type":"User","site_admin":false},"body":"Agreed on the name=host. Looks like we need to change in RDD constructor to continue using absolute url as command name, but use just pathname as RDD name?\r\nWhat's interesting though is that dependency property that used for grouping and for displaying in properties is already just host as I checked. Looks like backend is adjusting it?:\r\n\r\n![image](https://cloud.githubusercontent.com/assets/11968377/11399221/c5de3558-933a-11e5-8b15-2cbc3c0678b0.png)\r\n\r\n\r\n\r\n","created_at":"2015-11-25T14:07:23Z","updated_at":"2015-11-25T14:07:23Z","html_url":"https://github.com/Microsoft/ApplicationInsights-JS/pull/83#discussion_r45869681","pull_request_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/83","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/comments/45869681"},"html":{"href":"https://github.com/Microsoft/ApplicationInsights-JS/pull/83#discussion_r45869681"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/83"}}},"pull_request":{"url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/83","id":51725687,"html_url":"https://github.com/Microsoft/ApplicationInsights-JS/pull/83","diff_url":"https://github.com/Microsoft/ApplicationInsights-JS/pull/83.diff","patch_url":"https://github.com/Microsoft/ApplicationInsights-JS/pull/83.patch","issue_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues/83","number":83,"state":"open","locked":false,"title":"Refactoring ajax monitoring code","user":{"login":"MaxShehovtsov","id":10049593,"avatar_url":"https://avatars.githubusercontent.com/u/10049593?v=3","gravatar_id":"","url":"https://api.github.com/users/MaxShehovtsov","html_url":"https://github.com/MaxShehovtsov","followers_url":"https://api.github.com/users/MaxShehovtsov/followers","following_url":"https://api.github.com/users/MaxShehovtsov/following{/other_user}","gists_url":"https://api.github.com/users/MaxShehovtsov/gists{/gist_id}","starred_url":"https://api.github.com/users/MaxShehovtsov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MaxShehovtsov/subscriptions","organizations_url":"https://api.github.com/users/MaxShehovtsov/orgs","repos_url":"https://api.github.com/users/MaxShehovtsov/repos","events_url":"https://api.github.com/users/MaxShehovtsov/events{/privacy}","received_events_url":"https://api.github.com/users/MaxShehovtsov/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-11-24T22:19:56Z","updated_at":"2015-11-25T14:07:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b91b12686bc5a49715c3781e3bb2b09a5082936a","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/83/commits","review_comments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/83/comments","review_comment_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues/83/comments","statuses_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/statuses/722e2d956f843905b74e14e74a0115eb81630fd1","head":{"label":"Microsoft:ajaxRefactor","ref":"ajaxRefactor","sha":"722e2d956f843905b74e14e74a0115eb81630fd1","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":33373292,"name":"ApplicationInsights-JS","full_name":"Microsoft/ApplicationInsights-JS","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/ApplicationInsights-JS","description":"Microsoft Application Insights SDK for JavaScript","fork":false,"url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS","forks_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/forks","keys_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/teams","hooks_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/events","assignees_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/tags","blobs_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/languages","stargazers_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/subscription","commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/merges","archive_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/downloads","issues_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/releases{/id}","created_at":"2015-04-03T17:01:17Z","updated_at":"2015-11-15T11:55:05Z","pushed_at":"2015-11-24T22:19:57Z","git_url":"git://github.com/Microsoft/ApplicationInsights-JS.git","ssh_url":"git@github.com:Microsoft/ApplicationInsights-JS.git","clone_url":"https://github.com/Microsoft/ApplicationInsights-JS.git","svn_url":"https://github.com/Microsoft/ApplicationInsights-JS","homepage":null,"size":5024,"stargazers_count":24,"watchers_count":24,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":11,"mirror_url":null,"open_issues_count":19,"forks":11,"open_issues":19,"watchers":24,"default_branch":"master"}},"base":{"label":"Microsoft:master","ref":"master","sha":"072e1ac1a537ac6d65448b463fa2d11d095c5a91","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":33373292,"name":"ApplicationInsights-JS","full_name":"Microsoft/ApplicationInsights-JS","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/ApplicationInsights-JS","description":"Microsoft Application Insights SDK for JavaScript","fork":false,"url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS","forks_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/forks","keys_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/teams","hooks_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/events","assignees_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/tags","blobs_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/languages","stargazers_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/subscription","commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/merges","archive_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/downloads","issues_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/releases{/id}","created_at":"2015-04-03T17:01:17Z","updated_at":"2015-11-15T11:55:05Z","pushed_at":"2015-11-24T22:19:57Z","git_url":"git://github.com/Microsoft/ApplicationInsights-JS.git","ssh_url":"git@github.com:Microsoft/ApplicationInsights-JS.git","clone_url":"https://github.com/Microsoft/ApplicationInsights-JS.git","svn_url":"https://github.com/Microsoft/ApplicationInsights-JS","homepage":null,"size":5024,"stargazers_count":24,"watchers_count":24,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":11,"mirror_url":null,"open_issues_count":19,"forks":11,"open_issues":19,"watchers":24,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/83"},"html":{"href":"https://github.com/Microsoft/ApplicationInsights-JS/pull/83"},"issue":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues/83"},"comments":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/issues/83/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/83/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/pulls/83/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-JS/statuses/722e2d956f843905b74e14e74a0115eb81630fd1"}}}}