chore: checkpoint admin restore state
This commit is contained in:
+70
-8
@@ -1,7 +1,6 @@
|
||||
import path from 'node:path';
|
||||
import { createDbPool, isDatabaseConfigured } from './db.mjs';
|
||||
import { projectRoot } from './load-env.mjs';
|
||||
import { createLocalUserAuth } from './local-auth.mjs';
|
||||
import { importMemind, resolveMemindLib } from './lib-path.mjs';
|
||||
|
||||
export async function bootstrapAdminServices() {
|
||||
@@ -10,16 +9,38 @@ export async function bootstrapAdminServices() {
|
||||
}
|
||||
|
||||
const memindLib = resolveMemindLib();
|
||||
const h5Root =
|
||||
process.env.MEMIND_LIB_ROOT?.trim() ??
|
||||
path.join(projectRoot, '../Memind');
|
||||
const pool = createDbPool();
|
||||
const { createLlmProviderService } = await importMemind('llm-providers.mjs');
|
||||
const { loadCreateLlmProviderService } = await import('./llm-provider-loader.mjs');
|
||||
const createLlmProviderService = await loadCreateLlmProviderService();
|
||||
const { createWechatAdminService } = await importMemind('wechat-admin.mjs');
|
||||
const { loadWechatMpConfig } = await importMemind('wechat-mp.mjs');
|
||||
const { createWechatMpService, loadWechatMpConfig } = await importMemind('wechat-mp.mjs');
|
||||
const { createPlazaPostService, formatPostRow } = await importMemind('plaza-posts.mjs');
|
||||
const { createPlazaInteractionService } = await importMemind('plaza-interactions.mjs');
|
||||
const { createPlazaOpsService } = await importMemind('plaza-ops.mjs');
|
||||
const { createNoopPlazaRedis } = await importMemind('plaza-redis.mjs');
|
||||
const { ensureAlgorithmConfig, loadAlgorithmConfig } = await importMemind('plaza-algorithm.mjs');
|
||||
const {
|
||||
ensureMindSpaceConfig,
|
||||
loadMindSpaceConfig,
|
||||
updateMindSpaceConfig,
|
||||
} = await importMemind('mindspace-config.mjs');
|
||||
const { createOpsApi } = await importMemind('admin-routes.mjs');
|
||||
const { createWordFilterService, ensureWordFilterSchema } = await importMemind('word-filter.mjs');
|
||||
const {
|
||||
USER_COOKIE,
|
||||
clearUserSessionCookie,
|
||||
createUserAuth,
|
||||
resolveCookieDomainForRequest,
|
||||
userLoginCookies,
|
||||
} = await importMemind('user-auth.mjs');
|
||||
const {
|
||||
ensurePlanCatalogSchema,
|
||||
createPlanCatalogService,
|
||||
createSubscriptionService,
|
||||
} = await importMemind('billing-subscription.mjs');
|
||||
|
||||
const usersRoot =
|
||||
process.env.H5_USERS_ROOT?.trim() ?? path.join(projectRoot, 'data', 'users');
|
||||
@@ -29,6 +50,8 @@ export async function bootstrapAdminServices() {
|
||||
|
||||
await ensureAlgorithmConfig(pool);
|
||||
const algorithmConfig = await loadAlgorithmConfig(pool);
|
||||
await ensureMindSpaceConfig(pool, { env: process.env, seedDefault: false });
|
||||
const mindSpaceConfig = await loadMindSpaceConfig(pool, { env: process.env });
|
||||
const plazaInteractions = createPlazaInteractionService(pool, { formatPostRow, plazaRedis });
|
||||
|
||||
let plazaOps = null;
|
||||
@@ -49,23 +72,62 @@ export async function bootstrapAdminServices() {
|
||||
invalidateFeedCaches: () => plazaRedis?.invalidateFeedCaches?.(),
|
||||
});
|
||||
|
||||
const userAuth = createLocalUserAuth(pool);
|
||||
|
||||
await userAuth.ensureAdminUser();
|
||||
const userAuth = createUserAuth(pool, {
|
||||
usersRoot,
|
||||
h5Root,
|
||||
defaultSignupBalanceCents: Number(process.env.H5_SIGNUP_BALANCE_CENTS ?? 500),
|
||||
});
|
||||
|
||||
const llmProviderService = createLlmProviderService(pool, {
|
||||
apiTarget,
|
||||
apiSecret,
|
||||
});
|
||||
const wechatMpConfig = loadWechatMpConfig();
|
||||
const wechatMpService = createWechatMpService({
|
||||
config: wechatMpConfig,
|
||||
userAuth,
|
||||
apiFetch: async () => {
|
||||
throw new Error('admin api does not proxy WeChat chat sessions');
|
||||
},
|
||||
});
|
||||
const wechatAdmin = createWechatAdminService(pool, {
|
||||
config: loadWechatMpConfig(),
|
||||
config: wechatMpConfig,
|
||||
scheduleEnabled: process.env.H5_SCHEDULE_ENABLED === '1',
|
||||
reminderWorkerEnabled: process.env.H5_REMINDER_WORKER_ENABLED === '1',
|
||||
sendWechatTextToUser: wechatMpService?.enabled
|
||||
? (userId, text) => wechatMpService.sendTextToUser(userId, text)
|
||||
: null,
|
||||
});
|
||||
|
||||
await ensureWordFilterSchema(pool);
|
||||
const wordFilterService = createWordFilterService(pool);
|
||||
|
||||
await ensurePlanCatalogSchema(pool);
|
||||
const planCatalogService = createPlanCatalogService(pool);
|
||||
const subscriptionService = createSubscriptionService(pool, {
|
||||
getPlanAsync: (planType) => planCatalogService.getPlan(planType),
|
||||
});
|
||||
|
||||
console.log(`Admin DB connected (${process.env.MYSQL_DATABASE ?? 'via DATABASE_URL'})`);
|
||||
console.log(`Users root: ${usersRoot}`);
|
||||
console.log(`Memind lib: ${memindLib}`);
|
||||
|
||||
return { pool, userAuth, llmProviderService, plazaOps, createOpsApi, wechatAdmin };
|
||||
return {
|
||||
pool,
|
||||
userAuth,
|
||||
llmProviderService,
|
||||
plazaOps,
|
||||
createOpsApi,
|
||||
wechatAdmin,
|
||||
mindSpaceConfig,
|
||||
loadMindSpaceConfig,
|
||||
updateMindSpaceConfig,
|
||||
wordFilterService,
|
||||
planCatalogService,
|
||||
subscriptionService,
|
||||
USER_COOKIE,
|
||||
userLoginCookies,
|
||||
clearUserSessionCookie,
|
||||
resolveCookieDomainForRequest,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user