Skip to content

Commit 303d844

Browse files
committed
Change userAgent field to agent
1 parent 46a3a0a commit 303d844

File tree

3 files changed

+32
-33
lines changed

3 files changed

+32
-33
lines changed

packages/app/src/heartbeatService.test.ts

+23-24
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import { FirebaseApp } from './public-types';
3232
import * as firebaseUtil from '@firebase/util';
3333
import { SinonStub, stub, useFakeTimers } from 'sinon';
3434
import * as indexedDb from './indexeddb';
35-
import { base64Encode, isIndexedDBAvailable } from '@firebase/util';
3635

3736
declare module '@firebase/component' {
3837
interface NameServiceMapping {
@@ -101,7 +100,7 @@ describe('HeartbeatServiceImpl', () => {
101100
await heartbeatService.triggerHeartbeat();
102101
expect(heartbeatService._heartbeatsCache?.heartbeats.length).to.equal(1);
103102
const heartbeat1 = heartbeatService._heartbeatsCache?.heartbeats[0];
104-
expect(heartbeat1?.userAgent).to.equal(USER_AGENT_STRING_1);
103+
expect(heartbeat1?.agent).to.equal(USER_AGENT_STRING_1);
105104
expect(heartbeat1?.date).to.equal('1970-01-01');
106105
expect(writeStub).to.be.calledWith({ heartbeats: [heartbeat1] });
107106
});
@@ -156,11 +155,11 @@ describe('HeartbeatServiceImpl', () => {
156155
const mockIndexedDBHeartbeats = [
157156
// Chosen so one will exceed 30 day limit and one will not.
158157
{
159-
userAgent: 'old-user-agent',
158+
agent: 'old-user-agent',
160159
date: '1969-12-01'
161160
},
162161
{
163-
userAgent: 'old-user-agent',
162+
agent: 'old-user-agent',
164163
date: '1969-12-31'
165164
}
166165
];
@@ -199,7 +198,7 @@ describe('HeartbeatServiceImpl', () => {
199198
*/
200199
it(`new heartbeat service reads from indexedDB cache`, async () => {
201200
const promiseResult = await heartbeatService._heartbeatsCachePromise;
202-
if (isIndexedDBAvailable()) {
201+
if (firebaseUtil.isIndexedDBAvailable()) {
203202
expect(promiseResult).to.deep.equal({
204203
heartbeats: mockIndexedDBHeartbeats
205204
});
@@ -221,25 +220,25 @@ describe('HeartbeatServiceImpl', () => {
221220
userAgentString = USER_AGENT_STRING_2;
222221
clock.tick(3 * 24 * 60 * 60 * 1000);
223222
await heartbeatService.triggerHeartbeat();
224-
if (isIndexedDBAvailable()) {
223+
if (firebaseUtil.isIndexedDBAvailable()) {
225224
expect(writeStub).to.be.calledWith({
226225
heartbeats: [
227226
// The first entry exceeds the 30 day retention limit.
228227
mockIndexedDBHeartbeats[1],
229-
{ userAgent: USER_AGENT_STRING_2, date: '1970-01-04' }
228+
{ agent: USER_AGENT_STRING_2, date: '1970-01-04' }
230229
]
231230
});
232231
} else {
233232
expect(writeStub).to.be.calledWith({
234-
heartbeats: [{ userAgent: USER_AGENT_STRING_2, date: '1970-01-04' }]
233+
heartbeats: [{ agent: USER_AGENT_STRING_2, date: '1970-01-04' }]
235234
});
236235
}
237236
});
238237
it('getHeartbeatHeaders() gets stored heartbeats and clears heartbeats', async () => {
239238
const heartbeatHeaders = firebaseUtil.base64Decode(
240239
await heartbeatService.getHeartbeatsHeader()
241240
);
242-
if (isIndexedDBAvailable()) {
241+
if (firebaseUtil.isIndexedDBAvailable()) {
243242
expect(heartbeatHeaders).to.include('old-user-agent');
244243
expect(heartbeatHeaders).to.include('1969-12-31');
245244
}
@@ -263,11 +262,11 @@ describe('HeartbeatServiceImpl', () => {
263262
const mockIndexedDBHeartbeats = [
264263
// Chosen so one will exceed 30 day limit and one will not.
265264
{
266-
userAgent: 'old-user-agent',
265+
agent: 'old-user-agent',
267266
date: '1969-12-01'
268267
},
269268
{
270-
userAgent: 'old-user-agent',
269+
agent: 'old-user-agent',
271270
date: '1969-12-31'
272271
}
273272
];
@@ -303,7 +302,7 @@ describe('HeartbeatServiceImpl', () => {
303302
});
304303
it(`new heartbeat service reads from indexedDB cache`, async () => {
305304
const promiseResult = await heartbeatService._heartbeatsCachePromise;
306-
if (isIndexedDBAvailable()) {
305+
if (firebaseUtil.isIndexedDBAvailable()) {
307306
expect(promiseResult).to.deep.equal({
308307
lastSentHeartbeatDate: '1970-01-01',
309308
heartbeats: mockIndexedDBHeartbeats
@@ -326,7 +325,7 @@ describe('HeartbeatServiceImpl', () => {
326325
it(`triggerHeartbeat() will skip storing new data`, async () => {
327326
await heartbeatService.triggerHeartbeat();
328327
expect(writeStub).to.not.be.called;
329-
if (isIndexedDBAvailable()) {
328+
if (firebaseUtil.isIndexedDBAvailable()) {
330329
expect(heartbeatService._heartbeatsCache?.heartbeats).to.deep.equal(
331330
mockIndexedDBHeartbeats
332331
);
@@ -337,11 +336,11 @@ describe('HeartbeatServiceImpl', () => {
337336
describe('countBytes()', () => {
338337
it('counts how many bytes there will be in a stringified, encoded header', () => {
339338
const heartbeats = [
340-
{ userAgent: generateUserAgentString(1), dates: generateDates(1) },
341-
{ userAgent: generateUserAgentString(3), dates: generateDates(2) }
339+
{ agent: generateUserAgentString(1), dates: generateDates(1) },
340+
{ agent: generateUserAgentString(3), dates: generateDates(2) }
342341
];
343342
let size: number = 0;
344-
const headerString = base64Encode(
343+
const headerString = firebaseUtil.base64urlEncodeWithoutPadding(
345344
JSON.stringify({ version: 2, heartbeats })
346345
);
347346
// Use independent methods to validate our byte count method matches.
@@ -362,7 +361,7 @@ describe('HeartbeatServiceImpl', () => {
362361
describe('_extractHeartbeatsForHeader()', () => {
363362
it('returns empty heartbeatsToKeep if it cannot get under maxSize', () => {
364363
const heartbeats = [
365-
{ userAgent: generateUserAgentString(1), date: '2022-01-01' }
364+
{ agent: generateUserAgentString(1), date: '2022-01-01' }
366365
];
367366
const { unsentEntries, heartbeatsToSend } = extractHeartbeatsForHeader(
368367
heartbeats,
@@ -373,11 +372,11 @@ describe('HeartbeatServiceImpl', () => {
373372
});
374373
it('splits heartbeats array', () => {
375374
const heartbeats = [
376-
{ userAgent: generateUserAgentString(20), date: '2022-01-01' },
377-
{ userAgent: generateUserAgentString(4), date: '2022-01-02' }
375+
{ agent: generateUserAgentString(20), date: '2022-01-01' },
376+
{ agent: generateUserAgentString(4), date: '2022-01-02' }
378377
];
379378
const sizeWithHeartbeat0Only = countBytes([
380-
{ userAgent: heartbeats[0].userAgent, dates: [heartbeats[0].date] }
379+
{ agent: heartbeats[0].agent, dates: [heartbeats[0].date] }
381380
]);
382381
const { unsentEntries, heartbeatsToSend } = extractHeartbeatsForHeader(
383382
heartbeats,
@@ -389,12 +388,12 @@ describe('HeartbeatServiceImpl', () => {
389388
it('splits the first heartbeat if needed', () => {
390389
const uaString = generateUserAgentString(20);
391390
const heartbeats = [
392-
{ userAgent: uaString, date: '2022-01-01' },
393-
{ userAgent: uaString, date: '2022-01-02' },
394-
{ userAgent: uaString, date: '2022-01-03' }
391+
{ agent: uaString, date: '2022-01-01' },
392+
{ agent: uaString, date: '2022-01-02' },
393+
{ agent: uaString, date: '2022-01-03' }
395394
];
396395
const sizeWithHeartbeat0Only = countBytes([
397-
{ userAgent: heartbeats[0].userAgent, dates: [heartbeats[0].date] }
396+
{ agent: heartbeats[0].agent, dates: [heartbeats[0].date] }
398397
]);
399398
const { unsentEntries, heartbeatsToSend } = extractHeartbeatsForHeader(
400399
heartbeats,

packages/app/src/heartbeatService.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import { ComponentContainer } from '@firebase/component';
1919
import {
20-
base64Encode,
20+
base64urlEncodeWithoutPadding,
2121
isIndexedDBAvailable,
2222
validateIndexedDBOpenable
2323
} from '@firebase/util';
@@ -86,7 +86,7 @@ export class HeartbeatServiceImpl implements HeartbeatService {
8686

8787
// This is the "Firebase user agent" string from the platform logger
8888
// service, not the browser user agent.
89-
const userAgent = platformLogger.getPlatformInfoString();
89+
const agent = platformLogger.getPlatformInfoString();
9090
const date = getUTCDateString();
9191
if (this._heartbeatsCache === null) {
9292
this._heartbeatsCache = await this._heartbeatsCachePromise;
@@ -102,7 +102,7 @@ export class HeartbeatServiceImpl implements HeartbeatService {
102102
return;
103103
} else {
104104
// There is no entry for this date. Create one.
105-
this._heartbeatsCache.heartbeats.push({ date, userAgent });
105+
this._heartbeatsCache.heartbeats.push({ date, agent });
106106
}
107107
// Remove entries older than 30 days.
108108
this._heartbeatsCache.heartbeats = this._heartbeatsCache.heartbeats.filter(
@@ -138,7 +138,7 @@ export class HeartbeatServiceImpl implements HeartbeatService {
138138
const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(
139139
this._heartbeatsCache.heartbeats
140140
);
141-
const headerString = base64Encode(
141+
const headerString = base64urlEncodeWithoutPadding(
142142
JSON.stringify({ version: 2, heartbeats: heartbeatsToSend })
143143
);
144144
// Store last sent date to prevent another being logged/sent for the same day.
@@ -180,12 +180,12 @@ export function extractHeartbeatsForHeader(
180180
for (const singleDateHeartbeat of heartbeatsCache) {
181181
// Look for an existing entry with the same user agent.
182182
const heartbeatEntry = heartbeatsToSend.find(
183-
hb => hb.userAgent === singleDateHeartbeat.userAgent
183+
hb => hb.agent === singleDateHeartbeat.agent
184184
);
185185
if (!heartbeatEntry) {
186186
// If no entry for this user agent exists, create one.
187187
heartbeatsToSend.push({
188-
userAgent: singleDateHeartbeat.userAgent,
188+
agent: singleDateHeartbeat.agent,
189189
dates: [singleDateHeartbeat.date]
190190
});
191191
if (countBytes(heartbeatsToSend) > maxSize) {
@@ -281,7 +281,7 @@ export class HeartbeatStorageImpl implements HeartbeatStorage {
281281
*/
282282
export function countBytes(heartbeatsCache: HeartbeatsByUserAgent[]): number {
283283
// base64 has a restricted set of characters, all of which should be 1 byte.
284-
return base64Encode(
284+
return base64urlEncodeWithoutPadding(
285285
// heartbeatsCache wrapper properties
286286
JSON.stringify({ version: 2, heartbeats: heartbeatsCache })
287287
).length;

packages/app/src/types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ export interface HeartbeatService {
4242

4343
// Heartbeats grouped by the same user agent string
4444
export interface HeartbeatsByUserAgent {
45-
userAgent: string;
45+
agent: string;
4646
dates: string[];
4747
}
4848

4949
export interface SingleDateHeartbeat {
50-
userAgent: string;
50+
agent: string;
5151
date: string;
5252
}
5353

0 commit comments

Comments
 (0)