UNPKG

@google/clasp

Version:

Develop Apps Script Projects locally

64 lines (63 loc) 2.9 kB
import { createServer } from 'http'; import open from 'open'; import enableDestroy from 'server-destroy'; import { intl } from '../intl.js'; import { AuthorizationCodeFlow, parseAuthResponseUrl } from './auth_code_flow.js'; export class LocalServerAuthorizationCodeFlow extends AuthorizationCodeFlow { constructor(oauth2client) { super(oauth2client); this.port = 0; } async getRedirectUri() { this.server = await new Promise((resolve, reject) => { const s = createServer(); enableDestroy(s); s.listen(this.port, () => resolve(s)).on('error', (err) => { if (err.code === 'EADDRINUSE') { const msg = intl.formatMessage({ id: "smVcjx", defaultMessage: [{ type: 0, value: "Error: Port " }, { type: 1, value: "port" }, { type: 0, value: " is already in use. Please specify a different port with --redirect-port" }] }, { port: this.port, }); console.error(msg); } else { const msg = intl.formatMessage({ id: "3X2J9l", defaultMessage: [{ type: 0, value: "Error: Unable to start the server on port " }, { type: 1, value: "port" }] }, { port: this.port, errorMessage: err.message, }); console.error(msg, err.message); } reject(err); }); }); const { port } = this.server.address(); return `http://localhost:${port}`; } async promptAndReturnCode(authorizationUrl) { return await new Promise((resolve, reject) => { if (!this.server) { reject(new Error('Server not started')); return; } this.server.on('request', (request, response) => { if (!request.url) { reject(new Error('Missing URL in request')); return; } const { code, error } = parseAuthResponseUrl(request.url); if (code) { resolve(code); } else { reject(error); } const msg = intl.formatMessage({ id: "ZT8LeG", defaultMessage: [{ type: 0, value: "Logged in! You may close this page." }] }); response.end(msg); }); void open(authorizationUrl); const msg = intl.formatMessage({ id: "NbCrKh", defaultMessage: [{ type: 0, value: "`\uD83D\uDD11 Authorize clasp by visiting this url: " }, { type: 1, value: "url" }] }, { url: authorizationUrl, }); console.log(msg); }).finally(() => { var _a; return (_a = this.server) === null || _a === void 0 ? void 0 : _a.destroy(); }); } }