@welshman/domain 0.9.0-pre1 → 0.9.0-pre2
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 +24 -0
- package/dist/domain/src/core/EventReader.d.ts.map +1 -0
- package/dist/domain/src/core/EventReader.js +55 -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 +43 -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} +2 -1
- 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 +14 -5
- package/dist/domain/src/index.d.ts.map +1 -1
- package/dist/domain/src/index.js +14 -5
- 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 +84 -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/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/GroupList.d.ts +6 -7
- package/dist/domain/src/kinds/GroupList.d.ts.map +1 -1
- package/dist/domain/src/kinds/GroupList.js +12 -11
- package/dist/domain/src/kinds/GroupList.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 +20 -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 +15 -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 +11 -9
- 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 +11 -9
- 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 +21 -20
- 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 +13 -17
- 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 +11 -9
- package/dist/domain/src/kinds/RoomLeave.js.map +1 -1
- package/dist/domain/src/kinds/RoomList.d.ts +13 -8
- package/dist/domain/src/kinds/RoomList.d.ts.map +1 -1
- package/dist/domain/src/kinds/RoomList.js +60 -15
- 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/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/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 +10 -9
- package/dist/domain/src/kinds/ZapGoal.d.ts.map +1 -1
- package/dist/domain/src/kinds/ZapGoal.js +20 -16
- 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 +17 -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/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/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 +2 -1
- package/dist/net/src/request.d.ts.map +1 -1
- package/dist/net/src/request.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/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 +3 -1
- package/dist/util/src/Kinds.d.ts.map +1 -1
- package/dist/util/src/Kinds.js +5 -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/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
|
@@ -1,33 +1,32 @@
|
|
|
1
|
-
import { spec } from "@welshman/lib";
|
|
2
|
-
import { ZAP_REQUEST,
|
|
3
|
-
import { EventReader } from "../EventReader.js";
|
|
4
|
-
import {
|
|
1
|
+
import { spec, tryCatch, fetchJson } from "@welshman/lib";
|
|
2
|
+
import { ZAP_REQUEST, matchTag, tagSpec, tagValue, stamp } from "@welshman/util";
|
|
3
|
+
import { EventReader } from "../core/EventReader.js";
|
|
4
|
+
import { EventWriter } from "../core/EventWriter.js";
|
|
5
|
+
import { KindFactory } from "../core/Kind.js";
|
|
5
6
|
// NIP-57 kind-9734 zap request.
|
|
6
|
-
export class
|
|
7
|
-
kind = ZAP_REQUEST;
|
|
7
|
+
export class ZapRequestReader extends EventReader {
|
|
8
8
|
amount() {
|
|
9
|
-
const amount =
|
|
9
|
+
const amount = tagValue(tagSpec("amount"), this.event.tags);
|
|
10
10
|
return amount ? parseInt(amount) : undefined;
|
|
11
11
|
}
|
|
12
12
|
lnurl() {
|
|
13
|
-
return
|
|
13
|
+
return tagValue(tagSpec("lnurl"), this.event.tags);
|
|
14
14
|
}
|
|
15
15
|
recipient() {
|
|
16
|
-
return
|
|
16
|
+
return tagValue(tagSpec("p"), this.event.tags);
|
|
17
17
|
}
|
|
18
18
|
eventId() {
|
|
19
|
-
return
|
|
19
|
+
return tagValue(tagSpec("e"), this.event.tags);
|
|
20
20
|
}
|
|
21
21
|
urls() {
|
|
22
|
-
const tag =
|
|
22
|
+
const tag = matchTag(tagSpec("relays"), this.event.tags);
|
|
23
23
|
return tag ? tag.slice(1) : [];
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
return
|
|
25
|
+
anonymous() {
|
|
26
|
+
return this.event.tags.some(spec(["anon"]));
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
export class
|
|
30
|
-
kind = ZAP_REQUEST;
|
|
29
|
+
export class ZapRequestWriter extends EventWriter {
|
|
31
30
|
setAmount(amount) {
|
|
32
31
|
return this.dropTags(spec(["amount"])).addTags(["amount", String(amount)]);
|
|
33
32
|
}
|
|
@@ -43,5 +42,31 @@ export class ZapRequestBuilder extends EventBuilder {
|
|
|
43
42
|
setUrls(urls) {
|
|
44
43
|
return this.dropTags(spec(["relays"])).addTags(["relays", ...urls]);
|
|
45
44
|
}
|
|
45
|
+
setAnonymous(anonymous) {
|
|
46
|
+
return anonymous
|
|
47
|
+
? this.dropTags(spec(["anon"])).addTags(["anon"])
|
|
48
|
+
: this.dropTags(spec(["anon"]));
|
|
49
|
+
}
|
|
50
|
+
async requestInvoice(zapper) {
|
|
51
|
+
const { signer } = this.context;
|
|
52
|
+
if (!signer) {
|
|
53
|
+
throw new Error("A signer is required to request a zap invoice");
|
|
54
|
+
}
|
|
55
|
+
const event = await signer.sign(stamp(await this.renderTemplate()));
|
|
56
|
+
const zapString = encodeURI(JSON.stringify(event));
|
|
57
|
+
const msats = parseInt(tagValue(tagSpec("amount"), event.tags));
|
|
58
|
+
const qs = `?amount=${msats}&nostr=${zapString}&lnurl=${zapper.lnurl}`;
|
|
59
|
+
const res = await tryCatch(() => fetchJson(zapper.callback + qs));
|
|
60
|
+
return {
|
|
61
|
+
event,
|
|
62
|
+
invoice: res?.pr,
|
|
63
|
+
error: res?.pr ? undefined : res.reason || "Failed to request invoice",
|
|
64
|
+
};
|
|
65
|
+
}
|
|
46
66
|
}
|
|
67
|
+
export const ZapRequest = new KindFactory({
|
|
68
|
+
kind: ZAP_REQUEST,
|
|
69
|
+
reader: ZapRequestReader,
|
|
70
|
+
writer: ZapRequestWriter,
|
|
71
|
+
});
|
|
47
72
|
//# sourceMappingURL=ZapRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZapRequest.js","sourceRoot":"","sources":["../../../../src/kinds/ZapRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"ZapRequest.js","sourceRoot":"","sources":["../../../../src/kinds/ZapRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM,eAAe,CAAA;AACvD,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAC,MAAM,gBAAgB,CAAA;AAE9E,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAA;AAG3C,gCAAgC;AAChC,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAC/C,MAAM;QACJ,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAE3D,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9C,CAAC;IAED,KAAK;QACH,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACpD,CAAC;IAED,SAAS;QACP,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IAED,OAAO;QACL,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IAED,IAAI;QACF,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAExD,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAChC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7C,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAA6B;IACjE,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,CAAC,IAAc;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,YAAY,CAAC,SAAkB;QAC7B,OAAO,SAAS;YACd,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,MAAc;QAEd,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,OAAO,CAAA;QAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAClE,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;QACnE,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,IAAI,CAAE,CAAC,CAAA;QAChE,MAAM,EAAE,GAAG,WAAW,KAAK,UAAU,SAAS,UAAU,MAAM,CAAC,KAAK,EAAE,CAAA;QACtE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO;YACL,KAAK;YACL,OAAO,EAAE,GAAG,EAAE,EAAE;YAChB,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,2BAA2B;SACvE,CAAA;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC;IACxC,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type RelayInfo = {
|
|
2
|
+
icon?: string;
|
|
3
|
+
banner?: string;
|
|
4
|
+
name?: string;
|
|
5
|
+
self?: string;
|
|
6
|
+
pubkey?: string;
|
|
7
|
+
contact?: string;
|
|
8
|
+
software?: string;
|
|
9
|
+
version?: string;
|
|
10
|
+
negentropy?: number;
|
|
11
|
+
description?: string;
|
|
12
|
+
supported_nips?: string[];
|
|
13
|
+
privacy_policy?: string;
|
|
14
|
+
terms_of_service?: string;
|
|
15
|
+
limitation?: {
|
|
16
|
+
min_pow_difficulty?: number;
|
|
17
|
+
payment_required?: boolean;
|
|
18
|
+
auth_required?: boolean;
|
|
19
|
+
};
|
|
20
|
+
redirect_to?: string;
|
|
21
|
+
};
|
|
22
|
+
export declare class Relay {
|
|
23
|
+
url: string;
|
|
24
|
+
icon?: string;
|
|
25
|
+
banner?: string;
|
|
26
|
+
name?: string;
|
|
27
|
+
self?: string;
|
|
28
|
+
pubkey?: string;
|
|
29
|
+
contact?: string;
|
|
30
|
+
software?: string;
|
|
31
|
+
version?: string;
|
|
32
|
+
negentropy?: number;
|
|
33
|
+
description?: string;
|
|
34
|
+
supported_nips?: string[];
|
|
35
|
+
privacy_policy?: string;
|
|
36
|
+
terms_of_service?: string;
|
|
37
|
+
limitation?: {
|
|
38
|
+
min_pow_difficulty?: number;
|
|
39
|
+
payment_required?: boolean;
|
|
40
|
+
auth_required?: boolean;
|
|
41
|
+
};
|
|
42
|
+
redirect_to?: string;
|
|
43
|
+
constructor(url: string, json?: RelayInfo);
|
|
44
|
+
displayUrl(): string;
|
|
45
|
+
display(fallback?: string): string;
|
|
46
|
+
hasNegentropy(): boolean;
|
|
47
|
+
hasNip(nip: number | string): boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=Relay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Relay.d.ts","sourceRoot":"","sources":["../../../../src/other/Relay.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE;QACX,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;KACxB,CAAA;IAGD,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,qBAAa,KAAK;IAChB,GAAG,EAAG,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE;QACX,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;KACxB,CAAA;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;gBAER,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,SAAc;IAU7C,UAAU;IAKV,OAAO,CAAC,QAAQ,SAAoB;IAKpC,aAAa;IASb,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAG5B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { displayRelayUrl } from "@welshman/util";
|
|
2
|
+
export class Relay {
|
|
3
|
+
url;
|
|
4
|
+
icon;
|
|
5
|
+
banner;
|
|
6
|
+
name;
|
|
7
|
+
self;
|
|
8
|
+
pubkey;
|
|
9
|
+
contact;
|
|
10
|
+
software;
|
|
11
|
+
version;
|
|
12
|
+
negentropy;
|
|
13
|
+
description;
|
|
14
|
+
supported_nips;
|
|
15
|
+
privacy_policy;
|
|
16
|
+
terms_of_service;
|
|
17
|
+
limitation;
|
|
18
|
+
redirect_to;
|
|
19
|
+
constructor(url, json = {}) {
|
|
20
|
+
// Copy every field, including any non-standard NIP-11 ones, but force the url
|
|
21
|
+
// and coerce supported_nips (untrusted json) to a string array.
|
|
22
|
+
Object.assign(this, json, {
|
|
23
|
+
url,
|
|
24
|
+
supported_nips: Array.isArray(json.supported_nips) ? json.supported_nips.map(String) : [],
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
// This relay's url reduced to its host/path for display, e.g. "relay.example".
|
|
28
|
+
displayUrl() {
|
|
29
|
+
return displayRelayUrl(this.url);
|
|
30
|
+
}
|
|
31
|
+
// This relay's display name, falling back to its display url (or `fallback`).
|
|
32
|
+
display(fallback = this.displayUrl()) {
|
|
33
|
+
return this.name || fallback;
|
|
34
|
+
}
|
|
35
|
+
// Whether this relay supports negentropy sync (NIP-77).
|
|
36
|
+
hasNegentropy() {
|
|
37
|
+
if (this.negentropy)
|
|
38
|
+
return true;
|
|
39
|
+
if (this.supported_nips?.includes("77"))
|
|
40
|
+
return true;
|
|
41
|
+
if (this.software?.includes?.("strfry") && !this.version?.match(/^0\./))
|
|
42
|
+
return true;
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
// Whether this relay advertises support for the given NIP.
|
|
46
|
+
hasNip(nip) {
|
|
47
|
+
return this.supported_nips?.includes(String(nip)) ?? false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=Relay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Relay.js","sourceRoot":"","sources":["../../../../src/other/Relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAA;AA8B9C,MAAM,OAAO,KAAK;IAChB,GAAG,CAAS;IACZ,IAAI,CAAS;IACb,MAAM,CAAS;IACf,IAAI,CAAS;IACb,IAAI,CAAS;IACb,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,QAAQ,CAAS;IACjB,OAAO,CAAS;IAChB,UAAU,CAAS;IACnB,WAAW,CAAS;IACpB,cAAc,CAAW;IACzB,cAAc,CAAS;IACvB,gBAAgB,CAAS;IACzB,UAAU,CAIT;IACD,WAAW,CAAS;IAEpB,YAAY,GAAW,EAAE,OAAkB,EAAE;QAC3C,8EAA8E;QAC9E,gEAAgE;QAChE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;YACxB,GAAG;YACH,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;SAC1F,CAAC,CAAA;IACJ,CAAC;IAED,+EAA+E;IAC/E,UAAU;QACR,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;IAED,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;QAClC,OAAO,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAA;IAC9B,CAAC;IAED,wDAAwD;IACxD,aAAa;QACX,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAA;QAChC,IAAI,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QACpD,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;QAEpF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,2DAA2D;IAC3D,MAAM,CAAC,GAAoB;QACzB,OAAO,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { TrustedEvent, Filter } from "@welshman/util";
|
|
2
|
+
import type { ZapReceiptReader } from "../kinds/ZapReceipt.js";
|
|
3
|
+
export type Zap = {
|
|
4
|
+
request: TrustedEvent;
|
|
5
|
+
response: TrustedEvent;
|
|
6
|
+
invoiceAmount: number;
|
|
7
|
+
};
|
|
8
|
+
export type ZapperValues = {
|
|
9
|
+
lnurl: string;
|
|
10
|
+
pubkey: string;
|
|
11
|
+
nostrPubkey: string;
|
|
12
|
+
callback?: string;
|
|
13
|
+
minSendable?: number;
|
|
14
|
+
maxSendable?: number;
|
|
15
|
+
allowsNostr?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare class Zapper {
|
|
18
|
+
lnurl: string;
|
|
19
|
+
pubkey: string;
|
|
20
|
+
nostrPubkey: string;
|
|
21
|
+
callback?: string;
|
|
22
|
+
minSendable?: number;
|
|
23
|
+
maxSendable?: number;
|
|
24
|
+
allowsNostr?: boolean;
|
|
25
|
+
constructor(values: ZapperValues);
|
|
26
|
+
/**
|
|
27
|
+
* Validate a parsed kind-9735 zap receipt against this zapper per NIP-57 and,
|
|
28
|
+
* if it checks out, return the reconstructed `Zap`. Returns undefined when the
|
|
29
|
+
* receipt is malformed or fails validation:
|
|
30
|
+
*
|
|
31
|
+
* - Missing/malformed zap request or bolt11 invoice
|
|
32
|
+
* - Invoice amount doesn't match the requested amount
|
|
33
|
+
* - Self-zap (request author is the zapper's own pubkey)
|
|
34
|
+
* - lnurl mismatch (if the request carried an lnurl tag)
|
|
35
|
+
* - Receipt not signed by the zapper's nostr pubkey
|
|
36
|
+
*/
|
|
37
|
+
validate(receipt: ZapReceiptReader): Zap | undefined;
|
|
38
|
+
getResponseFilter(pubkey: string, eventId?: string): Filter;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=Zapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Zapper.d.ts","sourceRoot":"","sources":["../../../../src/other/Zapper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,YAAY,EAAE,MAAM,EAAC,MAAM,gBAAgB,CAAA;AACxD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAA;AAK5D,MAAM,MAAM,GAAG,GAAG;IAChB,OAAO,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,YAAY,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAOD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,qBAAa,MAAM;IACjB,KAAK,EAAG,MAAM,CAAA;IACd,MAAM,EAAG,MAAM,CAAA;IACf,WAAW,EAAG,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;gBAET,MAAM,EAAE,YAAY;IAMhC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,GAAG,GAAG,SAAS;IAmCpD,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;CAc5D"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { now, fromPairs } from "@welshman/lib";
|
|
2
|
+
import { ZAP_RECEIPT } from "@welshman/util";
|
|
3
|
+
export class Zapper {
|
|
4
|
+
lnurl;
|
|
5
|
+
pubkey;
|
|
6
|
+
nostrPubkey;
|
|
7
|
+
callback;
|
|
8
|
+
minSendable;
|
|
9
|
+
maxSendable;
|
|
10
|
+
allowsNostr;
|
|
11
|
+
constructor(values) {
|
|
12
|
+
// Copy every value, including any non-standard lnurl fields the endpoint
|
|
13
|
+
// returned, so nothing is silently dropped for downstream consumers.
|
|
14
|
+
Object.assign(this, values);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Validate a parsed kind-9735 zap receipt against this zapper per NIP-57 and,
|
|
18
|
+
* if it checks out, return the reconstructed `Zap`. Returns undefined when the
|
|
19
|
+
* receipt is malformed or fails validation:
|
|
20
|
+
*
|
|
21
|
+
* - Missing/malformed zap request or bolt11 invoice
|
|
22
|
+
* - Invoice amount doesn't match the requested amount
|
|
23
|
+
* - Self-zap (request author is the zapper's own pubkey)
|
|
24
|
+
* - lnurl mismatch (if the request carried an lnurl tag)
|
|
25
|
+
* - Receipt not signed by the zapper's nostr pubkey
|
|
26
|
+
*/
|
|
27
|
+
validate(receipt) {
|
|
28
|
+
const request = receipt.request();
|
|
29
|
+
const invoiceAmount = receipt.invoiceAmount();
|
|
30
|
+
if (!request || invoiceAmount === undefined) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
// Don't count zaps that the user requested for himself
|
|
34
|
+
if (request.pubkey === this.pubkey) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const { amount, lnurl } = fromPairs(request.tags);
|
|
38
|
+
// Verify that the zapper actually sent the requested amount (if it was supplied)
|
|
39
|
+
if (amount && parseInt(amount) !== invoiceAmount) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
// If the sending client provided an lnurl tag, verify that too
|
|
43
|
+
if (lnurl && lnurl !== this.lnurl) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
// Verify that the receipt actually came from the recipient's zapper
|
|
47
|
+
if (receipt.event.pubkey !== this.nostrPubkey) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return { request, response: receipt.event, invoiceAmount };
|
|
51
|
+
}
|
|
52
|
+
// A filter matching zap receipts this zapper would publish for the given
|
|
53
|
+
// recipient (and optionally a specific event).
|
|
54
|
+
getResponseFilter(pubkey, eventId) {
|
|
55
|
+
const filter = {
|
|
56
|
+
kinds: [ZAP_RECEIPT],
|
|
57
|
+
authors: [this.nostrPubkey],
|
|
58
|
+
since: now() - 30,
|
|
59
|
+
"#p": [pubkey],
|
|
60
|
+
};
|
|
61
|
+
if (eventId) {
|
|
62
|
+
filter["#e"] = [eventId];
|
|
63
|
+
}
|
|
64
|
+
return filter;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=Zapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Zapper.js","sourceRoot":"","sources":["../../../../src/other/Zapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,SAAS,EAAC,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAA;AA4B1C,MAAM,OAAO,MAAM;IACjB,KAAK,CAAS;IACd,MAAM,CAAS;IACf,WAAW,CAAS;IACpB,QAAQ,CAAS;IACjB,WAAW,CAAS;IACpB,WAAW,CAAS;IACpB,WAAW,CAAU;IAErB,YAAY,MAAoB;QAC9B,yEAAyE;QACzE,qEAAqE;QACrE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,OAAyB;QAChC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QACjC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAA;QAE7C,IAAI,CAAC,OAAO,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,uDAAuD;QACvD,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,EAAC,MAAM,EAAE,KAAK,EAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAE/C,iFAAiF;QACjF,IAAI,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,aAAa,EAAE,CAAC;YACjD,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,+DAA+D;QAC/D,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,oEAAoE;QACpE,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,EAAC,CAAA;IAC1D,CAAC;IAED,yEAAyE;IACzE,+CAA+C;IAC/C,iBAAiB,CAAC,MAAc,EAAE,OAAgB;QAChD,MAAM,MAAM,GAAW;YACrB,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;YAC3B,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;YACjB,IAAI,EAAE,CAAC,MAAM,CAAC;SACf,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC1B,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Filter } from "@welshman/util";
|
|
2
2
|
import { ISigner } from "@welshman/signer";
|
|
3
3
|
import { AdapterContext } from "@welshman/net";
|
|
4
|
-
import type {
|
|
4
|
+
import type { FeedRouter } from "./router.js";
|
|
5
5
|
import { CreatedAtItem, RequestItem, ListItem, LabelItem, WOTItem, DVMItem, Scope, Feed } from "./core.js";
|
|
6
6
|
export type FeedCompilerOptions = {
|
|
7
|
-
router:
|
|
7
|
+
router: FeedRouter;
|
|
8
8
|
signer?: ISigner;
|
|
9
9
|
signal?: AbortSignal;
|
|
10
10
|
context?: AdapterContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../../feeds/src/compiler.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EAMP,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../../feeds/src/compiler.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EAMP,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,aAAa,CAAA;AAC3C,OAAO,EACL,aAAa,EACb,WAAW,EACX,QAAQ,EACR,SAAS,EACT,OAAO,EACP,OAAO,EACP,KAAK,EACL,IAAI,EAEL,MAAM,WAAW,CAAA;AAIlB,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,EAAE,CAAA;IAC9C,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;CACpE,CAAA;AAED,qBAAa,YAAY;IACX,QAAQ,CAAC,OAAO,EAAE,mBAAmB;gBAA5B,OAAO,EAAE,mBAAmB;IAEjD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAyBzB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA0CjD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE;;;IAIrC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;;;IAItC,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE;iBAmBT,MAAM,EAAE;;IAGvC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE;;;;;IAI9B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE;;;;;IAInC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE;;;;;IAUzB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAwBtD,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA0C3D,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA+CpD,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAoC5D,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAqCtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../feeds/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../feeds/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
package/dist/feeds/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../feeds/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../feeds/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Filter, TrustedEvent } from "@welshman/util";
|
|
2
2
|
import { ISigner } from "@welshman/signer";
|
|
3
|
-
import {
|
|
3
|
+
import { FeedRouter } from "./router.js";
|
|
4
4
|
import { Tracker, AdapterContext } from "@welshman/net";
|
|
5
5
|
export type RequestPageOptions = {
|
|
6
6
|
filters: Filter[];
|
|
7
|
-
router:
|
|
7
|
+
router: FeedRouter;
|
|
8
8
|
onEvent: (event: TrustedEvent) => void;
|
|
9
9
|
relays?: string[];
|
|
10
10
|
tracker?: Tracker;
|
|
@@ -15,12 +15,12 @@ export type RequestPageOptions = {
|
|
|
15
15
|
export declare const requestPage: ({ filters, router, onEvent, relays, tracker, signal, context, autoClose, }: RequestPageOptions) => Promise<TrustedEvent[] | undefined>;
|
|
16
16
|
export type RequestDVMOptions = {
|
|
17
17
|
kind: number;
|
|
18
|
-
router:
|
|
18
|
+
router: FeedRouter;
|
|
19
19
|
tags?: string[][];
|
|
20
20
|
relays?: string[];
|
|
21
21
|
signer?: ISigner;
|
|
22
22
|
context?: AdapterContext;
|
|
23
23
|
onResult: (event: TrustedEvent) => void;
|
|
24
24
|
};
|
|
25
|
-
export declare const requestDVM: ({ kind, router, onResult, tags, relays, signer, context, }: RequestDVMOptions) => Promise<[import("@welshman/net").PublishResultsByRelay, TrustedEvent[]]>;
|
|
25
|
+
export declare const requestDVM: ({ kind, router, onResult, tags, relays: relayUrls, signer, context, }: RequestDVMOptions) => Promise<[import("@welshman/net").PublishResultsByRelay, TrustedEvent[]]>;
|
|
26
26
|
//# sourceMappingURL=request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../../feeds/src/request.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../../feeds/src/request.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EAIN,YAAY,EAMb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAc,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAC,UAAU,EAAsB,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAkB,OAAO,EAAE,cAAc,EAAmB,MAAM,eAAe,CAAA;AAExF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACtC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,4EAS/B,kBAAkB,wCA0DpB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;CACxC,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,uEAQ9B,iBAAiB,6EAuCnB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { partition, now, nthEq, race } from "@welshman/lib";
|
|
2
|
-
import { makeEvent,
|
|
2
|
+
import { makeEvent, hexTags, relayTags, tagValues, RELAYS, indexers, relays, searchRelays, addMinimalFallbacks, } from "@welshman/util";
|
|
3
3
|
import { Nip01Signer } from "@welshman/signer";
|
|
4
|
-
import { getFilterSelections
|
|
4
|
+
import { getFilterSelections } from "./router.js";
|
|
5
5
|
import { LOCAL_RELAY_URL, Tracker, request, publish } from "@welshman/net";
|
|
6
6
|
export const requestPage = async ({ filters, router, onEvent, relays = [], tracker = new Tracker(), signal, context, autoClose, }) => {
|
|
7
7
|
if (relays.length > 0) {
|
|
@@ -10,6 +10,7 @@ export const requestPage = async ({ filters, router, onEvent, relays = [], track
|
|
|
10
10
|
const promises = [];
|
|
11
11
|
const [withSearch, withoutSearch] = partition(f => Boolean(f.search), filters);
|
|
12
12
|
if (withSearch.length > 0) {
|
|
13
|
+
const scenario = await router.resolve([searchRelays()]);
|
|
13
14
|
promises.push(request({
|
|
14
15
|
tracker,
|
|
15
16
|
signal,
|
|
@@ -18,11 +19,11 @@ export const requestPage = async ({ filters, router, onEvent, relays = [], track
|
|
|
18
19
|
threshold: 0.1,
|
|
19
20
|
autoClose,
|
|
20
21
|
filters: withSearch,
|
|
21
|
-
relays:
|
|
22
|
+
relays: scenario.getUrls(),
|
|
22
23
|
}));
|
|
23
24
|
}
|
|
24
25
|
if (withoutSearch.length > 0) {
|
|
25
|
-
promises.push(...getFilterSelections(filters, router).flatMap(({ relays, filters }) => request({
|
|
26
|
+
promises.push(...(await getFilterSelections(filters, router)).flatMap(({ relays, filters }) => request({
|
|
26
27
|
tracker,
|
|
27
28
|
signal,
|
|
28
29
|
context,
|
|
@@ -49,23 +50,22 @@ export const requestPage = async ({ filters, router, onEvent, relays = [], track
|
|
|
49
50
|
autoClose,
|
|
50
51
|
});
|
|
51
52
|
};
|
|
52
|
-
export const requestDVM = async ({ kind, router, onResult, tags = [], relays = [], signer = Nip01Signer.ephemeral(), context, }) => {
|
|
53
|
-
if (
|
|
53
|
+
export const requestDVM = async ({ kind, router, onResult, tags = [], relays: relayUrls = [], signer = Nip01Signer.ephemeral(), context, }) => {
|
|
54
|
+
if (relayUrls.length === 0) {
|
|
55
|
+
const indexScenario = await router.resolve([indexers()]);
|
|
54
56
|
const events = await request({
|
|
55
57
|
autoClose: true,
|
|
56
|
-
filters: [{ kinds: [RELAYS], authors:
|
|
57
|
-
relays:
|
|
58
|
+
filters: [{ kinds: [RELAYS], authors: tagValues(hexTags("p"), tags) }],
|
|
59
|
+
relays: indexScenario.policy(addMinimalFallbacks).getUrls(),
|
|
58
60
|
});
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
.policy(addMinimalFallbacks)
|
|
62
|
-
.getUrls();
|
|
61
|
+
const scenario = await router.resolve(relays(events.flatMap(e => tagValues(relayTags(["r", "relay"]), e.tags))));
|
|
62
|
+
relayUrls = scenario.policy(addMinimalFallbacks).getUrls();
|
|
63
63
|
}
|
|
64
64
|
if (!tags.some(nthEq(0, "expiration"))) {
|
|
65
65
|
tags.push(["expiration", String(now() + 60)]);
|
|
66
66
|
}
|
|
67
67
|
if (!tags.some(nthEq(0, "relays"))) {
|
|
68
|
-
tags.push(["relays", ...
|
|
68
|
+
tags.push(["relays", ...relayUrls]);
|
|
69
69
|
}
|
|
70
70
|
if (!tags.some(nthEq(1, "user"))) {
|
|
71
71
|
tags.push(["param", "user", await signer.getPubkey()]);
|
|
@@ -76,8 +76,8 @@ export const requestDVM = async ({ kind, router, onResult, tags = [], relays = [
|
|
|
76
76
|
const event = await signer.sign(makeEvent(kind, { tags }));
|
|
77
77
|
const filters = [{ kinds: [event.kind + 1000], since: now() - 60, "#e": [event.id] }];
|
|
78
78
|
return Promise.all([
|
|
79
|
-
publish({ event, relays, context }),
|
|
80
|
-
request({ filters, relays, context, autoClose: true, onEvent: onResult }),
|
|
79
|
+
publish({ event, relays: relayUrls, context }),
|
|
80
|
+
request({ filters, relays: relayUrls, context, autoClose: true, onEvent: onResult }),
|
|
81
81
|
]);
|
|
82
82
|
};
|
|
83
83
|
//# sourceMappingURL=request.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../../feeds/src/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAC,MAAM,eAAe,CAAA;AACzD,OAAO,EACL,SAAS,EAET,
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../../feeds/src/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Filter, RelaySelection, RelayScenario } from "@welshman/util";
|
|
2
|
+
export interface FeedRouter {
|
|
3
|
+
resolve(selections: RelaySelection[]): Promise<RelayScenario>;
|
|
4
|
+
}
|
|
5
|
+
export type RelaysAndFilters = {
|
|
6
|
+
relays: string[];
|
|
7
|
+
filters: Filter[];
|
|
8
|
+
};
|
|
9
|
+
export declare const getFilterSelections: (filters: Filter[], router: FeedRouter) => Promise<RelaysAndFilters[]>;
|
|
10
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../feeds/src/router.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAC,MAAM,EAAE,cAAc,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAA;AAOzE,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;CAC9D;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAC,CAAA;AAgCpE,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EAAE,EACjB,QAAQ,UAAU,KACjB,OAAO,CAAC,gBAAgB,EAAE,CAsB5B,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { chunks, clamp } from "@welshman/lib";
|
|
2
|
+
import { WRAP, getFilterId, outbox, userInbox, userMessaging, searchRelays, addMinimalFallbacks, } from "@welshman/util";
|
|
3
|
+
// One rule per outbox-model source. Each maps a filter to a (possibly narrowed)
|
|
4
|
+
// filter plus the selections that should serve it. Ported from @welshman/router's
|
|
5
|
+
// getFilterSelectionsFor* — but producing declarative selections, not scenarios.
|
|
6
|
+
const rules = [
|
|
7
|
+
// Full-text search goes to the configured search relays.
|
|
8
|
+
filter => (filter.search ? [{ filter, selections: [searchRelays(10)] }] : []),
|
|
9
|
+
// Gift wraps (with no explicit authors) go to the user's messaging relays.
|
|
10
|
+
filter => filter.kinds?.includes(WRAP) && !filter.authors
|
|
11
|
+
? [{ filter: { ...filter, kinds: [WRAP] }, selections: [userMessaging()] }]
|
|
12
|
+
: [],
|
|
13
|
+
// Authored events go to each author's outbox, chunked to keep filters small.
|
|
14
|
+
filter => {
|
|
15
|
+
if (!filter.authors)
|
|
16
|
+
return [];
|
|
17
|
+
const chunkCount = clamp([1, 30], Math.round(filter.authors.length / 30));
|
|
18
|
+
return chunks(chunkCount, filter.authors).map(authors => ({
|
|
19
|
+
filter: { ...filter, authors },
|
|
20
|
+
selections: authors.map(pubkey => outbox(pubkey)),
|
|
21
|
+
}));
|
|
22
|
+
},
|
|
23
|
+
// Everything also gets a low-weight pass over the user's own inbox.
|
|
24
|
+
filter => [{ filter, selections: [userInbox(0.2)] }],
|
|
25
|
+
];
|
|
26
|
+
// Decide which relays to query for which filters under the outbox model. Groups
|
|
27
|
+
// selections by narrowed filter, then resolves each group to concrete relays.
|
|
28
|
+
export const getFilterSelections = async (filters, router) => {
|
|
29
|
+
const byId = new Map();
|
|
30
|
+
for (const filter of filters) {
|
|
31
|
+
for (const rule of rules) {
|
|
32
|
+
for (const { filter: narrowed, selections } of rule(filter)) {
|
|
33
|
+
const id = getFilterId(narrowed);
|
|
34
|
+
const entry = byId.get(id) ?? { filter: narrowed, selections: [] };
|
|
35
|
+
entry.selections.push(...selections);
|
|
36
|
+
byId.set(id, entry);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return Promise.all(Array.from(byId.values()).map(async ({ filter, selections }) => {
|
|
41
|
+
const scenario = await router.resolve(selections);
|
|
42
|
+
return { filters: [filter], relays: scenario.policy(addMinimalFallbacks).getUrls() };
|
|
43
|
+
}));
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../feeds/src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/feeds/src/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ensureNumber } from "@welshman/lib";
|
|
2
2
|
import { unionFilters } from "@welshman/util";
|
|
3
|
-
import {
|
|
3
|
+
import { tagSpec, tagValues } from "@welshman/util";
|
|
4
4
|
import { FeedType, } from "./core.js";
|
|
5
5
|
export const makeAddressFeed = (...addresses) => [
|
|
6
6
|
FeedType.Address,
|
|
@@ -103,7 +103,7 @@ export const defaultTagFeedMappings = [
|
|
|
103
103
|
export const feedsFromTags = (tags, mappings) => {
|
|
104
104
|
const feeds = [];
|
|
105
105
|
for (const [tagName, templateFeed] of mappings || defaultTagFeedMappings) {
|
|
106
|
-
let values =
|
|
106
|
+
let values = tagValues(tagSpec(tagName), tags);
|
|
107
107
|
if (values.length > 0) {
|
|
108
108
|
if (isKindFeed(templateFeed)) {
|
|
109
109
|
values = values.map(ensureNumber);
|