UNPKG

nuxt-surrealdb

Version:

A Nuxt module aimed to simplify the use of SurrealDB

67 lines (66 loc) 1.73 kB
import { ofetch } from "ofetch"; import { setRequestHeaders, surrealFetchOptionsOverride } from "#surrealdb/utils/overrides"; import { createError, defineNuxtPlugin, useSurrealAuth, useSurrealPreset } from "#imports"; export default defineNuxtPlugin(async ({ $config }) => { const authDatabase = $config.public.surrealdb.auth.database; const { token: userToken, session } = useSurrealAuth(); const database = useSurrealPreset(); const { baseURL, headers } = surrealFetchOptionsOverride(database); if (!baseURL) { createError({ statusCode: 500, message: "Missing SurrealDB URL" }); } const surrealFetch = ofetch.create({ onRequest(ctx) { ctx.options.baseURL ||= baseURL; ctx.options.headers ||= setRequestHeaders(ctx.options.headers, headers); } }); function surrealRPC(req, overrides) { let id = 0; return surrealFetch("rpc", { ...surrealFetchOptionsOverride(useSurrealPreset(overrides)), onResponse({ response }) { if (response.status === 200 && response._data.error) { throw createError({ statusCode: response._data.error.code, message: response._data.error.message }); } else if (response.status === 200) { response._data = response._data.result; } }, method: "POST", body: { id: id++, ...req } }); } if (userToken.value && !session.value.user && authDatabase !== false) { const user = await surrealRPC({ method: "info" }, { database: authDatabase }); if (user) { session.value.user = user; } } return { provide: { surrealFetch, surrealRPC } }; });