MCPcopy Create free account
hub / github.com/QLHazyCoder/FlowPilot / step9_submitOpenAiCallback

Function step9_submitOpenAiCallback

content/sub2api-panel.js:345–416  ·  view source on GitHub ↗
(payload = {})

Source from the content-addressed store, hash-verified

343}
344
345async function step9_submitOpenAiCallback(payload = {}) {
346 const callback = parseLocalhostCallback(payload.localhostUrl || '');
347 const backgroundState = await getBackgroundState();
348 const flowEmail = String(backgroundState.email || '').trim();
349
350 const sessionId = String(payload.sub2apiSessionId || backgroundState.sub2apiSessionId || '').trim();
351 const expectedState = String(payload.sub2apiOAuthState || backgroundState.sub2apiOAuthState || '').trim();
352 const accountName = flowEmail
353 || String(payload.sub2apiDraftName || backgroundState.sub2apiDraftName || '').trim()
354 || buildDraftAccountName(payload.sub2apiGroupName || backgroundState.sub2apiGroupName || SUB2API_DEFAULT_GROUP_NAME);
355
356 const { origin, token } = await loginSub2Api(payload);
357 const group = payload.sub2apiGroupId
358 ? { id: payload.sub2apiGroupId, name: payload.sub2apiGroupName || backgroundState.sub2apiGroupName || SUB2API_DEFAULT_GROUP_NAME }
359 : await getGroupByName(origin, token, payload.sub2apiGroupName || backgroundState.sub2apiGroupName || SUB2API_DEFAULT_GROUP_NAME);
360
361 if (!sessionId) {
362 throw new Error('缺少 SUB2API session_id,请重新执行步骤 1。');
363 }
364 if (expectedState && expectedState !== callback.state) {
365 throw new Error('本次 localhost 回调中的 state 与步骤 1 生成的 state 不一致,请重新执行步骤 1。');
366 }
367
368 log('步骤 9:正在向 SUB2API 交换 OpenAI 授权码...');
369 const exchangeData = await requestJson(origin, '/api/v1/admin/openai/exchange-code', {
370 method: 'POST',
371 token,
372 body: {
373 session_id: sessionId,
374 code: callback.code,
375 state: callback.state,
376 },
377 });
378
379 const credentials = buildOpenAiCredentials(exchangeData);
380 const extra = buildOpenAiExtra(exchangeData);
381 const groupId = Number(group.id);
382 if (!Number.isFinite(groupId) || groupId <= 0) {
383 throw new Error('SUB2API 返回的目标分组 ID 无效。');
384 }
385 const createPayload = {
386 name: accountName,
387 notes: '',
388 platform: 'openai',
389 type: 'oauth',
390 credentials,
391 concurrency: SUB2API_DEFAULT_CONCURRENCY,
392 priority: SUB2API_DEFAULT_PRIORITY,
393 rate_multiplier: SUB2API_DEFAULT_RATE_MULTIPLIER,
394 group_ids: [groupId],
395 auto_pause_on_expired: true,
396 };
397
398 if (extra) {
399 createPayload.extra = extra;
400 }
401
402 log(`步骤 9:授权码交换成功,正在创建 SUB2API 账号(名称:${accountName})...`);

Callers 1

handleStepFunction · 0.85

Calls 11

parseLocalhostCallbackFunction · 0.85
getBackgroundStateFunction · 0.85
buildDraftAccountNameFunction · 0.85
loginSub2ApiFunction · 0.85
getGroupByNameFunction · 0.85
logFunction · 0.85
requestJsonFunction · 0.85
buildOpenAiCredentialsFunction · 0.85
buildOpenAiExtraFunction · 0.85
reportCompleteFunction · 0.85
openAccountsPageSoonFunction · 0.85

Tested by

no test coverage detected