private async performRefresh()

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;
  }