From 663523d2e6b06e19437e6fafe931821a64a2aca3 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot <44816363+yoshi-automation@users.noreply.github.com> Date: Thu, 28 Feb 2019 05:27:36 -0800 Subject: [PATCH] feat(subscription): support push config auth methods (#504) --- package.json | 2 +- proto/pubsub.d.ts | 351 +++++++--------------- protos/google/pubsub/v1/pubsub.proto | 38 ++- src/subscription.ts | 18 +- src/v1/doc/google/pubsub/v1/doc_pubsub.js | 35 +++ synth.metadata | 12 +- 6 files changed, 192 insertions(+), 264 deletions(-) diff --git a/package.json b/package.json index 47c6ec66e..d78b01a6d 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "prepare": "npm run compile", "pretest": "npm run compile", "proto": "npm run proto:pubsub", - "proto:pubsub": "mkdir -p proto && pbjs -t static-module -w commonjs -p node_modules/google-proto-files google/pubsub/v1/pubsub.proto | pbts -o proto/pubsub.d.ts -", + "proto:pubsub": "mkdir -p proto && pbjs -t static-module -w commonjs -p protos google/pubsub/v1/pubsub.proto | pbts -o proto/pubsub.d.ts -", "docs-test": "linkinator docs -r --skip www.googleapis.com", "predocs-test": "npm run docs" }, diff --git a/proto/pubsub.d.ts b/proto/pubsub.d.ts index 935b63002..572388ae9 100644 --- a/proto/pubsub.d.ts +++ b/proto/pubsub.d.ts @@ -2146,6 +2146,9 @@ export namespace google { /** PushConfig attributes */ attributes?: ({ [k: string]: string }|null); + + /** PushConfig oidcToken */ + oidcToken?: (google.pubsub.v1.PushConfig.IOidcToken|null); } /** Represents a PushConfig. */ @@ -2163,6 +2166,12 @@ export namespace google { /** PushConfig attributes. */ public attributes: { [k: string]: string }; + /** PushConfig oidcToken. */ + public oidcToken?: (google.pubsub.v1.PushConfig.IOidcToken|null); + + /** PushConfig authenticationMethod. */ + public authenticationMethod?: "oidcToken"; + /** * Creates a new PushConfig instance using the specified properties. * @param [properties] Properties to set @@ -2234,6 +2243,105 @@ export namespace google { public toJSON(): { [k: string]: any }; } + namespace PushConfig { + + /** Properties of an OidcToken. */ + interface IOidcToken { + + /** OidcToken serviceAccountEmail */ + serviceAccountEmail?: (string|null); + + /** OidcToken audience */ + audience?: (string|null); + } + + /** Represents an OidcToken. */ + class OidcToken implements IOidcToken { + + /** + * Constructs a new OidcToken. + * @param [properties] Properties to set + */ + constructor(properties?: google.pubsub.v1.PushConfig.IOidcToken); + + /** OidcToken serviceAccountEmail. */ + public serviceAccountEmail: string; + + /** OidcToken audience. */ + public audience: string; + + /** + * Creates a new OidcToken instance using the specified properties. + * @param [properties] Properties to set + * @returns OidcToken instance + */ + public static create(properties?: google.pubsub.v1.PushConfig.IOidcToken): google.pubsub.v1.PushConfig.OidcToken; + + /** + * Encodes the specified OidcToken message. Does not implicitly {@link google.pubsub.v1.PushConfig.OidcToken.verify|verify} messages. + * @param message OidcToken message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: google.pubsub.v1.PushConfig.IOidcToken, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified OidcToken message, length delimited. Does not implicitly {@link google.pubsub.v1.PushConfig.OidcToken.verify|verify} messages. + * @param message OidcToken message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: google.pubsub.v1.PushConfig.IOidcToken, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an OidcToken message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns OidcToken + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.pubsub.v1.PushConfig.OidcToken; + + /** + * Decodes an OidcToken message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns OidcToken + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.pubsub.v1.PushConfig.OidcToken; + + /** + * Verifies an OidcToken message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates an OidcToken message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns OidcToken + */ + public static fromObject(object: { [k: string]: any }): google.pubsub.v1.PushConfig.OidcToken; + + /** + * Creates a plain object from an OidcToken message. Also converts values to other types if specified. + * @param message OidcToken + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: google.pubsub.v1.PushConfig.OidcToken, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this OidcToken to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + /** Properties of a ReceivedMessage. */ interface IReceivedMessage { @@ -4377,9 +4485,6 @@ export namespace google { /** Http rules */ rules?: (google.api.IHttpRule[]|null); - - /** Http fullyDecodeReservedExpansion */ - fullyDecodeReservedExpansion?: (boolean|null); } /** Represents a Http. */ @@ -4394,9 +4499,6 @@ export namespace google { /** Http rules. */ public rules: google.api.IHttpRule[]; - /** Http fullyDecodeReservedExpansion. */ - public fullyDecodeReservedExpansion: boolean; - /** * Creates a new Http instance using the specified properties. * @param [properties] Properties to set @@ -4495,9 +4597,6 @@ export namespace google { /** HttpRule body */ body?: (string|null); - /** HttpRule responseBody */ - responseBody?: (string|null); - /** HttpRule additionalBindings */ additionalBindings?: (google.api.IHttpRule[]|null); } @@ -4535,9 +4634,6 @@ export namespace google { /** HttpRule body. */ public body: string; - /** HttpRule responseBody. */ - public responseBody: string; - /** HttpRule additionalBindings. */ public additionalBindings: google.api.IHttpRule[]; @@ -5115,9 +5211,6 @@ export namespace google { /** ExtensionRange end */ end?: (number|null); - - /** ExtensionRange options */ - options?: (google.protobuf.IExtensionRangeOptions|null); } /** Represents an ExtensionRange. */ @@ -5135,9 +5228,6 @@ export namespace google { /** ExtensionRange end. */ public end: number; - /** ExtensionRange options. */ - public options?: (google.protobuf.IExtensionRangeOptions|null); - /** * Creates a new ExtensionRange instance using the specified properties. * @param [properties] Properties to set @@ -5306,96 +5396,6 @@ export namespace google { } } - /** Properties of an ExtensionRangeOptions. */ - interface IExtensionRangeOptions { - - /** ExtensionRangeOptions uninterpretedOption */ - uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); - } - - /** Represents an ExtensionRangeOptions. */ - class ExtensionRangeOptions implements IExtensionRangeOptions { - - /** - * Constructs a new ExtensionRangeOptions. - * @param [properties] Properties to set - */ - constructor(properties?: google.protobuf.IExtensionRangeOptions); - - /** ExtensionRangeOptions uninterpretedOption. */ - public uninterpretedOption: google.protobuf.IUninterpretedOption[]; - - /** - * Creates a new ExtensionRangeOptions instance using the specified properties. - * @param [properties] Properties to set - * @returns ExtensionRangeOptions instance - */ - public static create(properties?: google.protobuf.IExtensionRangeOptions): google.protobuf.ExtensionRangeOptions; - - /** - * Encodes the specified ExtensionRangeOptions message. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. - * @param message ExtensionRangeOptions message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.protobuf.IExtensionRangeOptions, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Encodes the specified ExtensionRangeOptions message, length delimited. Does not implicitly {@link google.protobuf.ExtensionRangeOptions.verify|verify} messages. - * @param message ExtensionRangeOptions message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.protobuf.IExtensionRangeOptions, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Decodes an ExtensionRangeOptions message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns ExtensionRangeOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.ExtensionRangeOptions; - - /** - * Decodes an ExtensionRangeOptions message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns ExtensionRangeOptions - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.ExtensionRangeOptions; - - /** - * Verifies an ExtensionRangeOptions message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); - - /** - * Creates an ExtensionRangeOptions message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns ExtensionRangeOptions - */ - public static fromObject(object: { [k: string]: any }): google.protobuf.ExtensionRangeOptions; - - /** - * Creates a plain object from an ExtensionRangeOptions message. Also converts values to other types if specified. - * @param message ExtensionRangeOptions - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.protobuf.ExtensionRangeOptions, options?: $protobuf.IConversionOptions): { [k: string]: any }; - - /** - * Converts this ExtensionRangeOptions to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } - /** Properties of a FieldDescriptorProto. */ interface IFieldDescriptorProto { @@ -5679,12 +5679,6 @@ export namespace google { /** EnumDescriptorProto options */ options?: (google.protobuf.IEnumOptions|null); - - /** EnumDescriptorProto reservedRange */ - reservedRange?: (google.protobuf.EnumDescriptorProto.IEnumReservedRange[]|null); - - /** EnumDescriptorProto reservedName */ - reservedName?: (string[]|null); } /** Represents an EnumDescriptorProto. */ @@ -5705,12 +5699,6 @@ export namespace google { /** EnumDescriptorProto options. */ public options?: (google.protobuf.IEnumOptions|null); - /** EnumDescriptorProto reservedRange. */ - public reservedRange: google.protobuf.EnumDescriptorProto.IEnumReservedRange[]; - - /** EnumDescriptorProto reservedName. */ - public reservedName: string[]; - /** * Creates a new EnumDescriptorProto instance using the specified properties. * @param [properties] Properties to set @@ -5782,105 +5770,6 @@ export namespace google { public toJSON(): { [k: string]: any }; } - namespace EnumDescriptorProto { - - /** Properties of an EnumReservedRange. */ - interface IEnumReservedRange { - - /** EnumReservedRange start */ - start?: (number|null); - - /** EnumReservedRange end */ - end?: (number|null); - } - - /** Represents an EnumReservedRange. */ - class EnumReservedRange implements IEnumReservedRange { - - /** - * Constructs a new EnumReservedRange. - * @param [properties] Properties to set - */ - constructor(properties?: google.protobuf.EnumDescriptorProto.IEnumReservedRange); - - /** EnumReservedRange start. */ - public start: number; - - /** EnumReservedRange end. */ - public end: number; - - /** - * Creates a new EnumReservedRange instance using the specified properties. - * @param [properties] Properties to set - * @returns EnumReservedRange instance - */ - public static create(properties?: google.protobuf.EnumDescriptorProto.IEnumReservedRange): google.protobuf.EnumDescriptorProto.EnumReservedRange; - - /** - * Encodes the specified EnumReservedRange message. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. - * @param message EnumReservedRange message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encode(message: google.protobuf.EnumDescriptorProto.IEnumReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Encodes the specified EnumReservedRange message, length delimited. Does not implicitly {@link google.protobuf.EnumDescriptorProto.EnumReservedRange.verify|verify} messages. - * @param message EnumReservedRange message or plain object to encode - * @param [writer] Writer to encode to - * @returns Writer - */ - public static encodeDelimited(message: google.protobuf.EnumDescriptorProto.IEnumReservedRange, writer?: $protobuf.Writer): $protobuf.Writer; - - /** - * Decodes an EnumReservedRange message from the specified reader or buffer. - * @param reader Reader or buffer to decode from - * @param [length] Message length if known beforehand - * @returns EnumReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): google.protobuf.EnumDescriptorProto.EnumReservedRange; - - /** - * Decodes an EnumReservedRange message from the specified reader or buffer, length delimited. - * @param reader Reader or buffer to decode from - * @returns EnumReservedRange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): google.protobuf.EnumDescriptorProto.EnumReservedRange; - - /** - * Verifies an EnumReservedRange message. - * @param message Plain object to verify - * @returns `null` if valid, otherwise the reason why it is not - */ - public static verify(message: { [k: string]: any }): (string|null); - - /** - * Creates an EnumReservedRange message from a plain object. Also converts values to their respective internal types. - * @param object Plain object - * @returns EnumReservedRange - */ - public static fromObject(object: { [k: string]: any }): google.protobuf.EnumDescriptorProto.EnumReservedRange; - - /** - * Creates a plain object from an EnumReservedRange message. Also converts values to other types if specified. - * @param message EnumReservedRange - * @param [options] Conversion options - * @returns Plain object - */ - public static toObject(message: google.protobuf.EnumDescriptorProto.EnumReservedRange, options?: $protobuf.IConversionOptions): { [k: string]: any }; - - /** - * Converts this EnumReservedRange to JSON. - * @returns JSON object - */ - public toJSON(): { [k: string]: any }; - } - } - /** Properties of an EnumValueDescriptorProto. */ interface IEnumValueDescriptorProto { @@ -6238,9 +6127,6 @@ export namespace google { /** FileOptions pyGenericServices */ pyGenericServices?: (boolean|null); - /** FileOptions phpGenericServices */ - phpGenericServices?: (boolean|null); - /** FileOptions deprecated */ deprecated?: (boolean|null); @@ -6259,15 +6145,6 @@ export namespace google { /** FileOptions phpClassPrefix */ phpClassPrefix?: (string|null); - /** FileOptions phpNamespace */ - phpNamespace?: (string|null); - - /** FileOptions phpMetadataNamespace */ - phpMetadataNamespace?: (string|null); - - /** FileOptions rubyPackage */ - rubyPackage?: (string|null); - /** FileOptions uninterpretedOption */ uninterpretedOption?: (google.protobuf.IUninterpretedOption[]|null); } @@ -6311,9 +6188,6 @@ export namespace google { /** FileOptions pyGenericServices. */ public pyGenericServices: boolean; - /** FileOptions phpGenericServices. */ - public phpGenericServices: boolean; - /** FileOptions deprecated. */ public deprecated: boolean; @@ -6332,15 +6206,6 @@ export namespace google { /** FileOptions phpClassPrefix. */ public phpClassPrefix: string; - /** FileOptions phpNamespace. */ - public phpNamespace: string; - - /** FileOptions phpMetadataNamespace. */ - public phpMetadataNamespace: string; - - /** FileOptions rubyPackage. */ - public rubyPackage: string; - /** FileOptions uninterpretedOption. */ public uninterpretedOption: google.protobuf.IUninterpretedOption[]; diff --git a/protos/google/pubsub/v1/pubsub.proto b/protos/google/pubsub/v1/pubsub.proto index 02d0bf34b..095a37b15 100644 --- a/protos/google/pubsub/v1/pubsub.proto +++ b/protos/google/pubsub/v1/pubsub.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -651,6 +651,42 @@ message PushConfig { // * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. // * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API. map attributes = 2; + + // An authentication method used by push endpoints to verify the source of + // push requests. This can be used with push endpoints that are private by + // default to allow requests only from the Cloud Pub/Sub system, for example. + // This field is optional and should be set only by users interested in + // authenticated push. + // EXPERIMENTAL: This field a part of a closed alpha that may not be + // accessible to all users. It may be changed in backward-incompatible ways + // and is not subject to any SLA or deprecation policy. It is not recommended + // for production use. + oneof authentication_method { + // If specified, Pub/Sub will generate and attach an OIDC JWT token as an + // `Authorization` header in the HTTP request for every pushed message. + OidcToken oidc_token = 3; + } + + // Contains information needed for generating an + // [OpenID Connect + // token](https://developers.google.com/identity/protocols/OpenIDConnect). + message OidcToken { + // [Service account + // email](https://cloud.google.com/iam/docs/service-accounts) + // to be used for generating the OIDC token. The caller (for + // CreateSubscription, UpdateSubscription, and ModifyPushConfig calls) must + // have the iam.serviceAccounts.actAs permission for the service account. + // See https://cloud.google.com/iam/docs/understanding-roles#service-accounts-roles. + string service_account_email = 1; + + // Audience to be used when generating OIDC token. The audience claim + // identifies the recipients that the JWT is intended for. The audience + // value is a single case-sensitive string. Having multiple values (array) + // for the audience field is not supported. More info about the OIDC JWT + // token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3 + // Note: if not specified, the Push endpoint URL will be used. + string audience = 2; + } } // A message and its corresponding acknowledgment ID. diff --git a/src/subscription.ts b/src/subscription.ts index 43317028d..5cbcc397e 100644 --- a/src/subscription.ts +++ b/src/subscription.ts @@ -50,14 +50,6 @@ import {noop} from './util'; * terminated by 's'. Example: "3.5s". */ -/** - * @see https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions#PushConfig - */ -export interface PushConfig { - pushEndpoint: string; - attributes?: {[key: string]: string;}; -} - /** * @see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration */ @@ -72,7 +64,7 @@ export interface Duration { export interface TSubscriptionMetadata { name: string; topic: string; - pushConfig?: PushConfig; + pushConfig?: google.pubsub.v1.IPushConfig; ackDeadlineSeconds?: number; retainAckedMessages?: boolean; labels?: {[key: string]: string;}; @@ -675,16 +667,16 @@ export class Subscription extends EventEmitter { * const apiResponse = data[0]; * }); */ - modifyPushConfig(config: PushConfig, gaxOpts?: CallOptions): + modifyPushConfig(config: google.pubsub.v1.IPushConfig, gaxOpts?: CallOptions): Promise; modifyPushConfig( - config: PushConfig, + config: google.pubsub.v1.IPushConfig, callback: RequestCallback): void; modifyPushConfig( - config: PushConfig, gaxOpts: CallOptions, + config: google.pubsub.v1.IPushConfig, gaxOpts: CallOptions, callback: RequestCallback): void; modifyPushConfig( - config: PushConfig, + config: google.pubsub.v1.IPushConfig, gaxOptsOrCallback?: CallOptions|RequestCallback, callback?: RequestCallback): void|Promise { diff --git a/src/v1/doc/google/pubsub/v1/doc_pubsub.js b/src/v1/doc/google/pubsub/v1/doc_pubsub.js index d3863e4e7..c30756dd9 100644 --- a/src/v1/doc/google/pubsub/v1/doc_pubsub.js +++ b/src/v1/doc/google/pubsub/v1/doc_pubsub.js @@ -475,12 +475,47 @@ const ExpirationPolicy = { * * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. * * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API. * + * @property {Object} oidcToken + * If specified, Pub/Sub will generate and attach an OIDC JWT token as an + * `Authorization` header in the HTTP request for every pushed message. + * + * This object should have the same structure as [OidcToken]{@link google.pubsub.v1.OidcToken} + * * @typedef PushConfig * @memberof google.pubsub.v1 * @see [google.pubsub.v1.PushConfig definition in proto format]{@link https://github.com/googleapis/googleapis/blob/master/google/pubsub/v1/pubsub.proto} */ const PushConfig = { // This is for documentation. Actual contents will be loaded by gRPC. + + /** + * Contains information needed for generating an + * [OpenID Connect + * token](https://developers.google.com/identity/protocols/OpenIDConnect). + * + * @property {string} serviceAccountEmail + * [Service account + * email](https://cloud.google.com/iam/docs/service-accounts) + * to be used for generating the OIDC token. The caller (for + * CreateSubscription, UpdateSubscription, and ModifyPushConfig calls) must + * have the iam.serviceAccounts.actAs permission for the service account. + * See https://cloud.google.com/iam/docs/understanding-roles#service-accounts-roles. + * + * @property {string} audience + * Audience to be used when generating OIDC token. The audience claim + * identifies the recipients that the JWT is intended for. The audience + * value is a single case-sensitive string. Having multiple values (array) + * for the audience field is not supported. More info about the OIDC JWT + * token audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3 + * Note: if not specified, the Push endpoint URL will be used. + * + * @typedef OidcToken + * @memberof google.pubsub.v1 + * @see [google.pubsub.v1.PushConfig.OidcToken definition in proto format]{@link https://github.com/googleapis/googleapis/blob/master/google/pubsub/v1/pubsub.proto} + */ + OidcToken: { + // This is for documentation. Actual contents will be loaded by gRPC. + } }; /** diff --git a/synth.metadata b/synth.metadata index 8b31fe651..5993b9c77 100644 --- a/synth.metadata +++ b/synth.metadata @@ -1,26 +1,26 @@ { - "updateTime": "2019-02-13T12:21:35.607578Z", + "updateTime": "2019-02-28T12:18:55.555938Z", "sources": [ { "generator": { "name": "artman", - "version": "0.16.13", - "dockerImage": "googleapis/artman@sha256:5fd9aee1d82a00cebf425c8fa431f5457539562f5867ad9c54370f0ec9a7ccaa" + "version": "0.16.14", + "dockerImage": "googleapis/artman@sha256:f3d61ae45abaeefb6be5f228cda22732c2f1b00fb687c79c4bd4f2c42bb1e1a7" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "ca61898878f0926dd9dcc68ba90764f17133efe4", - "internalRef": "233680013" + "sha": "9c769d3a0e67e4df9b9e8eee480124c2700a7e6c", + "internalRef": "235997788" } }, { "template": { "name": "node_library", "origin": "synthtool.gcp", - "version": "2019.1.16" + "version": "2019.2.26" } } ],