@welshman/app 0.11.3 → 0.12.1

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 (92) hide show
  1. package/dist/app/src/command.d.ts +5 -5
  2. package/dist/app/src/command.d.ts.map +1 -1
  3. package/dist/app/src/command.js +3 -3
  4. package/dist/app/src/command.js.map +1 -1
  5. package/dist/app/src/index.d.ts +1 -1
  6. package/dist/app/src/index.d.ts.map +1 -1
  7. package/dist/app/src/index.js +1 -1
  8. package/dist/app/src/index.js.map +1 -1
  9. package/dist/app/src/plugins/feeds.d.ts +1 -1
  10. package/dist/app/src/plugins/feeds.js +1 -1
  11. package/dist/app/src/plugins/publisher.d.ts +123 -0
  12. package/dist/app/src/plugins/publisher.d.ts.map +1 -0
  13. package/dist/app/src/plugins/publisher.js +368 -0
  14. package/dist/app/src/plugins/publisher.js.map +1 -0
  15. package/dist/app/src/plugins/wraps.d.ts +4 -4
  16. package/dist/app/src/plugins/wraps.d.ts.map +1 -1
  17. package/dist/app/src/plugins/wraps.js +5 -3
  18. package/dist/app/src/plugins/wraps.js.map +1 -1
  19. package/dist/app/src/plugins/zappers.d.ts +1 -3
  20. package/dist/app/src/plugins/zappers.d.ts.map +1 -1
  21. package/dist/app/src/plugins/zappers.js +1 -3
  22. package/dist/app/src/plugins/zappers.js.map +1 -1
  23. package/dist/domain/src/core/ListWriter.d.ts.map +1 -1
  24. package/dist/domain/src/core/ListWriter.js +1 -0
  25. package/dist/domain/src/core/ListWriter.js.map +1 -1
  26. package/dist/domain/src/kinds/Feed.js +1 -1
  27. package/dist/domain/src/kinds/Feed.js.map +1 -1
  28. package/dist/domain/src/kinds/Label.d.ts +5 -0
  29. package/dist/domain/src/kinds/Label.d.ts.map +1 -1
  30. package/dist/domain/src/kinds/Label.js +19 -3
  31. package/dist/domain/src/kinds/Label.js.map +1 -1
  32. package/dist/domain/src/kinds/Profile.d.ts +1 -1
  33. package/dist/domain/src/kinds/Profile.d.ts.map +1 -1
  34. package/dist/domain/src/kinds/Profile.js +2 -4
  35. package/dist/domain/src/kinds/Profile.js.map +1 -1
  36. package/dist/domain/src/kinds/Repost.d.ts +1 -2
  37. package/dist/domain/src/kinds/Repost.d.ts.map +1 -1
  38. package/dist/domain/src/kinds/Repost.js +36 -4
  39. package/dist/domain/src/kinds/Repost.js.map +1 -1
  40. package/dist/domain/src/kinds/RoomList.d.ts +2 -0
  41. package/dist/domain/src/kinds/RoomList.d.ts.map +1 -1
  42. package/dist/domain/src/kinds/RoomList.js +20 -10
  43. package/dist/domain/src/kinds/RoomList.js.map +1 -1
  44. package/dist/domain/src/kinds/RoomPins.d.ts +2 -2
  45. package/dist/domain/src/kinds/RoomPins.d.ts.map +1 -1
  46. package/dist/domain/src/kinds/RoomPins.js +1 -0
  47. package/dist/domain/src/kinds/RoomPins.js.map +1 -1
  48. package/dist/domain/src/kinds/RoomUpdatePins.d.ts +3 -9
  49. package/dist/domain/src/kinds/RoomUpdatePins.d.ts.map +1 -1
  50. package/dist/domain/src/kinds/RoomUpdatePins.js +4 -21
  51. package/dist/domain/src/kinds/RoomUpdatePins.js.map +1 -1
  52. package/dist/feeds/src/router.d.ts.map +1 -1
  53. package/dist/feeds/src/router.js +1 -3
  54. package/dist/feeds/src/router.js.map +1 -1
  55. package/dist/lib/src/Tools.d.ts +6 -2
  56. package/dist/lib/src/Tools.d.ts.map +1 -1
  57. package/dist/lib/src/Tools.js +10 -6
  58. package/dist/lib/src/Tools.js.map +1 -1
  59. package/dist/net/src/policy.d.ts.map +1 -1
  60. package/dist/net/src/policy.js +6 -0
  61. package/dist/net/src/policy.js.map +1 -1
  62. package/dist/net/src/repository.d.ts +4 -2
  63. package/dist/net/src/repository.d.ts.map +1 -1
  64. package/dist/net/src/repository.js +86 -82
  65. package/dist/net/src/repository.js.map +1 -1
  66. package/dist/net/src/request.d.ts +0 -2
  67. package/dist/net/src/request.d.ts.map +1 -1
  68. package/dist/net/src/request.js +0 -4
  69. package/dist/net/src/request.js.map +1 -1
  70. package/dist/net/src/tracker.d.ts +1 -1
  71. package/dist/net/src/tracker.d.ts.map +1 -1
  72. package/dist/net/src/tracker.js +14 -6
  73. package/dist/net/src/tracker.js.map +1 -1
  74. package/dist/net/src/wrapManager.d.ts +0 -1
  75. package/dist/net/src/wrapManager.d.ts.map +1 -1
  76. package/dist/net/src/wrapManager.js +7 -7
  77. package/dist/net/src/wrapManager.js.map +1 -1
  78. package/dist/signer/src/signers/nip46.d.ts.map +1 -1
  79. package/dist/signer/src/signers/nip46.js +4 -1
  80. package/dist/signer/src/signers/nip46.js.map +1 -1
  81. package/dist/tsconfig.build.tsbuildinfo +1 -1
  82. package/dist/util/src/RelaySelection.d.ts.map +1 -1
  83. package/dist/util/src/RelaySelection.js.map +1 -1
  84. package/dist/util/src/Tags.d.ts +1 -0
  85. package/dist/util/src/Tags.d.ts.map +1 -1
  86. package/dist/util/src/Tags.js +12 -0
  87. package/dist/util/src/Tags.js.map +1 -1
  88. package/package.json +15 -15
  89. package/dist/app/src/plugins/thunk.d.ts +0 -76
  90. package/dist/app/src/plugins/thunk.d.ts.map +0 -1
  91. package/dist/app/src/plugins/thunk.js +0 -344
  92. package/dist/app/src/plugins/thunk.js.map +0 -1
@@ -1,344 +0,0 @@
1
- import { get, writable } from "svelte/store";
2
- import { append, TaskQueue, ensurePlural, remove, defer, sleep, nth, without } from "@welshman/lib";
3
- import { isSignedEvent, WRAPPED_KINDS, prep, makePow, } from "@welshman/util";
4
- import { PublishStatus } from "@welshman/net";
5
- import { Nip01Signer, Nip59 } from "@welshman/signer";
6
- import { Network } from "./network.js";
7
- import { User } from "../user.js";
8
- /**
9
- * Shared base for `Thunk` and `MergedThunk`: a subscribable bag of per-relay
10
- * publish `results`.
11
- */
12
- export class BaseThunk {
13
- _subs = [];
14
- results = {};
15
- _notify() {
16
- for (const subscriber of this._subs) {
17
- subscriber(this);
18
- }
19
- }
20
- subscribe(subscriber) {
21
- this._subs.push(subscriber);
22
- subscriber(this);
23
- return () => {
24
- this._subs = remove(subscriber, this._subs);
25
- };
26
- }
27
- getUrlsWithStatus(statuses) {
28
- const matches = ensurePlural(statuses);
29
- return Object.entries(this.results)
30
- .filter(([_, { status }]) => matches.includes(status))
31
- .map(nth(0));
32
- }
33
- getCompleteUrls() {
34
- return this.getUrlsWithStatus(without([PublishStatus.Sending, PublishStatus.Pending], Object.values(PublishStatus)));
35
- }
36
- getIncompleteUrls() {
37
- return this.getUrlsWithStatus([PublishStatus.Sending, PublishStatus.Pending]);
38
- }
39
- getFailedUrls() {
40
- return this.getUrlsWithStatus([PublishStatus.Failure, PublishStatus.Timeout]);
41
- }
42
- hasStatus(statuses) {
43
- return this.getUrlsWithStatus(statuses).length > 0;
44
- }
45
- isComplete() {
46
- return !this.hasStatus([PublishStatus.Sending, PublishStatus.Pending]);
47
- }
48
- getError() {
49
- for (const [_, { status, detail }] of Object.entries(this.results)) {
50
- if (status === PublishStatus.Failure) {
51
- return detail;
52
- }
53
- }
54
- if (this.isComplete()) {
55
- return "";
56
- }
57
- }
58
- waitForError() {
59
- return new Promise(resolve => {
60
- this.subscribe(thunk => {
61
- const error = thunk.getError();
62
- if (error !== undefined) {
63
- resolve(error);
64
- }
65
- });
66
- });
67
- }
68
- waitForCompletion() {
69
- return new Promise(resolve => {
70
- this.subscribe(thunk => {
71
- if (thunk.isComplete()) {
72
- resolve();
73
- }
74
- });
75
- });
76
- }
77
- }
78
- export class Thunk extends BaseThunk {
79
- options;
80
- complete = defer();
81
- controller = new AbortController();
82
- wrap;
83
- // The id of the copy in the repository, which pow re-hashes and an abort unwinds.
84
- initialId;
85
- constructor(options) {
86
- super();
87
- if (!options.recipient && WRAPPED_KINDS.includes(options.event.kind)) {
88
- throw new Error(`Attempted to publish a kind ${options.event.kind} without wrapping it`);
89
- }
90
- this.options = { ...options, event: prep(options.event, User.require(options.app).pubkey) };
91
- this.initialId = this.options.event.id;
92
- for (const relay of options.relays) {
93
- this.results[relay] = {
94
- relay,
95
- status: PublishStatus.Sending,
96
- detail: "sending...",
97
- };
98
- }
99
- this.controller.signal.addEventListener("abort", () => {
100
- for (const relay of options.relays) {
101
- this._setAborted({
102
- relay,
103
- status: PublishStatus.Aborted,
104
- detail: "aborted",
105
- });
106
- }
107
- });
108
- }
109
- get user() {
110
- return User.require(this.options.app);
111
- }
112
- _fail(detail) {
113
- for (const relay of this.options.relays) {
114
- this.results[relay] = {
115
- relay,
116
- status: PublishStatus.Failure,
117
- detail: detail,
118
- };
119
- }
120
- this._notify();
121
- }
122
- _setPending = (result) => {
123
- this.options.onPending?.(result);
124
- this.results[result.relay] = result;
125
- this._notify();
126
- };
127
- _setTimeout = (result) => {
128
- this.options.onTimeout?.(result);
129
- this.results[result.relay] = result;
130
- this._notify();
131
- };
132
- _setAborted = (result) => {
133
- this.options.onAborted?.(result);
134
- this.results[result.relay] = result;
135
- this._notify();
136
- };
137
- async _publish(event) {
138
- // Wait if the thunk is to be delayed
139
- if (this.options.delay) {
140
- await sleep(this.options.delay);
141
- }
142
- // Skip publishing if aborted
143
- if (this.controller.signal.aborted) {
144
- return;
145
- }
146
- // Send it off
147
- await this.options.app.use(Network).publish({
148
- ...this.options,
149
- event,
150
- onSuccess: (result) => {
151
- this.options.onSuccess?.(result);
152
- this.results[result.relay] = result;
153
- this._notify();
154
- },
155
- onFailure: (result) => {
156
- this.options.onFailure?.(result);
157
- this.results[result.relay] = result;
158
- this._notify();
159
- },
160
- onPending: this._setPending,
161
- onTimeout: this._setTimeout,
162
- onAborted: this._setAborted,
163
- onComplete: (result) => {
164
- if (result.status !== PublishStatus.Success) {
165
- this.options.app.tracker.removeRelay(event.id, result.relay);
166
- }
167
- this.options.onComplete?.(result);
168
- this._subs = [];
169
- },
170
- });
171
- // Notify the caller that we're done
172
- this.complete.resolve();
173
- }
174
- async publish() {
175
- // Handle abort immediately if possible
176
- if (this.controller.signal.aborted)
177
- return;
178
- const { recipient } = this.options;
179
- // If we're sending it privately, wrap the event using nip 59
180
- if (recipient) {
181
- const wrapper = Nip01Signer.ephemeral();
182
- const nip59 = new Nip59(this.user.signer, wrapper);
183
- this.wrap = await nip59.wrap(recipient, this.options.event);
184
- // If we're calculating pow, update the hash and re-sign
185
- if (this.options.pow) {
186
- this.wrap = await wrapper.sign(await makePow(this.wrap, this.options.pow).result, {
187
- signal: AbortSignal.timeout(30_000),
188
- });
189
- }
190
- // If we aborted during wrapping, signing, or pow, nevermind
191
- if (this.controller.signal.aborted) {
192
- return;
193
- }
194
- this.options.app.wrapManager.add({ recipient, wrap: this.wrap, rumor: this.options.event });
195
- return this._publish(this.wrap);
196
- }
197
- // If the event has been signed, we're good to go
198
- if (isSignedEvent(this.options.event)) {
199
- if (this.options.pow) {
200
- console.warn("Event is already signed, skipping proof of work calculation");
201
- }
202
- return this._publish(this.options.event);
203
- }
204
- // Allow for lazily signing/powing events in order to decrease apparent latency in the UI
205
- // that results from waiting for remote signers
206
- try {
207
- if (this.options.pow) {
208
- this.options.event = await makePow(this.options.event, this.options.pow).result;
209
- }
210
- const signedEvent = await this.user.sign(this.options.event, {
211
- signal: AbortSignal.timeout(30_000),
212
- });
213
- // Signing is slow enough to be aborted mid-flight; bail before writing the
214
- // signed event, since the abort handler has already unwound the unsigned one
215
- if (this.controller.signal.aborted) {
216
- return;
217
- }
218
- // Only pow changes the id, and only then is there an optimistic copy left to remove
219
- if (this.initialId !== signedEvent.id) {
220
- for (const url of this.options.relays) {
221
- this.options.app.tracker.removeRelay(this.initialId, url);
222
- this.options.app.tracker.track(signedEvent.id, url);
223
- }
224
- this.options.app.repository.removeEvent(this.initialId);
225
- }
226
- this.options.app.repository.publish(signedEvent);
227
- this.initialId = signedEvent.id;
228
- this.options.event = signedEvent;
229
- return this._publish(signedEvent);
230
- }
231
- catch (e) {
232
- console.error("Failed to sign event", e);
233
- return this._fail(String(e || "Failed to sign event"));
234
- }
235
- }
236
- abort() {
237
- this.controller.abort();
238
- }
239
- }
240
- export class MergedThunk extends BaseThunk {
241
- thunks;
242
- constructor(thunks) {
243
- super();
244
- this.thunks = thunks;
245
- const { Aborted, Failure, Timeout, Pending, Sending, Success } = PublishStatus;
246
- const relays = new Set(thunks.flatMap(thunk => thunk.options.relays));
247
- for (const thunk of thunks) {
248
- thunk.subscribe(() => {
249
- this.results = {};
250
- for (const relay of relays) {
251
- for (const status of [Aborted, Failure, Timeout, Pending, Sending, Success]) {
252
- const match = thunks.find(t => t.results[relay]?.status === status);
253
- if (match) {
254
- this.results[relay] = match.results[relay];
255
- }
256
- }
257
- }
258
- this._notify();
259
- if (thunks.every(t => t.isComplete())) {
260
- this._subs = [];
261
- }
262
- });
263
- }
264
- }
265
- abort() {
266
- this.thunks.forEach(thunk => thunk.abort());
267
- }
268
- }
269
- /**
270
- * Per-app thunk manager — the publish-side counterpart of `Network`. Owns
271
- * the app's optimistic-publish `history` store and the `queue` that paces
272
- * publishing. Reach it via `app.use(Thunks)`; `publish` fills in the app
273
- * (the acting user is derived from it), enqueues the thunk (optimistically
274
- * writing it to the repository), and returns it.
275
- */
276
- export class Thunks {
277
- app;
278
- history = writable([]);
279
- queue = new TaskQueue({
280
- batchSize: 10,
281
- batchDelay: 100,
282
- processItem: (thunk) => {
283
- thunk.publish();
284
- },
285
- });
286
- constructor(app) {
287
- this.app = app;
288
- app.onCleanup(() => {
289
- this.queue.clear();
290
- // Anything still in flight would go on publishing after teardown, opening
291
- // sockets in the cleared pool and writing its event back into the cleared
292
- // repository. Aborting also unwinds each thunk's optimistic write.
293
- for (const thunk of get(this.history)) {
294
- if (!thunk.isComplete()) {
295
- thunk.abort();
296
- }
297
- }
298
- });
299
- }
300
- enqueue(thunk) {
301
- this.queue.push(thunk);
302
- for (const url of thunk.options.relays) {
303
- this.app.tracker.track(thunk.initialId, url);
304
- }
305
- this.app.repository.publish(thunk.options.event);
306
- this.history.update($history => append(thunk, $history));
307
- thunk.controller.signal.addEventListener("abort", () => {
308
- // wrapManager.remove may not have registered the wrap yet if abort races it.
309
- if (thunk.wrap) {
310
- this.app.wrapManager.remove(thunk.wrap.id);
311
- }
312
- this.app.repository.removeEvent(thunk.initialId);
313
- this.history.update($history => remove(thunk, $history));
314
- });
315
- }
316
- publish = (options) => {
317
- const thunk = new Thunk({ ...options, app: this.app });
318
- this.enqueue(thunk);
319
- return thunk;
320
- };
321
- // Pass `relays` to republish only to those of the thunk's relays, e.g. the ones that failed.
322
- // A merged thunk then retries only the children that published to them.
323
- retry = (thunk, relays) => {
324
- const targets = (t) => relays ? t.options.relays.filter(url => relays.includes(url)) : t.options.relays;
325
- const republish = (t) => this.publish({ ...t.options, relays: targets(t) });
326
- return thunk instanceof MergedThunk
327
- ? new MergedThunk(thunk.thunks.filter(t => targets(t).length > 0).map(republish))
328
- : republish(thunk);
329
- };
330
- merge(thunks) {
331
- return new MergedThunk(Array.from(this.flatten(thunks)));
332
- }
333
- *flatten(thunks) {
334
- for (const thunk of thunks) {
335
- if (thunk instanceof MergedThunk) {
336
- yield* this.flatten(thunk.thunks);
337
- }
338
- else if (thunk instanceof Thunk) {
339
- yield thunk;
340
- }
341
- }
342
- }
343
- }
344
- //# sourceMappingURL=thunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"thunk.js","sourceRoot":"","sources":["../../../../src/plugins/thunk.ts"],"names":[],"mappings":"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"}