From 1e1814def023e12090e39c37d5cd67b07ec49dd0 Mon Sep 17 00:00:00 2001 From: "paseo-bot[bot]" <266920839+paseo-bot[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2026 00:06:18 +0000 Subject: [PATCH] refactor(push): name notification sender dependencies Use an options object for the logger, token revocation callback, and HTTP transport while retaining native fetch by default. --- packages/server/src/server/push/index.ts | 5 ++++- .../server/src/server/push/push-service.test.ts | 6 +++++- packages/server/src/server/push/push-service.ts | 16 +++++++++------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/server/src/server/push/index.ts b/packages/server/src/server/push/index.ts index 3f1a8e0900..c764da2e65 100644 --- a/packages/server/src/server/push/index.ts +++ b/packages/server/src/server/push/index.ts @@ -23,7 +23,10 @@ export function createPushNotifications(options: { }): PushNotifications { const now = options.now ?? Date.now; const store = new PushTokenStore(options.logger, options.filePath, now, PUSH_TOKEN_LEASE_MS); - const service = new PushService(options.logger, (token) => store.revokeToken(token)); + const service = new PushService({ + logger: options.logger, + revokeToken: (token) => store.revokeToken(token), + }); const deliver = options.deliver ?? ((tokens: string[], payload: PushPayload) => service.sendPush(tokens, payload)); diff --git a/packages/server/src/server/push/push-service.test.ts b/packages/server/src/server/push/push-service.test.ts index da6887941c..7094c02241 100644 --- a/packages/server/src/server/push/push-service.test.ts +++ b/packages/server/src/server/push/push-service.test.ts @@ -13,7 +13,11 @@ describe("PushService", () => { JSON.stringify({ data: messages.map(() => ({ status: "ok", id: "ticket" })) }), ); }; - const service = new PushService(pino({ level: "silent" }), () => undefined, sendRequest); + const service = new PushService({ + logger: pino({ level: "silent" }), + revokeToken: () => undefined, + sendRequest, + }); const tokens = Array.from({ length: 101 }, (_, index) => `ExponentPushToken[device-${index}]`); await service.sendPush(tokens, { diff --git a/packages/server/src/server/push/push-service.ts b/packages/server/src/server/push/push-service.ts index 6002807210..2ef0c3988d 100644 --- a/packages/server/src/server/push/push-service.ts +++ b/packages/server/src/server/push/push-service.ts @@ -32,14 +32,16 @@ const MAX_BATCH_SIZE = 100; export class PushService { private readonly logger: pino.Logger; private readonly revokeToken: (token: string) => void; + private readonly sendRequest: typeof fetch; - constructor( - logger: pino.Logger, - revokeToken: (token: string) => void, - private readonly sendRequest: typeof fetch = fetch, - ) { - this.logger = logger.child({ component: "push-service" }); - this.revokeToken = revokeToken; + constructor(options: { + logger: pino.Logger; + revokeToken: (token: string) => void; + sendRequest?: typeof fetch; + }) { + this.logger = options.logger.child({ component: "push-service" }); + this.revokeToken = options.revokeToken; + this.sendRequest = options.sendRequest ?? fetch; } async sendPush(tokens: string[], payload: PushPayload): Promise {