nuxt-surrealdb
Version:
A Nuxt module aimed to simplify the use of SurrealDB
67 lines (66 loc) • 1.73 kB
JavaScript
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
}
};
});