@@ -31,6 +31,21 @@ type ManifestResponse = {
3131 schemaVersion : number ;
3232} ;
3333
34+ type SingleManifestResponse = {
35+ config : {
36+ digest : string ;
37+ mediaType : string ;
38+ size : number ;
39+ } ;
40+ layers : Array < {
41+ digest : string ;
42+ mediaType : string ;
43+ size : number ;
44+ } > ;
45+ mediaType : string ;
46+ schemaVersion : number ;
47+ } ;
48+
3449export default defineEventHandler ( async ( event ) : Promise < ManifestResponse > => {
3550 const query = getQuery ( event ) as QueryParams ;
3651 const rawImageName = query . imageName || "" ;
@@ -40,7 +55,9 @@ export default defineEventHandler(async (event): Promise<ManifestResponse> => {
4055 logger . info ( "manifest request" , { imageName, tag } ) ;
4156
4257 const fetchManifest = async ( ) => {
43- const response = await axiosInstance . get < ManifestResponse > (
58+ const response = await axiosInstance . get <
59+ ManifestResponse | SingleManifestResponse
60+ > (
4461 `https://registry-1.docker.io/v2/${ imageName } /manifests/${ tag } ` ,
4562 {
4663 headers : {
@@ -55,8 +72,36 @@ export default defineEventHandler(async (event): Promise<ManifestResponse> => {
5572
5673 try {
5774 const result = await fetchManifest ( ) ;
58- logger . info ( "manifest success" , { imageName, tag, count : result . manifests ?. length || 0 } ) ;
59- return result ;
75+ if ( "manifests" in result && Array . isArray ( result . manifests ) ) {
76+ logger . info ( "manifest success" , {
77+ imageName,
78+ tag,
79+ count : result . manifests . length ,
80+ } ) ;
81+ return result ;
82+ }
83+
84+ const normalized : ManifestResponse = {
85+ manifests : [
86+ {
87+ digest : tag ,
88+ mediaType : result . mediaType ,
89+ platform : {
90+ architecture : "unknown" ,
91+ os : "unknown" ,
92+ } ,
93+ size : 0 ,
94+ } ,
95+ ] ,
96+ mediaType : result . mediaType ,
97+ schemaVersion : result . schemaVersion ?? 2 ,
98+ } ;
99+ logger . info ( "manifest success (single)" , {
100+ imageName,
101+ tag,
102+ count : normalized . manifests . length ,
103+ } ) ;
104+ return normalized ;
60105 } catch ( error : any ) {
61106 logger . error ( "manifest failed" , { imageName, tag, message : error . message } ) ;
62107 throw createError ( {
0 commit comments