Skip to content

Commit f476c05

Browse files
committed
Provide installations package via getProvider
1 parent b53ab4c commit f476c05

File tree

4 files changed

+28
-13
lines changed

4 files changed

+28
-13
lines changed

packages/telemetry/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@
7171
"peerDependencies": {
7272
"@firebase/app": "0.x",
7373
"@firebase/app-types": "0.x",
74-
"@firebase/installations": "0.x",
7574
"@types/react": "17.x || 18.x || 19.x",
7675
"react": "17.x || 18.x || 19.x"
7776
},
@@ -91,6 +90,7 @@
9190
},
9291
"dependencies": {
9392
"@firebase/component": "0.7.0",
93+
"@firebase/installations": "0.6.19",
9494
"@opentelemetry/api": "1.9.0",
9595
"@opentelemetry/api-logs": "0.203.0",
9696
"@opentelemetry/exporter-logs-otlp-http": "0.203.0",

packages/telemetry/src/api.test.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@ import { FirebaseAppCheckInternal } from '@firebase/app-check-interop-types';
3737
import { captureError, flush, getTelemetry } from './api';
3838
import { TelemetryService } from './service';
3939
import { registerTelemetry } from './register';
40+
import { _FirebaseInstallationsInternal } from '@firebase/installations';
4041

4142
const PROJECT_ID = 'my-project';
4243
const APP_ID = 'my-appid';
44+
const API_KEY = 'my-api-key';
45+
const FID = 'fid-1234';
4346

4447
const emittedLogs: LogRecord[] = [];
4548

@@ -68,7 +71,7 @@ const fakeTelemetry: Telemetry = {
6871
}
6972
},
7073
loggerProvider: fakeLoggerProvider,
71-
fid: 'fid-1234'
74+
fid: FID
7275
};
7376

7477
describe('Top level API', () => {
@@ -124,7 +127,7 @@ describe('Top level API', () => {
124127
expect(log.severityNumber).to.equal(SeverityNumber.ERROR);
125128
expect(log.body).to.equal('This is a test error');
126129
expect(log.attributes).to.deep.equal({
127-
'user.id': 'fid-1234',
130+
'user.id': FID,
128131
'error.type': 'TestError',
129132
'error.stack': '...stack trace...',
130133
'app.version': 'unset'
@@ -142,7 +145,7 @@ describe('Top level API', () => {
142145
expect(log.severityNumber).to.equal(SeverityNumber.ERROR);
143146
expect(log.body).to.equal('error with no stack');
144147
expect(log.attributes).to.deep.equal({
145-
'user.id': 'fid-1234',
148+
'user.id': FID,
146149
'error.type': 'Error',
147150
'error.stack': 'No stack trace available',
148151
'app.version': 'unset'
@@ -194,7 +197,7 @@ describe('Top level API', () => {
194197
await provider.shutdown();
195198

196199
expect(emittedLogs[0].attributes).to.deep.equal({
197-
'user.id': 'fid-1234',
200+
'user.id': FID,
198201
'error.type': 'TestError',
199202
'error.stack': '...stack trace...',
200203
'app.version': 'unset',
@@ -220,7 +223,7 @@ describe('Top level API', () => {
220223
expect(emittedLogs.length).to.equal(1);
221224
const log = emittedLogs[0];
222225
expect(log.attributes).to.deep.equal({
223-
'user.id': 'fid-1234',
226+
'user.id': FID,
224227
'error.type': 'TestError',
225228
'error.stack': '...stack trace...',
226229
'app.version': 'unset',
@@ -272,10 +275,10 @@ function getFakeApp(): FirebaseApp {
272275
new Component(
273276
'installations-internal',
274277
() => ({
275-
getId: () => Promise.resolve('fid-1234'),
276-
getToken: () => Promise.resolve('token-5678')
277-
}),
278-
ComponentType.PRIVATE
278+
getId: async () => 'FID',
279+
getToken: async () => 'authToken'
280+
}) as _FirebaseInstallationsInternal,
281+
ComponentType.PUBLIC
279282
)
280283
);
281284
_registerComponent(
@@ -287,7 +290,11 @@ function getFakeApp(): FirebaseApp {
287290
ComponentType.PUBLIC
288291
)
289292
);
290-
const app = initializeApp({});
293+
const app = initializeApp({
294+
projectId: PROJECT_ID,
295+
appId: APP_ID,
296+
apiKey: API_KEY
297+
});
291298
_addOrOverwriteComponent(
292299
app,
293300
//@ts-ignore

packages/telemetry/src/register.node.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ import { TELEMETRY_TYPE } from './constants';
2121
import { name, version } from '../package.json';
2222
import { TelemetryService } from './service';
2323
import { createLoggerProvider } from './logging/logger-provider';
24+
// This needs to be in the same file that calls `getProvider()` on the component
25+
// or it will get tree-shaken out.
26+
import '@firebase/installations';
2427

2528
export function registerTelemetry(): void {
2629
_registerComponent(
@@ -36,9 +39,10 @@ export function registerTelemetry(): void {
3639

3740
// getImmediate for FirebaseApp will always succeed
3841
const app = container.getProvider('app').getImmediate();
42+
const installationsProvider = container.getProvider('installations-internal').getImmediate();
3943
const loggerProvider = createLoggerProvider(app, endpointUrl);
4044

41-
return new TelemetryService(app, loggerProvider);
45+
return new TelemetryService(app, installationsProvider, loggerProvider);
4246
},
4347
ComponentType.PUBLIC
4448
).setMultipleInstances(true)

packages/telemetry/src/register.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ import { name, version } from '../package.json';
2222
import { TelemetryService } from './service';
2323
import { createLoggerProvider } from './logging/logger-provider';
2424
import { AppCheckProvider } from './logging/appcheck-provider';
25+
// This needs to be in the same file that calls `getProvider()` on the component
26+
// or it will get tree-shaken out.
27+
import '@firebase/installations';
2528

2629
export function registerTelemetry(): void {
2730
_registerComponent(
@@ -38,14 +41,15 @@ export function registerTelemetry(): void {
3841
// getImmediate for FirebaseApp will always succeed
3942
const app = container.getProvider('app').getImmediate();
4043
const appCheckProvider = container.getProvider('app-check-internal');
44+
const installationsProvider = container.getProvider('installations-internal').getImmediate();
4145
const dynamicHeaderProviders = [new AppCheckProvider(appCheckProvider)];
4246
const loggerProvider = createLoggerProvider(
4347
app,
4448
endpointUrl,
4549
dynamicHeaderProviders
4650
);
4751

48-
return new TelemetryService(app, loggerProvider);
52+
return new TelemetryService(app, installationsProvider, loggerProvider);
4953
},
5054
ComponentType.PUBLIC
5155
).setMultipleInstances(true)

0 commit comments

Comments
 (0)