Skip to content

Commit 70e7a5f

Browse files
authored
Introduce TelemetryOptions allowing telemetry endpoint to be specified (#9290)
* Introduce TelemetryOptions allowing telemetry endpoint to be specified. * Fix typo * update lock * update version of firebase/app * Normalize getTelemetry initialization * Clean up service init
1 parent 1200775 commit 70e7a5f

20 files changed

+342
-67
lines changed

common/api-review/telemetry-react.api.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,27 @@
44
55
```ts
66

7+
import { FirebaseApp } from '@firebase/app';
78
import { FirebaseOptions } from '@firebase/app';
9+
import { LoggerProvider } from '@opentelemetry/sdk-logs';
810

911
// @public
10-
export function FirebaseTelemetry({ firebaseOptions }: {
12+
export function FirebaseTelemetry({ firebaseOptions, telemetryOptions }: {
1113
firebaseOptions?: FirebaseOptions;
14+
telemetryOptions?: TelemetryOptions;
1215
}): null;
1316

17+
// @public
18+
export interface Telemetry {
19+
app: FirebaseApp;
20+
loggerProvider: LoggerProvider;
21+
}
22+
23+
// @public
24+
export interface TelemetryOptions {
25+
endpointUrl?: string;
26+
}
27+
1428

1529
// (No @packageDocumentation comment for this package)
1630

common/api-review/telemetry.api.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,24 @@ export function captureError(telemetry: Telemetry, error: unknown, attributes?:
1616
export function flush(telemetry: Telemetry): Promise<void>;
1717

1818
// @public
19-
export function getTelemetry(app?: FirebaseApp): Telemetry;
19+
export function getTelemetry(app?: FirebaseApp, options?: TelemetryOptions): Telemetry;
2020

2121
export { Instrumentation }
2222

2323
// @public
24-
export const nextOnRequestError: Instrumentation.onRequestError;
24+
export function nextOnRequestError(telemetryOptions?: TelemetryOptions): Instrumentation.onRequestError;
2525

2626
// @public
2727
export interface Telemetry {
2828
app: FirebaseApp;
2929
loggerProvider: LoggerProvider;
3030
}
3131

32+
// @public
33+
export interface TelemetryOptions {
34+
endpointUrl?: string;
35+
}
36+
3237

3338
// (No @packageDocumentation comment for this package)
3439

docs-devsite/_toc.yaml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,12 @@ toc:
699699
section:
700700
- title: Telemetry
701701
path: /docs/reference/js/telemetry_.telemetry.md
702+
- title: TelemetryOptions
703+
path: /docs/reference/js/telemetry_.telemetryoptions.md
702704
- title: telemetry/react
703705
path: /docs/reference/js/telemetry_react.md
704-
section: []
706+
section:
707+
- title: Telemetry
708+
path: /docs/reference/js/telemetry_react.telemetry.md
709+
- title: TelemetryOptions
710+
path: /docs/reference/js/telemetry_react.telemetryoptions.md

docs-devsite/telemetry_.md

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,46 +16,44 @@ https://github.com/firebase/firebase-js-sdk
1616
| Function | Description |
1717
| --- | --- |
1818
| <b>function(app, ...)</b> |
19-
| [getTelemetry(app)](./telemetry_.md#gettelemetry_cf608e1) | 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. |
19+
| [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. |
2020
| <b>function(telemetry, ...)</b> |
2121
| [captureError(telemetry, error, attributes)](./telemetry_.md#captureerror_862e6b3) | Enqueues an error to be uploaded to the Firebase Telemetry API. |
2222
| [flush(telemetry)](./telemetry_.md#flush_8975134) | Flushes all enqueued telemetry data immediately, instead of waiting for default batching. |
23+
| <b>function(telemetryOptions, ...)</b> |
24+
| [nextOnRequestError(telemetryOptions)](./telemetry_.md#nextonrequesterror_3bd5542) | Automatically report uncaught errors from server routes to Firebase Telemetry. |
2325

2426
## Interfaces
2527

2628
| Interface | Description |
2729
| --- | --- |
28-
| [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_cf608e1)<!-- -->. |
30+
| [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)<!-- -->. |
31+
| [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) | Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6)<!-- -->. |
2932

3033
## Namespaces
3134

3235
| Namespace | Description |
3336
| --- | --- |
3437
| [Instrumentation](./telemetry_.instrumentation.md#instrumentation_namespace) | |
3538

36-
## Variables
37-
38-
| Variable | Description |
39-
| --- | --- |
40-
| [nextOnRequestError](./telemetry_.md#nextonrequesterror) | Automatically report uncaught errors from server routes to Firebase Telemetry. |
41-
4239
## function(app, ...)
4340

44-
### getTelemetry(app) {:#gettelemetry_cf608e1}
41+
### getTelemetry(app, options) {:#gettelemetry_448bdc6}
4542

4643
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.
4744

4845
<b>Signature:</b>
4946

5047
```typescript
51-
export declare function getTelemetry(app?: FirebaseApp): Telemetry;
48+
export declare function getTelemetry(app?: FirebaseApp, options?: TelemetryOptions): Telemetry;
5249
```
5350

5451
#### Parameters
5552

5653
| Parameter | Type | Description |
5754
| --- | --- | --- |
5855
| app | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) to use. |
56+
| options | [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) | [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) that configure the Telemetry instance. |
5957

6058
<b>Returns:</b>
6159

@@ -117,22 +115,37 @@ Promise&lt;void&gt;
117115

118116
a promise which is resolved when all flushes are complete
119117

120-
## nextOnRequestError
118+
## function(telemetryOptions, ...)
119+
120+
### nextOnRequestError(telemetryOptions) {:#nextonrequesterror_3bd5542}
121121

122122
Automatically report uncaught errors from server routes to Firebase Telemetry.
123123

124124
<b>Signature:</b>
125125

126126
```typescript
127-
nextOnRequestError: Instrumentation.onRequestError
127+
export declare function nextOnRequestError(telemetryOptions?: TelemetryOptions): Instrumentation.onRequestError;
128128
```
129129

130+
#### Parameters
131+
132+
| Parameter | Type | Description |
133+
| --- | --- | --- |
134+
| telemetryOptions | [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) | [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface) that configure the Telemetry instance. |
135+
136+
<b>Returns:</b>
137+
138+
[Instrumentation.onRequestError](./telemetry_.instrumentation.md#instrumentationonrequesterror)
139+
140+
A request error handler for use in Next.js' instrumentation file
141+
130142
### Example
131143

132144

133145
```javascript
134146
// In instrumentation.ts (https://nextjs.org/docs/app/guides/instrumentation):
135-
export { nextOnRequestError as onRequestError } from 'firebase/telemetry'
147+
import { nextOnRequestError } from 'firebase/telemetry'
148+
export const onRequestError = nextOnRequestError();
136149

137150
```
138151

docs-devsite/telemetry_.telemetry.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ https://github.com/firebase/firebase-js-sdk
1212
# Telemetry interface
1313
An instance of the Firebase Telemetry SDK.
1414

15-
Do not create this instance directly. Instead, use [getTelemetry()](./telemetry_.md#gettelemetry_cf608e1)<!-- -->.
15+
Do not create this instance directly. Instead, use [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6)<!-- -->.
1616

1717
<b>Signature:</b>
1818

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
Project: /docs/reference/js/_project.yaml
2+
Book: /docs/reference/_book.yaml
3+
page_type: reference
4+
5+
{% comment %}
6+
DO NOT EDIT THIS FILE!
7+
This is generated by the JS SDK team, and any local changes will be
8+
overwritten. Changes should be made in the source code at
9+
https://github.com/firebase/firebase-js-sdk
10+
{% endcomment %}
11+
12+
# TelemetryOptions interface
13+
Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6)<!-- -->.
14+
15+
<b>Signature:</b>
16+
17+
```typescript
18+
export interface TelemetryOptions
19+
```
20+
21+
## Properties
22+
23+
| Property | Type | Description |
24+
| --- | --- | --- |
25+
| [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. |
26+
27+
## TelemetryOptions.endpointUrl
28+
29+
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.
30+
31+
<b>Signature:</b>
32+
33+
```typescript
34+
endpointUrl?: string;
35+
```

docs-devsite/telemetry_react.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,18 @@ https://github.com/firebase/firebase-js-sdk
1515

1616
| Function | Description |
1717
| --- | --- |
18-
| [FirebaseTelemetry({ firebaseOptions })](./telemetry_react.md#firebasetelemetry_537af3f) | 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. |
18+
| [FirebaseTelemetry({ firebaseOptions, telemetryOptions })](./telemetry_react.md#firebasetelemetry_f37eb31) | 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. |
1919

20-
## function({ firebaseOptions }, ...)
20+
## Interfaces
2121

22-
### FirebaseTelemetry({ firebaseOptions }) {:#firebasetelemetry_537af3f}
22+
| Interface | Description |
23+
| --- | --- |
24+
| [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)<!-- -->. |
25+
| [TelemetryOptions](./telemetry_react.telemetryoptions.md#telemetryoptions_interface) | Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6)<!-- -->. |
26+
27+
## function({ firebaseOptions, telemetryOptions }, ...)
28+
29+
### FirebaseTelemetry({ firebaseOptions, telemetryOptions }) {:#firebasetelemetry_f37eb31}
2330

2431
Registers event listeners for uncaught errors.
2532

@@ -28,16 +35,17 @@ This should be installed near the root of your application. Caught errors, inclu
2835
<b>Signature:</b>
2936

3037
```typescript
31-
export declare function FirebaseTelemetry({ firebaseOptions }: {
38+
export declare function FirebaseTelemetry({ firebaseOptions, telemetryOptions }: {
3239
firebaseOptions?: FirebaseOptions;
40+
telemetryOptions?: TelemetryOptions;
3341
}): null;
3442
```
3543

3644
#### Parameters
3745

3846
| Parameter | Type | Description |
3947
| --- | --- | --- |
40-
| { firebaseOptions } | { firebaseOptions?: [FirebaseOptions](./app.firebaseoptions.md#firebaseoptions_interface)<!-- -->; } | |
48+
| { firebaseOptions, telemetryOptions } | { firebaseOptions?: [FirebaseOptions](./app.firebaseoptions.md#firebaseoptions_interface)<!-- -->; telemetryOptions?: [TelemetryOptions](./telemetry_.telemetryoptions.md#telemetryoptions_interface)<!-- -->; } | |
4149

4250
<b>Returns:</b>
4351

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
Project: /docs/reference/js/_project.yaml
2+
Book: /docs/reference/_book.yaml
3+
page_type: reference
4+
5+
{% comment %}
6+
DO NOT EDIT THIS FILE!
7+
This is generated by the JS SDK team, and any local changes will be
8+
overwritten. Changes should be made in the source code at
9+
https://github.com/firebase/firebase-js-sdk
10+
{% endcomment %}
11+
12+
# Telemetry interface
13+
An instance of the Firebase Telemetry SDK.
14+
15+
Do not create this instance directly. Instead, use [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6)<!-- -->.
16+
17+
<b>Signature:</b>
18+
19+
```typescript
20+
export interface Telemetry
21+
```
22+
23+
## Properties
24+
25+
| Property | Type | Description |
26+
| --- | --- | --- |
27+
| [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. |
28+
| [loggerProvider](./telemetry_react.telemetry.md#telemetryloggerprovider) | LoggerProvider | The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses. |
29+
30+
## Telemetry.app
31+
32+
The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance is associated with.
33+
34+
<b>Signature:</b>
35+
36+
```typescript
37+
app: FirebaseApp;
38+
```
39+
40+
## Telemetry.loggerProvider
41+
42+
The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses.
43+
44+
<b>Signature:</b>
45+
46+
```typescript
47+
loggerProvider: LoggerProvider;
48+
```
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
Project: /docs/reference/js/_project.yaml
2+
Book: /docs/reference/_book.yaml
3+
page_type: reference
4+
5+
{% comment %}
6+
DO NOT EDIT THIS FILE!
7+
This is generated by the JS SDK team, and any local changes will be
8+
overwritten. Changes should be made in the source code at
9+
https://github.com/firebase/firebase-js-sdk
10+
{% endcomment %}
11+
12+
# TelemetryOptions interface
13+
Options for initialized the Telemetry service using [getTelemetry()](./telemetry_.md#gettelemetry_448bdc6)<!-- -->.
14+
15+
<b>Signature:</b>
16+
17+
```typescript
18+
export interface TelemetryOptions
19+
```
20+
21+
## Properties
22+
23+
| Property | Type | Description |
24+
| --- | --- | --- |
25+
| [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. |
26+
27+
## TelemetryOptions.endpointUrl
28+
29+
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.
30+
31+
<b>Signature:</b>
32+
33+
```typescript
34+
endpointUrl?: string;
35+
```

packages/telemetry/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
},
8383
"license": "Apache-2.0",
8484
"devDependencies": {
85-
"@firebase/app": "0.14.2",
85+
"@firebase/app": "0.14.3",
8686
"@opentelemetry/sdk-trace-web": "2.1.0",
8787
"@rollup/plugin-json": "6.1.0",
8888
"@testing-library/dom": "10.4.1",

0 commit comments

Comments
 (0)