feat(mindspace): enforce PostgreSQL user data delivery
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { execFileSync } from 'node:child_process';
|
||||
import { createPostgresUserDataSpaceService } from './postgres-user-data-space-service.mjs';
|
||||
|
||||
export const DATASET_REGISTRY_TABLE = '__page_data_datasets';
|
||||
|
||||
@@ -92,6 +93,23 @@ export function createUserDataSpaceService(options = {}) {
|
||||
}
|
||||
|
||||
const userId = options.userId ? String(options.userId).trim() : null;
|
||||
const isNodeTest = Boolean(process.env.NODE_TEST_CONTEXT);
|
||||
const backend = String(
|
||||
options.backend ?? process.env.MINDSPACE_USERDATA_BACKEND ?? (isNodeTest ? 'sqlite' : 'postgres'),
|
||||
).trim().toLowerCase();
|
||||
if (backend === 'sqlite' && !isNodeTest) {
|
||||
throw Object.assign(
|
||||
new Error('用户私有数据运行时已禁用 SQLite,只允许使用 PostgreSQL'),
|
||||
{ code: 'sqlite_runtime_disabled' },
|
||||
);
|
||||
}
|
||||
if (backend !== 'postgres' && backend !== 'sqlite') {
|
||||
throw Object.assign(new Error(`不支持的用户数据后端:${backend}`), { code: 'invalid_userdata_backend' });
|
||||
}
|
||||
if (backend === 'postgres') {
|
||||
if (!userId) throw new Error('PostgreSQL 用户数据空间要求 userId');
|
||||
return createPostgresUserDataSpaceService({ ...options, userId });
|
||||
}
|
||||
const query = typeof options.query === 'function' ? options.query : null;
|
||||
const sqliteBin = options.sqliteBin?.trim() || process.env.SQLITE_BIN?.trim() || 'sqlite3';
|
||||
const maxBytes = Number(options.maxBytes ?? process.env.PRIVATE_DATA_MAX_BYTES ?? DEFAULT_MAX_BYTES);
|
||||
@@ -111,6 +129,11 @@ export function createUserDataSpaceService(options = {}) {
|
||||
return privateDataDb;
|
||||
}
|
||||
|
||||
function ensureReady() {
|
||||
ensurePrivateDataDb();
|
||||
return getInfo();
|
||||
}
|
||||
|
||||
function privateDataSize() {
|
||||
let total = 0;
|
||||
for (const file of fs.existsSync(privateDataDir) ? fs.readdirSync(privateDataDir) : []) {
|
||||
@@ -750,6 +773,7 @@ export function createUserDataSpaceService(options = {}) {
|
||||
workspaceRoot,
|
||||
privateDataDir,
|
||||
privateDataDb,
|
||||
ensureReady,
|
||||
ensurePrivateDataDb,
|
||||
privateDataSize,
|
||||
getInfo,
|
||||
|
||||
Reference in New Issue
Block a user