Skip to content

Commit 61b0acf

Browse files
authored
React error collection support (#9269)
* WIP react support * WIP react support with sub-package * Fix package structure; capture client errors * Implement and test FirebaseTelemetry component * docgen * Refactor to use React component function * Fixed API extraction for subpath * Format * Fix declaration file * Fix public typings * Fix public typings * Fix public typings
1 parent bf4ea2c commit 61b0acf

19 files changed

+664
-158
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
## API Report File for "@firebase/telemetry-react"
2+
3+
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4+
5+
```ts
6+
7+
import { FirebaseOptions } from '@firebase/app';
8+
9+
// @public
10+
export function FirebaseTelemetry({ firebaseOptions }: {
11+
firebaseOptions?: FirebaseOptions;
12+
}): null;
13+
14+
15+
// (No @packageDocumentation comment for this package)
16+
17+
```

common/api-review/telemetry.api.md

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import { AnyValueMap } from '@opentelemetry/api-logs';
88
import { FirebaseApp } from '@firebase/app';
9+
import { Instrumentation } from 'next';
910
import { LoggerProvider } from '@opentelemetry/sdk-logs';
1011

1112
// @public
@@ -17,13 +18,7 @@ export function flush(telemetry: Telemetry): Promise<void>;
1718
// @public
1819
export function getTelemetry(app?: FirebaseApp): Telemetry;
1920

20-
// @public (undocumented)
21-
export namespace Instrumentation {
22-
// Warning: (ae-forgotten-export) The symbol "InstrumentationOnRequestError" needs to be exported by the entry point index.d.ts
23-
//
24-
// (undocumented)
25-
export type onRequestError = InstrumentationOnRequestError;
26-
}
21+
export { Instrumentation }
2722

2823
// @public
2924
export const nextOnRequestError: Instrumentation.onRequestError;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
## API Report File for "@firebase/telemetry/react"
2+
3+
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4+
5+
```ts
6+
7+
import { FirebaseOptions } from '@firebase/app';
8+
9+
// @public
10+
export function FirebaseTelemetry({ firebaseOptions }: {
11+
firebaseOptions?: FirebaseOptions;
12+
}): null;
13+
14+
15+
// (No @packageDocumentation comment for this package)
16+
17+
```

config/webpack.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ module.exports = {
9494
resolve: {
9595
modules: ['node_modules', path.resolve(__dirname, '../../node_modules')],
9696
mainFields: ['browser', 'module', 'main'],
97-
extensions: ['.js', '.ts'],
97+
extensions: ['.js', '.ts', '.tsx'],
9898
symlinks: true
9999
},
100100
plugins: [

docs-devsite/_toc.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,10 @@ toc:
687687
- title: UploadTaskSnapshot
688688
path: /docs/reference/js/storage.uploadtasksnapshot.md
689689
- title: telemetry
690-
path: /docs/reference/js/telemetry.md
690+
path: /docs/reference/js/telemetry_.md
691691
section:
692692
- title: Telemetry
693-
path: /docs/reference/js/telemetry.telemetry.md
693+
path: /docs/reference/js/telemetry_.telemetry.md
694+
- title: telemetry/react
695+
path: /docs/reference/js/telemetry_react.md
696+
section: []

docs-devsite/telemetry.md

Lines changed: 3 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -11,128 +11,8 @@ https://github.com/firebase/firebase-js-sdk
1111

1212
# telemetry package
1313

14-
## Functions
15-
16-
| Function | Description |
17-
| --- | --- |
18-
| <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. |
20-
| <b>function(telemetry, ...)</b> |
21-
| [captureError(telemetry, error, attributes)](./telemetry.md#captureerror_862e6b3) | Enqueues an error to be uploaded to the Firebase Telemetry API. |
22-
| [flush(telemetry)](./telemetry.md#flush_8975134) | Flushes all enqueued telemetry data immediately, instead of waiting for default batching. |
23-
24-
## Interfaces
25-
26-
| Interface | Description |
27-
| --- | --- |
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)<!-- -->. |
29-
30-
## Namespaces
31-
32-
| Namespace | Description |
14+
| Entry Point | Description |
3315
| --- | --- |
34-
| [Instrumentation](./telemetry.instrumentation.md#instrumentation_namespace) | |
35-
36-
## Variables
37-
38-
| Variable | Description |
39-
| --- | --- |
40-
| [nextOnRequestError](./telemetry.md#nextonrequesterror) | Automatically report uncaught errors from server routes to Firebase Telemetry. |
41-
42-
## function(app, ...)
43-
44-
### getTelemetry(app) {:#gettelemetry_cf608e1}
45-
46-
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.
47-
48-
<b>Signature:</b>
49-
50-
```typescript
51-
export declare function getTelemetry(app?: FirebaseApp): Telemetry;
52-
```
53-
54-
#### Parameters
55-
56-
| Parameter | Type | Description |
57-
| --- | --- | --- |
58-
| app | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) to use. |
59-
60-
<b>Returns:</b>
61-
62-
[Telemetry](./telemetry.telemetry.md#telemetry_interface)
63-
64-
The default [Telemetry](./telemetry.telemetry.md#telemetry_interface) instance for the given [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface)<!-- -->.
65-
66-
### Example
67-
68-
69-
```javascript
70-
const telemetry = getTelemetry(app);
71-
72-
```
73-
74-
## function(telemetry, ...)
75-
76-
### captureError(telemetry, error, attributes) {:#captureerror_862e6b3}
77-
78-
Enqueues an error to be uploaded to the Firebase Telemetry API.
79-
80-
<b>Signature:</b>
81-
82-
```typescript
83-
export declare function captureError(telemetry: Telemetry, error: unknown, attributes?: AnyValueMap): void;
84-
```
85-
86-
#### Parameters
87-
88-
| Parameter | Type | Description |
89-
| --- | --- | --- |
90-
| telemetry | [Telemetry](./telemetry.telemetry.md#telemetry_interface) | The [Telemetry](./telemetry.telemetry.md#telemetry_interface) instance. |
91-
| error | unknown | The caught exception, typically an |
92-
| attributes | AnyValueMap | = Optional, arbitrary attributes to attach to the error log |
93-
94-
<b>Returns:</b>
95-
96-
void
97-
98-
### flush(telemetry) {:#flush_8975134}
99-
100-
Flushes all enqueued telemetry data immediately, instead of waiting for default batching.
101-
102-
<b>Signature:</b>
103-
104-
```typescript
105-
export declare function flush(telemetry: Telemetry): Promise<void>;
106-
```
107-
108-
#### Parameters
109-
110-
| Parameter | Type | Description |
111-
| --- | --- | --- |
112-
| telemetry | [Telemetry](./telemetry.telemetry.md#telemetry_interface) | The [Telemetry](./telemetry.telemetry.md#telemetry_interface) instance. |
113-
114-
<b>Returns:</b>
115-
116-
Promise&lt;void&gt;
117-
118-
a promise which is resolved when all flushes are complete
119-
120-
## nextOnRequestError
121-
122-
Automatically report uncaught errors from server routes to Firebase Telemetry.
123-
124-
<b>Signature:</b>
125-
126-
```typescript
127-
nextOnRequestError: Instrumentation.onRequestError
128-
```
129-
130-
### Example
131-
132-
133-
```javascript
134-
// In instrumentation.ts (https://nextjs.org/docs/app/guides/instrumentation):
135-
export { nextOnRequestError as onRequestError } from 'firebase/telemetry'
136-
137-
```
16+
| [/](./telemetry_.md#@firebase/telemetry) | |
17+
| [/react](./telemetry_react.md#@firebase/telemetry/react) | |
13818

docs-devsite/telemetry.instrumentation.md renamed to docs-devsite/telemetry_.instrumentation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export declare namespace Instrumentation
2020
2121
| Type Alias | Description |
2222
| --- | --- |
23-
| [onRequestError](./telemetry.instrumentation.md#instrumentationonrequesterror) | |
23+
| [onRequestError](./telemetry_.instrumentation.md#instrumentationonrequesterror) | |
2424
2525
## Instrumentation.onRequestError
2626

docs-devsite/telemetry_.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
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+
# @firebase/telemetry
13+
14+
## Functions
15+
16+
| Function | Description |
17+
| --- | --- |
18+
| <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. |
20+
| <b>function(telemetry, ...)</b> |
21+
| [captureError(telemetry, error, attributes)](./telemetry_.md#captureerror_862e6b3) | Enqueues an error to be uploaded to the Firebase Telemetry API. |
22+
| [flush(telemetry)](./telemetry_.md#flush_8975134) | Flushes all enqueued telemetry data immediately, instead of waiting for default batching. |
23+
24+
## Interfaces
25+
26+
| Interface | Description |
27+
| --- | --- |
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)<!-- -->. |
29+
30+
## Namespaces
31+
32+
| Namespace | Description |
33+
| --- | --- |
34+
| [Instrumentation](./telemetry_.instrumentation.md#instrumentation_namespace) | |
35+
36+
## Variables
37+
38+
| Variable | Description |
39+
| --- | --- |
40+
| [nextOnRequestError](./telemetry_.md#nextonrequesterror) | Automatically report uncaught errors from server routes to Firebase Telemetry. |
41+
42+
## function(app, ...)
43+
44+
### getTelemetry(app) {:#gettelemetry_cf608e1}
45+
46+
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.
47+
48+
<b>Signature:</b>
49+
50+
```typescript
51+
export declare function getTelemetry(app?: FirebaseApp): Telemetry;
52+
```
53+
54+
#### Parameters
55+
56+
| Parameter | Type | Description |
57+
| --- | --- | --- |
58+
| app | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) to use. |
59+
60+
<b>Returns:</b>
61+
62+
[Telemetry](./telemetry_.telemetry.md#telemetry_interface)
63+
64+
The default [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance for the given [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface)<!-- -->.
65+
66+
### Example
67+
68+
69+
```javascript
70+
const telemetry = getTelemetry(app);
71+
72+
```
73+
74+
## function(telemetry, ...)
75+
76+
### captureError(telemetry, error, attributes) {:#captureerror_862e6b3}
77+
78+
Enqueues an error to be uploaded to the Firebase Telemetry API.
79+
80+
<b>Signature:</b>
81+
82+
```typescript
83+
export declare function captureError(telemetry: Telemetry, error: unknown, attributes?: AnyValueMap): void;
84+
```
85+
86+
#### Parameters
87+
88+
| Parameter | Type | Description |
89+
| --- | --- | --- |
90+
| telemetry | [Telemetry](./telemetry_.telemetry.md#telemetry_interface) | The [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance. |
91+
| error | unknown | The caught exception, typically an |
92+
| attributes | AnyValueMap | = Optional, arbitrary attributes to attach to the error log |
93+
94+
<b>Returns:</b>
95+
96+
void
97+
98+
### flush(telemetry) {:#flush_8975134}
99+
100+
Flushes all enqueued telemetry data immediately, instead of waiting for default batching.
101+
102+
<b>Signature:</b>
103+
104+
```typescript
105+
export declare function flush(telemetry: Telemetry): Promise<void>;
106+
```
107+
108+
#### Parameters
109+
110+
| Parameter | Type | Description |
111+
| --- | --- | --- |
112+
| telemetry | [Telemetry](./telemetry_.telemetry.md#telemetry_interface) | The [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance. |
113+
114+
<b>Returns:</b>
115+
116+
Promise&lt;void&gt;
117+
118+
a promise which is resolved when all flushes are complete
119+
120+
## nextOnRequestError
121+
122+
Automatically report uncaught errors from server routes to Firebase Telemetry.
123+
124+
<b>Signature:</b>
125+
126+
```typescript
127+
nextOnRequestError: Instrumentation.onRequestError
128+
```
129+
130+
### Example
131+
132+
133+
```javascript
134+
// In instrumentation.ts (https://nextjs.org/docs/app/guides/instrumentation):
135+
export { nextOnRequestError as onRequestError } from 'firebase/telemetry'
136+
137+
```
138+

docs-devsite/telemetry.telemetry.md renamed to docs-devsite/telemetry_.telemetry.md

Lines changed: 5 additions & 5 deletions
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_cf608e1)<!-- -->.
1616

1717
<b>Signature:</b>
1818

@@ -24,12 +24,12 @@ export interface Telemetry
2424

2525
| Property | Type | Description |
2626
| --- | --- | --- |
27-
| [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. |
28-
| [loggerProvider](./telemetry.telemetry.md#telemetryloggerprovider) | LoggerProvider | The this [Telemetry](./telemetry.telemetry.md#telemetry_interface) instance uses. |
27+
| [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. |
28+
| [loggerProvider](./telemetry_.telemetry.md#telemetryloggerprovider) | LoggerProvider | The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses. |
2929

3030
## Telemetry.app
3131

32-
The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](./telemetry.telemetry.md#telemetry_interface) instance is associated with.
32+
The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance is associated with.
3333

3434
<b>Signature:</b>
3535

@@ -39,7 +39,7 @@ app: FirebaseApp;
3939

4040
## Telemetry.loggerProvider
4141

42-
The this [Telemetry](./telemetry.telemetry.md#telemetry_interface) instance uses.
42+
The this [Telemetry](./telemetry_.telemetry.md#telemetry_interface) instance uses.
4343

4444
<b>Signature:</b>
4545

0 commit comments

Comments
 (0)