/ opencodehub / src / lib / packages-server.ts
Swadhin Biswas Feature/ai code reviewer (#73) · 8/2/2026
105a287
66 lines · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
 * OCI Container Registry (Docker v2 API) & Package Registry Protocol Engine
 * Implements distribution spec for Docker/OCI image manifests, blobs, and NPM tarballs.
 */

import { logger } from "./logger";

export interface OCIManifest {
    schemaVersion: number;
    mediaType: string;
    config: {
        mediaType: string;
        size: number;
        digest: string;
    };
    layers: Array<{
        mediaType: string;
        size: number;
        digest: string;
    }>;
}

/**
 * Handle OCI Version Check GET /v2/
 */
export function handleDockerV2Ping() {
    return {
        status: 200,
        headers: {
            "Docker-Distribution-Api-Version": "registry/2.0",
            "Content-Type": "application/json",
        },
        body: JSON.stringify({}),
    };
}

/**
 * Parse OCI Container Manifest
 */
export function parseOCIManifest(rawJson: string): OCIManifest {
    try {
        const manifest = JSON.parse(rawJson) as OCIManifest;
        if (!manifest.schemaVersion || !manifest.config) {
            throw new Error("Invalid OCI manifest format");
        }
        return manifest;
    } catch (err: any) {
        logger.error({ err: err.message }, "Failed to parse OCI manifest");
        throw err;
    }
}

/**
 * Format NPM Package Metadata
 */
export function formatNPMPackageMetadata(packageName: string, versions: Record<string, any>) {
    const latestVersion = Object.keys(versions).pop() || "1.0.0";
    return {
        name: packageName,
        "dist-tags": {
            latest: latestVersion,
        },
        versions,
    };
}