{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/comments/118099416","pull_request_review_id":39860648,"id":118099416,"diff_hunk":"@@ -0,0 +1,513 @@\n+/*\n+ * Copyright 2017, Google Inc. All rights reserved.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ *\n+ * EDITING INSTRUCTIONS\n+ * This file was generated from the file\n+ * https://github.com/googleapis/googleapis/blob/master/google/privacy/dlp/v2beta1/dlp.proto,\n+ * and updates to that file get reflected here through a refresh process.\n+ * For the short term, the refresh process will only be runnable by Google\n+ * engineers.\n+ *\n+ * The only allowed edits are to method and file documentation. A 3-way\n+ * merge preserves those additions if the generated source changes.\n+ */\n+/* TODO: introduce line-wrapping so that it never exceeds the limit. */\n+/* jscs: disable maximumLineLength */\n+'use strict';\n+\n+var configData = require('./dlp_service_client_config');\n+var extend = require('extend');\n+var gax = require('google-gax');\n+\n+var SERVICE_ADDRESS = 'dlp.googleapis.com';\n+\n+var DEFAULT_SERVICE_PORT = 443;\n+\n+var CODE_GEN_NAME_VERSION = 'gapic/0.7.1';\n+\n+/**\n+ * The scopes needed to make gRPC calls to all of the methods defined in\n+ * this service.\n+ */\n+var ALL_SCOPES = [\n+  'https://www.googleapis.com/auth/cloud-platform'\n+];\n+\n+/**\n+ * The DLP API is a service that allows clients\n+ * to detect the presence of Personally Identifiable Information (PII) and other\n+ * privacy-sensitive data in user-supplied, unstructured data streams, like text\n+ * blocks or images.\n+ * The service also includes methods for sensitive data redaction and\n+ * scheduling of data scans on Google Cloud Platform based data sets.\n+ *\n+ * This will be created through a builder function which can be obtained by the module.\n+ * See the following example of how to initialize the module and how to access to the builder.\n+ * @see {@link dlpServiceClient}\n+ *\n+ * @example\n+ * var dlpV2beta1 = require('dlp.v2beta1').v2beta1({\n+ *   // optional auth parameters.\n+ * });\n+ * var client = dlpV2beta1.dlpServiceClient();\n+ *\n+ * @class\n+ */\n+function DlpServiceClient(gaxGrpc, grpcClients, opts) {\n+  opts = extend({\n+    servicePath: SERVICE_ADDRESS,\n+    port: DEFAULT_SERVICE_PORT,\n+    clientConfig: {}\n+  }, opts);\n+\n+  var googleApiClient = [\n+    'gl-node/' + process.versions.node\n+  ];\n+  if (opts.libName && opts.libVersion) {\n+    googleApiClient.push(opts.libName + '/' + opts.libVersion);\n+  }\n+  googleApiClient.push(\n+    CODE_GEN_NAME_VERSION,\n+    'gax/' + gax.version,\n+    'grpc/' + gaxGrpc.grpcVersion\n+  );\n+\n+  var defaults = gaxGrpc.constructSettings(\n+      'google.privacy.dlp.v2beta1.DlpService',\n+      configData,\n+      opts.clientConfig,\n+      {'x-goog-api-client': googleApiClient.join(' ')});\n+\n+  var self = this;\n+\n+  this.auth = gaxGrpc.auth;\n+  var dlpServiceStub = gaxGrpc.createStub(\n+      grpcClients.google.privacy.dlp.v2beta1.DlpService,\n+      opts);\n+  var dlpServiceStubMethods = [\n+    'inspectContent',\n+    'redactContent',\n+    'createInspectOperation',\n+    'listInspectFindings',\n+    'listInfoTypes',\n+    'listRootCategories'\n+  ];\n+  dlpServiceStubMethods.forEach(function(methodName) {\n+    self['_' + methodName] = gax.createApiCall(\n+      dlpServiceStub.then(function(dlpServiceStub) {\n+        return function() {\n+          var args = Array.prototype.slice.call(arguments, 0);\n+          return dlpServiceStub[methodName].apply(dlpServiceStub, args);\n+        };\n+      }),\n+      defaults[methodName],\n+      null);\n+  });\n+}\n+\n+// Path templates\n+\n+var RESULT_PATH_TEMPLATE = new gax.PathTemplate(\n+    'inspect/results/{result}');\n+\n+/**\n+ * Returns a fully-qualified result resource name string.\n+ * @param {String} result\n+ * @returns {String}\n+ */\n+DlpServiceClient.prototype.resultPath = function(result) {\n+  return RESULT_PATH_TEMPLATE.render({\n+    result: result\n+  });\n+};\n+\n+/**\n+ * Parses the resultName from a result resource.\n+ * @param {String} resultName\n+ *   A fully-qualified path representing a result resources.\n+ * @returns {String} - A string representing the result.\n+ */\n+DlpServiceClient.prototype.matchResultFromResultName = function(resultName) {\n+  return RESULT_PATH_TEMPLATE.match(resultName).result;\n+};\n+\n+/**\n+ * Get the project ID used by this class.\n+ * @param {function(Error, string)} callback - the callback to be called with\n+ *   the current project Id.\n+ */\n+DlpServiceClient.prototype.getProjectId = function(callback) {\n+  return this.auth.getProjectId(callback);\n+};\n+\n+// Service calls\n+\n+/**\n+ * Find potentially sensitive info in a list of strings.\n+ * This method has limits on input size, processing time, and output size.\n+ *\n+ * @param {Object} request\n+ *   The request object that will be sent.\n+ * @param {Object} request.inspectConfig\n+ *   Configuration for the inspector.\n+ *\n+ *   This object should have the same structure as [InspectConfig]{@link InspectConfig}\n+ * @param {Object[]} request.items\n+ *   The list of items to inspect. Items in a single request are\n+ *   considered \"related\" unless inspect_config.independent_inputs is true.\n+ *   Up to 100 are allowed per request.\n+ *\n+ *   This object should have the same structure as [ContentItem]{@link ContentItem}\n+ * @param {Object=} options\n+ *   Optional parameters. You can override the default settings for this call, e.g, timeout,\n+ *   retries, paginations, etc. See [gax.CallOptions]{@link https://googleapis.github.io/gax-nodejs/global.html#CallOptions} for the details.\n+ * @param {function(?Error, ?Object)=} callback\n+ *   The function which will be called with the result of the API call.\n+ *\n+ *   The second parameter to the callback is an object representing [InspectContentResponse]{@link InspectContentResponse}.\n+ * @return {Promise} - The promise which resolves to an array.\n+ *   The first element of the array is an object representing [InspectContentResponse]{@link InspectContentResponse}.\n+ *   The promise has a method named \"cancel\" which cancels the ongoing API call.\n+ *\n+ * @example\n+ *\n+ * var client = dlpV2beta1.dlpServiceClient();\n+ * var inspectConfig = {};\n+ * var items = [];\n+ * var request = {\n+ *     inspectConfig: inspectConfig,\n+ *     items: items\n+ * };\n+ * client.inspectContent(request).then(function(responses) {\n+ *     var response = responses[0];\n+ *     // doThingsWith(response)\n+ * }).catch(function(err) {\n+ *     console.error(err);\n+ * });\n+ */\n+DlpServiceClient.prototype.inspectContent = function(request, options, callback) {\n+  if (options instanceof Function && callback === undefined) {\n+    callback = options;\n+    options = {};\n+  }\n+  if (options === undefined) {\n+    options = {};\n+  }\n+\n+  return this._inspectContent(request, options, callback);\n+};\n+\n+/**\n+ * Redact potentially sensitive info from a list of strings.\n+ * This method has limits on input size, processing time, and output size.\n+ *\n+ * @param {Object} request\n+ *   The request object that will be sent.\n+ * @param {Object} request.inspectConfig\n+ *   Configuration for the inspector.\n+ *\n+ *   This object should have the same structure as [InspectConfig]{@link InspectConfig}\n+ * @param {Object[]} request.items\n+ *   The list of items to inspect. Up to 100 are allowed per request.\n+ *\n+ *   This object should have the same structure as [ContentItem]{@link ContentItem}\n+ * @param {Object[]} request.replaceConfigs\n+ *   The strings to replace findings with. Must specify at least one.\n+ *\n+ *   This object should have the same structure as [ReplaceConfig]{@link ReplaceConfig}\n+ * @param {Object=} options\n+ *   Optional parameters. You can override the default settings for this call, e.g, timeout,\n+ *   retries, paginations, etc. See [gax.CallOptions]{@link https://googleapis.github.io/gax-nodejs/global.html#CallOptions} for the details.\n+ * @param {function(?Error, ?Object)=} callback\n+ *   The function which will be called with the result of the API call.\n+ *\n+ *   The second parameter to the callback is an object representing [RedactContentResponse]{@link RedactContentResponse}.\n+ * @return {Promise} - The promise which resolves to an array.\n+ *   The first element of the array is an object representing [RedactContentResponse]{@link RedactContentResponse}.\n+ *   The promise has a method named \"cancel\" which cancels the ongoing API call.\n+ *\n+ * @example\n+ *\n+ * var client = dlpV2beta1.dlpServiceClient();\n+ * var inspectConfig = {};\n+ * var items = [];\n+ * var replaceConfigs = [];\n+ * var request = {\n+ *     inspectConfig: inspectConfig,\n+ *     items: items,\n+ *     replaceConfigs: replaceConfigs\n+ * };\n+ * client.redactContent(request).then(function(responses) {\n+ *     var response = responses[0];\n+ *     // doThingsWith(response)\n+ * }).catch(function(err) {\n+ *     console.error(err);\n+ * });\n+ */\n+DlpServiceClient.prototype.redactContent = function(request, options, callback) {\n+  if (options instanceof Function && callback === undefined) {\n+    callback = options;\n+    options = {};\n+  }\n+  if (options === undefined) {\n+    options = {};\n+  }\n+\n+  return this._redactContent(request, options, callback);\n+};\n+\n+/**\n+ * Schedule a job scanning content in a Google Cloud Platform data repository.\n+ *\n+ * @param {Object} request\n+ *   The request object that will be sent.\n+ * @param {Object} request.inspectConfig\n+ *   Configuration for the inspector.\n+ *\n+ *   This object should have the same structure as [InspectConfig]{@link InspectConfig}\n+ * @param {Object} request.storageConfig\n+ *   Specification of the data set to process.\n+ *\n+ *   This object should have the same structure as [StorageConfig]{@link StorageConfig}\n+ * @param {Object} request.outputConfig\n+ *   Optional location to store findings. The bucket must already exist and\n+ *   the Google APIs service account for DLP must have write permission to\n+ *   write to the given bucket.\n+ *   Results will be split over multiple csv files with each file name matching\n+ *   the pattern \"[operation_id] + [count].csv\".\n+ *   The operation_id will match the identifier for the Operation,\n+ *   and the [count] is a counter used for tracking the number of files written.\n+ *   The CSV file(s) contain the following columns regardless of storage type\n+ *   scanned: id, info_type, likelihood, byte size of finding, quote, time_stamp\n+ *   For cloud storage the next two columns are: file_path, start_offset\n+ *   For datastore the next two columns are: project_id, namespace_id, path,\n+ *       column_name, offset.\n+ *\n+ *   This object should have the same structure as [OutputStorageConfig]{@link OutputStorageConfig}\n+ * @param {Object=} options\n+ *   Optional parameters. You can override the default settings for this call, e.g, timeout,\n+ *   retries, paginations, etc. See [gax.CallOptions]{@link https://googleapis.github.io/gax-nodejs/global.html#CallOptions} for the details.\n+ * @param {function(?Error, ?Object)=} callback\n+ *   The function which will be called with the result of the API call.\n+ *\n+ *   The second parameter to the callback is an object representing [google.longrunning.Operation]{@link external:\"google.longrunning.Operation\"}.\n+ * @return {Promise} - The promise which resolves to an array.\n+ *   The first element of the array is an object representing [google.longrunning.Operation]{@link external:\"google.longrunning.Operation\"}.\n+ *   The promise has a method named \"cancel\" which cancels the ongoing API call.\n+ *\n+ * @example\n+ *\n+ * var client = dlpV2beta1.dlpServiceClient();\n+ * var inspectConfig = {};\n+ * var storageConfig = {};\n+ * var outputConfig = {};\n+ * var request = {\n+ *     inspectConfig: inspectConfig,\n+ *     storageConfig: storageConfig,\n+ *     outputConfig: outputConfig\n+ * };\n+ * client.createInspectOperation(request).then(function(responses) {\n+ *     var response = responses[0];\n+ *     // doThingsWith(response)\n+ * }).catch(function(err) {\n+ *     console.error(err);\n+ * });\n+ */\n+DlpServiceClient.prototype.createInspectOperation = function(request, options, callback) {\n+  if (options instanceof Function && callback === undefined) {\n+    callback = options;\n+    options = {};\n+  }\n+  if (options === undefined) {\n+    options = {};\n+  }\n+\n+  return this._createInspectOperation(request, options, callback);\n+};\n+\n+/**\n+ * Returns list of results for given inspect operation result set id.\n+ *\n+ * @param {Object} request\n+ *   The request object that will be sent.\n+ * @param {string} request.name\n+ *   Identifier of the results set returned as metadata of\n+ *   the longrunning operation created by a call to CreateInspectOperation.\n+ *   Should be in the format of `inspect/results/{id}.\n+ * @param {number=} request.pageSize\n+ *   Maximum number of results to return.\n+ *   If 0, the implementation will select a reasonable value.\n+ * @param {string=} request.pageToken\n+ *   The value returned by the last `ListInspectFindingsResponse`; indicates\n+ *   that this is a continuation of a prior `ListInspectFindings` call, and that\n+ *   the system should return the next page of data.\n+ * @param {Object=} options\n+ *   Optional parameters. You can override the default settings for this call, e.g, timeout,\n+ *   retries, paginations, etc. See [gax.CallOptions]{@link https://googleapis.github.io/gax-nodejs/global.html#CallOptions} for the details.\n+ * @param {function(?Error, ?Object)=} callback\n+ *   The function which will be called with the result of the API call.\n+ *\n+ *   The second parameter to the callback is an object representing [ListInspectFindingsResponse]{@link ListInspectFindingsResponse}.\n+ * @return {Promise} - The promise which resolves to an array.\n+ *   The first element of the array is an object representing [ListInspectFindingsResponse]{@link ListInspectFindingsResponse}.\n+ *   The promise has a method named \"cancel\" which cancels the ongoing API call.\n+ *\n+ * @example\n+ *\n+ * var client = dlpV2beta1.dlpServiceClient();\n+ * var formattedName = client.resultPath(\"[RESULT]\");\n+ * client.listInspectFindings({name: formattedName}).then(function(responses) {\n+ *     var response = responses[0];\n+ *     // doThingsWith(response)\n+ * }).catch(function(err) {\n+ *     console.error(err);\n+ * });\n+ */\n+DlpServiceClient.prototype.listInspectFindings = function(request, options, callback) {\n+  if (options instanceof Function && callback === undefined) {\n+    callback = options;\n+    options = {};\n+  }\n+  if (options === undefined) {\n+    options = {};\n+  }\n+\n+  return this._listInspectFindings(request, options, callback);\n+};\n+\n+/**\n+ * Returns sensitive information types for given category.\n+ *\n+ * @param {Object} request\n+ *   The request object that will be sent.\n+ * @param {string} request.category\n+ *   Category name as returned by ListRootCategories.\n+ * @param {string} request.languageCode\n+ *   Optional BCP-47 language code for localized info type friendly\n+ *   names. If omitted, or if localized strings are not available,\n+ *   en-US strings will be returned.\n+ * @param {Object=} options\n+ *   Optional parameters. You can override the default settings for this call, e.g, timeout,\n+ *   retries, paginations, etc. See [gax.CallOptions]{@link https://googleapis.github.io/gax-nodejs/global.html#CallOptions} for the details.\n+ * @param {function(?Error, ?Object)=} callback\n+ *   The function which will be called with the result of the API call.\n+ *\n+ *   The second parameter to the callback is an object representing [ListInfoTypesResponse]{@link ListInfoTypesResponse}.\n+ * @return {Promise} - The promise which resolves to an array.\n+ *   The first element of the array is an object representing [ListInfoTypesResponse]{@link ListInfoTypesResponse}.\n+ *   The promise has a method named \"cancel\" which cancels the ongoing API call.\n+ *\n+ * @example\n+ *\n+ * var client = dlpV2beta1.dlpServiceClient();\n+ * var category = '';\n+ * var languageCode = '';\n+ * var request = {\n+ *     category: category,\n+ *     languageCode: languageCode\n+ * };\n+ * client.listInfoTypes(request).then(function(responses) {\n+ *     var response = responses[0];\n+ *     // doThingsWith(response)\n+ * }).catch(function(err) {\n+ *     console.error(err);\n+ * });\n+ */\n+DlpServiceClient.prototype.listInfoTypes = function(request, options, callback) {\n+  if (options instanceof Function && callback === undefined) {\n+    callback = options;\n+    options = {};\n+  }\n+  if (options === undefined) {\n+    options = {};\n+  }\n+\n+  return this._listInfoTypes(request, options, callback);\n+};\n+\n+/**\n+ * Returns the list of root categories of sensitive information.\n+ *\n+ * @param {Object} request\n+ *   The request object that will be sent.\n+ * @param {string} request.languageCode\n+ *   Optional language code for localized friendly category names.\n+ *   If omitted or if localized strings are not available,\n+ *   en-US strings will be returned.\n+ * @param {Object=} options\n+ *   Optional parameters. You can override the default settings for this call, e.g, timeout,\n+ *   retries, paginations, etc. See [gax.CallOptions]{@link https://googleapis.github.io/gax-nodejs/global.html#CallOptions} for the details.\n+ * @param {function(?Error, ?Object)=} callback\n+ *   The function which will be called with the result of the API call.\n+ *\n+ *   The second parameter to the callback is an object representing [ListRootCategoriesResponse]{@link ListRootCategoriesResponse}.\n+ * @return {Promise} - The promise which resolves to an array.\n+ *   The first element of the array is an object representing [ListRootCategoriesResponse]{@link ListRootCategoriesResponse}.\n+ *   The promise has a method named \"cancel\" which cancels the ongoing API call.\n+ *\n+ * @example\n+ *\n+ * var client = dlpV2beta1.dlpServiceClient();\n+ * var languageCode = '';\n+ * client.listRootCategories({languageCode: languageCode}).then(function(responses) {\n+ *     var response = responses[0];\n+ *     // doThingsWith(response)\n+ * }).catch(function(err) {\n+ *     console.error(err);\n+ * });\n+ */\n+DlpServiceClient.prototype.listRootCategories = function(request, options, callback) {\n+  if (options instanceof Function && callback === undefined) {\n+    callback = options;\n+    options = {};\n+  }\n+  if (options === undefined) {\n+    options = {};\n+  }\n+\n+  return this._listRootCategories(request, options, callback);\n+};\n+\n+function DlpServiceClientBuilder(gaxGrpc) {\n+  if (!(this instanceof DlpServiceClientBuilder)) {\n+    return new DlpServiceClientBuilder(gaxGrpc);\n+  }\n+\n+  var dlpServiceClient = require('grpc-google-privacy-dlp-v2beta1').client;","path":"packages/dlp/src/v2beta1/dlp_service_client.js","position":488,"original_position":488,"commit_id":"7121b38bebbcfc27c8bf1bd71170e7e1023019b5","original_commit_id":"7121b38bebbcfc27c8bf1bd71170e7e1023019b5","user":{"login":"stephenplusplus","id":723048,"avatar_url":"https://avatars3.githubusercontent.com/u/723048?v=3","gravatar_id":"","url":"https://api.github.com/users/stephenplusplus","html_url":"https://github.com/stephenplusplus","followers_url":"https://api.github.com/users/stephenplusplus/followers","following_url":"https://api.github.com/users/stephenplusplus/following{/other_user}","gists_url":"https://api.github.com/users/stephenplusplus/gists{/gist_id}","starred_url":"https://api.github.com/users/stephenplusplus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stephenplusplus/subscriptions","organizations_url":"https://api.github.com/users/stephenplusplus/orgs","repos_url":"https://api.github.com/users/stephenplusplus/repos","events_url":"https://api.github.com/users/stephenplusplus/events{/privacy}","received_events_url":"https://api.github.com/users/stephenplusplus/received_events","type":"User","site_admin":false},"body":"Is this meant to be replaced by the google-proto-files use like: https://github.com/GoogleCloudPlatform/google-cloud-node/blob/master/packages/video-intelligence/src/v1beta1/video_intelligence_service_client.js#L258 ?","created_at":"2017-05-23T20:34:01Z","updated_at":"2017-05-23T20:34:01Z","html_url":"https://github.com/GoogleCloudPlatform/google-cloud-node/pull/2323#discussion_r118099416","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/2323","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/comments/118099416"},"html":{"href":"https://github.com/GoogleCloudPlatform/google-cloud-node/pull/2323#discussion_r118099416"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/2323"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/2323","id":121671131,"html_url":"https://github.com/GoogleCloudPlatform/google-cloud-node/pull/2323","diff_url":"https://github.com/GoogleCloudPlatform/google-cloud-node/pull/2323.diff","patch_url":"https://github.com/GoogleCloudPlatform/google-cloud-node/pull/2323.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues/2323","number":2323,"state":"open","locked":false,"title":"DLP library (GAPIC-only)","user":{"login":"lukesneeringer","id":4346,"avatar_url":"https://avatars3.githubusercontent.com/u/4346?v=3","gravatar_id":"","url":"https://api.github.com/users/lukesneeringer","html_url":"https://github.com/lukesneeringer","followers_url":"https://api.github.com/users/lukesneeringer/followers","following_url":"https://api.github.com/users/lukesneeringer/following{/other_user}","gists_url":"https://api.github.com/users/lukesneeringer/gists{/gist_id}","starred_url":"https://api.github.com/users/lukesneeringer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukesneeringer/subscriptions","organizations_url":"https://api.github.com/users/lukesneeringer/orgs","repos_url":"https://api.github.com/users/lukesneeringer/repos","events_url":"https://api.github.com/users/lukesneeringer/events{/privacy}","received_events_url":"https://api.github.com/users/lukesneeringer/received_events","type":"User","site_admin":false},"body":"@ace-n Here is the DLP library to write samples against.\r\n\r\n@swcloud Can you add the protos to the common protos package? Coordinate that with @stephenplusplus (who will teach you how to do it).\r\n\r\nWe also need a README. We can autogen one once https://github.com/googleapis/toolkit/pull/1240 is merged.","created_at":"2017-05-21T18:37:20Z","updated_at":"2017-05-23T20:34:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5dbfe6b088de489d13360ce9c3065609dd47e2ce","assignee":{"login":"lukesneeringer","id":4346,"avatar_url":"https://avatars3.githubusercontent.com/u/4346?v=3","gravatar_id":"","url":"https://api.github.com/users/lukesneeringer","html_url":"https://github.com/lukesneeringer","followers_url":"https://api.github.com/users/lukesneeringer/followers","following_url":"https://api.github.com/users/lukesneeringer/following{/other_user}","gists_url":"https://api.github.com/users/lukesneeringer/gists{/gist_id}","starred_url":"https://api.github.com/users/lukesneeringer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukesneeringer/subscriptions","organizations_url":"https://api.github.com/users/lukesneeringer/orgs","repos_url":"https://api.github.com/users/lukesneeringer/repos","events_url":"https://api.github.com/users/lukesneeringer/events{/privacy}","received_events_url":"https://api.github.com/users/lukesneeringer/received_events","type":"User","site_admin":false},"assignees":[{"login":"lukesneeringer","id":4346,"avatar_url":"https://avatars3.githubusercontent.com/u/4346?v=3","gravatar_id":"","url":"https://api.github.com/users/lukesneeringer","html_url":"https://github.com/lukesneeringer","followers_url":"https://api.github.com/users/lukesneeringer/followers","following_url":"https://api.github.com/users/lukesneeringer/following{/other_user}","gists_url":"https://api.github.com/users/lukesneeringer/gists{/gist_id}","starred_url":"https://api.github.com/users/lukesneeringer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukesneeringer/subscriptions","organizations_url":"https://api.github.com/users/lukesneeringer/orgs","repos_url":"https://api.github.com/users/lukesneeringer/repos","events_url":"https://api.github.com/users/lukesneeringer/events{/privacy}","received_events_url":"https://api.github.com/users/lukesneeringer/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"landrito","id":8572251,"avatar_url":"https://avatars3.githubusercontent.com/u/8572251?v=3","gravatar_id":"","url":"https://api.github.com/users/landrito","html_url":"https://github.com/landrito","followers_url":"https://api.github.com/users/landrito/followers","following_url":"https://api.github.com/users/landrito/following{/other_user}","gists_url":"https://api.github.com/users/landrito/gists{/gist_id}","starred_url":"https://api.github.com/users/landrito/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/landrito/subscriptions","organizations_url":"https://api.github.com/users/landrito/orgs","repos_url":"https://api.github.com/users/landrito/repos","events_url":"https://api.github.com/users/landrito/events{/privacy}","received_events_url":"https://api.github.com/users/landrito/received_events","type":"User","site_admin":false},{"login":"swcloud","id":20783369,"avatar_url":"https://avatars3.githubusercontent.com/u/20783369?v=3","gravatar_id":"","url":"https://api.github.com/users/swcloud","html_url":"https://github.com/swcloud","followers_url":"https://api.github.com/users/swcloud/followers","following_url":"https://api.github.com/users/swcloud/following{/other_user}","gists_url":"https://api.github.com/users/swcloud/gists{/gist_id}","starred_url":"https://api.github.com/users/swcloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swcloud/subscriptions","organizations_url":"https://api.github.com/users/swcloud/orgs","repos_url":"https://api.github.com/users/swcloud/repos","events_url":"https://api.github.com/users/swcloud/events{/privacy}","received_events_url":"https://api.github.com/users/swcloud/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/2323/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/2323/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues/2323/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/statuses/7121b38bebbcfc27c8bf1bd71170e7e1023019b5","head":{"label":"GoogleCloudPlatform:dlp","ref":"dlp","sha":"7121b38bebbcfc27c8bf1bd71170e7e1023019b5","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars3.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":19483273,"name":"google-cloud-node","full_name":"GoogleCloudPlatform/google-cloud-node","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars3.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/google-cloud-node","description":"Google Cloud Client Library for Node.js","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/deployments","created_at":"2014-05-06T06:18:00Z","updated_at":"2017-05-23T11:42:19Z","pushed_at":"2017-05-23T19:18:03Z","git_url":"git://github.com/GoogleCloudPlatform/google-cloud-node.git","ssh_url":"git@github.com:GoogleCloudPlatform/google-cloud-node.git","clone_url":"https://github.com/GoogleCloudPlatform/google-cloud-node.git","svn_url":"https://github.com/GoogleCloudPlatform/google-cloud-node","homepage":"https://googlecloudplatform.github.io/google-cloud-node/","size":21564,"stargazers_count":1367,"watchers_count":1367,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":310,"mirror_url":null,"open_issues_count":91,"forks":310,"open_issues":91,"watchers":1367,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:master","ref":"master","sha":"d152416b48928ab13a17f710425266ed1b82dce0","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars3.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":19483273,"name":"google-cloud-node","full_name":"GoogleCloudPlatform/google-cloud-node","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars3.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/google-cloud-node","description":"Google Cloud Client Library for Node.js","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/deployments","created_at":"2014-05-06T06:18:00Z","updated_at":"2017-05-23T11:42:19Z","pushed_at":"2017-05-23T19:18:03Z","git_url":"git://github.com/GoogleCloudPlatform/google-cloud-node.git","ssh_url":"git@github.com:GoogleCloudPlatform/google-cloud-node.git","clone_url":"https://github.com/GoogleCloudPlatform/google-cloud-node.git","svn_url":"https://github.com/GoogleCloudPlatform/google-cloud-node","homepage":"https://googlecloudplatform.github.io/google-cloud-node/","size":21564,"stargazers_count":1367,"watchers_count":1367,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":310,"mirror_url":null,"open_issues_count":91,"forks":310,"open_issues":91,"watchers":1367,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/2323"},"html":{"href":"https://github.com/GoogleCloudPlatform/google-cloud-node/pull/2323"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues/2323"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/issues/2323/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/2323/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/pulls/2323/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-cloud-node/statuses/7121b38bebbcfc27c8bf1bd71170e7e1023019b5"}}}}
{"actor":{"display_login":"stephenplusplus"}}