in src/cloud-sql-instance.ts [253:297]
private async performRefresh(): Promise<RefreshResult> {
if (this.closed) {
// The connector may be closed while the rate limiter delayed
// a call to performRefresh() so check this.closed before continuing.
return Promise.reject('closed');
}
const rsaKeys: RSAKeys = await generateKeys();
const metadata: InstanceMetadata =
await this.sqlAdminFetcher.getInstanceMetadata(this.instanceInfo);
const ephemeralCert = await this.sqlAdminFetcher.getEphemeralCertificate(
this.instanceInfo,
rsaKeys.publicKey,
this.authType
);
const host = selectIpAddress(metadata.ipAddresses, this.ipType);
const privateKey = rsaKeys.privateKey;
const serverCaCert = metadata.serverCaCert;
this.serverCaMode = metadata.serverCaMode;
this.dnsName = metadata.dnsName;
const currentValues = {
ephemeralCert: this.ephemeralCert,
host: this.host,
privateKey: this.privateKey,
serverCaCert: this.serverCaCert,
};
const nextValues = {
ephemeralCert,
host,
privateKey,
serverCaCert,
};
// In the rather odd case that the current ephemeral certificate is still
// valid while we get an invalid result from the API calls, then preserve
// the current metadata.
if (this.isValid(currentValues) && !this.isValid(nextValues)) {
return currentValues as RefreshResult;
}
return nextValues;
}