private async _awsRealTimeIAMHeader()

in packages/aws-appsync-subscription-link/src/realtime-subscription-handshake-link.ts [487:532]


  private async _awsRealTimeIAMHeader({
    payload,
    canonicalUri,
    appSyncGraphqlEndpoint,
    region,
    credentials
  }): Promise<Record<string, string>> {
    const endpointInfo = {
      region,
      service: SERVICE
    };

    let creds =
      typeof credentials === "function"
        ? credentials.call()
        : credentials || {};

    if (creds && typeof creds.getPromise === "function") {
      await creds.getPromise();
    }

    if (!creds) {
      throw new Error("No credentials");
    }
    const { accessKeyId, secretAccessKey, sessionToken } = await creds;

    const formattedCredentials = {
      access_key: accessKeyId,
      secret_key: secretAccessKey,
      session_token: sessionToken
    };

    const request = {
      url: `${appSyncGraphqlEndpoint}${canonicalUri}`,
      body: payload,
      method: "POST",
      headers: { ...APPSYNC_REALTIME_HEADERS }
    };

    const signed_params = Signer.sign(
      request,
      formattedCredentials,
      endpointInfo
    );
    return signed_params.headers;
  }