cnpmcore
Version:
Private NPM Registry for Enterprise
202 lines • 14.2 kB
JavaScript
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 __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _EdgedriverBinary_instances, _EdgedriverBinary_syncDirItems;
import { SingletonProto } from 'egg';
import { BinaryType } from "../../enum/Binary.js";
import { AbstractBinary, BinaryAdapter } from "./AbstractBinary.js";
// Microsoft moved Edge WebDriver binaries to https://msedgedriver.microsoft.com/
// in July 2025 after `msedgedriver.azureedge.net` was retired, and around
// 2026-04-07 also disabled public access on the legacy Azure Blob container
// that used to host the XML file listing. There is still no paginated/filtered
// listing API — the only "listing" endpoint on the new host is a ~1.2MB static
// JSON dump (`/listing.json`, ~9000 entries covering every version since
// 112.0.1722.39).
//
// To avoid hammering that 1.2MB dump for every version subdirectory during a
// sync, we mirror the approach used by `FirefoxBinary` / `ChromeForTestingBinary`
// and generate the per-version download URLs from a static list of known
// platform filenames. cnpmcore's sync pipeline honors the per-item
// `ignoreDownloadStatuses` field, so any version that doesn't ship a given
// platform (e.g. older builds without `edgedriver_mac64_m1.zip`) gets a clean
// 404 and is skipped rather than failing the sync.
const EDGEDRIVER_DOWNLOAD_BASE = 'https://msedgedriver.microsoft.com/';
// Platform filenames observed in Microsoft's current `listing.json` dump.
// Every version since 112.0.1722.39 ships some subset of these six files.
const EDGEDRIVER_PLATFORM_FILES = [
'edgedriver_arm64.zip',
'edgedriver_linux64.zip',
'edgedriver_mac64.zip',
'edgedriver_mac64_m1.zip',
'edgedriver_win32.zip',
'edgedriver_win64.zip',
];
let EdgedriverBinary = class EdgedriverBinary extends AbstractBinary {
constructor() {
super(...arguments);
_EdgedriverBinary_instances.add(this);
}
async initFetch() {
this.dirItems = undefined;
}
async fetch(dir) {
if (!this.dirItems) {
await __classPrivateFieldGet(this, _EdgedriverBinary_instances, "m", _EdgedriverBinary_syncDirItems).call(this);
}
// fetch root dir
if (dir === '/') {
return { items: this.dirItems?.[dir] ?? [], nextParams: null };
}
// fetch sub dir: generate the known platform filenames for this version.
// We intentionally don't call any listing API — see the file-level
// comment for the rationale. Any platform that doesn't exist for a
// specific version is skipped cleanly via `ignoreDownloadStatuses`.
// /126.0.2578.0/ => 126.0.2578.0/
const subDir = dir.slice(1);
const items = EDGEDRIVER_PLATFORM_FILES.map((name) => ({
name,
isDir: false,
url: `${EDGEDRIVER_DOWNLOAD_BASE}${subDir}${name}`,
size: '-',
date: '-',
ignoreDownloadStatuses: [404],
}));
return { items, nextParams: null };
}
};
_EdgedriverBinary_instances = new WeakSet();
_EdgedriverBinary_syncDirItems = async function _EdgedriverBinary_syncDirItems() {
this.dirItems = {};
this.dirItems['/'] = [];
const jsonApiEndpoint = 'https://edgeupdates.microsoft.com/api/products';
const { data, status, headers } = await this.httpclient.request(jsonApiEndpoint, {
dataType: 'json',
timeout: 30_000,
followRedirect: true,
gzip: true,
});
if (status !== 200) {
this.logger.warn('[EdgedriverBinary.request:non-200-status] url: %s, status: %s, headers: %j, data: %j', jsonApiEndpoint, status, headers, data);
return;
}
this.logger.info('[EdgedriverBinary] remote data length: %s', data.length);
// [
// {
// "Product": "Stable",
// "Releases": [
// {
// "ReleaseId": 73376,
// "Platform": "iOS",
// "Architecture": "arm64",
// "CVEs": [],
// "ProductVersion": "124.0.2478.89",
// "Artifacts": [],
// "PublishedTime": "2024-05-07T02:57:00",
// "ExpectedExpiryDate": "2025-05-07T02:57:00"
// },
// {
// "ReleaseId": 73629,
// "Platform": "Windows",
// "Architecture": "x86",
// "CVEs": [
// "CVE-2024-4559",
// "CVE-2024-4671"
// ],
// "ProductVersion": "124.0.2478.97",
// "Artifacts": [
// {
// "ArtifactName": "msi",
// "Location": "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/aa1c9fe3-bb9c-4a80-9ff7-5c109701fbfe/MicrosoftEdgeEnterpriseX86.msi",
// "Hash": "4CEF7B907D3E2371E953C41190E32C3560CEE7D3F16D7550CA156DC976EBCB80",
// "HashAlgorithm": "SHA256",
// "SizeInBytes": 162029568
// }
// ],
// "PublishedTime": "2024-05-11T06:47:00",
// "ExpectedExpiryDate": "2025-05-10T16:59:00"
// },
// {
// "ReleaseId": 73630,
// "Platform": "Linux",
// "Architecture": "x64",
// "CVEs": [
// "CVE-2024-4559"
// ],
// "ProductVersion": "124.0.2478.97",
// "Artifacts": [
// {
// "ArtifactName": "rpm",
// "Location": "https://packages.microsoft.com/yumrepos/edge/microsoft-edge-stable-124.0.2478.97-1.x86_64.rpm",
// "Hash": "32D9C333544DDD9C56FED54844E89EF00F3E5620942C07B9B68D214016687895",
// "HashAlgorithm": "SHA256",
// "SizeInBytes": 169877932
// },
// {
// "ArtifactName": "deb",
// "Location": "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_124.0.2478.97-1_amd64.deb",
// "Hash": "85D0AD1D63847B3DD54F0F214D18A2B54462BB43291536E773AD1B8B29BBF799",
// "HashAlgorithm": "SHA256",
// "SizeInBytes": 167546042
// }
// ],
// "PublishedTime": "2024-05-10T17:01:00",
// "ExpectedExpiryDate": "2025-05-10T17:01:00"
// },
// {
// "Product": "EdgeUpdate",
// "Releases": [
// {
// "ReleaseId": 73493,
// "Platform": "Windows",
// "Architecture": "x86",
// "CVEs": [],
// "ProductVersion": "1.3.187.37",
// "Artifacts": [
// {
// "ArtifactName": "exe",
// "Location": "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/a2fa84fe-796b-4f80-b1cd-f4d1f5731aa8/MicrosoftEdgeUpdateSetup_X86_1.3.187.37.exe",
// "Hash": "503088D22461FEE5D7B6B011609D73FFD5869D3ACE1DBB0F00F8F3B9D122C514",
// "HashAlgorithm": "SHA256",
// "SizeInBytes": 1622072
// }
// ],
// "PublishedTime": "2024-05-08T05:44:00",
// "ExpectedExpiryDate": "2025-05-08T05:44:00"
// }
// ]
// }
const products = data;
const existsVersions = new Set();
for (const product of products) {
if (product.Product === 'EdgeUpdate')
continue;
for (const release of product.Releases) {
if (!release.Artifacts || release.Artifacts.length === 0)
continue;
if (existsVersions.has(release.ProductVersion))
continue;
this.dirItems['/'].push({
name: `${release.ProductVersion}/`,
date: release.PublishedTime,
size: '-',
isDir: true,
url: '',
});
existsVersions.add(release.ProductVersion);
}
}
};
EdgedriverBinary = __decorate([
SingletonProto(),
BinaryAdapter(BinaryType.Edgedriver)
], EdgedriverBinary);
export { EdgedriverBinary };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWRnZWRyaXZlckJpbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9jb21tb24vYWRhcHRlci9iaW5hcnkvRWRnZWRyaXZlckJpbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXJDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBcUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RyxpRkFBaUY7QUFDakYsMEVBQTBFO0FBQzFFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsK0VBQStFO0FBQy9FLHlFQUF5RTtBQUN6RSxrQkFBa0I7QUFDbEIsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSxrRkFBa0Y7QUFDbEYseUVBQXlFO0FBQ3pFLG1FQUFtRTtBQUNuRSwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLG1EQUFtRDtBQUNuRCxNQUFNLHdCQUF3QixHQUFHLHFDQUFxQyxDQUFDO0FBQ3ZFLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsTUFBTSx5QkFBeUIsR0FBRztJQUNoQyxzQkFBc0I7SUFDdEIsd0JBQXdCO0lBQ3hCLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLHNCQUFzQjtDQUNkLENBQUM7QUFJSixJQUFNLGdCQUFnQixHQUF0QixNQUFNLGdCQUFpQixTQUFRLGNBQWM7SUFBN0M7OztJQWlMUCxDQUFDO0lBNUtDLEtBQUssQ0FBQyxTQUFTO1FBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztJQWlKRCxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQVc7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixNQUFNLHVCQUFBLElBQUksbUVBQWMsTUFBbEIsSUFBSSxDQUFnQixDQUFDO1FBQzdCLENBQUM7UUFDRCxpQkFBaUI7UUFDakIsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqRSxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLG1FQUFtRTtRQUNuRSxtRUFBbUU7UUFDbkUsb0VBQW9FO1FBQ3BFLGtDQUFrQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFpQix5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkUsSUFBSTtZQUNKLEtBQUssRUFBRSxLQUFLO1lBQ1osR0FBRyxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsTUFBTSxHQUFHLElBQUksRUFBRTtZQUNsRCxJQUFJLEVBQUUsR0FBRztZQUNULElBQUksRUFBRSxHQUFHO1lBQ1Qsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDOUIsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0NBQ0YsQ0FBQTs7aUNBeEtDLEtBQUs7SUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QixNQUFNLGVBQWUsR0FBRyxnREFBZ0QsQ0FBQztJQUN6RSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtRQUMvRSxRQUFRLEVBQUUsTUFBTTtRQUNoQixPQUFPLEVBQUUsTUFBTTtRQUNmLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLElBQUksRUFBRSxJQUFJO0tBQ1gsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Qsc0ZBQXNGLEVBQ3RGLGVBQWUsRUFDZixNQUFNLEVBQ04sT0FBTyxFQUNQLElBQUksQ0FDTCxDQUFDO1FBQ0YsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0UsSUFBSTtJQUNKLE1BQU07SUFDTiwyQkFBMkI7SUFDM0Isb0JBQW9CO0lBQ3BCLFVBQVU7SUFDViw4QkFBOEI7SUFDOUIsNkJBQTZCO0lBQzdCLG1DQUFtQztJQUNuQyxzQkFBc0I7SUFDdEIsNkNBQTZDO0lBQzdDLDJCQUEyQjtJQUMzQixrREFBa0Q7SUFDbEQsc0RBQXNEO0lBQ3RELFdBQVc7SUFDWCxVQUFVO0lBQ1YsOEJBQThCO0lBQzlCLGlDQUFpQztJQUNqQyxpQ0FBaUM7SUFDakMsb0JBQW9CO0lBQ3BCLDZCQUE2QjtJQUM3Qiw0QkFBNEI7SUFDNUIsYUFBYTtJQUNiLDZDQUE2QztJQUM3Qyx5QkFBeUI7SUFDekIsY0FBYztJQUNkLHFDQUFxQztJQUNyQywyS0FBMks7SUFDM0ssMEZBQTBGO0lBQzFGLHlDQUF5QztJQUN6Qyx1Q0FBdUM7SUFDdkMsY0FBYztJQUNkLGFBQWE7SUFDYixrREFBa0Q7SUFDbEQsc0RBQXNEO0lBQ3RELFdBQVc7SUFDWCxVQUFVO0lBQ1YsOEJBQThCO0lBQzlCLCtCQUErQjtJQUMvQixpQ0FBaUM7SUFDakMsb0JBQW9CO0lBQ3BCLDRCQUE0QjtJQUM1QixhQUFhO0lBQ2IsNkNBQTZDO0lBQzdDLHlCQUF5QjtJQUN6QixjQUFjO0lBQ2QscUNBQXFDO0lBQ3JDLDJIQUEySDtJQUMzSCwwRkFBMEY7SUFDMUYseUNBQXlDO0lBQ3pDLHVDQUF1QztJQUN2QyxlQUFlO0lBQ2YsY0FBYztJQUNkLHFDQUFxQztJQUNyQyx5SkFBeUo7SUFDekosMEZBQTBGO0lBQzFGLHlDQUF5QztJQUN6Qyx1Q0FBdUM7SUFDdkMsY0FBYztJQUNkLGFBQWE7SUFDYixrREFBa0Q7SUFDbEQsc0RBQXNEO0lBQ3RELFdBQVc7SUFDWCxJQUFJO0lBQ0osNkJBQTZCO0lBQzdCLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsNEJBQTRCO0lBQzVCLCtCQUErQjtJQUMvQiwrQkFBK0I7SUFDL0Isb0JBQW9CO0lBQ3BCLHdDQUF3QztJQUN4Qyx1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLG1DQUFtQztJQUNuQyxzTEFBc0w7SUFDdEwsd0ZBQXdGO0lBQ3hGLHVDQUF1QztJQUN2QyxtQ0FBbUM7SUFDbkMsWUFBWTtJQUNaLFdBQVc7SUFDWCxnREFBZ0Q7SUFDaEQsb0RBQW9EO0lBQ3BELFFBQVE7SUFDUixNQUFNO0lBQ04sSUFBSTtJQUNKLE1BQU0sUUFBUSxHQUFHLElBa0JkLENBQUM7SUFDSixNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ3pDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFlBQVk7WUFBRSxTQUFTO1FBQy9DLEtBQUssTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsU0FBUztZQUNuRSxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFBRSxTQUFTO1lBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN0QixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsY0FBYyxHQUFHO2dCQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWE7Z0JBQzNCLElBQUksRUFBRSxHQUFHO2dCQUNULEtBQUssRUFBRSxJQUFJO2dCQUNYLEdBQUcsRUFBRSxFQUFFO2FBQ1IsQ0FBQyxDQUFDO1lBQ0gsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBdEpVLGdCQUFnQjtJQUY1QixjQUFjLEVBQUU7SUFDaEIsYUFBYSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7R0FDeEIsZ0JBQWdCLENBaUw1QiJ9