{"action":"created","comment":{"url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/comments/201433859","pull_request_review_id":135935724,"id":201433859,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMTQzMzg1OQ==","diff_hunk":"@@ -60,78 +39,77 @@ var ATB = (() => {\n                 // handle anchor tags for pages like about#newsletter\n                 let urlParts = request.url.split('#')\n                 let newURL = request.url\n+                let anchor = ''\n \n                 // if we have an anchor tag\n                 if (urlParts.length === 2) {\n-                    newURL = urlParts[0] + '&atb=' + atbSetting + '#' + urlParts[1]\n+                    newURL = urlParts[0]\n+                    anchor = '#' + urlParts[1]\n+                }\n+\n+                if (request.url.indexOf('?') !== -1) {\n+                    newURL += '&'\n                 } else {\n-                    newURL = request.url + '&atb=' + atbSetting\n+                    newURL += '?'\n                 }\n \n+                newURL += 'atb=' + atbSetting + anchor\n+\n                 return {redirectUrl: newURL}\n             }\n         },\n \n         setInitialVersions: () => {\n-            if (!settings.getSetting('atb')) {\n-                let versions = ATB.calculateInitialVersions()\n-                if (versions && versions.major && versions.minor) {\n-                    settings.updateSetting('atb', `v${versions.major}-${versions.minor}`)\n-                }\n-            }\n-        },\n+            if (settings.getSetting('atb')) return Promise.resolve()\n+\n+            let randomValue = Math.ceil(Math.random() * 1e7)\n+            let url = ddgAtbURL + randomValue\n \n-        calculateInitialVersions: () => {\n-            let oneWeek = 604800000\n-            let oneDay = 86400000\n-            let oneHour = 3600000\n-            let oneMinute = 60000\n-            let estEpoch = 1456290000000\n-            let localDate = new Date()\n-            let localTime = localDate.getTime()\n-            let utcTime = localTime + (localDate.getTimezoneOffset() * oneMinute)\n-            let est = new Date(utcTime + (oneHour * -5))\n-            let dstStartDay = 13 - ((est.getFullYear() - 2016) % 6)\n-            let dstStopDay = 6 - ((est.getFullYear() - 2016) % 6)\n-            let isDST = (est.getMonth() > 2 || (est.getMonth() === 2 && est.getDate() >= dstStartDay)) && (est.getMonth() < 10 || (est.getMonth() === 10 && est.getDate() < dstStopDay))\n-            let epoch = isDST ? estEpoch - oneHour : estEpoch\n-            let timeSinceEpoch = new Date().getTime() - epoch\n-            let majorVersion = Math.ceil(timeSinceEpoch / oneWeek)\n-            let minorVersion = Math.ceil(timeSinceEpoch % oneWeek / oneDay)\n-\n-            return {'major': majorVersion, 'minor': minorVersion}\n+            return load.JSONfromExternalFile(url).then((res) => {\n+                settings.updateSetting('atb', res.data.version)\n+            })\n         },\n \n         setAtbValuesFromSuccessPage: (atb) => {\n-            if (settings.getSetting('set_atb')) { return }\n+            if (!atb) return\n \n             settings.updateSetting('atb', atb)\n+\n+            ATB.finalizeATB()\n+        },\n+\n+        finalizeATB: () => {\n+            let atb = settings.getSetting('atb')\n+\n+            // make this request only once\n+            if (!atb || settings.getSetting('extiSent')) return\n+\n+            settings.updateSetting('extiSent', true)\n             settings.updateSetting('set_atb', atb)\n \n-            let xhr = new XMLHttpRequest()\n-            xhr.open('GET', 'https://duckduckgo.com/exti/?atb=' + atb, true)\n-            xhr.send()\n+            // just a GET request, we only care that the request was made\n+            load.url(`https://duckduckgo.com/exti/?atb=${atb}`)","path":"shared/js/background/atb.es6.js","position":161,"original_position":140,"commit_id":"018bb4061ff38a9f9130b987a63e63bb2005f593","original_commit_id":"0f632b2ff89fc2e10fd3e9481cdaa2f4ce867cc1","user":{"login":"jdorweiler","id":1882892,"node_id":"MDQ6VXNlcjE4ODI4OTI=","avatar_url":"https://avatars1.githubusercontent.com/u/1882892?v=4","gravatar_id":"","url":"https://api.github.com/users/jdorweiler","html_url":"https://github.com/jdorweiler","followers_url":"https://api.github.com/users/jdorweiler/followers","following_url":"https://api.github.com/users/jdorweiler/following{/other_user}","gists_url":"https://api.github.com/users/jdorweiler/gists{/gist_id}","starred_url":"https://api.github.com/users/jdorweiler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdorweiler/subscriptions","organizations_url":"https://api.github.com/users/jdorweiler/orgs","repos_url":"https://api.github.com/users/jdorweiler/repos","events_url":"https://api.github.com/users/jdorweiler/events{/privacy}","received_events_url":"https://api.github.com/users/jdorweiler/received_events","type":"User","site_admin":false},"body":"`update` was to handle users upgrading from legacy extensions to webextensions. Can probably get rid of that now. ","created_at":"2018-07-10T17:42:36Z","updated_at":"2018-07-10T17:42:36Z","html_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension/pull/238#discussion_r201433859","pull_request_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/238","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/comments/201433859"},"html":{"href":"https://github.com/duckduckgo/duckduckgo-privacy-extension/pull/238#discussion_r201433859"},"pull_request":{"href":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/238"}},"in_reply_to_id":199815287},"pull_request":{"url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/238","id":198356444,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk4MzU2NDQ0","html_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension/pull/238","diff_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension/pull/238.diff","patch_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension/pull/238.patch","issue_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues/238","number":238,"state":"open","locked":false,"title":"Tighten ATB, add unit tests","user":{"login":"andrey-p","id":1431577,"node_id":"MDQ6VXNlcjE0MzE1Nzc=","avatar_url":"https://avatars1.githubusercontent.com/u/1431577?v=4","gravatar_id":"","url":"https://api.github.com/users/andrey-p","html_url":"https://github.com/andrey-p","followers_url":"https://api.github.com/users/andrey-p/followers","following_url":"https://api.github.com/users/andrey-p/following{/other_user}","gists_url":"https://api.github.com/users/andrey-p/gists{/gist_id}","starred_url":"https://api.github.com/users/andrey-p/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrey-p/subscriptions","organizations_url":"https://api.github.com/users/andrey-p/orgs","repos_url":"https://api.github.com/users/andrey-p/repos","events_url":"https://api.github.com/users/andrey-p/events{/privacy}","received_events_url":"https://api.github.com/users/andrey-p/received_events","type":"User","site_admin":false},"body":"<!-- Please add the WIP label if the PR isn't complete. -->\r\n\r\n**Reviewer:** @jdorweiler \r\n**CC:** @jkv \r\n\r\n## Description:\r\n- Tightens up ATB pipeline steps\r\n- Adds `dev=1` to all requests made from dev builds of the extension\r\n- Adds the ability to handle errors from the load module\r\n- ... and adds unit test coverage as for the ATB module as much as possible.\r\n\r\nSee inline comments for more info.\r\n\r\n## Steps to test this PR:\r\n\r\nTest the following two scenarios on Chrome, FF and Safari. Note, Safari may need to be put on DDH6 for us to test the entire flow.\r\n\r\n**Case 1: no post-install success page (e.g. if the user installed via the Chrome web store)**\r\n\r\n1. Install the extension with no DDG tabs open\r\n2. The following requests should be made:\r\n    - `atb.js`\r\n    - `/exti?atb=v124-2`\r\n3. Run a search. The following request should be made:\r\n    - `atb.js?atb=v124-2&set_atb=v124-2`\r\n\r\n**Case 2: post-install success page**\r\n\r\n1. Open a browser tab for https://duckduckgo.com/?exti=2\r\n2. Continue with all the steps in case 2.\r\n3. The same URLs should be hit, only the variants should be added (e.g. `exti?atb=v124-2__` or `exti?atb=v124-2ab`\r\n\r\n## Automated tests:\r\n- [ ] Unit tests\r\n- [ ] Integration tests\r\n\r\n###### Reviewer Checklist:\r\n- [ ] **Ensure the PR solves the problem**\r\n- [ ] **Review every line of code**\r\n- [ ] **Ensure the PR does no harm by testing the changes thoroughly**\r\n- [ ] **Get help if you're uncomfortable with any of the above!**\r\n- [ ] Determine if there are any quick wins that improve the implementation\r\n\r\n\r\n###### PR Author Checklist:\r\n- [ ] Get advice or leverage existing code\r\n- [ ] Agree on technical approach with reviewer (if the changes are nuanced)\r\n- [ ] Ensure that there is a testing strategy (and documented non-automated tests)\r\n- [ ] Ensure there is a documented monitoring strategy (if necessary)\r\n- [ ] Consider systems implications \r\n","created_at":"2018-06-29T15:48:09Z","updated_at":"2018-07-10T17:42:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"717d27593ebfbe1d6efe7226f2b8736ce221d218","assignee":{"login":"andrey-p","id":1431577,"node_id":"MDQ6VXNlcjE0MzE1Nzc=","avatar_url":"https://avatars1.githubusercontent.com/u/1431577?v=4","gravatar_id":"","url":"https://api.github.com/users/andrey-p","html_url":"https://github.com/andrey-p","followers_url":"https://api.github.com/users/andrey-p/followers","following_url":"https://api.github.com/users/andrey-p/following{/other_user}","gists_url":"https://api.github.com/users/andrey-p/gists{/gist_id}","starred_url":"https://api.github.com/users/andrey-p/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrey-p/subscriptions","organizations_url":"https://api.github.com/users/andrey-p/orgs","repos_url":"https://api.github.com/users/andrey-p/repos","events_url":"https://api.github.com/users/andrey-p/events{/privacy}","received_events_url":"https://api.github.com/users/andrey-p/received_events","type":"User","site_admin":false},"assignees":[{"login":"andrey-p","id":1431577,"node_id":"MDQ6VXNlcjE0MzE1Nzc=","avatar_url":"https://avatars1.githubusercontent.com/u/1431577?v=4","gravatar_id":"","url":"https://api.github.com/users/andrey-p","html_url":"https://github.com/andrey-p","followers_url":"https://api.github.com/users/andrey-p/followers","following_url":"https://api.github.com/users/andrey-p/following{/other_user}","gists_url":"https://api.github.com/users/andrey-p/gists{/gist_id}","starred_url":"https://api.github.com/users/andrey-p/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrey-p/subscriptions","organizations_url":"https://api.github.com/users/andrey-p/orgs","repos_url":"https://api.github.com/users/andrey-p/repos","events_url":"https://api.github.com/users/andrey-p/events{/privacy}","received_events_url":"https://api.github.com/users/andrey-p/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"jdorweiler","id":1882892,"node_id":"MDQ6VXNlcjE4ODI4OTI=","avatar_url":"https://avatars1.githubusercontent.com/u/1882892?v=4","gravatar_id":"","url":"https://api.github.com/users/jdorweiler","html_url":"https://github.com/jdorweiler","followers_url":"https://api.github.com/users/jdorweiler/followers","following_url":"https://api.github.com/users/jdorweiler/following{/other_user}","gists_url":"https://api.github.com/users/jdorweiler/gists{/gist_id}","starred_url":"https://api.github.com/users/jdorweiler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdorweiler/subscriptions","organizations_url":"https://api.github.com/users/jdorweiler/orgs","repos_url":"https://api.github.com/users/jdorweiler/repos","events_url":"https://api.github.com/users/jdorweiler/events{/privacy}","received_events_url":"https://api.github.com/users/jdorweiler/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/238/commits","review_comments_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/238/comments","review_comment_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/comments{/number}","comments_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues/238/comments","statuses_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/statuses/018bb4061ff38a9f9130b987a63e63bb2005f593","head":{"label":"duckduckgo:andrey/atb-unit-tests","ref":"andrey/atb-unit-tests","sha":"018bb4061ff38a9f9130b987a63e63bb2005f593","user":{"login":"duckduckgo","id":342708,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0MjcwOA==","avatar_url":"https://avatars2.githubusercontent.com/u/342708?v=4","gravatar_id":"","url":"https://api.github.com/users/duckduckgo","html_url":"https://github.com/duckduckgo","followers_url":"https://api.github.com/users/duckduckgo/followers","following_url":"https://api.github.com/users/duckduckgo/following{/other_user}","gists_url":"https://api.github.com/users/duckduckgo/gists{/gist_id}","starred_url":"https://api.github.com/users/duckduckgo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duckduckgo/subscriptions","organizations_url":"https://api.github.com/users/duckduckgo/orgs","repos_url":"https://api.github.com/users/duckduckgo/repos","events_url":"https://api.github.com/users/duckduckgo/events{/privacy}","received_events_url":"https://api.github.com/users/duckduckgo/received_events","type":"Organization","site_admin":false},"repo":{"id":113919648,"node_id":"MDEwOlJlcG9zaXRvcnkxMTM5MTk2NDg=","name":"duckduckgo-privacy-extension","full_name":"duckduckgo/duckduckgo-privacy-extension","owner":{"login":"duckduckgo","id":342708,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0MjcwOA==","avatar_url":"https://avatars2.githubusercontent.com/u/342708?v=4","gravatar_id":"","url":"https://api.github.com/users/duckduckgo","html_url":"https://github.com/duckduckgo","followers_url":"https://api.github.com/users/duckduckgo/followers","following_url":"https://api.github.com/users/duckduckgo/following{/other_user}","gists_url":"https://api.github.com/users/duckduckgo/gists{/gist_id}","starred_url":"https://api.github.com/users/duckduckgo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duckduckgo/subscriptions","organizations_url":"https://api.github.com/users/duckduckgo/orgs","repos_url":"https://api.github.com/users/duckduckgo/repos","events_url":"https://api.github.com/users/duckduckgo/events{/privacy}","received_events_url":"https://api.github.com/users/duckduckgo/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension","description":"DuckDuckGo Privacy Essentials browser extension for Firefox, Chrome, Safari.","fork":false,"url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension","forks_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/forks","keys_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/keys{/key_id}","collaborators_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/teams","hooks_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/hooks","issue_events_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues/events{/number}","events_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/events","assignees_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/assignees{/user}","branches_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/branches{/branch}","tags_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/tags","blobs_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/refs{/sha}","trees_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/trees{/sha}","statuses_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/statuses/{sha}","languages_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/languages","stargazers_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/stargazers","contributors_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/contributors","subscribers_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/subscribers","subscription_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/subscription","commits_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/commits{/sha}","git_commits_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/commits{/sha}","comments_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/comments{/number}","issue_comment_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues/comments{/number}","contents_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/contents/{+path}","compare_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/compare/{base}...{head}","merges_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/merges","archive_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/downloads","issues_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues{/number}","pulls_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls{/number}","milestones_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/milestones{/number}","notifications_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/labels{/name}","releases_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/releases{/id}","deployments_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/deployments","created_at":"2017-12-11T23:26:44Z","updated_at":"2018-07-09T13:12:17Z","pushed_at":"2018-07-10T17:38:47Z","git_url":"git://github.com/duckduckgo/duckduckgo-privacy-extension.git","ssh_url":"git@github.com:duckduckgo/duckduckgo-privacy-extension.git","clone_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension.git","svn_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension","homepage":"https://duckduckgo.com/app","size":26462,"stargazers_count":137,"watchers_count":137,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":13,"mirror_url":null,"archived":false,"open_issues_count":36,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":13,"open_issues":36,"watchers":137,"default_branch":"develop"}},"base":{"label":"duckduckgo:develop","ref":"develop","sha":"3075db77fc06da08caaaa7cf44b75572448e4293","user":{"login":"duckduckgo","id":342708,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0MjcwOA==","avatar_url":"https://avatars2.githubusercontent.com/u/342708?v=4","gravatar_id":"","url":"https://api.github.com/users/duckduckgo","html_url":"https://github.com/duckduckgo","followers_url":"https://api.github.com/users/duckduckgo/followers","following_url":"https://api.github.com/users/duckduckgo/following{/other_user}","gists_url":"https://api.github.com/users/duckduckgo/gists{/gist_id}","starred_url":"https://api.github.com/users/duckduckgo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duckduckgo/subscriptions","organizations_url":"https://api.github.com/users/duckduckgo/orgs","repos_url":"https://api.github.com/users/duckduckgo/repos","events_url":"https://api.github.com/users/duckduckgo/events{/privacy}","received_events_url":"https://api.github.com/users/duckduckgo/received_events","type":"Organization","site_admin":false},"repo":{"id":113919648,"node_id":"MDEwOlJlcG9zaXRvcnkxMTM5MTk2NDg=","name":"duckduckgo-privacy-extension","full_name":"duckduckgo/duckduckgo-privacy-extension","owner":{"login":"duckduckgo","id":342708,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0MjcwOA==","avatar_url":"https://avatars2.githubusercontent.com/u/342708?v=4","gravatar_id":"","url":"https://api.github.com/users/duckduckgo","html_url":"https://github.com/duckduckgo","followers_url":"https://api.github.com/users/duckduckgo/followers","following_url":"https://api.github.com/users/duckduckgo/following{/other_user}","gists_url":"https://api.github.com/users/duckduckgo/gists{/gist_id}","starred_url":"https://api.github.com/users/duckduckgo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duckduckgo/subscriptions","organizations_url":"https://api.github.com/users/duckduckgo/orgs","repos_url":"https://api.github.com/users/duckduckgo/repos","events_url":"https://api.github.com/users/duckduckgo/events{/privacy}","received_events_url":"https://api.github.com/users/duckduckgo/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension","description":"DuckDuckGo Privacy Essentials browser extension for Firefox, Chrome, Safari.","fork":false,"url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension","forks_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/forks","keys_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/keys{/key_id}","collaborators_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/teams","hooks_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/hooks","issue_events_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues/events{/number}","events_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/events","assignees_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/assignees{/user}","branches_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/branches{/branch}","tags_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/tags","blobs_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/refs{/sha}","trees_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/trees{/sha}","statuses_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/statuses/{sha}","languages_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/languages","stargazers_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/stargazers","contributors_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/contributors","subscribers_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/subscribers","subscription_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/subscription","commits_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/commits{/sha}","git_commits_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/git/commits{/sha}","comments_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/comments{/number}","issue_comment_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues/comments{/number}","contents_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/contents/{+path}","compare_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/compare/{base}...{head}","merges_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/merges","archive_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/downloads","issues_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues{/number}","pulls_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls{/number}","milestones_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/milestones{/number}","notifications_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/labels{/name}","releases_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/releases{/id}","deployments_url":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/deployments","created_at":"2017-12-11T23:26:44Z","updated_at":"2018-07-09T13:12:17Z","pushed_at":"2018-07-10T17:38:47Z","git_url":"git://github.com/duckduckgo/duckduckgo-privacy-extension.git","ssh_url":"git@github.com:duckduckgo/duckduckgo-privacy-extension.git","clone_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension.git","svn_url":"https://github.com/duckduckgo/duckduckgo-privacy-extension","homepage":"https://duckduckgo.com/app","size":26462,"stargazers_count":137,"watchers_count":137,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":13,"mirror_url":null,"archived":false,"open_issues_count":36,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":13,"open_issues":36,"watchers":137,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/238"},"html":{"href":"https://github.com/duckduckgo/duckduckgo-privacy-extension/pull/238"},"issue":{"href":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues/238"},"comments":{"href":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/issues/238/comments"},"review_comments":{"href":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/238/comments"},"review_comment":{"href":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/pulls/238/commits"},"statuses":{"href":"https://api.github.com/repos/duckduckgo/duckduckgo-privacy-extension/statuses/018bb4061ff38a9f9130b987a63e63bb2005f593"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"jdorweiler"}}