nostr-tools 2.23.7 → 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 (82) 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 +393 -70
  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/nip10.js +5 -4
  11. package/lib/cjs/nip10.js.map +2 -2
  12. package/lib/cjs/nip17.js.map +2 -2
  13. package/lib/cjs/nip18.js.map +2 -2
  14. package/lib/cjs/nip22.js +11 -5
  15. package/lib/cjs/nip22.js.map +2 -2
  16. package/lib/cjs/nip25.js.map +1 -1
  17. package/lib/cjs/nip28.js.map +2 -2
  18. package/lib/cjs/nip42.js.map +2 -2
  19. package/lib/cjs/nip45.js +183 -0
  20. package/lib/cjs/nip45.js.map +7 -0
  21. package/lib/cjs/nip46.js +135 -6
  22. package/lib/cjs/nip46.js.map +4 -4
  23. package/lib/cjs/nip47.js.map +2 -2
  24. package/lib/cjs/nip57.js.map +1 -1
  25. package/lib/cjs/nip58.js.map +2 -2
  26. package/lib/cjs/nip59.js.map +2 -2
  27. package/lib/cjs/nip75.js.map +2 -2
  28. package/lib/cjs/nip94.js.map +2 -2
  29. package/lib/cjs/nip98.js.map +2 -2
  30. package/lib/cjs/nip99.js.map +2 -2
  31. package/lib/cjs/nipb0.js +1064 -0
  32. package/lib/cjs/nipb0.js.map +7 -0
  33. package/lib/cjs/pool.js +128 -4
  34. package/lib/cjs/pool.js.map +4 -4
  35. package/lib/cjs/relay.js +29 -4
  36. package/lib/cjs/relay.js.map +2 -2
  37. package/lib/esm/abstract-pool.js +128 -4
  38. package/lib/esm/abstract-pool.js.map +4 -4
  39. package/lib/esm/abstract-relay.js +29 -4
  40. package/lib/esm/abstract-relay.js.map +2 -2
  41. package/lib/esm/filter.js.map +1 -1
  42. package/lib/esm/index.js +369 -46
  43. package/lib/esm/index.js.map +4 -4
  44. package/lib/esm/kinds.js +196 -4
  45. package/lib/esm/kinds.js.map +2 -2
  46. package/lib/esm/nip10.js +5 -4
  47. package/lib/esm/nip10.js.map +2 -2
  48. package/lib/esm/nip17.js.map +2 -2
  49. package/lib/esm/nip18.js.map +2 -2
  50. package/lib/esm/nip22.js +11 -5
  51. package/lib/esm/nip22.js.map +2 -2
  52. package/lib/esm/nip25.js.map +1 -1
  53. package/lib/esm/nip28.js.map +2 -2
  54. package/lib/esm/nip42.js.map +2 -2
  55. package/lib/esm/nip45.js +162 -0
  56. package/lib/esm/nip45.js.map +7 -0
  57. package/lib/esm/nip46.js +135 -6
  58. package/lib/esm/nip46.js.map +4 -4
  59. package/lib/esm/nip47.js.map +2 -2
  60. package/lib/esm/nip57.js.map +1 -1
  61. package/lib/esm/nip58.js.map +2 -2
  62. package/lib/esm/nip59.js.map +2 -2
  63. package/lib/esm/nip75.js.map +2 -2
  64. package/lib/esm/nip94.js.map +2 -2
  65. package/lib/esm/nip98.js.map +2 -2
  66. package/lib/esm/nip99.js.map +2 -2
  67. package/lib/esm/nipb0.js +1049 -0
  68. package/lib/esm/nipb0.js.map +7 -0
  69. package/lib/esm/pool.js +128 -4
  70. package/lib/esm/pool.js.map +4 -4
  71. package/lib/esm/relay.js +29 -4
  72. package/lib/esm/relay.js.map +2 -2
  73. package/lib/nostr.bundle.js +342 -21
  74. package/lib/nostr.bundle.js.map +4 -4
  75. package/lib/types/abstract-pool.d.ts +9 -0
  76. package/lib/types/abstract-relay.d.ts +10 -1
  77. package/lib/types/kinds.d.ts +200 -8
  78. package/lib/types/nip45.d.ts +13 -0
  79. package/lib/types/nip45.test.d.ts +1 -0
  80. package/lib/types/nip46.d.ts +7 -5
  81. package/lib/types/nipb0.d.ts +129 -0
  82. 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
  }
@@ -1765,6 +2081,7 @@ var nip10_exports = {};
1765
2081
  __export(nip10_exports, {
1766
2082
  parse: () => parse
1767
2083
  });
2084
+ var HEX64 = /^[0-9a-fA-F]{64}$/;
1768
2085
  function parse(event) {
1769
2086
  const result = {
1770
2087
  reply: void 0,
@@ -1777,12 +2094,12 @@ function parse(event) {
1777
2094
  let maybeRoot;
1778
2095
  for (let i2 = event.tags.length - 1; i2 >= 0; i2--) {
1779
2096
  const tag = event.tags[i2];
1780
- if (tag[0] === "e" && tag[1]) {
2097
+ if (tag[0] === "e" && tag[1] && HEX64.test(tag[1])) {
1781
2098
  const [_, eTagEventId, eTagRelayUrl, eTagMarker, eTagAuthor] = tag;
1782
2099
  const eventPointer = {
1783
2100
  id: eTagEventId,
1784
2101
  relays: eTagRelayUrl ? [eTagRelayUrl] : [],
1785
- author: eTagAuthor
2102
+ author: eTagAuthor && HEX64.test(eTagAuthor) ? eTagAuthor : void 0
1786
2103
  };
1787
2104
  if (eTagMarker === "root") {
1788
2105
  result.root = eventPointer;
@@ -1804,14 +2121,14 @@ function parse(event) {
1804
2121
  result.mentions.push(eventPointer);
1805
2122
  continue;
1806
2123
  }
1807
- if (tag[0] === "q" && tag[1]) {
2124
+ if (tag[0] === "q" && tag[1] && HEX64.test(tag[1])) {
1808
2125
  const [_, eTagEventId, eTagRelayUrl] = tag;
1809
2126
  result.quotes.push({
1810
2127
  id: eTagEventId,
1811
2128
  relays: eTagRelayUrl ? [eTagRelayUrl] : []
1812
2129
  });
1813
2130
  }
1814
- if (tag[0] === "p" && tag[1]) {
2131
+ if (tag[0] === "p" && tag[1] && HEX64.test(tag[1])) {
1815
2132
  result.profiles.push({
1816
2133
  pubkey: tag[1],
1817
2134
  relays: tag[2] ? [tag[2]] : []
@@ -1891,8 +2208,8 @@ __export(nip13_exports, {
1891
2208
  getPow: () => getPow,
1892
2209
  minePow: () => minePow
1893
2210
  });
1894
- import { bytesToHex as bytesToHex4 } from "@noble/hashes/utils.js";
1895
- 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";
1896
2213
  function getPow(hex) {
1897
2214
  let count = 0;
1898
2215
  for (let i2 = 0; i2 < 64; i2 += 8) {
@@ -1931,11 +2248,11 @@ function minePow(unsigned, difficulty) {
1931
2248
  event.created_at = now2;
1932
2249
  }
1933
2250
  tag[1] = (++count).toString();
1934
- const hash = sha2562(
2251
+ const hash = sha2563(
1935
2252
  utf8Encoder.encode(JSON.stringify([0, event.pubkey, event.created_at, event.kind, event.tags, event.content]))
1936
2253
  );
1937
2254
  if (getPowFromBytes(hash) >= difficulty) {
1938
- event.id = bytesToHex4(hash);
2255
+ event.id = bytesToHex5(hash);
1939
2256
  break;
1940
2257
  }
1941
2258
  }
@@ -1976,7 +2293,7 @@ import { equalBytes } from "@noble/ciphers/utils.js";
1976
2293
  import { secp256k1 as secp256k12 } from "@noble/curves/secp256k1.js";
1977
2294
  import { extract as hkdf_extract, expand as hkdf_expand } from "@noble/hashes/hkdf.js";
1978
2295
  import { hmac } from "@noble/hashes/hmac.js";
1979
- import { sha256 as sha2563 } from "@noble/hashes/sha2.js";
2296
+ import { sha256 as sha2564 } from "@noble/hashes/sha2.js";
1980
2297
  import { concatBytes as concatBytes2, hexToBytes as hexToBytes5, randomBytes as randomBytes2 } from "@noble/hashes/utils.js";
1981
2298
  import { base64 as base642 } from "@scure/base";
1982
2299
  var minPlaintextSize = 1;
@@ -1984,10 +2301,10 @@ var maxPlaintextSize = 4294967295;
1984
2301
  var extendedPrefixThreshold = 65536;
1985
2302
  function getConversationKey(privkeyA, pubkeyB) {
1986
2303
  const sharedX = secp256k12.getSharedSecret(privkeyA, hexToBytes5("02" + pubkeyB)).subarray(1, 33);
1987
- return hkdf_extract(sha2563, sharedX, utf8Encoder.encode("nip44-v2"));
2304
+ return hkdf_extract(sha2564, sharedX, utf8Encoder.encode("nip44-v2"));
1988
2305
  }
1989
2306
  function getMessageKeys(conversationKey, nonce) {
1990
- const keys = hkdf_expand(sha2563, conversationKey, nonce, 76);
2307
+ const keys = hkdf_expand(sha2564, conversationKey, nonce, 76);
1991
2308
  return {
1992
2309
  chacha_key: keys.subarray(0, 32),
1993
2310
  chacha_nonce: keys.subarray(32, 44),
@@ -2049,7 +2366,7 @@ function hmacAad(key, message, aad) {
2049
2366
  if (aad.length !== 32)
2050
2367
  throw new Error("AAD associated data must be 32 bytes");
2051
2368
  const combined = concatBytes2(aad, message);
2052
- return hmac(sha2563, key, combined);
2369
+ return hmac(sha2564, key, combined);
2053
2370
  }
2054
2371
  function decodePayload(payload) {
2055
2372
  if (typeof payload !== "string")
@@ -2308,6 +2625,7 @@ var nip22_exports = {};
2308
2625
  __export(nip22_exports, {
2309
2626
  parse: () => parse3
2310
2627
  });
2628
+ var HEX642 = /^[0-9a-fA-F]{64}$/;
2311
2629
  function parseKind(kind) {
2312
2630
  if (!kind)
2313
2631
  return void 0;
@@ -2321,9 +2639,12 @@ function parseAddressPointer(value, relayUrl) {
2321
2639
  const kind = parseInt(value.slice(0, idx), 10);
2322
2640
  if (Number.isNaN(kind))
2323
2641
  return void 0;
2642
+ const pubkey = value.slice(idx + 1, idx2);
2643
+ if (!HEX642.test(pubkey))
2644
+ return void 0;
2324
2645
  return {
2325
2646
  kind,
2326
- pubkey: value.slice(idx + 1, idx2),
2647
+ pubkey,
2327
2648
  identifier: value.slice(idx2 + 1),
2328
2649
  relays: relayUrl ? [relayUrl] : []
2329
2650
  };
@@ -2332,12 +2653,12 @@ function parsePointer(tag) {
2332
2653
  switch (tag[0]) {
2333
2654
  case "E":
2334
2655
  case "e":
2335
- if (!tag[1])
2656
+ if (!tag[1] || !HEX642.test(tag[1]))
2336
2657
  return void 0;
2337
2658
  return {
2338
2659
  id: tag[1],
2339
2660
  relays: tag[2] ? [tag[2]] : [],
2340
- author: tag[3]
2661
+ author: tag[3] && HEX642.test(tag[3]) ? tag[3] : void 0
2341
2662
  };
2342
2663
  case "A":
2343
2664
  case "a":
@@ -2360,10 +2681,12 @@ function parseQuote(tag) {
2360
2681
  if (tag[1].includes(":")) {
2361
2682
  return parseAddressPointer(tag[1], tag[2]);
2362
2683
  }
2684
+ if (!HEX642.test(tag[1]))
2685
+ return void 0;
2363
2686
  return {
2364
2687
  id: tag[1],
2365
2688
  relays: tag[2] ? [tag[2]] : [],
2366
- author: tag[3]
2689
+ author: tag[3] && HEX642.test(tag[3]) ? tag[3] : void 0
2367
2690
  };
2368
2691
  }
2369
2692
  function choosePointer(candidates) {
@@ -2423,7 +2746,7 @@ function parse3(event) {
2423
2746
  result.quotes.push(pointer);
2424
2747
  continue;
2425
2748
  }
2426
- if ((tag[0] === "P" || tag[0] === "p") && tag[1]) {
2749
+ if ((tag[0] === "P" || tag[0] === "p") && tag[1] && HEX642.test(tag[1])) {
2427
2750
  result.profiles.push({
2428
2751
  pubkey: tag[1],
2429
2752
  relays: tag[2] ? [tag[2]] : []
@@ -3002,8 +3325,8 @@ __export(nip77_exports, {
3002
3325
  NegentropyStorageVector: () => NegentropyStorageVector,
3003
3326
  NegentropySync: () => NegentropySync
3004
3327
  });
3005
- import { bytesToHex as bytesToHex5, hexToBytes as hexToBytes6 } from "@noble/hashes/utils.js";
3006
- 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";
3007
3330
  var PROTOCOL_VERSION = 97;
3008
3331
  var ID_SIZE = 32;
3009
3332
  var FINGERPRINT_SIZE = 16;
@@ -3134,7 +3457,7 @@ var Accumulator = class {
3134
3457
  let input = new WrappedBuffer();
3135
3458
  input.extend(this.buf);
3136
3459
  input.extend(encodeVarInt(n));
3137
- let hash = sha2564(input.unwrap());
3460
+ let hash = sha2565(input.unwrap());
3138
3461
  return hash.subarray(0, FINGERPRINT_SIZE);
3139
3462
  }
3140
3463
  };
@@ -3242,7 +3565,7 @@ var Negentropy = class {
3242
3565
  let output = new WrappedBuffer();
3243
3566
  output.extend(new Uint8Array([PROTOCOL_VERSION]));
3244
3567
  this.splitRange(0, this.storage.size(), this._bound(Number.MAX_VALUE), output);
3245
- return bytesToHex5(output.unwrap());
3568
+ return bytesToHex6(output.unwrap());
3246
3569
  }
3247
3570
  reconcile(queryMsg, onhave, onneed) {
3248
3571
  const query = new WrappedBuffer(hexToBytes6(queryMsg));
@@ -3288,22 +3611,22 @@ var Negentropy = class {
3288
3611
  let theirElems = {};
3289
3612
  for (let i2 = 0; i2 < numIds; i2++) {
3290
3613
  let e = getBytes(query, ID_SIZE);
3291
- theirElems[bytesToHex5(e)] = e;
3614
+ theirElems[bytesToHex6(e)] = e;
3292
3615
  }
3293
3616
  skip = true;
3294
3617
  this.storage.iterate(lower, upper, (item) => {
3295
3618
  let k = item.id;
3296
- const id = bytesToHex5(k);
3619
+ const id = bytesToHex6(k);
3297
3620
  if (!theirElems[id]) {
3298
3621
  onhave?.(id);
3299
3622
  } else {
3300
- delete theirElems[bytesToHex5(k)];
3623
+ delete theirElems[bytesToHex6(k)];
3301
3624
  }
3302
3625
  return true;
3303
3626
  });
3304
3627
  if (onneed) {
3305
3628
  for (let v of Object.values(theirElems)) {
3306
- onneed(bytesToHex5(v));
3629
+ onneed(bytesToHex6(v));
3307
3630
  }
3308
3631
  }
3309
3632
  } else {
@@ -3321,7 +3644,7 @@ var Negentropy = class {
3321
3644
  prevIndex = upper;
3322
3645
  prevBound = currBound;
3323
3646
  }
3324
- return fullOutput.length === 1 ? null : bytesToHex5(fullOutput.unwrap());
3647
+ return fullOutput.length === 1 ? null : bytesToHex6(fullOutput.unwrap());
3325
3648
  }
3326
3649
  splitRange(lower, upper, upperBound, o) {
3327
3650
  let numElems = upper - lower;
@@ -3509,8 +3832,8 @@ __export(nip98_exports, {
3509
3832
  validateEventUrlTag: () => validateEventUrlTag,
3510
3833
  validateToken: () => validateToken
3511
3834
  });
3512
- import { sha256 as sha2565 } from "@noble/hashes/sha2.js";
3513
- 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";
3514
3837
  import { base64 as base643 } from "@scure/base";
3515
3838
  var _authorizationScheme = "Nostr ";
3516
3839
  async function getToken(loginUrl, httpMethod, sign, includeAuthorizationScheme = false, payload) {
@@ -3575,8 +3898,8 @@ function validateEventMethodTag(event, method) {
3575
3898
  return methodTag.length > 0 && methodTag[1].toLowerCase() === method.toLowerCase();
3576
3899
  }
3577
3900
  function hashPayload(payload) {
3578
- const hash = sha2565(utf8Encoder.encode(JSON.stringify(payload)));
3579
- return bytesToHex6(hash);
3901
+ const hash = sha2566(utf8Encoder.encode(JSON.stringify(payload)));
3902
+ return bytesToHex7(hash);
3580
3903
  }
3581
3904
  function validateEventPayloadTag(event, payload) {
3582
3905
  const payloadTag = event.tags.find((t) => t[0] === "payload");