UNPKG

@webfaas/webfaas-plugin-packageregistry-npm

Version:
142 lines 5.6 kB
"use strict"; 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