async listenForAuthCode()

in desktop/src/client/core/aad/auth-loopback-client.ts [44:90]


    async listenForAuthCode(successTemplate?: string, errorTemplate?: string): Promise<ServerAuthorizationCodeResponse> {
        if (!!this.server) {
            throw new Error("Auth code listener already exists. Cannot create another.");
        }

        const authCodeListener = new Promise<ServerAuthorizationCodeResponse>((resolve, reject) => {
            this.server = createServer(async (req: IncomingMessage, res: ServerResponse) => {
                const url = req.url;
                if (!url) {
                    res.end(errorTemplate || "Login failed: Error occurred loading redirectUrl");
                    reject(new Error("Auth code listener callback was invoked without a url."));
                    return;
                } else if (url === "/") {
                    res.end(successTemplate || "Successfully logged in to Batch Explorer. You may close this window.");
                    return;
                }

                const authCodeResponse = AuthLoopbackClient.getDeserializedQueryString(url);
                if (authCodeResponse.code) {
                    const redirectUri = this.getRedirectUri();
                    res.writeHead(302, { location: redirectUri }); // Prevent auth code from being saved in the browser history
                    res.end();
                }
                resolve(authCodeResponse);
            });
            this.server.listen(this.port);
            log.debug(`Initialized auth code listener on port ${this.port}`);
        });

        // Wait for server to be listening
        await new Promise<void>((resolve) => {
            let ticks = 0;
            const id = setInterval(() => {
                if ((5000 / 100) < ticks) {
                    throw new Error("Timed out waiting for auth code listener to be registered.");
                }

                if (this.server.listening) {
                    clearInterval(id);
                    resolve();
                }
                ticks++;
            }, 100);
        });

        return authCodeListener;
    }