feat: 同步管理端、用户端与后端业务,并接通线上 Web 接口

补齐平台订阅、外部登录、CRM 同步与用户端页面;Nginx 转发用户端接口,登录页使用 Google 与 Apple 标志。

Co-authored-by: Cursor <cursoragent@cursor.com>
这个提交包含在:
wikiboss
2026-09-23 18:01:47 +08:00
父节点 8ea9c25386
当前提交 62e0ae4435
共有 227 个文件被更改,包括 21855 次插入 和 5264 次删除

查看文件

@@ -1,3 +1,4 @@
import * as dns from 'dns';
import { getMetadataArgsStorage } from 'typeorm';
import { CoolCommException } from '@cool-midway/core';
import { BaseEntity } from '../../../src/comm/entity/base';
@@ -171,13 +172,39 @@ describe('Point 22: 独立企业二级域名绑定向导与 SSL 证书检测 单
expect(res.message).toContain('不匹配');
});
it('模拟或真实解析发生空记录或错误时友好降级为 verified=false', async () => {
it('显式传入空模拟记录时 verified=false 且不假装已核验', async () => {
const res = await service.verifyDnsRecord('card.mycompany.com', 'cname.omnicard.ai', {
mockRecords: [],
});
expect(res.verified).toBe(false);
expect(res.records).toEqual([]);
expect(res.message).toMatch(/未找到/);
});
it('不传模拟记录且 DNS 解析失败时 verified 为 false', async () => {
const spy = jest
.spyOn(dns.promises, 'resolveCname')
.mockRejectedValue(
Object.assign(new Error('queryCname ENOTFOUND card.mycompany.com'), {
code: 'ENOTFOUND',
})
);
try {
const res = await service.verifyDnsRecord(
'card.mycompany.com',
'cname.omnicard.ai'
);
expect(spy).toHaveBeenCalledWith('card.mycompany.com');
expect(res.verified).toBe(false);
expect(res.records).toEqual([]);
expect(res.message).toMatch(/解析失败/);
expect(res.message).toMatch(/ENOTFOUND/);
} finally {
spy.mockRestore();
}
});
});