This commit is contained in:
binwiederhier
2026-07-08 22:42:42 +02:00
parent 08d81a3645
commit 6869d166ae
18 changed files with 50 additions and 42 deletions
+2 -2
View File
@@ -65,7 +65,7 @@ describe("AccountApi.create", () => {
await accountApi.create("phil", "pw");
expect(fetchMock).toHaveBeenCalledWith(
"https://ntfy.sh/v1/account",
expect.objectContaining({ method: "POST", body: JSON.stringify({ username: "phil", password: "pw", email: "" }) })
expect.objectContaining({ method: "POST", body: JSON.stringify({ username: "phil", password: "pw", email: "" }) }),
);
});
});
@@ -195,7 +195,7 @@ describe("AccountApi.sync", () => {
notification: { sound: "ding", delete_after: 3600, min_priority: 3 },
subscriptions: [{ topic: "t" }],
reservations: [{ topic: "t" }],
})
}),
);
await accountApi.sync();
+3 -3
View File
@@ -57,7 +57,7 @@ describe("Api.publish", () => {
expect.objectContaining({
method: "PUT",
body: JSON.stringify({ topic: "mytopic", message: "Hello", priority: 5, tags: ["warning"] }),
})
}),
);
});
@@ -109,7 +109,7 @@ describe("Api web push", () => {
expect.objectContaining({
method: "POST",
body: JSON.stringify({ endpoint: "https://push.example/abc", auth: "AUTH", p256dh: "P256", topics: ["topicA", "topicB"] }),
})
}),
);
});
@@ -121,7 +121,7 @@ describe("Api web push", () => {
expect.objectContaining({
method: "DELETE",
body: JSON.stringify({ endpoint: "https://push.example/abc" }),
})
}),
);
});
});
+1 -1
View File
@@ -67,7 +67,7 @@ class Connection {
this.ws.onclose = (event) => {
if (event.wasClean) {
console.log(
`[Connection, ${this.shortUrl}, ${this.connectionId}] Connection closed cleanly, code=${event.code} reason=${event.reason}`
`[Connection, ${this.shortUrl}, ${this.connectionId}] Connection closed cleanly, code=${event.code} reason=${event.reason}`,
);
this.ws = null;
} else {
+2 -2
View File
@@ -70,13 +70,13 @@ class ConnectionManager {
user,
since,
(subId, notification) => this.notificationReceived(subId, notification),
(subId, state) => this.stateChanged(subId, state)
(subId, state) => this.stateChanged(subId, state),
);
this.connections.set(connectionId, connection);
console.log(
`[ConnectionManager] Starting new connection ${connectionId} (subscription ${subscriptionId} with user ${
user ? user.username : "anonymous"
})`
})`,
);
connection.start();
}
+1 -1
View File
@@ -30,7 +30,7 @@ class Notifier {
topicRoute: new URL(routes.forSubscription(subscription), window.location.origin).toString(),
baseUrl: subscription.baseUrl,
topic: subscription.topic,
})
}),
);
}
+2 -2
View File
@@ -35,7 +35,7 @@ class Poller {
} catch (e) {
console.log(`[Poller] Error polling ${s.id}`, e);
}
})
}),
);
}
@@ -61,7 +61,7 @@ class Poller {
if (deletedSequenceIds.length > 0) {
console.log(`[Poller] Deleting notifications with deleted sequence IDs for ${subscription.id}`, deletedSequenceIds);
await Promise.all(
deletedSequenceIds.map((sequenceId) => subscriptionManager.deleteNotificationBySequenceId(subscription.id, sequenceId))
deletedSequenceIds.map((sequenceId) => subscriptionManager.deleteNotificationBySequenceId(subscription.id, sequenceId)),
);
}
+4 -4
View File
@@ -18,7 +18,7 @@ export class SubscriptionManager {
subscriptions.map(async (s) => ({
...s,
new: await this.db.notifications.where({ subscriptionId: s.id, new: 1 }).count(),
}))
})),
);
}
@@ -122,7 +122,7 @@ export class SubscriptionManager {
});
return local.id;
})
}),
);
// Remove local subscriptions that do not exist remotely
@@ -134,7 +134,7 @@ export class SubscriptionManager {
if (!local.internal && !remoteExists) {
await this.remove(local);
}
})
}),
);
}
@@ -144,7 +144,7 @@ export class SubscriptionManager {
if (!browserSubscription) {
console.log(
"[SubscriptionManager] No browser subscription currently exists, so web push was never enabled or the notification permission was removed. Skipping."
"[SubscriptionManager] No browser subscription currently exists, so web push was never enabled or the notification permission was removed. Skipping.",
);
return;
}
+3 -3
View File
@@ -56,7 +56,7 @@ describe("throwAppError", () => {
await expect(throwAppError(fakeResponse(409, { code: UserExistsError.CODE }))).rejects.toBeInstanceOf(UserExistsError);
await expect(throwAppError(fakeResponse(409, { code: TopicReservedError.CODE }))).rejects.toBeInstanceOf(TopicReservedError);
await expect(throwAppError(fakeResponse(429, { code: AccountActionLimitReachedError.CODE }))).rejects.toBeInstanceOf(
AccountActionLimitReachedError
AccountActionLimitReachedError,
);
});
@@ -78,7 +78,7 @@ describe("fetchOrThrow", () => {
const response = { status: 200 };
vi.stubGlobal(
"fetch",
vi.fn(async () => response)
vi.fn(async () => response),
);
await expect(fetchOrThrow("https://ntfy.sh/mytopic/json")).resolves.toBe(response);
});
@@ -86,7 +86,7 @@ describe("fetchOrThrow", () => {
it("throws on a non-200 response", async () => {
vi.stubGlobal(
"fetch",
vi.fn(async () => fakeResponse(401))
vi.fn(async () => fakeResponse(401)),
);
await expect(fetchOrThrow("https://ntfy.sh/mytopic/json")).rejects.toBeInstanceOf(UnauthorizedError);
});