@webfaas/webfaas-plugin-packageregistry-npm
Version:
WebFaaS Framework - Plugin - Package Registry - NPM
142 lines • 5.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const webfaas_core_1 = require("@webfaas/webfaas-core");
const webfaas_core_2 = require("@webfaas/webfaas-core");
const webfaas_core_3 = require("@webfaas/webfaas-core");
const PackageRegistryConfig_1 = require("./PackageRegistryConfig");
class PackageRegistry {
constructor(config, log) {
this.config = config || new PackageRegistryConfig_1.PackageRegistryConfig();
this.log = log || new webfaas_core_1.Log();
this.clientHTTP = new webfaas_core_3.ClientHTTP(this.config.httpConfig, this.log);
}
buildHeaders() {
var headers = {};
headers["user-agent"] = "webfaas";
if (this.config.token) {
headers["authorization"] = "Bearer " + this.config.token;
}
return headers;
}
/**
* return eTag
* @param value
*/
parseETag(value) {
if (value) {
return value.toString();
}
else {
return "";
}
}
/**
* return type name
*/
getTypeName() {
return "npm";
}
/**
* return config
*/
getConfig() {
return this.config;
}
/**
* return manifest in IPackageRegistryResponse
* @param name manifest name
* @param etag manifest etag
*/
getManifest(name, etag) {
return new Promise(async (resolve, reject) => {
try {
var headers = this.buildHeaders();
var manifestResponseObj = {};
//optimized npm package metadata response payload (https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md)
headers["accept"] = "application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*";
if (etag) {
headers["If-None-Match"] = etag;
}
var url = this.config.url + "/" + name;
var respHTTP = await this.clientHTTP.request(url, "GET", undefined, headers);
if (respHTTP.statusCode === 200) {
var header_etag = this.parseETag(respHTTP.headers["etag"]);
manifestResponseObj.packageStore = webfaas_core_2.PackageStoreUtil.buildPackageStoreFromListBuffer(name, "", header_etag, [respHTTP.data], ["package.json"]);
resolve(manifestResponseObj);
}
else if (respHTTP.statusCode === 304) { //NOT MODIFIED
manifestResponseObj.packageStore = null;
manifestResponseObj.etag = etag || "";
resolve(manifestResponseObj);
}
else if (respHTTP.statusCode === 404) { //NOT FOUND
manifestResponseObj.packageStore = null;
manifestResponseObj.etag = "";
resolve(manifestResponseObj);
}
else {
reject(respHTTP.statusCode);
}
}
catch (errTry) {
reject(errTry);
}
});
}
/**
* return package in IPackageRegistryResponse
* @param name package name
* @param version package version
* @param etag package etag
*/
getPackage(name, version, etag) {
return new Promise(async (resolve, reject) => {
try {
var headers = this.buildHeaders();
var packageResponseObj = {};
//optimized npm package metadata response payload (https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md)
headers["accept"] = "application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*";
if (etag) {
headers["If-None-Match"] = etag;
}
let moduleNameData = webfaas_core_3.ModuleNameUtil.parse(name, "");
var url = this.config.url + "/" + moduleNameData.moduleName + "/-/" + moduleNameData.moduleNameWhitOutScopeName + "-" + version + ".tgz";
var respHTTP = await this.clientHTTP.request(url, "GET", undefined, headers);
if (respHTTP.statusCode === 200) {
var header_etag = this.parseETag(respHTTP.headers["etag"]);
packageResponseObj.packageStore = webfaas_core_2.PackageStoreUtil.buildPackageStoreFromTarGzBuffer(name, version, header_etag, respHTTP.data);
resolve(packageResponseObj);
}
else if (respHTTP.statusCode === 304) { //NOT MODIFIED
packageResponseObj.packageStore = null;
packageResponseObj.etag = etag || "";
resolve(packageResponseObj);
}
else if (respHTTP.statusCode === 404) { //NOT FOUND
packageResponseObj.packageStore = null;
packageResponseObj.etag = "";
resolve(packageResponseObj);
}
else {
reject(respHTTP.statusCode);
}
}
catch (errTry) {
reject(errTry);
}
});
}
start() {
return new Promise((resolve, reject) => {
resolve();
});
}
stop() {
return new Promise((resolve, reject) => {
this.clientHTTP.destroy();
resolve();
});
}
}
exports.PackageRegistry = PackageRegistry;
//# sourceMappingURL=PackageRegistry.js.map