UNPKG

@nuxthub/core

Version:

Build full-stack Nuxt applications on Cloudflare, with zero configuration.

50 lines (49 loc) 1.88 kB
import { eventHandler } from "h3"; import { hubDatabase } from "../../../../database/server/utils/database.js"; import { hubKV } from "../../../../kv/server/utils/kv.js"; import { hubBlob } from "../../../../blob/server/utils/blob.js"; import { hubVectorize } from "../../../../vectorize/server/utils/vectorize.js"; import { requireNuxtHubAuthorization } from "../../../../utils/auth.js"; import { useRuntimeConfig } from "#imports"; export default eventHandler(async (event) => { await requireNuxtHubAuthorization(event); const { version, cache, ai, analytics, browser, blob, kv, database, vectorize } = useRuntimeConfig().hub; const [dbCheck, kvCheck, blobCheck, vectorizeCheck] = await Promise.all([ falseIfFail(() => database && hubDatabase().exec("PRAGMA table_list")), falseIfFail(() => kv && hubKV().getKeys("__check__")), falseIfFail(() => blob && hubBlob().list({ prefix: "__check__" })), // vectorize check should verify all indexes. return the index name Promise.all(Object.keys(vectorize).map(async (index) => { const vectorizeIndex = hubVectorize(index); const describe = await falseIfFail(() => vectorizeIndex?.describe()); return [index, Boolean(describe)]; })) ]); const enabledVectorizeIndexes = Object.fromEntries(Object.entries(vectorize).filter(([index]) => vectorizeCheck.find(([name, enabled]) => name === index && enabled))); return { version, storage: { database: Boolean(dbCheck), kv: Array.isArray(kvCheck), blob: Array.isArray(blobCheck?.blobs), vectorize: enabledVectorizeIndexes }, features: { ai, analytics, browser, cache } }; }); async function falseIfFail(fn) { try { const res = fn(); if (res instanceof Promise) { return res.catch(() => false); } return res; } catch (e) { return false; } }