@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.
Files changed (171) hide show
  1. package/LICENSE +21 -0
  2. package/dist/lib/src/Deferred.d.ts +21 -0
  3. package/dist/lib/src/Deferred.d.ts.map +1 -0
  4. package/dist/lib/src/Deferred.js +21 -0
  5. package/dist/lib/src/Deferred.js.map +1 -0
  6. package/dist/lib/src/Emitter.d.ts +14 -0
  7. package/dist/lib/src/Emitter.d.ts.map +1 -0
  8. package/dist/lib/src/Emitter.js +18 -0
  9. package/dist/lib/src/Emitter.js.map +1 -0
  10. package/dist/lib/src/LRUCache.d.ts +42 -0
  11. package/dist/lib/src/LRUCache.d.ts.map +1 -0
  12. package/dist/lib/src/LRUCache.js +62 -0
  13. package/dist/lib/src/LRUCache.js.map +1 -0
  14. package/dist/lib/src/TaskQueue.d.ts +20 -0
  15. package/dist/lib/src/TaskQueue.d.ts.map +1 -0
  16. package/dist/lib/src/TaskQueue.js +57 -0
  17. package/dist/lib/src/TaskQueue.js.map +1 -0
  18. package/dist/lib/src/Tools.d.ts +727 -0
  19. package/dist/lib/src/Tools.d.ts.map +1 -0
  20. package/dist/lib/src/Tools.js +1224 -0
  21. package/dist/lib/src/Tools.js.map +1 -0
  22. package/dist/lib/src/index.d.ts +7 -0
  23. package/dist/lib/src/index.d.ts.map +1 -0
  24. package/dist/lib/src/index.js +7 -0
  25. package/dist/lib/src/index.js.map +1 -0
  26. package/dist/lib/src/normalize-url/index.d.ts +286 -0
  27. package/dist/lib/src/normalize-url/index.d.ts.map +1 -0
  28. package/dist/lib/src/normalize-url/index.js +252 -0
  29. package/dist/lib/src/normalize-url/index.js.map +1 -0
  30. package/{build → dist/net}/src/adapter.d.ts +5 -7
  31. package/dist/net/src/adapter.d.ts.map +1 -0
  32. package/dist/net/src/adapter.js.map +1 -0
  33. package/{build → dist/net}/src/auth.d.ts +7 -21
  34. package/dist/net/src/auth.d.ts.map +1 -0
  35. package/{build → dist/net}/src/auth.js +35 -58
  36. package/dist/net/src/auth.js.map +1 -0
  37. package/{build → dist/net}/src/context.d.ts +3 -0
  38. package/dist/net/src/context.d.ts.map +1 -0
  39. package/{build → dist/net}/src/context.js +3 -3
  40. package/dist/net/src/context.js.map +1 -0
  41. package/{build → dist/net}/src/diff.d.ts +3 -4
  42. package/dist/net/src/diff.d.ts.map +1 -0
  43. package/{build → dist/net}/src/diff.js +11 -13
  44. package/dist/net/src/diff.js.map +1 -0
  45. package/{build → dist/net}/src/index.d.ts +1 -0
  46. package/dist/net/src/index.d.ts.map +1 -0
  47. package/dist/net/src/index.js.map +1 -0
  48. package/{build → dist/net}/src/message.d.ts +1 -0
  49. package/dist/net/src/message.d.ts.map +1 -0
  50. package/dist/net/src/message.js.map +1 -0
  51. package/{build → dist/net}/src/negentropy.d.ts +2 -1
  52. package/dist/net/src/negentropy.d.ts.map +1 -0
  53. package/{build → dist/net}/src/negentropy.js +42 -18
  54. package/dist/net/src/negentropy.js.map +1 -0
  55. package/{build → dist/net}/src/policy.d.ts +16 -8
  56. package/dist/net/src/policy.d.ts.map +1 -0
  57. package/{build → dist/net}/src/policy.js +61 -83
  58. package/dist/net/src/policy.js.map +1 -0
  59. package/{build → dist/net}/src/pool.d.ts +2 -1
  60. package/dist/net/src/pool.d.ts.map +1 -0
  61. package/{build → dist/net}/src/pool.js +8 -8
  62. package/dist/net/src/pool.js.map +1 -0
  63. package/dist/net/src/publish.d.ts +44 -0
  64. package/dist/net/src/publish.d.ts.map +1 -0
  65. package/dist/net/src/publish.js +96 -0
  66. package/dist/net/src/publish.js.map +1 -0
  67. package/dist/net/src/request.d.ts +55 -0
  68. package/dist/net/src/request.d.ts.map +1 -0
  69. package/dist/net/src/request.js +212 -0
  70. package/dist/net/src/request.js.map +1 -0
  71. package/{build → dist/net}/src/socket.d.ts +11 -9
  72. package/dist/net/src/socket.d.ts.map +1 -0
  73. package/{build → dist/net}/src/socket.js +15 -8
  74. package/dist/net/src/socket.js.map +1 -0
  75. package/{build → dist/net}/src/tracker.d.ts +1 -0
  76. package/dist/net/src/tracker.d.ts.map +1 -0
  77. package/dist/net/src/tracker.js.map +1 -0
  78. package/dist/net/src/util.d.ts +2 -0
  79. package/dist/net/src/util.d.ts.map +1 -0
  80. package/{build → dist/net}/src/util.js.map +1 -1
  81. package/dist/relay/src/index.d.ts +3 -0
  82. package/dist/relay/src/index.d.ts.map +1 -0
  83. package/dist/relay/src/index.js +3 -0
  84. package/dist/relay/src/index.js.map +1 -0
  85. package/dist/relay/src/relay.d.ts +13 -0
  86. package/dist/relay/src/relay.d.ts.map +1 -0
  87. package/dist/relay/src/relay.js +48 -0
  88. package/dist/relay/src/relay.js.map +1 -0
  89. package/dist/relay/src/repository.d.ts +63 -0
  90. package/dist/relay/src/repository.d.ts.map +1 -0
  91. package/dist/relay/src/repository.js +270 -0
  92. package/dist/relay/src/repository.js.map +1 -0
  93. package/dist/tsconfig.build.tsbuildinfo +1 -0
  94. package/dist/util/src/Address.d.ts +21 -0
  95. package/dist/util/src/Address.d.ts.map +1 -0
  96. package/dist/util/src/Address.js +43 -0
  97. package/dist/util/src/Address.js.map +1 -0
  98. package/dist/util/src/Encryptable.d.ts +34 -0
  99. package/dist/util/src/Encryptable.d.ts.map +1 -0
  100. package/dist/util/src/Encryptable.js +52 -0
  101. package/dist/util/src/Encryptable.js.map +1 -0
  102. package/dist/util/src/Events.d.ts +77 -0
  103. package/dist/util/src/Events.d.ts.map +1 -0
  104. package/dist/util/src/Events.js +63 -0
  105. package/dist/util/src/Events.js.map +1 -0
  106. package/dist/util/src/Filters.d.ts +48 -0
  107. package/dist/util/src/Filters.d.ts.map +1 -0
  108. package/dist/util/src/Filters.js +185 -0
  109. package/dist/util/src/Filters.js.map +1 -0
  110. package/dist/util/src/Handler.d.ts +17 -0
  111. package/dist/util/src/Handler.d.ts.map +1 -0
  112. package/dist/util/src/Handler.js +33 -0
  113. package/dist/util/src/Handler.js.map +1 -0
  114. package/dist/util/src/Kinds.d.ts +159 -0
  115. package/dist/util/src/Kinds.d.ts.map +1 -0
  116. package/dist/util/src/Kinds.js +160 -0
  117. package/dist/util/src/Kinds.js.map +1 -0
  118. package/dist/util/src/Links.d.ts +3 -0
  119. package/dist/util/src/Links.d.ts.map +1 -0
  120. package/dist/util/src/Links.js +3 -0
  121. package/dist/util/src/Links.js.map +1 -0
  122. package/dist/util/src/List.d.ts +34 -0
  123. package/dist/util/src/List.d.ts.map +1 -0
  124. package/dist/util/src/List.js +74 -0
  125. package/dist/util/src/List.js.map +1 -0
  126. package/dist/util/src/Profile.d.ts +26 -0
  127. package/dist/util/src/Profile.d.ts.map +1 -0
  128. package/dist/util/src/Profile.js +50 -0
  129. package/dist/util/src/Profile.js.map +1 -0
  130. package/dist/util/src/Relay.d.ts +32 -0
  131. package/dist/util/src/Relay.d.ts.map +1 -0
  132. package/dist/util/src/Relay.js +49 -0
  133. package/dist/util/src/Relay.js.map +1 -0
  134. package/dist/util/src/Tags.d.ts +32 -0
  135. package/dist/util/src/Tags.d.ts.map +1 -0
  136. package/dist/util/src/Tags.js +74 -0
  137. package/dist/util/src/Tags.js.map +1 -0
  138. package/dist/util/src/Zaps.d.ts +20 -0
  139. package/dist/util/src/Zaps.d.ts.map +1 -0
  140. package/dist/util/src/Zaps.js +93 -0
  141. package/dist/util/src/Zaps.js.map +1 -0
  142. package/dist/util/src/index.d.ts +13 -0
  143. package/dist/util/src/index.d.ts.map +1 -0
  144. package/dist/util/src/index.js +13 -0
  145. package/dist/util/src/index.js.map +1 -0
  146. package/package.json +18 -21
  147. package/README.md +0 -61
  148. package/build/src/adapter.js.map +0 -1
  149. package/build/src/auth.js.map +0 -1
  150. package/build/src/context.js.map +0 -1
  151. package/build/src/diff.js.map +0 -1
  152. package/build/src/index.js.map +0 -1
  153. package/build/src/message.js.map +0 -1
  154. package/build/src/negentropy.js.map +0 -1
  155. package/build/src/policy.js.map +0 -1
  156. package/build/src/pool.js.map +0 -1
  157. package/build/src/publish.d.ts +0 -60
  158. package/build/src/publish.js +0 -120
  159. package/build/src/publish.js.map +0 -1
  160. package/build/src/request.d.ts +0 -79
  161. package/build/src/request.js +0 -191
  162. package/build/src/request.js.map +0 -1
  163. package/build/src/socket.js.map +0 -1
  164. package/build/src/tracker.js.map +0 -1
  165. package/build/src/util.d.ts +0 -3
  166. package/build/tsconfig.tsbuildinfo +0 -1
  167. /package/{build → dist/net}/src/adapter.js +0 -0
  168. /package/{build → dist/net}/src/index.js +0 -0
  169. /package/{build → dist/net}/src/message.js +0 -0
  170. /package/{build → dist/net}/src/tracker.js +0 -0
  171. /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":"AAAA,OAAO,EAAC,cAAc,EAAiC,MAAM,kBAAkB,CAAA;AAc/E,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG;IACzC,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG;IACrC,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IACzC,IAAI,EAAE,WAAW,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IACvC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,SAAS,GACpB,MAAM,MAAM,EACZ,gCAA+C,aAAkB;;;;;CAC3B,CAAA;AAExC,eAAO,MAAM,WAAW,SAJhB,MAAM,kCACmC,aAAa;;;;;CAG1B,CAAA;AAEpC,eAAO,MAAM,WAAW,UAeP,YAAY,YAEzB,CAAA;AAEJ,eAAO,MAAM,eAAe,GAAI,GAAG,aAAa,KAAG,CAAC,IAAI,aACuC,CAAA;AAE/F,eAAO,MAAM,cAAc,GAAI,GAAG,YAAY,KAAG,CAAC,IAAI,YACJ,CAAA;AAElD,eAAO,MAAM,YAAY,GAAI,GAAG,UAAU,KAAG,CAAC,IAAI,UACV,CAAA;AAExC,eAAO,MAAM,aAAa,GAAI,GAAG,WAAW,KAAG,CAAC,IAAI,WAA+C,CAAA;AAEnG,eAAO,MAAM,aAAa,GAAI,GAAG,YAAY,KAAG,CAAC,IAAI,WACjB,CAAA;AAEpC,eAAO,MAAM,gBAAgB,GAAI,GAAG,YAAY,KAAG,CAAC,IAAI,cACnB,CAAA;AAErC,eAAO,MAAM,cAAc,GAAI,GAAG,YAAY,KAAG,CAAC,IAAI,YACb,CAAA;AAEzC,eAAO,MAAM,eAAe,GAAI,GAAG,aAAa,KAAG,aACb,CAAA;AAEtC,eAAO,MAAM,cAAc,GAAI,GAAG,YAAY,KAAG,YACG,CAAA;AAEpD,eAAO,MAAM,YAAY,GAAI,GAAG,UAAU,KAAG,UACiB,CAAA;AAE9D,eAAO,MAAM,aAAa,GAAI,GAAG,WAAW,KAAG,WACqB,CAAA;AAEpE,eAAO,MAAM,aAAa,GAAI,GAAG,WAAW,KAAG,WAC4B,CAAA;AAE3E,eAAO,MAAM,gBAAgB,GAAI,GAAG,cAAc,KAAG,cACuB,CAAA;AAE5E,eAAO,MAAM,cAAc,GAAI,GAAG,YAAY,KAAG,YACkC,CAAA;AAEnF,eAAO,MAAM,aAAa,GAAI,GAAG,aAAa,uBAAwC,CAAA;AAEtF,eAAO,MAAM,cAAc,GAAI,GAAG,WAAW,WAA8C,CAAA;AAE3F,eAAO,MAAM,eAAe,GAAI,GAAG,WAAW,aACK,CAAA;AAEnD,eAAO,MAAM,WAAW,GAAI,GAAG,aAAa,YAA4B,CAAA;AAExE,eAAO,MAAM,aAAa,GAAI,GAAG,aAAa,YAA8B,CAAA;AAE5E,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,YAAmC,CAAA;AAEtF,eAAO,MAAM,0BAA0B,GAAI,GAAG,aAAa,YACnB,CAAA;AAExC,eAAO,MAAM,YAAY,GAAI,gBAAc,aAAa,6BACgB,CAAA;AAExE,eAAO,MAAM,oBAAoB,GAAI,OAAO,aAAa,aAIxD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,OAAO,aAAa,uBAAuC,CAAA;AAE7F,eAAO,MAAM,YAAY,GAAI,OAAO,aAAa,aAOhD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,aAAa,uBAA+B,CAAA;AAE/E,eAAO,MAAM,cAAc,GAAI,OAAO,aAAa,aAOlD,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,uBAAiC,CAAA;AAEnF,eAAO,MAAM,SAAS,GAAI,OAAO,aAAa,EAAE,QAAQ,WAAW,YAIlE,CAAA"}
@@ -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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"}