diff --git a/common/api-review/telemetry-angular.api.md b/common/api-review/telemetry-angular.api.md index ec667fc70a..0b3198be1d 100644 --- a/common/api-review/telemetry-angular.api.md +++ b/common/api-review/telemetry-angular.api.md @@ -6,7 +6,6 @@ import { ErrorHandler } from '@angular/core'; import { FirebaseApp } from '@firebase/app'; -import { LoggerProvider } from '@opentelemetry/sdk-logs'; // @public export class FirebaseErrorHandler implements ErrorHandler { @@ -18,7 +17,6 @@ export class FirebaseErrorHandler implements ErrorHandler { // @public export interface Telemetry { app: FirebaseApp; - loggerProvider: LoggerProvider; } // @public diff --git a/common/api-review/telemetry-react.api.md b/common/api-review/telemetry-react.api.md index 78571088c5..5cc0f4c730 100644 --- a/common/api-review/telemetry-react.api.md +++ b/common/api-review/telemetry-react.api.md @@ -5,7 +5,6 @@ ```ts import { FirebaseApp } from '@firebase/app'; -import { LoggerProvider } from '@opentelemetry/sdk-logs'; // @public export function FirebaseTelemetry({ firebaseApp, telemetryOptions }: { @@ -16,7 +15,6 @@ export function FirebaseTelemetry({ firebaseApp, telemetryOptions }: { // @public export interface Telemetry { app: FirebaseApp; - loggerProvider: LoggerProvider; } // @public diff --git a/common/api-review/telemetry.api.md b/common/api-review/telemetry.api.md index 38d4e62560..784542917f 100644 --- a/common/api-review/telemetry.api.md +++ b/common/api-review/telemetry.api.md @@ -7,7 +7,6 @@ import { AnyValueMap } from '@opentelemetry/api-logs'; import { FirebaseApp } from '@firebase/app'; import { Instrumentation } from 'next'; -import { LoggerProvider } from '@opentelemetry/sdk-logs'; // @public export function captureError(telemetry: Telemetry, error: unknown, attributes?: AnyValueMap): void; @@ -26,7 +25,6 @@ export function nextOnRequestError(telemetryOptions?: TelemetryOptions): Instrum // @public export interface Telemetry { app: FirebaseApp; - loggerProvider: LoggerProvider; } // @public diff --git a/docs-devsite/telemetry_.telemetry.md b/docs-devsite/telemetry_.telemetry.md index 9ae0536a47..2fa907abbd 100644 --- a/docs-devsite/telemetry_.telemetry.md +++ b/docs-devsite/telemetry_.telemetry.md @@ -25,7 +25,6 @@ export interface Telemetry | Property | Type | Description | | --- | --- | --- | | [app](./telemetry_.telemetry.md#telemetryapp) | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance is associated with. | -| [loggerProvider](./telemetry_.telemetry.md#telemetryloggerprovider) | LoggerProvider | The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses. | ## Telemetry.app @@ -36,13 +35,3 @@ The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](. ```typescript app: FirebaseApp; ``` - -## Telemetry.loggerProvider - -The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses. - -Signature: - -```typescript -loggerProvider: LoggerProvider; -``` diff --git a/docs-devsite/telemetry_angular.telemetry.md b/docs-devsite/telemetry_angular.telemetry.md index d376755090..b2eaca867e 100644 --- a/docs-devsite/telemetry_angular.telemetry.md +++ b/docs-devsite/telemetry_angular.telemetry.md @@ -25,7 +25,6 @@ export interface Telemetry | Property | Type | Description | | --- | --- | --- | | [app](./telemetry_angular.telemetry.md#telemetryapp) | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance is associated with. | -| [loggerProvider](./telemetry_angular.telemetry.md#telemetryloggerprovider) | LoggerProvider | The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses. | ## Telemetry.app @@ -36,13 +35,3 @@ The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](. ```typescript app: FirebaseApp; ``` - -## Telemetry.loggerProvider - -The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses. - -Signature: - -```typescript -loggerProvider: LoggerProvider; -``` diff --git a/docs-devsite/telemetry_react.telemetry.md b/docs-devsite/telemetry_react.telemetry.md index 5a767aa609..fdbe964135 100644 --- a/docs-devsite/telemetry_react.telemetry.md +++ b/docs-devsite/telemetry_react.telemetry.md @@ -25,7 +25,6 @@ export interface Telemetry | Property | Type | Description | | --- | --- | --- | | [app](./telemetry_react.telemetry.md#telemetryapp) | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance is associated with. | -| [loggerProvider](./telemetry_react.telemetry.md#telemetryloggerprovider) | LoggerProvider | The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses. | ## Telemetry.app @@ -36,13 +35,3 @@ The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](. ```typescript app: FirebaseApp; ``` - -## Telemetry.loggerProvider - -The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses. - -Signature: - -```typescript -loggerProvider: LoggerProvider; -``` diff --git a/packages/telemetry/src/api.test.ts b/packages/telemetry/src/api.test.ts index a3252de7c9..3a5dc843b8 100644 --- a/packages/telemetry/src/api.test.ts +++ b/packages/telemetry/src/api.test.ts @@ -17,7 +17,6 @@ import { expect } from 'chai'; import { LoggerProvider } from '@opentelemetry/sdk-logs'; -import { Telemetry } from './public-types'; import { trace } from '@opentelemetry/api'; import { Logger, LogRecord, SeverityNumber } from '@opentelemetry/api-logs'; import { @@ -43,6 +42,7 @@ import { TelemetryService } from './service'; import { registerTelemetry } from './register'; import { _FirebaseInstallationsInternal } from '@firebase/installations'; import { AUTO_CONSTANTS } from './auto-constants'; +import { TelemetryInternal } from './types'; const PROJECT_ID = 'my-project'; const APP_ID = 'my-appid'; @@ -66,7 +66,7 @@ const fakeLoggerProvider = { shutdown: () => Promise.resolve() } as unknown as LoggerProvider; -const fakeTelemetry: Telemetry = { +const fakeTelemetry: TelemetryInternal = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -307,7 +307,7 @@ describe('Top level API', () => { AUTO_CONSTANTS.appVersion = '1.2.3'; // Unused const telemetry = new TelemetryService( fakeTelemetry.app, - fakeTelemetry.loggerProvider + fakeLoggerProvider ); telemetry.options = { appVersion: '1.0.0' diff --git a/packages/telemetry/src/api.ts b/packages/telemetry/src/api.ts index 9f2f38fc1c..1a80a32505 100644 --- a/packages/telemetry/src/api.ts +++ b/packages/telemetry/src/api.ts @@ -23,6 +23,7 @@ import { AnyValueMap, SeverityNumber } from '@opentelemetry/api-logs'; import { trace } from '@opentelemetry/api'; import { TelemetryService } from './service'; import { getAppVersion, getSessionId } from './helpers'; +import { TelemetryInternal } from './types'; declare module '@firebase/component' { interface NameServiceMapping { @@ -78,7 +79,10 @@ export function captureError( error: unknown, attributes?: AnyValueMap ): void { - const logger = telemetry.loggerProvider.getLogger('error-logger'); + // Cast to TelemetryInternal to access internal loggerProvider + const logger = (telemetry as TelemetryInternal).loggerProvider.getLogger( + 'error-logger' + ); const customAttributes = attributes || {}; // Add trace metadata @@ -137,7 +141,10 @@ export function captureError( * @returns a promise which is resolved when all flushes are complete */ export function flush(telemetry: Telemetry): Promise { - return telemetry.loggerProvider.forceFlush().catch(err => { - console.error('Error flushing logs from Firebase Telemetry:', err); - }); + // Cast to TelemetryInternal to access internal loggerProvider + return (telemetry as TelemetryInternal).loggerProvider + .forceFlush() + .catch(err => { + console.error('Error flushing logs from Firebase Telemetry:', err); + }); } diff --git a/packages/telemetry/src/helpers.test.ts b/packages/telemetry/src/helpers.test.ts index 0d0a96fdf8..dbd450e89a 100644 --- a/packages/telemetry/src/helpers.test.ts +++ b/packages/telemetry/src/helpers.test.ts @@ -18,7 +18,6 @@ import { expect } from 'chai'; import { LoggerProvider } from '@opentelemetry/sdk-logs'; import { Logger, LogRecord } from '@opentelemetry/api-logs'; -import { Telemetry } from './public-types'; import { startNewSession } from './helpers'; import { LOG_ENTRY_ATTRIBUTE_KEYS, @@ -26,6 +25,7 @@ import { } from './constants'; import { AUTO_CONSTANTS } from './auto-constants'; import { TelemetryService } from './service'; +import { TelemetryInternal } from './types'; const MOCK_SESSION_ID = '00000000-0000-0000-0000-000000000000'; @@ -47,7 +47,7 @@ describe('helpers', () => { shutdown: () => Promise.resolve() } as unknown as LoggerProvider; - const fakeTelemetry: Telemetry = { + const fakeTelemetry: TelemetryInternal = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -124,7 +124,7 @@ describe('helpers', () => { it('should log app version from telemetry options', () => { const telemetryWithVersion = new TelemetryService( fakeTelemetry.app, - fakeTelemetry.loggerProvider + fakeLoggerProvider ); telemetryWithVersion.options = { appVersion: '9.9.9' }; diff --git a/packages/telemetry/src/helpers.ts b/packages/telemetry/src/helpers.ts index 94c8e77670..0603f8dcec 100644 --- a/packages/telemetry/src/helpers.ts +++ b/packages/telemetry/src/helpers.ts @@ -23,6 +23,7 @@ import { } from './constants'; import { Telemetry } from './public-types'; import { TelemetryService } from './service'; +import { TelemetryInternal } from './types'; /** * Returns the app version from the provided Telemetry instance, if available. @@ -55,7 +56,8 @@ export function getSessionId(): string | undefined { * 2. In Cloud Logging as its own log entry */ export function startNewSession(telemetry: Telemetry): void { - const { loggerProvider } = telemetry; + // Cast to TelemetryInternal to access internal loggerProvider + const { loggerProvider } = telemetry as TelemetryInternal; if ( typeof sessionStorage !== 'undefined' && typeof crypto?.randomUUID === 'function' diff --git a/packages/telemetry/src/public-types.ts b/packages/telemetry/src/public-types.ts index 0d807e8408..8c06027dd7 100644 --- a/packages/telemetry/src/public-types.ts +++ b/packages/telemetry/src/public-types.ts @@ -16,7 +16,6 @@ */ import { FirebaseApp } from '@firebase/app'; -import { LoggerProvider } from '@opentelemetry/sdk-logs'; /** * An instance of the Firebase Telemetry SDK. @@ -30,9 +29,6 @@ export interface Telemetry { * The {@link @firebase/app#FirebaseApp} this {@link Telemetry} instance is associated with. */ app: FirebaseApp; - - /** The {@link LoggerProvider} this {@link Telemetry} instance uses. */ - loggerProvider: LoggerProvider; } /** diff --git a/packages/telemetry/src/types.ts b/packages/telemetry/src/types.ts index 3c9d915a0e..b43c94c284 100644 --- a/packages/telemetry/src/types.ts +++ b/packages/telemetry/src/types.ts @@ -15,6 +15,18 @@ * limitations under the License. */ +import { LoggerProvider } from '@opentelemetry/sdk-logs'; +import { Telemetry } from './public-types'; + +/** + * An internal interface for the Telemetry service. + * + * @internal + */ +export interface TelemetryInternal extends Telemetry { + loggerProvider: LoggerProvider; +} + type KeyValuePair = [key: string, value: string]; /**