Improve local auth env handling and fallbacks

Allow local env files to reliably override authentication feature flags (SMS/WeChat) by whitelisting keys in scripts/dev-utils.mjs and adding a unit test. Add SMS checks to scripts/check-api-server-env.mjs. Make server config.parse_bool tolerant of shell-wrapped quoted values (e.g. '"true"') and add tests so SMS_AUTH_ENABLED is parsed correctly when shells supply quotes. Update docs to clarify SMS env behaviour, restart requirements, and add guidance + a CSS fallback for old mobile browsers (QQ/X5) so public cover images render even when aspect-ratio is unsupported. Also include related frontend test and component adjustments and add puzzle onboarding handlers/endpoints in server-rs/crates/api-server/src/puzzle.rs.
This commit is contained in:
2026-05-18 23:13:49 +08:00
parent 4c10c181e3
commit d1adfa3406
22 changed files with 4309 additions and 52 deletions

View File

@@ -1718,6 +1718,10 @@ function isMiniGameDraftGenerating(state: MiniGameDraftGenerationState | null) {
return Boolean(state && state.phase !== 'ready' && state.phase !== 'failed');
}
function isPersistedDraftGenerating(value: string | null | undefined) {
return value?.trim() === 'generating';
}
function resolveProfileWalletBalance(
dashboard: { walletBalance?: number | null } | null | undefined,
) {
@@ -8750,7 +8754,7 @@ export function PlatformEntryFlowShellImpl({
item.sourceSessionId,
buildPuzzleResultWorkId(item.sourceSessionId),
buildPuzzleResultProfileId(item.sourceSessionId),
]);
]) || isPersistedDraftGenerating(item.generationStatus);
setPuzzleOperation(null);
setPuzzleRun(null);
setPuzzleRuntimeAuthMode('default');
@@ -8897,7 +8901,7 @@ export function PlatformEntryFlowShellImpl({
item.workId,
item.profileId,
item.sourceSessionId,
]);
]) || isPersistedDraftGenerating(item.generationStatus);
const backgroundTask = getMatch3DBackgroundCompileTask(
item.sourceSessionId,
@@ -8972,7 +8976,10 @@ export function PlatformEntryFlowShellImpl({
setMatch3DFormDraftPayload(null);
setMatch3DProfile(null);
setMatch3DGenerationState(
createMiniGameDraftGenerationState('match3d'),
createMiniGameDraftGenerationStateFromStartedAt(
'match3d',
parseDraftGenerationStartedAtMs(item.updatedAt),
),
);
enterCreateTab();
selectionStageRef.current = 'match3d-generating';