{"action":"created","comment":{"url":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/comments/40228299","id":40228299,"diff_hunk":"@@ -0,0 +1,404 @@\n+<pre class='metadata'>\n+Title: Web Background Synchronization\n+Status: UD\n+ED: https://slightlyoff.github.io/BackgroundSync/spec/\n+Shortname: foreign-fetch\n+Level: 1\n+Editor: Josh Karlin, Google, jkarlin@chromium.org\n+Editor: Marijn Kruisselbrink, Google, mek@chromium.org\n+Abstract: This specification describes a method that enables web applications to synchronize data in the background.\n+Group: personal\n+Repository: slightlyoff/BackgroundSync\n+Link Defaults: html (dfn) allowed to show a popup/event handler idl attribute/global object/in parallel/incumbent settings object/perform a microtask checkpoint/queue a task/script execution environment\n+</pre>\n+\n+<pre class=biblio>\n+{\n+  \"promises-guide\": {\n+    \"href\": \"https://www.w3.org/2001/tag/doc/promises-guide\",\n+    \"title\": \"Writing Promise-Using Specifications\",\n+    \"date\": \"24 July 2015\",\n+    \"status\": \"Finding of the W3C TAG\",\n+    \"publisher\": \"W3C TAG\"\n+  }\n+}\n+</pre>\n+\n+<pre class=\"anchors\">\n+spec: ecma-262; urlPrefix: http://www.ecma-international.org/ecma-262/6.0/\n+    type: dfn\n+        text: Assert; url: sec-algorithm-conventions\n+\n+spec: html; urlPrefix: https://html.spec.whatwg.org/\n+    type: dfn\n+        text: trusted; url: concept-events-trusted\n+\n+spec: powerful-features; urlPrefix: https://w3c.github.io/webappsec/specs/powerfulfeatures/#\n+    type: dfn\n+        text: secure context; url: secure-context\n+\n+spec: promises-guide; urlPrefix: https://www.w3.org/2001/tag/doc/promises-guide#\n+    type: dfn\n+        text: A new promise; url: a-new-promise\n+        text: A promise rejected with; url: a-promise-rejected-with\n+        text: Reject; url: reject-promise\n+        text: Resolve; url: resolve-promise\n+        text: Transforming; url: transforming-by\n+        text: Upon fulfillment; url: upon-fulfillment\n+        text: Upon rejection; url: upon-rejection\n+        text: Waiting for all; url: waiting-for-all\n+\n+spec: service-workers; urlPrefix: https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html\n+    type: dfn\n+        text: active worker; url: dfn-active-worker\n+        text: client; url: dfn-service-worker-client\n+        text: control; url: dfn-control\n+        text: extended lifetime promises; url: dfn-extend-lifetime-promises\n+        text: handle functional event; url: handle-functional-event-algorithm\n+        text: service worker; url: service-worker-concept\n+        text: service worker registration; url: service-worker-registration-concept\n+        text: termination; url: terminate-service-worker-algorithm\n+    type: interface\n+        text: ExtendableEvent; url: extendable-event-interface\n+        text: ExtendableEventInit; url: extendable-event-init-dictionary\n+        text: ServiceWorkerGlobalScope; url: service-worker-global-scope-interface\n+        text: ServiceWorkerRegistration; url: service-worker-registration-interface\n+\n+spec: WebIDL; urlPrefix: https://heycam.github.io/webidl/#\n+    type: exception\n+        text: AbortError; url: aborterror\n+        text: InvalidAccessError; url: invalidaccesserror\n+        text: InvalidModificationError; url: invalidmodificationerror\n+        text: NetworkError; url: networkerror\n+        text: NotFoundError; url: notfounderror\n+        text: NotSupportedError; url: notsupportederror\n+        text: SecurityError; url: securityerror\n+        text: SyntaxError; url: syntaxerror\n+    type: interface\n+        text: DOMString; url: idl-DOMString\n+        text: sequence; url: idl-sequence\n+</pre>\n+\n+<section>\n+  <h2 id='introduction'>Introduction</h2>\n+\n+  <em>This section is non-normative.</em>\n+\n+  Web Applications often run in environments with unreliable networks (e.g., mobile phones) and unknown lifetimes (the browser might be killed or the user might navigate away). This makes it difficult to  synchronize client data from web apps (such as photo uploads, document changes, or composed emails) with servers. If the browser closes or the user navigates away before synchronization can complete, the app must wait until the user revisits the page to try again. This specification provides a new onsync <a>service worker</a> event which can fire <a>in the background</a> so that synchronization attempts can continue despite adverse conditions when initially requested. This API is intended to reduce the time between content creation and content synchronization with the server.\n+\n+  As this API relies on service workers, functionality provided by this API is only available in a <a>secure context</a>.\n+</section>\n+\n+<section>\n+  <h2 id=\"concepts\">Concepts</h2>\n+\n+  The sync event is considered to run <dfn>in the background</dfn> if the user agent is either closed or no service worker clients (controlled or uncontrolled) exist for the corresponding service worker registration.\n+</section>\n+\n+<section>\n+  <h2 id=\"constructs\">Constructs</h2>\n+  A <a>service worker registration</a> has an associated <dfn>list of sync registrations</dfn> whose element type is a <a>sync registration</a>.\n+\n+  A <dfn>sync registration</dfn> is a tuple consisting of a <a>tag</a> and a <a lt=\"registration state\">state</a>.\n+\n+  A <a>sync registration</a> has an associated <dfn>tag</dfn>, a string.\n+\n+  A <a>sync registration</a> has an associated <dfn>registration state</dfn>, which is one of <dfn>pending</dfn>, <dfn>firing</dfn>, <dfn>unregisteredWhileFiring</dfn>, <dfn>unregistered</dfn>, <dfn>success</dfn> or <dfn>failed</dfn>. It is initially set to <a>pending</a>.\n+\n+  A <a>sync registration</a> has an associated <a>service worker registration</a>. It is initially set to null.\n+\n+  A <a>registration state</a> is a <dfn>final registration state</dfn> if it is one of <a>unregistered</a>, <a>success</a>, or <a>failed</a>.\n+\n+  A <a>registration state</a> is a <dfn>firing registration state</dfn> if it is one of <a>firing</a> or <a>unregisteredWhileFiring</a>.\n+\n+  Within one <a>list of sync registrations</a> each <a>sync registration</a> MUST have a unique <a>tag</a>.\n+</section>\n+\n+<section>\n+  <h2 id=\"privacy-considerations\">Privacy Considerations</h2>\n+\n+  <section>\n+    <h3 id=\"location-tracking\">Location Tracking</h3>\n+    Fetch requests within the onsync event while <a>in the background</a> may reveal the client's IP address to the server after the user left the page. The user agent SHOULD limit tracking by capping the number of retries and duration of sync events.\n+  </section>\n+\n+  <section>\n+    <h3 id=\"history-leaking\">History Leaking</h3>\n+    Fetch requests within the onsync event while <a>in the background</a> may reveal something about the client's navigation history to passive eavesdroppers. For instance, the client might visit site https://example.com, which registers a sync event, but doesn't fire until after the user has navigated away from the page and changed networks. Passive eavesdroppers on the new network may see the fetch requests that the onsync event makes. The fetch requests are HTTPS so the request contents will not be leaked but the domain may be (via DNS lookups and IP address of the request).\n+\n+    Issue: Nothing is limiting fetch requests to be HTTPS only.","path":"spec/index.bs","position":134,"original_position":129,"commit_id":"0dcc7211133ba2c58cc28b730cd3b447d4296594","original_commit_id":"166889ae9843ddca474f16c00904954ce06b13a9","user":{"login":"jkarlin","id":6920902,"avatar_url":"https://avatars.githubusercontent.com/u/6920902?v=3","gravatar_id":"","url":"https://api.github.com/users/jkarlin","html_url":"https://github.com/jkarlin","followers_url":"https://api.github.com/users/jkarlin/followers","following_url":"https://api.github.com/users/jkarlin/following{/other_user}","gists_url":"https://api.github.com/users/jkarlin/gists{/gist_id}","starred_url":"https://api.github.com/users/jkarlin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkarlin/subscriptions","organizations_url":"https://api.github.com/users/jkarlin/orgs","repos_url":"https://api.github.com/users/jkarlin/repos","events_url":"https://api.github.com/users/jkarlin/events{/privacy}","received_events_url":"https://api.github.com/users/jkarlin/received_events","type":"User","site_admin":false},"body":"We can update the history leaking privacy section to say that if only secure connections are allowed then only X will be leaked, if non-secure requests are allowed then Y can be leaked.\r\n\r\nI believe in Chrome today fetches from ServiceWorkers are secure only.","created_at":"2015-09-23T16:57:02Z","updated_at":"2015-09-23T16:57:02Z","html_url":"https://github.com/slightlyoff/BackgroundSync/pull/88#discussion_r40228299","pull_request_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/88","_links":{"self":{"href":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/comments/40228299"},"html":{"href":"https://github.com/slightlyoff/BackgroundSync/pull/88#discussion_r40228299"},"pull_request":{"href":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/88"}}},"pull_request":{"url":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/88","id":45731020,"html_url":"https://github.com/slightlyoff/BackgroundSync/pull/88","diff_url":"https://github.com/slightlyoff/BackgroundSync/pull/88.diff","patch_url":"https://github.com/slightlyoff/BackgroundSync/pull/88.patch","issue_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/issues/88","number":88,"state":"open","locked":false,"title":"Rewrite spec using bikeshed.","user":{"login":"mkruisselbrink","id":5649,"avatar_url":"https://avatars.githubusercontent.com/u/5649?v=3","gravatar_id":"","url":"https://api.github.com/users/mkruisselbrink","html_url":"https://github.com/mkruisselbrink","followers_url":"https://api.github.com/users/mkruisselbrink/followers","following_url":"https://api.github.com/users/mkruisselbrink/following{/other_user}","gists_url":"https://api.github.com/users/mkruisselbrink/gists{/gist_id}","starred_url":"https://api.github.com/users/mkruisselbrink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkruisselbrink/subscriptions","organizations_url":"https://api.github.com/users/mkruisselbrink/orgs","repos_url":"https://api.github.com/users/mkruisselbrink/repos","events_url":"https://api.github.com/users/mkruisselbrink/events{/privacy}","received_events_url":"https://api.github.com/users/mkruisselbrink/received_events","type":"User","site_admin":false},"body":"Besides changing the tool used, this also rephrases some of the algorithms,\r\nand tries to make some behavior more explicit.\r\n\r\nspec/index.html is autogenerated from spec/index.bs using the bikeshed tool.\r\n\r\nThe new footer.include and default.css files should be temporary until we've\r\nfigure out what the corect template should be for whatever group this spec is\r\ngoing to be developed in.","created_at":"2015-09-22T23:46:05Z","updated_at":"2015-09-23T16:57:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f9ccf19c30cd5af038b60b55de04c0ed25ee0565","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/88/commits","review_comments_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/88/comments","review_comment_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/comments{/number}","comments_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/issues/88/comments","statuses_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/statuses/0dcc7211133ba2c58cc28b730cd3b447d4296594","head":{"label":"mkruisselbrink:bikeshed","ref":"bikeshed","sha":"0dcc7211133ba2c58cc28b730cd3b447d4296594","user":{"login":"mkruisselbrink","id":5649,"avatar_url":"https://avatars.githubusercontent.com/u/5649?v=3","gravatar_id":"","url":"https://api.github.com/users/mkruisselbrink","html_url":"https://github.com/mkruisselbrink","followers_url":"https://api.github.com/users/mkruisselbrink/followers","following_url":"https://api.github.com/users/mkruisselbrink/following{/other_user}","gists_url":"https://api.github.com/users/mkruisselbrink/gists{/gist_id}","starred_url":"https://api.github.com/users/mkruisselbrink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkruisselbrink/subscriptions","organizations_url":"https://api.github.com/users/mkruisselbrink/orgs","repos_url":"https://api.github.com/users/mkruisselbrink/repos","events_url":"https://api.github.com/users/mkruisselbrink/events{/privacy}","received_events_url":"https://api.github.com/users/mkruisselbrink/received_events","type":"User","site_admin":false},"repo":{"id":42952196,"name":"BackgroundSync","full_name":"mkruisselbrink/BackgroundSync","owner":{"login":"mkruisselbrink","id":5649,"avatar_url":"https://avatars.githubusercontent.com/u/5649?v=3","gravatar_id":"","url":"https://api.github.com/users/mkruisselbrink","html_url":"https://github.com/mkruisselbrink","followers_url":"https://api.github.com/users/mkruisselbrink/followers","following_url":"https://api.github.com/users/mkruisselbrink/following{/other_user}","gists_url":"https://api.github.com/users/mkruisselbrink/gists{/gist_id}","starred_url":"https://api.github.com/users/mkruisselbrink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkruisselbrink/subscriptions","organizations_url":"https://api.github.com/users/mkruisselbrink/orgs","repos_url":"https://api.github.com/users/mkruisselbrink/repos","events_url":"https://api.github.com/users/mkruisselbrink/events{/privacy}","received_events_url":"https://api.github.com/users/mkruisselbrink/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mkruisselbrink/BackgroundSync","description":"A design and spec for ServiceWorker-based background synchronization","fork":true,"url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync","forks_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/forks","keys_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/teams","hooks_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/hooks","issue_events_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/issues/events{/number}","events_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/events","assignees_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/assignees{/user}","branches_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/branches{/branch}","tags_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/tags","blobs_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/git/refs{/sha}","trees_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/statuses/{sha}","languages_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/languages","stargazers_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/stargazers","contributors_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/contributors","subscribers_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/subscribers","subscription_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/subscription","commits_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/commits{/sha}","git_commits_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/git/commits{/sha}","comments_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/comments{/number}","issue_comment_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/issues/comments{/number}","contents_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/contents/{+path}","compare_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/merges","archive_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/downloads","issues_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/issues{/number}","pulls_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/pulls{/number}","milestones_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/milestones{/number}","notifications_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/labels{/name}","releases_url":"https://api.github.com/repos/mkruisselbrink/BackgroundSync/releases{/id}","created_at":"2015-09-22T18:17:13Z","updated_at":"2015-09-22T18:17:14Z","pushed_at":"2015-09-23T16:33:47Z","git_url":"git://github.com/mkruisselbrink/BackgroundSync.git","ssh_url":"git@github.com:mkruisselbrink/BackgroundSync.git","clone_url":"https://github.com/mkruisselbrink/BackgroundSync.git","svn_url":"https://github.com/mkruisselbrink/BackgroundSync","homepage":null,"size":517,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"slightlyoff:master","ref":"master","sha":"ad27ef8404894542431b594592b598ac5002f847","user":{"login":"slightlyoff","id":97331,"avatar_url":"https://avatars.githubusercontent.com/u/97331?v=3","gravatar_id":"","url":"https://api.github.com/users/slightlyoff","html_url":"https://github.com/slightlyoff","followers_url":"https://api.github.com/users/slightlyoff/followers","following_url":"https://api.github.com/users/slightlyoff/following{/other_user}","gists_url":"https://api.github.com/users/slightlyoff/gists{/gist_id}","starred_url":"https://api.github.com/users/slightlyoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slightlyoff/subscriptions","organizations_url":"https://api.github.com/users/slightlyoff/orgs","repos_url":"https://api.github.com/users/slightlyoff/repos","events_url":"https://api.github.com/users/slightlyoff/events{/privacy}","received_events_url":"https://api.github.com/users/slightlyoff/received_events","type":"User","site_admin":false},"repo":{"id":18663188,"name":"BackgroundSync","full_name":"slightlyoff/BackgroundSync","owner":{"login":"slightlyoff","id":97331,"avatar_url":"https://avatars.githubusercontent.com/u/97331?v=3","gravatar_id":"","url":"https://api.github.com/users/slightlyoff","html_url":"https://github.com/slightlyoff","followers_url":"https://api.github.com/users/slightlyoff/followers","following_url":"https://api.github.com/users/slightlyoff/following{/other_user}","gists_url":"https://api.github.com/users/slightlyoff/gists{/gist_id}","starred_url":"https://api.github.com/users/slightlyoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slightlyoff/subscriptions","organizations_url":"https://api.github.com/users/slightlyoff/orgs","repos_url":"https://api.github.com/users/slightlyoff/repos","events_url":"https://api.github.com/users/slightlyoff/events{/privacy}","received_events_url":"https://api.github.com/users/slightlyoff/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/slightlyoff/BackgroundSync","description":"A design and spec for ServiceWorker-based background synchronization","fork":false,"url":"https://api.github.com/repos/slightlyoff/BackgroundSync","forks_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/forks","keys_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/keys{/key_id}","collaborators_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/teams","hooks_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/hooks","issue_events_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/issues/events{/number}","events_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/events","assignees_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/assignees{/user}","branches_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/branches{/branch}","tags_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/tags","blobs_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/git/refs{/sha}","trees_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/git/trees{/sha}","statuses_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/statuses/{sha}","languages_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/languages","stargazers_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/stargazers","contributors_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/contributors","subscribers_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/subscribers","subscription_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/subscription","commits_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/commits{/sha}","git_commits_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/git/commits{/sha}","comments_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/comments{/number}","issue_comment_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/issues/comments{/number}","contents_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/contents/{+path}","compare_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/compare/{base}...{head}","merges_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/merges","archive_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/downloads","issues_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/issues{/number}","pulls_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls{/number}","milestones_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/milestones{/number}","notifications_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/labels{/name}","releases_url":"https://api.github.com/repos/slightlyoff/BackgroundSync/releases{/id}","created_at":"2014-04-11T05:19:38Z","updated_at":"2015-09-23T15:11:12Z","pushed_at":"2015-09-23T16:33:41Z","git_url":"git://github.com/slightlyoff/BackgroundSync.git","ssh_url":"git@github.com:slightlyoff/BackgroundSync.git","clone_url":"https://github.com/slightlyoff/BackgroundSync.git","svn_url":"https://github.com/slightlyoff/BackgroundSync","homepage":null,"size":517,"stargazers_count":147,"watchers_count":147,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":20,"mirror_url":null,"open_issues_count":26,"forks":20,"open_issues":26,"watchers":147,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/88"},"html":{"href":"https://github.com/slightlyoff/BackgroundSync/pull/88"},"issue":{"href":"https://api.github.com/repos/slightlyoff/BackgroundSync/issues/88"},"comments":{"href":"https://api.github.com/repos/slightlyoff/BackgroundSync/issues/88/comments"},"review_comments":{"href":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/88/comments"},"review_comment":{"href":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/slightlyoff/BackgroundSync/pulls/88/commits"},"statuses":{"href":"https://api.github.com/repos/slightlyoff/BackgroundSync/statuses/0dcc7211133ba2c58cc28b730cd3b447d4296594"}}}}