Skip to content

Commit f1a57d0

Browse files
authored
Don't delete on update failure (#8141)
* Don't delete on update failure * update * Update cyan-rats-itch.md
1 parent fe09d83 commit f1a57d0

File tree

3 files changed

+17
-22
lines changed

3 files changed

+17
-22
lines changed

.changeset/cyan-rats-itch.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@firebase/messaging': patch
3+
---
4+
5+
Revised token update logic to keep existing tokens during update failures, preventing unnecessary deletions for transient issues.

packages/messaging/src/internals/token-manager.test.ts

+12-21
Original file line numberDiff line numberDiff line change
@@ -128,38 +128,29 @@ describe('Token Manager', () => {
128128
expect(tokenFromDb).to.deep.equal(expectedTokenDetails);
129129
});
130130

131-
it('deletes the token if the update fails', async () => {
131+
it('retains the token upon update failure due to potential server error, allowing for future update attempts', async () => {
132132
// Arrange
133-
// Change create time to be older than a week.
134-
tokenDetails.createTime = Date.now() - 8 * 24 * 60 * 60 * 1000; // 8 days
135-
133+
tokenDetails.createTime = Date.now() - 8 * 24 * 60 * 60 * 1000; // 8 days ago, triggering an update
136134
await dbSet(messaging.firebaseDependencies, tokenDetails);
137-
138-
requestUpdateTokenStub.rejects(new Error('Update failed.'));
135+
requestUpdateTokenStub.rejects(new Error('Temporary server error'));
139136

140137
// Act
141138
await expect(getTokenInternal(messaging)).to.be.rejectedWith(
142-
'Update failed.'
139+
'Temporary server error'
143140
);
144141

145142
// Assert
146-
const expectedTokenDetails: TokenDetails = {
147-
...tokenDetails,
148-
createTime: Date.now()
149-
};
143+
expect(requestUpdateTokenStub).to.have.been.called;
144+
expect(requestDeleteTokenStub).not.to.have.been.called; // Verify delete was not called
150145

151-
expect(requestGetTokenStub).not.to.have.been.called;
152-
expect(requestUpdateTokenStub).to.have.been.calledOnceWith(
153-
messaging.firebaseDependencies,
154-
expectedTokenDetails
155-
);
156-
expect(requestDeleteTokenStub).to.have.been.calledOnceWith(
157-
messaging.firebaseDependencies,
158-
tokenDetails.token
159-
);
146+
// Reasoning documentation
147+
// This test ensures that the token is not deleted upon an update failure,
148+
// recognizing that such failures may be temporary server-side issues.
149+
// By not deleting the token, we allow the system to retry the update in the future,
150+
// avoiding unnecessary token churn and preserving continuity for the user.
160151

161152
const tokenFromDb = await dbGet(messaging.firebaseDependencies);
162-
expect(tokenFromDb).to.be.undefined;
153+
expect(tokenFromDb).to.not.be.null; // Ensure the token still exists
163154
});
164155
});
165156

packages/messaging/src/internals/token-manager.ts

-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ async function updateToken(
127127
await dbSet(messaging.firebaseDependencies, updatedTokenDetails);
128128
return updatedToken;
129129
} catch (e) {
130-
await deleteTokenInternal(messaging);
131130
throw e;
132131
}
133132
}

0 commit comments

Comments
 (0)