@@ -41,16 +41,20 @@ function firstNonEmptyString(...values: unknown[]): string | null {
4141async function fetchFirstParsedByOntology (
4242 vault : RegistryVault ,
4343 ontologyId : string ,
44- token : string
44+ token ? : string
4545) : Promise < Record < string , unknown > | null > {
46- try {
46+ const tryRequest = async ( withAuth : boolean ) : Promise < Record < string , unknown > | null > => {
47+ const headers : Record < string , string > = {
48+ 'Content-Type' : 'application/json' ,
49+ 'X-ENAME' : vault . ename
50+ } ;
51+ if ( withAuth && token ) {
52+ headers . Authorization = `Bearer ${ token } ` ;
53+ }
54+
4755 const response = await fetch ( `${ vault . uri } /graphql` , {
4856 method : 'POST' ,
49- headers : {
50- 'Content-Type' : 'application/json' ,
51- 'X-ENAME' : vault . ename ,
52- Authorization : `Bearer ${ token } `
53- } ,
57+ headers,
5458 body : JSON . stringify ( {
5559 query : META_ENVELOPES_QUERY ,
5660 variables : {
@@ -66,21 +70,38 @@ async function fetchFirstParsedByOntology(
6670 }
6771
6872 const payload = await response . json ( ) ;
73+ if ( Array . isArray ( payload ?. errors ) && payload . errors . length > 0 ) {
74+ return null ;
75+ }
6976 const parsed = payload ?. data ?. metaEnvelopes ?. edges ?. [ 0 ] ?. node ?. parsed ;
7077
7178 if ( ! parsed || typeof parsed !== 'object' ) {
7279 return null ;
7380 }
7481
7582 return parsed as Record < string , unknown > ;
83+ } ;
84+
85+ try {
86+ // Try with token first (preferred), then fallback to X-ENAME-only.
87+ const withAuth = await tryRequest ( Boolean ( token ) ) ;
88+ if ( withAuth ) {
89+ return withAuth ;
90+ }
91+
92+ if ( token ) {
93+ return await tryRequest ( false ) ;
94+ }
95+
96+ return null ;
7697 } catch {
7798 return null ;
7899 }
79100}
80101
81102async function resolveVaultIdentity (
82103 vault : RegistryVault ,
83- token : string
104+ token ? : string
84105) : Promise < { name : string ; type : 'user' | 'group' } > {
85106 const defaultName = firstNonEmptyString ( vault . ename , vault . evault , 'Unknown' ) || 'Unknown' ;
86107
@@ -99,7 +120,15 @@ async function resolveVaultIdentity(
99120 return {
100121 type : 'group' ,
101122 name :
102- firstNonEmptyString ( groupManifest . name , groupManifest . eName , vault . ename , vault . evault ) ||
123+ firstNonEmptyString (
124+ groupManifest . name ,
125+ groupManifest . displayName ,
126+ groupManifest . title ,
127+ groupManifest . eName ,
128+ groupManifest . ename ,
129+ vault . ename ,
130+ vault . evault
131+ ) ||
103132 defaultName
104133 } ;
105134 }
@@ -136,7 +165,12 @@ async function requestPlatformToken(platform: string): Promise<string> {
136165export const GET : RequestHandler = async ( { url } ) => {
137166 try {
138167 const platform = env . PUBLIC_CONTROL_PANEL_URL || url . origin ;
139- const token = await requestPlatformToken ( platform ) ;
168+ let token : string | undefined ;
169+ try {
170+ token = await requestPlatformToken ( platform ) ;
171+ } catch ( tokenError ) {
172+ console . warn ( 'Falling back to X-ENAME-only eVault queries:' , tokenError ) ;
173+ }
140174
141175 // Fetch all evaults from registry
142176 const registryVaults = await registryService . getEVaults ( ) ;
@@ -149,32 +183,26 @@ export const GET: RequestHandler = async ({ url }) => {
149183
150184 const identity = await resolveVaultIdentity ( vault , token ) ;
151185
152- // Check health status by attempting to fetch from URI
153- let status = 'Unknown' ;
154- try {
155- const healthResponse = await fetch ( `${ vault . uri } /health` , {
156- signal : AbortSignal . timeout ( 2000 ) // 2 second timeout
157- } ) ;
158- status = healthResponse . ok ? 'Active' : 'Inactive' ;
159- } catch {
160- status = 'Inactive' ;
161- }
162-
163186 return {
164187 id : evaultId ,
165188 name : identity . name ,
166189 type : identity . type ,
167190 ename : vault . ename ,
168191 uri : vault . uri ,
169192 evault : vault . evault ,
170- status : status ,
193+ status : 'Unknown' ,
171194 serviceUrl : vault . uri
172195 } ;
173196 } )
174197 ) ;
175198
176- console . log ( `Total eVaults found: ${ evaults . length } ` ) ;
177- return json ( { evaults } ) ;
199+ // Filter out platform-owned user profiles (e.g. "File Manager Platform").
200+ const filteredEVaults = evaults . filter (
201+ ( vault ) => ! ( vault . type === 'user' && / p l a t f o r m $ / i. test ( vault . name . trim ( ) ) )
202+ ) ;
203+
204+ console . log ( `Total eVaults found: ${ filteredEVaults . length } ` ) ;
205+ return json ( { evaults : filteredEVaults } ) ;
178206 } catch ( error ) {
179207 console . error ( 'Error fetching eVaults:' , error ) ;
180208 return json ( { error : 'Failed to fetch eVaults' , evaults : [ ] } , { status : 500 } ) ;
0 commit comments