{"action":"created","comment":{"url":"https://api.github.com/repos/whatwg/fetch/pulls/comments/181540463","pull_request_review_id":112195726,"id":181540463,"diff_hunk":"@@ -2353,6 +2457,310 @@ X-Content-Type-Options           = \"nosniff\" ; case-insensitive</pre>\n <a for=request/destination>script-like</a> or \"<code>style</code>\" are considered as any exploits\n pertain to them. Also, considering \"<code>image</code>\" was not compatible with deployed content.\n \n+<h3 id=token-binding>Token Binding</h3>\n+\n+<p>In order to protect security tokens like HTTP cookies and OAuth tokens, user agents and servers\n+can use a technique known as <dfn export id=concept-token-binding>Token Binding</dfn> to\n+cryptographically associate a given token with a secret\n+known only to a specific user agent\n+(a <dfn export id=concept-token-binding-key>token-binding key</dfn>).\n+The user agent uses a different <a for=/>token-binding key</a>\n+for every different <a for=/>registrable domain</a>.\n+The association of key and token mitigates the risk that attackers\n+can steal the token and use it themselves, as they will not be able to\n+easily replicate the user agent's secret,\n+and therefore will be unable to replicate the cryptographic binding of the token.\n+\n+<p>Details are described in [[TOKBIND-NEGOTIATION]], [[TOKBIND-PROTOCOL]] and\n+[[TOKBIND-HTTPS]] and integration is defined here.\n+\n+<p>A <dfn export id=token-binding-id>token binding ID</dfn> is the non-secret representation\n+of a <a for=/>token-binding key</a>, as described in\n+<a href=\"https://tools.ietf.org/html/draft-ietf-tokbind-protocol#section-3.2\">section 3.2</a>\n+of [[TOKBIND-PROTOCOL]].\n+\n+<p>At a very high level, a user agent negotiates the use of Token Binding with\n+a server when it sets up a TLS connection to the server.\n+It sends its highest supported\n+<dfn export id=concept-token-binding-protocol-version for=connection>token-binding protocol version</dfn>\n+and supported cryptographic algorithms and parameters (the\n+<dfn export id=concept-token-binding-key-parameters for=connection>token-binding key parameters</dfn>)\n+in a <code>token_binding</code> Client Hello Extension, as described in\n+<a href=\"https://tools.ietf.org/html/draft-ietf-tokbind-negotiation#section-2\">section 2</a>\n+of the Token Binding Negotiation spec [[!TOKBIND-NEGOTIATION]].\n+The user agent saves the values of the\n+<a for=connection>token-binding protocol version</a> and\n+<a for=connection>token-binding key parameters</a> that were negotiated for\n+that TLS connection.  The user agent also computes and saves the value of\n+<a for=connection>token-binding Exported Keying Material</a> for that connection.\n+\n+<p>This connection-level metadata is used generate a\n+`<dfn http-header><code>Sec-Token-Binding</code></dfn>` request\n+<a for=/>header</a> on each HTTP request sent using that connection.\n+The header contains the user agent's proof-of-possession for a given\n+origin's <a for=/>token-binding key</a>.\n+(The user agent proves possession of the private key by putting a cryptographic\n+signature in that header.)\n+\n+<p>The server associates ('binds') credentials that it issues to that user agent\n+with a <a for=/>token binding ID</a> in that <a for=/>header</a>.\n+The server also verifies if bound credentials presented to it by a user agent\n+match a <a for=/>token binding ID</a> in that <a for=/>header</a>.\n+\n+<p>The <a for=header>value</a> of the `<a http-header><code>Sec-Token-Binding</code></a>`\n+<a for=/>header</a> is a base64url-encoded string [[!RFC4648]]:\n+\n+<pre>\n+Sec-Token-Binding       = 1*( ALPHA / DIGIT / \"-\" / \"_\" ) *2( \"=\" )\n+</pre>\n+\n+<p>The data in a `<a http-header><code>Sec-Token-Binding</code></a>` <a for=/>header</a> is a\n+<dfn export id=token-binding-message>Token Binding Message</dfn> as specified in\n+<a href=\"https://tools.ietf.org/html/draft-ietf-tokbind-https#section-2\">section 2</a>\n+of the Token Binding over HTTP spec [[!TOKBIND-HTTPS]].\n+A <a for=/>token binding message</a> is a list of <a for=/>token binding</a>s,\n+where each <a for=/>token binding</a> consists of a\n+<a for=/>token binding ID</a>, a <dfn id=concept-token-binding-type>token-binding type</dfn> and a\n+cryptographic signature over the <a for=/>token-binding type</a>, the\n+<a for=connection>token-binding key parameters</a> and the\n+<dfn id=concept-token-binding-ekm for=connection>token-binding Exported Keying Material</dfn>,\n+as described in\n+<a href=\"https://tools.ietf.org/html/draft-ietf-tokbind-protocol#section-3.3\">section 3.3</a>\n+ of [[!TOKBIND-PROTOCOL]].\n+\n+<h4 id=federated-token-binding>Federated Token Binding</h4>\n+\n+<p>In the scenario described above, servers bind tokens to be used by user agents\n+with those servers.\n+To enable existing web authorization protocols to use bound credentials,\n+there is a need to support scenarios where bound credentials issued by one server\n+(e.g., an identity provider) are presented by the user agent to a different server\n+(e.g., a relying party).\n+[[TOKBIND-PROTOCOL]] and [[TOKBIND-HTTPS]] describe support for Federated Token Binding.\n+\n+<p>A <dfn export id=referred-token-binding-id>referred-token-binding ID</dfn> is the\n+<a for=/>token binding ID</a> for a server other than the server to which the\n+<a for=/>request</a> is being sent.\n+\n+Script code from an <a for=/>origin</a> can set a <a for=/>request</a>'s\n+<var>useReferredTokenBinding</var> attribute to ask the user agent to send\n+the <a for=/>token binding ID</a> for that <a for=/>origin</a> as a\n+<a for=/>referred-token-binding ID</a>\n+in the <a for=/>Token Binding Message</a> sent to a target server.\n+\n+<p>E.g., by doing\n+\n+<pre>\n+fetch(\"https://idp.org/issueToken?...\", { useReferredTokenBinding:true })\n+    .then( /* … */ )\n+</pre>\n+\n+a script from <a for=request>origin</a> <code>https://rp.org/</code>\n+can make the user agent disclose the <a for=/>token binding ID</a>\n+used by the user agent for its <a for=request>origin</a>\n+<code>https://rp.org/</code> to the target <a for=request>origin</a>\n+<code>https://idp.org/</code>.\n+The user agent discloses the <a for=/>token binding ID</a> by including a\n+<a for=/>referred-token-binding ID</a> for <a for=request>origin</a>\n+<code>https://rp.org/</code> (in addition to the <a for=/>token binding ID</a>\n+for <a for=request>origin</a> <code>https://idp.org/</code>)\n+in the <a for=/>Token Binding Message</a> that is created for the\n+<a for=/>request</a> to <code>https://idp.org/</code>.\n+\n+<p>Alternately, servers that redirect a user agent to a different server can use the\n+`<dfn http-header><code>Include-Referred-Token-Binding-ID</code></dfn>`\n+response <a for=/>header</a>.\n+\n+<pre>\n+Include-Referred-Token-Binding-ID = %x74.72.75.65 ; \"true\", case-sensitive\n+</pre>\n+\n+<p>The value of this response <a for=/>header</a> is specified in\n+<a href=\"https://tools.ietf.org/html/draft-ietf-tokbind-https#section-5.3\">section 5.3</a>\n+of the Token Binding over HTTP spec [[TOKBIND-HTTPS]].\n+\n+<p>E.g., by setting the\n+`<a http-header><code>Include-Referred-Token-Binding-ID</code></a>`\n+response <a for=/>header</a> to `<code>true</code>` in a redirect response\n+that is sending the user agent to <a for=request>origin</a>\n+<code>https://idp.org/</code>, the <a for=request>origin</a> that\n+issues the redirect <a for=/>response</a> (say <code>https://rp.org/</code> -\n+the \"referring <a for=request>origin</a>\" in the <a for=/>Token Binding</a>\n+sense) tells the user agent to disclose the <a for=/>token binding ID</a>\n+used by the user agent for its <a for=request>origin</a>\n+<code>https://rp.org/</code> to the target <a for=request>origin</a>\n+<code>https://idp.org/</code>.\n+The user agent discloses that <a for=/>token binding ID</a> while processing\n+the `<a http-header><code>Include-Referred-Token-Binding-ID</code></a>`\n+<a for=/>header</a> in the redirect\n+<a for=/>response</a>, by including a <a for=/>referred-token-binding ID</a>\n+for <a for=request>origin</a> <code>https://rp.org/</code>\n+(in addition to the <a for=/>token binding ID</a> for <a for=request>origin</a>\n+<code>https://idp.org/</code>) in the\n+<a for=/>Token Binding Message</a> that is created for the <a for=/>request</a>\n+to <code>https://idp.org/</code>.\n+\n+<h4 id=token-binding-key-store>Token Binding Key Store</h4>\n+\n+<p>The user agent maintains a\n+<dfn id=concept-token-binding-key-store/>token-binding key store</dfn>,\n+where it saves different <a for=/ lt=\"token-binding key\">token-binding keys</a> to be used with different servers.\n+Whenever a <a for=/>token-binding key</a> is needed, the user agent looks it up\n+in the <a for=/>token-binding key store</a>,\n+creating and saving a new <a for=/>token-binding key</a> if one does not exist.\n+The <a for=/>token-binding key store</a> is typically maintained alongside\n+the user agent's cookie store.\n+\n+<h4 id=getting-token-binding-key>Getting a Token Binding Key</h4>\n+\n+<p><dfn abstract-op export id=concept-get-token-binding-key>Get the token-binding key</dfn>\n+for an <a for=/>origin</a> <var>tokenBindingOrigin</var> and\n+<a for=connection>token-binding key parameters</a> <var>tokenBindingKeyParameters</var>,\n+using the user agent's <a for=/>token-binding key store</a>,\n+by running these substeps:\n+\n+<ol>\n+ <li><p>Let <var>keyDomainName</var> be null.\n+\n+ <li><p>If <var>tokenBindingOrigin</var>'s <a for=origin>host</a> is an <a>IPv4 address</a> or an <a>IPv6 address</a>,\n+ set <var>keyDomainName</var> to <var>tokenBindingOrigin</var>'s <a for=origin>host</a>.\n+\n+ <p>Otherwise, set <var>keyDomainName</var> to the\n+ <dfn id=concept-registrable-domain/>registrable domain</dfn> of\n+ <var>tokenBindingOrigin</var>'s host, determined by running the steps in the Algorithm section of\n+ <a href=https://publicsuffix.org/list/>Public Suffix List</a>\n+ [[PUBLIC-SUFFIX]]\n+\n+ <li><p>Let <var>tokenBindingKeyPair</var> be null.\n+\n+ <li><p>Set <var>tokenBindingKeyPair</var> to the result of looking up the\n+ <a for=/>token-binding key</a> pair for <var>keyDomainName</var> and\n+ <var>tokenBindingKeyParameters</var> in the <a for=/>token-binding key store</a>.\n+\n+ <li><p>If <var>tokenBindingKeyPair</var> is null, create a new key pair for\n+ <var>keyDomainName</var> using <var>tokenBindingKeyParameters</var>, save it in the\n+ <a for=/>token-binding key store</a>, and set <var>tokenBindingKeyPair</var> to that new key pair.\n+\n+ <li><p>Return <var>tokenBindingKeyPair</var>.\n+</ol>\n+\n+<h4 id=computing-token-binding-id>Computing a Token Binding Id</h4>","path":"fetch.bs","position":null,"original_position":379,"commit_id":"a0c5c1f9a4c2a6b6dddb3f6da96d801da49005fa","original_commit_id":"2a61dcd98f5f9cb516e450bbe9c6b6a78642ebce","user":{"login":"vanupam","id":8762938,"avatar_url":"https://avatars0.githubusercontent.com/u/8762938?v=4","gravatar_id":"","url":"https://api.github.com/users/vanupam","html_url":"https://github.com/vanupam","followers_url":"https://api.github.com/users/vanupam/followers","following_url":"https://api.github.com/users/vanupam/following{/other_user}","gists_url":"https://api.github.com/users/vanupam/gists{/gist_id}","starred_url":"https://api.github.com/users/vanupam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanupam/subscriptions","organizations_url":"https://api.github.com/users/vanupam/orgs","repos_url":"https://api.github.com/users/vanupam/repos","events_url":"https://api.github.com/users/vanupam/events{/privacy}","received_events_url":"https://api.github.com/users/vanupam/received_events","type":"User","site_admin":false},"body":"I updated the language.","created_at":"2018-04-14T03:45:54Z","updated_at":"2018-04-14T03:45:54Z","html_url":"https://github.com/whatwg/fetch/pull/325#discussion_r181540463","pull_request_url":"https://api.github.com/repos/whatwg/fetch/pulls/325","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/whatwg/fetch/pulls/comments/181540463"},"html":{"href":"https://github.com/whatwg/fetch/pull/325#discussion_r181540463"},"pull_request":{"href":"https://api.github.com/repos/whatwg/fetch/pulls/325"}},"in_reply_to_id":179606141},"pull_request":{"url":"https://api.github.com/repos/whatwg/fetch/pulls/325","id":74463891,"html_url":"https://github.com/whatwg/fetch/pull/325","diff_url":"https://github.com/whatwg/fetch/pull/325.diff","patch_url":"https://github.com/whatwg/fetch/pull/325.patch","issue_url":"https://api.github.com/repos/whatwg/fetch/issues/325","number":325,"state":"open","locked":false,"title":"Update Fetch to support Token Binding.","user":{"login":"vanupam","id":8762938,"avatar_url":"https://avatars0.githubusercontent.com/u/8762938?v=4","gravatar_id":"","url":"https://api.github.com/users/vanupam","html_url":"https://github.com/vanupam","followers_url":"https://api.github.com/users/vanupam/followers","following_url":"https://api.github.com/users/vanupam/following{/other_user}","gists_url":"https://api.github.com/users/vanupam/gists{/gist_id}","starred_url":"https://api.github.com/users/vanupam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanupam/subscriptions","organizations_url":"https://api.github.com/users/vanupam/orgs","repos_url":"https://api.github.com/users/vanupam/repos","events_url":"https://api.github.com/users/vanupam/events{/privacy}","received_events_url":"https://api.github.com/users/vanupam/received_events","type":"User","site_admin":false},"body":"\n\n\n<!--\n    This comment and the below content is programatically generated.\n    You may add a comma-separated list of anchors you'd like a\n    direct link to below (e.g. #idl-serializers, #idl-sequence):\n\n    Don't remove this comment or modify anything below this line.\n    If you don't want a preview generated for this pull request,\n    just replace the whole of this comment's content by \"no preview\"\n    and remove what's below.\n-->\n***\n<a href=\"https://whatpr.org/fetch/325.html\" title=\"Last updated on Apr 14, 2018, 3:43 AM GMT (a0c5c1f)\">Preview</a> | <a href=\"https://whatpr.org/fetch/325/5b7dae0...a0c5c1f.html\" title=\"Last updated on Apr 14, 2018, 3:43 AM GMT (a0c5c1f)\">Diff</a>","created_at":"2016-06-20T15:35:18Z","updated_at":"2018-04-14T03:45:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"157ea0ff6002b80907ffdbd2ffd760db9ab3275c","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":520364549,"url":"https://api.github.com/repos/whatwg/fetch/labels/needs%20tests","name":"needs tests","color":"b60205","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/whatwg/fetch/pulls/325/commits","review_comments_url":"https://api.github.com/repos/whatwg/fetch/pulls/325/comments","review_comment_url":"https://api.github.com/repos/whatwg/fetch/pulls/comments{/number}","comments_url":"https://api.github.com/repos/whatwg/fetch/issues/325/comments","statuses_url":"https://api.github.com/repos/whatwg/fetch/statuses/a0c5c1f9a4c2a6b6dddb3f6da96d801da49005fa","head":{"label":"vanupam:tokbind","ref":"tokbind","sha":"a0c5c1f9a4c2a6b6dddb3f6da96d801da49005fa","user":{"login":"vanupam","id":8762938,"avatar_url":"https://avatars0.githubusercontent.com/u/8762938?v=4","gravatar_id":"","url":"https://api.github.com/users/vanupam","html_url":"https://github.com/vanupam","followers_url":"https://api.github.com/users/vanupam/followers","following_url":"https://api.github.com/users/vanupam/following{/other_user}","gists_url":"https://api.github.com/users/vanupam/gists{/gist_id}","starred_url":"https://api.github.com/users/vanupam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanupam/subscriptions","organizations_url":"https://api.github.com/users/vanupam/orgs","repos_url":"https://api.github.com/users/vanupam/repos","events_url":"https://api.github.com/users/vanupam/events{/privacy}","received_events_url":"https://api.github.com/users/vanupam/received_events","type":"User","site_admin":false},"repo":{"id":61404346,"name":"fetch","full_name":"vanupam/fetch","owner":{"login":"vanupam","id":8762938,"avatar_url":"https://avatars0.githubusercontent.com/u/8762938?v=4","gravatar_id":"","url":"https://api.github.com/users/vanupam","html_url":"https://github.com/vanupam","followers_url":"https://api.github.com/users/vanupam/followers","following_url":"https://api.github.com/users/vanupam/following{/other_user}","gists_url":"https://api.github.com/users/vanupam/gists{/gist_id}","starred_url":"https://api.github.com/users/vanupam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanupam/subscriptions","organizations_url":"https://api.github.com/users/vanupam/orgs","repos_url":"https://api.github.com/users/vanupam/repos","events_url":"https://api.github.com/users/vanupam/events{/privacy}","received_events_url":"https://api.github.com/users/vanupam/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vanupam/fetch","description":"Fetch Standard","fork":true,"url":"https://api.github.com/repos/vanupam/fetch","forks_url":"https://api.github.com/repos/vanupam/fetch/forks","keys_url":"https://api.github.com/repos/vanupam/fetch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vanupam/fetch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vanupam/fetch/teams","hooks_url":"https://api.github.com/repos/vanupam/fetch/hooks","issue_events_url":"https://api.github.com/repos/vanupam/fetch/issues/events{/number}","events_url":"https://api.github.com/repos/vanupam/fetch/events","assignees_url":"https://api.github.com/repos/vanupam/fetch/assignees{/user}","branches_url":"https://api.github.com/repos/vanupam/fetch/branches{/branch}","tags_url":"https://api.github.com/repos/vanupam/fetch/tags","blobs_url":"https://api.github.com/repos/vanupam/fetch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vanupam/fetch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vanupam/fetch/git/refs{/sha}","trees_url":"https://api.github.com/repos/vanupam/fetch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vanupam/fetch/statuses/{sha}","languages_url":"https://api.github.com/repos/vanupam/fetch/languages","stargazers_url":"https://api.github.com/repos/vanupam/fetch/stargazers","contributors_url":"https://api.github.com/repos/vanupam/fetch/contributors","subscribers_url":"https://api.github.com/repos/vanupam/fetch/subscribers","subscription_url":"https://api.github.com/repos/vanupam/fetch/subscription","commits_url":"https://api.github.com/repos/vanupam/fetch/commits{/sha}","git_commits_url":"https://api.github.com/repos/vanupam/fetch/git/commits{/sha}","comments_url":"https://api.github.com/repos/vanupam/fetch/comments{/number}","issue_comment_url":"https://api.github.com/repos/vanupam/fetch/issues/comments{/number}","contents_url":"https://api.github.com/repos/vanupam/fetch/contents/{+path}","compare_url":"https://api.github.com/repos/vanupam/fetch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vanupam/fetch/merges","archive_url":"https://api.github.com/repos/vanupam/fetch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vanupam/fetch/downloads","issues_url":"https://api.github.com/repos/vanupam/fetch/issues{/number}","pulls_url":"https://api.github.com/repos/vanupam/fetch/pulls{/number}","milestones_url":"https://api.github.com/repos/vanupam/fetch/milestones{/number}","notifications_url":"https://api.github.com/repos/vanupam/fetch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vanupam/fetch/labels{/name}","releases_url":"https://api.github.com/repos/vanupam/fetch/releases{/id}","deployments_url":"https://api.github.com/repos/vanupam/fetch/deployments","created_at":"2016-06-17T21:52:28Z","updated_at":"2018-04-05T01:00:04Z","pushed_at":"2018-04-14T03:43:21Z","git_url":"git://github.com/vanupam/fetch.git","ssh_url":"git@github.com:vanupam/fetch.git","clone_url":"https://github.com/vanupam/fetch.git","svn_url":"https://github.com/vanupam/fetch","homepage":"https://fetch.spec.whatwg.org/","size":6680,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"cc-by-4.0","name":"Creative Commons Attribution 4.0","spdx_id":"CC-BY-4.0","url":"https://api.github.com/licenses/cc-by-4.0"},"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"whatwg:master","ref":"master","sha":"5b7dae0fcc24cc8e025b216b80248d2619177ac4","user":{"login":"whatwg","id":2226336,"avatar_url":"https://avatars1.githubusercontent.com/u/2226336?v=4","gravatar_id":"","url":"https://api.github.com/users/whatwg","html_url":"https://github.com/whatwg","followers_url":"https://api.github.com/users/whatwg/followers","following_url":"https://api.github.com/users/whatwg/following{/other_user}","gists_url":"https://api.github.com/users/whatwg/gists{/gist_id}","starred_url":"https://api.github.com/users/whatwg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/whatwg/subscriptions","organizations_url":"https://api.github.com/users/whatwg/orgs","repos_url":"https://api.github.com/users/whatwg/repos","events_url":"https://api.github.com/users/whatwg/events{/privacy}","received_events_url":"https://api.github.com/users/whatwg/received_events","type":"Organization","site_admin":false},"repo":{"id":5777189,"name":"fetch","full_name":"whatwg/fetch","owner":{"login":"whatwg","id":2226336,"avatar_url":"https://avatars1.githubusercontent.com/u/2226336?v=4","gravatar_id":"","url":"https://api.github.com/users/whatwg","html_url":"https://github.com/whatwg","followers_url":"https://api.github.com/users/whatwg/followers","following_url":"https://api.github.com/users/whatwg/following{/other_user}","gists_url":"https://api.github.com/users/whatwg/gists{/gist_id}","starred_url":"https://api.github.com/users/whatwg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/whatwg/subscriptions","organizations_url":"https://api.github.com/users/whatwg/orgs","repos_url":"https://api.github.com/users/whatwg/repos","events_url":"https://api.github.com/users/whatwg/events{/privacy}","received_events_url":"https://api.github.com/users/whatwg/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/whatwg/fetch","description":"Fetch Standard","fork":false,"url":"https://api.github.com/repos/whatwg/fetch","forks_url":"https://api.github.com/repos/whatwg/fetch/forks","keys_url":"https://api.github.com/repos/whatwg/fetch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/whatwg/fetch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/whatwg/fetch/teams","hooks_url":"https://api.github.com/repos/whatwg/fetch/hooks","issue_events_url":"https://api.github.com/repos/whatwg/fetch/issues/events{/number}","events_url":"https://api.github.com/repos/whatwg/fetch/events","assignees_url":"https://api.github.com/repos/whatwg/fetch/assignees{/user}","branches_url":"https://api.github.com/repos/whatwg/fetch/branches{/branch}","tags_url":"https://api.github.com/repos/whatwg/fetch/tags","blobs_url":"https://api.github.com/repos/whatwg/fetch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/whatwg/fetch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/whatwg/fetch/git/refs{/sha}","trees_url":"https://api.github.com/repos/whatwg/fetch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/whatwg/fetch/statuses/{sha}","languages_url":"https://api.github.com/repos/whatwg/fetch/languages","stargazers_url":"https://api.github.com/repos/whatwg/fetch/stargazers","contributors_url":"https://api.github.com/repos/whatwg/fetch/contributors","subscribers_url":"https://api.github.com/repos/whatwg/fetch/subscribers","subscription_url":"https://api.github.com/repos/whatwg/fetch/subscription","commits_url":"https://api.github.com/repos/whatwg/fetch/commits{/sha}","git_commits_url":"https://api.github.com/repos/whatwg/fetch/git/commits{/sha}","comments_url":"https://api.github.com/repos/whatwg/fetch/comments{/number}","issue_comment_url":"https://api.github.com/repos/whatwg/fetch/issues/comments{/number}","contents_url":"https://api.github.com/repos/whatwg/fetch/contents/{+path}","compare_url":"https://api.github.com/repos/whatwg/fetch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/whatwg/fetch/merges","archive_url":"https://api.github.com/repos/whatwg/fetch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/whatwg/fetch/downloads","issues_url":"https://api.github.com/repos/whatwg/fetch/issues{/number}","pulls_url":"https://api.github.com/repos/whatwg/fetch/pulls{/number}","milestones_url":"https://api.github.com/repos/whatwg/fetch/milestones{/number}","notifications_url":"https://api.github.com/repos/whatwg/fetch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/whatwg/fetch/labels{/name}","releases_url":"https://api.github.com/repos/whatwg/fetch/releases{/id}","deployments_url":"https://api.github.com/repos/whatwg/fetch/deployments","created_at":"2012-09-12T08:39:20Z","updated_at":"2018-04-13T19:27:16Z","pushed_at":"2018-04-14T03:43:25Z","git_url":"git://github.com/whatwg/fetch.git","ssh_url":"git@github.com:whatwg/fetch.git","clone_url":"https://github.com/whatwg/fetch.git","svn_url":"https://github.com/whatwg/fetch","homepage":"https://fetch.spec.whatwg.org/","size":7100,"stargazers_count":941,"watchers_count":941,"language":"HTML","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":104,"mirror_url":null,"archived":false,"open_issues_count":135,"license":{"key":"cc-by-4.0","name":"Creative Commons Attribution 4.0","spdx_id":"CC-BY-4.0","url":"https://api.github.com/licenses/cc-by-4.0"},"forks":104,"open_issues":135,"watchers":941,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/whatwg/fetch/pulls/325"},"html":{"href":"https://github.com/whatwg/fetch/pull/325"},"issue":{"href":"https://api.github.com/repos/whatwg/fetch/issues/325"},"comments":{"href":"https://api.github.com/repos/whatwg/fetch/issues/325/comments"},"review_comments":{"href":"https://api.github.com/repos/whatwg/fetch/pulls/325/comments"},"review_comment":{"href":"https://api.github.com/repos/whatwg/fetch/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/whatwg/fetch/pulls/325/commits"},"statuses":{"href":"https://api.github.com/repos/whatwg/fetch/statuses/a0c5c1f9a4c2a6b6dddb3f6da96d801da49005fa"}},"author_association":"NONE"}}
{"actor":{"display_login":"vanupam"}}