diff --git a/common/api-review/telemetry-angular.api.md b/common/api-review/crashlytics-angular.api.md similarity index 71% rename from common/api-review/telemetry-angular.api.md rename to common/api-review/crashlytics-angular.api.md index e171823ba8..c19f508a3a 100644 --- a/common/api-review/telemetry-angular.api.md +++ b/common/api-review/crashlytics-angular.api.md @@ -1,4 +1,4 @@ -## API Report File for "@firebase/telemetry-angular" +## API Report File for "@firebase/crashlytics-angular" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). @@ -8,23 +8,23 @@ import { ErrorHandler } from '@angular/core'; import { FirebaseApp } from '@firebase/app'; // @public -export class FirebaseErrorHandler implements ErrorHandler { - constructor(app: FirebaseApp, telemetryOptions?: TelemetryOptions); - // (undocumented) - handleError(error: unknown): void; - } - -// @public -export interface Telemetry { +export interface Crashlytics { app: FirebaseApp; } // @public -export interface TelemetryOptions { +export interface CrashlyticsOptions { appVersion?: string; endpointUrl?: string; } +// @public +export class FirebaseErrorHandler implements ErrorHandler { + constructor(app: FirebaseApp, crashlyticsOptions?: CrashlyticsOptions); + // (undocumented) + handleError(error: unknown): void; + } + // (No @packageDocumentation comment for this package) diff --git a/common/api-review/telemetry-react.api.md b/common/api-review/crashlytics-react.api.md similarity index 60% rename from common/api-review/telemetry-react.api.md rename to common/api-review/crashlytics-react.api.md index 5cc0f4c730..f24cc08a87 100644 --- a/common/api-review/telemetry-react.api.md +++ b/common/api-review/crashlytics-react.api.md @@ -1,4 +1,4 @@ -## API Report File for "@firebase/telemetry-react" +## API Report File for "@firebase/crashlytics-react" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). @@ -7,22 +7,22 @@ import { FirebaseApp } from '@firebase/app'; // @public -export function FirebaseTelemetry({ firebaseApp, telemetryOptions }: { - firebaseApp: FirebaseApp; - telemetryOptions?: TelemetryOptions; -}): null; - -// @public -export interface Telemetry { +export interface Crashlytics { app: FirebaseApp; } // @public -export interface TelemetryOptions { +export interface CrashlyticsOptions { appVersion?: string; endpointUrl?: string; } +// @public +export function FirebaseCrashlytics({ firebaseApp, crashlyticsOptions }: { + firebaseApp: FirebaseApp; + crashlyticsOptions?: CrashlyticsOptions; +}): null; + // (No @packageDocumentation comment for this package) diff --git a/common/api-review/crashlytics.api.md b/common/api-review/crashlytics.api.md new file mode 100644 index 0000000000..0ad57a0505 --- /dev/null +++ b/common/api-review/crashlytics.api.md @@ -0,0 +1,39 @@ +## API Report File for "@firebase/crashlytics" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { AnyValueMap } from '@opentelemetry/api-logs'; +import { FirebaseApp } from '@firebase/app'; +import { Instrumentation } from 'next'; + +// @public +export function captureError(crashlytics: Crashlytics, error: unknown, attributes?: AnyValueMap): void; + +// @public +export interface Crashlytics { + app: FirebaseApp; +} + +// @public +export interface CrashlyticsOptions { + appVersion?: string; + endpointUrl?: string; +} + +// @public +export function flush(crashlytics: Crashlytics): Promise; + +// @public +export function getCrashlytics(app?: FirebaseApp, options?: CrashlyticsOptions): Crashlytics; + +export { Instrumentation } + +// @public +export function nextOnRequestError(crashlyticsOptions?: CrashlyticsOptions): Instrumentation.onRequestError; + + +// (No @packageDocumentation comment for this package) + +``` diff --git a/common/api-review/telemetry.api.md b/common/api-review/telemetry.api.md deleted file mode 100644 index 784542917f..0000000000 --- a/common/api-review/telemetry.api.md +++ /dev/null @@ -1,39 +0,0 @@ -## API Report File for "@firebase/telemetry" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { AnyValueMap } from '@opentelemetry/api-logs'; -import { FirebaseApp } from '@firebase/app'; -import { Instrumentation } from 'next'; - -// @public -export function captureError(telemetry: Telemetry, error: unknown, attributes?: AnyValueMap): void; - -// @public -export function flush(telemetry: Telemetry): Promise; - -// @public -export function getTelemetry(app?: FirebaseApp, options?: TelemetryOptions): Telemetry; - -export { Instrumentation } - -// @public -export function nextOnRequestError(telemetryOptions?: TelemetryOptions): Instrumentation.onRequestError; - -// @public -export interface Telemetry { - app: FirebaseApp; -} - -// @public -export interface TelemetryOptions { - appVersion?: string; - endpointUrl?: string; -} - - -// (No @packageDocumentation comment for this package) - -``` diff --git a/docs-devsite/_toc.yaml b/docs-devsite/_toc.yaml index 92fc3d76ae..0f67f5b944 100644 --- a/docs-devsite/_toc.yaml +++ b/docs-devsite/_toc.yaml @@ -402,6 +402,29 @@ toc: path: /docs/reference/js/auth.userinfo.md - title: UserMetadata path: /docs/reference/js/auth.usermetadata.md +- title: crashlytics + path: /docs/reference/js/crashlytics_.md + section: + - title: Crashlytics + path: /docs/reference/js/crashlytics_.crashlytics.md + - title: CrashlyticsOptions + path: /docs/reference/js/crashlytics_.crashlyticsoptions.md +- title: crashlytics/angular + path: /docs/reference/js/crashlytics_angular.md + section: + - title: Crashlytics + path: /docs/reference/js/crashlytics_angular.crashlytics.md + - title: CrashlyticsOptions + path: /docs/reference/js/crashlytics_angular.crashlyticsoptions.md + - title: FirebaseErrorHandler + path: /docs/reference/js/crashlytics_angular.firebaseerrorhandler.md +- title: crashlytics/react + path: /docs/reference/js/crashlytics_react.md + section: + - title: Crashlytics + path: /docs/reference/js/crashlytics_react.crashlytics.md + - title: CrashlyticsOptions + path: /docs/reference/js/crashlytics_react.crashlyticsoptions.md - title: database path: /docs/reference/js/database.md section: @@ -702,26 +725,3 @@ toc: path: /docs/reference/js/storage.uploadtask.md - title: UploadTaskSnapshot path: /docs/reference/js/storage.uploadtasksnapshot.md -- title: telemetry - path: /docs/reference/js/telemetry_.md - section: - - title: Telemetry - path: /docs/reference/js/telemetry_.telemetry.md - - title: TelemetryOptions - path: /docs/reference/js/telemetry_.telemetryoptions.md -- title: telemetry/angular - path: /docs/reference/js/telemetry_angular.md - section: - - title: FirebaseErrorHandler - path: /docs/reference/js/telemetry_angular.firebaseerrorhandler.md - - title: Telemetry - path: /docs/reference/js/telemetry_angular.telemetry.md - - title: TelemetryOptions - path: /docs/reference/js/telemetry_angular.telemetryoptions.md -- title: telemetry/react - path: /docs/reference/js/telemetry_react.md - section: - - title: Telemetry - path: /docs/reference/js/telemetry_react.telemetry.md - - title: TelemetryOptions - path: /docs/reference/js/telemetry_react.telemetryoptions.md diff --git a/docs-devsite/telemetry.md b/docs-devsite/crashlytics.md similarity index 62% rename from docs-devsite/telemetry.md rename to docs-devsite/crashlytics.md index 8ddb78b278..82ee50d5d2 100644 --- a/docs-devsite/telemetry.md +++ b/docs-devsite/crashlytics.md @@ -9,11 +9,11 @@ overwritten. Changes should be made in the source code at https://github.com/firebase/firebase-js-sdk {% endcomment %} -# telemetry package +# crashlytics package | Entry Point | Description | | --- | --- | -| [/](./telemetry_.md#@firebase/telemetry) | | -| [/angular](./telemetry_angular.md#@firebase/telemetry/angular) | | -| [/react](./telemetry_react.md#@firebase/telemetry/react) | | +| [/](./crashlytics_.md#@firebase/crashlytics) | | +| [/angular](./crashlytics_angular.md#@firebase/crashlytics/angular) | | +| [/react](./crashlytics_react.md#@firebase/crashlytics/react) | | diff --git a/docs-devsite/crashlytics_.crashlytics.md b/docs-devsite/crashlytics_.crashlytics.md new file mode 100644 index 0000000000..d31bc45167 --- /dev/null +++ b/docs-devsite/crashlytics_.crashlytics.md @@ -0,0 +1,37 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# Crashlytics interface +An instance of the Firebase Crashlytics SDK. + +Do not create this instance directly. Instead, use [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). + +Signature: + +```typescript +export interface Crashlytics +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [app](./crashlytics_.crashlytics.md#crashlyticsapp) | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance is associated with. | + +## Crashlytics.app + +The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance is associated with. + +Signature: + +```typescript +app: FirebaseApp; +``` diff --git a/docs-devsite/crashlytics_.crashlyticsoptions.md b/docs-devsite/crashlytics_.crashlyticsoptions.md new file mode 100644 index 0000000000..f474999fdf --- /dev/null +++ b/docs-devsite/crashlytics_.crashlyticsoptions.md @@ -0,0 +1,46 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# CrashlyticsOptions interface +Options for initializing the Crashlytics service using [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). + +Signature: + +```typescript +export interface CrashlyticsOptions +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [appVersion](./crashlytics_.crashlyticsoptions.md#crashlyticsoptionsappversion) | string | The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedence over any other values. | +| [endpointUrl](./crashlytics_.crashlyticsoptions.md#crashlyticsoptionsendpointurl) | string | The URL for the endpoint to which Crashlytics data should be sent, in the OpenTelemetry format. By default, data will be sent to Firebase. | + +## CrashlyticsOptions.appVersion + +The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedence over any other values. + +Signature: + +```typescript +appVersion?: string; +``` + +## CrashlyticsOptions.endpointUrl + +The URL for the endpoint to which Crashlytics data should be sent, in the OpenTelemetry format. By default, data will be sent to Firebase. + +Signature: + +```typescript +endpointUrl?: string; +``` diff --git a/docs-devsite/telemetry_.instrumentation.md b/docs-devsite/crashlytics_.instrumentation.md similarity index 87% rename from docs-devsite/telemetry_.instrumentation.md rename to docs-devsite/crashlytics_.instrumentation.md index d1e2855f18..05f35c653c 100644 --- a/docs-devsite/telemetry_.instrumentation.md +++ b/docs-devsite/crashlytics_.instrumentation.md @@ -20,7 +20,7 @@ export declare namespace Instrumentation | Type Alias | Description | | --- | --- | -| [onRequestError](./telemetry_.instrumentation.md#instrumentationonrequesterror) | | +| [onRequestError](./crashlytics_.instrumentation.md#instrumentationonrequesterror) | | ## Instrumentation.onRequestError diff --git a/docs-devsite/crashlytics_.md b/docs-devsite/crashlytics_.md new file mode 100644 index 0000000000..04640934e4 --- /dev/null +++ b/docs-devsite/crashlytics_.md @@ -0,0 +1,151 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# @firebase/crashlytics + +## Functions + +| Function | Description | +| --- | --- | +| function(app, ...) | +| [getCrashlytics(app, options)](./crashlytics_.md#getcrashlytics_a9d22a1) | Returns the default [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance that is associated with the provided [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). If no instance exists, initializes a new instance with the default settings. | +| function(crashlytics, ...) | +| [captureError(crashlytics, error, attributes)](./crashlytics_.md#captureerror_6824e74) | Enqueues an error to be uploaded to the Firebase Crashlytics API. | +| [flush(crashlytics)](./crashlytics_.md#flush_16fdf66) | Flushes all enqueued Crashlytics data immediately, instead of waiting for default batching. | +| function(crashlyticsOptions, ...) | +| [nextOnRequestError(crashlyticsOptions)](./crashlytics_.md#nextonrequesterror_3caf5de) | Automatically report uncaught errors from server routes to Firebase Crashlytics. | + +## Interfaces + +| Interface | Description | +| --- | --- | +| [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) | An instance of the Firebase Crashlytics SDK.Do not create this instance directly. Instead, use [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). | +| [CrashlyticsOptions](./crashlytics_.crashlyticsoptions.md#crashlyticsoptions_interface) | Options for initializing the Crashlytics service using [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). | + +## Namespaces + +| Namespace | Description | +| --- | --- | +| [Instrumentation](./crashlytics_.instrumentation.md#instrumentation_namespace) | | + +## function(app, ...) + +### getCrashlytics(app, options) {:#getcrashlytics_a9d22a1} + +Returns the default [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance that is associated with the provided [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). If no instance exists, initializes a new instance with the default settings. + +Signature: + +```typescript +export declare function getCrashlytics(app?: FirebaseApp, options?: CrashlyticsOptions): Crashlytics; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| app | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) to use. | +| options | [CrashlyticsOptions](./crashlytics_.crashlyticsoptions.md#crashlyticsoptions_interface) | [CrashlyticsOptions](./crashlytics_.crashlyticsoptions.md#crashlyticsoptions_interface) that configure the Crashlytics instance. | + +Returns: + +[Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) + +The default [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance for the given [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). + +### Example + + +```javascript +const crashlytics = getCrashlytics(app); + +``` + +## function(crashlytics, ...) + +### captureError(crashlytics, error, attributes) {:#captureerror_6824e74} + +Enqueues an error to be uploaded to the Firebase Crashlytics API. + +Signature: + +```typescript +export declare function captureError(crashlytics: Crashlytics, error: unknown, attributes?: AnyValueMap): void; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| crashlytics | [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) | The [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance. | +| error | unknown | The caught exception, typically an | +| attributes | AnyValueMap | = Optional, arbitrary attributes to attach to the error log | + +Returns: + +void + +### flush(crashlytics) {:#flush_16fdf66} + +Flushes all enqueued Crashlytics data immediately, instead of waiting for default batching. + +Signature: + +```typescript +export declare function flush(crashlytics: Crashlytics): Promise; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| crashlytics | [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) | The [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance. | + +Returns: + +Promise<void> + +a promise which is resolved when all flushes are complete + +## function(crashlyticsOptions, ...) + +### nextOnRequestError(crashlyticsOptions) {:#nextonrequesterror_3caf5de} + +Automatically report uncaught errors from server routes to Firebase Crashlytics. + +Signature: + +```typescript +export declare function nextOnRequestError(crashlyticsOptions?: CrashlyticsOptions): Instrumentation.onRequestError; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| crashlyticsOptions | [CrashlyticsOptions](./crashlytics_.crashlyticsoptions.md#crashlyticsoptions_interface) | [CrashlyticsOptions](./crashlytics_.crashlyticsoptions.md#crashlyticsoptions_interface) that configure the Crashlytics instance. | + +Returns: + +[Instrumentation.onRequestError](./crashlytics_.instrumentation.md#instrumentationonrequesterror) + +A request error handler for use in Next.js' instrumentation file + +### Example + + +```javascript +// In instrumentation.ts (https://nextjs.org/docs/app/guides/instrumentation): +import { nextOnRequestError } from 'firebase/telemetry' +export const onRequestError = nextOnRequestError(); + +``` + diff --git a/docs-devsite/crashlytics_angular.crashlytics.md b/docs-devsite/crashlytics_angular.crashlytics.md new file mode 100644 index 0000000000..9836a2b765 --- /dev/null +++ b/docs-devsite/crashlytics_angular.crashlytics.md @@ -0,0 +1,37 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# Crashlytics interface +An instance of the Firebase Crashlytics SDK. + +Do not create this instance directly. Instead, use [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). + +Signature: + +```typescript +export interface Crashlytics +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [app](./crashlytics_angular.crashlytics.md#crashlyticsapp) | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance is associated with. | + +## Crashlytics.app + +The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance is associated with. + +Signature: + +```typescript +app: FirebaseApp; +``` diff --git a/docs-devsite/crashlytics_angular.crashlyticsoptions.md b/docs-devsite/crashlytics_angular.crashlyticsoptions.md new file mode 100644 index 0000000000..88bfb602a8 --- /dev/null +++ b/docs-devsite/crashlytics_angular.crashlyticsoptions.md @@ -0,0 +1,46 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# CrashlyticsOptions interface +Options for initializing the Crashlytics service using [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). + +Signature: + +```typescript +export interface CrashlyticsOptions +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [appVersion](./crashlytics_angular.crashlyticsoptions.md#crashlyticsoptionsappversion) | string | The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedence over any other values. | +| [endpointUrl](./crashlytics_angular.crashlyticsoptions.md#crashlyticsoptionsendpointurl) | string | The URL for the endpoint to which Crashlytics data should be sent, in the OpenTelemetry format. By default, data will be sent to Firebase. | + +## CrashlyticsOptions.appVersion + +The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedence over any other values. + +Signature: + +```typescript +appVersion?: string; +``` + +## CrashlyticsOptions.endpointUrl + +The URL for the endpoint to which Crashlytics data should be sent, in the OpenTelemetry format. By default, data will be sent to Firebase. + +Signature: + +```typescript +endpointUrl?: string; +``` diff --git a/docs-devsite/telemetry_angular.firebaseerrorhandler.md b/docs-devsite/crashlytics_angular.firebaseerrorhandler.md similarity index 73% rename from docs-devsite/telemetry_angular.firebaseerrorhandler.md rename to docs-devsite/crashlytics_angular.firebaseerrorhandler.md index 8ac6dd9cbc..73911ce73e 100644 --- a/docs-devsite/telemetry_angular.firebaseerrorhandler.md +++ b/docs-devsite/crashlytics_angular.firebaseerrorhandler.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # FirebaseErrorHandler class -A custom ErrorHandler that captures uncaught errors and sends them to Firebase Telemetry. +A custom ErrorHandler that captures uncaught errors and sends them to Firebase Crashlytics. This should be provided in your application's root module. @@ -25,13 +25,13 @@ export declare class FirebaseErrorHandler implements ErrorHandler | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(app, telemetryOptions)](./telemetry_angular.firebaseerrorhandler.md#firebaseerrorhandlerconstructor) | | Constructs a new instance of the FirebaseErrorHandler class | +| [(constructor)(app, crashlyticsOptions)](./crashlytics_angular.firebaseerrorhandler.md#firebaseerrorhandlerconstructor) | | Constructs a new instance of the FirebaseErrorHandler class | ## Methods | Method | Modifiers | Description | | --- | --- | --- | -| [handleError(error)](./telemetry_angular.firebaseerrorhandler.md#firebaseerrorhandlerhandleerror) | | | +| [handleError(error)](./crashlytics_angular.firebaseerrorhandler.md#firebaseerrorhandlerhandleerror) | | | ## FirebaseErrorHandler.(constructor) @@ -40,7 +40,7 @@ Constructs a new instance of the `FirebaseErrorHandler` class Signature: ```typescript -constructor(app: FirebaseApp, telemetryOptions?: TelemetryOptions); +constructor(app: FirebaseApp, crashlyticsOptions?: CrashlyticsOptions); ``` #### Parameters @@ -48,7 +48,7 @@ constructor(app: FirebaseApp, telemetryOptions?: TelemetryOptions); | Parameter | Type | Description | | --- | --- | --- | | app | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | | -| telemetryOptions | [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) | | +| crashlyticsOptions | [CrashlyticsOptions](./crashlytics_.crashlyticsoptions.md#crashlyticsoptions_interface) | | ## FirebaseErrorHandler.handleError() @@ -74,7 +74,7 @@ Basic usage: ```typescript import { ErrorHandler } from '@angular/core'; -import { FirebaseErrorHandler } from 'firebase/telemetry-angular'; +import { FirebaseErrorHandler } from 'firebase/crashlytics-angular'; @NgModule({ // ... @@ -96,7 +96,7 @@ Providing telemetry options: ```typescript import { ErrorHandler } from '@angular/core'; -import { FirebaseErrorHandler } from 'firebase/telemetry-angular'; +import { FirebaseErrorHandler } from 'firebase/crashlytics-angular'; @NgModule({ // ... diff --git a/docs-devsite/crashlytics_angular.md b/docs-devsite/crashlytics_angular.md new file mode 100644 index 0000000000..55e8b5c589 --- /dev/null +++ b/docs-devsite/crashlytics_angular.md @@ -0,0 +1,26 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# @firebase/crashlytics/angular + +## Classes + +| Class | Description | +| --- | --- | +| [FirebaseErrorHandler](./crashlytics_angular.firebaseerrorhandler.md#firebaseerrorhandler_class) | A custom ErrorHandler that captures uncaught errors and sends them to Firebase Crashlytics.This should be provided in your application's root module. | + +## Interfaces + +| Interface | Description | +| --- | --- | +| [Crashlytics](./crashlytics_angular.crashlytics.md#crashlytics_interface) | An instance of the Firebase Crashlytics SDK.Do not create this instance directly. Instead, use [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). | +| [CrashlyticsOptions](./crashlytics_angular.crashlyticsoptions.md#crashlyticsoptions_interface) | Options for initializing the Crashlytics service using [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). | + diff --git a/docs-devsite/crashlytics_react.crashlytics.md b/docs-devsite/crashlytics_react.crashlytics.md new file mode 100644 index 0000000000..7cf93fe618 --- /dev/null +++ b/docs-devsite/crashlytics_react.crashlytics.md @@ -0,0 +1,37 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# Crashlytics interface +An instance of the Firebase Crashlytics SDK. + +Do not create this instance directly. Instead, use [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). + +Signature: + +```typescript +export interface Crashlytics +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [app](./crashlytics_react.crashlytics.md#crashlyticsapp) | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance is associated with. | + +## Crashlytics.app + +The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance is associated with. + +Signature: + +```typescript +app: FirebaseApp; +``` diff --git a/docs-devsite/crashlytics_react.crashlyticsoptions.md b/docs-devsite/crashlytics_react.crashlyticsoptions.md new file mode 100644 index 0000000000..08bbc6ace4 --- /dev/null +++ b/docs-devsite/crashlytics_react.crashlyticsoptions.md @@ -0,0 +1,46 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# CrashlyticsOptions interface +Options for initializing the Crashlytics service using [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). + +Signature: + +```typescript +export interface CrashlyticsOptions +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [appVersion](./crashlytics_react.crashlyticsoptions.md#crashlyticsoptionsappversion) | string | The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedence over any other values. | +| [endpointUrl](./crashlytics_react.crashlyticsoptions.md#crashlyticsoptionsendpointurl) | string | The URL for the endpoint to which Crashlytics data should be sent, in the OpenTelemetry format. By default, data will be sent to Firebase. | + +## CrashlyticsOptions.appVersion + +The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedence over any other values. + +Signature: + +```typescript +appVersion?: string; +``` + +## CrashlyticsOptions.endpointUrl + +The URL for the endpoint to which Crashlytics data should be sent, in the OpenTelemetry format. By default, data will be sent to Firebase. + +Signature: + +```typescript +endpointUrl?: string; +``` diff --git a/docs-devsite/crashlytics_react.md b/docs-devsite/crashlytics_react.md new file mode 100644 index 0000000000..750eb565cb --- /dev/null +++ b/docs-devsite/crashlytics_react.md @@ -0,0 +1,90 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# @firebase/crashlytics/react + +## Functions + +| Function | Description | +| --- | --- | +| [FirebaseCrashlytics({ firebaseApp, crashlyticsOptions })](./crashlytics_react.md#firebasecrashlytics_c141224) | Registers event listeners for uncaught errors.This should be installed near the root of your application. Caught errors, including those implicitly caught by Error Boundaries, will not be captured by this component. | + +## Interfaces + +| Interface | Description | +| --- | --- | +| [Crashlytics](./crashlytics_react.crashlytics.md#crashlytics_interface) | An instance of the Firebase Crashlytics SDK.Do not create this instance directly. Instead, use [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). | +| [CrashlyticsOptions](./crashlytics_react.crashlyticsoptions.md#crashlyticsoptions_interface) | Options for initializing the Crashlytics service using [getCrashlytics()](./crashlytics_.md#getcrashlytics_a9d22a1). | + +## function({ firebaseApp, crashlyticsOptions }, ...) + +### FirebaseCrashlytics({ firebaseApp, crashlyticsOptions }) {:#firebasecrashlytics_c141224} + +Registers event listeners for uncaught errors. + +This should be installed near the root of your application. Caught errors, including those implicitly caught by Error Boundaries, will not be captured by this component. + +Signature: + +```typescript +export declare function FirebaseCrashlytics({ firebaseApp, crashlyticsOptions }: { + firebaseApp: FirebaseApp; + crashlyticsOptions?: CrashlyticsOptions; +}): null; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| { firebaseApp, crashlyticsOptions } | { firebaseApp: [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface); crashlyticsOptions?: [CrashlyticsOptions](./crashlytics_.crashlyticsoptions.md#crashlyticsoptions_interface); } | | + +Returns: + +null + +The default [Crashlytics](./crashlytics_.crashlytics.md#crashlytics_interface) instance for the given [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). + +### Example + + +```tsx +import { useEffect, useState } from "react"; +import { FirebaseCrashlytics } from "@firebase/crashlytics/react"; +import { FirebaseApp, initializeApp } from "@firebase/app"; + +export default function MyApp() { + const [app, setApp] = useState(null); + + useEffect(() => { + if (getApps().length === 0) { + const newApp = initializeApp({...}); + setApp(newApp); + } else { + setApp(getApp()); + } + }, []); + + return ( + <> + {app && ( + + )} + ... + + ); +} + +``` + diff --git a/docs-devsite/index.md b/docs-devsite/index.md index a52937d582..f1b9edbc9d 100644 --- a/docs-devsite/index.md +++ b/docs-devsite/index.md @@ -20,6 +20,7 @@ https://github.com/firebase/firebase-js-sdk | [@firebase/app](./app.md#app_package) | Firebase App | | [@firebase/app-check](./app-check.md#app-check_package) | The Firebase App Check Web SDK. | | [@firebase/auth](./auth.md#auth_package) | Firebase Authentication | +| [@firebase/crashlytics](./crashlytics.md#crashlytics_package) | | | [@firebase/database](./database.md#database_package) | Firebase Realtime Database | | [@firebase/firestore](./firestore.md#firestore_package) | Cloud Firestore | | [@firebase/functions](./functions.md#functions_package) | Cloud Functions for Firebase | @@ -28,5 +29,4 @@ https://github.com/firebase/firebase-js-sdk | [@firebase/performance](./performance.md#performance_package) | The Firebase Performance Monitoring Web SDK. This SDK does not work in a Node.js environment. | | [@firebase/remote-config](./remote-config.md#remote-config_package) | The Firebase Remote Config Web SDK. This SDK does not work in a Node.js environment. | | [@firebase/storage](./storage.md#storage_package) | Cloud Storage for Firebase | -| [@firebase/telemetry](./telemetry.md#telemetry_package) | | diff --git a/docs-devsite/telemetry_.md b/docs-devsite/telemetry_.md deleted file mode 100644 index ae1f827c9e..0000000000 --- a/docs-devsite/telemetry_.md +++ /dev/null @@ -1,151 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# @firebase/telemetry - -## Functions - -| Function | Description | -| --- | --- | -| function(app, ...) | -| [getTelemetry(app, options)](./telemetry_.md#gettelemetry_448bdc6) | Returns the default [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance that is associated with the provided [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). If no instance exists, initializes a new instance with the default settings. | -| function(telemetry, ...) | -| [captureError(telemetry, error, attributes)](./telemetry_.md#captureerror_862e6b3) | Enqueues an error to be uploaded to the Firebase Telemetry API. | -| [flush(telemetry)](./telemetry_.md#flush_8975134) | Flushes all enqueued telemetry data immediately, instead of waiting for default batching. | -| function(telemetryOptions, ...) | -| [nextOnRequestError(telemetryOptions)](./telemetry_.md#nextonrequesterror_3bd5542) | Automatically report uncaught errors from server routes to Firebase Telemetry. | - -## Interfaces - -| Interface | Description | -| --- | --- | -| [Telemetry](./telemetry_.telemetry.md#telemetry_interface) | An instance of the Firebase Telemetry SDK.Do not create this instance directly. Instead, use [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). | -| [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) | Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). | - -## Namespaces - -| Namespace | Description | -| --- | --- | -| [Instrumentation](./telemetry_.instrumentation.md#instrumentation_namespace) | | - -## function(app, ...) - -### getTelemetry(app, options) {:#gettelemetry_448bdc6} - -Returns the default [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance that is associated with the provided [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). If no instance exists, initializes a new instance with the default settings. - -Signature: - -```typescript -export declare function getTelemetry(app?: FirebaseApp, options?: TelemetryOptions): Telemetry; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| app | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) to use. | -| options | [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) | [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) that configure the Telemetry instance. | - -Returns: - -[Telemetry](./telemetry_.telemetry.md#telemetry_interface) - -The default [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance for the given [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). - -### Example - - -```javascript -const telemetry = getTelemetry(app); - -``` - -## function(telemetry, ...) - -### captureError(telemetry, error, attributes) {:#captureerror_862e6b3} - -Enqueues an error to be uploaded to the Firebase Telemetry API. - -Signature: - -```typescript -export declare function captureError(telemetry: Telemetry, error: unknown, attributes?: AnyValueMap): void; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| telemetry | [Telemetry](./telemetry_.telemetry.md#telemetry_interface) | The [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance. | -| error | unknown | The caught exception, typically an | -| attributes | AnyValueMap | = Optional, arbitrary attributes to attach to the error log | - -Returns: - -void - -### flush(telemetry) {:#flush_8975134} - -Flushes all enqueued telemetry data immediately, instead of waiting for default batching. - -Signature: - -```typescript -export declare function flush(telemetry: Telemetry): Promise; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| telemetry | [Telemetry](./telemetry_.telemetry.md#telemetry_interface) | The [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance. | - -Returns: - -Promise<void> - -a promise which is resolved when all flushes are complete - -## function(telemetryOptions, ...) - -### nextOnRequestError(telemetryOptions) {:#nextonrequesterror_3bd5542} - -Automatically report uncaught errors from server routes to Firebase Telemetry. - -Signature: - -```typescript -export declare function nextOnRequestError(telemetryOptions?: TelemetryOptions): Instrumentation.onRequestError; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| telemetryOptions | [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) | [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) that configure the Telemetry instance. | - -Returns: - -[Instrumentation.onRequestError](./telemetry_.instrumentation.md#instrumentationonrequesterror) - -A request error handler for use in Next.js' instrumentation file - -### Example - - -```javascript -// In instrumentation.ts (https://nextjs.org/docs/app/guides/instrumentation): -import { nextOnRequestError } from 'firebase/telemetry' -export const onRequestError = nextOnRequestError(); - -``` - diff --git a/docs-devsite/telemetry_.telemetry.md b/docs-devsite/telemetry_.telemetry.md deleted file mode 100644 index 2fa907abbd..0000000000 --- a/docs-devsite/telemetry_.telemetry.md +++ /dev/null @@ -1,37 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# Telemetry interface -An instance of the Firebase Telemetry SDK. - -Do not create this instance directly. Instead, use [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). - -Signature: - -```typescript -export interface Telemetry -``` - -## Properties - -| 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. | - -## Telemetry.app - -The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance is associated with. - -Signature: - -```typescript -app: FirebaseApp; -``` diff --git a/docs-devsite/telemetry_.telemetryoptions.md b/docs-devsite/telemetry_.telemetryoptions.md deleted file mode 100644 index 5b660f597b..0000000000 --- a/docs-devsite/telemetry_.telemetryoptions.md +++ /dev/null @@ -1,46 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# TelemetryOptions interface -Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). - -Signature: - -```typescript -export interface TelemetryOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [appVersion](./telemetry_.telemetryoptions.md#telemetryoptionsappversion) | string | The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedent over any other values. | -| [endpointUrl](./telemetry_.telemetryoptions.md#telemetryoptionsendpointurl) | string | The URL for the endpoint to which telemetry data should be sent, in the Open Telemetry format. By default, data will be sent to Firebase. | - -## TelemetryOptions.appVersion - -The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedent over any other values. - -Signature: - -```typescript -appVersion?: string; -``` - -## TelemetryOptions.endpointUrl - -The URL for the endpoint to which telemetry data should be sent, in the Open Telemetry format. By default, data will be sent to Firebase. - -Signature: - -```typescript -endpointUrl?: string; -``` diff --git a/docs-devsite/telemetry_angular.md b/docs-devsite/telemetry_angular.md deleted file mode 100644 index c868ee3abe..0000000000 --- a/docs-devsite/telemetry_angular.md +++ /dev/null @@ -1,26 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# @firebase/telemetry/angular - -## Classes - -| Class | Description | -| --- | --- | -| [FirebaseErrorHandler](./telemetry_angular.firebaseerrorhandler.md#firebaseerrorhandler_class) | A custom ErrorHandler that captures uncaught errors and sends them to Firebase Telemetry.This should be provided in your application's root module. | - -## Interfaces - -| Interface | Description | -| --- | --- | -| [Telemetry](./telemetry_angular.telemetry.md#telemetry_interface) | An instance of the Firebase Telemetry SDK.Do not create this instance directly. Instead, use [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). | -| [TelemetryOptions](./telemetry_angular.telemetryoptions.md#telemetryoptions_interface) | Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). | - diff --git a/docs-devsite/telemetry_angular.telemetry.md b/docs-devsite/telemetry_angular.telemetry.md deleted file mode 100644 index b2eaca867e..0000000000 --- a/docs-devsite/telemetry_angular.telemetry.md +++ /dev/null @@ -1,37 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# Telemetry interface -An instance of the Firebase Telemetry SDK. - -Do not create this instance directly. Instead, use [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). - -Signature: - -```typescript -export interface Telemetry -``` - -## Properties - -| 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. | - -## Telemetry.app - -The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance is associated with. - -Signature: - -```typescript -app: FirebaseApp; -``` diff --git a/docs-devsite/telemetry_angular.telemetryoptions.md b/docs-devsite/telemetry_angular.telemetryoptions.md deleted file mode 100644 index 5174ced70b..0000000000 --- a/docs-devsite/telemetry_angular.telemetryoptions.md +++ /dev/null @@ -1,46 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# TelemetryOptions interface -Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). - -Signature: - -```typescript -export interface TelemetryOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [appVersion](./telemetry_angular.telemetryoptions.md#telemetryoptionsappversion) | string | The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedent over any other values. | -| [endpointUrl](./telemetry_angular.telemetryoptions.md#telemetryoptionsendpointurl) | string | The URL for the endpoint to which telemetry data should be sent, in the Open Telemetry format. By default, data will be sent to Firebase. | - -## TelemetryOptions.appVersion - -The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedent over any other values. - -Signature: - -```typescript -appVersion?: string; -``` - -## TelemetryOptions.endpointUrl - -The URL for the endpoint to which telemetry data should be sent, in the Open Telemetry format. By default, data will be sent to Firebase. - -Signature: - -```typescript -endpointUrl?: string; -``` diff --git a/docs-devsite/telemetry_react.md b/docs-devsite/telemetry_react.md deleted file mode 100644 index f3e04458ab..0000000000 --- a/docs-devsite/telemetry_react.md +++ /dev/null @@ -1,90 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# @firebase/telemetry/react - -## Functions - -| Function | Description | -| --- | --- | -| [FirebaseTelemetry({ firebaseApp, telemetryOptions })](./telemetry_react.md#firebasetelemetry_10424e8) | Registers event listeners for uncaught errors.This should be installed near the root of your application. Caught errors, including those implicitly caught by Error Boundaries, will not be captured by this component. | - -## Interfaces - -| Interface | Description | -| --- | --- | -| [Telemetry](./telemetry_react.telemetry.md#telemetry_interface) | An instance of the Firebase Telemetry SDK.Do not create this instance directly. Instead, use [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). | -| [TelemetryOptions](./telemetry_react.telemetryoptions.md#telemetryoptions_interface) | Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). | - -## function({ firebaseApp, telemetryOptions }, ...) - -### FirebaseTelemetry({ firebaseApp, telemetryOptions }) {:#firebasetelemetry_10424e8} - -Registers event listeners for uncaught errors. - -This should be installed near the root of your application. Caught errors, including those implicitly caught by Error Boundaries, will not be captured by this component. - -Signature: - -```typescript -export declare function FirebaseTelemetry({ firebaseApp, telemetryOptions }: { - firebaseApp: FirebaseApp; - telemetryOptions?: TelemetryOptions; -}): null; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| { firebaseApp, telemetryOptions } | { firebaseApp: [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface); telemetryOptions?: [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface); } | | - -Returns: - -null - -The default [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance for the given [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). - -### Example - - -```tsx -import { useEffect, useState } from "react"; -import { FirebaseTelemetry } from "@firebase/telemetry/react"; -import { FirebaseApp, initializeApp } from "@firebase/app"; - -export default function MyApp() { - const [app, setApp] = useState(null); - - useEffect(() => { - if (getApps().length === 0) { - const newApp = initializeApp({...}); - setApp(newApp); - } else { - setApp(getApp()); - } - }, []); - - return ( - <> - {app && ( - - )} - ... - - ); -} - -``` - diff --git a/docs-devsite/telemetry_react.telemetry.md b/docs-devsite/telemetry_react.telemetry.md deleted file mode 100644 index fdbe964135..0000000000 --- a/docs-devsite/telemetry_react.telemetry.md +++ /dev/null @@ -1,37 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# Telemetry interface -An instance of the Firebase Telemetry SDK. - -Do not create this instance directly. Instead, use [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). - -Signature: - -```typescript -export interface Telemetry -``` - -## Properties - -| 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. | - -## Telemetry.app - -The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance is associated with. - -Signature: - -```typescript -app: FirebaseApp; -``` diff --git a/docs-devsite/telemetry_react.telemetryoptions.md b/docs-devsite/telemetry_react.telemetryoptions.md deleted file mode 100644 index 3ec016896e..0000000000 --- a/docs-devsite/telemetry_react.telemetryoptions.md +++ /dev/null @@ -1,46 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# TelemetryOptions interface -Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6). - -Signature: - -```typescript -export interface TelemetryOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [appVersion](./telemetry_react.telemetryoptions.md#telemetryoptionsappversion) | string | The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedent over any other values. | -| [endpointUrl](./telemetry_react.telemetryoptions.md#telemetryoptionsendpointurl) | string | The URL for the endpoint to which telemetry data should be sent, in the Open Telemetry format. By default, data will be sent to Firebase. | - -## TelemetryOptions.appVersion - -The version of the application. This should be a unique string that identifies the snapshot of code to be deployed, such as "1.0.2". If not specified, other default locations will be checked for an identifier. Setting a value here takes precedent over any other values. - -Signature: - -```typescript -appVersion?: string; -``` - -## TelemetryOptions.endpointUrl - -The URL for the endpoint to which telemetry data should be sent, in the Open Telemetry format. By default, data will be sent to Firebase. - -Signature: - -```typescript -endpointUrl?: string; -``` diff --git a/packages/app/src/constants.ts b/packages/app/src/constants.ts index 3aa37b7275..3306472df7 100644 --- a/packages/app/src/constants.ts +++ b/packages/app/src/constants.ts @@ -41,7 +41,7 @@ import { name as storageCompatName } from '../../../packages/storage-compat/pack import { name as firestoreName } from '../../../packages/firestore/package.json'; import { name as aiName } from '../../../packages/ai/package.json'; import { name as firestoreCompatName } from '../../../packages/firestore-compat/package.json'; -import { name as telemetryName } from '../../../packages/telemetry/package.json'; +import { name as crashlyticsName } from '../../../packages/crashlytics/package.json'; import { name as packageName } from '../../../packages/firebase/package.json'; /** @@ -75,7 +75,7 @@ export const PLATFORM_LOG_STRING = { [remoteConfigCompatName]: 'fire-rc-compat', [storageName]: 'fire-gcs', [storageCompatName]: 'fire-gcs-compat', - [telemetryName]: 'fire-telemetry', + [crashlyticsName]: 'fire-crashlytics', [firestoreName]: 'fire-fst', [firestoreCompatName]: 'fire-fst-compat', [aiName]: 'fire-vertex', diff --git a/packages/telemetry/.eslintrc.js b/packages/crashlytics/.eslintrc.js similarity index 100% rename from packages/telemetry/.eslintrc.js rename to packages/crashlytics/.eslintrc.js diff --git a/packages/crashlytics/CHANGELOG.md b/packages/crashlytics/CHANGELOG.md new file mode 100644 index 0000000000..3c3d2b59d6 --- /dev/null +++ b/packages/crashlytics/CHANGELOG.md @@ -0,0 +1 @@ +# @firebase/crashlytics diff --git a/packages/telemetry/README.md b/packages/crashlytics/README.md similarity index 77% rename from packages/telemetry/README.md rename to packages/crashlytics/README.md index c9b01e6d58..2768b6ff1b 100644 --- a/packages/telemetry/README.md +++ b/packages/crashlytics/README.md @@ -1,3 +1,3 @@ -# @firebase/telemetry +# @firebase/crashlytics This package provides instrumentation functionality for javascript applications. diff --git a/packages/telemetry/api-extractor.json b/packages/crashlytics/api-extractor.json similarity index 100% rename from packages/telemetry/api-extractor.json rename to packages/crashlytics/api-extractor.json diff --git a/packages/telemetry/index.node.ts b/packages/crashlytics/index.node.ts similarity index 92% rename from packages/telemetry/index.node.ts rename to packages/crashlytics/index.node.ts index d2fb87c965..19db93e9e1 100644 --- a/packages/telemetry/index.node.ts +++ b/packages/crashlytics/index.node.ts @@ -22,9 +22,9 @@ * just use index.ts */ -import { registerTelemetry } from './src/register.node'; +import { registerCrashlytics } from './src/register.node'; -registerTelemetry(); +registerCrashlytics(); export * from './src/api'; export * from './src/public-types'; diff --git a/packages/telemetry/index.ts b/packages/crashlytics/index.ts similarity index 90% rename from packages/telemetry/index.ts rename to packages/crashlytics/index.ts index 4eeaf214ac..e4f675626d 100644 --- a/packages/telemetry/index.ts +++ b/packages/crashlytics/index.ts @@ -15,9 +15,9 @@ * limitations under the License. */ -import { registerTelemetry } from './src/register'; +import { registerCrashlytics } from './src/register'; -registerTelemetry(); +registerCrashlytics(); export * from './src/api'; export * from './src/public-types'; diff --git a/packages/telemetry/karma.conf.js b/packages/crashlytics/karma.conf.js similarity index 100% rename from packages/telemetry/karma.conf.js rename to packages/crashlytics/karma.conf.js diff --git a/packages/telemetry/package.json b/packages/crashlytics/package.json similarity index 84% rename from packages/telemetry/package.json rename to packages/crashlytics/package.json index 5e7d53b261..9812cd5b75 100644 --- a/packages/telemetry/package.json +++ b/packages/crashlytics/package.json @@ -1,5 +1,5 @@ { - "name": "@firebase/telemetry", + "name": "@firebase/crashlytics", "version": "0.0.1", "description": "The Firebase Web Telemetry package of the Firebase JS SDK", "author": "Firebase (https://firebase.google.com/)", @@ -54,7 +54,7 @@ "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build-only": "rollup -c", "build": "rollup -c && yarn api-report", - "build:deps": "lerna run --scope @firebase/telemetry --include-dependencies build", + "build:deps": "lerna run --scope @firebase/crashlytics --include-dependencies build", "dev": "rollup -c -w", "test": "run-p --npm-path npm lint test:all", "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:all", @@ -63,9 +63,9 @@ "test:node": "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' nyc --reporter lcovonly -- mocha **/*.test.ts src/**/*.test.ts --exclude src/angular/*.test.ts --config ../../config/mocharc.node.js", "trusted-type-check": "tsec -p tsconfig.json --noEmit", "api-report": "yarn api-report:main && yarn api-report:react && yarn api-report:angular && yarn api-report:api-json", - "api-report:main": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package telemetry --packageRoot . --typescriptDts ./dist/index.d.ts --rollupDts ./dist/private.d.ts --untrimmedRollupDts ./dist/internal.d.ts --publicDts ./dist/index-public.d.ts", - "api-report:react": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package telemetry-react --packageRoot . --typescriptDts ./dist/react/index.d.ts --rollupDts ./dist/react/private.d.ts --untrimmedRollupDts ./dist/react/internal.d.ts --publicDts ./dist/react/index-public.d.ts", - "api-report:angular": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package telemetry-angular --packageRoot . --typescriptDts ./dist/angular/index.d.ts --rollupDts ./dist/angular/private.d.ts --untrimmedRollupDts ./dist/angular/internal.d.ts --publicDts ./dist/angular/index-public.d.ts", + "api-report:main": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package crashlytics --packageRoot . --typescriptDts ./dist/index.d.ts --rollupDts ./dist/private.d.ts --untrimmedRollupDts ./dist/internal.d.ts --publicDts ./dist/index-public.d.ts", + "api-report:react": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package crashlytics-react --packageRoot . --typescriptDts ./dist/react/index.d.ts --rollupDts ./dist/react/private.d.ts --untrimmedRollupDts ./dist/react/internal.d.ts --publicDts ./dist/react/index-public.d.ts", + "api-report:angular": "ts-node-script ../../repo-scripts/prune-dts/extract-public-api.ts --package crashlytics-angular --packageRoot . --typescriptDts ./dist/angular/index.d.ts --rollupDts ./dist/angular/private.d.ts --untrimmedRollupDts ./dist/angular/internal.d.ts --publicDts ./dist/angular/index-public.d.ts", "api-report:api-json": "api-extractor run --local --verbose", "typings:public": "node ../../scripts/build/use_typings.js ./dist/index-public.d.ts" }, @@ -130,7 +130,7 @@ "zone.js": "0.15.1" }, "repository": { - "directory": "packages/telemetry", + "directory": "packages/crashlytics", "type": "git", "url": "git+https://github.com/firebase/firebase-js-sdk.git" }, diff --git a/packages/telemetry/rollup.config.js b/packages/crashlytics/rollup.config.js similarity index 100% rename from packages/telemetry/rollup.config.js rename to packages/crashlytics/rollup.config.js diff --git a/packages/telemetry/setconstants.js b/packages/crashlytics/setconstants.js similarity index 98% rename from packages/telemetry/setconstants.js rename to packages/crashlytics/setconstants.js index 3529587165..d5d6993230 100644 --- a/packages/telemetry/setconstants.js +++ b/packages/crashlytics/setconstants.js @@ -22,7 +22,7 @@ const child_process = require('node:child_process'); // Ensure that the project is set up as expected. const rootPath = path.resolve( process.cwd(), - './node_modules/@firebase/telemetry/dist' + './node_modules/@firebase/crashlytics/dist' ); if (!fs.existsSync(rootPath)) { console.error( diff --git a/packages/telemetry/src/angular/index.test.ts b/packages/crashlytics/src/angular/index.test.ts similarity index 77% rename from packages/telemetry/src/angular/index.test.ts rename to packages/crashlytics/src/angular/index.test.ts index 2592c29ff6..36fac9481f 100644 --- a/packages/telemetry/src/angular/index.test.ts +++ b/packages/crashlytics/src/angular/index.test.ts @@ -22,7 +22,7 @@ import sinonChai from 'sinon-chai'; import chaiAsPromised from 'chai-as-promised'; import { restore, stub } from 'sinon'; import { FirebaseApp, deleteApp, initializeApp } from '@firebase/app'; -import * as telemetry from '../api'; +import * as crashlytics from '../api'; import { Component, Injector, @@ -31,7 +31,7 @@ import { } from '@angular/core'; import { TestBed } from '@angular/core/testing'; import { FirebaseErrorHandler } from '.'; -import { Telemetry } from '../public-types'; +import { Crashlytics } from '../public-types'; import { Router, RouterModule } from '@angular/router'; import { BrowserTestingModule, @@ -51,17 +51,19 @@ describe('FirebaseErrorHandler', () => { let router: Router; let app: FirebaseApp; - let fakeTelemetry: Telemetry; + let fakeCrashlytics: Crashlytics; let captureErrorStub: sinon.SinonStub; - let getTelemetryStub: sinon.SinonStub; + let getCrashlyticsStub: sinon.SinonStub; beforeEach(() => { app = initializeApp({ projectId: 'p', appId: 'fakeapp' }); - fakeTelemetry = {} as Telemetry; + fakeCrashlytics = {} as Crashlytics; - captureErrorStub = stub(telemetry, 'captureError'); - getTelemetryStub = stub(telemetry, 'getTelemetry').returns(fakeTelemetry); + captureErrorStub = stub(crashlytics, 'captureError'); + getCrashlyticsStub = stub(crashlytics, 'getCrashlytics').returns( + fakeCrashlytics + ); TestBed.configureTestingModule({ imports: [ @@ -90,10 +92,14 @@ describe('FirebaseErrorHandler', () => { const testError = new Error('Test error message'); errorHandler.handleError(testError); - expect(getTelemetryStub).to.have.been.called; - expect(captureErrorStub).to.have.been.calledWith(fakeTelemetry, testError, { - 'angular_route_path': '/static-route' - }); + expect(getCrashlyticsStub).to.have.been.called; + expect(captureErrorStub).to.have.been.calledWith( + fakeCrashlytics, + testError, + { + 'angular_route_path': '/static-route' + } + ); }); it('should remove dynamic content from route', async () => { @@ -102,9 +108,13 @@ describe('FirebaseErrorHandler', () => { const testError = new Error('Test error message'); errorHandler.handleError(testError); expect(captureErrorStub).to.have.been.called; - expect(captureErrorStub).to.have.been.calledWith(fakeTelemetry, testError, { - // eslint-disable-next-line camelcase - angular_route_path: '/dynamic/:id/route' - }); + expect(captureErrorStub).to.have.been.calledWith( + fakeCrashlytics, + testError, + { + // eslint-disable-next-line camelcase + angular_route_path: '/dynamic/:id/route' + } + ); }); }); diff --git a/packages/telemetry/src/angular/index.ts b/packages/crashlytics/src/angular/index.ts similarity index 80% rename from packages/telemetry/src/angular/index.ts rename to packages/crashlytics/src/angular/index.ts index b6fc231466..015c275cad 100644 --- a/packages/telemetry/src/angular/index.ts +++ b/packages/crashlytics/src/angular/index.ts @@ -19,17 +19,17 @@ import { ErrorHandler, inject } from '@angular/core'; // eslint-disable-next-line import/no-extraneous-dependencies import { ActivatedRouteSnapshot, Router } from '@angular/router'; -import { registerTelemetry } from '../register'; -import { captureError, getTelemetry } from '../api'; -import { Telemetry, TelemetryOptions } from '../public-types'; +import { registerCrashlytics } from '../register'; +import { captureError, getCrashlytics } from '../api'; +import { Crashlytics, CrashlyticsOptions } from '../public-types'; import { FirebaseApp } from '@firebase/app'; -registerTelemetry(); +registerCrashlytics(); export * from '../public-types'; /** - * A custom ErrorHandler that captures uncaught errors and sends them to Firebase Telemetry. + * A custom ErrorHandler that captures uncaught errors and sends them to Firebase Crashlytics. * * This should be provided in your application's root module. * @@ -37,7 +37,7 @@ export * from '../public-types'; * Basic usage: * ```typescript * import { ErrorHandler } from '@angular/core'; - * import { FirebaseErrorHandler } from 'firebase/telemetry-angular'; + * import { FirebaseErrorHandler } from 'firebase/crashlytics-angular'; * * @NgModule({ * // ... @@ -56,7 +56,7 @@ export * from '../public-types'; * Providing telemetry options: * ```typescript * import { ErrorHandler } from '@angular/core'; - * import { FirebaseErrorHandler } from 'firebase/telemetry-angular'; + * import { FirebaseErrorHandler } from 'firebase/crashlytics-angular'; * * @NgModule({ * // ... @@ -72,17 +72,17 @@ export * from '../public-types'; * ``` * * @param firebaseApp - The {@link @firebase/app#FirebaseApp} instance to use. - * @param telemetryOptions - Optional. {@link TelemetryOptions} that configure the Telemetry instance. + * @param crashlyticsOptions - Optional. {@link CrashlyticsOptions} that configure the Crashlytics instance. * To provide these options, you must use a `useFactory` provider as shown in the example above. * * @public */ export class FirebaseErrorHandler implements ErrorHandler { private readonly router = inject(Router); - private readonly telemetry: Telemetry; + private readonly crashlytics: Crashlytics; - constructor(app: FirebaseApp, telemetryOptions?: TelemetryOptions) { - this.telemetry = getTelemetry(app, telemetryOptions); + constructor(app: FirebaseApp, crashlyticsOptions?: CrashlyticsOptions) { + this.crashlytics = getCrashlytics(app, crashlyticsOptions); } handleError(error: unknown): void { @@ -90,7 +90,7 @@ export class FirebaseErrorHandler implements ErrorHandler { 'angular_route_path': this.getSafeRoutePath(this.router) }; - captureError(this.telemetry, error, attributes); + captureError(this.crashlytics, error, attributes); } /** diff --git a/packages/telemetry/src/api.test.ts b/packages/crashlytics/src/api.test.ts similarity index 83% rename from packages/telemetry/src/api.test.ts rename to packages/crashlytics/src/api.test.ts index 3a5dc843b8..b5da047abf 100644 --- a/packages/telemetry/src/api.test.ts +++ b/packages/crashlytics/src/api.test.ts @@ -33,16 +33,16 @@ import { } from '@firebase/app'; import { Component, ComponentType } from '@firebase/component'; import { FirebaseAppCheckInternal } from '@firebase/app-check-interop-types'; -import { captureError, flush, getTelemetry } from './api'; +import { captureError, flush, getCrashlytics } from './api'; import { LOG_ENTRY_ATTRIBUTE_KEYS, - TELEMETRY_SESSION_ID_KEY + CRASHLYTICS_SESSION_ID_KEY } from './constants'; -import { TelemetryService } from './service'; -import { registerTelemetry } from './register'; +import { CrashlyticsService } from './service'; +import { registerCrashlytics } from './register'; import { _FirebaseInstallationsInternal } from '@firebase/installations'; import { AUTO_CONSTANTS } from './auto-constants'; -import { TelemetryInternal } from './types'; +import { CrashlyticsInternal } 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: TelemetryInternal = { +const fakeCrashlytics: CrashlyticsInternal = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -114,8 +114,8 @@ describe('Top level API', () => { writable: true }); - // Simulate session creation that now happens in registerTelemetry - storage[TELEMETRY_SESSION_ID_KEY] = MOCK_SESSION_ID; + // Simulate session creation that now happens in registerCrashlytics + storage[CRASHLYTICS_SESSION_ID_KEY] = MOCK_SESSION_ID; }); afterEach(async () => { @@ -130,52 +130,54 @@ describe('Top level API', () => { }); }); - describe('getTelemetry()', () => { + describe('getCrashlytics()', () => { it('works without options', () => { - expect(getTelemetry(getFakeApp())).to.be.instanceOf(TelemetryService); + expect(getCrashlytics(getFakeApp())).to.be.instanceOf(CrashlyticsService); // Two instances are the same - expect(getTelemetry(getFakeApp())).to.equal(getTelemetry(getFakeApp())); + expect(getCrashlytics(getFakeApp())).to.equal( + getCrashlytics(getFakeApp()) + ); }); it('works with options: no endpointUrl', () => { - expect(getTelemetry(getFakeApp(), {})).to.equal( - getTelemetry(getFakeApp()) + expect(getCrashlytics(getFakeApp(), {})).to.equal( + getCrashlytics(getFakeApp()) ); }); it('works with options: endpointUrl set', () => { const app = getFakeApp(); - expect(getTelemetry(app, { endpointUrl: 'http://endpoint1' })).to.equal( - getTelemetry(app, { endpointUrl: 'http://endpoint1' }) + expect(getCrashlytics(app, { endpointUrl: 'http://endpoint1' })).to.equal( + getCrashlytics(app, { endpointUrl: 'http://endpoint1' }) ); expect( - getTelemetry(app, { endpointUrl: 'http://endpoint1' }) - ).not.to.equal(getTelemetry(app, { endpointUrl: 'http://endpoint2' })); + getCrashlytics(app, { endpointUrl: 'http://endpoint1' }) + ).not.to.equal(getCrashlytics(app, { endpointUrl: 'http://endpoint2' })); expect( - getTelemetry(app, { endpointUrl: 'http://endpoint1' }) - ).not.to.equal(getTelemetry(app, {})); + getCrashlytics(app, { endpointUrl: 'http://endpoint1' }) + ).not.to.equal(getCrashlytics(app, {})); }); }); - describe('registerTelemetry()', () => { + describe('registerCrashlytics()', () => { it('should create a session and emit a log entry if none exists', () => { // Clear storage to simulate no session storage = {}; emittedLogs.length = 0; - getTelemetry(getFakeApp()); + getCrashlytics(getFakeApp()); // Check if session ID was created in storage - expect(storage[TELEMETRY_SESSION_ID_KEY]).to.equal(MOCK_SESSION_ID); + expect(storage[CRASHLYTICS_SESSION_ID_KEY]).to.equal(MOCK_SESSION_ID); }); it('should not create a new session if one exists', () => { - storage[TELEMETRY_SESSION_ID_KEY] = 'existing-session'; + storage[CRASHLYTICS_SESSION_ID_KEY] = 'existing-session'; emittedLogs.length = 0; - getTelemetry(getFakeApp()); + getCrashlytics(getFakeApp()); - expect(storage[TELEMETRY_SESSION_ID_KEY]).to.equal('existing-session'); + expect(storage[CRASHLYTICS_SESSION_ID_KEY]).to.equal('existing-session'); }); }); @@ -185,7 +187,7 @@ describe('Top level API', () => { error.stack = '...stack trace...'; error.name = 'TestError'; - captureError(fakeTelemetry, error); + captureError(fakeCrashlytics, error); expect(emittedLogs.length).to.equal(1); const log = emittedLogs[0]; @@ -203,7 +205,7 @@ describe('Top level API', () => { const error = new Error('error with no stack'); error.stack = undefined; - captureError(fakeTelemetry, error); + captureError(fakeCrashlytics, error); expect(emittedLogs.length).to.equal(1); const log = emittedLogs[0]; @@ -218,7 +220,7 @@ describe('Top level API', () => { }); it('should capture a string error correctly', () => { - captureError(fakeTelemetry, 'a string error'); + captureError(fakeCrashlytics, 'a string error'); expect(emittedLogs.length).to.equal(1); const log = emittedLogs[0]; @@ -231,7 +233,7 @@ describe('Top level API', () => { }); it('should capture an unknown error type correctly', () => { - captureError(fakeTelemetry, 12345); + captureError(fakeCrashlytics, 12345); expect(emittedLogs.length).to.equal(1); const log = emittedLogs[0]; @@ -257,7 +259,7 @@ describe('Top level API', () => { span.spanContext().traceId = 'my-trace'; span.spanContext().spanId = 'my-span'; - captureError(fakeTelemetry, error); + captureError(fakeCrashlytics, error); span.end(); }); @@ -278,7 +280,7 @@ describe('Top level API', () => { error.stack = '...stack trace...'; error.name = 'TestError'; - captureError(fakeTelemetry, error, { + captureError(fakeCrashlytics, error, { strAttr: 'string attribute', mapAttr: { boolAttr: true, @@ -305,15 +307,15 @@ describe('Top level API', () => { it('should use explicit app version when provided', () => { AUTO_CONSTANTS.appVersion = '1.2.3'; // Unused - const telemetry = new TelemetryService( - fakeTelemetry.app, + const crashlytics = new CrashlyticsService( + fakeCrashlytics.app, fakeLoggerProvider ); - telemetry.options = { + crashlytics.options = { appVersion: '1.0.0' }; - captureError(telemetry, 'a string error'); + captureError(crashlytics, 'a string error'); expect(emittedLogs.length).to.equal(1); const log = emittedLogs[0]; @@ -326,7 +328,7 @@ describe('Top level API', () => { it('should use auto constants if available', () => { AUTO_CONSTANTS.appVersion = '1.2.3'; - captureError(fakeTelemetry, 'a string error'); + captureError(fakeCrashlytics, 'a string error'); expect(emittedLogs.length).to.equal(1); const log = emittedLogs[0]; @@ -338,9 +340,9 @@ describe('Top level API', () => { describe('Session Metadata', () => { it('should retrieve existing session ID from sessionStorage', () => { - storage[TELEMETRY_SESSION_ID_KEY] = 'existing-session-id'; + storage[CRASHLYTICS_SESSION_ID_KEY] = 'existing-session-id'; - captureError(fakeTelemetry, 'error'); + captureError(fakeCrashlytics, 'error'); expect(emittedLogs.length).to.equal(1); const log = emittedLogs[0]; @@ -362,7 +364,7 @@ describe('Top level API', () => { writable: true }); - captureError(fakeTelemetry, 'error'); + captureError(fakeCrashlytics, 'error'); expect(emittedLogs.length).to.equal(1); const log = emittedLogs[0]; @@ -383,7 +385,7 @@ describe('Top level API', () => { writable: true }); - captureError(fakeTelemetry, 'error'); + captureError(fakeCrashlytics, 'error'); expect(emittedLogs.length).to.equal(1); const log = emittedLogs[0]; @@ -395,12 +397,12 @@ describe('Top level API', () => { describe('flush()', () => { it('should flush logs correctly', async () => { - captureError(fakeTelemetry, 'error1'); - captureError(fakeTelemetry, 'error2'); + captureError(fakeCrashlytics, 'error1'); + captureError(fakeCrashlytics, 'error2'); expect(emittedLogs.length).to.equal(2); - await flush(fakeTelemetry); + await flush(fakeCrashlytics); expect(emittedLogs.length).to.equal(0); }); @@ -408,7 +410,7 @@ describe('Top level API', () => { }); function getFakeApp(): FirebaseApp { - registerTelemetry(); + registerCrashlytics(); _registerComponent( new Component( 'installations-internal', diff --git a/packages/telemetry/src/api.ts b/packages/crashlytics/src/api.ts similarity index 67% rename from packages/telemetry/src/api.ts rename to packages/crashlytics/src/api.ts index 8b80ac76ec..c7acddc023 100644 --- a/packages/telemetry/src/api.ts +++ b/packages/crashlytics/src/api.ts @@ -16,81 +16,81 @@ */ import { _getProvider, FirebaseApp, getApp } from '@firebase/app'; -import { LOG_ENTRY_ATTRIBUTE_KEYS, TELEMETRY_TYPE } from './constants'; -import { Telemetry, TelemetryOptions } from './public-types'; +import { LOG_ENTRY_ATTRIBUTE_KEYS, CRASHLYTICS_TYPE } from './constants'; +import { Crashlytics, CrashlyticsOptions } from './public-types'; import { Provider } from '@firebase/component'; import { AnyValueMap, SeverityNumber } from '@opentelemetry/api-logs'; import { trace } from '@opentelemetry/api'; -import { TelemetryService } from './service'; +import { CrashlyticsService } from './service'; import { flush, getAppVersion, getSessionId } from './helpers'; -import { TelemetryInternal } from './types'; +import { CrashlyticsInternal } from './types'; declare module '@firebase/component' { interface NameServiceMapping { - [TELEMETRY_TYPE]: TelemetryService; + [CRASHLYTICS_TYPE]: CrashlyticsService; } } /** - * Returns the default {@link Telemetry} instance that is associated with the provided + * Returns the default {@link Crashlytics} instance that is associated with the provided * {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new instance with the * default settings. * * @example * ```javascript - * const telemetry = getTelemetry(app); + * const crashlytics = getCrashlytics(app); * ``` * * @param app - The {@link @firebase/app#FirebaseApp} to use. - * @param options - {@link TelemetryOptions} that configure the Telemetry instance. - * @returns The default {@link Telemetry} instance for the given {@link @firebase/app#FirebaseApp}. + * @param options - {@link CrashlyticsOptions} that configure the Crashlytics instance. + * @returns The default {@link Crashlytics} instance for the given {@link @firebase/app#FirebaseApp}. * * @public */ -export function getTelemetry( +export function getCrashlytics( app: FirebaseApp = getApp(), - options?: TelemetryOptions -): Telemetry { - const telemetryProvider: Provider<'telemetry'> = _getProvider( + options?: CrashlyticsOptions +): Crashlytics { + const crashlyticsProvider: Provider<'crashlytics'> = _getProvider( app, - TELEMETRY_TYPE + CRASHLYTICS_TYPE ); const identifier = options?.endpointUrl || ''; - const telemetry: TelemetryService = telemetryProvider.getImmediate({ + const crashlytics: CrashlyticsService = crashlyticsProvider.getImmediate({ identifier }); if (options) { - telemetry.options = options; + crashlytics.options = options; } - return telemetry; + return crashlytics; } /** - * Enqueues an error to be uploaded to the Firebase Telemetry API. + * Enqueues an error to be uploaded to the Firebase Crashlytics API. * * @public * - * @param telemetry - The {@link Telemetry} instance. + * @param crashlytics - The {@link Crashlytics} instance. * @param error - The caught exception, typically an {@link Error} * @param attributes = Optional, arbitrary attributes to attach to the error log */ export function captureError( - telemetry: Telemetry, + crashlytics: Crashlytics, error: unknown, attributes?: AnyValueMap ): void { - // Cast to TelemetryInternal to access internal loggerProvider - const logger = (telemetry as TelemetryInternal).loggerProvider.getLogger( + // Cast to CrashlyticsInternal to access internal loggerProvider + const logger = (crashlytics as CrashlyticsInternal).loggerProvider.getLogger( 'error-logger' ); const customAttributes = attributes || {}; // Add trace metadata const activeSpanContext = trace.getActiveSpan()?.spanContext(); - if (telemetry.app.options.projectId && activeSpanContext?.traceId) { + if (crashlytics.app.options.projectId && activeSpanContext?.traceId) { customAttributes[ 'logging.googleapis.com/trace' - ] = `projects/${telemetry.app.options.projectId}/traces/${activeSpanContext.traceId}`; + ] = `projects/${crashlytics.app.options.projectId}/traces/${activeSpanContext.traceId}`; if (activeSpanContext?.spanId) { customAttributes['logging.googleapis.com/spanId'] = activeSpanContext.spanId; @@ -99,7 +99,7 @@ export function captureError( // Add app version metadata customAttributes[LOG_ENTRY_ATTRIBUTE_KEYS.APP_VERSION] = - getAppVersion(telemetry); + getAppVersion(crashlytics); // Add session ID metadata const sessionId = getSessionId(); diff --git a/packages/telemetry/src/auto-constants.ts b/packages/crashlytics/src/auto-constants.ts similarity index 100% rename from packages/telemetry/src/auto-constants.ts rename to packages/crashlytics/src/auto-constants.ts diff --git a/packages/telemetry/src/constants.ts b/packages/crashlytics/src/constants.ts similarity index 83% rename from packages/telemetry/src/constants.ts rename to packages/crashlytics/src/constants.ts index 52ce36d8db..5fcce4cf03 100644 --- a/packages/telemetry/src/constants.ts +++ b/packages/crashlytics/src/constants.ts @@ -15,11 +15,11 @@ * limitations under the License. */ -/** Type constant for Firebase Telemetry. */ -export const TELEMETRY_TYPE = 'telemetry'; +/** Type constant for Firebase Crashlytics. */ +export const CRASHLYTICS_TYPE = 'crashlytics'; /** Key for storing the session ID in sessionStorage. */ -export const TELEMETRY_SESSION_ID_KEY = 'firebasetelemetry.sessionid'; +export const CRASHLYTICS_SESSION_ID_KEY = 'firebasecrashlytics.sessionid'; /** Keys for attributes in log entries. */ export const LOG_ENTRY_ATTRIBUTE_KEYS = { diff --git a/packages/telemetry/src/helpers.test.ts b/packages/crashlytics/src/helpers.test.ts similarity index 89% rename from packages/telemetry/src/helpers.test.ts rename to packages/crashlytics/src/helpers.test.ts index de87404cdc..d1d0220529 100644 --- a/packages/telemetry/src/helpers.test.ts +++ b/packages/crashlytics/src/helpers.test.ts @@ -22,11 +22,11 @@ import { isNode } from '@firebase/util'; import { registerListeners, startNewSession } from './helpers'; import { LOG_ENTRY_ATTRIBUTE_KEYS, - TELEMETRY_SESSION_ID_KEY + CRASHLYTICS_SESSION_ID_KEY } from './constants'; import { AUTO_CONSTANTS } from './auto-constants'; -import { TelemetryService } from './service'; -import { TelemetryInternal } from './types'; +import { CrashlyticsService } from './service'; +import { CrashlyticsInternal } from './types'; const MOCK_SESSION_ID = '00000000-0000-0000-0000-000000000000'; @@ -52,7 +52,7 @@ describe('helpers', () => { shutdown: () => Promise.resolve() } as unknown as LoggerProvider; - const fakeTelemetry: TelemetryInternal = { + const fakeCrashlytics: CrashlyticsInternal = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -113,9 +113,9 @@ describe('helpers', () => { describe('startNewSession', () => { it('should create a new session and log it with app version (unset)', () => { - startNewSession(fakeTelemetry); + startNewSession(fakeCrashlytics); - expect(storage[TELEMETRY_SESSION_ID_KEY]).to.equal(MOCK_SESSION_ID); + expect(storage[CRASHLYTICS_SESSION_ID_KEY]).to.equal(MOCK_SESSION_ID); expect(emittedLogs.length).to.equal(1); expect(emittedLogs[0].attributes).to.deep.equal({ [LOG_ENTRY_ATTRIBUTE_KEYS.SESSION_ID]: MOCK_SESSION_ID, @@ -125,7 +125,7 @@ describe('helpers', () => { it('should log app version from AUTO_CONSTANTS', () => { AUTO_CONSTANTS.appVersion = '1.2.3'; - startNewSession(fakeTelemetry); + startNewSession(fakeCrashlytics); expect(emittedLogs[0].attributes).to.deep.equal({ [LOG_ENTRY_ATTRIBUTE_KEYS.SESSION_ID]: MOCK_SESSION_ID, @@ -134,8 +134,8 @@ describe('helpers', () => { }); it('should log app version from telemetry options', () => { - const telemetryWithVersion = new TelemetryService( - fakeTelemetry.app, + const telemetryWithVersion = new CrashlyticsService( + fakeCrashlytics.app, fakeLoggerProvider ); telemetryWithVersion.options = { appVersion: '9.9.9' }; @@ -152,11 +152,11 @@ describe('helpers', () => { describe('registerListeners', () => { if (isNode()) { it('should do nothing in node', () => { - registerListeners(fakeTelemetry); + registerListeners(fakeCrashlytics); }); } else { it('should flush logs when the visibility changes to hidden', () => { - registerListeners(fakeTelemetry); + registerListeners(fakeCrashlytics); expect(flushed).to.be.false; @@ -170,7 +170,7 @@ describe('helpers', () => { }); it('should flush logs when the pagehide event fires', () => { - registerListeners(fakeTelemetry); + registerListeners(fakeCrashlytics); expect(flushed).to.be.false; diff --git a/packages/telemetry/src/helpers.ts b/packages/crashlytics/src/helpers.ts similarity index 67% rename from packages/telemetry/src/helpers.ts rename to packages/crashlytics/src/helpers.ts index be9a3662c1..1b3091ccbb 100644 --- a/packages/telemetry/src/helpers.ts +++ b/packages/crashlytics/src/helpers.ts @@ -19,18 +19,18 @@ import { SeverityNumber } from '@opentelemetry/api-logs'; import * as constants from './auto-constants'; import { LOG_ENTRY_ATTRIBUTE_KEYS, - TELEMETRY_SESSION_ID_KEY + CRASHLYTICS_SESSION_ID_KEY } from './constants'; -import { Telemetry } from './public-types'; -import { TelemetryService } from './service'; -import { TelemetryInternal } from './types'; +import { Crashlytics } from './public-types'; +import { CrashlyticsService } from './service'; +import { CrashlyticsInternal } from './types'; /** * Returns the app version from the provided Telemetry instance, if available. */ -export function getAppVersion(telemetry: Telemetry): string { - if ((telemetry as TelemetryService).options?.appVersion) { - return (telemetry as TelemetryService).options!.appVersion!; +export function getAppVersion(crashlytics: Crashlytics): string { + if ((crashlytics as CrashlyticsService).options?.appVersion) { + return (crashlytics as CrashlyticsService).options!.appVersion!; } else if (constants.AUTO_CONSTANTS?.appVersion) { return constants.AUTO_CONSTANTS.appVersion; } @@ -43,7 +43,7 @@ export function getAppVersion(telemetry: Telemetry): string { export function getSessionId(): string | undefined { if (typeof sessionStorage !== 'undefined') { try { - return sessionStorage.getItem(TELEMETRY_SESSION_ID_KEY) || undefined; + return sessionStorage.getItem(CRASHLYTICS_SESSION_ID_KEY) || undefined; } catch (e) { // Ignore errors accessing sessionStorage (e.g. security restrictions) } @@ -55,16 +55,16 @@ export function getSessionId(): string | undefined { * 1. The client browser's sessionStorage (if available) * 2. In Cloud Logging as its own log entry */ -export function startNewSession(telemetry: Telemetry): void { - // Cast to TelemetryInternal to access internal loggerProvider - const { loggerProvider } = telemetry as TelemetryInternal; +export function startNewSession(crashlytics: Crashlytics): void { + // Cast to CrashlyticsInternal to access internal loggerProvider + const { loggerProvider } = crashlytics as CrashlyticsInternal; if ( typeof sessionStorage !== 'undefined' && typeof crypto?.randomUUID === 'function' ) { try { const sessionId = crypto.randomUUID(); - sessionStorage.setItem(TELEMETRY_SESSION_ID_KEY, sessionId); + sessionStorage.setItem(CRASHLYTICS_SESSION_ID_KEY, sessionId); // Emit session creation log const logger = loggerProvider.getLogger('session-logger'); @@ -73,7 +73,7 @@ export function startNewSession(telemetry: Telemetry): void { body: 'Session created', attributes: { [LOG_ENTRY_ATTRIBUTE_KEYS.SESSION_ID]: sessionId, - [LOG_ENTRY_ATTRIBUTE_KEYS.APP_VERSION]: getAppVersion(telemetry) + [LOG_ENTRY_ATTRIBUTE_KEYS.APP_VERSION]: getAppVersion(crashlytics) } }); } catch (e) { @@ -86,32 +86,32 @@ export function startNewSession(telemetry: Telemetry): void { * Registers event listeners to flush logs when the page is hidden. In some cases multiple listeners * may trigger at the same time, but flushing only occurs once per batch. */ -export function registerListeners(telemetry: Telemetry): void { +export function registerListeners(crashlytics: Crashlytics): void { if (typeof window !== 'undefined' && typeof document !== 'undefined') { window.addEventListener('visibilitychange', async () => { if (document.visibilityState === 'hidden') { - await flush(telemetry); + await flush(crashlytics); } }); window.addEventListener('pagehide', async () => { - await flush(telemetry); + await flush(crashlytics); }); } } /** - * Flushes all enqueued telemetry data immediately, instead of waiting for default batching. + * Flushes all enqueued Crashlytics data immediately, instead of waiting for default batching. * * @public * - * @param telemetry - The {@link Telemetry} instance. + * @param crashlytics - The {@link Crashlytics} instance. * @returns a promise which is resolved when all flushes are complete */ -export function flush(telemetry: Telemetry): Promise { - // Cast to TelemetryInternal to access internal loggerProvider - return (telemetry as TelemetryInternal).loggerProvider +export function flush(crashlytics: Crashlytics): Promise { + // Cast to CrashlyticsInternal to access internal loggerProvider + return (crashlytics as CrashlyticsInternal).loggerProvider .forceFlush() .catch(err => { - console.error('Error flushing logs from Firebase Telemetry:', err); + console.error('Error flushing logs from Firebase Crashlytics:', err); }); } diff --git a/packages/telemetry/src/logging/appcheck-provider.ts b/packages/crashlytics/src/logging/appcheck-provider.ts similarity index 100% rename from packages/telemetry/src/logging/appcheck-provider.ts rename to packages/crashlytics/src/logging/appcheck-provider.ts diff --git a/packages/telemetry/src/logging/fetch-transport.test.ts b/packages/crashlytics/src/logging/fetch-transport.test.ts similarity index 100% rename from packages/telemetry/src/logging/fetch-transport.test.ts rename to packages/crashlytics/src/logging/fetch-transport.test.ts diff --git a/packages/telemetry/src/logging/fetch-transport.ts b/packages/crashlytics/src/logging/fetch-transport.ts similarity index 100% rename from packages/telemetry/src/logging/fetch-transport.ts rename to packages/crashlytics/src/logging/fetch-transport.ts diff --git a/packages/telemetry/src/logging/installation-id-provider.test.ts b/packages/crashlytics/src/logging/installation-id-provider.test.ts similarity index 100% rename from packages/telemetry/src/logging/installation-id-provider.test.ts rename to packages/crashlytics/src/logging/installation-id-provider.test.ts diff --git a/packages/telemetry/src/logging/installation-id-provider.ts b/packages/crashlytics/src/logging/installation-id-provider.ts similarity index 100% rename from packages/telemetry/src/logging/installation-id-provider.ts rename to packages/crashlytics/src/logging/installation-id-provider.ts diff --git a/packages/telemetry/src/logging/logger-provider.ts b/packages/crashlytics/src/logging/logger-provider.ts similarity index 100% rename from packages/telemetry/src/logging/logger-provider.ts rename to packages/crashlytics/src/logging/logger-provider.ts diff --git a/packages/telemetry/src/next.test.ts b/packages/crashlytics/src/next.test.ts similarity index 70% rename from packages/telemetry/src/next.test.ts rename to packages/crashlytics/src/next.test.ts index 259b4b0f87..1fd78855f7 100644 --- a/packages/telemetry/src/next.test.ts +++ b/packages/crashlytics/src/next.test.ts @@ -20,27 +20,29 @@ import sinonChai from 'sinon-chai'; import chaiAsPromised from 'chai-as-promised'; import { restore, stub } from 'sinon'; import * as app from '@firebase/app'; -import * as telemetry from './api'; +import * as crashlytics from './api'; import { FirebaseApp } from '@firebase/app'; -import { Telemetry } from './public-types'; +import { Crashlytics } from './public-types'; import { nextOnRequestError } from './next'; use(sinonChai); use(chaiAsPromised); describe('nextOnRequestError', () => { - let getTelemetryStub: sinon.SinonStub; + let getCrashlyticsStub: sinon.SinonStub; let captureErrorStub: sinon.SinonStub; let fakeApp: FirebaseApp; - let fakeTelemetry: Telemetry; + let fakeCrashlytics: Crashlytics; beforeEach(() => { fakeApp = {} as FirebaseApp; - fakeTelemetry = {} as Telemetry; + fakeCrashlytics = {} as Crashlytics; stub(app, 'getApp').returns(fakeApp); - getTelemetryStub = stub(telemetry, 'getTelemetry').returns(fakeTelemetry); - captureErrorStub = stub(telemetry, 'captureError'); + getCrashlyticsStub = stub(crashlytics, 'getCrashlytics').returns( + fakeCrashlytics + ); + captureErrorStub = stub(crashlytics, 'captureError'); }); afterEach(() => { @@ -68,13 +70,17 @@ describe('nextOnRequestError', () => { await nextOnRequestError()(error, errorRequest, errorContext); - expect(getTelemetryStub).to.have.been.calledOnceWith(fakeApp); - expect(captureErrorStub).to.have.been.calledOnceWith(fakeTelemetry, error, { - 'nextjs_path': '/test-path?some=param', - 'nextjs_method': 'GET', - 'nextjs_router_kind': 'Pages Router', - 'nextjs_route_path': '/test-path', - 'nextjs_route_type': 'render' - }); + expect(getCrashlyticsStub).to.have.been.calledOnceWith(fakeApp); + expect(captureErrorStub).to.have.been.calledOnceWith( + fakeCrashlytics, + error, + { + 'nextjs_path': '/test-path?some=param', + 'nextjs_method': 'GET', + 'nextjs_router_kind': 'Pages Router', + 'nextjs_route_path': '/test-path', + 'nextjs_route_type': 'render' + } + ); }); }); diff --git a/packages/telemetry/src/next.ts b/packages/crashlytics/src/next.ts similarity index 80% rename from packages/telemetry/src/next.ts rename to packages/crashlytics/src/next.ts index e7d5e2654e..bfce82c0d9 100644 --- a/packages/telemetry/src/next.ts +++ b/packages/crashlytics/src/next.ts @@ -16,15 +16,15 @@ */ import { getApp } from '@firebase/app'; -import { captureError, getTelemetry } from './api'; +import { captureError, getCrashlytics } from './api'; // eslint-disable-next-line import/no-extraneous-dependencies import { Instrumentation } from 'next'; -import { TelemetryOptions } from './public-types'; +import { CrashlyticsOptions } from './public-types'; export { Instrumentation }; /** - * Automatically report uncaught errors from server routes to Firebase Telemetry. + * Automatically report uncaught errors from server routes to Firebase Crashlytics. * * @example * ```javascript @@ -33,16 +33,16 @@ export { Instrumentation }; * export const onRequestError = nextOnRequestError(); * ``` * - * @param telemetryOptions - {@link TelemetryOptions} that configure the Telemetry instance. + * @param crashlyticsOptions - {@link CrashlyticsOptions} that configure the Crashlytics instance. * @returns A request error handler for use in Next.js' instrumentation file * * @public */ export function nextOnRequestError( - telemetryOptions?: TelemetryOptions + crashlyticsOptions?: CrashlyticsOptions ): Instrumentation.onRequestError { return async (error, errorRequest, errorContext) => { - const telemetry = getTelemetry(getApp(), telemetryOptions); + const crashlytics = getCrashlytics(getApp(), crashlyticsOptions); const attributes = { 'nextjs_path': errorRequest.path, @@ -52,6 +52,6 @@ export function nextOnRequestError( 'nextjs_route_type': errorContext.routeType }; - captureError(telemetry, error, attributes); + captureError(crashlytics, error, attributes); }; } diff --git a/packages/telemetry/src/public-types.ts b/packages/crashlytics/src/public-types.ts similarity index 67% rename from packages/telemetry/src/public-types.ts rename to packages/crashlytics/src/public-types.ts index 8c06027dd7..430af9a5ed 100644 --- a/packages/telemetry/src/public-types.ts +++ b/packages/crashlytics/src/public-types.ts @@ -18,27 +18,27 @@ import { FirebaseApp } from '@firebase/app'; /** - * An instance of the Firebase Telemetry SDK. + * An instance of the Firebase Crashlytics SDK. * - * Do not create this instance directly. Instead, use {@link getTelemetry | getTelemetry()}. + * Do not create this instance directly. Instead, use {@link getCrashlytics | getCrashlytics()}. * * @public */ -export interface Telemetry { +export interface Crashlytics { /** - * The {@link @firebase/app#FirebaseApp} this {@link Telemetry} instance is associated with. + * The {@link @firebase/app#FirebaseApp} this {@link Crashlytics} instance is associated with. */ app: FirebaseApp; } /** - * Options for initialized the Telemetry service using {@link getTelemetry | getTelemetry()}. + * Options for initializing the Crashlytics service using {@link getCrashlytics | getCrashlytics()}. * * @public */ -export interface TelemetryOptions { +export interface CrashlyticsOptions { /** - * The URL for the endpoint to which telemetry data should be sent, in the Open Telemetry format. + * The URL for the endpoint to which Crashlytics data should be sent, in the OpenTelemetry format. * By default, data will be sent to Firebase. */ endpointUrl?: string; @@ -46,7 +46,7 @@ export interface TelemetryOptions { /** * The version of the application. This should be a unique string that identifies the snapshot of * code to be deployed, such as "1.0.2". If not specified, other default locations will be checked - * for an identifier. Setting a value here takes precedent over any other values. + * for an identifier. Setting a value here takes precedence over any other values. */ appVersion?: string; } diff --git a/packages/telemetry/src/react/index.test.tsx b/packages/crashlytics/src/react/index.test.tsx similarity index 68% rename from packages/telemetry/src/react/index.test.tsx rename to packages/crashlytics/src/react/index.test.tsx index 4809c05e09..99d4deda57 100644 --- a/packages/telemetry/src/react/index.test.tsx +++ b/packages/crashlytics/src/react/index.test.tsx @@ -20,28 +20,28 @@ import sinonChai from 'sinon-chai'; import chaiAsPromised from 'chai-as-promised'; import { restore, stub } from 'sinon'; import * as app from '@firebase/app'; -import * as telemetry from '../api'; +import * as crashlytics from '../api'; import { FirebaseApp } from '@firebase/app'; -import { Telemetry } from '../public-types'; -import { FirebaseTelemetry } from '.'; +import { Crashlytics } from '../public-types'; +import { FirebaseCrashlytics } from '.'; import React from 'react'; import { render } from '@testing-library/react'; use(sinonChai); use(chaiAsPromised); -describe('FirebaseTelemetry', () => { - let getTelemetryStub: sinon.SinonStub; +describe('FirebaseCrashlytics', () => { + let getCrashlyticsStub: sinon.SinonStub; let captureErrorStub: sinon.SinonStub; let fakeApp: FirebaseApp; - let fakeTelemetry: Telemetry; + let fakeCrashlytics: Crashlytics; beforeEach(() => { fakeApp = { name: 'fakeApp' } as FirebaseApp; - fakeTelemetry = {} as Telemetry; + fakeCrashlytics = {} as Crashlytics; - getTelemetryStub = stub(telemetry, 'getTelemetry').returns(fakeTelemetry); - captureErrorStub = stub(telemetry, 'captureError'); + getCrashlyticsStub = stub(crashlytics, 'getCrashlytics').returns(fakeCrashlytics); + captureErrorStub = stub(crashlytics, 'captureError'); }); afterEach(() => { @@ -49,29 +49,29 @@ describe('FirebaseTelemetry', () => { }); it('captures window errors', done => { - render(); + render(); const error = new Error('test error'); window.onerror = () => { // Prevent error from bubbling up to test suite }; window.addEventListener('error', (event: ErrorEvent) => { // Registers another listener (sequential) to confirm behaviour. - expect(getTelemetryStub).to.have.been.calledWith(fakeApp); - expect(captureErrorStub).to.have.been.calledWith(fakeTelemetry, error); + expect(getCrashlyticsStub).to.have.been.calledWith(fakeApp); + expect(captureErrorStub).to.have.been.calledWith(fakeCrashlytics, error); done(); }); window.dispatchEvent(new ErrorEvent('error', { error })); }); it('captures unhandled promise rejections', () => { - render(); + render(); const reason = new Error('test rejection'); const promise = Promise.reject(reason); promise.catch(() => {}); window.dispatchEvent( new PromiseRejectionEvent('unhandledrejection', { reason, promise }) ); - expect(getTelemetryStub).to.have.been.calledWith(fakeApp); - expect(captureErrorStub).to.have.been.calledWith(fakeTelemetry, reason); + expect(getCrashlyticsStub).to.have.been.calledWith(fakeApp); + expect(captureErrorStub).to.have.been.calledWith(fakeCrashlytics, reason); }); }); diff --git a/packages/telemetry/src/react/index.ts b/packages/crashlytics/src/react/index.ts similarity index 72% rename from packages/telemetry/src/react/index.ts rename to packages/crashlytics/src/react/index.ts index f41dee7592..2e2cf53a0c 100644 --- a/packages/telemetry/src/react/index.ts +++ b/packages/crashlytics/src/react/index.ts @@ -16,12 +16,12 @@ */ import { FirebaseApp } from '@firebase/app'; -import { registerTelemetry } from '../register'; -import { captureError, getTelemetry } from '../api'; -import { TelemetryOptions } from '../public-types'; +import { registerCrashlytics } from '../register'; +import { captureError, getCrashlytics } from '../api'; +import { CrashlyticsOptions } from '../public-types'; import { useEffect } from 'react'; -registerTelemetry(); +registerCrashlytics(); export * from '../public-types'; @@ -34,7 +34,7 @@ export * from '../public-types'; * @example * ```tsx * import { useEffect, useState } from "react"; - * import { FirebaseTelemetry } from "@firebase/telemetry/react"; + * import { FirebaseCrashlytics } from "@firebase/crashlytics/react"; * import { FirebaseApp, initializeApp } from "@firebase/app"; * * export default function MyApp() { @@ -52,9 +52,9 @@ export * from '../public-types'; * return ( * <> * {app && ( - * * )} * ... @@ -64,31 +64,31 @@ export * from '../public-types'; * ``` * * @param firebaseApp - The {@link @firebase/app#FirebaseApp} instance to use. - * @param telemetryOptions - {@link TelemetryOptions} that configure the Telemetry instance. - * @returns The default {@link Telemetry} instance for the given {@link @firebase/app#FirebaseApp}. + * @param crashlyticsOptions - {@link CrashlyticsOptions} that configure the Crashlytics instance. + * @returns The default {@link Crashlytics} instance for the given {@link @firebase/app#FirebaseApp}. * * @public */ -export function FirebaseTelemetry({ +export function FirebaseCrashlytics({ firebaseApp, - telemetryOptions + crashlyticsOptions }: { firebaseApp: FirebaseApp; - telemetryOptions?: TelemetryOptions; + crashlyticsOptions?: CrashlyticsOptions; }): null { useEffect(() => { - const telemetry = getTelemetry(firebaseApp, telemetryOptions); + const crashlytics = getCrashlytics(firebaseApp, crashlyticsOptions); if (typeof window === 'undefined') { return; } const errorListener = (event: ErrorEvent): void => { - captureError(telemetry, event.error, {}); + captureError(crashlytics, event.error, {}); }; const unhandledRejectionListener = (event: PromiseRejectionEvent): void => { - captureError(telemetry, event.reason, {}); + captureError(crashlytics, event.reason, {}); }; try { @@ -96,7 +96,7 @@ export function FirebaseTelemetry({ window.addEventListener('unhandledrejection', unhandledRejectionListener); } catch (error) { // Log the error here, but don't die. - console.warn(`Firebase Telemetry was not initialized:\n`, error); + console.warn(`Firebase Crashlytics was not initialized:\n`, error); } return () => { window.removeEventListener('error', errorListener); @@ -105,7 +105,7 @@ export function FirebaseTelemetry({ unhandledRejectionListener ); }; - }, [firebaseApp, telemetryOptions]); + }, [firebaseApp, crashlyticsOptions]); return null; } diff --git a/packages/telemetry/src/register.node.ts b/packages/crashlytics/src/register.node.ts similarity index 82% rename from packages/telemetry/src/register.node.ts rename to packages/crashlytics/src/register.node.ts index 52e27ff8f8..8e62d68806 100644 --- a/packages/telemetry/src/register.node.ts +++ b/packages/crashlytics/src/register.node.ts @@ -17,18 +17,20 @@ import { _registerComponent, registerVersion } from '@firebase/app'; import { Component, ComponentType } from '@firebase/component'; -import { TELEMETRY_TYPE } from './constants'; +import { CRASHLYTICS_TYPE } from './constants'; import { name, version } from '../package.json'; -import { TelemetryService } from './service'; +import { CrashlyticsService } from './service'; import { createLoggerProvider } from './logging/logger-provider'; -export function registerTelemetry(): void { +export function registerCrashlytics(): void { _registerComponent( new Component( - TELEMETRY_TYPE, + CRASHLYTICS_TYPE, (container, { instanceIdentifier }) => { if (instanceIdentifier === undefined) { - throw new Error('TelemetryService instance identifier is undefined'); + throw new Error( + 'CrashlyticsService instance identifier is undefined' + ); } // TODO: change to default endpoint once it exists @@ -38,7 +40,7 @@ export function registerTelemetry(): void { const app = container.getProvider('app').getImmediate(); const loggerProvider = createLoggerProvider(app, endpointUrl); - return new TelemetryService(app, loggerProvider); + return new CrashlyticsService(app, loggerProvider); }, ComponentType.PUBLIC ).setMultipleInstances(true) diff --git a/packages/telemetry/src/register.ts b/packages/crashlytics/src/register.ts similarity index 84% rename from packages/telemetry/src/register.ts rename to packages/crashlytics/src/register.ts index 1ed2b7d036..5655d1b733 100644 --- a/packages/telemetry/src/register.ts +++ b/packages/crashlytics/src/register.ts @@ -18,24 +18,26 @@ import { _registerComponent, registerVersion } from '@firebase/app'; import { Component, ComponentType } from '@firebase/component'; import { name, version } from '../package.json'; -import { TelemetryService } from './service'; +import { CrashlyticsService } from './service'; import { createLoggerProvider } from './logging/logger-provider'; import { AppCheckProvider } from './logging/appcheck-provider'; import { InstallationIdProvider } from './logging/installation-id-provider'; -import { TELEMETRY_TYPE } from './constants'; +import { CRASHLYTICS_TYPE } from './constants'; import { getSessionId, registerListeners, startNewSession } from './helpers'; // We only import types from this package elsewhere in the `telemetry` package, so this // explicit import is needed here to prevent this module from being tree-shaken out. import '@firebase/installations'; -export function registerTelemetry(): void { +export function registerCrashlytics(): void { _registerComponent( new Component( - TELEMETRY_TYPE, + CRASHLYTICS_TYPE, (container, { instanceIdentifier }) => { if (instanceIdentifier === undefined) { - throw new Error('TelemetryService instance identifier is undefined'); + throw new Error( + 'CrashlyticsService instance identifier is undefined' + ); } // TODO: change to default endpoint once it exists @@ -58,17 +60,17 @@ export function registerTelemetry(): void { dynamicLogAttributeProviders ); - const telemetryService = new TelemetryService(app, loggerProvider); + const crashlyticsService = new CrashlyticsService(app, loggerProvider); // Immediately track this as a new client session (if one doesn't exist yet) if (!getSessionId()) { - startNewSession(telemetryService); + startNewSession(crashlyticsService); } // Register relevant event listeners - registerListeners(telemetryService); + registerListeners(crashlyticsService); - return telemetryService; + return crashlyticsService; }, ComponentType.PUBLIC ).setMultipleInstances(true) diff --git a/packages/telemetry/src/service.ts b/packages/crashlytics/src/service.ts similarity index 77% rename from packages/telemetry/src/service.ts rename to packages/crashlytics/src/service.ts index c5848ac65c..b0712ba331 100644 --- a/packages/telemetry/src/service.ts +++ b/packages/crashlytics/src/service.ts @@ -16,11 +16,11 @@ */ import { _FirebaseService, FirebaseApp } from '@firebase/app'; -import { Telemetry, TelemetryOptions } from './public-types'; +import { Crashlytics, CrashlyticsOptions } from './public-types'; import { LoggerProvider } from '@opentelemetry/sdk-logs'; -export class TelemetryService implements Telemetry, _FirebaseService { - private _options?: TelemetryOptions; +export class CrashlyticsService implements Crashlytics, _FirebaseService { + private _options?: CrashlyticsOptions; constructor(public app: FirebaseApp, public loggerProvider: LoggerProvider) {} @@ -28,11 +28,11 @@ export class TelemetryService implements Telemetry, _FirebaseService { return Promise.resolve(); } - set options(optionsToSet: TelemetryOptions) { + set options(optionsToSet: CrashlyticsOptions) { this._options = optionsToSet; } - get options(): TelemetryOptions | undefined { + get options(): CrashlyticsOptions | undefined { return this._options; } } diff --git a/packages/telemetry/src/types.ts b/packages/crashlytics/src/types.ts similarity index 95% rename from packages/telemetry/src/types.ts rename to packages/crashlytics/src/types.ts index b43c94c284..20ca7b3407 100644 --- a/packages/telemetry/src/types.ts +++ b/packages/crashlytics/src/types.ts @@ -16,14 +16,14 @@ */ import { LoggerProvider } from '@opentelemetry/sdk-logs'; -import { Telemetry } from './public-types'; +import { Crashlytics } from './public-types'; /** * An internal interface for the Telemetry service. * * @internal */ -export interface TelemetryInternal extends Telemetry { +export interface CrashlyticsInternal extends Crashlytics { loggerProvider: LoggerProvider; } diff --git a/packages/telemetry/tsconfig.angular.json b/packages/crashlytics/tsconfig.angular.json similarity index 100% rename from packages/telemetry/tsconfig.angular.json rename to packages/crashlytics/tsconfig.angular.json diff --git a/packages/telemetry/tsconfig.json b/packages/crashlytics/tsconfig.json similarity index 100% rename from packages/telemetry/tsconfig.json rename to packages/crashlytics/tsconfig.json diff --git a/packages/telemetry/tsconfig.react.json b/packages/crashlytics/tsconfig.react.json similarity index 100% rename from packages/telemetry/tsconfig.react.json rename to packages/crashlytics/tsconfig.react.json diff --git a/packages/firebase/telemetry/index.ts b/packages/firebase/crashlytics/index.ts similarity index 93% rename from packages/firebase/telemetry/index.ts rename to packages/firebase/crashlytics/index.ts index 77f87dcf81..663928532c 100644 --- a/packages/firebase/telemetry/index.ts +++ b/packages/firebase/crashlytics/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export * from '@firebase/telemetry'; +export * from '@firebase/crashlytics'; diff --git a/packages/firebase/telemetry/package.json b/packages/firebase/crashlytics/package.json similarity index 100% rename from packages/firebase/telemetry/package.json rename to packages/firebase/crashlytics/package.json diff --git a/packages/firebase/package.json b/packages/firebase/package.json index 773c9fd583..77fbb09b37 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -239,17 +239,17 @@ }, "default": "./storage/dist/esm/index.esm.js" }, - "./telemetry": { - "types": "./telemetry/dist/telemetry/index.d.ts", + "./crashlytics": { + "types": "./crashlytics/dist/crashlytics/index.d.ts", "node": { - "require": "./telemetry/dist/index.cjs.js", - "import": "./telemetry/dist/index.mjs" + "require": "./crashlytics/dist/index.cjs.js", + "import": "./crashlytics/dist/index.mjs" }, "browser": { - "require": "./telemetry/dist/index.cjs.js", - "import": "./telemetry/dist/esm/index.esm.js" + "require": "./crashlytics/dist/index.cjs.js", + "import": "./crashlytics/dist/esm/index.esm.js" }, - "default": "./telemetry/dist/esm/index.esm.js" + "default": "./crashlytics/dist/esm/index.esm.js" }, "./compat/analytics": { "types": "./compat/analytics/dist/compat/analytics/index.d.ts", @@ -430,7 +430,7 @@ "@firebase/messaging-compat": "0.2.23", "@firebase/storage": "0.14.0", "@firebase/storage-compat": "0.4.0", - "@firebase/telemetry": "0.0.1", + "@firebase/crashlytics": "0.0.1", "@firebase/performance": "0.7.9", "@firebase/performance-compat": "0.2.22", "@firebase/remote-config": "0.7.0", @@ -470,7 +470,7 @@ "storage", "performance", "remote-config", - "telemetry", + "crashlytics", "messaging", "messaging/sw", "database", diff --git a/packages/telemetry/CHANGELOG.md b/packages/telemetry/CHANGELOG.md deleted file mode 100644 index 9f41ee4162..0000000000 --- a/packages/telemetry/CHANGELOG.md +++ /dev/null @@ -1 +0,0 @@ -# @firebase/telemetry diff --git a/scripts/docgen/docgen.ts b/scripts/docgen/docgen.ts index ece1600b76..245c575389 100644 --- a/scripts/docgen/docgen.ts +++ b/scripts/docgen/docgen.ts @@ -61,7 +61,7 @@ const PREFERRED_PARAMS = [ 'remoteConfig', 'storage', 'ai', - 'telemetry' + 'crashlytics' ]; let authApiReportOriginal: string;