UNPKG

vsce2

Version:

VSCode Extension Manager

134 lines (133 loc) 6.12 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.listPublishers = exports.deletePublisher = exports.logoutPublisher = exports.loginPublisher = exports.getPublisher = exports.verifyPat = void 0; const fs = require("fs"); const path = require("path"); const osenv_1 = require("osenv"); const util_1 = require("./util"); const validation_1 = require("./validation"); const denodeify = require("denodeify"); const package_1 = require("./package"); const readFile = denodeify(fs.readFile); const writeFile = denodeify(fs.writeFile); const storePath = path.join(osenv_1.home(), '.vsce'); function load() { return readFile(storePath, 'utf8') .catch(err => (err.code !== 'ENOENT' ? Promise.reject(err) : Promise.resolve('{}'))) .then(rawStore => { try { return Promise.resolve(JSON.parse(rawStore)); } catch (e) { return Promise.reject(`Error parsing store: ${storePath}`); } }) .then(store => { store.publishers = store.publishers || []; return Promise.resolve(store); }); } function save(store) { return writeFile(storePath, JSON.stringify(store), { mode: '0600' }).then(() => store); } function addPublisherToStore(store, publisher) { store.publishers = [...store.publishers.filter(p => p.name !== publisher.name), publisher]; return save(store).then(() => publisher); } function removePublisherFromStore(store, publisherName) { store.publishers = store.publishers.filter(p => p.name !== publisherName); return save(store); } function verifyPat(pat, publisherName) { return __awaiter(this, void 0, void 0, function* () { if (!pat) { throw new Error('The Personal Access Token is mandatory.'); } if (!publisherName) { try { publisherName = (yield package_1.readManifest()).publisher; } catch (error) { throw new Error(`Can not read the publisher's name. Either supply it as an argument or run vsce from the extension folder. Additional information:\n\n${error}`); } } try { // If the caller of the `getRoleAssignments` API has any of the roles // (Creator, Owner, Contributor, Reader) on the publisher, we get a 200, // otherwise we get a 403. const api = yield util_1.getSecurityRolesAPI(pat); yield api.getRoleAssignments('gallery.publisher', publisherName); } catch (error) { throw new Error('The Personal Access Token verification has failed. Additional information:\n\n' + error); } console.log(`The Personal Access Token verification succeeded for the publisher '${publisherName}'.`); }); } exports.verifyPat = verifyPat; function requestPAT(store, publisherName) { return __awaiter(this, void 0, void 0, function* () { const pat = yield util_1.read(`Personal Access Token for publisher '${publisherName}':`, { silent: true, replace: '*' }); yield verifyPat(pat, publisherName); return yield addPublisherToStore(store, { name: publisherName, pat }); }); } function getPublisher(publisherName) { validation_1.validatePublisher(publisherName); return load().then(store => { const publisher = store.publishers.filter(p => p.name === publisherName)[0]; return publisher ? Promise.resolve(publisher) : requestPAT(store, publisherName); }); } exports.getPublisher = getPublisher; function loginPublisher(publisherName) { validation_1.validatePublisher(publisherName); return load() .then(store => { const publisher = store.publishers.filter(p => p.name === publisherName)[0]; if (publisher) { console.log(`Publisher '${publisherName}' is already known`); return util_1.read('Do you want to overwrite its PAT? [y/N] ').then(answer => /^y$/i.test(answer) ? store : Promise.reject('Aborted')); } return Promise.resolve(store); }) .then(store => requestPAT(store, publisherName)); } exports.loginPublisher = loginPublisher; function logoutPublisher(publisherName) { validation_1.validatePublisher(publisherName); return load().then(store => { const publisher = store.publishers.filter(p => p.name === publisherName)[0]; if (!publisher) { return Promise.reject(`Unknown publisher '${publisherName}'`); } return removePublisherFromStore(store, publisherName); }); } exports.logoutPublisher = logoutPublisher; function deletePublisher(publisherName) { return getPublisher(publisherName).then(({ pat }) => { return util_1.read(`This will FOREVER delete '${publisherName}'! Are you sure? [y/N] `) .then(answer => (/^y$/i.test(answer) ? null : Promise.reject('Aborted'))) .then(() => util_1.getGalleryAPI(pat)) .then(api => api.deletePublisher(publisherName)) .then(() => load().then(store => removePublisherFromStore(store, publisherName))) .then(() => util_1.log.done(`Deleted publisher '${publisherName}'.`)); }); } exports.deletePublisher = deletePublisher; function listPublishers() { return load() .then(store => store.publishers) .then(publishers => publishers.forEach(p => console.log(p.name))); } exports.listPublishers = listPublishers;