fix(core): Normalize binary data handling across registries and add buffer helpers

This commit is contained in:
2025-11-25 22:35:31 +00:00
parent e81fa41b18
commit a78934836e
10 changed files with 1496 additions and 9 deletions

View File

@@ -7,6 +7,7 @@ import { BaseRegistry } from '../core/classes.baseregistry.js';
import type { RegistryStorage } from '../core/classes.registrystorage.js';
import type { AuthManager } from '../core/classes.authmanager.js';
import type { IRequestContext, IResponse, IAuthToken } from '../core/interfaces.core.js';
import { isBinaryData, toBuffer } from '../core/helpers.buffer.js';
import type {
IComposerPackage,
IComposerPackageMetadata,
@@ -255,7 +256,7 @@ export class ComposerRegistry extends BaseRegistry {
};
}
if (!body || !Buffer.isBuffer(body)) {
if (!body || !isBinaryData(body)) {
return {
status: 400,
headers: {},
@@ -263,8 +264,11 @@ export class ComposerRegistry extends BaseRegistry {
};
}
// Convert to Buffer for ZIP processing
const zipData = toBuffer(body);
// Extract and validate composer.json from ZIP
const composerJson = await extractComposerJsonFromZip(body);
const composerJson = await extractComposerJsonFromZip(zipData);
if (!composerJson || !validateComposerJson(composerJson)) {
return {
status: 400,
@@ -292,13 +296,13 @@ export class ComposerRegistry extends BaseRegistry {
}
// Calculate SHA-1 hash
const shasum = await calculateSha1(body);
const shasum = await calculateSha1(zipData);
// Generate reference (use version or commit hash)
const reference = composerJson.source?.reference || version.replace(/[^a-zA-Z0-9.-]/g, '-');
// Store ZIP file
await this.storage.putComposerPackageZip(vendorPackage, reference, body);
await this.storage.putComposerPackageZip(vendorPackage, reference, zipData);
// Get or create metadata
let metadata = await this.storage.getComposerPackageMetadata(vendorPackage);