nostr-idb 2.1.4 → 2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # nostr-idb
2
2
 
3
+ ## 2.1.5
4
+
5
+ ### Patch Changes
6
+
7
+ - Add timeout for subscriptions
8
+
3
9
  ## 2.1.4
4
10
 
5
11
  ### Patch Changes
@@ -34,6 +34,7 @@ export declare class RelayCore {
34
34
  private writeQueue;
35
35
  private indexCache;
36
36
  db: NostrIDB;
37
+ baseEoseTimeout: number;
37
38
  private subscriptions;
38
39
  constructor(db: NostrIDB, opts?: RelayCoreOptions);
39
40
  start(): Promise<void>;
@@ -27,6 +27,7 @@ export class RelayCore {
27
27
  writeQueue;
28
28
  indexCache;
29
29
  db;
30
+ baseEoseTimeout = 4400;
30
31
  subscriptions = new Map();
31
32
  constructor(db, opts = {}) {
32
33
  this.db = db;
@@ -86,26 +87,35 @@ export class RelayCore {
86
87
  log(`Running ${sub.id}`, sub.filters);
87
88
  // load any events from the write queue
88
89
  const eventsFromQueue = this.writeQueue.matchPending(sub.filters);
89
- // get events
90
- await getEventsForFilters(this.db, sub.filters, this.indexCache, this.eventMap).then((filterEvents) => {
91
- this.addToEventMaps(filterEvents);
92
- if (sub.onevent) {
93
- const idsFromQueue = new Set(eventsFromQueue.map((e) => e.id));
94
- const events = eventsFromQueue.length > 0
95
- ? [
96
- ...filterEvents.filter((e) => !idsFromQueue.has(e.id)),
97
- ...eventsFromQueue,
98
- ].sort(sortByDate)
99
- : filterEvents;
100
- for (const event of events) {
101
- sub.onevent(event);
102
- this.writeQueue.useEvent(event);
90
+ return new Promise((res, rej) => {
91
+ const timeout = setTimeout(() => {
92
+ if (sub.oneose)
93
+ sub.oneose();
94
+ res();
95
+ }, this.baseEoseTimeout);
96
+ // get events
97
+ getEventsForFilters(this.db, sub.filters, this.indexCache, this.eventMap).then((filterEvents) => {
98
+ clearTimeout(timeout);
99
+ this.addToEventMaps(filterEvents);
100
+ if (sub.onevent) {
101
+ const idsFromQueue = new Set(eventsFromQueue.map((e) => e.id));
102
+ const events = eventsFromQueue.length > 0
103
+ ? [
104
+ ...filterEvents.filter((e) => !idsFromQueue.has(e.id)),
105
+ ...eventsFromQueue,
106
+ ].sort(sortByDate)
107
+ : filterEvents;
108
+ for (const event of events) {
109
+ sub.onevent(event);
110
+ this.writeQueue.useEvent(event);
111
+ }
112
+ const delta = new Date().valueOf() - start;
113
+ log(`Finished ${sub.id} took ${delta}ms and got ${events.length} events`);
103
114
  }
104
- const delta = new Date().valueOf() - start;
105
- log(`Finished ${sub.id} took ${delta}ms and got ${events.length} events`);
106
- }
107
- if (sub.oneose)
108
- sub.oneose();
115
+ if (sub.oneose)
116
+ sub.oneose();
117
+ res();
118
+ });
109
119
  });
110
120
  }
111
121
  subscribe(filters, options) {