@google/clasp
Version:
Develop Apps Script Projects locally
64 lines (63 loc) • 2.9 kB
JavaScript
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(); });
}
}