db.js 876 B

12345678910111213141516171819202122232425262728293031
  1. import Dexie from "dexie";
  2. import session from "./Session";
  3. // Uses Dexie.js
  4. // https://dexie.org/docs/API-Reference#quick-reference
  5. //
  6. // Notes:
  7. // - As per docs, we only declare the indexable columns, not all columns
  8. const createDatabase = (username) => {
  9. const dbName = username ? `ntfy-${username}` : "ntfy"; // IndexedDB database is based on the logged-in user
  10. const db = new Dexie(dbName);
  11. db.version(3).stores({
  12. subscriptions: "&id,baseUrl,[baseUrl+mutedUntil]",
  13. notifications: "&id,sid,subscriptionId,time,mtime,new,[subscriptionId+new]", // compound key for query performance
  14. users: "&baseUrl,username",
  15. prefs: "&key",
  16. });
  17. return db;
  18. };
  19. export const dbAsync = async () => {
  20. const username = await session.usernameAsync();
  21. return createDatabase(username);
  22. };
  23. const db = () => createDatabase(session.username());
  24. export default db;