merlyn/server/utils/boot/markOnboarded.js
Timothy Carambat 54e0cde56f
Manage Onboarding decision via DB flag (#4926)
* WIP add onboarding flag to db

* dev build

* fix onboarding telem call
2026-01-28 16:32:26 -08:00

53 lines
2.1 KiB
JavaScript

const { SystemSettings } = require("../../models/systemSettings");
/**
* Mark the onboarding as completed for legacy users prior to this change where onboarding is now a flag in the DB.
* This is a legacy patch to ensure that existing users are not redirected to the onboarding page who have been using the app for a while.
*/
async function markOnboarded() {
try {
const onboardingStatus = await SystemSettings.isOnboardingComplete();
if (onboardingStatus === true) return;
// Check if the server is already onboarded by the old way of checking if the server in any way has been setup.
// If it is, then we can mark the onboarding as complete in the DB to persist this
const alreadyOnboarded = await isLegacyOnboarded();
if (alreadyOnboarded === true) {
console.log(
"\x1b[33m[ONBOARDING PATCH]\x1b[0m Legacy instance is already onboarded, marking onboarding as complete. You will not see this message again."
);
await SystemSettings.markOnboardingComplete();
return true;
}
return false;
} catch (e) {
console.error(
"\x1b[31m[ONBOARDING PATCH]\x1b[0m Error marking onboarding as complete",
e.message,
e
);
return false;
}
}
/**
* Check if the server is already onboarded by the old way of checking if the server in any way has been setup.
* @returns {Promise<boolean>}
*/
async function isLegacyOnboarded() {
// LLM Provider is set, so we can assume onboarding is complete since this is default null in SystemSettings.js
if (!!process.env.LLM_PROVIDER) return true;
// Vector DB is set, so we can assume onboarding is complete since this is default null in SystemSettings.js (default is lancedb in frontend)
if (!!process.env.VECTOR_DB) return true;
// Check if the AUTH_TOKEN/JWT_SECRET is set, so we can assume onboarding is complete since this is default null in SystemSettings.js
if (!!process.env.AUTH_TOKEN || !!process.env.JWT_SECRET) return true;
// Check multi-user mode is enabled, if it is, then they are already using the app.
if ((await SystemSettings.isMultiUserMode()) === true) return true;
return false;
}
module.exports = markOnboarded;