@welshman/domain 0.9.0-pre1 → 0.9.0-pre3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/domain/src/behaviors/Emoji.d.ts +18 -0
- package/dist/domain/src/behaviors/Emoji.d.ts.map +1 -0
- package/dist/domain/src/behaviors/Emoji.js +9 -0
- package/dist/domain/src/behaviors/Emoji.js.map +1 -0
- package/dist/domain/src/behaviors/ZapSplits.d.ts +36 -0
- package/dist/domain/src/behaviors/ZapSplits.d.ts.map +1 -0
- package/dist/domain/src/behaviors/ZapSplits.js +54 -0
- package/dist/domain/src/behaviors/ZapSplits.js.map +1 -0
- package/dist/domain/src/core/EventReader.d.ts +51 -0
- package/dist/domain/src/core/EventReader.d.ts.map +1 -0
- package/dist/domain/src/core/EventReader.js +76 -0
- package/dist/domain/src/core/EventReader.js.map +1 -0
- package/dist/domain/src/core/EventWriter.d.ts +99 -0
- package/dist/domain/src/core/EventWriter.d.ts.map +1 -0
- package/dist/domain/src/core/EventWriter.js +233 -0
- package/dist/domain/src/core/EventWriter.js.map +1 -0
- package/dist/domain/src/core/Kind.d.ts +39 -0
- package/dist/domain/src/core/Kind.d.ts.map +1 -0
- package/dist/domain/src/core/Kind.js +41 -0
- package/dist/domain/src/core/Kind.js.map +1 -0
- package/dist/domain/src/core/ListReader.d.ts +9 -0
- package/dist/domain/src/core/ListReader.d.ts.map +1 -0
- package/dist/domain/src/{ListReader.js → core/ListReader.js} +5 -3
- package/dist/domain/src/core/ListReader.js.map +1 -0
- package/dist/domain/src/{ListBuilder.d.ts → core/ListWriter.d.ts} +8 -9
- package/dist/domain/src/core/ListWriter.d.ts.map +1 -0
- package/dist/domain/src/{ListBuilder.js → core/ListWriter.js} +12 -13
- package/dist/domain/src/core/ListWriter.js.map +1 -0
- package/dist/domain/src/index.d.ts +17 -6
- package/dist/domain/src/index.d.ts.map +1 -1
- package/dist/domain/src/index.js +17 -6
- package/dist/domain/src/index.js.map +1 -1
- package/dist/domain/src/kinds/AppData.d.ts +22 -0
- package/dist/domain/src/kinds/AppData.d.ts.map +1 -0
- package/dist/domain/src/kinds/AppData.js +85 -0
- package/dist/domain/src/kinds/AppData.js.map +1 -0
- package/dist/domain/src/kinds/BlockedRelayList.d.ts +6 -7
- package/dist/domain/src/kinds/BlockedRelayList.d.ts.map +1 -1
- package/dist/domain/src/kinds/BlockedRelayList.js +12 -11
- package/dist/domain/src/kinds/BlockedRelayList.js.map +1 -1
- package/dist/domain/src/kinds/BlossomServerList.d.ts +6 -7
- package/dist/domain/src/kinds/BlossomServerList.d.ts.map +1 -1
- package/dist/domain/src/kinds/BlossomServerList.js +12 -11
- package/dist/domain/src/kinds/BlossomServerList.js.map +1 -1
- package/dist/domain/src/kinds/BookmarkList.d.ts +6 -7
- package/dist/domain/src/kinds/BookmarkList.d.ts.map +1 -1
- package/dist/domain/src/kinds/BookmarkList.js +15 -14
- package/dist/domain/src/kinds/BookmarkList.js.map +1 -1
- package/dist/domain/src/kinds/Classified.d.ts +6 -7
- package/dist/domain/src/kinds/Classified.d.ts.map +1 -1
- package/dist/domain/src/kinds/Classified.js +17 -16
- package/dist/domain/src/kinds/Classified.js.map +1 -1
- package/dist/domain/src/kinds/Comment.d.ts +14 -10
- package/dist/domain/src/kinds/Comment.d.ts.map +1 -1
- package/dist/domain/src/kinds/Comment.js +57 -34
- package/dist/domain/src/kinds/Comment.js.map +1 -1
- package/dist/domain/src/kinds/CommunityList.d.ts +12 -0
- package/dist/domain/src/kinds/CommunityList.d.ts.map +1 -0
- package/dist/domain/src/kinds/CommunityList.js +26 -0
- package/dist/domain/src/kinds/CommunityList.js.map +1 -0
- package/dist/domain/src/kinds/Delete.d.ts +18 -0
- package/dist/domain/src/kinds/Delete.d.ts.map +1 -0
- package/dist/domain/src/kinds/Delete.js +70 -0
- package/dist/domain/src/kinds/Delete.js.map +1 -0
- package/dist/domain/src/kinds/EmojiList.d.ts +6 -10
- package/dist/domain/src/kinds/EmojiList.d.ts.map +1 -1
- package/dist/domain/src/kinds/EmojiList.js +12 -20
- package/dist/domain/src/kinds/EmojiList.js.map +1 -1
- package/dist/domain/src/kinds/Feed.d.ts +6 -7
- package/dist/domain/src/kinds/Feed.d.ts.map +1 -1
- package/dist/domain/src/kinds/Feed.js +14 -13
- package/dist/domain/src/kinds/Feed.js.map +1 -1
- package/dist/domain/src/kinds/FeedList.d.ts +6 -7
- package/dist/domain/src/kinds/FeedList.d.ts.map +1 -1
- package/dist/domain/src/kinds/FeedList.js +12 -11
- package/dist/domain/src/kinds/FeedList.js.map +1 -1
- package/dist/domain/src/kinds/FollowList.d.ts +7 -7
- package/dist/domain/src/kinds/FollowList.d.ts.map +1 -1
- package/dist/domain/src/kinds/FollowList.js +15 -11
- package/dist/domain/src/kinds/FollowList.js.map +1 -1
- package/dist/domain/src/kinds/Handler.d.ts +11 -13
- package/dist/domain/src/kinds/Handler.d.ts.map +1 -1
- package/dist/domain/src/kinds/Handler.js +21 -19
- package/dist/domain/src/kinds/Handler.js.map +1 -1
- package/dist/domain/src/kinds/HandlerRecommendation.d.ts +6 -7
- package/dist/domain/src/kinds/HandlerRecommendation.d.ts.map +1 -1
- package/dist/domain/src/kinds/HandlerRecommendation.js +13 -12
- package/dist/domain/src/kinds/HandlerRecommendation.js.map +1 -1
- package/dist/domain/src/kinds/MessagingRelayList.d.ts +6 -7
- package/dist/domain/src/kinds/MessagingRelayList.d.ts.map +1 -1
- package/dist/domain/src/kinds/MessagingRelayList.js +12 -11
- package/dist/domain/src/kinds/MessagingRelayList.js.map +1 -1
- package/dist/domain/src/kinds/MuteList.d.ts +7 -7
- package/dist/domain/src/kinds/MuteList.d.ts.map +1 -1
- package/dist/domain/src/kinds/MuteList.js +15 -11
- package/dist/domain/src/kinds/MuteList.js.map +1 -1
- package/dist/domain/src/kinds/Note.d.ts +18 -0
- package/dist/domain/src/kinds/Note.d.ts.map +1 -0
- package/dist/domain/src/kinds/Note.js +106 -0
- package/dist/domain/src/kinds/Note.js.map +1 -0
- package/dist/domain/src/kinds/Pin.d.ts +7 -8
- package/dist/domain/src/kinds/Pin.d.ts.map +1 -1
- package/dist/domain/src/kinds/Pin.js +23 -21
- package/dist/domain/src/kinds/Pin.js.map +1 -1
- package/dist/domain/src/kinds/PinList.d.ts +6 -7
- package/dist/domain/src/kinds/PinList.d.ts.map +1 -1
- package/dist/domain/src/kinds/PinList.js +13 -12
- package/dist/domain/src/kinds/PinList.js.map +1 -1
- package/dist/domain/src/kinds/Pinboard.d.ts +7 -8
- package/dist/domain/src/kinds/Pinboard.d.ts.map +1 -1
- package/dist/domain/src/kinds/Pinboard.js +16 -15
- package/dist/domain/src/kinds/Pinboard.js.map +1 -1
- package/dist/domain/src/kinds/Poll.d.ts +7 -8
- package/dist/domain/src/kinds/Poll.d.ts.map +1 -1
- package/dist/domain/src/kinds/Poll.js +16 -15
- package/dist/domain/src/kinds/Poll.js.map +1 -1
- package/dist/domain/src/kinds/PollResponse.d.ts +7 -8
- package/dist/domain/src/kinds/PollResponse.d.ts.map +1 -1
- package/dist/domain/src/kinds/PollResponse.js +13 -12
- package/dist/domain/src/kinds/PollResponse.js.map +1 -1
- package/dist/domain/src/kinds/Profile.d.ts +10 -13
- package/dist/domain/src/kinds/Profile.d.ts.map +1 -1
- package/dist/domain/src/kinds/Profile.js +16 -19
- package/dist/domain/src/kinds/Profile.js.map +1 -1
- package/dist/domain/src/kinds/Reaction.d.ts +16 -0
- package/dist/domain/src/kinds/Reaction.d.ts.map +1 -0
- package/dist/domain/src/kinds/Reaction.js +55 -0
- package/dist/domain/src/kinds/Reaction.js.map +1 -0
- package/dist/domain/src/kinds/RelayAddMember.d.ts +7 -7
- package/dist/domain/src/kinds/RelayAddMember.d.ts.map +1 -1
- package/dist/domain/src/kinds/RelayAddMember.js +13 -11
- package/dist/domain/src/kinds/RelayAddMember.js.map +1 -1
- package/dist/domain/src/kinds/RelayInvite.d.ts +7 -7
- package/dist/domain/src/kinds/RelayInvite.d.ts.map +1 -1
- package/dist/domain/src/kinds/RelayInvite.js +13 -11
- package/dist/domain/src/kinds/RelayInvite.js.map +1 -1
- package/dist/domain/src/kinds/RelayJoin.d.ts +7 -7
- package/dist/domain/src/kinds/RelayJoin.d.ts.map +1 -1
- package/dist/domain/src/kinds/RelayJoin.js +13 -11
- package/dist/domain/src/kinds/RelayJoin.js.map +1 -1
- package/dist/domain/src/kinds/RelayLeave.d.ts +7 -7
- package/dist/domain/src/kinds/RelayLeave.d.ts.map +1 -1
- package/dist/domain/src/kinds/RelayLeave.js +11 -9
- package/dist/domain/src/kinds/RelayLeave.js.map +1 -1
- package/dist/domain/src/kinds/RelayList.d.ts +7 -7
- package/dist/domain/src/kinds/RelayList.d.ts.map +1 -1
- package/dist/domain/src/kinds/RelayList.js +20 -11
- package/dist/domain/src/kinds/RelayList.js.map +1 -1
- package/dist/domain/src/kinds/RelayMembers.d.ts +9 -9
- package/dist/domain/src/kinds/RelayMembers.d.ts.map +1 -1
- package/dist/domain/src/kinds/RelayMembers.js +15 -15
- package/dist/domain/src/kinds/RelayMembers.js.map +1 -1
- package/dist/domain/src/kinds/RelayRemoveMember.d.ts +7 -7
- package/dist/domain/src/kinds/RelayRemoveMember.d.ts.map +1 -1
- package/dist/domain/src/kinds/RelayRemoveMember.js +13 -11
- package/dist/domain/src/kinds/RelayRemoveMember.js.map +1 -1
- package/dist/domain/src/kinds/RelayRole.d.ts +18 -0
- package/dist/domain/src/kinds/RelayRole.d.ts.map +1 -0
- package/dist/domain/src/kinds/RelayRole.js +46 -0
- package/dist/domain/src/kinds/RelayRole.js.map +1 -0
- package/dist/domain/src/kinds/RelaySet.d.ts +6 -7
- package/dist/domain/src/kinds/RelaySet.d.ts.map +1 -1
- package/dist/domain/src/kinds/RelaySet.js +15 -14
- package/dist/domain/src/kinds/RelaySet.js.map +1 -1
- package/dist/domain/src/kinds/Report.d.ts +9 -8
- package/dist/domain/src/kinds/Report.d.ts.map +1 -1
- package/dist/domain/src/kinds/Report.js +20 -16
- package/dist/domain/src/kinds/Report.js.map +1 -1
- package/dist/domain/src/kinds/RoomAddMember.d.ts +7 -7
- package/dist/domain/src/kinds/RoomAddMember.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomAddMember.js +13 -11
- package/dist/domain/src/kinds/RoomAddMember.js.map +1 -1
- package/dist/domain/src/kinds/RoomAdmins.d.ts +7 -7
- package/dist/domain/src/kinds/RoomAdmins.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomAdmins.js +13 -11
- package/dist/domain/src/kinds/RoomAdmins.js.map +1 -1
- package/dist/domain/src/kinds/RoomCreate.d.ts +8 -8
- package/dist/domain/src/kinds/RoomCreate.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomCreate.js +13 -11
- package/dist/domain/src/kinds/RoomCreate.js.map +1 -1
- package/dist/domain/src/kinds/RoomCreatePermission.d.ts +7 -7
- package/dist/domain/src/kinds/RoomCreatePermission.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomCreatePermission.js +13 -11
- package/dist/domain/src/kinds/RoomCreatePermission.js.map +1 -1
- package/dist/domain/src/kinds/RoomDelete.d.ts +8 -8
- package/dist/domain/src/kinds/RoomDelete.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomDelete.js +14 -12
- package/dist/domain/src/kinds/RoomDelete.js.map +1 -1
- package/dist/domain/src/kinds/RoomEdit.d.ts +8 -8
- package/dist/domain/src/kinds/RoomEdit.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomEdit.js +24 -23
- package/dist/domain/src/kinds/RoomEdit.js.map +1 -1
- package/dist/domain/src/kinds/RoomJoin.d.ts +8 -10
- package/dist/domain/src/kinds/RoomJoin.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomJoin.js +15 -19
- package/dist/domain/src/kinds/RoomJoin.js.map +1 -1
- package/dist/domain/src/kinds/RoomLeave.d.ts +8 -8
- package/dist/domain/src/kinds/RoomLeave.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomLeave.js +14 -12
- package/dist/domain/src/kinds/RoomLeave.js.map +1 -1
- package/dist/domain/src/kinds/RoomList.d.ts +18 -11
- package/dist/domain/src/kinds/RoomList.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomList.js +94 -21
- package/dist/domain/src/kinds/RoomList.js.map +1 -1
- package/dist/domain/src/kinds/RoomMembers.d.ts +7 -7
- package/dist/domain/src/kinds/RoomMembers.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomMembers.js +13 -11
- package/dist/domain/src/kinds/RoomMembers.js.map +1 -1
- package/dist/domain/src/kinds/RoomMeta.d.ts +7 -7
- package/dist/domain/src/kinds/RoomMeta.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomMeta.js +16 -14
- package/dist/domain/src/kinds/RoomMeta.js.map +1 -1
- package/dist/domain/src/kinds/RoomPins.d.ts +15 -0
- package/dist/domain/src/kinds/RoomPins.d.ts.map +1 -0
- package/dist/domain/src/kinds/RoomPins.js +34 -0
- package/dist/domain/src/kinds/RoomPins.js.map +1 -0
- package/dist/domain/src/kinds/RoomRemoveMember.d.ts +7 -7
- package/dist/domain/src/kinds/RoomRemoveMember.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomRemoveMember.js +13 -11
- package/dist/domain/src/kinds/RoomRemoveMember.js.map +1 -1
- package/dist/domain/src/kinds/RoomUpdatePins.d.ts +15 -0
- package/dist/domain/src/kinds/RoomUpdatePins.d.ts.map +1 -0
- package/dist/domain/src/kinds/RoomUpdatePins.js +38 -0
- package/dist/domain/src/kinds/RoomUpdatePins.js.map +1 -0
- package/dist/domain/src/kinds/SearchRelayList.d.ts +6 -7
- package/dist/domain/src/kinds/SearchRelayList.d.ts.map +1 -1
- package/dist/domain/src/kinds/SearchRelayList.js +12 -11
- package/dist/domain/src/kinds/SearchRelayList.js.map +1 -1
- package/dist/domain/src/kinds/Thread.d.ts +6 -7
- package/dist/domain/src/kinds/Thread.d.ts.map +1 -1
- package/dist/domain/src/kinds/Thread.js +12 -11
- package/dist/domain/src/kinds/Thread.js.map +1 -1
- package/dist/domain/src/kinds/TimeEvent.d.ts +9 -10
- package/dist/domain/src/kinds/TimeEvent.d.ts.map +1 -1
- package/dist/domain/src/kinds/TimeEvent.js +23 -22
- package/dist/domain/src/kinds/TimeEvent.js.map +1 -1
- package/dist/domain/src/kinds/TopicList.d.ts +6 -7
- package/dist/domain/src/kinds/TopicList.d.ts.map +1 -1
- package/dist/domain/src/kinds/TopicList.js +13 -12
- package/dist/domain/src/kinds/TopicList.js.map +1 -1
- package/dist/domain/src/kinds/ZapGoal.d.ts +15 -9
- package/dist/domain/src/kinds/ZapGoal.d.ts.map +1 -1
- package/dist/domain/src/kinds/ZapGoal.js +46 -17
- package/dist/domain/src/kinds/ZapGoal.js.map +1 -1
- package/dist/domain/src/kinds/ZapReceipt.d.ts +8 -11
- package/dist/domain/src/kinds/ZapReceipt.d.ts.map +1 -1
- package/dist/domain/src/kinds/ZapReceipt.js +18 -42
- package/dist/domain/src/kinds/ZapReceipt.js.map +1 -1
- package/dist/domain/src/kinds/ZapRequest.d.ts +15 -7
- package/dist/domain/src/kinds/ZapRequest.d.ts.map +1 -1
- package/dist/domain/src/kinds/ZapRequest.js +40 -15
- package/dist/domain/src/kinds/ZapRequest.js.map +1 -1
- package/dist/domain/src/other/Relay.d.ts +49 -0
- package/dist/domain/src/other/Relay.d.ts.map +1 -0
- package/dist/domain/src/other/Relay.js +50 -0
- package/dist/domain/src/other/Relay.js.map +1 -0
- package/dist/domain/src/other/Zapper.d.ts +40 -0
- package/dist/domain/src/other/Zapper.d.ts.map +1 -0
- package/dist/domain/src/other/Zapper.js +67 -0
- package/dist/domain/src/other/Zapper.js.map +1 -0
- package/dist/feeds/src/compiler.d.ts +2 -2
- package/dist/feeds/src/compiler.d.ts.map +1 -1
- package/dist/feeds/src/index.d.ts +1 -0
- package/dist/feeds/src/index.d.ts.map +1 -1
- package/dist/feeds/src/index.js +1 -0
- package/dist/feeds/src/index.js.map +1 -1
- package/dist/feeds/src/request.d.ts +4 -4
- package/dist/feeds/src/request.d.ts.map +1 -1
- package/dist/feeds/src/request.js +15 -15
- package/dist/feeds/src/request.js.map +1 -1
- package/dist/feeds/src/router.d.ts +10 -0
- package/dist/feeds/src/router.d.ts.map +1 -0
- package/dist/feeds/src/router.js +45 -0
- package/dist/feeds/src/router.js.map +1 -0
- package/dist/feeds/src/utils.js +2 -2
- package/dist/feeds/src/utils.js.map +1 -1
- package/dist/lib/src/Tools.d.ts +9 -0
- package/dist/lib/src/Tools.d.ts.map +1 -1
- package/dist/lib/src/Tools.js +26 -1
- package/dist/lib/src/Tools.js.map +1 -1
- package/dist/net/src/auth.d.ts.map +1 -1
- package/dist/net/src/auth.js +2 -2
- package/dist/net/src/auth.js.map +1 -1
- package/dist/net/src/context.d.ts +1 -1
- package/dist/net/src/context.d.ts.map +1 -1
- package/dist/net/src/message.d.ts +1 -1
- package/dist/net/src/message.d.ts.map +1 -1
- package/dist/net/src/message.js +1 -1
- package/dist/net/src/message.js.map +1 -1
- package/dist/net/src/publish.d.ts.map +1 -1
- package/dist/net/src/publish.js +13 -0
- package/dist/net/src/publish.js.map +1 -1
- package/dist/net/src/repository.d.ts +3 -0
- package/dist/net/src/repository.d.ts.map +1 -1
- package/dist/net/src/repository.js +49 -12
- package/dist/net/src/repository.js.map +1 -1
- package/dist/net/src/request.d.ts +3 -3
- package/dist/net/src/request.d.ts.map +1 -1
- package/dist/net/src/request.js +16 -2
- package/dist/net/src/request.js.map +1 -1
- package/dist/signer/src/nip59.d.ts +1 -1
- package/dist/signer/src/nip59.d.ts.map +1 -1
- package/dist/signer/src/nip59.js +26 -30
- package/dist/signer/src/nip59.js.map +1 -1
- package/dist/signer/src/signers/nip07.d.ts.map +1 -1
- package/dist/signer/src/signers/nip07.js +19 -5
- package/dist/signer/src/signers/nip07.js.map +1 -1
- package/dist/signer/src/signers/nip46.d.ts +2 -2
- package/dist/signer/src/signers/nip46.d.ts.map +1 -1
- package/dist/signer/src/signers/nip46.js +10 -5
- package/dist/signer/src/signers/nip46.js.map +1 -1
- package/dist/signer/src/util.d.ts +2 -2
- package/dist/signer/src/util.d.ts.map +1 -1
- package/dist/signer/src/util.js +2 -6
- package/dist/signer/src/util.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/util/src/Events.d.ts +0 -12
- package/dist/util/src/Events.d.ts.map +1 -1
- package/dist/util/src/Events.js +3 -25
- package/dist/util/src/Events.js.map +1 -1
- package/dist/util/src/Kinds.d.ts +5 -1
- package/dist/util/src/Kinds.d.ts.map +1 -1
- package/dist/util/src/Kinds.js +7 -2
- package/dist/util/src/Kinds.js.map +1 -1
- package/dist/util/src/Lightning.d.ts +6 -0
- package/dist/util/src/Lightning.d.ts.map +1 -0
- package/dist/util/src/Lightning.js +59 -0
- package/dist/util/src/Lightning.js.map +1 -0
- package/dist/util/src/Nip86.d.ts +74 -30
- package/dist/util/src/Nip86.d.ts.map +1 -1
- package/dist/util/src/Nip86.js +169 -30
- package/dist/util/src/Nip86.js.map +1 -1
- package/dist/util/src/Pow.js +2 -2
- package/dist/util/src/Pow.js.map +1 -1
- package/dist/util/src/Pubkey.d.ts.map +1 -1
- package/dist/util/src/Pubkey.js +2 -1
- package/dist/util/src/Pubkey.js.map +1 -1
- package/dist/util/src/Relay.d.ts +0 -29
- package/dist/util/src/Relay.d.ts.map +1 -1
- package/dist/util/src/Relay.js +0 -10
- package/dist/util/src/Relay.js.map +1 -1
- package/dist/util/src/RelaySelection.d.ts +101 -0
- package/dist/util/src/RelaySelection.d.ts.map +1 -0
- package/dist/util/src/RelaySelection.js +98 -0
- package/dist/util/src/RelaySelection.js.map +1 -0
- package/dist/util/src/Tags.d.ts +16 -35
- package/dist/util/src/Tags.d.ts.map +1 -1
- package/dist/util/src/Tags.js +23 -74
- package/dist/util/src/Tags.js.map +1 -1
- package/dist/util/src/Topics.d.ts +2 -0
- package/dist/util/src/Topics.d.ts.map +1 -0
- package/dist/util/src/Topics.js +2 -0
- package/dist/util/src/Topics.js.map +1 -0
- package/dist/util/src/index.d.ts +2 -1
- package/dist/util/src/index.d.ts.map +1 -1
- package/dist/util/src/index.js +2 -1
- package/dist/util/src/index.js.map +1 -1
- package/package.json +11 -9
- package/dist/domain/src/EventBuilder.d.ts +0 -35
- package/dist/domain/src/EventBuilder.d.ts.map +0 -1
- package/dist/domain/src/EventBuilder.js +0 -111
- package/dist/domain/src/EventBuilder.js.map +0 -1
- package/dist/domain/src/EventReader.d.ts +0 -24
- package/dist/domain/src/EventReader.d.ts.map +0 -1
- package/dist/domain/src/EventReader.js +0 -57
- package/dist/domain/src/EventReader.js.map +0 -1
- package/dist/domain/src/ListBuilder.d.ts.map +0 -1
- package/dist/domain/src/ListBuilder.js.map +0 -1
- package/dist/domain/src/ListReader.d.ts +0 -12
- package/dist/domain/src/ListReader.d.ts.map +0 -1
- package/dist/domain/src/ListReader.js.map +0 -1
- package/dist/domain/src/kinds/GroupList.d.ts +0 -13
- package/dist/domain/src/kinds/GroupList.d.ts.map +0 -1
- package/dist/domain/src/kinds/GroupList.js +0 -24
- package/dist/domain/src/kinds/GroupList.js.map +0 -1
- package/dist/domain/src/kinds/SlashCommand.d.ts +0 -38
- package/dist/domain/src/kinds/SlashCommand.d.ts.map +0 -1
- package/dist/domain/src/kinds/SlashCommand.js +0 -91
- package/dist/domain/src/kinds/SlashCommand.js.map +0 -1
- package/dist/util/src/Zaps.d.ts +0 -86
- package/dist/util/src/Zaps.d.ts.map +0 -1
- package/dist/util/src/Zaps.js +0 -184
- package/dist/util/src/Zaps.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TrustedEvent } from "@welshman/util";
|
|
2
|
+
/**
|
|
3
|
+
* A NIP-30 custom emoji, parsed from an `["emoji", <shortcode>, <url>, <address>]`
|
|
4
|
+
* tag. `address` is an optional `kind:pubkey:d-tag` pointer to the kind-30030
|
|
5
|
+
* emoji set (NIP-51) the emoji belongs to.
|
|
6
|
+
*/
|
|
7
|
+
export type Emoji = {
|
|
8
|
+
shortcode: string;
|
|
9
|
+
url: string;
|
|
10
|
+
address?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Parse an event's NIP-30 `emoji` tags. Tags missing a shortcode or url are
|
|
14
|
+
* skipped. A plain function so it can read emojis off any event, regardless of
|
|
15
|
+
* kind, without a kind-specific reader.
|
|
16
|
+
*/
|
|
17
|
+
export declare const getEmojis: (event: TrustedEvent) => Emoji[];
|
|
18
|
+
//# sourceMappingURL=Emoji.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Emoji.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/Emoji.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAEhD;;;;GAIG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,YAAY,KAAG,KAAK,EAGiB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse an event's NIP-30 `emoji` tags. Tags missing a shortcode or url are
|
|
3
|
+
* skipped. A plain function so it can read emojis off any event, regardless of
|
|
4
|
+
* kind, without a kind-specific reader.
|
|
5
|
+
*/
|
|
6
|
+
export const getEmojis = (event) => event.tags
|
|
7
|
+
.filter(tag => tag[0] === "emoji" && tag[1] && tag[2])
|
|
8
|
+
.map(([, shortcode, url, address]) => ({ shortcode, url, address }));
|
|
9
|
+
//# sourceMappingURL=Emoji.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Emoji.js","sourceRoot":"","sources":["../../../../src/behaviors/Emoji.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAmB,EAAW,EAAE,CACxD,KAAK,CAAC,IAAI;KACP,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;KACrD,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { TrustedEvent } from "@welshman/util";
|
|
2
|
+
/**
|
|
3
|
+
* A single recipient of an event's zaps, parsed from a NIP-57 Appendix G `zap`
|
|
4
|
+
* tag of the form `["zap", <pubkey>, <relay hint>, <weight>]`.
|
|
5
|
+
*/
|
|
6
|
+
export type ZapSplit = {
|
|
7
|
+
pubkey: string;
|
|
8
|
+
relay?: string;
|
|
9
|
+
weight: number;
|
|
10
|
+
};
|
|
11
|
+
export type ZapSplitAmount = ZapSplit & {
|
|
12
|
+
amount: number;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Resolve an event's zap-split recipients per NIP-57 Appendix G:
|
|
16
|
+
*
|
|
17
|
+
* - With no `zap` tags the whole zap goes to the event's author.
|
|
18
|
+
* - If no recipient carries a weight, the zap is split equally (weight 1 each).
|
|
19
|
+
* - If weights are only partially present, unweighted recipients drop to weight
|
|
20
|
+
* 0 (i.e. they should not be zapped).
|
|
21
|
+
*
|
|
22
|
+
* Weight-0 recipients are still returned so callers have the full recipient set;
|
|
23
|
+
* they simply receive 0 from `splitZapAmount`.
|
|
24
|
+
*
|
|
25
|
+
* A plain function so it can read splits off any event, regardless of kind,
|
|
26
|
+
* without a kind-specific reader.
|
|
27
|
+
*/
|
|
28
|
+
export declare const getZapSplits: (event: TrustedEvent) => ZapSplit[];
|
|
29
|
+
/**
|
|
30
|
+
* Divide `total` (in any integer unit, e.g. millisats) across an event's
|
|
31
|
+
* zap-split recipients proportionally to their weights. Any rounding remainder
|
|
32
|
+
* is handed to the highest-weighted recipient so the parts sum back to exactly
|
|
33
|
+
* `total`. If every weight is 0, nobody is zapped.
|
|
34
|
+
*/
|
|
35
|
+
export declare const splitZapAmount: (event: TrustedEvent, total: number) => ZapSplitAmount[];
|
|
36
|
+
//# sourceMappingURL=ZapSplits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZapSplits.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/ZapSplits.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAEhD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAA;AAQxD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,YAAY,KAAG,QAAQ,EAc1D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,YAAY,EAAE,OAAO,MAAM,KAAG,cAAc,EAoBjF,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { sum, allPass, nthEq, nth } from "@welshman/lib";
|
|
2
|
+
const parseWeight = (weight) => {
|
|
3
|
+
const n = weight === undefined ? NaN : parseFloat(weight);
|
|
4
|
+
return Number.isFinite(n) && n > 0 ? n : 0;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Resolve an event's zap-split recipients per NIP-57 Appendix G:
|
|
8
|
+
*
|
|
9
|
+
* - With no `zap` tags the whole zap goes to the event's author.
|
|
10
|
+
* - If no recipient carries a weight, the zap is split equally (weight 1 each).
|
|
11
|
+
* - If weights are only partially present, unweighted recipients drop to weight
|
|
12
|
+
* 0 (i.e. they should not be zapped).
|
|
13
|
+
*
|
|
14
|
+
* Weight-0 recipients are still returned so callers have the full recipient set;
|
|
15
|
+
* they simply receive 0 from `splitZapAmount`.
|
|
16
|
+
*
|
|
17
|
+
* A plain function so it can read splits off any event, regardless of kind,
|
|
18
|
+
* without a kind-specific reader.
|
|
19
|
+
*/
|
|
20
|
+
export const getZapSplits = (event) => {
|
|
21
|
+
const zapTags = event.tags.filter(allPass(nthEq(0, "zap"), nth(1)));
|
|
22
|
+
if (zapTags.length === 0) {
|
|
23
|
+
return [{ pubkey: event.pubkey, weight: 1 }];
|
|
24
|
+
}
|
|
25
|
+
const anyWeighted = zapTags.some(nth(3));
|
|
26
|
+
return zapTags.map(([, pubkey, relay, weight]) => ({
|
|
27
|
+
pubkey,
|
|
28
|
+
relay: relay || undefined,
|
|
29
|
+
weight: anyWeighted ? parseWeight(weight) : 1,
|
|
30
|
+
}));
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Divide `total` (in any integer unit, e.g. millisats) across an event's
|
|
34
|
+
* zap-split recipients proportionally to their weights. Any rounding remainder
|
|
35
|
+
* is handed to the highest-weighted recipient so the parts sum back to exactly
|
|
36
|
+
* `total`. If every weight is 0, nobody is zapped.
|
|
37
|
+
*/
|
|
38
|
+
export const splitZapAmount = (event, total) => {
|
|
39
|
+
const splits = getZapSplits(event);
|
|
40
|
+
const totalWeight = sum(splits.map(split => split.weight));
|
|
41
|
+
if (totalWeight === 0) {
|
|
42
|
+
return splits.map(split => ({ ...split, amount: 0 }));
|
|
43
|
+
}
|
|
44
|
+
const amounts = splits.map(split => Math.floor((total * split.weight) / totalWeight));
|
|
45
|
+
let maxIndex = 0;
|
|
46
|
+
splits.forEach((split, i) => {
|
|
47
|
+
if (split.weight > splits[maxIndex].weight) {
|
|
48
|
+
maxIndex = i;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
amounts[maxIndex] += total - sum(amounts);
|
|
52
|
+
return splits.map((split, i) => ({ ...split, amount: amounts[i] }));
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=ZapSplits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZapSplits.js","sourceRoot":"","sources":["../../../../src/behaviors/ZapSplits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAC,MAAM,eAAe,CAAA;AAetD,MAAM,WAAW,GAAG,CAAC,MAA0B,EAAE,EAAE;IACjD,MAAM,CAAC,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAEzD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAc,EAAE;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAExC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM;QACN,KAAK,EAAE,KAAK,IAAI,SAAS;QACzB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9C,CAAC,CAAC,CAAA;AACL,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAmB,EAAE,KAAa,EAAoB,EAAE;IACrF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAClC,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IAE1D,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAC,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAA;IAErF,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1B,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3C,QAAQ,GAAG,CAAC,CAAA;QACd,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA;IAEzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { MaybeAsync } from "@welshman/lib";
|
|
2
|
+
import type { TrustedEvent } from "@welshman/util";
|
|
3
|
+
import type { KindContext } from "./Kind.js";
|
|
4
|
+
import type { Emoji } from "../behaviors/Emoji.js";
|
|
5
|
+
import type { ZapSplit } from "../behaviors/ZapSplits.js";
|
|
6
|
+
/**
|
|
7
|
+
* The accessors every reader shares. Readers don't extend this directly — they
|
|
8
|
+
* pick a branch below according to whether parsing their event can hit IO, which
|
|
9
|
+
* is what tells a caller whether `parse()` has to be awaited.
|
|
10
|
+
*/
|
|
11
|
+
export declare abstract class BaseEventReader {
|
|
12
|
+
readonly kind: number;
|
|
13
|
+
readonly context: KindContext;
|
|
14
|
+
readonly event: TrustedEvent;
|
|
15
|
+
constructor(kind: number, context: KindContext, event: TrustedEvent);
|
|
16
|
+
abstract parse(): MaybeAsync<this>;
|
|
17
|
+
id(): string;
|
|
18
|
+
author(): string;
|
|
19
|
+
content(): string;
|
|
20
|
+
tags(): string[][];
|
|
21
|
+
createdAt(): number;
|
|
22
|
+
identifier(): string | undefined;
|
|
23
|
+
address(): string;
|
|
24
|
+
room(): string | undefined;
|
|
25
|
+
protect(): boolean;
|
|
26
|
+
expiration(): number | undefined;
|
|
27
|
+
emojis(): Emoji[];
|
|
28
|
+
zapSplits(): ZapSplit[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A reader whose event can be parsed without IO — the common case. `parse()`
|
|
32
|
+
* returns the reader itself, so callers never await it. Override `parse` to
|
|
33
|
+
* derive state from the event, returning `this`.
|
|
34
|
+
*/
|
|
35
|
+
export declare abstract class EventReader extends BaseEventReader {
|
|
36
|
+
parse(): this;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A reader that has to decrypt (or otherwise await something) before its
|
|
40
|
+
* accessors are complete. `parse()` returns a promise, so the type system makes
|
|
41
|
+
* callers await it rather than silently reading a half-parsed event.
|
|
42
|
+
*/
|
|
43
|
+
export declare abstract class AsyncEventReader extends BaseEventReader {
|
|
44
|
+
abstract parse(): Promise<this>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* What `reader.parse()` yields for a given reader — the reader for sync kinds, a
|
|
48
|
+
* promise of it for kinds that decrypt. `await` works either way.
|
|
49
|
+
*/
|
|
50
|
+
export type Parsed<R extends BaseEventReader> = ReturnType<R["parse"]>;
|
|
51
|
+
//# sourceMappingURL=EventReader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventReader.d.ts","sourceRoot":"","sources":["../../../../src/core/EventReader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AAE7C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAA;AAE1C,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,uBAAuB,CAAA;AAEhD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,2BAA2B,CAAA;AAEvD;;;;GAIG;AACH,8BAAsB,eAAe;IAEjC,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,OAAO,EAAE,WAAW;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY;gBAFnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,YAAY;IAS9B,QAAQ,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC;IAElC,EAAE;IAIF,MAAM;IAIN,OAAO;IAIP,IAAI;IAIJ,SAAS;IAIT,UAAU;IAIV,OAAO;IAIP,IAAI;IAIJ,OAAO;IAIP,UAAU;IAIV,MAAM,IAAI,KAAK,EAAE;IAIjB,SAAS,IAAI,QAAQ,EAAE;CAGxB;AAED;;;;GAIG;AACH,8BAAsB,WAAY,SAAQ,eAAe;IACvD,KAAK,IAAI,IAAI;CAGd;AAED;;;;GAIG;AACH,8BAAsB,gBAAiB,SAAQ,eAAe;IAC5D,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,eAAe,IAAI,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { spec, toInt } from "@welshman/lib";
|
|
2
|
+
import { tagSpec, tagValue, getAddress } from "@welshman/util";
|
|
3
|
+
import { getEmojis } from "../behaviors/Emoji.js";
|
|
4
|
+
import { getZapSplits } from "../behaviors/ZapSplits.js";
|
|
5
|
+
/**
|
|
6
|
+
* The accessors every reader shares. Readers don't extend this directly — they
|
|
7
|
+
* pick a branch below according to whether parsing their event can hit IO, which
|
|
8
|
+
* is what tells a caller whether `parse()` has to be awaited.
|
|
9
|
+
*/
|
|
10
|
+
export class BaseEventReader {
|
|
11
|
+
kind;
|
|
12
|
+
context;
|
|
13
|
+
event;
|
|
14
|
+
constructor(kind, context, event) {
|
|
15
|
+
this.kind = kind;
|
|
16
|
+
this.context = context;
|
|
17
|
+
this.event = event;
|
|
18
|
+
if (event.kind !== kind) {
|
|
19
|
+
throw new Error(`Expected a kind ${kind} event, got kind ${event.kind}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
id() {
|
|
23
|
+
return this.event.id;
|
|
24
|
+
}
|
|
25
|
+
author() {
|
|
26
|
+
return this.event.pubkey;
|
|
27
|
+
}
|
|
28
|
+
content() {
|
|
29
|
+
return this.event.content;
|
|
30
|
+
}
|
|
31
|
+
tags() {
|
|
32
|
+
return this.event.tags;
|
|
33
|
+
}
|
|
34
|
+
createdAt() {
|
|
35
|
+
return this.event.created_at;
|
|
36
|
+
}
|
|
37
|
+
identifier() {
|
|
38
|
+
return tagValue(tagSpec("d"), this.event.tags);
|
|
39
|
+
}
|
|
40
|
+
address() {
|
|
41
|
+
return getAddress(this.event);
|
|
42
|
+
}
|
|
43
|
+
room() {
|
|
44
|
+
return tagValue(tagSpec("h"), this.event.tags);
|
|
45
|
+
}
|
|
46
|
+
protect() {
|
|
47
|
+
return this.event.tags.some(spec(["-"]));
|
|
48
|
+
}
|
|
49
|
+
expiration() {
|
|
50
|
+
return toInt(tagValue(tagSpec("expiration"), this.event.tags) ?? "");
|
|
51
|
+
}
|
|
52
|
+
emojis() {
|
|
53
|
+
return getEmojis(this.event);
|
|
54
|
+
}
|
|
55
|
+
zapSplits() {
|
|
56
|
+
return getZapSplits(this.event);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A reader whose event can be parsed without IO — the common case. `parse()`
|
|
61
|
+
* returns the reader itself, so callers never await it. Override `parse` to
|
|
62
|
+
* derive state from the event, returning `this`.
|
|
63
|
+
*/
|
|
64
|
+
export class EventReader extends BaseEventReader {
|
|
65
|
+
parse() {
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A reader that has to decrypt (or otherwise await something) before its
|
|
71
|
+
* accessors are complete. `parse()` returns a promise, so the type system makes
|
|
72
|
+
* callers await it rather than silently reading a half-parsed event.
|
|
73
|
+
*/
|
|
74
|
+
export class AsyncEventReader extends BaseEventReader {
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=EventReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventReader.js","sourceRoot":"","sources":["../../../../src/core/EventReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,eAAe,CAAA;AAEzC,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAA;AAG5D,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAA;AAE/C,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAA;AAGtD;;;;GAIG;AACH,MAAM,OAAgB,eAAe;IAExB;IACA;IACA;IAHX,YACW,IAAY,EACZ,OAAoB,EACpB,KAAmB;QAFnB,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAa;QACpB,UAAK,GAAL,KAAK,CAAc;QAE5B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,oBAAoB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;IAMD,EAAE;QACA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;IACtB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;IAC3B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAC9B,CAAC;IAED,UAAU;QACR,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IAED,OAAO;QACL,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED,IAAI;QACF,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,MAAM;QACJ,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,SAAS;QACP,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAgB,WAAY,SAAQ,eAAe;IACvD,KAAK;QACH,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAgB,gBAAiB,SAAQ,eAAe;CAE7D"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { MaybeAsync } from "@welshman/lib";
|
|
2
|
+
import type { EventTemplate, TrustedEvent, RelaySelection, RelayScenario } from "@welshman/util";
|
|
3
|
+
import type { BaseEventReader } from "./EventReader.js";
|
|
4
|
+
import type { KindContext } from "./Kind.js";
|
|
5
|
+
export declare class TagParser {
|
|
6
|
+
tags: string[][];
|
|
7
|
+
constructor(tags: string[][]);
|
|
8
|
+
consume(key: string): string[][];
|
|
9
|
+
}
|
|
10
|
+
export declare abstract class EventWriter<Reader extends BaseEventReader> {
|
|
11
|
+
readonly kind: number;
|
|
12
|
+
readonly context: KindContext;
|
|
13
|
+
readonly reader?: Reader | undefined;
|
|
14
|
+
content: string;
|
|
15
|
+
roomTag?: string[];
|
|
16
|
+
protectTag?: string[];
|
|
17
|
+
expirationTag?: string[];
|
|
18
|
+
identifierTag?: string[];
|
|
19
|
+
extraTags: string[][];
|
|
20
|
+
forcedRelays?: string[];
|
|
21
|
+
pendingResolves: Promise<unknown>[];
|
|
22
|
+
readonly requiresRelays: boolean;
|
|
23
|
+
constructor(kind: number, context: KindContext, reader?: Reader | undefined);
|
|
24
|
+
setContent(content: string): this;
|
|
25
|
+
setRoom(url: string, room: string): this;
|
|
26
|
+
clearRoom(): this;
|
|
27
|
+
forceRelays(...urls: string[]): this;
|
|
28
|
+
clearForcedRelays(): this;
|
|
29
|
+
setProtected(protect: boolean): this;
|
|
30
|
+
setExpiration(expiration: number): this;
|
|
31
|
+
clearExpiration(): this;
|
|
32
|
+
setIdentifier(identifier?: string): this;
|
|
33
|
+
clearIdentifier(): this;
|
|
34
|
+
addTags(...tags: string[][]): this;
|
|
35
|
+
keepTags(pred: (tag: string[]) => boolean): this;
|
|
36
|
+
dropTags(pred: (tag: string[]) => boolean): this;
|
|
37
|
+
addMention(pubkey: string): this;
|
|
38
|
+
addQuote(event: TrustedEvent): this;
|
|
39
|
+
addZapSplit(pubkey: string, split?: number): this;
|
|
40
|
+
removeZapSplit(pubkey: string): this;
|
|
41
|
+
addEmoji(shortcode: string, url: string, address?: string): this;
|
|
42
|
+
removeEmoji(shortcode: string): this;
|
|
43
|
+
/**
|
|
44
|
+
* Validates a domain object, throwing an error if invalid.
|
|
45
|
+
*/
|
|
46
|
+
validate(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Tracks a promise that must resolve before the event is rendered.
|
|
49
|
+
*/
|
|
50
|
+
private trackPending;
|
|
51
|
+
/**
|
|
52
|
+
* Resolves one or more relay selections to a single hint url, tracking the
|
|
53
|
+
* in-flight promise so `renderTags` can wait for it. Callers backfill the
|
|
54
|
+
* resolved url into a tag's hint slot.
|
|
55
|
+
*/
|
|
56
|
+
protected hint(...routes: RelaySelection[]): Promise<string>;
|
|
57
|
+
/**
|
|
58
|
+
* Returns a list of tags that may be attached to any kind.
|
|
59
|
+
*/
|
|
60
|
+
protected renderBehaviorTags(): MaybeAsync<string[][]>;
|
|
61
|
+
/**
|
|
62
|
+
* Returns a list of tags related to the kind.
|
|
63
|
+
*/
|
|
64
|
+
protected renderDomainTags(): MaybeAsync<string[][]>;
|
|
65
|
+
/**
|
|
66
|
+
* Returns the complete tag list for publishing.
|
|
67
|
+
*/
|
|
68
|
+
renderTags(): Promise<string[][]>;
|
|
69
|
+
/**
|
|
70
|
+
* Returns the content string as defined by the kind.
|
|
71
|
+
*/
|
|
72
|
+
renderContent(): MaybeAsync<string>;
|
|
73
|
+
/**
|
|
74
|
+
* Validates and renders an event template.
|
|
75
|
+
*/
|
|
76
|
+
renderTemplate(): Promise<EventTemplate>;
|
|
77
|
+
/**
|
|
78
|
+
* Returns the list of routes this event should be published to. Defaults to
|
|
79
|
+
* the outbox model. Override to implement custom behavior.
|
|
80
|
+
*/
|
|
81
|
+
protected renderRoutes(): Promise<RelaySelection[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Returns a router scenario for this event. Publishes to forced relays (e.g. a
|
|
84
|
+
* NIP-29 room) when set, otherwise to the rendered routes.
|
|
85
|
+
*/
|
|
86
|
+
scenario(): Promise<RelayScenario>;
|
|
87
|
+
/**
|
|
88
|
+
* Shortcut for getting relays from the router scenario.
|
|
89
|
+
*/
|
|
90
|
+
relays(): Promise<string[]>;
|
|
91
|
+
/**
|
|
92
|
+
* Returns a rendered event template along with its relays.
|
|
93
|
+
*/
|
|
94
|
+
render(): Promise<{
|
|
95
|
+
event: EventTemplate;
|
|
96
|
+
relays: string[];
|
|
97
|
+
}>;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=EventWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventWriter.d.ts","sourceRoot":"","sources":["../../../../src/core/EventWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { remove, complement, first, partition, randomId, removeUndefined, spec } from "@welshman/lib";
|
|
2
|
+
import { isParameterizedReplaceableKind, normalizeRelayUrl, hexTags, tagValues, outbox, userOutbox, inboxes, relays, } from "@welshman/util";
|
|
3
|
+
// A cursor over a tag list that splits out tags by key as they're consumed,
|
|
4
|
+
// leaving the rest in `tags`. Writers use it to peel behavior/kind-specific tags
|
|
5
|
+
// off an event being edited.
|
|
6
|
+
export class TagParser {
|
|
7
|
+
tags;
|
|
8
|
+
constructor(tags) {
|
|
9
|
+
this.tags = tags;
|
|
10
|
+
}
|
|
11
|
+
consume(key) {
|
|
12
|
+
const [consumed, remaining] = partition(spec([key]), this.tags);
|
|
13
|
+
this.tags = remaining;
|
|
14
|
+
return consumed;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class EventWriter {
|
|
18
|
+
kind;
|
|
19
|
+
context;
|
|
20
|
+
reader;
|
|
21
|
+
content = "";
|
|
22
|
+
roomTag;
|
|
23
|
+
protectTag;
|
|
24
|
+
expirationTag;
|
|
25
|
+
identifierTag;
|
|
26
|
+
extraTags = [];
|
|
27
|
+
forcedRelays;
|
|
28
|
+
pendingResolves = [];
|
|
29
|
+
// Kinds that must publish to explicit relays (e.g. NIP-29 room events) set this.
|
|
30
|
+
// Annotated `boolean` (not the inferred literal `false`) so subclasses can override.
|
|
31
|
+
requiresRelays = false;
|
|
32
|
+
constructor(kind, context, reader) {
|
|
33
|
+
this.kind = kind;
|
|
34
|
+
this.context = context;
|
|
35
|
+
this.reader = reader;
|
|
36
|
+
if (reader) {
|
|
37
|
+
const parser = new TagParser(reader.event.tags);
|
|
38
|
+
this.content = reader.event.content;
|
|
39
|
+
this.roomTag = first(parser.consume("h"));
|
|
40
|
+
this.protectTag = first(parser.consume("-"));
|
|
41
|
+
this.expirationTag = first(parser.consume("expiration"));
|
|
42
|
+
this.identifierTag = first(parser.consume("d"));
|
|
43
|
+
this.extraTags = parser.tags;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
setContent(content) {
|
|
47
|
+
this.content = content;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
setRoom(url, room) {
|
|
51
|
+
this.forcedRelays = [normalizeRelayUrl(url)];
|
|
52
|
+
this.roomTag = ["h", room];
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
clearRoom() {
|
|
56
|
+
this.forcedRelays = undefined;
|
|
57
|
+
this.roomTag = undefined;
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
forceRelays(...urls) {
|
|
61
|
+
this.forcedRelays = urls.map(normalizeRelayUrl);
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
clearForcedRelays() {
|
|
65
|
+
this.forcedRelays = undefined;
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
setProtected(protect) {
|
|
69
|
+
this.protectTag = protect ? ["-"] : undefined;
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
setExpiration(expiration) {
|
|
73
|
+
this.expirationTag = ["expiration", String(expiration)];
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
clearExpiration() {
|
|
77
|
+
this.expirationTag = undefined;
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
setIdentifier(identifier = randomId()) {
|
|
81
|
+
this.identifierTag = ["d", identifier];
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
clearIdentifier() {
|
|
85
|
+
this.identifierTag = undefined;
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
addTags(...tags) {
|
|
89
|
+
this.extraTags.push(...tags);
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
keepTags(pred) {
|
|
93
|
+
this.extraTags = this.extraTags.filter(pred);
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
dropTags(pred) {
|
|
97
|
+
this.extraTags = this.extraTags.filter(complement(pred));
|
|
98
|
+
return this;
|
|
99
|
+
}
|
|
100
|
+
addMention(pubkey) {
|
|
101
|
+
const tag = ["p", pubkey, ""];
|
|
102
|
+
this.addTags(tag);
|
|
103
|
+
this.hint(outbox(pubkey)).then(url => {
|
|
104
|
+
tag[2] = url;
|
|
105
|
+
});
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
addQuote(event) {
|
|
109
|
+
const tag = ["q", event.id, "", event.pubkey];
|
|
110
|
+
this.addTags(tag);
|
|
111
|
+
this.hint(outbox(event.pubkey)).then(url => {
|
|
112
|
+
tag[2] = url;
|
|
113
|
+
});
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
addZapSplit(pubkey, split = 1) {
|
|
117
|
+
const tag = ["zap", pubkey, "", String(split)];
|
|
118
|
+
this.addTags(tag);
|
|
119
|
+
this.hint(outbox(pubkey)).then(url => {
|
|
120
|
+
tag[2] = url;
|
|
121
|
+
});
|
|
122
|
+
return this;
|
|
123
|
+
}
|
|
124
|
+
removeZapSplit(pubkey) {
|
|
125
|
+
return this.dropTags(spec(["zap", pubkey]));
|
|
126
|
+
}
|
|
127
|
+
addEmoji(shortcode, url, address) {
|
|
128
|
+
return this.dropTags(spec(["emoji", shortcode])).addTags(removeUndefined(["emoji", shortcode, url, address]));
|
|
129
|
+
}
|
|
130
|
+
removeEmoji(shortcode) {
|
|
131
|
+
return this.dropTags(spec(["emoji", shortcode]));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Validates a domain object, throwing an error if invalid.
|
|
135
|
+
*/
|
|
136
|
+
validate() {
|
|
137
|
+
if (isParameterizedReplaceableKind(this.kind) && !this.identifierTag) {
|
|
138
|
+
throw new Error(`A d tag is required for kind ${this.kind}`);
|
|
139
|
+
}
|
|
140
|
+
if (this.roomTag && !this.forcedRelays?.length) {
|
|
141
|
+
throw new Error("A room event requires a relay url (set the room via setRoom)");
|
|
142
|
+
}
|
|
143
|
+
if (this.requiresRelays && !this.forcedRelays?.length) {
|
|
144
|
+
throw new Error(`A kind ${this.kind} event must publish to explicit relays (via setRoom or forceRelays)`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Tracks a promise that must resolve before the event is rendered.
|
|
149
|
+
*/
|
|
150
|
+
trackPending(promise) {
|
|
151
|
+
this.pendingResolves.push(promise);
|
|
152
|
+
promise.then(() => {
|
|
153
|
+
this.pendingResolves = remove(promise, this.pendingResolves);
|
|
154
|
+
});
|
|
155
|
+
return promise;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Resolves one or more relay selections to a single hint url, tracking the
|
|
159
|
+
* in-flight promise so `renderTags` can wait for it. Callers backfill the
|
|
160
|
+
* resolved url into a tag's hint slot.
|
|
161
|
+
*/
|
|
162
|
+
hint(...routes) {
|
|
163
|
+
return this.trackPending(this.context.resolver.relay(routes).then(url => url ?? ""));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Returns a list of tags that may be attached to any kind.
|
|
167
|
+
*/
|
|
168
|
+
renderBehaviorTags() {
|
|
169
|
+
return removeUndefined([this.roomTag, this.protectTag, this.expirationTag, this.identifierTag]);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Returns a list of tags related to the kind.
|
|
173
|
+
*/
|
|
174
|
+
renderDomainTags() {
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Returns the complete tag list for publishing.
|
|
179
|
+
*/
|
|
180
|
+
async renderTags() {
|
|
181
|
+
const behaviorTags = await this.renderBehaviorTags();
|
|
182
|
+
const domainTags = await this.renderDomainTags();
|
|
183
|
+
// Wait for any relay hints to resolve and backfill their tags.
|
|
184
|
+
await Promise.all(this.pendingResolves);
|
|
185
|
+
return [...behaviorTags, ...domainTags, ...this.extraTags];
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Returns the content string as defined by the kind.
|
|
189
|
+
*/
|
|
190
|
+
renderContent() {
|
|
191
|
+
return this.content;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Validates and renders an event template.
|
|
195
|
+
*/
|
|
196
|
+
async renderTemplate() {
|
|
197
|
+
this.validate();
|
|
198
|
+
return {
|
|
199
|
+
kind: this.kind,
|
|
200
|
+
tags: await this.renderTags(),
|
|
201
|
+
content: await this.renderContent(),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Returns the list of routes this event should be published to. Defaults to
|
|
206
|
+
* the outbox model. Override to implement custom behavior.
|
|
207
|
+
*/
|
|
208
|
+
async renderRoutes() {
|
|
209
|
+
return [userOutbox(), ...inboxes(tagValues(hexTags("p"), await this.renderTags()), 0.5)];
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Returns a router scenario for this event. Publishes to forced relays (e.g. a
|
|
213
|
+
* NIP-29 room) when set, otherwise to the rendered routes.
|
|
214
|
+
*/
|
|
215
|
+
async scenario() {
|
|
216
|
+
const routes = this.forcedRelays?.length ? relays(this.forcedRelays) : await this.renderRoutes();
|
|
217
|
+
return this.context.resolver.scenario(routes);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Shortcut for getting relays from the router scenario.
|
|
221
|
+
*/
|
|
222
|
+
async relays() {
|
|
223
|
+
return (await this.scenario()).getUrls();
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Returns a rendered event template along with its relays.
|
|
227
|
+
*/
|
|
228
|
+
async render() {
|
|
229
|
+
const [event, relays] = await Promise.all([this.renderTemplate(), this.relays()]);
|
|
230
|
+
return { event, relays };
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=EventWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventWriter.js","sourceRoot":"","sources":["../../../../src/core/EventWriter.ts"],"names":[],"mappings":"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"}
|