fix: route IM clients through current origin
Deploy im-webapp production / deploy (push) Successful in 1m35s

This commit is contained in:
Your Name
2026-10-19 17:23:34 +08:00
parent b0d1199fb6
commit df173879fa
9 changed files with 116 additions and 18 deletions
+13
View File
@@ -22,3 +22,16 @@ test('login page exposes no tenant switch and rejects stale tenant state', async
assert.match(login, /企业码:\{FIXED_TENANT_CODE\}/);
assert.doesNotMatch(login, />\s*切换企业\s*</);
});
test('websocket fallback uses the current browser host', async () => {
const config = await source('src/lib/config.ts');
assert.match(config, /window\.location\.host/);
assert.doesNotMatch(config, /web\.118im\.com/);
});
test('local development proxies the same-origin websocket path', async () => {
const vite = await source('vite.config.ts');
assert.match(vite, /['"]\/v0\/channels['"]\s*:\s*\{[^}]*ws:\s*true/);
});
+48
View File
@@ -0,0 +1,48 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import { migrateFixedTenant } from '../src/stores/session-migration.ts';
test('migrates a persisted default tenant to the current frontend origin', () => {
const migrated = migrateFixedTenant(
{
code: 'default',
name: 'Default tenant',
host: 'im-api.yuexuan.shop',
secure: true,
endpoints: {
api: 'https://im-api.yuexuan.shop/v1/im',
file: 'https://im-api.yuexuan.shop/v0/file',
},
passwordPolicy: { minLength: 8, maxLength: 64 },
},
{ origin: 'https://www.yuexuan2.shop', host: 'www.yuexuan2.shop', protocol: 'https:' },
);
assert.deepEqual(migrated, {
code: 'default',
name: 'Default tenant',
host: 'www.yuexuan2.shop',
secure: true,
endpoints: {
api: 'https://www.yuexuan2.shop/v1/im',
file: 'https://www.yuexuan2.shop/v0/file',
},
passwordPolicy: { minLength: 8, maxLength: 64 },
});
});
test('does not rewrite a non-default tenant', () => {
const tenant = {
code: 'enterprise-a',
name: 'Enterprise A',
host: 'tenant.example.com',
secure: true,
endpoints: { api: 'https://tenant.example.com/v1/im', file: 'https://tenant.example.com/v0/file' },
};
assert.equal(
migrateFixedTenant(tenant, { origin: 'https://www.yuexuan1.shop', host: 'www.yuexuan1.shop', protocol: 'https:' }),
tenant,
);
});