@welshman/net 0.1.1 → 0.2.0
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/LICENSE +21 -0
- package/dist/lib/src/Deferred.d.ts +21 -0
- package/dist/lib/src/Deferred.d.ts.map +1 -0
- package/dist/lib/src/Deferred.js +21 -0
- package/dist/lib/src/Deferred.js.map +1 -0
- package/dist/lib/src/Emitter.d.ts +14 -0
- package/dist/lib/src/Emitter.d.ts.map +1 -0
- package/dist/lib/src/Emitter.js +18 -0
- package/dist/lib/src/Emitter.js.map +1 -0
- package/dist/lib/src/LRUCache.d.ts +42 -0
- package/dist/lib/src/LRUCache.d.ts.map +1 -0
- package/dist/lib/src/LRUCache.js +62 -0
- package/dist/lib/src/LRUCache.js.map +1 -0
- package/dist/lib/src/TaskQueue.d.ts +20 -0
- package/dist/lib/src/TaskQueue.d.ts.map +1 -0
- package/dist/lib/src/TaskQueue.js +57 -0
- package/dist/lib/src/TaskQueue.js.map +1 -0
- package/dist/lib/src/Tools.d.ts +727 -0
- package/dist/lib/src/Tools.d.ts.map +1 -0
- package/dist/lib/src/Tools.js +1224 -0
- package/dist/lib/src/Tools.js.map +1 -0
- package/dist/lib/src/index.d.ts +7 -0
- package/dist/lib/src/index.d.ts.map +1 -0
- package/dist/lib/src/index.js +7 -0
- package/dist/lib/src/index.js.map +1 -0
- package/dist/lib/src/normalize-url/index.d.ts +286 -0
- package/dist/lib/src/normalize-url/index.d.ts.map +1 -0
- package/dist/lib/src/normalize-url/index.js +252 -0
- package/dist/lib/src/normalize-url/index.js.map +1 -0
- package/{build → dist/net}/src/adapter.d.ts +5 -7
- package/dist/net/src/adapter.d.ts.map +1 -0
- package/dist/net/src/adapter.js.map +1 -0
- package/{build → dist/net}/src/auth.d.ts +7 -21
- package/dist/net/src/auth.d.ts.map +1 -0
- package/{build → dist/net}/src/auth.js +35 -58
- package/dist/net/src/auth.js.map +1 -0
- package/{build → dist/net}/src/context.d.ts +3 -0
- package/dist/net/src/context.d.ts.map +1 -0
- package/{build → dist/net}/src/context.js +3 -3
- package/dist/net/src/context.js.map +1 -0
- package/{build → dist/net}/src/diff.d.ts +3 -4
- package/dist/net/src/diff.d.ts.map +1 -0
- package/{build → dist/net}/src/diff.js +11 -13
- package/dist/net/src/diff.js.map +1 -0
- package/{build → dist/net}/src/index.d.ts +1 -0
- package/dist/net/src/index.d.ts.map +1 -0
- package/dist/net/src/index.js.map +1 -0
- package/{build → dist/net}/src/message.d.ts +1 -0
- package/dist/net/src/message.d.ts.map +1 -0
- package/dist/net/src/message.js.map +1 -0
- package/{build → dist/net}/src/negentropy.d.ts +2 -1
- package/dist/net/src/negentropy.d.ts.map +1 -0
- package/{build → dist/net}/src/negentropy.js +42 -18
- package/dist/net/src/negentropy.js.map +1 -0
- package/{build → dist/net}/src/policy.d.ts +16 -8
- package/dist/net/src/policy.d.ts.map +1 -0
- package/{build → dist/net}/src/policy.js +61 -83
- package/dist/net/src/policy.js.map +1 -0
- package/{build → dist/net}/src/pool.d.ts +2 -1
- package/dist/net/src/pool.d.ts.map +1 -0
- package/{build → dist/net}/src/pool.js +8 -8
- package/dist/net/src/pool.js.map +1 -0
- package/dist/net/src/publish.d.ts +44 -0
- package/dist/net/src/publish.d.ts.map +1 -0
- package/dist/net/src/publish.js +96 -0
- package/dist/net/src/publish.js.map +1 -0
- package/dist/net/src/request.d.ts +55 -0
- package/dist/net/src/request.d.ts.map +1 -0
- package/dist/net/src/request.js +212 -0
- package/dist/net/src/request.js.map +1 -0
- package/{build → dist/net}/src/socket.d.ts +11 -9
- package/dist/net/src/socket.d.ts.map +1 -0
- package/{build → dist/net}/src/socket.js +15 -8
- package/dist/net/src/socket.js.map +1 -0
- package/{build → dist/net}/src/tracker.d.ts +1 -0
- package/dist/net/src/tracker.d.ts.map +1 -0
- package/dist/net/src/tracker.js.map +1 -0
- package/dist/net/src/util.d.ts +2 -0
- package/dist/net/src/util.d.ts.map +1 -0
- package/{build → dist/net}/src/util.js.map +1 -1
- package/dist/relay/src/index.d.ts +3 -0
- package/dist/relay/src/index.d.ts.map +1 -0
- package/dist/relay/src/index.js +3 -0
- package/dist/relay/src/index.js.map +1 -0
- package/dist/relay/src/relay.d.ts +13 -0
- package/dist/relay/src/relay.d.ts.map +1 -0
- package/dist/relay/src/relay.js +48 -0
- package/dist/relay/src/relay.js.map +1 -0
- package/dist/relay/src/repository.d.ts +63 -0
- package/dist/relay/src/repository.d.ts.map +1 -0
- package/dist/relay/src/repository.js +270 -0
- package/dist/relay/src/repository.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/util/src/Address.d.ts +21 -0
- package/dist/util/src/Address.d.ts.map +1 -0
- package/dist/util/src/Address.js +43 -0
- package/dist/util/src/Address.js.map +1 -0
- package/dist/util/src/Encryptable.d.ts +34 -0
- package/dist/util/src/Encryptable.d.ts.map +1 -0
- package/dist/util/src/Encryptable.js +52 -0
- package/dist/util/src/Encryptable.js.map +1 -0
- package/dist/util/src/Events.d.ts +77 -0
- package/dist/util/src/Events.d.ts.map +1 -0
- package/dist/util/src/Events.js +63 -0
- package/dist/util/src/Events.js.map +1 -0
- package/dist/util/src/Filters.d.ts +48 -0
- package/dist/util/src/Filters.d.ts.map +1 -0
- package/dist/util/src/Filters.js +185 -0
- package/dist/util/src/Filters.js.map +1 -0
- package/dist/util/src/Handler.d.ts +17 -0
- package/dist/util/src/Handler.d.ts.map +1 -0
- package/dist/util/src/Handler.js +33 -0
- package/dist/util/src/Handler.js.map +1 -0
- package/dist/util/src/Kinds.d.ts +159 -0
- package/dist/util/src/Kinds.d.ts.map +1 -0
- package/dist/util/src/Kinds.js +160 -0
- package/dist/util/src/Kinds.js.map +1 -0
- package/dist/util/src/Links.d.ts +3 -0
- package/dist/util/src/Links.d.ts.map +1 -0
- package/dist/util/src/Links.js +3 -0
- package/dist/util/src/Links.js.map +1 -0
- package/dist/util/src/List.d.ts +34 -0
- package/dist/util/src/List.d.ts.map +1 -0
- package/dist/util/src/List.js +74 -0
- package/dist/util/src/List.js.map +1 -0
- package/dist/util/src/Profile.d.ts +26 -0
- package/dist/util/src/Profile.d.ts.map +1 -0
- package/dist/util/src/Profile.js +50 -0
- package/dist/util/src/Profile.js.map +1 -0
- package/dist/util/src/Relay.d.ts +32 -0
- package/dist/util/src/Relay.d.ts.map +1 -0
- package/dist/util/src/Relay.js +49 -0
- package/dist/util/src/Relay.js.map +1 -0
- package/dist/util/src/Tags.d.ts +32 -0
- package/dist/util/src/Tags.d.ts.map +1 -0
- package/dist/util/src/Tags.js +74 -0
- package/dist/util/src/Tags.js.map +1 -0
- package/dist/util/src/Zaps.d.ts +20 -0
- package/dist/util/src/Zaps.d.ts.map +1 -0
- package/dist/util/src/Zaps.js +93 -0
- package/dist/util/src/Zaps.js.map +1 -0
- package/dist/util/src/index.d.ts +13 -0
- package/dist/util/src/index.d.ts.map +1 -0
- package/dist/util/src/index.js +13 -0
- package/dist/util/src/index.js.map +1 -0
- package/package.json +18 -21
- package/README.md +0 -61
- package/build/src/adapter.js.map +0 -1
- package/build/src/auth.js.map +0 -1
- package/build/src/context.js.map +0 -1
- package/build/src/diff.js.map +0 -1
- package/build/src/index.js.map +0 -1
- package/build/src/message.js.map +0 -1
- package/build/src/negentropy.js.map +0 -1
- package/build/src/policy.js.map +0 -1
- package/build/src/pool.js.map +0 -1
- package/build/src/publish.d.ts +0 -60
- package/build/src/publish.js +0 -120
- package/build/src/publish.js.map +0 -1
- package/build/src/request.d.ts +0 -79
- package/build/src/request.js +0 -191
- package/build/src/request.js.map +0 -1
- package/build/src/socket.js.map +0 -1
- package/build/src/tracker.js.map +0 -1
- package/build/src/util.d.ts +0 -3
- package/build/tsconfig.tsbuildinfo +0 -1
- /package/{build → dist/net}/src/adapter.js +0 -0
- /package/{build → dist/net}/src/index.js +0 -0
- /package/{build → dist/net}/src/message.js +0 -0
- /package/{build → dist/net}/src/tracker.js +0 -0
- /package/{build → dist/net}/src/util.js +0 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { DAY, Emitter, flatten, pluck, sortBy, inc, chunk, uniq, omit, now, range, } from "@welshman/lib";
|
|
2
|
+
import { DELETE, EPOCH, matchFilter, isReplaceable, isUnwrappedEvent, getAddress, } from "@welshman/util";
|
|
3
|
+
export const LOCAL_RELAY_URL = "local://welshman.relay/";
|
|
4
|
+
const getDay = (ts) => Math.floor(ts / DAY);
|
|
5
|
+
export let repositorySingleton;
|
|
6
|
+
export class Repository extends Emitter {
|
|
7
|
+
eventsById = new Map();
|
|
8
|
+
eventsByWrap = new Map();
|
|
9
|
+
eventsByAddress = new Map();
|
|
10
|
+
eventsByTag = new Map();
|
|
11
|
+
eventsByDay = new Map();
|
|
12
|
+
eventsByAuthor = new Map();
|
|
13
|
+
eventsByKind = new Map();
|
|
14
|
+
deletes = new Map();
|
|
15
|
+
static get() {
|
|
16
|
+
if (!repositorySingleton) {
|
|
17
|
+
repositorySingleton = new Repository();
|
|
18
|
+
}
|
|
19
|
+
return repositorySingleton;
|
|
20
|
+
}
|
|
21
|
+
constructor() {
|
|
22
|
+
super();
|
|
23
|
+
this.setMaxListeners(100);
|
|
24
|
+
}
|
|
25
|
+
// Dump/load/clear
|
|
26
|
+
dump = () => {
|
|
27
|
+
return Array.from(this.eventsById.values());
|
|
28
|
+
};
|
|
29
|
+
load = (events, chunkSize = 1000) => {
|
|
30
|
+
const stale = new Set(this.eventsById.keys());
|
|
31
|
+
this.eventsById.clear();
|
|
32
|
+
this.eventsByWrap.clear();
|
|
33
|
+
this.eventsByAddress.clear();
|
|
34
|
+
this.eventsByTag.clear();
|
|
35
|
+
this.eventsByDay.clear();
|
|
36
|
+
this.eventsByAuthor.clear();
|
|
37
|
+
this.eventsByKind.clear();
|
|
38
|
+
this.deletes.clear();
|
|
39
|
+
const added = [];
|
|
40
|
+
for (const eventsChunk of chunk(chunkSize, events)) {
|
|
41
|
+
for (const event of eventsChunk) {
|
|
42
|
+
if (this.publish(event, { shouldNotify: false })) {
|
|
43
|
+
// Don't send duplicate events to subscribers
|
|
44
|
+
if (!stale.has(event.id)) {
|
|
45
|
+
added.push(event);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const removed = new Set();
|
|
51
|
+
// Anything we had before clearing the repository has been removed
|
|
52
|
+
for (const id of stale) {
|
|
53
|
+
if (!this.eventsById.has(id)) {
|
|
54
|
+
removed.add(id);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Anything removed via delete or replace has been removed
|
|
58
|
+
for (const id of this.deletes.keys()) {
|
|
59
|
+
removed.add(id);
|
|
60
|
+
}
|
|
61
|
+
this.emit("update", { added, removed });
|
|
62
|
+
};
|
|
63
|
+
// API
|
|
64
|
+
getEvent = (idOrAddress) => {
|
|
65
|
+
return idOrAddress.includes(":")
|
|
66
|
+
? this.eventsByAddress.get(idOrAddress)
|
|
67
|
+
: this.eventsById.get(idOrAddress);
|
|
68
|
+
};
|
|
69
|
+
hasEvent = (event) => {
|
|
70
|
+
const duplicate = this.eventsById.get(event.id) || this.eventsByAddress.get(getAddress(event));
|
|
71
|
+
return duplicate && duplicate.created_at >= event.created_at;
|
|
72
|
+
};
|
|
73
|
+
removeEvent = (idOrAddress) => {
|
|
74
|
+
const event = this.getEvent(idOrAddress);
|
|
75
|
+
if (event) {
|
|
76
|
+
this.eventsById.delete(event.id);
|
|
77
|
+
if (isUnwrappedEvent(event)) {
|
|
78
|
+
this.eventsByWrap.delete(event.wrap.id);
|
|
79
|
+
}
|
|
80
|
+
this.eventsByAddress.delete(getAddress(event));
|
|
81
|
+
for (const [k, v] of event.tags) {
|
|
82
|
+
if (k.length === 1) {
|
|
83
|
+
this._updateIndex(this.eventsByTag, `${k}:${v}`, undefined, event);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
this._updateIndex(this.eventsByDay, getDay(event.created_at), undefined, event);
|
|
87
|
+
this._updateIndex(this.eventsByAuthor, event.pubkey, undefined, event);
|
|
88
|
+
this._updateIndex(this.eventsByKind, event.kind, undefined, event);
|
|
89
|
+
this.emit("update", { added: [], removed: [event.id] });
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
query = (filters, { includeDeleted = false, shouldSort = true } = {}) => {
|
|
93
|
+
const result = [];
|
|
94
|
+
for (const originalFilter of filters) {
|
|
95
|
+
if (originalFilter.limit !== undefined && !shouldSort) {
|
|
96
|
+
throw new Error("Unable to skip sorting if limit is defined");
|
|
97
|
+
}
|
|
98
|
+
// Attempt to fulfill the query using one of our indexes. Fall back to all events.
|
|
99
|
+
const applied = this._applyAnyFilter(originalFilter);
|
|
100
|
+
const filter = applied?.filter || originalFilter;
|
|
101
|
+
const events = applied ? this._getEvents(applied.ids) : this.dump();
|
|
102
|
+
const sorted = this._sortEvents(shouldSort && Boolean(filter.limit), events);
|
|
103
|
+
const chunk = [];
|
|
104
|
+
for (const event of sorted) {
|
|
105
|
+
if (filter.limit && chunk.length >= filter.limit) {
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
if (!includeDeleted && this.isDeleted(event)) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (matchFilter(filter, event)) {
|
|
112
|
+
chunk.push(event);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
result.push(chunk);
|
|
116
|
+
}
|
|
117
|
+
// Only re-sort if we had multiple filters, or if our single filter wasn't sorted
|
|
118
|
+
const shouldSortAll = shouldSort && (filters.length > 1 || !filters[0]?.limit);
|
|
119
|
+
return this._sortEvents(shouldSortAll, uniq(flatten(result)));
|
|
120
|
+
};
|
|
121
|
+
publish = (event, { shouldNotify = true } = {}) => {
|
|
122
|
+
if (!event?.id) {
|
|
123
|
+
console.warn("Attempted to publish invalid event to repository", event);
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
// If we've already seen this event, or it's been deleted, we're done
|
|
127
|
+
if (this.eventsById.get(event.id) || this.isDeleted(event)) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
const removed = new Set();
|
|
131
|
+
const address = getAddress(event);
|
|
132
|
+
const duplicate = this.eventsByAddress.get(address);
|
|
133
|
+
if (duplicate) {
|
|
134
|
+
// If our event is younger than the duplicate, we're done
|
|
135
|
+
if (event.created_at <= duplicate.created_at) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
// If our event is newer than what it's replacing, delete the old version
|
|
139
|
+
this.deletes.set(duplicate.id, event.created_at);
|
|
140
|
+
// Notify listeners that it's been removed
|
|
141
|
+
removed.add(duplicate.id);
|
|
142
|
+
}
|
|
143
|
+
// Add our new event by id
|
|
144
|
+
this.eventsById.set(event.id, event);
|
|
145
|
+
// Add our new event by address
|
|
146
|
+
if (isReplaceable(event)) {
|
|
147
|
+
this.eventsByAddress.set(address, event);
|
|
148
|
+
}
|
|
149
|
+
// Save wrapper index
|
|
150
|
+
if (isUnwrappedEvent(event)) {
|
|
151
|
+
this.eventsByWrap.set(event.wrap.id, event);
|
|
152
|
+
}
|
|
153
|
+
// Update our timestamp and author indexes
|
|
154
|
+
this._updateIndex(this.eventsByDay, getDay(event.created_at), event, duplicate);
|
|
155
|
+
this._updateIndex(this.eventsByAuthor, event.pubkey, event, duplicate);
|
|
156
|
+
this._updateIndex(this.eventsByKind, event.kind, event, duplicate);
|
|
157
|
+
// Update our tag indexes
|
|
158
|
+
for (const tag of event.tags) {
|
|
159
|
+
if (tag[0]?.length === 1) {
|
|
160
|
+
this._updateIndex(this.eventsByTag, tag.slice(0, 2).join(":"), event, duplicate);
|
|
161
|
+
// If this is a delete event, the tag value is an id or address. Track when it was
|
|
162
|
+
// deleted so that replaceables can be restored.
|
|
163
|
+
if (event.kind === DELETE && ["a", "e"].includes(tag[0]) && tag[1]) {
|
|
164
|
+
this.deletes.set(tag[1], Math.max(event.created_at, this.deletes.get(tag[1]) || 0));
|
|
165
|
+
const deletedEvent = this.getEvent(tag[1]);
|
|
166
|
+
if (deletedEvent && this.isDeleted(deletedEvent)) {
|
|
167
|
+
removed.add(deletedEvent.id);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (shouldNotify) {
|
|
173
|
+
this.emit("update", { added: [event], removed });
|
|
174
|
+
}
|
|
175
|
+
return true;
|
|
176
|
+
};
|
|
177
|
+
isDeletedByAddress = (event) => (this.deletes.get(getAddress(event)) || 0) > event.created_at;
|
|
178
|
+
isDeletedById = (event) => (this.deletes.get(event.id) || 0) > event.created_at;
|
|
179
|
+
isDeleted = (event) => this.isDeletedByAddress(event) || this.isDeletedById(event);
|
|
180
|
+
// Utilities
|
|
181
|
+
_sortEvents = (shouldSort, events) => shouldSort ? sortBy(e => -e.created_at, events) : events;
|
|
182
|
+
_updateIndex = (m, k, add, remove) => {
|
|
183
|
+
let a = m.get(k) || [];
|
|
184
|
+
if (remove) {
|
|
185
|
+
a = a.filter((x) => x !== remove);
|
|
186
|
+
}
|
|
187
|
+
if (add) {
|
|
188
|
+
a.push(add);
|
|
189
|
+
}
|
|
190
|
+
m.set(k, a);
|
|
191
|
+
};
|
|
192
|
+
_getEvents = (ids) => {
|
|
193
|
+
const events = [];
|
|
194
|
+
for (const id of ids) {
|
|
195
|
+
const event = this.eventsById.get(id);
|
|
196
|
+
if (event) {
|
|
197
|
+
events.push(event);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return events;
|
|
201
|
+
};
|
|
202
|
+
_applyIdsFilter = (filter) => {
|
|
203
|
+
if (!filter.ids)
|
|
204
|
+
return undefined;
|
|
205
|
+
return {
|
|
206
|
+
filter: omit(["ids"], filter),
|
|
207
|
+
ids: new Set(filter.ids),
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
_applyAuthorsFilter = (filter) => {
|
|
211
|
+
if (!filter.authors)
|
|
212
|
+
return undefined;
|
|
213
|
+
const events = filter.authors.flatMap(pubkey => this.eventsByAuthor.get(pubkey) || []);
|
|
214
|
+
return {
|
|
215
|
+
filter: omit(["authors"], filter),
|
|
216
|
+
ids: new Set(pluck("id", events)),
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
_applyTagsFilter = (filter) => {
|
|
220
|
+
for (const [k, values] of Object.entries(filter)) {
|
|
221
|
+
if (!k.startsWith("#") || k.length !== 2) {
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
const ids = new Set();
|
|
225
|
+
for (const v of values) {
|
|
226
|
+
for (const event of this.eventsByTag.get(`${k[1]}:${v}`) || []) {
|
|
227
|
+
ids.add(event.id);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return { filter: omit([k], filter), ids };
|
|
231
|
+
}
|
|
232
|
+
return undefined;
|
|
233
|
+
};
|
|
234
|
+
_applyKindsFilter = (filter) => {
|
|
235
|
+
if (!filter.kinds)
|
|
236
|
+
return undefined;
|
|
237
|
+
const events = filter.kinds.flatMap(kind => this.eventsByKind.get(kind) || []);
|
|
238
|
+
return {
|
|
239
|
+
filter: omit(["kinds"], filter),
|
|
240
|
+
ids: new Set(pluck("id", events)),
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
_applyDaysFilter = (filter) => {
|
|
244
|
+
if (!filter.since && !filter.until)
|
|
245
|
+
return undefined;
|
|
246
|
+
const sinceDay = getDay(filter.since || EPOCH);
|
|
247
|
+
const untilDay = getDay(filter.until || now());
|
|
248
|
+
const days = Array.from(range(sinceDay, inc(untilDay)));
|
|
249
|
+
const events = days.flatMap((day) => this.eventsByDay.get(day) || []);
|
|
250
|
+
const ids = new Set(pluck("id", events));
|
|
251
|
+
return { filter, ids };
|
|
252
|
+
};
|
|
253
|
+
_applyAnyFilter = (filter) => {
|
|
254
|
+
const matchers = [
|
|
255
|
+
this._applyIdsFilter,
|
|
256
|
+
this._applyAuthorsFilter,
|
|
257
|
+
this._applyTagsFilter,
|
|
258
|
+
this._applyKindsFilter,
|
|
259
|
+
this._applyDaysFilter,
|
|
260
|
+
];
|
|
261
|
+
for (const matcher of matchers) {
|
|
262
|
+
const result = matcher(filter);
|
|
263
|
+
if (result) {
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return undefined;
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../relay/src/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/adapter.ts","../src/auth.ts","../src/context.ts","../src/diff.ts","../src/index.ts","../src/message.ts","../src/negentropy.ts","../src/policy.ts","../src/pool.ts","../src/publish.ts","../src/request.ts","../src/socket.ts","../src/tracker.ts","../src/util.ts"],"version":"5.8.2"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type AddressableEvent = {
|
|
2
|
+
kind: number;
|
|
3
|
+
pubkey: string;
|
|
4
|
+
tags: string[][];
|
|
5
|
+
};
|
|
6
|
+
export declare class Address {
|
|
7
|
+
readonly kind: number;
|
|
8
|
+
readonly pubkey: string;
|
|
9
|
+
readonly identifier: string;
|
|
10
|
+
readonly relays: string[];
|
|
11
|
+
constructor(kind: number, pubkey: string, identifier: string, relays?: string[]);
|
|
12
|
+
static isAddress(address: string): boolean;
|
|
13
|
+
static from(address: string, relays?: string[]): Address;
|
|
14
|
+
static fromNaddr(naddr: string): Address;
|
|
15
|
+
static fromEvent(event: AddressableEvent, relays?: string[]): Address;
|
|
16
|
+
toString: () => string;
|
|
17
|
+
toNaddr: () => `naddr1${string}`;
|
|
18
|
+
}
|
|
19
|
+
export declare const getAddress: (e: AddressableEvent) => string;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=Address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Address.d.ts","sourceRoot":"","sources":["../../../../util/src/Address.ts"],"names":[],"mappings":"AAGA,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;CACjB,CAAA;AAED,qBAAa,OAAO;IAEhB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE;gBAHhB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAM,EAAO;IAGhC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM;IAIhC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO;IAMlD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM;IAkB9B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,GAAE,MAAM,EAAO;IAM/D,QAAQ,eAAyD;IAEjE,OAAO,0BAA0B;CAClC;AAID,eAAO,MAAM,UAAU,GAAI,GAAG,gBAAgB,WAAoC,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { decode, naddrEncode } from "nostr-tools/nip19";
|
|
2
|
+
export class Address {
|
|
3
|
+
kind;
|
|
4
|
+
pubkey;
|
|
5
|
+
identifier;
|
|
6
|
+
relays;
|
|
7
|
+
constructor(kind, pubkey, identifier, relays = []) {
|
|
8
|
+
this.kind = kind;
|
|
9
|
+
this.pubkey = pubkey;
|
|
10
|
+
this.identifier = identifier;
|
|
11
|
+
this.relays = relays;
|
|
12
|
+
}
|
|
13
|
+
static isAddress(address) {
|
|
14
|
+
return Boolean(address.match(/^\d+:\w+:.*$/));
|
|
15
|
+
}
|
|
16
|
+
static from(address, relays = []) {
|
|
17
|
+
const [kind, pubkey, identifier = ""] = address.match(/^(\d+):(\w+):(.*)$/).slice(1);
|
|
18
|
+
return new Address(parseInt(kind), pubkey, identifier, relays);
|
|
19
|
+
}
|
|
20
|
+
static fromNaddr(naddr) {
|
|
21
|
+
let decoded;
|
|
22
|
+
try {
|
|
23
|
+
decoded = decode(naddr);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
// pass
|
|
27
|
+
}
|
|
28
|
+
if (decoded?.type !== "naddr") {
|
|
29
|
+
throw new Error(`Invalid naddr ${naddr}`);
|
|
30
|
+
}
|
|
31
|
+
const { kind, pubkey, identifier, relays } = decoded.data;
|
|
32
|
+
return new Address(kind, pubkey, identifier, relays);
|
|
33
|
+
}
|
|
34
|
+
static fromEvent(event, relays = []) {
|
|
35
|
+
const identifier = event.tags.find(t => t[0] === "d")?.[1] || "";
|
|
36
|
+
return new Address(event.kind, event.pubkey, identifier, relays);
|
|
37
|
+
}
|
|
38
|
+
toString = () => `${this.kind}:${this.pubkey}:${this.identifier}`;
|
|
39
|
+
toNaddr = () => naddrEncode(this);
|
|
40
|
+
}
|
|
41
|
+
// Utils
|
|
42
|
+
export const getAddress = (e) => Address.fromEvent(e).toString();
|
|
43
|
+
//# sourceMappingURL=Address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Address.js","sourceRoot":"","sources":["../../../../util/src/Address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,mBAAmB,CAAA;AASrD,MAAM,OAAO,OAAO;IAEP;IACA;IACA;IACA;IAJX,YACW,IAAY,EACZ,MAAc,EACd,UAAkB,EAClB,SAAmB,EAAE;QAHrB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAe;IAC7B,CAAC;IAEJ,MAAM,CAAC,SAAS,CAAC,OAAe;QAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,SAAmB,EAAE;QAChD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAErF,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAa;QAC5B,IAAI,OAAY,CAAA;QAEhB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,IAAI,OAAO,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,EAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC,IAAI,CAAA;QAEvD,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IACtD,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAuB,EAAE,SAAmB,EAAE;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAEhE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IAClE,CAAC;IAED,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;IAEjE,OAAO,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;CAClC;AAED,QAAQ;AAER,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { EventContent, TrustedEvent, EventTemplate } from "./Events.js";
|
|
2
|
+
export type Encrypt = (x: string) => Promise<string>;
|
|
3
|
+
export type EncryptableUpdates = Partial<EventContent>;
|
|
4
|
+
export type DecryptedEvent = TrustedEvent & {
|
|
5
|
+
plaintext: EncryptableUpdates;
|
|
6
|
+
};
|
|
7
|
+
export declare const asDecryptedEvent: (event: TrustedEvent, plaintext?: EncryptableUpdates) => DecryptedEvent;
|
|
8
|
+
/**
|
|
9
|
+
* Represents an encryptable event with optional updates.
|
|
10
|
+
*/
|
|
11
|
+
export declare class Encryptable<T extends EventTemplate> {
|
|
12
|
+
readonly event: Partial<T>;
|
|
13
|
+
readonly updates: EncryptableUpdates;
|
|
14
|
+
/**
|
|
15
|
+
* Creates an instance of Encryptable.
|
|
16
|
+
* @param event - An EventTemplate with optional tags and content.
|
|
17
|
+
* @param updates - Plaintext updates to be applied to the event content.
|
|
18
|
+
* @example
|
|
19
|
+
* Here's an example which enables updating a private mute list:
|
|
20
|
+
* ```
|
|
21
|
+
* const event = {kind: 10000, content: "", tags: []} // An event, only kind is required
|
|
22
|
+
* const encryptable = new Encryptable(event, {content: JSON.stringify([["e", "bad word"]])})
|
|
23
|
+
* const eventTemplate = await encryptable.reconcile(myEncryptFunction)
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
constructor(event: Partial<T>, updates: EncryptableUpdates);
|
|
27
|
+
/**
|
|
28
|
+
* Encrypts plaintext updates and merges them into the event template.
|
|
29
|
+
* @param encrypt - The encryption function to be used.
|
|
30
|
+
* @returns A promise that resolves to the reconciled and encrypted event.
|
|
31
|
+
*/
|
|
32
|
+
reconcile(encrypt: Encrypt): Promise<T>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=Encryptable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Encryptable.d.ts","sourceRoot":"","sources":["../../../../util/src/Encryptable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAC,MAAM,aAAa,CAAA;AAE1E,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAEpD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;AAEtD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG;IAC1C,SAAS,EAAE,kBAAkB,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,OAAO,YAAY,EAAE,YAAW,kBAAuB,KAC3D,cAAc,CAAA;AAE3C;;GAEG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,aAAa;IAc5C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,kBAAkB;IAdtC;;;;;;;;;;;OAWG;gBAEQ,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EACjB,OAAO,EAAE,kBAAkB;IAGtC;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,OAAO;CA4BjC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export const asDecryptedEvent = (event, plaintext = {}) => ({ ...event, plaintext });
|
|
2
|
+
/**
|
|
3
|
+
* Represents an encryptable event with optional updates.
|
|
4
|
+
*/
|
|
5
|
+
export class Encryptable {
|
|
6
|
+
event;
|
|
7
|
+
updates;
|
|
8
|
+
/**
|
|
9
|
+
* Creates an instance of Encryptable.
|
|
10
|
+
* @param event - An EventTemplate with optional tags and content.
|
|
11
|
+
* @param updates - Plaintext updates to be applied to the event content.
|
|
12
|
+
* @example
|
|
13
|
+
* Here's an example which enables updating a private mute list:
|
|
14
|
+
* ```
|
|
15
|
+
* const event = {kind: 10000, content: "", tags: []} // An event, only kind is required
|
|
16
|
+
* const encryptable = new Encryptable(event, {content: JSON.stringify([["e", "bad word"]])})
|
|
17
|
+
* const eventTemplate = await encryptable.reconcile(myEncryptFunction)
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
constructor(event, updates) {
|
|
21
|
+
this.event = event;
|
|
22
|
+
this.updates = updates;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Encrypts plaintext updates and merges them into the event template.
|
|
26
|
+
* @param encrypt - The encryption function to be used.
|
|
27
|
+
* @returns A promise that resolves to the reconciled and encrypted event.
|
|
28
|
+
*/
|
|
29
|
+
async reconcile(encrypt) {
|
|
30
|
+
const encryptContent = () => {
|
|
31
|
+
if (!this.updates.content)
|
|
32
|
+
return null;
|
|
33
|
+
return encrypt(this.updates.content);
|
|
34
|
+
};
|
|
35
|
+
const encryptTags = () => {
|
|
36
|
+
if (!this.updates.tags)
|
|
37
|
+
return null;
|
|
38
|
+
return Promise.all(this.updates.tags.map(async (tag) => {
|
|
39
|
+
tag[1] = await encrypt(tag[1]);
|
|
40
|
+
return tag;
|
|
41
|
+
}));
|
|
42
|
+
};
|
|
43
|
+
const [content, tags] = await Promise.all([encryptContent(), encryptTags()]);
|
|
44
|
+
// Updates are optional. If not provided, fall back to the event's content and tags.
|
|
45
|
+
return {
|
|
46
|
+
...this.event,
|
|
47
|
+
tags: tags || this.event.tags || [],
|
|
48
|
+
content: content || this.event.content || "",
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=Encryptable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Encryptable.js","sourceRoot":"","sources":["../../../../util/src/Encryptable.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAE,YAAgC,EAAE,EAAE,EAAE,CAC1F,CAAC,EAAC,GAAG,KAAK,EAAE,SAAS,EAAC,CAAmB,CAAA;AAE3C;;GAEG;AACH,MAAM,OAAO,WAAW;IAcX;IACA;IAdX;;;;;;;;;;;OAWG;IACH,YACW,KAAiB,EACjB,OAA2B;QAD3B,UAAK,GAAL,KAAK,CAAY;QACjB,YAAO,GAAP,OAAO,CAAoB;IACnC,CAAC;IAEJ;;;;OAIG;IACH,KAAK,CAAC,SAAS,CAAC,OAAgB;QAC9B,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAA;YAEtC,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACtC,CAAC,CAAA;QAED,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAA;YAEnC,OAAO,OAAO,CAAC,GAAG,CAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;gBAChC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE9B,OAAO,GAAG,CAAA;YACZ,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QAE5E,oFAAoF;QACpF,OAAO;YACL,GAAG,IAAI,CAAC,KAAK;YACb,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;YACnC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE;SACxC,CAAA;IACR,CAAC;CACF"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { verifiedSymbol } from "nostr-tools/pure";
|
|
2
|
+
export type EventContent = {
|
|
3
|
+
tags: string[][];
|
|
4
|
+
content: string;
|
|
5
|
+
};
|
|
6
|
+
export type EventTemplate = EventContent & {
|
|
7
|
+
kind: number;
|
|
8
|
+
};
|
|
9
|
+
export type StampedEvent = EventTemplate & {
|
|
10
|
+
created_at: number;
|
|
11
|
+
};
|
|
12
|
+
export type OwnedEvent = StampedEvent & {
|
|
13
|
+
pubkey: string;
|
|
14
|
+
};
|
|
15
|
+
export type HashedEvent = OwnedEvent & {
|
|
16
|
+
id: string;
|
|
17
|
+
};
|
|
18
|
+
export type SignedEvent = HashedEvent & {
|
|
19
|
+
sig: string;
|
|
20
|
+
[verifiedSymbol]?: boolean;
|
|
21
|
+
};
|
|
22
|
+
export type UnwrappedEvent = HashedEvent & {
|
|
23
|
+
wrap: SignedEvent;
|
|
24
|
+
};
|
|
25
|
+
export type TrustedEvent = HashedEvent & {
|
|
26
|
+
sig?: string;
|
|
27
|
+
wrap?: SignedEvent;
|
|
28
|
+
[verifiedSymbol]?: boolean;
|
|
29
|
+
};
|
|
30
|
+
export type MakeEventOpts = {
|
|
31
|
+
content?: string;
|
|
32
|
+
tags?: string[][];
|
|
33
|
+
created_at?: number;
|
|
34
|
+
};
|
|
35
|
+
export declare const makeEvent: (kind: number, { content, tags, created_at }?: MakeEventOpts) => {
|
|
36
|
+
kind: number;
|
|
37
|
+
content: string;
|
|
38
|
+
tags: string[][];
|
|
39
|
+
created_at: number;
|
|
40
|
+
};
|
|
41
|
+
export declare const createEvent: (kind: number, { content, tags, created_at }?: MakeEventOpts) => {
|
|
42
|
+
kind: number;
|
|
43
|
+
content: string;
|
|
44
|
+
tags: string[][];
|
|
45
|
+
created_at: number;
|
|
46
|
+
};
|
|
47
|
+
export declare const verifyEvent: (event: TrustedEvent) => boolean;
|
|
48
|
+
export declare const isEventTemplate: (e: EventTemplate) => e is EventTemplate;
|
|
49
|
+
export declare const isStampedEvent: (e: StampedEvent) => e is StampedEvent;
|
|
50
|
+
export declare const isOwnedEvent: (e: OwnedEvent) => e is OwnedEvent;
|
|
51
|
+
export declare const isHashedEvent: (e: HashedEvent) => e is HashedEvent;
|
|
52
|
+
export declare const isSignedEvent: (e: TrustedEvent) => e is SignedEvent;
|
|
53
|
+
export declare const isUnwrappedEvent: (e: TrustedEvent) => e is UnwrappedEvent;
|
|
54
|
+
export declare const isTrustedEvent: (e: TrustedEvent) => e is TrustedEvent;
|
|
55
|
+
export declare const asEventTemplate: (e: EventTemplate) => EventTemplate;
|
|
56
|
+
export declare const asStampedEvent: (e: StampedEvent) => StampedEvent;
|
|
57
|
+
export declare const asOwnedEvent: (e: OwnedEvent) => OwnedEvent;
|
|
58
|
+
export declare const asHashedEvent: (e: HashedEvent) => HashedEvent;
|
|
59
|
+
export declare const asSignedEvent: (e: SignedEvent) => SignedEvent;
|
|
60
|
+
export declare const asUnwrappedEvent: (e: UnwrappedEvent) => UnwrappedEvent;
|
|
61
|
+
export declare const asTrustedEvent: (e: TrustedEvent) => TrustedEvent;
|
|
62
|
+
export declare const getIdentifier: (e: EventTemplate) => string | undefined;
|
|
63
|
+
export declare const getIdOrAddress: (e: HashedEvent) => string;
|
|
64
|
+
export declare const getIdAndAddress: (e: HashedEvent) => string[];
|
|
65
|
+
export declare const isEphemeral: (e: EventTemplate) => boolean;
|
|
66
|
+
export declare const isReplaceable: (e: EventTemplate) => boolean;
|
|
67
|
+
export declare const isPlainReplaceable: (e: EventTemplate) => boolean;
|
|
68
|
+
export declare const isParameterizedReplaceable: (e: EventTemplate) => boolean;
|
|
69
|
+
export declare const getAncestors: ({ kind, tags }: EventTemplate) => Record<string, string[]>;
|
|
70
|
+
export declare const getParentIdsAndAddrs: (event: EventTemplate) => string[];
|
|
71
|
+
export declare const getParentIdOrAddr: (event: EventTemplate) => string | undefined;
|
|
72
|
+
export declare const getParentIds: (event: EventTemplate) => string[];
|
|
73
|
+
export declare const getParentId: (event: EventTemplate) => string | undefined;
|
|
74
|
+
export declare const getParentAddrs: (event: EventTemplate) => string[];
|
|
75
|
+
export declare const getParentAddr: (event: EventTemplate) => string | undefined;
|
|
76
|
+
export declare const isChildOf: (child: EventTemplate, parent: HashedEvent) => boolean;
|
|
77
|
+
//# sourceMappingURL=Events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../../../util/src/Events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { verifiedSymbol, verifyEvent as verifyEventPure } from "nostr-tools/pure";
|
|
2
|
+
import { setNostrWasm, verifyEvent as verifyEventWasm } from "nostr-tools/wasm";
|
|
3
|
+
import { initNostrWasm } from "nostr-wasm";
|
|
4
|
+
import { mapVals, first, pick, now } from "@welshman/lib";
|
|
5
|
+
import { getReplyTagValues, getCommentTagValues } from "./Tags.js";
|
|
6
|
+
import { getAddress, Address } from "./Address.js";
|
|
7
|
+
import { COMMENT, isEphemeralKind, isReplaceableKind, isPlainReplaceableKind, isParameterizedReplaceableKind, } from "./Kinds.js";
|
|
8
|
+
export const makeEvent = (kind, { content = "", tags = [], created_at = now() } = {}) => ({ kind, content, tags, created_at });
|
|
9
|
+
export const createEvent = makeEvent;
|
|
10
|
+
export const verifyEvent = (() => {
|
|
11
|
+
let verify = verifyEventPure;
|
|
12
|
+
if (typeof WebAssembly === "object") {
|
|
13
|
+
initNostrWasm().then(nostrWasm => {
|
|
14
|
+
setNostrWasm(nostrWasm);
|
|
15
|
+
verify = verifyEventWasm;
|
|
16
|
+
}, e => {
|
|
17
|
+
console.warn(e);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return (event) => Boolean(event.sig && (event[verifiedSymbol] || verify(event)));
|
|
21
|
+
})();
|
|
22
|
+
export const isEventTemplate = (e) => Boolean(typeof e.kind === "number" && Array.isArray(e.tags) && typeof e.content === "string");
|
|
23
|
+
export const isStampedEvent = (e) => Boolean(isEventTemplate(e) && e.created_at >= 0);
|
|
24
|
+
export const isOwnedEvent = (e) => Boolean(isStampedEvent(e) && e.pubkey);
|
|
25
|
+
export const isHashedEvent = (e) => Boolean(isOwnedEvent(e) && e.id);
|
|
26
|
+
export const isSignedEvent = (e) => Boolean(isHashedEvent(e) && e.sig);
|
|
27
|
+
export const isUnwrappedEvent = (e) => Boolean(isHashedEvent(e) && e.wrap);
|
|
28
|
+
export const isTrustedEvent = (e) => isSignedEvent(e) || isUnwrappedEvent(e);
|
|
29
|
+
export const asEventTemplate = (e) => pick(["kind", "tags", "content"], e);
|
|
30
|
+
export const asStampedEvent = (e) => pick(["kind", "tags", "content", "created_at"], e);
|
|
31
|
+
export const asOwnedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey"], e);
|
|
32
|
+
export const asHashedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey", "id"], e);
|
|
33
|
+
export const asSignedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey", "id", "sig"], e);
|
|
34
|
+
export const asUnwrappedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey", "id", "wrap"], e);
|
|
35
|
+
export const asTrustedEvent = (e) => pick(["kind", "tags", "content", "created_at", "pubkey", "id", "sig", "wrap"], e);
|
|
36
|
+
export const getIdentifier = (e) => e.tags.find(t => t[0] === "d")?.[1];
|
|
37
|
+
export const getIdOrAddress = (e) => (isReplaceable(e) ? getAddress(e) : e.id);
|
|
38
|
+
export const getIdAndAddress = (e) => isReplaceable(e) ? [e.id, getAddress(e)] : [e.id];
|
|
39
|
+
export const isEphemeral = (e) => isEphemeralKind(e.kind);
|
|
40
|
+
export const isReplaceable = (e) => isReplaceableKind(e.kind);
|
|
41
|
+
export const isPlainReplaceable = (e) => isPlainReplaceableKind(e.kind);
|
|
42
|
+
export const isParameterizedReplaceable = (e) => isParameterizedReplaceableKind(e.kind);
|
|
43
|
+
export const getAncestors = ({ kind, tags }) => kind === COMMENT ? getCommentTagValues(tags) : getReplyTagValues(tags);
|
|
44
|
+
export const getParentIdsAndAddrs = (event) => {
|
|
45
|
+
const { roots, replies } = getAncestors(event);
|
|
46
|
+
return replies.length > 0 ? replies : roots;
|
|
47
|
+
};
|
|
48
|
+
export const getParentIdOrAddr = (event) => first(getParentIdsAndAddrs(event));
|
|
49
|
+
export const getParentIds = (event) => {
|
|
50
|
+
const { roots, replies } = mapVals(ids => ids.filter(id => !Address.isAddress(id)), getAncestors(event));
|
|
51
|
+
return replies.length > 0 ? replies : roots;
|
|
52
|
+
};
|
|
53
|
+
export const getParentId = (event) => first(getParentIds(event));
|
|
54
|
+
export const getParentAddrs = (event) => {
|
|
55
|
+
const { roots, replies } = mapVals(ids => ids.filter(id => Address.isAddress(id)), getAncestors(event));
|
|
56
|
+
return replies.length > 0 ? replies : roots;
|
|
57
|
+
};
|
|
58
|
+
export const getParentAddr = (event) => first(getParentAddrs(event));
|
|
59
|
+
export const isChildOf = (child, parent) => {
|
|
60
|
+
const idsAndAddrs = getParentIdsAndAddrs(child);
|
|
61
|
+
return getIdAndAddress(parent).some(x => idsAndAddrs.includes(x));
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=Events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Events.js","sourceRoot":"","sources":["../../../../util/src/Events.ts"],"names":[],"mappings":"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"}
|