( port: number, callbackUrl: string, authUrl: string, successHtml: string, getTokens: (queryCode: string, callbackUrl: string) => Promise<ResultType>, )
| 571 | } |
| 572 | |
| 573 | async function loginWithLocalhost<ResultType>( |
| 574 | port: number, |
| 575 | callbackUrl: string, |
| 576 | authUrl: string, |
| 577 | successHtml: string, |
| 578 | getTokens: (queryCode: string, callbackUrl: string) => Promise<ResultType>, |
| 579 | ): Promise<ResultType> { |
| 580 | return new Promise<ResultType>((resolve, reject) => { |
| 581 | const server = http.createServer(async (req, res) => { |
| 582 | const query = url.parse(`${req.url}`, true).query || {}; |
| 583 | const queryState = query.state; |
| 584 | const queryCode = query.code; |
| 585 | |
| 586 | if (queryState !== _nonce || typeof queryCode !== "string") { |
| 587 | const html = await readTemplate("loginFailure.html"); |
| 588 | respondHtml(req, res, 400, html); |
| 589 | reject(new FirebaseError("Unexpected error while logging in")); |
| 590 | server.close(); |
| 591 | return; |
| 592 | } |
| 593 | |
| 594 | try { |
| 595 | const tokens = await getTokens(queryCode, callbackUrl); |
| 596 | respondHtml(req, res, 200, successHtml); |
| 597 | resolve(tokens); |
| 598 | } catch (err: unknown) { |
| 599 | const html = await readTemplate("loginFailure.html"); |
| 600 | respondHtml(req, res, 400, html); |
| 601 | reject(err); |
| 602 | } |
| 603 | server.close(); |
| 604 | return; |
| 605 | }); |
| 606 | |
| 607 | server.listen(port, () => { |
| 608 | logger.info(); |
| 609 | logger.info("Visit this URL on this device to log in:"); |
| 610 | logger.info(clc.bold(clc.underline(authUrl))); |
| 611 | logger.info(); |
| 612 | logger.info("Waiting for authentication..."); |
| 613 | |
| 614 | open(authUrl); |
| 615 | }); |
| 616 | |
| 617 | server.on("error", (err) => { |
| 618 | reject(err); |
| 619 | }); |
| 620 | }); |
| 621 | } |
| 622 | |
| 623 | export async function loginGoogle(localhost: boolean, userHint?: string): Promise<UserCredentials> { |
| 624 | if (localhost) { |
no test coverage detected
searching dependent graphs…