UNPKG

cnpmcore

Version:

Private NPM Registry for Enterprise

136 lines 11.1 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { setTimeout } from 'node:timers/promises'; import { ContextProto, AccessLevel, Inject, } from 'egg'; import { isTimeoutError } from "../ErrorUtil.js"; const INSTANCE_NAME = 'npmRegistry'; let NPMRegistry = class NPMRegistry { constructor() { this.timeout = 10_000; } get registry() { return this.registryHost || this.config.cnpmcore.sourceRegistry; } setRegistryHost(registryHost = '') { this.registryHost = registryHost; } async getFullManifests(fullname, optionalConfig) { const res = await this.getFullManifestsBuffer(fullname, optionalConfig); // @ts-expect-error JSON.parse accepts Buffer in Node.js, though TypeScript types don't reflect this res.data = JSON.parse(res.data); return res; } async getFullManifestsBuffer(fullname, optionalConfig) { let retries = optionalConfig?.retries || 3; // set query t=timestamp, make sure CDN cache disable // cache=0 is sync worker request flag const url = `${this.registry}/${encodeURIComponent(fullname)}?t=${Date.now()}&cache=0`; let lastError; while (retries > 0) { try { // large package: https://r.cnpmjs.org/%40procore%2Fcore-icons // https://r.cnpmjs.org/intraactive-sdk-ui 44s const authorization = this.genAuthorizationHeader(optionalConfig?.remoteAuthToken); return await this.requestBuffer('GET', url, undefined, { timeout: 120_000, headers: { authorization }, }); } catch (err) { if (isTimeoutError(err)) { throw err; } lastError = err; } retries--; if (retries > 0) { // sleep 1s ~ 4s in random const delay = process.env.NODE_ENV === 'test' ? 1 : 1000 + Math.random() * 4000; await setTimeout(delay); } } throw lastError; } // app.put('/:name/sync', sync.sync); async createSyncTask(fullname, optionalConfig) { const authorization = this.genAuthorizationHeader(optionalConfig?.remoteAuthToken); const url = `${this.registry}/${encodeURIComponent(fullname)}/sync?sync_upstream=true&nodeps=true`; // { // ok: true, // logId: logId // }; return await this.requestJSON('PUT', url, undefined, { authorization }); } // app.get('/:name/sync/log/:id', sync.getSyncLog); async getSyncTask(fullname, id, offset, optionalConfig) { const authorization = this.genAuthorizationHeader(optionalConfig?.remoteAuthToken); const url = `${this.registry}/${encodeURIComponent(fullname)}/sync/log/${id}?offset=${offset}`; // { ok: true, syncDone: boolean, log: string, logUrl: string, error?: string } // https://registry.npmmirror.com/viewport-cli/sync/log/6943749899c5663aad8a534c return await this.requestJSON('GET', url, undefined, { authorization }); } async getDownloadRanges(registry, fullname, start, end, optionalConfig) { const authorization = this.genAuthorizationHeader(optionalConfig?.remoteAuthToken); const url = `${registry}/downloads/range/${start}:${end}/${encodeURIComponent(fullname)}`; return await this.requestJSON('GET', url, undefined, { authorization }); } async requestJSON(method, url, params, options) { return await this.request(method, url, params, { ...options, dataType: 'json', }); } async requestBuffer(method, url, params, options) { return await this.request(method, url, params, { ...options, dataType: 'buffer', }); } async request(method, url, params, options) { const res = (await this.httpClient.request(url, { method, data: params, timing: true, retry: 3, timeout: this.timeout, followRedirect: true, gzip: true, ...options, })); this.logger.info('[NPMRegistry:request] %s %s, status: %s', method, url, res.status); return { method, ...res, }; } genAuthorizationHeader(remoteAuthToken) { return remoteAuthToken ? `Bearer ${remoteAuthToken}` : ''; } }; __decorate([ Inject(), __metadata("design:type", Function) ], NPMRegistry.prototype, "logger", void 0); __decorate([ Inject(), __metadata("design:type", Function) ], NPMRegistry.prototype, "httpClient", void 0); __decorate([ Inject(), __metadata("design:type", Object) ], NPMRegistry.prototype, "config", void 0); NPMRegistry = __decorate([ ContextProto({ name: INSTANCE_NAME, accessLevel: AccessLevel.PUBLIC, }) ], NPMRegistry); export { NPMRegistry }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTlBNUmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29tbW9uL2FkYXB0ZXIvTlBNUmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sR0FNUCxNQUFNLEtBQUssQ0FBQztBQUdiLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUlqRCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFRN0IsSUFBTSxXQUFXLEdBQWpCLE1BQU0sV0FBVztJQUFqQjtRQU9HLFlBQU8sR0FBRyxNQUFNLENBQUM7SUE0STNCLENBQUM7SUF6SUMsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sZUFBZSxDQUFDLFlBQVksR0FBRyxFQUFFO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQzNCLFFBQWdCLEVBQ2hCLGNBQStEO1FBRS9ELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4RSxvR0FBb0c7UUFDcEcsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxPQUFPLEdBQXVELENBQUM7SUFDakUsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsUUFBZ0IsRUFDaEIsY0FBK0Q7UUFFL0QsSUFBSSxPQUFPLEdBQUcsY0FBYyxFQUFFLE9BQU8sSUFBSSxDQUFDLENB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