applesauce-core 0.0.0-next-20250206145535 → 0.0.0-next-20250206174509
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/dist/event-store/database.d.ts +2 -0
- package/dist/event-store/database.js +4 -1
- package/dist/event-store/event-store.d.ts +6 -1
- package/dist/event-store/event-store.js +11 -1
- package/dist/helpers/event.js +2 -1
- package/dist/helpers/filter.d.ts +4 -0
- package/dist/helpers/filter.js +33 -0
- package/package.json +1 -1
|
@@ -21,6 +21,8 @@ export declare class Database {
|
|
|
21
21
|
updated: Subject<import("nostr-tools").Event>;
|
|
22
22
|
/** A stream of events removed of the database */
|
|
23
23
|
deleted: Subject<import("nostr-tools").Event>;
|
|
24
|
+
/** A method thats called before a new event is inserted */
|
|
25
|
+
onBeforeInsert?: (event: NostrEvent) => void;
|
|
24
26
|
get size(): number;
|
|
25
27
|
protected claims: WeakMap<import("nostr-tools").Event, any>;
|
|
26
28
|
/** Index helper methods */
|
|
@@ -24,6 +24,8 @@ export class Database {
|
|
|
24
24
|
updated = new Subject();
|
|
25
25
|
/** A stream of events removed of the database */
|
|
26
26
|
deleted = new Subject();
|
|
27
|
+
/** A method thats called before a new event is inserted */
|
|
28
|
+
onBeforeInsert;
|
|
27
29
|
get size() {
|
|
28
30
|
return this.events.size;
|
|
29
31
|
}
|
|
@@ -82,11 +84,12 @@ export class Database {
|
|
|
82
84
|
const id = event.id;
|
|
83
85
|
const current = this.events.get(id);
|
|
84
86
|
if (current) {
|
|
85
|
-
// if this is a duplicate event, transfer some
|
|
87
|
+
// if this is a duplicate event, transfer some important symbols
|
|
86
88
|
if (event[FromCacheSymbol])
|
|
87
89
|
current[FromCacheSymbol] = event[FromCacheSymbol];
|
|
88
90
|
return current;
|
|
89
91
|
}
|
|
92
|
+
this.onBeforeInsert?.(event);
|
|
90
93
|
this.events.set(id, event);
|
|
91
94
|
this.getKindIndex(event.kind).add(event);
|
|
92
95
|
this.getAuthorsIndex(event.pubkey).add(event);
|
|
@@ -5,8 +5,13 @@ export declare class EventStore {
|
|
|
5
5
|
database: Database;
|
|
6
6
|
/** Enable this to keep old versions of replaceable events */
|
|
7
7
|
keepOldVersions: boolean;
|
|
8
|
+
/** A method used to verify new events before added them */
|
|
9
|
+
verifyEvent?: (event: NostrEvent) => boolean;
|
|
8
10
|
constructor();
|
|
9
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Adds an event to the database and update subscriptions
|
|
13
|
+
* @throws
|
|
14
|
+
*/
|
|
10
15
|
add(event: NostrEvent, fromRelay?: string): NostrEvent;
|
|
11
16
|
/** Removes an event from the database and updates subscriptions */
|
|
12
17
|
remove(event: string | NostrEvent): boolean;
|
|
@@ -11,10 +11,20 @@ export class EventStore {
|
|
|
11
11
|
database;
|
|
12
12
|
/** Enable this to keep old versions of replaceable events */
|
|
13
13
|
keepOldVersions = false;
|
|
14
|
+
/** A method used to verify new events before added them */
|
|
15
|
+
verifyEvent;
|
|
14
16
|
constructor() {
|
|
15
17
|
this.database = new Database();
|
|
18
|
+
this.database.onBeforeInsert = (event) => {
|
|
19
|
+
// reject events that are invalid
|
|
20
|
+
if (!this.verifyEvent?.(event))
|
|
21
|
+
throw new Error("Invalid event");
|
|
22
|
+
};
|
|
16
23
|
}
|
|
17
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Adds an event to the database and update subscriptions
|
|
26
|
+
* @throws
|
|
27
|
+
*/
|
|
18
28
|
add(event, fromRelay) {
|
|
19
29
|
if (event.kind === kinds.EventDeletion)
|
|
20
30
|
this.handleDeleteEvent(event);
|
package/dist/helpers/event.js
CHANGED
|
@@ -79,7 +79,8 @@ export function getTagValue(event, name) {
|
|
|
79
79
|
}
|
|
80
80
|
/** Sets events verified flag without checking anything */
|
|
81
81
|
export function fakeVerifyEvent(event) {
|
|
82
|
-
|
|
82
|
+
event[verifiedSymbol] = true;
|
|
83
|
+
return true;
|
|
83
84
|
}
|
|
84
85
|
/** Marks an event as being from a cache */
|
|
85
86
|
export function markFromCache(event) {
|
package/dist/helpers/filter.d.ts
CHANGED
|
@@ -6,5 +6,9 @@ import { Filter, NostrEvent } from "nostr-tools";
|
|
|
6
6
|
export declare function matchFilter(filter: Filter, event: NostrEvent): boolean;
|
|
7
7
|
/** Copied from nostr-tools */
|
|
8
8
|
export declare function matchFilters(filters: Filter[], event: NostrEvent): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Copied from nostr-tools and modified to support undefined
|
|
11
|
+
*/
|
|
12
|
+
export declare function mergeFilters(...filters: Filter[]): Filter;
|
|
9
13
|
/** Check if two filters are equal */
|
|
10
14
|
export declare function isFilterEqual(a: Filter | Filter[], b: Filter | Filter[]): boolean;
|
package/dist/helpers/filter.js
CHANGED
|
@@ -40,6 +40,39 @@ export function matchFilters(filters, event) {
|
|
|
40
40
|
}
|
|
41
41
|
return false;
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Copied from nostr-tools and modified to support undefined
|
|
45
|
+
*/
|
|
46
|
+
export function mergeFilters(...filters) {
|
|
47
|
+
let result = {};
|
|
48
|
+
for (let i = 0; i < filters.length; i++) {
|
|
49
|
+
let filter = filters[i];
|
|
50
|
+
Object.entries(filter).forEach(([property, values]) => {
|
|
51
|
+
// skip undefined
|
|
52
|
+
if (values === undefined)
|
|
53
|
+
return;
|
|
54
|
+
if (property === "kinds" || property === "ids" || property === "authors" || property[0] === "#") {
|
|
55
|
+
// @ts-ignore
|
|
56
|
+
result[property] = result[property] || [];
|
|
57
|
+
// @ts-ignore
|
|
58
|
+
for (let v = 0; v < values.length; v++) {
|
|
59
|
+
// @ts-ignore
|
|
60
|
+
let value = values[v];
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
if (!result[property].includes(value))
|
|
63
|
+
result[property].push(value);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
if (filter.limit && (!result.limit || filter.limit > result.limit))
|
|
68
|
+
result.limit = filter.limit;
|
|
69
|
+
if (filter.until && (!result.until || filter.until > result.until))
|
|
70
|
+
result.until = filter.until;
|
|
71
|
+
if (filter.since && (!result.since || filter.since < result.since))
|
|
72
|
+
result.since = filter.since;
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
43
76
|
/** Check if two filters are equal */
|
|
44
77
|
export function isFilterEqual(a, b) {
|
|
45
78
|
return equal(a, b);
|