From 4ee298c1aab51f4cd202faa84cf00b851596c797 Mon Sep 17 00:00:00 2001 From: DellaBitta Date: Fri, 13 Jun 2025 16:04:28 -0400 Subject: [PATCH 1/9] Auto it impl and tested --- common/api-review/app.api.md | 8 +++- docs-devsite/app.md | 26 +++++++++++++ packages/app/src/api.ts | 73 ++++++++++++++++++++++++++++-------- packages/app/src/internal.ts | 28 +++++++++++++- 4 files changed, 117 insertions(+), 18 deletions(-) diff --git a/common/api-review/app.api.md b/common/api-review/app.api.md index 4e93f1ae87f..e6be3df0bc2 100644 --- a/common/api-review/app.api.md +++ b/common/api-review/app.api.md @@ -112,12 +112,18 @@ export function initializeApp(): FirebaseApp; // @public export function initializeServerApp(options: FirebaseOptions | FirebaseApp, config: FirebaseServerAppSettings): FirebaseServerApp; +// @public +export function initializeServerApp(_serverAppConfig?: FirebaseServerAppSettings): FirebaseServerApp; + // @internal (undocumented) -export function _isFirebaseApp(obj: FirebaseApp | FirebaseOptions): obj is FirebaseApp; +export function _isFirebaseApp(obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings): obj is FirebaseApp; // @internal (undocumented) export function _isFirebaseServerApp(obj: FirebaseApp | FirebaseServerApp | null | undefined): obj is FirebaseServerApp; +// @internal (undocumented) +export function _isFirebaseServerAppSettings(obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings): obj is FirebaseServerAppSettings; + // @public export function onLog(logCallback: LogCallback | null, options?: LogOptions): void; diff --git a/docs-devsite/app.md b/docs-devsite/app.md index 9c3b322aaaf..3b11836cb24 100644 --- a/docs-devsite/app.md +++ b/docs-devsite/app.md @@ -23,6 +23,8 @@ This package coordinates the communication between the different Firebase compon | function() | | [getApps()](./app.md#getapps) | A (read-only) array of all initialized apps. | | [initializeApp()](./app.md#initializeapp) | Creates and initializes a FirebaseApp instance. | +| function(\_serverAppConfig, ...) | +| [initializeServerApp(\_serverAppConfig)](./app.md#initializeserverapp_b13f0eb) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance. | | function(libraryKeyOrName, ...) | | [registerVersion(libraryKeyOrName, version, variant)](./app.md#registerversion_f673248) | Registers a library's name and version for platform logging purposes. | | function(logCallback, ...) | @@ -116,6 +118,30 @@ export declare function initializeApp(): FirebaseApp; [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) +## function(\_serverAppConfig, ...) + +### initializeServerApp(\_serverAppConfig) {:#initializeserverapp_b13f0eb} + +Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance. + +Signature: + +```typescript +export declare function initializeServerApp(_serverAppConfig?: FirebaseServerAppSettings): FirebaseServerApp; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| \_serverAppConfig | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | | + +Returns: + +[FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) + +The initialized `FirebaseServerApp` with default app configuration. + ## function(libraryKeyOrName, ...) ### registerVersion(libraryKeyOrName, version, variant) {:#registerversion_f673248} diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts index 9cba8ec6f50..44bead9dad9 100644 --- a/packages/app/src/api.ts +++ b/packages/app/src/api.ts @@ -37,6 +37,7 @@ import { _apps, _components, _isFirebaseApp, + _isFirebaseServerAppSettings, _registerComponent, _serverApps } from './internal'; @@ -231,32 +232,74 @@ export function initializeServerApp( config: FirebaseServerAppSettings ): FirebaseServerApp; +/** + * Creates and initializes a {@link @firebase/app#FirebaseServerApp} instance. + * + * @param config - Optional `FirebaseServerApp` configuration. + * + * @returns The initialized `FirebaseServerApp` with default app configuration. + * + * @public + */ export function initializeServerApp( - _options: FirebaseOptions | FirebaseApp, - _serverAppConfig: FirebaseServerAppSettings + _serverAppConfig?: FirebaseServerAppSettings +): FirebaseServerApp; + +export function initializeServerApp( + _options?: FirebaseApp | FirebaseServerAppSettings | FirebaseOptions, + _serverAppConfig: FirebaseServerAppSettings = {} ): FirebaseServerApp { if (isBrowser() && !isWebWorker()) { // FirebaseServerApp isn't designed to be run in browsers. throw ERROR_FACTORY.create(AppError.INVALID_SERVER_APP_ENVIRONMENT); } - if (_serverAppConfig.automaticDataCollectionEnabled === undefined) { - _serverAppConfig.automaticDataCollectionEnabled = true; + let app: FirebaseApp; + let firebaseOptions: FirebaseOptions | undefined; + //let serverAppSettings: FirebaseServerAppSettings = _serverAppConfig || { }; + let serverAppSettings: FirebaseServerAppSettings = _serverAppConfig || {}; + + console.log('options: ', _options); + console.log('_serverAppConfig: ', _serverAppConfig); + + if (_options) { + if (_isFirebaseApp(_options)) { + console.log('_isFirebaseApp'); + app = _options; + firebaseOptions = app.options; + /*serverAppSettings = { + ...serverAppSettings, + ..._serverAppConfig + };*/ + } else if (_isFirebaseServerAppSettings(_options)) { + console.log('_isFirebaseServerAppSettings'); + serverAppSettings = _options; + /*serverAppSettings = { + ...serverAppSettings, + ..._options + };*/ + } else { + console.log('isFirebaseOptions'); + firebaseOptions = _options; + } } - let appOptions: FirebaseOptions; - if (_isFirebaseApp(_options)) { - appOptions = _options.options; - } else { - appOptions = _options; + firebaseOptions ||= getDefaultAppConfig(); + if (!firebaseOptions) { + throw ERROR_FACTORY.create(AppError.NO_OPTIONS); } // Build an app name based on a hash of the configuration options. const nameObj = { - ..._serverAppConfig, - ...appOptions + ...serverAppSettings, + ...firebaseOptions }; + console.log('Final:'); + console.log('app: ', app!); + console.log('firebaseOptions: ', firebaseOptions); + console.log('serverAppSettings: ', serverAppSettings); + // However, Do not mangle the name based on releaseOnDeref, since it will vary between the // construction of FirebaseServerApp instances. For example, if the object is the request headers. if (nameObj.releaseOnDeref !== undefined) { @@ -270,7 +313,7 @@ export function initializeServerApp( ); }; - if (_serverAppConfig.releaseOnDeref !== undefined) { + if (serverAppSettings.releaseOnDeref !== undefined) { if (typeof FinalizationRegistry === 'undefined') { throw ERROR_FACTORY.create( AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED, @@ -283,7 +326,7 @@ export function initializeServerApp( const existingApp = _serverApps.get(nameString) as FirebaseServerApp; if (existingApp) { (existingApp as FirebaseServerAppImpl).incRefCount( - _serverAppConfig.releaseOnDeref + serverAppSettings.releaseOnDeref ); return existingApp; } @@ -294,8 +337,8 @@ export function initializeServerApp( } const newApp = new FirebaseServerAppImpl( - appOptions, - _serverAppConfig, + firebaseOptions, + serverAppSettings, nameString, container ); diff --git a/packages/app/src/internal.ts b/packages/app/src/internal.ts index cbcdcb26501..422c941aba3 100644 --- a/packages/app/src/internal.ts +++ b/packages/app/src/internal.ts @@ -17,6 +17,8 @@ import { FirebaseApp, + FirebaseAppSettings, + FirebaseServerAppSettings, FirebaseOptions, FirebaseServerApp } from './public-types'; @@ -147,18 +149,40 @@ export function _removeServiceInstance( /** * - * @param obj - an object of type FirebaseApp or FirebaseOptions. + * @param obj - an object of type FirebaseApp, FirebaseOptions or FirebaseAppSettings. * * @returns true if the provide object is of type FirebaseApp. * * @internal */ export function _isFirebaseApp( - obj: FirebaseApp | FirebaseOptions + obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings ): obj is FirebaseApp { return (obj as FirebaseApp).options !== undefined; } +/** + * + * @param obj - an object of type FirebaseApp, FirebaseOptions or FirebaseAppSettings. + * + * @returns true if the provided object is of type FirebaseServerAppImpl. + * + * @internal + */ +export function _isFirebaseServerAppSettings( + obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings +): obj is FirebaseServerAppSettings { + if (_isFirebaseApp(obj)) { + return false; + } + return ( + 'authIdToken' in obj || + 'appCheckToken' in obj || + 'releaseOnDeref' in obj || + 'automaticDataCollectionEnabled' in obj + ); +} + /** * * @param obj - an object of type FirebaseApp. From ed091d2d90432674bc163945223ae3c04ba197bf Mon Sep 17 00:00:00 2001 From: DellaBitta Date: Mon, 16 Jun 2025 10:53:47 -0400 Subject: [PATCH 2/9] declare zero parameter initializeServerApp function. --- common/api-review/app.api.md | 3 +++ docs-devsite/app.md | 16 ++++++++++++++++ packages/app/src/api.ts | 8 ++++++++ 3 files changed, 27 insertions(+) diff --git a/common/api-review/app.api.md b/common/api-review/app.api.md index e6be3df0bc2..e16150744cb 100644 --- a/common/api-review/app.api.md +++ b/common/api-review/app.api.md @@ -115,6 +115,9 @@ export function initializeServerApp(options: FirebaseOptions | FirebaseApp, conf // @public export function initializeServerApp(_serverAppConfig?: FirebaseServerAppSettings): FirebaseServerApp; +// @public +export function initializeServerApp(): FirebaseServerApp; + // @internal (undocumented) export function _isFirebaseApp(obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings): obj is FirebaseApp; diff --git a/docs-devsite/app.md b/docs-devsite/app.md index 3b11836cb24..ca614678589 100644 --- a/docs-devsite/app.md +++ b/docs-devsite/app.md @@ -23,6 +23,7 @@ This package coordinates the communication between the different Firebase compon | function() | | [getApps()](./app.md#getapps) | A (read-only) array of all initialized apps. | | [initializeApp()](./app.md#initializeapp) | Creates and initializes a FirebaseApp instance. | +| [initializeServerApp()](./app.md#initializeserverapp) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance using Auto Init. | | function(\_serverAppConfig, ...) | | [initializeServerApp(\_serverAppConfig)](./app.md#initializeserverapp_b13f0eb) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance. | | function(libraryKeyOrName, ...) | @@ -118,6 +119,21 @@ export declare function initializeApp(): FirebaseApp; [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) +### initializeServerApp() {:#initializeserverapp} + +Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance using Auto Init. + +Signature: + +```typescript +export declare function initializeServerApp(): FirebaseServerApp; +``` +Returns: + +[FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) + +The initialized \`FirebaseServerApp. + ## function(\_serverAppConfig, ...) ### initializeServerApp(\_serverAppConfig) {:#initializeserverapp_b13f0eb} diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts index 44bead9dad9..b1f4c54c294 100644 --- a/packages/app/src/api.ts +++ b/packages/app/src/api.ts @@ -245,6 +245,14 @@ export function initializeServerApp( _serverAppConfig?: FirebaseServerAppSettings ): FirebaseServerApp; +/** + * Creates and initializes a {@link @firebase/app#FirebaseServerApp} instance using Auto Init. + * + * @returns The initialized `FirebaseServerApp. + * + * @public + */ +export function initializeServerApp(): FirebaseServerApp; export function initializeServerApp( _options?: FirebaseApp | FirebaseServerAppSettings | FirebaseOptions, _serverAppConfig: FirebaseServerAppSettings = {} From 4ff465a74d25df474bce10b2b5a05275ed0eadb0 Mon Sep 17 00:00:00 2001 From: DellaBitta Date: Tue, 17 Jun 2025 09:31:37 -0400 Subject: [PATCH 3/9] parameter consistency. logging cleanup. --- common/api-review/app.api.md | 4 ++-- docs-devsite/app.md | 22 +++++++++++----------- packages/app/src/api.ts | 31 ++++++------------------------- 3 files changed, 19 insertions(+), 38 deletions(-) diff --git a/common/api-review/app.api.md b/common/api-review/app.api.md index e16150744cb..e25d2a9fdef 100644 --- a/common/api-review/app.api.md +++ b/common/api-review/app.api.md @@ -110,10 +110,10 @@ export function initializeApp(options: FirebaseOptions, config?: FirebaseAppSett export function initializeApp(): FirebaseApp; // @public -export function initializeServerApp(options: FirebaseOptions | FirebaseApp, config: FirebaseServerAppSettings): FirebaseServerApp; +export function initializeServerApp(options: FirebaseOptions | FirebaseApp, config?: FirebaseServerAppSettings): FirebaseServerApp; // @public -export function initializeServerApp(_serverAppConfig?: FirebaseServerAppSettings): FirebaseServerApp; +export function initializeServerApp(config?: FirebaseServerAppSettings): FirebaseServerApp; // @public export function initializeServerApp(): FirebaseServerApp; diff --git a/docs-devsite/app.md b/docs-devsite/app.md index ca614678589..d730269ace3 100644 --- a/docs-devsite/app.md +++ b/docs-devsite/app.md @@ -23,9 +23,9 @@ This package coordinates the communication between the different Firebase compon | function() | | [getApps()](./app.md#getapps) | A (read-only) array of all initialized apps. | | [initializeApp()](./app.md#initializeapp) | Creates and initializes a FirebaseApp instance. | -| [initializeServerApp()](./app.md#initializeserverapp) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance using Auto Init. | -| function(\_serverAppConfig, ...) | -| [initializeServerApp(\_serverAppConfig)](./app.md#initializeserverapp_b13f0eb) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance. | +| [initializeServerApp()](./app.md#initializeserverapp) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance using Firebase App Hosting Auto Init. | +| function(config, ...) | +| [initializeServerApp(config)](./app.md#initializeserverapp_e7d0728) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance. | | function(libraryKeyOrName, ...) | | [registerVersion(libraryKeyOrName, version, variant)](./app.md#registerversion_f673248) | Registers a library's name and version for platform logging purposes. | | function(logCallback, ...) | @@ -121,7 +121,7 @@ export declare function initializeApp(): FirebaseApp; ### initializeServerApp() {:#initializeserverapp} -Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance using Auto Init. +Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance using Firebase App Hosting Auto Init. Signature: @@ -134,29 +134,29 @@ export declare function initializeServerApp(): FirebaseServerApp; The initialized \`FirebaseServerApp. -## function(\_serverAppConfig, ...) +## function(config, ...) -### initializeServerApp(\_serverAppConfig) {:#initializeserverapp_b13f0eb} +### initializeServerApp(config) {:#initializeserverapp_e7d0728} Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance. Signature: ```typescript -export declare function initializeServerApp(_serverAppConfig?: FirebaseServerAppSettings): FirebaseServerApp; +export declare function initializeServerApp(config?: FirebaseServerAppSettings): FirebaseServerApp; ``` #### Parameters | Parameter | Type | Description | | --- | --- | --- | -| \_serverAppConfig | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | | +| config | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | Optional FirebaseServerApp configuration. | Returns: [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) -The initialized `FirebaseServerApp` with default app configuration. +The initialized `FirebaseServerApp`. ## function(libraryKeyOrName, ...) @@ -365,7 +365,7 @@ See [Add Firebase to your app](https://firebase.google.com/docs/web/setup#add_fi Signature: ```typescript -export declare function initializeServerApp(options: FirebaseOptions | FirebaseApp, config: FirebaseServerAppSettings): FirebaseServerApp; +export declare function initializeServerApp(options: FirebaseOptions | FirebaseApp, config?: FirebaseServerAppSettings): FirebaseServerApp; ``` #### Parameters @@ -373,7 +373,7 @@ export declare function initializeServerApp(options: FirebaseOptions | FirebaseA | Parameter | Type | Description | | --- | --- | --- | | options | [FirebaseOptions](./app.firebaseoptions.md#firebaseoptions_interface) \| [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | Firebase.AppOptions to configure the app's services, or a a FirebaseApp instance which contains the AppOptions within. | -| config | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | FirebaseServerApp configuration. | +| config | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | Optional FirebaseServerApp configuration. | Returns: diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts index b1f4c54c294..99a71e06949 100644 --- a/packages/app/src/api.ts +++ b/packages/app/src/api.ts @@ -221,7 +221,7 @@ export function initializeApp( * * @param options - `Firebase.AppOptions` to configure the app's services, or a * a `FirebaseApp` instance which contains the `AppOptions` within. - * @param config - `FirebaseServerApp` configuration. + * @param config - Optional `FirebaseServerApp` configuration. * * @returns The initialized `FirebaseServerApp`. * @@ -229,7 +229,7 @@ export function initializeApp( */ export function initializeServerApp( options: FirebaseOptions | FirebaseApp, - config: FirebaseServerAppSettings + config?: FirebaseServerAppSettings ): FirebaseServerApp; /** @@ -237,16 +237,17 @@ export function initializeServerApp( * * @param config - Optional `FirebaseServerApp` configuration. * - * @returns The initialized `FirebaseServerApp` with default app configuration. + * @returns The initialized `FirebaseServerApp`. * * @public */ export function initializeServerApp( - _serverAppConfig?: FirebaseServerAppSettings + config?: FirebaseServerAppSettings ): FirebaseServerApp; /** - * Creates and initializes a {@link @firebase/app#FirebaseServerApp} instance using Auto Init. + * Creates and initializes a {@link @firebase/app#FirebaseServerApp} instance using + * Firebase App Hosting Auto Init. * * @returns The initialized `FirebaseServerApp. * @@ -264,30 +265,15 @@ export function initializeServerApp( let app: FirebaseApp; let firebaseOptions: FirebaseOptions | undefined; - //let serverAppSettings: FirebaseServerAppSettings = _serverAppConfig || { }; let serverAppSettings: FirebaseServerAppSettings = _serverAppConfig || {}; - console.log('options: ', _options); - console.log('_serverAppConfig: ', _serverAppConfig); - if (_options) { if (_isFirebaseApp(_options)) { - console.log('_isFirebaseApp'); app = _options; firebaseOptions = app.options; - /*serverAppSettings = { - ...serverAppSettings, - ..._serverAppConfig - };*/ } else if (_isFirebaseServerAppSettings(_options)) { - console.log('_isFirebaseServerAppSettings'); serverAppSettings = _options; - /*serverAppSettings = { - ...serverAppSettings, - ..._options - };*/ } else { - console.log('isFirebaseOptions'); firebaseOptions = _options; } } @@ -303,11 +289,6 @@ export function initializeServerApp( ...firebaseOptions }; - console.log('Final:'); - console.log('app: ', app!); - console.log('firebaseOptions: ', firebaseOptions); - console.log('serverAppSettings: ', serverAppSettings); - // However, Do not mangle the name based on releaseOnDeref, since it will vary between the // construction of FirebaseServerApp instances. For example, if the object is the request headers. if (nameObj.releaseOnDeref !== undefined) { From 07b8f26a112781890f3c89ac9fec99d40bcd6066 Mon Sep 17 00:00:00 2001 From: DellaBitta Date: Tue, 17 Jun 2025 11:06:41 -0400 Subject: [PATCH 4/9] configuration -> settings --- common/api-review/app.api.md | 3 --- docs-devsite/app.md | 18 +----------------- packages/app/src/api.ts | 12 +----------- 3 files changed, 2 insertions(+), 31 deletions(-) diff --git a/common/api-review/app.api.md b/common/api-review/app.api.md index e25d2a9fdef..c12089c1520 100644 --- a/common/api-review/app.api.md +++ b/common/api-review/app.api.md @@ -115,9 +115,6 @@ export function initializeServerApp(options: FirebaseOptions | FirebaseApp, conf // @public export function initializeServerApp(config?: FirebaseServerAppSettings): FirebaseServerApp; -// @public -export function initializeServerApp(): FirebaseServerApp; - // @internal (undocumented) export function _isFirebaseApp(obj: FirebaseApp | FirebaseOptions | FirebaseAppSettings): obj is FirebaseApp; diff --git a/docs-devsite/app.md b/docs-devsite/app.md index d730269ace3..473cf91ce4c 100644 --- a/docs-devsite/app.md +++ b/docs-devsite/app.md @@ -23,7 +23,6 @@ This package coordinates the communication between the different Firebase compon | function() | | [getApps()](./app.md#getapps) | A (read-only) array of all initialized apps. | | [initializeApp()](./app.md#initializeapp) | Creates and initializes a FirebaseApp instance. | -| [initializeServerApp()](./app.md#initializeserverapp) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance using Firebase App Hosting Auto Init. | | function(config, ...) | | [initializeServerApp(config)](./app.md#initializeserverapp_e7d0728) | Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance. | | function(libraryKeyOrName, ...) | @@ -119,21 +118,6 @@ export declare function initializeApp(): FirebaseApp; [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) -### initializeServerApp() {:#initializeserverapp} - -Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance using Firebase App Hosting Auto Init. - -Signature: - -```typescript -export declare function initializeServerApp(): FirebaseServerApp; -``` -Returns: - -[FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) - -The initialized \`FirebaseServerApp. - ## function(config, ...) ### initializeServerApp(config) {:#initializeserverapp_e7d0728} @@ -373,7 +357,7 @@ export declare function initializeServerApp(options: FirebaseOptions | FirebaseA | Parameter | Type | Description | | --- | --- | --- | | options | [FirebaseOptions](./app.firebaseoptions.md#firebaseoptions_interface) \| [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | Firebase.AppOptions to configure the app's services, or a a FirebaseApp instance which contains the AppOptions within. | -| config | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | Optional FirebaseServerApp configuration. | +| config | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | Optional FirebaseServerApp settings. | Returns: diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts index 99a71e06949..dec8573344f 100644 --- a/packages/app/src/api.ts +++ b/packages/app/src/api.ts @@ -221,7 +221,7 @@ export function initializeApp( * * @param options - `Firebase.AppOptions` to configure the app's services, or a * a `FirebaseApp` instance which contains the `AppOptions` within. - * @param config - Optional `FirebaseServerApp` configuration. + * @param config - Optional `FirebaseServerApp` settings. * * @returns The initialized `FirebaseServerApp`. * @@ -244,16 +244,6 @@ export function initializeServerApp( export function initializeServerApp( config?: FirebaseServerAppSettings ): FirebaseServerApp; - -/** - * Creates and initializes a {@link @firebase/app#FirebaseServerApp} instance using - * Firebase App Hosting Auto Init. - * - * @returns The initialized `FirebaseServerApp. - * - * @public - */ -export function initializeServerApp(): FirebaseServerApp; export function initializeServerApp( _options?: FirebaseApp | FirebaseServerAppSettings | FirebaseOptions, _serverAppConfig: FirebaseServerAppSettings = {} From 832f81e4569042e92733dd9d17003d95ca301c7f Mon Sep 17 00:00:00 2001 From: DellaBitta Date: Mon, 7 Jul 2025 11:02:34 -0400 Subject: [PATCH 5/9] changeset --- .changeset/thin-bikes-tan.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/thin-bikes-tan.md diff --git a/.changeset/thin-bikes-tan.md b/.changeset/thin-bikes-tan.md new file mode 100644 index 00000000000..121b3208d52 --- /dev/null +++ b/.changeset/thin-bikes-tan.md @@ -0,0 +1,6 @@ +--- +'@firebase/app': minor +'firebase': minor +--- + +initializeServerApp now supports auto-initialization for Firebase App Hosting. From 9f679763ad5464f1dbbee868e18f8d9715668db6 Mon Sep 17 00:00:00 2001 From: DellaBitta Date: Tue, 8 Jul 2025 10:15:00 -0400 Subject: [PATCH 6/9] Review updates. --- packages/app/src/api.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts index dec8573344f..641fe6407e1 100644 --- a/packages/app/src/api.ts +++ b/packages/app/src/api.ts @@ -235,7 +235,7 @@ export function initializeServerApp( /** * Creates and initializes a {@link @firebase/app#FirebaseServerApp} instance. * - * @param config - Optional `FirebaseServerApp` configuration. + * @param config - Optional `FirebaseServerApp` settings. * * @returns The initialized `FirebaseServerApp`. * @@ -253,14 +253,12 @@ export function initializeServerApp( throw ERROR_FACTORY.create(AppError.INVALID_SERVER_APP_ENVIRONMENT); } - let app: FirebaseApp; let firebaseOptions: FirebaseOptions | undefined; let serverAppSettings: FirebaseServerAppSettings = _serverAppConfig || {}; if (_options) { if (_isFirebaseApp(_options)) { - app = _options; - firebaseOptions = app.options; + firebaseOptions = _options.options; } else if (_isFirebaseServerAppSettings(_options)) { serverAppSettings = _options; } else { @@ -268,6 +266,10 @@ export function initializeServerApp( } } + if (serverAppSettings.automaticDataCollectionEnabled === undefined) { + serverAppSettings.automaticDataCollectionEnabled = true; + } + firebaseOptions ||= getDefaultAppConfig(); if (!firebaseOptions) { throw ERROR_FACTORY.create(AppError.NO_OPTIONS); From b43f51381c98921afc8c403105eed02245d84f5c Mon Sep 17 00:00:00 2001 From: DellaBitta Date: Tue, 8 Jul 2025 10:36:46 -0400 Subject: [PATCH 7/9] docgen. --- docs-devsite/app.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-devsite/app.md b/docs-devsite/app.md index 473cf91ce4c..fed26f62bf4 100644 --- a/docs-devsite/app.md +++ b/docs-devsite/app.md @@ -134,7 +134,7 @@ export declare function initializeServerApp(config?: FirebaseServerAppSettings): | Parameter | Type | Description | | --- | --- | --- | -| config | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | Optional FirebaseServerApp configuration. | +| config | [FirebaseServerAppSettings](./app.firebaseserverappsettings.md#firebaseserverappsettings_interface) | Optional FirebaseServerApp settings. | Returns: From 1653cfca5bda674cfff984403f6ac52b68e9a49d Mon Sep 17 00:00:00 2001 From: DellaBitta Date: Tue, 8 Jul 2025 16:52:12 -0400 Subject: [PATCH 8/9] @throws clauses. --- docs-devsite/app.md | 26 ++++++++++++++++++++++++++ packages/app/src/api.ts | 22 ++++++++++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/docs-devsite/app.md b/docs-devsite/app.md index fed26f62bf4..0c9b2d03e4b 100644 --- a/docs-devsite/app.md +++ b/docs-devsite/app.md @@ -142,6 +142,14 @@ export declare function initializeServerApp(config?: FirebaseServerAppSettings): The initialized `FirebaseServerApp`. +#### Exceptions + +If invoked in an unsupported non-server environment such as a browser. + +If [FirebaseServerAppSettings.releaseOnDeref](./app.firebaseserverappsettings.md#firebaseserverappsettingsreleaseonderef) is defined but the runtime doesn't provide Finalization Registry support. + +If the `FIREBASE_OPTIONS` enviornment variable does not contain a valid project configuration required for auto-initialization. + ## function(libraryKeyOrName, ...) ### registerVersion(libraryKeyOrName, version, variant) {:#registerversion_f673248} @@ -286,6 +294,12 @@ export declare function initializeApp(options: FirebaseOptions, name?: string): The initialized app. +#### Exceptions + +If the optional `name` parameter is malformed or empty. + +If a `FirebaseApp` already exists with the same name but with a different configuration. + ### Example 1 @@ -338,6 +352,12 @@ export declare function initializeApp(options: FirebaseOptions, config?: Firebas [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) +#### Exceptions + +If [FirebaseAppSettings.name](./app.firebaseappsettings.md#firebaseappsettingsname) is defined but the value is malformed or empty. + +If a `FirebaseApp` already exists with the same name but with a different configuration. + ### initializeServerApp(options, config) {:#initializeserverapp_30ab697} Creates and initializes a [FirebaseServerApp](./app.firebaseserverapp.md#firebaseserverapp_interface) instance. @@ -365,6 +385,12 @@ export declare function initializeServerApp(options: FirebaseOptions | FirebaseA The initialized `FirebaseServerApp`. +#### Exceptions + +If invoked in an unsupported non-server environment such as a browser. + +If [FirebaseServerAppSettings.releaseOnDeref](./app.firebaseserverappsettings.md#firebaseserverappsettingsreleaseonderef) is defined but the runtime doesn't provide Finalization Registry support. + ### Example diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts index 641fe6407e1..19725cf3e85 100644 --- a/packages/app/src/api.ts +++ b/packages/app/src/api.ts @@ -106,6 +106,10 @@ export const SDK_VERSION = version; * is provided, the default is `"[DEFAULT]"`. * * @returns The initialized app. + * + * @throws If the optional `name` parameter is malformed or empty. + * + * @throws If a `FirebaseApp` already exists with the same name but with a different configuration. * * @public */ @@ -119,6 +123,9 @@ export function initializeApp( * @param options - Options to configure the app's services. * @param config - FirebaseApp Configuration * + * @throws If {@link FirebaseAppSettings.name} is defined but the value is malformed or empty. + * + * @throws If a `FirebaseApp` already exists with the same name but with a different configuration. * @public */ export function initializeApp( @@ -224,7 +231,12 @@ export function initializeApp( * @param config - Optional `FirebaseServerApp` settings. * * @returns The initialized `FirebaseServerApp`. - * + * + * @throws If invoked in an unsupported non-server environment such as a browser. + * + * @throws If {@link FirebaseServerAppSettings.releaseOnDeref} is defined but the runtime doesn't + * provide Finalization Registry support. + * * @public */ export function initializeServerApp( @@ -238,7 +250,13 @@ export function initializeServerApp( * @param config - Optional `FirebaseServerApp` settings. * * @returns The initialized `FirebaseServerApp`. - * + * + * @throws If invoked in an unsupported non-server environment such as a browser. + * @throws If {@link FirebaseServerAppSettings.releaseOnDeref} is defined but the runtime doesn't + * provide Finalization Registry support. + * @throws If the `FIREBASE_OPTIONS` enviornment variable does not contain a valid project + * configuration required for auto-initialization. + * * @public */ export function initializeServerApp( From 7b1a50601469f86880bd150e347f74be2cb06f8f Mon Sep 17 00:00:00 2001 From: DellaBitta Date: Wed, 9 Jul 2025 09:56:11 -0400 Subject: [PATCH 9/9] format --- packages/app/src/api.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/app/src/api.ts b/packages/app/src/api.ts index 19725cf3e85..6fd50060a6a 100644 --- a/packages/app/src/api.ts +++ b/packages/app/src/api.ts @@ -106,9 +106,9 @@ export const SDK_VERSION = version; * is provided, the default is `"[DEFAULT]"`. * * @returns The initialized app. - * + * * @throws If the optional `name` parameter is malformed or empty. - * + * * @throws If a `FirebaseApp` already exists with the same name but with a different configuration. * * @public @@ -124,7 +124,7 @@ export function initializeApp( * @param config - FirebaseApp Configuration * * @throws If {@link FirebaseAppSettings.name} is defined but the value is malformed or empty. - * + * * @throws If a `FirebaseApp` already exists with the same name but with a different configuration. * @public */ @@ -231,12 +231,12 @@ export function initializeApp( * @param config - Optional `FirebaseServerApp` settings. * * @returns The initialized `FirebaseServerApp`. - * + * * @throws If invoked in an unsupported non-server environment such as a browser. - * + * * @throws If {@link FirebaseServerAppSettings.releaseOnDeref} is defined but the runtime doesn't * provide Finalization Registry support. - * + * * @public */ export function initializeServerApp( @@ -250,13 +250,13 @@ export function initializeServerApp( * @param config - Optional `FirebaseServerApp` settings. * * @returns The initialized `FirebaseServerApp`. - * + * * @throws If invoked in an unsupported non-server environment such as a browser. * @throws If {@link FirebaseServerAppSettings.releaseOnDeref} is defined but the runtime doesn't * provide Finalization Registry support. * @throws If the `FIREBASE_OPTIONS` enviornment variable does not contain a valid project * configuration required for auto-initialization. - * + * * @public */ export function initializeServerApp(