fix: skip SUB2API proxy when default proxy is empty

This commit is contained in:
Q3CC
2026-04-18 18:40:38 +08:00
parent 82471af931
commit b5f2ecb99c
7 changed files with 94 additions and 33 deletions
@@ -61,7 +61,7 @@ const DEFAULT_HOTMAIL_LOCAL_BASE_URL = 'http://127.0.0.1:17373';
const DEFAULT_ACCOUNT_RUN_HISTORY_HELPER_BASE_URL = DEFAULT_HOTMAIL_LOCAL_BASE_URL;
const DEFAULT_HOTMAIL_REMOTE_BASE_URL = '';
const DEFAULT_VERIFICATION_RESEND_COUNT = 4;
const DEFAULT_SUB2API_PROXY_NAME = 'shadowrocket';
const DEFAULT_SUB2API_PROXY_NAME = '';
const HOTMAIL_SERVICE_MODE_REMOTE = 'remote';
const HOTMAIL_SERVICE_MODE_LOCAL = 'local';
const VERIFICATION_RESEND_COUNT_MIN = 0;
@@ -112,7 +112,7 @@ return {
);
assert.equal(
api.normalizePersistentSettingValue('sub2apiDefaultProxyName', ''),
'shadowrocket'
''
);
assert.equal(
api.normalizePersistentSettingValue('sub2apiDefaultProxyName', ' proxy-a '),
+44 -1
View File
@@ -39,7 +39,7 @@ function createSub2ApiPanelContext(fetchCalls = []) {
onMessage: { addListener() {} },
sendMessage: async () => ({
email: 'flow@example.com',
sub2apiDefaultProxyName: 'shadowrocket',
sub2apiDefaultProxyName: '',
}),
},
},
@@ -176,3 +176,46 @@ test('SUB2API step 10 uses the same proxy for code exchange and account creation
assert.equal(createCall.body.group_ids[0], 5);
assert.equal(context.completed[0].step, 10);
});
test('SUB2API step 1 omits proxy_id when default proxy is empty', async () => {
const fetchCalls = [];
const context = createSub2ApiPanelContext(fetchCalls);
const result = await vm.runInContext(`
step1_generateOpenAiAuthUrl({
sub2apiEmail: 'admin@example.com',
sub2apiPassword: 'secret',
sub2apiGroupName: 'codex',
sub2apiDefaultProxyName: ' '
}, { report: false })
`, context);
const generateCall = fetchCalls.find((call) => call.path === '/api/v1/admin/openai/generate-auth-url');
assert.equal(result.sub2apiProxyId, null);
assert.equal(Object.hasOwn(generateCall.body, 'proxy_id'), false);
});
test('SUB2API step 10 omits proxy_id when no proxy is configured', async () => {
const fetchCalls = [];
const context = createSub2ApiPanelContext(fetchCalls);
await vm.runInContext(`
step9_submitOpenAiCallback({
localhostUrl: 'http://localhost:1455/auth/callback?code=callback-code&state=oauth-state',
sub2apiUrl: 'https://sub.example/admin/accounts',
sub2apiEmail: 'admin@example.com',
sub2apiPassword: 'secret',
sub2apiGroupName: 'codex',
sub2apiSessionId: 'session-1',
sub2apiOAuthState: 'oauth-state',
sub2apiGroupId: 5,
sub2apiDefaultProxyName: ''
})
`, context);
const exchangeCall = fetchCalls.find((call) => call.path === '/api/v1/admin/openai/exchange-code');
const createCall = fetchCalls.find((call) => call.path === '/api/v1/admin/accounts');
assert.equal(Object.hasOwn(exchangeCall.body, 'proxy_id'), false);
assert.equal(Object.hasOwn(createCall.body, 'proxy_id'), false);
});