| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #!/usr/bin/env node
- 'use strict';
- const assert = require('assert/strict');
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-account-isolation-'));
- process.env.QIWEI_OUTPUTS_DIR = path.join(root, 'outputs');
- process.env.QIWEI_MESSAGES_DIR = path.join(root, 'messages');
- process.env.QIWEI_LEGACY_ACCOUNT_KEY = 'legacy-default';
- process.env.QIWEI_MESSAGE_ARCHIVE_ENABLED = '1';
- process.env.QIWEI_AGENT_MEMORY_ENABLED = '1';
- const { setActiveQiweiContext, qiweiAccountKey } = require('../mcp/src/core/credentials');
- const { writeCustomer, readCustomerById, customerFilePath } = require('../mcp/src/core/customer-broker-store');
- const { appendChatRecord, ensureMemory, memoryRelBase, drainQueues } = require('../mcp/src/core/message-archive');
- const { writeConfirmedMapping, readConfirmedMapping } = require('../mcp/src/tools/qiwei-group-management-run');
- async function run() {
- const accountA = { uid: 'shared-device', userId: 'wecom-user-a', nickname: 'A' };
- const accountB = { uid: 'shared-device', userId: 'wecom-user-b', nickname: 'B' };
- const keyA = qiweiAccountKey(accountA);
- const keyB = qiweiAccountKey(accountB);
- assert.notEqual(keyA, keyB);
- setActiveQiweiContext(accountA);
- writeCustomer({ customerId: 'customer-1', name: 'Customer A' });
- appendChatRecord({ wxid: 'customer-1', content: 'A', createdAt: '2026-08-04T10:00:00.000Z' });
- ensureMemory('customer-1', 'Customer A');
- writeConfirmedMapping({ 'room-a': { roomId: 'room-a' } });
- const customerAPath = customerFilePath('customer-1');
- const memoryA = memoryRelBase('customer-1');
- setActiveQiweiContext(accountB);
- assert.equal(readCustomerById('customer-1'), null);
- assert.deepEqual(readConfirmedMapping(), {});
- writeCustomer({ customerId: 'customer-1', name: 'Customer B' });
- appendChatRecord({ wxid: 'customer-1', content: 'B', createdAt: '2026-08-04T10:00:00.000Z' });
- ensureMemory('customer-1', 'Customer B');
- writeConfirmedMapping({ 'room-b': { roomId: 'room-b' } });
- const customerBPath = customerFilePath('customer-1');
- const memoryB = memoryRelBase('customer-1');
- await drainQueues();
- assert.notEqual(customerAPath, customerBPath);
- assert.notEqual(memoryA, memoryB);
- assert.equal(JSON.parse(fs.readFileSync(customerAPath, 'utf8')).name, 'Customer A');
- assert.equal(JSON.parse(fs.readFileSync(customerBPath, 'utf8')).name, 'Customer B');
- assert(fs.existsSync(path.join(root, 'messages', 'chat', keyA, 'customer-1', '2026-08-04.json')));
- assert(fs.existsSync(path.join(root, 'messages', 'chat', keyB, 'customer-1', '2026-08-04.json')));
- assert(fs.existsSync(path.join(root, 'outputs', 'groups', keyA, 'confirmed-mapping.json')));
- assert(fs.existsSync(path.join(root, 'outputs', 'groups', keyB, 'confirmed-mapping.json')));
- console.log(`account isolation smoke test passed (${keyA} != ${keyB})`);
- }
- run()
- .finally(() => fs.rmSync(root, { recursive: true, force: true }))
- .catch(error => {
- console.error(error);
- process.exitCode = 1;
- });
|