'use strict'; const assert = require('assert/strict'); const fs = require('fs'); const os = require('os'); const path = require('path'); const { normalizeProductMode, resolveProductMode, setProductMode, } = require('../mcp/src/core/product-mode'); const { buildStartupSummary } = require('../mcp/src/core/startup-summary'); function main() { assert.equal(normalizeProductMode('个人版'), 'personal'); assert.equal(normalizeProductMode('enterprise'), 'enterprise'); const personal = resolveProductMode({ productMode: 'personal' }, { relayEnabled: true }); assert.equal(personal.mode, 'personal'); assert.equal(personal.collectionMode, 'local_polling'); assert.equal(personal.multiDeviceManagement, false); const enterprise = resolveProductMode({ productMode: 'enterprise' }, { relayEnabled: false }); assert.equal(enterprise.mode, 'enterprise'); assert.equal(enterprise.relayReady, false); assert.equal(enterprise.enterpriseUpgrade.amount, 0); assert.equal(enterprise.enterpriseUpgrade.pricingStatus, 'placeholder'); const startup = buildStartupSummary( { summary: { authConfigured: true, subscribed: true } }, { data: { product: enterprise, account: { configured: true, online: true }, listener: { running: true }, config: { allowedSenderCount: 1 }, } }, ); assert.equal(startup.ready, false); assert.equal(startup.checks.some(item => item.key === 'relay' && !item.ready), true); const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-product-mode-')); const envPath = path.join(tempRoot, '.env.local'); const previous = process.env.QIWEI_PRODUCT_MODE; try { const saved = setProductMode('personal', { envPath }); assert.equal(saved.product.mode, 'personal'); assert.match(fs.readFileSync(envPath, 'utf8'), /^QIWEI_PRODUCT_MODE=personal$/m); } finally { if (previous === undefined) delete process.env.QIWEI_PRODUCT_MODE; else process.env.QIWEI_PRODUCT_MODE = previous; fs.rmSync(tempRoot, { recursive: true, force: true }); } process.stdout.write(`${JSON.stringify({ status: 'ok', checks: 12 }, null, 2)}\n`); } try { main(); } catch (error) { process.stderr.write(`${error.stack || error.message}\n`); process.exit(1); }