nostr-tools 2.23.8 → 2.23.9

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 (73) hide show
  1. package/lib/cjs/abstract-pool.js +128 -4
  2. package/lib/cjs/abstract-pool.js.map +4 -4
  3. package/lib/cjs/abstract-relay.js +29 -4
  4. package/lib/cjs/abstract-relay.js.map +2 -2
  5. package/lib/cjs/filter.js.map +1 -1
  6. package/lib/cjs/index.js +377 -61
  7. package/lib/cjs/index.js.map +4 -4
  8. package/lib/cjs/kinds.js +196 -4
  9. package/lib/cjs/kinds.js.map +2 -2
  10. package/lib/cjs/nip17.js.map +2 -2
  11. package/lib/cjs/nip18.js.map +2 -2
  12. package/lib/cjs/nip25.js.map +1 -1
  13. package/lib/cjs/nip28.js.map +2 -2
  14. package/lib/cjs/nip42.js.map +2 -2
  15. package/lib/cjs/nip45.js +183 -0
  16. package/lib/cjs/nip45.js.map +7 -0
  17. package/lib/cjs/nip46.js +128 -4
  18. package/lib/cjs/nip46.js.map +4 -4
  19. package/lib/cjs/nip47.js.map +2 -2
  20. package/lib/cjs/nip57.js.map +1 -1
  21. package/lib/cjs/nip58.js.map +2 -2
  22. package/lib/cjs/nip59.js.map +2 -2
  23. package/lib/cjs/nip75.js.map +2 -2
  24. package/lib/cjs/nip94.js.map +2 -2
  25. package/lib/cjs/nip98.js.map +2 -2
  26. package/lib/cjs/nip99.js.map +2 -2
  27. package/lib/cjs/nipb0.js +1064 -0
  28. package/lib/cjs/nipb0.js.map +7 -0
  29. package/lib/cjs/pool.js +128 -4
  30. package/lib/cjs/pool.js.map +4 -4
  31. package/lib/cjs/relay.js +29 -4
  32. package/lib/cjs/relay.js.map +2 -2
  33. package/lib/esm/abstract-pool.js +128 -4
  34. package/lib/esm/abstract-pool.js.map +4 -4
  35. package/lib/esm/abstract-relay.js +29 -4
  36. package/lib/esm/abstract-relay.js.map +2 -2
  37. package/lib/esm/filter.js.map +1 -1
  38. package/lib/esm/index.js +353 -37
  39. package/lib/esm/index.js.map +4 -4
  40. package/lib/esm/kinds.js +196 -4
  41. package/lib/esm/kinds.js.map +2 -2
  42. package/lib/esm/nip17.js.map +2 -2
  43. package/lib/esm/nip18.js.map +2 -2
  44. package/lib/esm/nip25.js.map +1 -1
  45. package/lib/esm/nip28.js.map +2 -2
  46. package/lib/esm/nip42.js.map +2 -2
  47. package/lib/esm/nip45.js +162 -0
  48. package/lib/esm/nip45.js.map +7 -0
  49. package/lib/esm/nip46.js +128 -4
  50. package/lib/esm/nip46.js.map +4 -4
  51. package/lib/esm/nip47.js.map +2 -2
  52. package/lib/esm/nip57.js.map +1 -1
  53. package/lib/esm/nip58.js.map +2 -2
  54. package/lib/esm/nip59.js.map +2 -2
  55. package/lib/esm/nip75.js.map +2 -2
  56. package/lib/esm/nip94.js.map +2 -2
  57. package/lib/esm/nip98.js.map +2 -2
  58. package/lib/esm/nip99.js.map +2 -2
  59. package/lib/esm/nipb0.js +1049 -0
  60. package/lib/esm/nipb0.js.map +7 -0
  61. package/lib/esm/pool.js +128 -4
  62. package/lib/esm/pool.js.map +4 -4
  63. package/lib/esm/relay.js +29 -4
  64. package/lib/esm/relay.js.map +2 -2
  65. package/lib/nostr.bundle.js +326 -12
  66. package/lib/nostr.bundle.js.map +4 -4
  67. package/lib/types/abstract-pool.d.ts +9 -0
  68. package/lib/types/abstract-relay.d.ts +10 -1
  69. package/lib/types/kinds.d.ts +200 -8
  70. package/lib/types/nip45.d.ts +13 -0
  71. package/lib/types/nip45.test.d.ts +1 -0
  72. package/lib/types/nipb0.d.ts +129 -0
  73. package/package.json +13 -1
package/lib/esm/index.js CHANGED
@@ -232,39 +232,61 @@ var verifyEvent = i.verifyEvent;
232
232
  // kinds.ts
233
233
  var kinds_exports = {};
234
234
  __export(kinds_exports, {
235
+ AIEmbeddings: () => AIEmbeddings,
236
+ AppCurationSet: () => AppCurationSet,
235
237
  Application: () => Application,
238
+ AuthoredPodcasts: () => AuthoredPodcasts,
236
239
  BadgeAward: () => BadgeAward,
237
240
  BadgeDefinition: () => BadgeDefinition,
241
+ Bid: () => Bid,
242
+ BidConfirmation: () => BidConfirmation,
243
+ BlobsAuth: () => BlobsAuth,
238
244
  BlockedRelaysList: () => BlockedRelaysList,
239
245
  BlossomServerList: () => BlossomServerList,
240
246
  BookmarkList: () => BookmarkList,
241
247
  Bookmarksets: () => Bookmarksets,
242
248
  Calendar: () => Calendar,
243
249
  CalendarEventRSVP: () => CalendarEventRSVP,
250
+ CashuMintAnnouncement: () => CashuMintAnnouncement,
251
+ CashuWalletEvent: () => CashuWalletEvent,
252
+ CashuWalletHistory: () => CashuWalletHistory,
253
+ CashuWalletTokens: () => CashuWalletTokens,
244
254
  ChannelCreation: () => ChannelCreation,
245
255
  ChannelHideMessage: () => ChannelHideMessage,
246
256
  ChannelMessage: () => ChannelMessage,
247
257
  ChannelMetadata: () => ChannelMetadata,
248
258
  ChannelMuteUser: () => ChannelMuteUser,
249
259
  ChatMessage: () => ChatMessage,
260
+ Chess: () => Chess,
250
261
  ClassifiedListing: () => ClassifiedListing,
251
262
  ClientAuth: () => ClientAuth,
263
+ CodeSnippet: () => CodeSnippet,
264
+ CoinjoinPool: () => CoinjoinPool,
252
265
  Comment: () => Comment,
253
266
  CommunitiesList: () => CommunitiesList,
254
267
  CommunityDefinition: () => CommunityDefinition,
255
268
  CommunityPostApproval: () => CommunityPostApproval,
269
+ ConferenceEvent: () => ConferenceEvent,
256
270
  Contacts: () => Contacts,
257
271
  CreateOrUpdateProduct: () => CreateOrUpdateProduct,
258
272
  CreateOrUpdateStall: () => CreateOrUpdateStall,
273
+ CuratedVideoSets: () => CuratedVideoSets,
259
274
  Curationsets: () => Curationsets,
260
275
  Date: () => Date2,
276
+ DecoupledEncryptionKeyDistribution: () => DecoupledEncryptionKeyDistribution,
277
+ DecoupledKeyAnnouncement: () => DecoupledKeyAnnouncement,
278
+ DecoupledKeyClientAnnouncement: () => DecoupledKeyClientAnnouncement,
261
279
  DirectMessageRelaysList: () => DirectMessageRelaysList,
262
280
  DraftClassifiedListing: () => DraftClassifiedListing,
281
+ DraftEvent: () => DraftEvent,
263
282
  DraftLong: () => DraftLong,
264
283
  Emojisets: () => Emojisets,
265
284
  EncryptedDirectMessage: () => EncryptedDirectMessage,
266
285
  EventDeletion: () => EventDeletion,
286
+ FavoritePodcasts: () => FavoritePodcasts,
267
287
  FavoriteRelays: () => FavoriteRelays,
288
+ FedimintAnnouncement: () => FedimintAnnouncement,
289
+ Feed: () => Feed,
268
290
  FileMessage: () => FileMessage,
269
291
  FileMetadata: () => FileMetadata,
270
292
  FileServerPreference: () => FileServerPreference,
@@ -272,55 +294,129 @@ __export(kinds_exports, {
272
294
  ForumThread: () => ForumThread,
273
295
  GenericRepost: () => GenericRepost,
274
296
  Genericlists: () => Genericlists,
297
+ GeocacheListing: () => GeocacheListing,
298
+ GeocacheLog: () => GeocacheLog,
299
+ GeocacheLogEntry: () => GeocacheLogEntry,
300
+ GeocacheProofOfFind: () => GeocacheProofOfFind,
275
301
  GiftWrap: () => GiftWrap,
302
+ GitPullRequest: () => GitPullRequest,
303
+ GitPullRequestUpdate: () => GitPullRequestUpdate,
304
+ GoodWikiAuthorList: () => GoodWikiAuthorList,
305
+ GoodWikiRelayList: () => GoodWikiRelayList,
276
306
  GroupMetadata: () => GroupMetadata,
277
307
  HTTPAuth: () => HTTPAuth,
278
308
  Handlerinformation: () => Handlerinformation,
279
309
  Handlerrecommendation: () => Handlerrecommendation,
280
310
  Highlights: () => Highlights,
311
+ InteractiveRoom: () => InteractiveRoom,
281
312
  InterestsList: () => InterestsList,
282
313
  Interestsets: () => Interestsets,
314
+ Issue: () => Issue,
283
315
  JobFeedback: () => JobFeedback,
284
316
  JobRequest: () => JobRequest,
285
317
  JobResult: () => JobResult,
286
318
  Label: () => Label,
319
+ LegacyNsiteFile: () => LegacyNsiteFile,
287
320
  LightningPubRPC: () => LightningPubRPC,
321
+ LinkSet: () => LinkSet,
288
322
  LiveChatMessage: () => LiveChatMessage,
289
323
  LiveEvent: () => LiveEvent,
290
324
  LongFormArticle: () => LongFormArticle,
325
+ MarketplaceUI: () => MarketplaceUI,
326
+ MediaFollows: () => MediaFollows,
327
+ MediaStarterPacks: () => MediaStarterPacks,
328
+ MergeRequests: () => MergeRequests,
291
329
  Metadata: () => Metadata,
330
+ ModularArticleContent: () => ModularArticleContent,
331
+ ModularArticleHeader: () => ModularArticleHeader,
332
+ MuteSets: () => MuteSets,
292
333
  Mutelist: () => Mutelist,
293
334
  NWCWalletInfo: () => NWCWalletInfo,
294
335
  NWCWalletRequest: () => NWCWalletRequest,
295
336
  NWCWalletResponse: () => NWCWalletResponse,
296
337
  NormalVideo: () => NormalVideo,
297
338
  NostrConnect: () => NostrConnect,
339
+ NsiteNamed: () => NsiteNamed,
340
+ NsiteRoot: () => NsiteRoot,
341
+ NutZap: () => NutZap,
342
+ NutZapInfo: () => NutZapInfo,
298
343
  OpenTimestamps: () => OpenTimestamps,
344
+ Patch: () => Patch,
345
+ PeerToPeerOrderEvents: () => PeerToPeerOrderEvents,
299
346
  Photo: () => Photo,
300
347
  Pinlist: () => Pinlist,
348
+ PodcastEpisode: () => PodcastEpisode,
349
+ PodcastMetadata: () => PodcastMetadata,
301
350
  Poll: () => Poll,
302
351
  PollResponse: () => PollResponse,
303
352
  PrivateDirectMessage: () => PrivateDirectMessage,
353
+ PrivateEventRelayList: () => PrivateEventRelayList,
304
354
  ProblemTracker: () => ProblemTracker,
355
+ ProductSoldAsAuction: () => ProductSoldAsAuction,
305
356
  ProfileBadges: () => ProfileBadges,
357
+ ProxyAnnouncement: () => ProxyAnnouncement,
306
358
  PublicChatsList: () => PublicChatsList,
359
+ PublicMessage: () => PublicMessage,
307
360
  Reaction: () => Reaction,
361
+ ReactionToWebsite: () => ReactionToWebsite,
308
362
  RecommendRelay: () => RecommendRelay,
363
+ Redirects: () => Redirects,
364
+ RelayDiscovery: () => RelayDiscovery,
309
365
  RelayList: () => RelayList,
366
+ RelayMonitorAnnouncement: () => RelayMonitorAnnouncement,
310
367
  RelayReview: () => RelayReview,
368
+ RelayReviews: () => RelayReviews,
311
369
  Relaysets: () => Relaysets,
370
+ ReleaseArtifactSets: () => ReleaseArtifactSets,
371
+ Reply: () => Reply,
312
372
  Report: () => Report,
313
373
  Reporting: () => Reporting,
374
+ RepositoryAnnouncement: () => RepositoryAnnouncement,
375
+ RepositoryState: () => RepositoryState,
314
376
  Repost: () => Repost,
377
+ ReservedCashuWalletTokens: () => ReservedCashuWalletTokens,
378
+ RoomPresence: () => RoomPresence,
379
+ Scroll: () => Scroll,
315
380
  Seal: () => Seal,
316
381
  SearchRelaysList: () => SearchRelaysList,
317
382
  ShortTextNote: () => ShortTextNote,
318
383
  ShortVideo: () => ShortVideo,
384
+ SimpleGroupAdmins: () => SimpleGroupAdmins,
385
+ SimpleGroupCreateGroup: () => SimpleGroupCreateGroup,
386
+ SimpleGroupCreateInvite: () => SimpleGroupCreateInvite,
387
+ SimpleGroupDeleteEvent: () => SimpleGroupDeleteEvent,
388
+ SimpleGroupDeleteGroup: () => SimpleGroupDeleteGroup,
389
+ SimpleGroupEditMetadata: () => SimpleGroupEditMetadata,
390
+ SimpleGroupJoinRequest: () => SimpleGroupJoinRequest,
391
+ SimpleGroupLeaveRequest: () => SimpleGroupLeaveRequest,
392
+ SimpleGroupList: () => SimpleGroupList,
393
+ SimpleGroupLiveKitParticipants: () => SimpleGroupLiveKitParticipants,
394
+ SimpleGroupMembers: () => SimpleGroupMembers,
395
+ SimpleGroupPutUser: () => SimpleGroupPutUser,
396
+ SimpleGroupRemoveUser: () => SimpleGroupRemoveUser,
397
+ SimpleGroupReply: () => SimpleGroupReply,
398
+ SimpleGroupRoles: () => SimpleGroupRoles,
399
+ SimpleGroupThreadedReply: () => SimpleGroupThreadedReply,
400
+ SlideSet: () => SlideSet,
401
+ SoftwareApplication: () => SoftwareApplication,
402
+ StarterPacks: () => StarterPacks,
403
+ StatusApplied: () => StatusApplied,
404
+ StatusClosed: () => StatusClosed,
405
+ StatusDraft: () => StatusDraft,
406
+ StatusOpen: () => StatusOpen,
407
+ TidalLogin: () => TidalLogin,
319
408
  Time: () => Time,
409
+ Torrent: () => Torrent,
410
+ TorrentComment: () => TorrentComment,
411
+ TransportMethodAnnouncement: () => TransportMethodAnnouncement,
320
412
  UserEmojiList: () => UserEmojiList,
413
+ UserGraspList: () => UserGraspList,
321
414
  UserStatuses: () => UserStatuses,
415
+ VideoViewEvent: () => VideoViewEvent,
322
416
  Voice: () => Voice,
323
417
  VoiceComment: () => VoiceComment,
418
+ WebBookmarks: () => WebBookmarks,
419
+ WikiArticle: () => WikiArticle,
324
420
  Zap: () => Zap,
325
421
  ZapGoal: () => ZapGoal,
326
422
  ZapRequest: () => ZapRequest,
@@ -368,40 +464,83 @@ var Repost = 6;
368
464
  var Reaction = 7;
369
465
  var BadgeAward = 8;
370
466
  var ChatMessage = 9;
467
+ var SimpleGroupThreadedReply = 10;
371
468
  var ForumThread = 11;
469
+ var SimpleGroupReply = 12;
372
470
  var Seal = 13;
373
471
  var PrivateDirectMessage = 14;
374
472
  var FileMessage = 15;
375
473
  var GenericRepost = 16;
474
+ var ReactionToWebsite = 17;
376
475
  var Photo = 20;
377
476
  var NormalVideo = 21;
378
477
  var ShortVideo = 22;
478
+ var PublicMessage = 24;
379
479
  var ChannelCreation = 40;
380
480
  var ChannelMetadata = 41;
381
481
  var ChannelMessage = 42;
382
482
  var ChannelHideMessage = 43;
383
483
  var ChannelMuteUser = 44;
484
+ var PodcastEpisode = 54;
485
+ var Chess = 64;
486
+ var MergeRequests = 818;
487
+ var PollResponse = 1018;
488
+ var Bid = 1021;
489
+ var BidConfirmation = 1022;
384
490
  var OpenTimestamps = 1040;
385
491
  var GiftWrap = 1059;
386
- var Poll = 1068;
387
492
  var FileMetadata = 1063;
493
+ var Poll = 1068;
388
494
  var Comment = 1111;
389
- var LiveChatMessage = 1311;
390
495
  var Voice = 1222;
496
+ var Scroll = 1227;
391
497
  var VoiceComment = 1244;
498
+ var LiveChatMessage = 1311;
499
+ var CodeSnippet = 1337;
500
+ var Patch = 1617;
501
+ var GitPullRequest = 1618;
502
+ var GitPullRequestUpdate = 1619;
503
+ var Issue = 1621;
504
+ var Reply = 1622;
505
+ var StatusOpen = 1630;
506
+ var StatusApplied = 1631;
507
+ var StatusClosed = 1632;
508
+ var StatusDraft = 1633;
392
509
  var ProblemTracker = 1971;
393
510
  var Report = 1984;
394
511
  var Reporting = 1984;
395
512
  var Label = 1985;
513
+ var RelayReviews = 1986;
514
+ var AIEmbeddings = 1987;
515
+ var Torrent = 2003;
516
+ var TorrentComment = 2004;
517
+ var CoinjoinPool = 2022;
518
+ var DecoupledKeyClientAnnouncement = 4454;
519
+ var DecoupledEncryptionKeyDistribution = 4455;
396
520
  var CommunityPostApproval = 4550;
397
521
  var JobRequest = 5999;
398
522
  var JobResult = 6999;
399
523
  var JobFeedback = 7e3;
524
+ var ReservedCashuWalletTokens = 7374;
525
+ var CashuWalletTokens = 7375;
526
+ var CashuWalletHistory = 7376;
527
+ var GeocacheLog = 7516;
528
+ var GeocacheProofOfFind = 7517;
529
+ var SimpleGroupPutUser = 9e3;
530
+ var SimpleGroupRemoveUser = 9001;
531
+ var SimpleGroupEditMetadata = 9002;
532
+ var SimpleGroupDeleteEvent = 9005;
533
+ var SimpleGroupCreateGroup = 9007;
534
+ var SimpleGroupDeleteGroup = 9008;
535
+ var SimpleGroupCreateInvite = 9009;
536
+ var SimpleGroupJoinRequest = 9021;
537
+ var SimpleGroupLeaveRequest = 9022;
400
538
  var ZapGoal = 9041;
539
+ var NutZap = 9321;
540
+ var TidalLogin = 9467;
401
541
  var ZapRequest = 9734;
402
542
  var Zap = 9735;
403
543
  var Highlights = 9802;
404
- var PollResponse = 1018;
405
544
  var Mutelist = 1e4;
406
545
  var Pinlist = 10001;
407
546
  var RelayList = 10002;
@@ -410,37 +549,74 @@ var CommunitiesList = 10004;
410
549
  var PublicChatsList = 10005;
411
550
  var BlockedRelaysList = 10006;
412
551
  var SearchRelaysList = 10007;
552
+ var SimpleGroupList = 10009;
413
553
  var FavoriteRelays = 10012;
554
+ var PrivateEventRelayList = 10013;
414
555
  var InterestsList = 10015;
556
+ var NutZapInfo = 10019;
557
+ var MediaFollows = 10020;
415
558
  var UserEmojiList = 10030;
559
+ var DecoupledKeyAnnouncement = 10044;
416
560
  var DirectMessageRelaysList = 10050;
417
- var FileServerPreference = 10096;
561
+ var FavoritePodcasts = 10054;
418
562
  var BlossomServerList = 10063;
563
+ var FileServerPreference = 10096;
564
+ var GoodWikiAuthorList = 10101;
565
+ var GoodWikiRelayList = 10102;
566
+ var PodcastMetadata = 10154;
567
+ var AuthoredPodcasts = 10164;
568
+ var RelayMonitorAnnouncement = 10166;
569
+ var RoomPresence = 10312;
570
+ var UserGraspList = 10317;
571
+ var ProxyAnnouncement = 10377;
572
+ var TransportMethodAnnouncement = 11111;
419
573
  var NWCWalletInfo = 13194;
574
+ var NsiteRoot = 15128;
575
+ var CashuWalletEvent = 17375;
420
576
  var LightningPubRPC = 21e3;
421
577
  var ClientAuth = 22242;
422
578
  var NWCWalletRequest = 23194;
423
579
  var NWCWalletResponse = 23195;
424
580
  var NostrConnect = 24133;
581
+ var BlobsAuth = 24242;
425
582
  var HTTPAuth = 27235;
426
583
  var Followsets = 3e4;
427
584
  var Genericlists = 30001;
428
585
  var Relaysets = 30002;
429
586
  var Bookmarksets = 30003;
430
587
  var Curationsets = 30004;
588
+ var CuratedVideoSets = 30005;
589
+ var MuteSets = 30007;
431
590
  var ProfileBadges = 30008;
432
591
  var BadgeDefinition = 30009;
433
592
  var Interestsets = 30015;
434
593
  var CreateOrUpdateStall = 30017;
435
594
  var CreateOrUpdateProduct = 30018;
595
+ var MarketplaceUI = 30019;
596
+ var ProductSoldAsAuction = 30020;
436
597
  var LongFormArticle = 30023;
437
598
  var DraftLong = 30024;
438
599
  var Emojisets = 30030;
600
+ var ModularArticleHeader = 30040;
601
+ var ModularArticleContent = 30041;
602
+ var ReleaseArtifactSets = 30063;
439
603
  var Application = 30078;
604
+ var RelayDiscovery = 30166;
605
+ var AppCurationSet = 30267;
440
606
  var LiveEvent = 30311;
607
+ var InteractiveRoom = 30312;
608
+ var ConferenceEvent = 30313;
441
609
  var UserStatuses = 30315;
610
+ var SlideSet = 30388;
442
611
  var ClassifiedListing = 30402;
443
612
  var DraftClassifiedListing = 30403;
613
+ var RepositoryAnnouncement = 30617;
614
+ var RepositoryState = 30618;
615
+ var WikiArticle = 30818;
616
+ var Redirects = 30819;
617
+ var DraftEvent = 31234;
618
+ var LinkSet = 31388;
619
+ var Feed = 31890;
444
620
  var Date2 = 31922;
445
621
  var Time = 31923;
446
622
  var Calendar = 31924;
@@ -448,8 +624,24 @@ var CalendarEventRSVP = 31925;
448
624
  var RelayReview = 31987;
449
625
  var Handlerrecommendation = 31989;
450
626
  var Handlerinformation = 31990;
627
+ var SoftwareApplication = 32267;
628
+ var LegacyNsiteFile = 34128;
629
+ var VideoViewEvent = 34237;
451
630
  var CommunityDefinition = 34550;
631
+ var NsiteNamed = 35128;
632
+ var GeocacheListing = 37515;
633
+ var GeocacheLogEntry = 37516;
634
+ var CashuMintAnnouncement = 38172;
635
+ var FedimintAnnouncement = 38173;
636
+ var PeerToPeerOrderEvents = 38383;
452
637
  var GroupMetadata = 39e3;
638
+ var SimpleGroupAdmins = 39001;
639
+ var SimpleGroupMembers = 39002;
640
+ var SimpleGroupRoles = 39003;
641
+ var SimpleGroupLiveKitParticipants = 39004;
642
+ var StarterPacks = 39089;
643
+ var MediaStarterPacks = 39092;
644
+ var WebBookmarks = 39701;
453
645
 
454
646
  // filter.ts
455
647
  function matchFilter(filter, event) {
@@ -841,19 +1033,38 @@ var AbstractRelay = class {
841
1033
  }, this.publishTimeout);
842
1034
  this.openEventPublishes.set(event.id, { resolve, reject, timeout });
843
1035
  });
844
- this.send('["EVENT",' + JSON.stringify(event) + "]");
1036
+ try {
1037
+ await this.send('["EVENT",' + JSON.stringify(event) + "]");
1038
+ } catch (err) {
1039
+ const ep = this.openEventPublishes.get(event.id);
1040
+ if (ep) {
1041
+ ep.reject(err);
1042
+ this.openEventPublishes.delete(event.id);
1043
+ }
1044
+ }
845
1045
  this.ongoingOperations--;
846
1046
  if (this.ongoingOperations === 0)
847
1047
  this.idleSince = Date.now();
848
1048
  return ret;
849
1049
  }
850
1050
  async count(filters, params) {
1051
+ return (await this.countWithHLL(filters, params)).count;
1052
+ }
1053
+ async countWithHLL(filters, params) {
851
1054
  this.serial++;
852
1055
  const id = params?.id || "count:" + this.serial;
853
1056
  const ret = new Promise((resolve, reject) => {
854
1057
  this.openCountRequests.set(id, { resolve, reject });
855
1058
  });
856
- this.send('["COUNT","' + id + '",' + JSON.stringify(filters).substring(1));
1059
+ try {
1060
+ await this.send('["COUNT","' + id + '",' + JSON.stringify(filters).substring(1));
1061
+ } catch (err) {
1062
+ const cr = this.openCountRequests.get(id);
1063
+ if (cr) {
1064
+ cr.reject(err);
1065
+ this.openCountRequests.delete(id);
1066
+ }
1067
+ }
857
1068
  return ret;
858
1069
  }
859
1070
  subscribe(filters, params) {
@@ -931,7 +1142,7 @@ var AbstractRelay = class {
931
1142
  const payload = data[2];
932
1143
  const cr = this.openCountRequests.get(id);
933
1144
  if (cr) {
934
- cr.resolve(payload.count);
1145
+ cr.resolve(payload);
935
1146
  this.openCountRequests.delete(id);
936
1147
  }
937
1148
  return;
@@ -961,8 +1172,14 @@ var AbstractRelay = class {
961
1172
  case "CLOSED": {
962
1173
  const id = data[1];
963
1174
  const so = this.openSubs.get(id);
964
- if (!so)
1175
+ if (!so) {
1176
+ const cr = this.openCountRequests.get(id);
1177
+ if (cr) {
1178
+ cr.reject(new Error(data[2]));
1179
+ this.openCountRequests.delete(id);
1180
+ }
965
1181
  return;
1182
+ }
966
1183
  so.closed = true;
967
1184
  so.close(data[2]);
968
1185
  return;
@@ -1088,6 +1305,63 @@ var alwaysTrue = (t) => {
1088
1305
  return true;
1089
1306
  };
1090
1307
 
1308
+ // nip45.ts
1309
+ import { sha256 as sha2562 } from "@noble/hashes/sha2.js";
1310
+ import { bytesToHex as bytesToHex3 } from "@noble/hashes/utils.js";
1311
+ var M = 256;
1312
+ var HLL_HEX_LENGTH = M * 2;
1313
+ var utf8Encoder2 = new TextEncoder();
1314
+ function getCountManyFilter(target, directive) {
1315
+ switch (directive) {
1316
+ case "reactions":
1317
+ return { "#e": [target], kinds: [7] };
1318
+ case "reposts":
1319
+ return { "#e": [target], kinds: [6] };
1320
+ case "quotes":
1321
+ return { "#q": [target], kinds: [1, 1111] };
1322
+ case "replies":
1323
+ return { "#e": [target], kinds: [1] };
1324
+ case "comments":
1325
+ return { "#E": [target], kinds: [1111] };
1326
+ case "followers":
1327
+ return { "#p": [target], kinds: [3] };
1328
+ }
1329
+ }
1330
+ function newHll() {
1331
+ return new Uint8Array(M);
1332
+ }
1333
+ function hllDecode(hex) {
1334
+ if (hex.length !== HLL_HEX_LENGTH || !/^[0-9a-fA-F]+$/.test(hex))
1335
+ return void 0;
1336
+ const registers = new Uint8Array(M);
1337
+ for (let i2 = 0; i2 < M; i2++) {
1338
+ registers[i2] = parseInt(hex.slice(i2 * 2, i2 * 2 + 2), 16);
1339
+ }
1340
+ return registers;
1341
+ }
1342
+ function hllEncode(registers) {
1343
+ if (registers.length !== M)
1344
+ throw new Error(`invalid number of registers ${registers.length}`);
1345
+ let hex = "";
1346
+ for (let i2 = 0; i2 < M; i2++) {
1347
+ hex += registers[i2].toString(16).padStart(2, "0");
1348
+ }
1349
+ return hex;
1350
+ }
1351
+ function mergeHll(target, source) {
1352
+ if (target.length === 0)
1353
+ target = newHll();
1354
+ if (target.length !== M)
1355
+ throw new Error(`invalid number of registers ${target.length}`);
1356
+ if (source.length !== M)
1357
+ throw new Error(`invalid number of registers ${source.length}`);
1358
+ for (let i2 = 0; i2 < M; i2++) {
1359
+ if (source[i2] > target[i2])
1360
+ target[i2] = source[i2];
1361
+ }
1362
+ return target;
1363
+ }
1364
+
1091
1365
  // abstract-pool.ts
1092
1366
  var AbstractSimplePool = class {
1093
1367
  relays = /* @__PURE__ */ new Map();
@@ -1315,6 +1589,48 @@ var AbstractSimplePool = class {
1315
1589
  events.sort((a, b) => b.created_at - a.created_at);
1316
1590
  return events[0] || null;
1317
1591
  }
1592
+ async countMany(relays, target, directive, params) {
1593
+ const filter = getCountManyFilter(target, directive);
1594
+ const urls = [];
1595
+ for (let i2 = 0; i2 < relays.length; i2++) {
1596
+ const url = normalizeURL(relays[i2]);
1597
+ if (urls.indexOf(url) === -1)
1598
+ urls.push(url);
1599
+ }
1600
+ const responses = await Promise.all(
1601
+ urls.map(async (url) => {
1602
+ if (this.allowConnectingToRelay?.(url, ["read", [filter]]) === false)
1603
+ return null;
1604
+ let relay;
1605
+ try {
1606
+ relay = await this.ensureRelay(url, {
1607
+ connectionTimeout: this.maxWaitForConnection < (params?.maxWait || 0) ? Math.max(params.maxWait * 0.8, params.maxWait - 1e3) : this.maxWaitForConnection,
1608
+ abort: params?.abort
1609
+ });
1610
+ } catch (err) {
1611
+ this.onRelayConnectionFailure?.(url);
1612
+ return null;
1613
+ }
1614
+ this.onRelayConnectionSuccess?.(url);
1615
+ return relay.countWithHLL([filter], { id: params?.id }).catch(() => null);
1616
+ })
1617
+ );
1618
+ let count = 0;
1619
+ let hll;
1620
+ for (const response of responses) {
1621
+ if (!response)
1622
+ continue;
1623
+ if (response.count > count)
1624
+ count = response.count;
1625
+ if (!response.hll || response.hll.length !== 512)
1626
+ continue;
1627
+ const registers = hllDecode(response.hll);
1628
+ if (!registers)
1629
+ continue;
1630
+ hll = mergeHll(hll || new Uint8Array(0), registers);
1631
+ }
1632
+ return hll ? { count, hll: hllEncode(hll) } : { count };
1633
+ }
1318
1634
  publish(relays, event, params) {
1319
1635
  return relays.map(normalizeURL).map(async (url, i2, arr) => {
1320
1636
  if (arr.indexOf(url) !== i2) {
@@ -1402,7 +1718,7 @@ __export(nip19_exports, {
1402
1718
  npubEncode: () => npubEncode,
1403
1719
  nsecEncode: () => nsecEncode
1404
1720
  });
1405
- import { bytesToHex as bytesToHex3, concatBytes, hexToBytes as hexToBytes3 } from "@noble/hashes/utils.js";
1721
+ import { bytesToHex as bytesToHex4, concatBytes, hexToBytes as hexToBytes3 } from "@noble/hashes/utils.js";
1406
1722
  import { bech32 } from "@scure/base";
1407
1723
  var NostrTypeGuard = {
1408
1724
  isNProfile: (value) => /^nprofile1[a-z\d]+$/.test(value || ""),
@@ -1445,7 +1761,7 @@ function decode(code) {
1445
1761
  return {
1446
1762
  type: "nprofile",
1447
1763
  data: {
1448
- pubkey: bytesToHex3(tlv[0][0]),
1764
+ pubkey: bytesToHex4(tlv[0][0]),
1449
1765
  relays: tlv[1] ? tlv[1].map((d) => utf8Decoder.decode(d)) : []
1450
1766
  }
1451
1767
  };
@@ -1463,10 +1779,10 @@ function decode(code) {
1463
1779
  return {
1464
1780
  type: "nevent",
1465
1781
  data: {
1466
- id: bytesToHex3(tlv[0][0]),
1782
+ id: bytesToHex4(tlv[0][0]),
1467
1783
  relays: tlv[1] ? tlv[1].map((d) => utf8Decoder.decode(d)) : [],
1468
- author: tlv[2]?.[0] ? bytesToHex3(tlv[2][0]) : void 0,
1469
- kind: tlv[3]?.[0] ? parseInt(bytesToHex3(tlv[3][0]), 16) : void 0
1784
+ author: tlv[2]?.[0] ? bytesToHex4(tlv[2][0]) : void 0,
1785
+ kind: tlv[3]?.[0] ? parseInt(bytesToHex4(tlv[3][0]), 16) : void 0
1470
1786
  }
1471
1787
  };
1472
1788
  }
@@ -1486,8 +1802,8 @@ function decode(code) {
1486
1802
  type: "naddr",
1487
1803
  data: {
1488
1804
  identifier: utf8Decoder.decode(tlv[0][0]),
1489
- pubkey: bytesToHex3(tlv[2][0]),
1490
- kind: parseInt(bytesToHex3(tlv[3][0]), 16),
1805
+ pubkey: bytesToHex4(tlv[2][0]),
1806
+ kind: parseInt(bytesToHex4(tlv[3][0]), 16),
1491
1807
  relays: tlv[1] ? tlv[1].map((d) => utf8Decoder.decode(d)) : []
1492
1808
  }
1493
1809
  };
@@ -1496,7 +1812,7 @@ function decode(code) {
1496
1812
  return { type: prefix, data };
1497
1813
  case "npub":
1498
1814
  case "note":
1499
- return { type: prefix, data: bytesToHex3(data) };
1815
+ return { type: prefix, data: bytesToHex4(data) };
1500
1816
  default:
1501
1817
  throw new Error(`unknown prefix ${prefix}`);
1502
1818
  }
@@ -1892,8 +2208,8 @@ __export(nip13_exports, {
1892
2208
  getPow: () => getPow,
1893
2209
  minePow: () => minePow
1894
2210
  });
1895
- import { bytesToHex as bytesToHex4 } from "@noble/hashes/utils.js";
1896
- import { sha256 as sha2562 } from "@noble/hashes/sha2.js";
2211
+ import { bytesToHex as bytesToHex5 } from "@noble/hashes/utils.js";
2212
+ import { sha256 as sha2563 } from "@noble/hashes/sha2.js";
1897
2213
  function getPow(hex) {
1898
2214
  let count = 0;
1899
2215
  for (let i2 = 0; i2 < 64; i2 += 8) {
@@ -1932,11 +2248,11 @@ function minePow(unsigned, difficulty) {
1932
2248
  event.created_at = now2;
1933
2249
  }
1934
2250
  tag[1] = (++count).toString();
1935
- const hash = sha2562(
2251
+ const hash = sha2563(
1936
2252
  utf8Encoder.encode(JSON.stringify([0, event.pubkey, event.created_at, event.kind, event.tags, event.content]))
1937
2253
  );
1938
2254
  if (getPowFromBytes(hash) >= difficulty) {
1939
- event.id = bytesToHex4(hash);
2255
+ event.id = bytesToHex5(hash);
1940
2256
  break;
1941
2257
  }
1942
2258
  }
@@ -1977,7 +2293,7 @@ import { equalBytes } from "@noble/ciphers/utils.js";
1977
2293
  import { secp256k1 as secp256k12 } from "@noble/curves/secp256k1.js";
1978
2294
  import { extract as hkdf_extract, expand as hkdf_expand } from "@noble/hashes/hkdf.js";
1979
2295
  import { hmac } from "@noble/hashes/hmac.js";
1980
- import { sha256 as sha2563 } from "@noble/hashes/sha2.js";
2296
+ import { sha256 as sha2564 } from "@noble/hashes/sha2.js";
1981
2297
  import { concatBytes as concatBytes2, hexToBytes as hexToBytes5, randomBytes as randomBytes2 } from "@noble/hashes/utils.js";
1982
2298
  import { base64 as base642 } from "@scure/base";
1983
2299
  var minPlaintextSize = 1;
@@ -1985,10 +2301,10 @@ var maxPlaintextSize = 4294967295;
1985
2301
  var extendedPrefixThreshold = 65536;
1986
2302
  function getConversationKey(privkeyA, pubkeyB) {
1987
2303
  const sharedX = secp256k12.getSharedSecret(privkeyA, hexToBytes5("02" + pubkeyB)).subarray(1, 33);
1988
- return hkdf_extract(sha2563, sharedX, utf8Encoder.encode("nip44-v2"));
2304
+ return hkdf_extract(sha2564, sharedX, utf8Encoder.encode("nip44-v2"));
1989
2305
  }
1990
2306
  function getMessageKeys(conversationKey, nonce) {
1991
- const keys = hkdf_expand(sha2563, conversationKey, nonce, 76);
2307
+ const keys = hkdf_expand(sha2564, conversationKey, nonce, 76);
1992
2308
  return {
1993
2309
  chacha_key: keys.subarray(0, 32),
1994
2310
  chacha_nonce: keys.subarray(32, 44),
@@ -2050,7 +2366,7 @@ function hmacAad(key, message, aad) {
2050
2366
  if (aad.length !== 32)
2051
2367
  throw new Error("AAD associated data must be 32 bytes");
2052
2368
  const combined = concatBytes2(aad, message);
2053
- return hmac(sha2563, key, combined);
2369
+ return hmac(sha2564, key, combined);
2054
2370
  }
2055
2371
  function decodePayload(payload) {
2056
2372
  if (typeof payload !== "string")
@@ -3009,8 +3325,8 @@ __export(nip77_exports, {
3009
3325
  NegentropyStorageVector: () => NegentropyStorageVector,
3010
3326
  NegentropySync: () => NegentropySync
3011
3327
  });
3012
- import { bytesToHex as bytesToHex5, hexToBytes as hexToBytes6 } from "@noble/hashes/utils.js";
3013
- import { sha256 as sha2564 } from "@noble/hashes/sha2.js";
3328
+ import { bytesToHex as bytesToHex6, hexToBytes as hexToBytes6 } from "@noble/hashes/utils.js";
3329
+ import { sha256 as sha2565 } from "@noble/hashes/sha2.js";
3014
3330
  var PROTOCOL_VERSION = 97;
3015
3331
  var ID_SIZE = 32;
3016
3332
  var FINGERPRINT_SIZE = 16;
@@ -3141,7 +3457,7 @@ var Accumulator = class {
3141
3457
  let input = new WrappedBuffer();
3142
3458
  input.extend(this.buf);
3143
3459
  input.extend(encodeVarInt(n));
3144
- let hash = sha2564(input.unwrap());
3460
+ let hash = sha2565(input.unwrap());
3145
3461
  return hash.subarray(0, FINGERPRINT_SIZE);
3146
3462
  }
3147
3463
  };
@@ -3249,7 +3565,7 @@ var Negentropy = class {
3249
3565
  let output = new WrappedBuffer();
3250
3566
  output.extend(new Uint8Array([PROTOCOL_VERSION]));
3251
3567
  this.splitRange(0, this.storage.size(), this._bound(Number.MAX_VALUE), output);
3252
- return bytesToHex5(output.unwrap());
3568
+ return bytesToHex6(output.unwrap());
3253
3569
  }
3254
3570
  reconcile(queryMsg, onhave, onneed) {
3255
3571
  const query = new WrappedBuffer(hexToBytes6(queryMsg));
@@ -3295,22 +3611,22 @@ var Negentropy = class {
3295
3611
  let theirElems = {};
3296
3612
  for (let i2 = 0; i2 < numIds; i2++) {
3297
3613
  let e = getBytes(query, ID_SIZE);
3298
- theirElems[bytesToHex5(e)] = e;
3614
+ theirElems[bytesToHex6(e)] = e;
3299
3615
  }
3300
3616
  skip = true;
3301
3617
  this.storage.iterate(lower, upper, (item) => {
3302
3618
  let k = item.id;
3303
- const id = bytesToHex5(k);
3619
+ const id = bytesToHex6(k);
3304
3620
  if (!theirElems[id]) {
3305
3621
  onhave?.(id);
3306
3622
  } else {
3307
- delete theirElems[bytesToHex5(k)];
3623
+ delete theirElems[bytesToHex6(k)];
3308
3624
  }
3309
3625
  return true;
3310
3626
  });
3311
3627
  if (onneed) {
3312
3628
  for (let v of Object.values(theirElems)) {
3313
- onneed(bytesToHex5(v));
3629
+ onneed(bytesToHex6(v));
3314
3630
  }
3315
3631
  }
3316
3632
  } else {
@@ -3328,7 +3644,7 @@ var Negentropy = class {
3328
3644
  prevIndex = upper;
3329
3645
  prevBound = currBound;
3330
3646
  }
3331
- return fullOutput.length === 1 ? null : bytesToHex5(fullOutput.unwrap());
3647
+ return fullOutput.length === 1 ? null : bytesToHex6(fullOutput.unwrap());
3332
3648
  }
3333
3649
  splitRange(lower, upper, upperBound, o) {
3334
3650
  let numElems = upper - lower;
@@ -3516,8 +3832,8 @@ __export(nip98_exports, {
3516
3832
  validateEventUrlTag: () => validateEventUrlTag,
3517
3833
  validateToken: () => validateToken
3518
3834
  });
3519
- import { sha256 as sha2565 } from "@noble/hashes/sha2.js";
3520
- import { bytesToHex as bytesToHex6 } from "@noble/hashes/utils.js";
3835
+ import { sha256 as sha2566 } from "@noble/hashes/sha2.js";
3836
+ import { bytesToHex as bytesToHex7 } from "@noble/hashes/utils.js";
3521
3837
  import { base64 as base643 } from "@scure/base";
3522
3838
  var _authorizationScheme = "Nostr ";
3523
3839
  async function getToken(loginUrl, httpMethod, sign, includeAuthorizationScheme = false, payload) {
@@ -3582,8 +3898,8 @@ function validateEventMethodTag(event, method) {
3582
3898
  return methodTag.length > 0 && methodTag[1].toLowerCase() === method.toLowerCase();
3583
3899
  }
3584
3900
  function hashPayload(payload) {
3585
- const hash = sha2565(utf8Encoder.encode(JSON.stringify(payload)));
3586
- return bytesToHex6(hash);
3901
+ const hash = sha2566(utf8Encoder.encode(JSON.stringify(payload)));
3902
+ return bytesToHex7(hash);
3587
3903
  }
3588
3904
  function validateEventPayloadTag(event, payload) {
3589
3905
  const payloadTag = event.tags.find((t) => t[0] === "payload");