{"action":"created","comment":{"url":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/comments/269771381","pull_request_review_id":219727706,"id":269771381,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI2OTc3MTM4MQ==","diff_hunk":"@@ -3013,6 +3127,47 @@ class File extends ServiceObject<File> {\n       requestModule: teenyRequest as typeof r,\n     });\n   }\n+\n+  /**\n+   * Wrapper for new Date() for tests.\n+   * @return {Date} value as returned by new Date().\n+   * @private\n+   */\n+  getDate(): Date {\n+    return new Date();\n+  }\n+\n+  /**\n+   * Create canonical headers for signing v4 url.\n+   * @param headers\n+   * @private\n+   */\n+  private getCanonicalHeaders(headers: http.OutgoingHttpHeaders) {\n+    // Sort headers by their lowercased names","path":"src/file.ts","position":348,"original_position":310,"commit_id":"41211fb3a59ed3b22aaa2e5e103ada72a0082971","original_commit_id":"c99f0e308cba296ddcfed737e45e9b2b08d0dcb6","user":{"login":"jkwlui","id":4001432,"node_id":"MDQ6VXNlcjQwMDE0MzI=","avatar_url":"https://avatars2.githubusercontent.com/u/4001432?v=4","gravatar_id":"","url":"https://api.github.com/users/jkwlui","html_url":"https://github.com/jkwlui","followers_url":"https://api.github.com/users/jkwlui/followers","following_url":"https://api.github.com/users/jkwlui/following{/other_user}","gists_url":"https://api.github.com/users/jkwlui/gists{/gist_id}","starred_url":"https://api.github.com/users/jkwlui/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkwlui/subscriptions","organizations_url":"https://api.github.com/users/jkwlui/orgs","repos_url":"https://api.github.com/users/jkwlui/repos","events_url":"https://api.github.com/users/jkwlui/events{/privacy}","received_events_url":"https://api.github.com/users/jkwlui/received_events","type":"User","site_admin":false},"body":"Yup!","created_at":"2019-03-27T21:09:29Z","updated_at":"2019-03-27T21:09:29Z","html_url":"https://github.com/googleapis/nodejs-storage/pull/637#discussion_r269771381","pull_request_url":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/637","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/comments/269771381"},"html":{"href":"https://github.com/googleapis/nodejs-storage/pull/637#discussion_r269771381"},"pull_request":{"href":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/637"}},"in_reply_to_id":268377665},"pull_request":{"url":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/637","id":263783726,"node_id":"MDExOlB1bGxSZXF1ZXN0MjYzNzgzNzI2","html_url":"https://github.com/googleapis/nodejs-storage/pull/637","diff_url":"https://github.com/googleapis/nodejs-storage/pull/637.diff","patch_url":"https://github.com/googleapis/nodejs-storage/pull/637.patch","issue_url":"https://api.github.com/repos/googleapis/nodejs-storage/issues/637","number":637,"state":"open","locked":false,"title":"feat: introduce v4 signed url","user":{"login":"jkwlui","id":4001432,"node_id":"MDQ6VXNlcjQwMDE0MzI=","avatar_url":"https://avatars2.githubusercontent.com/u/4001432?v=4","gravatar_id":"","url":"https://api.github.com/users/jkwlui","html_url":"https://github.com/jkwlui","followers_url":"https://api.github.com/users/jkwlui/followers","following_url":"https://api.github.com/users/jkwlui/following{/other_user}","gists_url":"https://api.github.com/users/jkwlui/gists{/gist_id}","starred_url":"https://api.github.com/users/jkwlui/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkwlui/subscriptions","organizations_url":"https://api.github.com/users/jkwlui/orgs","repos_url":"https://api.github.com/users/jkwlui/repos","events_url":"https://api.github.com/users/jkwlui/events{/privacy}","received_events_url":"https://api.github.com/users/jkwlui/received_events","type":"User","site_admin":false},"body":"~~requires https://github.com/googleapis/google-auth-library-nodejs/pull/649 for system-tests to pass~~","created_at":"2019-03-22T22:51:32Z","updated_at":"2019-03-27T21:09:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d8280ba97f40d5e2ff71e1fd9ea3c8fbc5de03d5","assignee":{"login":"jkwlui","id":4001432,"node_id":"MDQ6VXNlcjQwMDE0MzI=","avatar_url":"https://avatars2.githubusercontent.com/u/4001432?v=4","gravatar_id":"","url":"https://api.github.com/users/jkwlui","html_url":"https://github.com/jkwlui","followers_url":"https://api.github.com/users/jkwlui/followers","following_url":"https://api.github.com/users/jkwlui/following{/other_user}","gists_url":"https://api.github.com/users/jkwlui/gists{/gist_id}","starred_url":"https://api.github.com/users/jkwlui/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkwlui/subscriptions","organizations_url":"https://api.github.com/users/jkwlui/orgs","repos_url":"https://api.github.com/users/jkwlui/repos","events_url":"https://api.github.com/users/jkwlui/events{/privacy}","received_events_url":"https://api.github.com/users/jkwlui/received_events","type":"User","site_admin":false},"assignees":[{"login":"jkwlui","id":4001432,"node_id":"MDQ6VXNlcjQwMDE0MzI=","avatar_url":"https://avatars2.githubusercontent.com/u/4001432?v=4","gravatar_id":"","url":"https://api.github.com/users/jkwlui","html_url":"https://github.com/jkwlui","followers_url":"https://api.github.com/users/jkwlui/followers","following_url":"https://api.github.com/users/jkwlui/following{/other_user}","gists_url":"https://api.github.com/users/jkwlui/gists{/gist_id}","starred_url":"https://api.github.com/users/jkwlui/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkwlui/subscriptions","organizations_url":"https://api.github.com/users/jkwlui/orgs","repos_url":"https://api.github.com/users/jkwlui/repos","events_url":"https://api.github.com/users/jkwlui/events{/privacy}","received_events_url":"https://api.github.com/users/jkwlui/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"frankyn","id":1907648,"node_id":"MDQ6VXNlcjE5MDc2NDg=","avatar_url":"https://avatars1.githubusercontent.com/u/1907648?v=4","gravatar_id":"","url":"https://api.github.com/users/frankyn","html_url":"https://github.com/frankyn","followers_url":"https://api.github.com/users/frankyn/followers","following_url":"https://api.github.com/users/frankyn/following{/other_user}","gists_url":"https://api.github.com/users/frankyn/gists{/gist_id}","starred_url":"https://api.github.com/users/frankyn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/frankyn/subscriptions","organizations_url":"https://api.github.com/users/frankyn/orgs","repos_url":"https://api.github.com/users/frankyn/repos","events_url":"https://api.github.com/users/frankyn/events{/privacy}","received_events_url":"https://api.github.com/users/frankyn/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":699304914,"node_id":"MDU6TGFiZWw2OTkzMDQ5MTQ=","url":"https://api.github.com/repos/googleapis/nodejs-storage/labels/cla:%20yes","name":"cla: yes","color":"0B7601","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/637/commits","review_comments_url":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/637/comments","review_comment_url":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/comments{/number}","comments_url":"https://api.github.com/repos/googleapis/nodejs-storage/issues/637/comments","statuses_url":"https://api.github.com/repos/googleapis/nodejs-storage/statuses/41211fb3a59ed3b22aaa2e5e103ada72a0082971","head":{"label":"googleapis:v4-signedurl","ref":"v4-signedurl","sha":"41211fb3a59ed3b22aaa2e5e103ada72a0082971","user":{"login":"googleapis","id":16785467,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2Nzg1NDY3","avatar_url":"https://avatars3.githubusercontent.com/u/16785467?v=4","gravatar_id":"","url":"https://api.github.com/users/googleapis","html_url":"https://github.com/googleapis","followers_url":"https://api.github.com/users/googleapis/followers","following_url":"https://api.github.com/users/googleapis/following{/other_user}","gists_url":"https://api.github.com/users/googleapis/gists{/gist_id}","starred_url":"https://api.github.com/users/googleapis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/googleapis/subscriptions","organizations_url":"https://api.github.com/users/googleapis/orgs","repos_url":"https://api.github.com/users/googleapis/repos","events_url":"https://api.github.com/users/googleapis/events{/privacy}","received_events_url":"https://api.github.com/users/googleapis/received_events","type":"Organization","site_admin":false},"repo":{"id":98465010,"node_id":"MDEwOlJlcG9zaXRvcnk5ODQ2NTAxMA==","name":"nodejs-storage","full_name":"googleapis/nodejs-storage","private":false,"owner":{"login":"googleapis","id":16785467,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2Nzg1NDY3","avatar_url":"https://avatars3.githubusercontent.com/u/16785467?v=4","gravatar_id":"","url":"https://api.github.com/users/googleapis","html_url":"https://github.com/googleapis","followers_url":"https://api.github.com/users/googleapis/followers","following_url":"https://api.github.com/users/googleapis/following{/other_user}","gists_url":"https://api.github.com/users/googleapis/gists{/gist_id}","starred_url":"https://api.github.com/users/googleapis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/googleapis/subscriptions","organizations_url":"https://api.github.com/users/googleapis/orgs","repos_url":"https://api.github.com/users/googleapis/repos","events_url":"https://api.github.com/users/googleapis/events{/privacy}","received_events_url":"https://api.github.com/users/googleapis/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/googleapis/nodejs-storage","description":"Node.js client for Google Cloud Storage: unified object storage for developers and enterprises, from live data serving to data analytics/ML to data archiving.","fork":false,"url":"https://api.github.com/repos/googleapis/nodejs-storage","forks_url":"https://api.github.com/repos/googleapis/nodejs-storage/forks","keys_url":"https://api.github.com/repos/googleapis/nodejs-storage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/googleapis/nodejs-storage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/googleapis/nodejs-storage/teams","hooks_url":"https://api.github.com/repos/googleapis/nodejs-storage/hooks","issue_events_url":"https://api.github.com/repos/googleapis/nodejs-storage/issues/events{/number}","events_url":"https://api.github.com/repos/googleapis/nodejs-storage/events","assignees_url":"https://api.github.com/repos/googleapis/nodejs-storage/assignees{/user}","branches_url":"https://api.github.com/repos/googleapis/nodejs-storage/branches{/branch}","tags_url":"https://api.github.com/repos/googleapis/nodejs-storage/tags","blobs_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/refs{/sha}","trees_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/googleapis/nodejs-storage/statuses/{sha}","languages_url":"https://api.github.com/repos/googleapis/nodejs-storage/languages","stargazers_url":"https://api.github.com/repos/googleapis/nodejs-storage/stargazers","contributors_url":"https://api.github.com/repos/googleapis/nodejs-storage/contributors","subscribers_url":"https://api.github.com/repos/googleapis/nodejs-storage/subscribers","subscription_url":"https://api.github.com/repos/googleapis/nodejs-storage/subscription","commits_url":"https://api.github.com/repos/googleapis/nodejs-storage/commits{/sha}","git_commits_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/commits{/sha}","comments_url":"https://api.github.com/repos/googleapis/nodejs-storage/comments{/number}","issue_comment_url":"https://api.github.com/repos/googleapis/nodejs-storage/issues/comments{/number}","contents_url":"https://api.github.com/repos/googleapis/nodejs-storage/contents/{+path}","compare_url":"https://api.github.com/repos/googleapis/nodejs-storage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/googleapis/nodejs-storage/merges","archive_url":"https://api.github.com/repos/googleapis/nodejs-storage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/googleapis/nodejs-storage/downloads","issues_url":"https://api.github.com/repos/googleapis/nodejs-storage/issues{/number}","pulls_url":"https://api.github.com/repos/googleapis/nodejs-storage/pulls{/number}","milestones_url":"https://api.github.com/repos/googleapis/nodejs-storage/milestones{/number}","notifications_url":"https://api.github.com/repos/googleapis/nodejs-storage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/googleapis/nodejs-storage/labels{/name}","releases_url":"https://api.github.com/repos/googleapis/nodejs-storage/releases{/id}","deployments_url":"https://api.github.com/repos/googleapis/nodejs-storage/deployments","created_at":"2017-07-26T20:53:32Z","updated_at":"2019-03-27T20:22:24Z","pushed_at":"2019-03-27T21:07:10Z","git_url":"git://github.com/googleapis/nodejs-storage.git","ssh_url":"git@github.com:googleapis/nodejs-storage.git","clone_url":"https://github.com/googleapis/nodejs-storage.git","svn_url":"https://github.com/googleapis/nodejs-storage","homepage":"https://cloud.google.com/storage/","size":6265,"stargazers_count":258,"watchers_count":258,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":129,"mirror_url":null,"archived":false,"open_issues_count":15,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":129,"open_issues":15,"watchers":258,"default_branch":"master"}},"base":{"label":"googleapis:master","ref":"master","sha":"51370df23a47befaf5714f348f447ec6a0d342ab","user":{"login":"googleapis","id":16785467,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2Nzg1NDY3","avatar_url":"https://avatars3.githubusercontent.com/u/16785467?v=4","gravatar_id":"","url":"https://api.github.com/users/googleapis","html_url":"https://github.com/googleapis","followers_url":"https://api.github.com/users/googleapis/followers","following_url":"https://api.github.com/users/googleapis/following{/other_user}","gists_url":"https://api.github.com/users/googleapis/gists{/gist_id}","starred_url":"https://api.github.com/users/googleapis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/googleapis/subscriptions","organizations_url":"https://api.github.com/users/googleapis/orgs","repos_url":"https://api.github.com/users/googleapis/repos","events_url":"https://api.github.com/users/googleapis/events{/privacy}","received_events_url":"https://api.github.com/users/googleapis/received_events","type":"Organization","site_admin":false},"repo":{"id":98465010,"node_id":"MDEwOlJlcG9zaXRvcnk5ODQ2NTAxMA==","name":"nodejs-storage","full_name":"googleapis/nodejs-storage","private":false,"owner":{"login":"googleapis","id":16785467,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2Nzg1NDY3","avatar_url":"https://avatars3.githubusercontent.com/u/16785467?v=4","gravatar_id":"","url":"https://api.github.com/users/googleapis","html_url":"https://github.com/googleapis","followers_url":"https://api.github.com/users/googleapis/followers","following_url":"https://api.github.com/users/googleapis/following{/other_user}","gists_url":"https://api.github.com/users/googleapis/gists{/gist_id}","starred_url":"https://api.github.com/users/googleapis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/googleapis/subscriptions","organizations_url":"https://api.github.com/users/googleapis/orgs","repos_url":"https://api.github.com/users/googleapis/repos","events_url":"https://api.github.com/users/googleapis/events{/privacy}","received_events_url":"https://api.github.com/users/googleapis/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/googleapis/nodejs-storage","description":"Node.js client for Google Cloud Storage: unified object storage for developers and enterprises, from live data serving to data analytics/ML to data archiving.","fork":false,"url":"https://api.github.com/repos/googleapis/nodejs-storage","forks_url":"https://api.github.com/repos/googleapis/nodejs-storage/forks","keys_url":"https://api.github.com/repos/googleapis/nodejs-storage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/googleapis/nodejs-storage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/googleapis/nodejs-storage/teams","hooks_url":"https://api.github.com/repos/googleapis/nodejs-storage/hooks","issue_events_url":"https://api.github.com/repos/googleapis/nodejs-storage/issues/events{/number}","events_url":"https://api.github.com/repos/googleapis/nodejs-storage/events","assignees_url":"https://api.github.com/repos/googleapis/nodejs-storage/assignees{/user}","branches_url":"https://api.github.com/repos/googleapis/nodejs-storage/branches{/branch}","tags_url":"https://api.github.com/repos/googleapis/nodejs-storage/tags","blobs_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/refs{/sha}","trees_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/googleapis/nodejs-storage/statuses/{sha}","languages_url":"https://api.github.com/repos/googleapis/nodejs-storage/languages","stargazers_url":"https://api.github.com/repos/googleapis/nodejs-storage/stargazers","contributors_url":"https://api.github.com/repos/googleapis/nodejs-storage/contributors","subscribers_url":"https://api.github.com/repos/googleapis/nodejs-storage/subscribers","subscription_url":"https://api.github.com/repos/googleapis/nodejs-storage/subscription","commits_url":"https://api.github.com/repos/googleapis/nodejs-storage/commits{/sha}","git_commits_url":"https://api.github.com/repos/googleapis/nodejs-storage/git/commits{/sha}","comments_url":"https://api.github.com/repos/googleapis/nodejs-storage/comments{/number}","issue_comment_url":"https://api.github.com/repos/googleapis/nodejs-storage/issues/comments{/number}","contents_url":"https://api.github.com/repos/googleapis/nodejs-storage/contents/{+path}","compare_url":"https://api.github.com/repos/googleapis/nodejs-storage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/googleapis/nodejs-storage/merges","archive_url":"https://api.github.com/repos/googleapis/nodejs-storage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/googleapis/nodejs-storage/downloads","issues_url":"https://api.github.com/repos/googleapis/nodejs-storage/issues{/number}","pulls_url":"https://api.github.com/repos/googleapis/nodejs-storage/pulls{/number}","milestones_url":"https://api.github.com/repos/googleapis/nodejs-storage/milestones{/number}","notifications_url":"https://api.github.com/repos/googleapis/nodejs-storage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/googleapis/nodejs-storage/labels{/name}","releases_url":"https://api.github.com/repos/googleapis/nodejs-storage/releases{/id}","deployments_url":"https://api.github.com/repos/googleapis/nodejs-storage/deployments","created_at":"2017-07-26T20:53:32Z","updated_at":"2019-03-27T20:22:24Z","pushed_at":"2019-03-27T21:07:10Z","git_url":"git://github.com/googleapis/nodejs-storage.git","ssh_url":"git@github.com:googleapis/nodejs-storage.git","clone_url":"https://github.com/googleapis/nodejs-storage.git","svn_url":"https://github.com/googleapis/nodejs-storage","homepage":"https://cloud.google.com/storage/","size":6265,"stargazers_count":258,"watchers_count":258,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":129,"mirror_url":null,"archived":false,"open_issues_count":15,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":129,"open_issues":15,"watchers":258,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/637"},"html":{"href":"https://github.com/googleapis/nodejs-storage/pull/637"},"issue":{"href":"https://api.github.com/repos/googleapis/nodejs-storage/issues/637"},"comments":{"href":"https://api.github.com/repos/googleapis/nodejs-storage/issues/637/comments"},"review_comments":{"href":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/637/comments"},"review_comment":{"href":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/googleapis/nodejs-storage/pulls/637/commits"},"statuses":{"href":"https://api.github.com/repos/googleapis/nodejs-storage/statuses/41211fb3a59ed3b22aaa2e5e103ada72a0082971"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"jkwlui"}}