From 436baa2c8d919ba79ab7d8b8d58e97f4663ce749 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Fri, 22 Nov 2024 14:35:40 -0800 Subject: [PATCH 1/3] grpc-js-xds: Update @types/node and update code for compatibility --- packages/grpc-js-xds/package.json | 2 +- packages/grpc-js-xds/src/load-balancer-priority.ts | 4 ++-- packages/grpc-js-xds/src/load-balancer-weighted-target.ts | 2 +- packages/grpc-js-xds/src/xds-client.ts | 4 ++-- packages/grpc-js-xds/test/client.ts | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/grpc-js-xds/package.json b/packages/grpc-js-xds/package.json index a6f0fcf1d..859e5b51a 100644 --- a/packages/grpc-js-xds/package.json +++ b/packages/grpc-js-xds/package.json @@ -36,7 +36,7 @@ "@types/gulp": "^4.0.6", "@types/gulp-mocha": "0.0.32", "@types/mocha": "^5.2.6", - "@types/node": "^13.11.1", + "@types/node": ">=20.11.20", "@types/yargs": "^15.0.5", "gts": "^2.0.2", "typescript": "^3.8.3", diff --git a/packages/grpc-js-xds/src/load-balancer-priority.ts b/packages/grpc-js-xds/src/load-balancer-priority.ts index a9d03d0a6..bb1fa3229 100644 --- a/packages/grpc-js-xds/src/load-balancer-priority.ts +++ b/packages/grpc-js-xds/src/load-balancer-priority.ts @@ -141,8 +141,8 @@ export class PriorityLoadBalancer implements LoadBalancer { private connectivityState: ConnectivityState = ConnectivityState.IDLE; private picker: Picker; private childBalancer: ChildLoadBalancerHandler; - private failoverTimer: NodeJS.Timer | null = null; - private deactivationTimer: NodeJS.Timer | null = null; + private failoverTimer: NodeJS.Timeout | null = null; + private deactivationTimer: NodeJS.Timeout | null = null; private seenReadyOrIdleSinceTransientFailure = false; constructor(private parent: PriorityLoadBalancer, private name: string, ignoreReresolutionRequests: boolean) { this.childBalancer = new ChildLoadBalancerHandler(experimental.createChildChannelControlHelper(this.parent.channelControlHelper, { diff --git a/packages/grpc-js-xds/src/load-balancer-weighted-target.ts b/packages/grpc-js-xds/src/load-balancer-weighted-target.ts index 7cd92d98b..1634575f6 100644 --- a/packages/grpc-js-xds/src/load-balancer-weighted-target.ts +++ b/packages/grpc-js-xds/src/load-balancer-weighted-target.ts @@ -149,7 +149,7 @@ export class WeightedTargetLoadBalancer implements LoadBalancer { private connectivityState: ConnectivityState = ConnectivityState.IDLE; private picker: Picker; private childBalancer: ChildLoadBalancerHandler; - private deactivationTimer: NodeJS.Timer | null = null; + private deactivationTimer: NodeJS.Timeout | null = null; private weight: number = 0; constructor(private parent: WeightedTargetLoadBalancer, private name: string) { diff --git a/packages/grpc-js-xds/src/xds-client.ts b/packages/grpc-js-xds/src/xds-client.ts index 020f767b5..28249b28f 100644 --- a/packages/grpc-js-xds/src/xds-client.ts +++ b/packages/grpc-js-xds/src/xds-client.ts @@ -102,7 +102,7 @@ export class Watcher implements ResourceWatcherInterface { const RESOURCE_TIMEOUT_MS = 15_000; class ResourceTimer { - private timer: NodeJS.Timer | null = null; + private timer: NodeJS.Timeout | null = null; private resourceSeen = false; constructor(private callState: AdsCallState, private type: XdsResourceType, private name: XdsResourceName) {} @@ -666,7 +666,7 @@ class ClusterLoadReportMap { } class LrsCallState { - private statsTimer: NodeJS.Timer | null = null; + private statsTimer: NodeJS.Timeout | null = null; private sentInitialMessage = false; constructor(private client: XdsSingleServerClient, private call: LrsCall, private node: Node) { call.on('data', (message: LoadStatsResponse__Output) => { diff --git a/packages/grpc-js-xds/test/client.ts b/packages/grpc-js-xds/test/client.ts index 0779702bb..ac04a2c48 100644 --- a/packages/grpc-js-xds/test/client.ts +++ b/packages/grpc-js-xds/test/client.ts @@ -42,7 +42,7 @@ const BOOTSTRAP_CONFIG_KEY = 'grpc.TEST_ONLY_DO_NOT_USE_IN_PROD.xds_bootstrap_co export class XdsTestClient { private client: EchoTestServiceClient; - private callInterval: NodeJS.Timer; + private callInterval: NodeJS.Timeout; constructor(target: string, bootstrapInfo: string, options?: ChannelOptions) { this.client = new loadedProtos.grpc.testing.EchoTestService(target, credentials.createInsecure(), {...options, [BOOTSTRAP_CONFIG_KEY]: bootstrapInfo}); From b5480496a03b05dacf006c28602309673925087f Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Mon, 2 Dec 2024 12:18:59 -0500 Subject: [PATCH 2/3] grpc-js-xds: Update to TypeScript 5 --- packages/grpc-js-xds/package.json | 2 +- packages/grpc-js-xds/src/http-filter.ts | 4 ++-- packages/grpc-js-xds/src/load-balancer-cds.ts | 6 +++--- packages/grpc-js-xds/src/matcher.ts | 4 ++-- packages/grpc-js-xds/src/resolver-xds.ts | 4 ++-- packages/grpc-js-xds/src/xds-bootstrap.ts | 8 ++++---- packages/grpc-js-xds/src/xds-client.ts | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/grpc-js-xds/package.json b/packages/grpc-js-xds/package.json index 859e5b51a..fb8f17003 100644 --- a/packages/grpc-js-xds/package.json +++ b/packages/grpc-js-xds/package.json @@ -39,7 +39,7 @@ "@types/node": ">=20.11.20", "@types/yargs": "^15.0.5", "gts": "^2.0.2", - "typescript": "^3.8.3", + "typescript": "^5.1.3", "yargs": "^15.4.1" }, "dependencies": { diff --git a/packages/grpc-js-xds/src/http-filter.ts b/packages/grpc-js-xds/src/http-filter.ts index 29ce5958f..f8da5b828 100644 --- a/packages/grpc-js-xds/src/http-filter.ts +++ b/packages/grpc-js-xds/src/http-filter.ts @@ -116,7 +116,7 @@ export function validateTopLevelFilter(httpFilter: HttpFilter__Output): boolean try { typeUrl = getTopLevelFilterUrl(encodedConfig); } catch (e) { - trace(httpFilter.name + ' validation failed with error ' + e.message); + trace(httpFilter.name + ' validation failed with error ' + (e as Error).message); return false; } const registryEntry = FILTER_REGISTRY.get(typeUrl); @@ -243,4 +243,4 @@ export function createHttpFilter(config: HttpFilterConfig, overrideConfig?: Http } else { return null; } -} \ No newline at end of file +} diff --git a/packages/grpc-js-xds/src/load-balancer-cds.ts b/packages/grpc-js-xds/src/load-balancer-cds.ts index 6f791299c..ce4e2553e 100644 --- a/packages/grpc-js-xds/src/load-balancer-cds.ts +++ b/packages/grpc-js-xds/src/load-balancer-cds.ts @@ -141,8 +141,8 @@ const RECURSION_DEPTH_LIMIT = 15; /** * Prerequisite: isClusterTreeFullyUpdated(tree, root) - * @param tree - * @param root + * @param tree + * @param root */ function getDiscoveryMechanismList(tree: ClusterTree, root: string): DiscoveryMechanism[] { const visited = new Set(); @@ -208,7 +208,7 @@ export class CdsLoadBalancer implements LoadBalancer { try { discoveryMechanismList = getDiscoveryMechanismList(this.clusterTree, this.latestConfig!.getCluster()); } catch (e) { - this.channelControlHelper.updateState(connectivityState.TRANSIENT_FAILURE, new UnavailablePicker({code: status.UNAVAILABLE, details: e.message, metadata: new Metadata()})); + this.channelControlHelper.updateState(connectivityState.TRANSIENT_FAILURE, new UnavailablePicker({code: status.UNAVAILABLE, details: (e as Error).message, metadata: new Metadata()})); return; } const clusterResolverConfig = new XdsClusterResolverLoadBalancingConfig( diff --git a/packages/grpc-js-xds/src/matcher.ts b/packages/grpc-js-xds/src/matcher.ts index 148df7f85..b657d32c9 100644 --- a/packages/grpc-js-xds/src/matcher.ts +++ b/packages/grpc-js-xds/src/matcher.ts @@ -71,7 +71,7 @@ export class SafeRegexValueMatcher implements ValueMatcher { const numberRegex = new RE2(/^-?\d+$/u); export class RangeValueMatcher implements ValueMatcher { - constructor(private start: BigInt, private end: BigInt) {} + constructor(private start: bigint, private end: bigint) {} apply(value: string) { if (!numberRegex.test(value)) { @@ -264,4 +264,4 @@ export class FullMatcher implements Matcher { headers: ${this.headerMatchers.map(matcher => matcher.toString()).join('\n\t')} fraction: ${this.fraction ? fractionToString(this.fraction): 'none'}`; } -} \ No newline at end of file +} diff --git a/packages/grpc-js-xds/src/resolver-xds.ts b/packages/grpc-js-xds/src/resolver-xds.ts index 17d3c6305..e6a0f2efd 100644 --- a/packages/grpc-js-xds/src/resolver-xds.ts +++ b/packages/grpc-js-xds/src/resolver-xds.ts @@ -634,7 +634,7 @@ class XdsResolver implements Resolver { this.isLdsWatcherActive = true; } catch (e) { - this.reportResolutionError(e.message); + this.reportResolutionError((e as Error).message); } } } @@ -647,7 +647,7 @@ class XdsResolver implements Resolver { try { this.bootstrapInfo = loadBootstrapInfo(); } catch (e) { - this.reportResolutionError(e.message); + this.reportResolutionError((e as Error).message); } this.startResolution(); } diff --git a/packages/grpc-js-xds/src/xds-bootstrap.ts b/packages/grpc-js-xds/src/xds-bootstrap.ts index 327ee1b06..1ef94aa74 100644 --- a/packages/grpc-js-xds/src/xds-bootstrap.ts +++ b/packages/grpc-js-xds/src/xds-bootstrap.ts @@ -354,14 +354,14 @@ export function loadBootstrapInfo(): BootstrapInfo { try { rawBootstrap = fs.readFileSync(bootstrapPath, { encoding: 'utf8'}); } catch (e) { - throw new Error(`Failed to read xDS bootstrap file from path ${bootstrapPath} with error ${e.message}`); + throw new Error(`Failed to read xDS bootstrap file from path ${bootstrapPath} with error ${(e as Error).message}`); } try { const parsedFile = JSON.parse(rawBootstrap); loadedBootstrapInfo = validateBootstrapConfig(parsedFile); return loadedBootstrapInfo; } catch (e) { - throw new Error(`Failed to parse xDS bootstrap file at path ${bootstrapPath} with error ${e.message}`) + throw new Error(`Failed to parse xDS bootstrap file at path ${bootstrapPath} with error ${(e as Error).message}`) } } @@ -380,14 +380,14 @@ export function loadBootstrapInfo(): BootstrapInfo { loadedBootstrapInfo = validateBootstrapConfig(parsedConfig); } catch (e) { throw new Error( - `Failed to parse xDS bootstrap config from environment variable GRPC_XDS_BOOTSTRAP_CONFIG with error ${e.message}` + `Failed to parse xDS bootstrap config from environment variable GRPC_XDS_BOOTSTRAP_CONFIG with error ${(e as Error).message}` ); } return loadedBootstrapInfo; } - + throw new Error( 'The GRPC_XDS_BOOTSTRAP or GRPC_XDS_BOOTSTRAP_CONFIG environment variables need to be set to the path to the bootstrap file to use xDS' ); diff --git a/packages/grpc-js-xds/src/xds-client.ts b/packages/grpc-js-xds/src/xds-client.ts index 28249b28f..8d354f1f7 100644 --- a/packages/grpc-js-xds/src/xds-client.ts +++ b/packages/grpc-js-xds/src/xds-client.ts @@ -208,14 +208,14 @@ class AdsResponseParser { try { decodeResult = this.result.type.decode(decodeContext, resource); } catch (e) { - this.result.errors.push(`${errorPrefix} ${e.message}`); + this.result.errors.push(`${errorPrefix} ${(e as Error).message}`); return; } let parsedName: XdsResourceName; try { parsedName = parseXdsResourceName(decodeResult.name, this.result.type!.getTypeUrl()); } catch (e) { - this.result.errors.push(`${errorPrefix} ${e.message}`); + this.result.errors.push(`${errorPrefix} ${(e as Error).message}`); return; } this.adsCallState.typeStates.get(this.result.type!)?.subscribedResources.get(parsedName.authority)?.get(parsedName.key)?.markSeen(); From adda74732dde4bfb453080179b611fd630cb0759 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Wed, 13 Nov 2024 17:37:33 -0800 Subject: [PATCH 3/3] grpc-js{,-xds}: Renew self-signed certificates used in tests --- packages/grpc-js/test/fixtures/ca.pem | 28 +++++++++++---------- packages/grpc-js/test/fixtures/server1.pem | 29 +++++++++++----------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/packages/grpc-js/test/fixtures/ca.pem b/packages/grpc-js/test/fixtures/ca.pem index 6c8511a73..9eb75fa0f 100644 --- a/packages/grpc-js/test/fixtures/ca.pem +++ b/packages/grpc-js/test/fixtures/ca.pem @@ -1,15 +1,17 @@ -----BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla -Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 -YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT -BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 -+L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu -g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd -Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau -sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m -oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG -Dfcog5wrJytaQ6UA0wE= +MIICzDCCAjWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4 +YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50ZXN0Lmdvb2dsZS5jb20wHhcNMjQxMTE0 +MDEzMjM3WhcNNDQxMTA5MDEzMjM3WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMI +SWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENv +LjEaMBgGA1UEAxQRKi50ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD +gY0AMIGJAoGBAOHDFScoLCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlu +mN+fm+AjPEK5GHhGn1BgzkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wH +NVX77fBZOgp9VlSMVfyd9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGj +gYswgYgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwTwYDVR0RBEgwRoIQKi50ZXN0 +Lmdvb2dsZS5mcoIYd2F0ZXJ6b29pLnRlc3QuZ29vZ2xlLmJlghIqLnRlc3QueW91 +dHViZS5jb22HBMCoAQMwHQYDVR0OBBYEFI50QV/hcKkD2qyS/Melvq16+zY8MA0G +CSqGSIb3DQEBCwUAA4GBAIxvZ4kg9HAvzM31p4J04h1MFfnDx8O4Hwogzpaqk+0M +qz8L1ojJy5jus1g8+RBguT1rv5TmRFpMWrp50XQ0bMFHoOcNyL0htxoOhmoKHoX9 +dM0KWtgUheeBcEm83UzFFlGKlna22+pdUHLEnuX+i25s+Lbi4/LGf6KwUlgPL/Vk -----END CERTIFICATE----- diff --git a/packages/grpc-js/test/fixtures/server1.pem b/packages/grpc-js/test/fixtures/server1.pem index f3d43fcc5..9eb75fa0f 100644 --- a/packages/grpc-js/test/fixtures/server1.pem +++ b/packages/grpc-js/test/fixtures/server1.pem @@ -1,16 +1,17 @@ -----BEGIN CERTIFICATE----- -MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET -MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ -dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx -MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV -BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 -ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco -LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg -zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd -9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw -CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy -em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G -CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 -hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh -y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 +MIICzDCCAjWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4 +YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50ZXN0Lmdvb2dsZS5jb20wHhcNMjQxMTE0 +MDEzMjM3WhcNNDQxMTA5MDEzMjM3WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMI +SWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENv +LjEaMBgGA1UEAxQRKi50ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD +gY0AMIGJAoGBAOHDFScoLCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlu +mN+fm+AjPEK5GHhGn1BgzkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wH +NVX77fBZOgp9VlSMVfyd9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGj +gYswgYgwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwTwYDVR0RBEgwRoIQKi50ZXN0 +Lmdvb2dsZS5mcoIYd2F0ZXJ6b29pLnRlc3QuZ29vZ2xlLmJlghIqLnRlc3QueW91 +dHViZS5jb22HBMCoAQMwHQYDVR0OBBYEFI50QV/hcKkD2qyS/Melvq16+zY8MA0G +CSqGSIb3DQEBCwUAA4GBAIxvZ4kg9HAvzM31p4J04h1MFfnDx8O4Hwogzpaqk+0M +qz8L1ojJy5jus1g8+RBguT1rv5TmRFpMWrp50XQ0bMFHoOcNyL0htxoOhmoKHoX9 +dM0KWtgUheeBcEm83UzFFlGKlna22+pdUHLEnuX+i25s+Lbi4/LGf6KwUlgPL/Vk -----END CERTIFICATE-----