diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts index 3b5c9b14495d..2b0169304761 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts @@ -258,8 +258,11 @@ export class UmbAppElement extends UmbLitElement { // Register Core extensions (this is specifically done here because we need these extensions to be registered before the application is initialized) onInit(this, umbExtensionsRegistry); - // Register public extensions (login extensions) - await new UmbServerExtensionRegistrator(this, umbExtensionsRegistry).registerPublicExtensions(); + // Register public extensions (login extensions) in parallel with the auth flow below. + const registerPublicExtensions = new UmbServerExtensionRegistrator( + this, + umbExtensionsRegistry, + ).registerPublicExtensions(); new UmbAppEntryPointExtensionInitializer(this, umbExtensionsRegistry); // Try to initialise the auth flow and get the runtime status @@ -276,6 +279,9 @@ export class UmbAppElement extends UmbLitElement { await this.#setAuthStatus(); } + // The login screen needs the public extensions before routing. + await registerPublicExtensions; + // Initialise the router this.#redirect(); } catch (error) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts index e940827a3f14..083f52eab2c8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server/server-connection.ts @@ -45,8 +45,15 @@ export class UmbServerConnection extends UmbControllerBase { * @memberof UmbServerConnection */ async connect() { - await this.#setStatus(); - await this.#setServerConfiguration(); + // Independent reads, but both are required for the backoffice to function. + const results = await Promise.allSettled([this.#setStatus(), this.#setServerConfiguration()]); + const errors = results + .filter((result): result is PromiseRejectedResult => result.status === 'rejected') + .map((result) => result.reason); + if (errors.length) { + throw errors.length === 1 ? errors[0] : new AggregateError(errors, 'Failed to connect to the Umbraco server'); + } + this.#isConnected.setValue(true); return this; } @@ -86,7 +93,6 @@ export class UmbServerConnection extends UmbControllerBase { throw error; } - this.#isConnected.setValue(true); this.#status = data?.serverStatus ?? RuntimeLevelModel.UNKNOWN; }