From c6f1103b329c40d18ab6319650d2ab8b91ba2237 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Sat, 5 Sep 2026 14:36:00 +0800 Subject: [PATCH] fix(config): name malformed local identity errors --- .../assets/framework/config/local-startup.ts | 8 ++++++-- .../config/local-startup.test.ts | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/cocoscreator_projects/YouleNexus/assets/framework/config/local-startup.ts b/cocoscreator_projects/YouleNexus/assets/framework/config/local-startup.ts index 3bfef45..5dfa233 100644 --- a/cocoscreator_projects/YouleNexus/assets/framework/config/local-startup.ts +++ b/cocoscreator_projects/YouleNexus/assets/framework/config/local-startup.ts @@ -96,8 +96,12 @@ export function assertLocalStartupContext(context: LocalStartupContext): void { try { resolveIdentity([() => config.identity]); } catch (error) { - if (error instanceof Error) throw error; - fail('identity', 'is invalid'); + const reason = error instanceof Error ? error.message : 'validation failed'; + const wrapped = new Error(`Invalid local startup identity: ${reason}`) as Error & { + cause?: unknown; + }; + wrapped.cause = error; + throw wrapped; } const authoritative = PROFILES.local?.servers; diff --git a/cocoscreator_projects/framework-tests/config/local-startup.test.ts b/cocoscreator_projects/framework-tests/config/local-startup.test.ts index cec3cb6..3026c73 100644 --- a/cocoscreator_projects/framework-tests/config/local-startup.test.ts +++ b/cocoscreator_projects/framework-tests/config/local-startup.test.ts @@ -141,6 +141,24 @@ test('context validator rejects forged config fields and malformed identity', () ); }); +test('context validator names identity when a forged context omits the identity object', () => { + const base = validContext(); + for (const identity of [null, undefined]) { + assert.throws( + () => assertLocalStartupContext({ + ...base, + config: { ...base.config, identity }, + } as unknown as LocalStartupContext), + (error: unknown) => { + assert.ok(error instanceof Error); + assert.match(error.message, /identity/i); + assert.ok((error as Error & { cause?: unknown }).cause instanceof Error); + return true; + }, + ); + } +}); + test('connection target must be a valid URL from the authoritative local profile', () => { const context = validContext(); assert.doesNotThrow(() => assertLocalConnectionTarget(context, 'ws://127.0.0.1:3088'));