nostr-idb 2.1.4 → 2.1.6

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,17 @@
1
1
  # nostr-idb
2
2
 
3
+ ## 2.1.6
4
+
5
+ ### Patch Changes
6
+
7
+ - Add error handler for onevent callback
8
+
9
+ ## 2.1.5
10
+
11
+ ### Patch Changes
12
+
13
+ - Add timeout for subscriptions
14
+
3
15
  ## 2.1.4
4
16
 
5
17
  ### 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,40 @@ 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
+ try {
110
+ sub.onevent(event);
111
+ this.writeQueue.useEvent(event);
112
+ }
113
+ catch (error) {
114
+ log(`onevent failed with error`, error);
115
+ }
116
+ }
117
+ const delta = new Date().valueOf() - start;
118
+ log(`Finished ${sub.id} took ${delta}ms and got ${events.length} events`);
103
119
  }
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();
120
+ if (sub.oneose)
121
+ sub.oneose();
122
+ res();
123
+ });
109
124
  });
110
125
  }
111
126
  subscribe(filters, options) {