mirror of
https://github.com/zitadel/zitadel.git
synced 2025-12-08 18:42:20 +00:00
44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
|
|
import { Gaxios, GaxiosResponse } from "gaxios";
|
||
|
|
|
||
|
|
const awaitNotification = new Gaxios({
|
||
|
|
url: process.env.SINK_NOTIFICATION_URL,
|
||
|
|
method: "POST",
|
||
|
|
retryConfig: {
|
||
|
|
httpMethodsToRetry: ["POST"],
|
||
|
|
statusCodesToRetry: [[404, 404]],
|
||
|
|
retry: Number.MAX_SAFE_INTEGER, // totalTimeout limits the number of retries
|
||
|
|
totalTimeout: 10000, // 10 seconds
|
||
|
|
onRetryAttempt: (error) => {
|
||
|
|
console.warn(`Retrying request to sink notification service: ${error.message}`);
|
||
|
|
},
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
export async function getOtpFromSink(recipient: string): Promise<any> {
|
||
|
|
return awaitNotification.request({ data: { recipient } }).then((response) => {
|
||
|
|
expectSuccess(response);
|
||
|
|
const otp = response?.data?.args?.otp;
|
||
|
|
if (!otp) {
|
||
|
|
throw new Error(`Response does not contain an otp property: ${JSON.stringify(response.data, null, 2)}`);
|
||
|
|
}
|
||
|
|
return otp;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function getCodeFromSink(recipient: string): Promise<any> {
|
||
|
|
return awaitNotification.request({ data: { recipient } }).then((response) => {
|
||
|
|
expectSuccess(response);
|
||
|
|
const code = response?.data?.args?.code;
|
||
|
|
if (!code) {
|
||
|
|
throw new Error(`Response does not contain a code property: ${JSON.stringify(response.data, null, 2)}`);
|
||
|
|
}
|
||
|
|
return code;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function expectSuccess(response: GaxiosResponse): void {
|
||
|
|
if (response.status !== 200) {
|
||
|
|
throw new Error(`Expected HTTP status 200, but got: ${response.status} - ${response.statusText}`);
|
||
|
|
}
|
||
|
|
}
|