Add Plus SUB2API session access strategy
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
const DEFAULT_OPENAI_TARGET_ID = flowRegistryApi.DEFAULT_OPENAI_TARGET_ID || 'cpa';
|
||||
const SIGNUP_METHOD_EMAIL = 'email';
|
||||
const SIGNUP_METHOD_PHONE = 'phone';
|
||||
const PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH = 'oauth';
|
||||
const PLUS_ACCOUNT_ACCESS_STRATEGY_SUB2API_CODEX_SESSION = 'sub2api_codex_session';
|
||||
const VALID_OPENAI_TARGET_IDS = Array.isArray(flowRegistryApi.OPENAI_TARGET_IDS)
|
||||
? flowRegistryApi.OPENAI_TARGET_IDS.slice()
|
||||
: ['cpa', 'sub2api', 'codex2api'];
|
||||
@@ -50,6 +52,7 @@
|
||||
const DEFAULT_TARGET_CAPABILITIES = Object.freeze({
|
||||
supportsPhoneSignup: true,
|
||||
requiresPhoneSignupWarning: false,
|
||||
supportedPlusAccountAccessStrategies: Object.freeze([PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH]),
|
||||
});
|
||||
|
||||
const MODE_SWITCH_RELEVANT_KEYS = Object.freeze([
|
||||
@@ -59,6 +62,7 @@
|
||||
'phoneVerificationEnabled',
|
||||
'plusModeEnabled',
|
||||
'signupMethod',
|
||||
'plusAccountAccessStrategy',
|
||||
'openaiIntegrationTargetId',
|
||||
'kiroTargetId',
|
||||
]);
|
||||
@@ -67,14 +71,20 @@
|
||||
cpa: Object.freeze({
|
||||
supportsPhoneSignup: true,
|
||||
requiresPhoneSignupWarning: true,
|
||||
supportedPlusAccountAccessStrategies: Object.freeze([PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH]),
|
||||
}),
|
||||
sub2api: Object.freeze({
|
||||
supportsPhoneSignup: true,
|
||||
requiresPhoneSignupWarning: false,
|
||||
supportedPlusAccountAccessStrategies: Object.freeze([
|
||||
PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH,
|
||||
PLUS_ACCOUNT_ACCESS_STRATEGY_SUB2API_CODEX_SESSION,
|
||||
]),
|
||||
}),
|
||||
codex2api: Object.freeze({
|
||||
supportsPhoneSignup: true,
|
||||
requiresPhoneSignupWarning: false,
|
||||
supportedPlusAccountAccessStrategies: Object.freeze([PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH]),
|
||||
}),
|
||||
});
|
||||
|
||||
@@ -116,6 +126,12 @@
|
||||
: SIGNUP_METHOD_EMAIL;
|
||||
}
|
||||
|
||||
function normalizePlusAccountAccessStrategy(value = '') {
|
||||
return String(value || '').trim().toLowerCase() === PLUS_ACCOUNT_ACCESS_STRATEGY_SUB2API_CODEX_SESSION
|
||||
? PLUS_ACCOUNT_ACCESS_STRATEGY_SUB2API_CODEX_SESSION
|
||||
: PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH;
|
||||
}
|
||||
|
||||
function normalizeOpenAiTargetList(values = []) {
|
||||
if (!Array.isArray(values)) {
|
||||
return [];
|
||||
@@ -336,6 +352,28 @@
|
||||
: (effectiveSignupMethods.includes(SIGNUP_METHOD_EMAIL)
|
||||
? SIGNUP_METHOD_EMAIL
|
||||
: effectiveSignupMethods[0]);
|
||||
const requestedPlusAccountAccessStrategy = normalizePlusAccountAccessStrategy(
|
||||
options?.plusAccountAccessStrategy ?? state?.plusAccountAccessStrategy
|
||||
);
|
||||
const availablePlusAccountAccessStrategies = activeFlowId === 'openai'
|
||||
&& Boolean(flowState.supportsPlusMode)
|
||||
&& Boolean(runtimeLocks.plusModeEnabled)
|
||||
&& effectiveSignupMethod === SIGNUP_METHOD_EMAIL
|
||||
? (
|
||||
Array.isArray(targetState.supportedPlusAccountAccessStrategies)
|
||||
&& targetState.supportedPlusAccountAccessStrategies.length > 0
|
||||
? targetState.supportedPlusAccountAccessStrategies.slice()
|
||||
: [PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH]
|
||||
)
|
||||
: [PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH];
|
||||
const effectivePlusAccountAccessStrategy = availablePlusAccountAccessStrategies.includes(requestedPlusAccountAccessStrategy)
|
||||
? requestedPlusAccountAccessStrategy
|
||||
: PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH;
|
||||
const canEditPlusAccountAccessStrategy = activeFlowId === 'openai'
|
||||
&& Boolean(flowState.supportsPlusMode)
|
||||
&& Boolean(runtimeLocks.plusModeEnabled)
|
||||
&& effectiveSignupMethod === SIGNUP_METHOD_EMAIL
|
||||
&& availablePlusAccountAccessStrategies.length > 1;
|
||||
const visibleGroupIds = typeof flowRegistryApi.getVisibleGroupIds === 'function'
|
||||
&& isRegisteredFlowId(activeFlowId)
|
||||
? flowRegistryApi.getVisibleGroupIds(activeFlowId, effectiveTargetId)
|
||||
@@ -348,8 +386,10 @@
|
||||
canShowPhoneSettings: activeFlowId === 'openai' && Boolean(flowState.supportsPhoneVerificationSettings),
|
||||
canShowPlusSettings: activeFlowId === 'openai' && Boolean(flowState.supportsPlusMode),
|
||||
canSwitchFlow: Boolean(flowState.canSwitchFlow),
|
||||
canEditPlusAccountAccessStrategy,
|
||||
canUsePhoneSignup: canSelectPhoneSignup,
|
||||
canUseSelectedTarget: targetSupported,
|
||||
effectivePlusAccountAccessStrategy,
|
||||
effectivePanelMode: effectiveTargetId,
|
||||
effectiveSignupMethod,
|
||||
effectiveSignupMethods,
|
||||
@@ -357,9 +397,11 @@
|
||||
flowCapabilities: flowState,
|
||||
panelCapabilities: targetState,
|
||||
panelMode: effectiveTargetId,
|
||||
requestedPlusAccountAccessStrategy,
|
||||
requestedSignupMethod,
|
||||
requestedTargetId,
|
||||
runtimeLocks,
|
||||
availablePlusAccountAccessStrategies,
|
||||
shouldWarnCpaPhoneSignup: effectiveSignupMethod === SIGNUP_METHOD_PHONE
|
||||
&& Boolean(targetState.requiresPhoneSignupWarning),
|
||||
stepDefinitionOptions: {
|
||||
@@ -367,6 +409,7 @@
|
||||
integrationTargetId: effectiveTargetId,
|
||||
panelMode: effectiveTargetId,
|
||||
targetId: effectiveTargetId,
|
||||
plusAccountAccessStrategy: effectivePlusAccountAccessStrategy,
|
||||
plusModeEnabled: runtimeLocks.plusModeEnabled,
|
||||
signupMethod: effectiveSignupMethod,
|
||||
},
|
||||
@@ -556,6 +599,7 @@
|
||||
getOpenAiTargetCapabilities,
|
||||
normalizeFlowId,
|
||||
normalizeOpenAiTargetId,
|
||||
normalizePlusAccountAccessStrategy,
|
||||
normalizeSignupMethod,
|
||||
resolveSidepanelCapabilities,
|
||||
resolveSignupMethod,
|
||||
@@ -572,11 +616,14 @@
|
||||
DEFAULT_OPENAI_TARGET_ID,
|
||||
FLOW_CAPABILITIES,
|
||||
OPENAI_TARGET_CAPABILITIES,
|
||||
PLUS_ACCOUNT_ACCESS_STRATEGY_OAUTH,
|
||||
PLUS_ACCOUNT_ACCESS_STRATEGY_SUB2API_CODEX_SESSION,
|
||||
SIGNUP_METHOD_EMAIL,
|
||||
SIGNUP_METHOD_PHONE,
|
||||
VALID_OPENAI_TARGET_IDS,
|
||||
normalizeFlowId,
|
||||
normalizeOpenAiTargetId,
|
||||
normalizePlusAccountAccessStrategy,
|
||||
normalizeSignupMethod,
|
||||
};
|
||||
});
|
||||
|
||||
@@ -336,7 +336,7 @@
|
||||
'openai-plus': {
|
||||
id: 'openai-plus',
|
||||
label: 'Plus',
|
||||
rowIds: ['row-plus-mode'],
|
||||
rowIds: ['row-plus-mode', 'row-plus-payment-method', 'row-plus-account-access-strategy'],
|
||||
},
|
||||
'openai-phone': {
|
||||
id: 'openai-phone',
|
||||
|
||||
@@ -47,6 +47,11 @@
|
||||
const normalizeTargetId = typeof flowRegistry.normalizeTargetId === 'function'
|
||||
? flowRegistry.normalizeTargetId
|
||||
: ((_flowId, value = '', fallback = '') => String(value || fallback || '').trim().toLowerCase());
|
||||
const normalizePlusAccountAccessStrategy = (value = '') => (
|
||||
String(value || '').trim().toLowerCase() === 'sub2api_codex_session'
|
||||
? 'sub2api_codex_session'
|
||||
: 'oauth'
|
||||
);
|
||||
|
||||
function buildDefaultSettingsState() {
|
||||
return {
|
||||
@@ -96,6 +101,7 @@
|
||||
plus: {
|
||||
plusModeEnabled: false,
|
||||
plusPaymentMethod: 'paypal',
|
||||
plusAccountAccessStrategy: 'oauth',
|
||||
},
|
||||
autoRun: {
|
||||
stepExecutionRange: {
|
||||
@@ -301,6 +307,11 @@
|
||||
?? nested?.flows?.openai?.plus?.plusPaymentMethod
|
||||
?? defaults.flows.openai.plus.plusPaymentMethod
|
||||
).trim() || defaults.flows.openai.plus.plusPaymentMethod,
|
||||
plusAccountAccessStrategy: normalizePlusAccountAccessStrategy(
|
||||
input?.plusAccountAccessStrategy
|
||||
?? nested?.flows?.openai?.plus?.plusAccountAccessStrategy
|
||||
?? defaults.flows.openai.plus.plusAccountAccessStrategy
|
||||
),
|
||||
},
|
||||
autoRun: {
|
||||
stepExecutionRange: normalizeStepExecutionRangeEntry(
|
||||
@@ -439,6 +450,7 @@
|
||||
next.phoneSignupReloginAfterBindEmailEnabled = openaiState.signup.phoneSignupReloginAfterBindEmailEnabled;
|
||||
next.plusModeEnabled = openaiState.plus.plusModeEnabled;
|
||||
next.plusPaymentMethod = openaiState.plus.plusPaymentMethod;
|
||||
next.plusAccountAccessStrategy = openaiState.plus.plusAccountAccessStrategy;
|
||||
next.mailProvider = normalizedState.services.email.provider;
|
||||
next.ipProxyEnabled = normalizedState.services.proxy.enabled;
|
||||
next.ipProxyService = normalizedState.services.proxy.provider;
|
||||
|
||||
Reference in New Issue
Block a user