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.
This commit is contained in:
paseo-bot[bot]
2026-11-02 00:06:18 +00:00
parent 2d864df02e
commit 1e1814def0
3 changed files with 18 additions and 9 deletions
+4 -1
View File
@@ -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));
@@ -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, {
@@ -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<void> {