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