@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.
Files changed (353) hide show
  1. package/dist/domain/src/behaviors/Emoji.d.ts +18 -0
  2. package/dist/domain/src/behaviors/Emoji.d.ts.map +1 -0
  3. package/dist/domain/src/behaviors/Emoji.js +9 -0
  4. package/dist/domain/src/behaviors/Emoji.js.map +1 -0
  5. package/dist/domain/src/behaviors/ZapSplits.d.ts +36 -0
  6. package/dist/domain/src/behaviors/ZapSplits.d.ts.map +1 -0
  7. package/dist/domain/src/behaviors/ZapSplits.js +54 -0
  8. package/dist/domain/src/behaviors/ZapSplits.js.map +1 -0
  9. package/dist/domain/src/core/EventReader.d.ts +24 -0
  10. package/dist/domain/src/core/EventReader.d.ts.map +1 -0
  11. package/dist/domain/src/core/EventReader.js +55 -0
  12. package/dist/domain/src/core/EventReader.js.map +1 -0
  13. package/dist/domain/src/core/EventWriter.d.ts +99 -0
  14. package/dist/domain/src/core/EventWriter.d.ts.map +1 -0
  15. package/dist/domain/src/core/EventWriter.js +233 -0
  16. package/dist/domain/src/core/EventWriter.js.map +1 -0
  17. package/dist/domain/src/core/Kind.d.ts +39 -0
  18. package/dist/domain/src/core/Kind.d.ts.map +1 -0
  19. package/dist/domain/src/core/Kind.js +43 -0
  20. package/dist/domain/src/core/Kind.js.map +1 -0
  21. package/dist/domain/src/core/ListReader.d.ts +9 -0
  22. package/dist/domain/src/core/ListReader.d.ts.map +1 -0
  23. package/dist/domain/src/{ListReader.js → core/ListReader.js} +2 -1
  24. package/dist/domain/src/core/ListReader.js.map +1 -0
  25. package/dist/domain/src/{ListBuilder.d.ts → core/ListWriter.d.ts} +8 -9
  26. package/dist/domain/src/core/ListWriter.d.ts.map +1 -0
  27. package/dist/domain/src/{ListBuilder.js → core/ListWriter.js} +12 -13
  28. package/dist/domain/src/core/ListWriter.js.map +1 -0
  29. package/dist/domain/src/index.d.ts +14 -5
  30. package/dist/domain/src/index.d.ts.map +1 -1
  31. package/dist/domain/src/index.js +14 -5
  32. package/dist/domain/src/index.js.map +1 -1
  33. package/dist/domain/src/kinds/AppData.d.ts +22 -0
  34. package/dist/domain/src/kinds/AppData.d.ts.map +1 -0
  35. package/dist/domain/src/kinds/AppData.js +84 -0
  36. package/dist/domain/src/kinds/AppData.js.map +1 -0
  37. package/dist/domain/src/kinds/BlockedRelayList.d.ts +6 -7
  38. package/dist/domain/src/kinds/BlockedRelayList.d.ts.map +1 -1
  39. package/dist/domain/src/kinds/BlockedRelayList.js +12 -11
  40. package/dist/domain/src/kinds/BlockedRelayList.js.map +1 -1
  41. package/dist/domain/src/kinds/BlossomServerList.d.ts +6 -7
  42. package/dist/domain/src/kinds/BlossomServerList.d.ts.map +1 -1
  43. package/dist/domain/src/kinds/BlossomServerList.js +12 -11
  44. package/dist/domain/src/kinds/BlossomServerList.js.map +1 -1
  45. package/dist/domain/src/kinds/BookmarkList.d.ts +6 -7
  46. package/dist/domain/src/kinds/BookmarkList.d.ts.map +1 -1
  47. package/dist/domain/src/kinds/BookmarkList.js +15 -14
  48. package/dist/domain/src/kinds/BookmarkList.js.map +1 -1
  49. package/dist/domain/src/kinds/Classified.d.ts +6 -7
  50. package/dist/domain/src/kinds/Classified.d.ts.map +1 -1
  51. package/dist/domain/src/kinds/Classified.js +17 -16
  52. package/dist/domain/src/kinds/Classified.js.map +1 -1
  53. package/dist/domain/src/kinds/Comment.d.ts +14 -10
  54. package/dist/domain/src/kinds/Comment.d.ts.map +1 -1
  55. package/dist/domain/src/kinds/Comment.js +57 -34
  56. package/dist/domain/src/kinds/Comment.js.map +1 -1
  57. package/dist/domain/src/kinds/Delete.d.ts +18 -0
  58. package/dist/domain/src/kinds/Delete.d.ts.map +1 -0
  59. package/dist/domain/src/kinds/Delete.js +70 -0
  60. package/dist/domain/src/kinds/Delete.js.map +1 -0
  61. package/dist/domain/src/kinds/EmojiList.d.ts +6 -10
  62. package/dist/domain/src/kinds/EmojiList.d.ts.map +1 -1
  63. package/dist/domain/src/kinds/EmojiList.js +12 -20
  64. package/dist/domain/src/kinds/EmojiList.js.map +1 -1
  65. package/dist/domain/src/kinds/Feed.d.ts +6 -7
  66. package/dist/domain/src/kinds/Feed.d.ts.map +1 -1
  67. package/dist/domain/src/kinds/Feed.js +14 -13
  68. package/dist/domain/src/kinds/Feed.js.map +1 -1
  69. package/dist/domain/src/kinds/FeedList.d.ts +6 -7
  70. package/dist/domain/src/kinds/FeedList.d.ts.map +1 -1
  71. package/dist/domain/src/kinds/FeedList.js +12 -11
  72. package/dist/domain/src/kinds/FeedList.js.map +1 -1
  73. package/dist/domain/src/kinds/FollowList.d.ts +7 -7
  74. package/dist/domain/src/kinds/FollowList.d.ts.map +1 -1
  75. package/dist/domain/src/kinds/FollowList.js +15 -11
  76. package/dist/domain/src/kinds/FollowList.js.map +1 -1
  77. package/dist/domain/src/kinds/GroupList.d.ts +6 -7
  78. package/dist/domain/src/kinds/GroupList.d.ts.map +1 -1
  79. package/dist/domain/src/kinds/GroupList.js +12 -11
  80. package/dist/domain/src/kinds/GroupList.js.map +1 -1
  81. package/dist/domain/src/kinds/Handler.d.ts +11 -13
  82. package/dist/domain/src/kinds/Handler.d.ts.map +1 -1
  83. package/dist/domain/src/kinds/Handler.js +20 -19
  84. package/dist/domain/src/kinds/Handler.js.map +1 -1
  85. package/dist/domain/src/kinds/HandlerRecommendation.d.ts +6 -7
  86. package/dist/domain/src/kinds/HandlerRecommendation.d.ts.map +1 -1
  87. package/dist/domain/src/kinds/HandlerRecommendation.js +13 -12
  88. package/dist/domain/src/kinds/HandlerRecommendation.js.map +1 -1
  89. package/dist/domain/src/kinds/MessagingRelayList.d.ts +6 -7
  90. package/dist/domain/src/kinds/MessagingRelayList.d.ts.map +1 -1
  91. package/dist/domain/src/kinds/MessagingRelayList.js +12 -11
  92. package/dist/domain/src/kinds/MessagingRelayList.js.map +1 -1
  93. package/dist/domain/src/kinds/MuteList.d.ts +7 -7
  94. package/dist/domain/src/kinds/MuteList.d.ts.map +1 -1
  95. package/dist/domain/src/kinds/MuteList.js +15 -11
  96. package/dist/domain/src/kinds/MuteList.js.map +1 -1
  97. package/dist/domain/src/kinds/Note.d.ts +18 -0
  98. package/dist/domain/src/kinds/Note.d.ts.map +1 -0
  99. package/dist/domain/src/kinds/Note.js +106 -0
  100. package/dist/domain/src/kinds/Note.js.map +1 -0
  101. package/dist/domain/src/kinds/Pin.d.ts +7 -8
  102. package/dist/domain/src/kinds/Pin.d.ts.map +1 -1
  103. package/dist/domain/src/kinds/Pin.js +23 -21
  104. package/dist/domain/src/kinds/Pin.js.map +1 -1
  105. package/dist/domain/src/kinds/PinList.d.ts +6 -7
  106. package/dist/domain/src/kinds/PinList.d.ts.map +1 -1
  107. package/dist/domain/src/kinds/PinList.js +13 -12
  108. package/dist/domain/src/kinds/PinList.js.map +1 -1
  109. package/dist/domain/src/kinds/Pinboard.d.ts +7 -8
  110. package/dist/domain/src/kinds/Pinboard.d.ts.map +1 -1
  111. package/dist/domain/src/kinds/Pinboard.js +16 -15
  112. package/dist/domain/src/kinds/Pinboard.js.map +1 -1
  113. package/dist/domain/src/kinds/Poll.d.ts +7 -8
  114. package/dist/domain/src/kinds/Poll.d.ts.map +1 -1
  115. package/dist/domain/src/kinds/Poll.js +16 -15
  116. package/dist/domain/src/kinds/Poll.js.map +1 -1
  117. package/dist/domain/src/kinds/PollResponse.d.ts +7 -8
  118. package/dist/domain/src/kinds/PollResponse.d.ts.map +1 -1
  119. package/dist/domain/src/kinds/PollResponse.js +13 -12
  120. package/dist/domain/src/kinds/PollResponse.js.map +1 -1
  121. package/dist/domain/src/kinds/Profile.d.ts +10 -13
  122. package/dist/domain/src/kinds/Profile.d.ts.map +1 -1
  123. package/dist/domain/src/kinds/Profile.js +15 -19
  124. package/dist/domain/src/kinds/Profile.js.map +1 -1
  125. package/dist/domain/src/kinds/Reaction.d.ts +16 -0
  126. package/dist/domain/src/kinds/Reaction.d.ts.map +1 -0
  127. package/dist/domain/src/kinds/Reaction.js +55 -0
  128. package/dist/domain/src/kinds/Reaction.js.map +1 -0
  129. package/dist/domain/src/kinds/RelayAddMember.d.ts +7 -7
  130. package/dist/domain/src/kinds/RelayAddMember.d.ts.map +1 -1
  131. package/dist/domain/src/kinds/RelayAddMember.js +13 -11
  132. package/dist/domain/src/kinds/RelayAddMember.js.map +1 -1
  133. package/dist/domain/src/kinds/RelayInvite.d.ts +7 -7
  134. package/dist/domain/src/kinds/RelayInvite.d.ts.map +1 -1
  135. package/dist/domain/src/kinds/RelayInvite.js +13 -11
  136. package/dist/domain/src/kinds/RelayInvite.js.map +1 -1
  137. package/dist/domain/src/kinds/RelayJoin.d.ts +7 -7
  138. package/dist/domain/src/kinds/RelayJoin.d.ts.map +1 -1
  139. package/dist/domain/src/kinds/RelayJoin.js +13 -11
  140. package/dist/domain/src/kinds/RelayJoin.js.map +1 -1
  141. package/dist/domain/src/kinds/RelayLeave.d.ts +7 -7
  142. package/dist/domain/src/kinds/RelayLeave.d.ts.map +1 -1
  143. package/dist/domain/src/kinds/RelayLeave.js +11 -9
  144. package/dist/domain/src/kinds/RelayLeave.js.map +1 -1
  145. package/dist/domain/src/kinds/RelayList.d.ts +7 -7
  146. package/dist/domain/src/kinds/RelayList.d.ts.map +1 -1
  147. package/dist/domain/src/kinds/RelayList.js +20 -11
  148. package/dist/domain/src/kinds/RelayList.js.map +1 -1
  149. package/dist/domain/src/kinds/RelayMembers.d.ts +9 -9
  150. package/dist/domain/src/kinds/RelayMembers.d.ts.map +1 -1
  151. package/dist/domain/src/kinds/RelayMembers.js +15 -15
  152. package/dist/domain/src/kinds/RelayMembers.js.map +1 -1
  153. package/dist/domain/src/kinds/RelayRemoveMember.d.ts +7 -7
  154. package/dist/domain/src/kinds/RelayRemoveMember.d.ts.map +1 -1
  155. package/dist/domain/src/kinds/RelayRemoveMember.js +13 -11
  156. package/dist/domain/src/kinds/RelayRemoveMember.js.map +1 -1
  157. package/dist/domain/src/kinds/RelayRole.d.ts +18 -0
  158. package/dist/domain/src/kinds/RelayRole.d.ts.map +1 -0
  159. package/dist/domain/src/kinds/RelayRole.js +46 -0
  160. package/dist/domain/src/kinds/RelayRole.js.map +1 -0
  161. package/dist/domain/src/kinds/RelaySet.d.ts +6 -7
  162. package/dist/domain/src/kinds/RelaySet.d.ts.map +1 -1
  163. package/dist/domain/src/kinds/RelaySet.js +15 -14
  164. package/dist/domain/src/kinds/RelaySet.js.map +1 -1
  165. package/dist/domain/src/kinds/Report.d.ts +9 -8
  166. package/dist/domain/src/kinds/Report.d.ts.map +1 -1
  167. package/dist/domain/src/kinds/Report.js +20 -16
  168. package/dist/domain/src/kinds/Report.js.map +1 -1
  169. package/dist/domain/src/kinds/RoomAddMember.d.ts +7 -7
  170. package/dist/domain/src/kinds/RoomAddMember.d.ts.map +1 -1
  171. package/dist/domain/src/kinds/RoomAddMember.js +13 -11
  172. package/dist/domain/src/kinds/RoomAddMember.js.map +1 -1
  173. package/dist/domain/src/kinds/RoomAdmins.d.ts +7 -7
  174. package/dist/domain/src/kinds/RoomAdmins.d.ts.map +1 -1
  175. package/dist/domain/src/kinds/RoomAdmins.js +13 -11
  176. package/dist/domain/src/kinds/RoomAdmins.js.map +1 -1
  177. package/dist/domain/src/kinds/RoomCreate.d.ts +8 -8
  178. package/dist/domain/src/kinds/RoomCreate.d.ts.map +1 -1
  179. package/dist/domain/src/kinds/RoomCreate.js +11 -9
  180. package/dist/domain/src/kinds/RoomCreate.js.map +1 -1
  181. package/dist/domain/src/kinds/RoomCreatePermission.d.ts +7 -7
  182. package/dist/domain/src/kinds/RoomCreatePermission.d.ts.map +1 -1
  183. package/dist/domain/src/kinds/RoomCreatePermission.js +13 -11
  184. package/dist/domain/src/kinds/RoomCreatePermission.js.map +1 -1
  185. package/dist/domain/src/kinds/RoomDelete.d.ts +8 -8
  186. package/dist/domain/src/kinds/RoomDelete.d.ts.map +1 -1
  187. package/dist/domain/src/kinds/RoomDelete.js +11 -9
  188. package/dist/domain/src/kinds/RoomDelete.js.map +1 -1
  189. package/dist/domain/src/kinds/RoomEdit.d.ts +8 -8
  190. package/dist/domain/src/kinds/RoomEdit.d.ts.map +1 -1
  191. package/dist/domain/src/kinds/RoomEdit.js +21 -20
  192. package/dist/domain/src/kinds/RoomEdit.js.map +1 -1
  193. package/dist/domain/src/kinds/RoomJoin.d.ts +8 -10
  194. package/dist/domain/src/kinds/RoomJoin.d.ts.map +1 -1
  195. package/dist/domain/src/kinds/RoomJoin.js +13 -17
  196. package/dist/domain/src/kinds/RoomJoin.js.map +1 -1
  197. package/dist/domain/src/kinds/RoomLeave.d.ts +8 -8
  198. package/dist/domain/src/kinds/RoomLeave.d.ts.map +1 -1
  199. package/dist/domain/src/kinds/RoomLeave.js +11 -9
  200. package/dist/domain/src/kinds/RoomLeave.js.map +1 -1
  201. package/dist/domain/src/kinds/RoomList.d.ts +13 -8
  202. package/dist/domain/src/kinds/RoomList.d.ts.map +1 -1
  203. package/dist/domain/src/kinds/RoomList.js +60 -15
  204. package/dist/domain/src/kinds/RoomList.js.map +1 -1
  205. package/dist/domain/src/kinds/RoomMembers.d.ts +7 -7
  206. package/dist/domain/src/kinds/RoomMembers.d.ts.map +1 -1
  207. package/dist/domain/src/kinds/RoomMembers.js +13 -11
  208. package/dist/domain/src/kinds/RoomMembers.js.map +1 -1
  209. package/dist/domain/src/kinds/RoomMeta.d.ts +7 -7
  210. package/dist/domain/src/kinds/RoomMeta.d.ts.map +1 -1
  211. package/dist/domain/src/kinds/RoomMeta.js +16 -14
  212. package/dist/domain/src/kinds/RoomMeta.js.map +1 -1
  213. package/dist/domain/src/kinds/RoomRemoveMember.d.ts +7 -7
  214. package/dist/domain/src/kinds/RoomRemoveMember.d.ts.map +1 -1
  215. package/dist/domain/src/kinds/RoomRemoveMember.js +13 -11
  216. package/dist/domain/src/kinds/RoomRemoveMember.js.map +1 -1
  217. package/dist/domain/src/kinds/SearchRelayList.d.ts +6 -7
  218. package/dist/domain/src/kinds/SearchRelayList.d.ts.map +1 -1
  219. package/dist/domain/src/kinds/SearchRelayList.js +12 -11
  220. package/dist/domain/src/kinds/SearchRelayList.js.map +1 -1
  221. package/dist/domain/src/kinds/Thread.d.ts +6 -7
  222. package/dist/domain/src/kinds/Thread.d.ts.map +1 -1
  223. package/dist/domain/src/kinds/Thread.js +12 -11
  224. package/dist/domain/src/kinds/Thread.js.map +1 -1
  225. package/dist/domain/src/kinds/TimeEvent.d.ts +9 -10
  226. package/dist/domain/src/kinds/TimeEvent.d.ts.map +1 -1
  227. package/dist/domain/src/kinds/TimeEvent.js +23 -22
  228. package/dist/domain/src/kinds/TimeEvent.js.map +1 -1
  229. package/dist/domain/src/kinds/TopicList.d.ts +6 -7
  230. package/dist/domain/src/kinds/TopicList.d.ts.map +1 -1
  231. package/dist/domain/src/kinds/TopicList.js +13 -12
  232. package/dist/domain/src/kinds/TopicList.js.map +1 -1
  233. package/dist/domain/src/kinds/ZapGoal.d.ts +10 -9
  234. package/dist/domain/src/kinds/ZapGoal.d.ts.map +1 -1
  235. package/dist/domain/src/kinds/ZapGoal.js +20 -16
  236. package/dist/domain/src/kinds/ZapGoal.js.map +1 -1
  237. package/dist/domain/src/kinds/ZapReceipt.d.ts +8 -11
  238. package/dist/domain/src/kinds/ZapReceipt.d.ts.map +1 -1
  239. package/dist/domain/src/kinds/ZapReceipt.js +17 -42
  240. package/dist/domain/src/kinds/ZapReceipt.js.map +1 -1
  241. package/dist/domain/src/kinds/ZapRequest.d.ts +15 -7
  242. package/dist/domain/src/kinds/ZapRequest.d.ts.map +1 -1
  243. package/dist/domain/src/kinds/ZapRequest.js +40 -15
  244. package/dist/domain/src/kinds/ZapRequest.js.map +1 -1
  245. package/dist/domain/src/other/Relay.d.ts +49 -0
  246. package/dist/domain/src/other/Relay.d.ts.map +1 -0
  247. package/dist/domain/src/other/Relay.js +50 -0
  248. package/dist/domain/src/other/Relay.js.map +1 -0
  249. package/dist/domain/src/other/Zapper.d.ts +40 -0
  250. package/dist/domain/src/other/Zapper.d.ts.map +1 -0
  251. package/dist/domain/src/other/Zapper.js +67 -0
  252. package/dist/domain/src/other/Zapper.js.map +1 -0
  253. package/dist/feeds/src/compiler.d.ts +2 -2
  254. package/dist/feeds/src/compiler.d.ts.map +1 -1
  255. package/dist/feeds/src/index.d.ts +1 -0
  256. package/dist/feeds/src/index.d.ts.map +1 -1
  257. package/dist/feeds/src/index.js +1 -0
  258. package/dist/feeds/src/index.js.map +1 -1
  259. package/dist/feeds/src/request.d.ts +4 -4
  260. package/dist/feeds/src/request.d.ts.map +1 -1
  261. package/dist/feeds/src/request.js +15 -15
  262. package/dist/feeds/src/request.js.map +1 -1
  263. package/dist/feeds/src/router.d.ts +10 -0
  264. package/dist/feeds/src/router.d.ts.map +1 -0
  265. package/dist/feeds/src/router.js +45 -0
  266. package/dist/feeds/src/router.js.map +1 -0
  267. package/dist/feeds/src/utils.js +2 -2
  268. package/dist/feeds/src/utils.js.map +1 -1
  269. package/dist/lib/src/Tools.d.ts +9 -0
  270. package/dist/lib/src/Tools.d.ts.map +1 -1
  271. package/dist/lib/src/Tools.js +26 -1
  272. package/dist/lib/src/Tools.js.map +1 -1
  273. package/dist/net/src/context.d.ts +1 -1
  274. package/dist/net/src/context.d.ts.map +1 -1
  275. package/dist/net/src/message.d.ts +1 -1
  276. package/dist/net/src/message.d.ts.map +1 -1
  277. package/dist/net/src/message.js +1 -1
  278. package/dist/net/src/message.js.map +1 -1
  279. package/dist/net/src/repository.d.ts +3 -0
  280. package/dist/net/src/repository.d.ts.map +1 -1
  281. package/dist/net/src/repository.js +49 -12
  282. package/dist/net/src/repository.js.map +1 -1
  283. package/dist/net/src/request.d.ts +2 -1
  284. package/dist/net/src/request.d.ts.map +1 -1
  285. package/dist/net/src/request.js.map +1 -1
  286. package/dist/signer/src/signers/nip46.d.ts +2 -2
  287. package/dist/signer/src/signers/nip46.d.ts.map +1 -1
  288. package/dist/signer/src/signers/nip46.js +10 -5
  289. package/dist/signer/src/signers/nip46.js.map +1 -1
  290. package/dist/tsconfig.build.tsbuildinfo +1 -1
  291. package/dist/util/src/Events.d.ts +0 -12
  292. package/dist/util/src/Events.d.ts.map +1 -1
  293. package/dist/util/src/Events.js +3 -25
  294. package/dist/util/src/Events.js.map +1 -1
  295. package/dist/util/src/Kinds.d.ts +3 -1
  296. package/dist/util/src/Kinds.d.ts.map +1 -1
  297. package/dist/util/src/Kinds.js +5 -2
  298. package/dist/util/src/Kinds.js.map +1 -1
  299. package/dist/util/src/Lightning.d.ts +6 -0
  300. package/dist/util/src/Lightning.d.ts.map +1 -0
  301. package/dist/util/src/Lightning.js +59 -0
  302. package/dist/util/src/Lightning.js.map +1 -0
  303. package/dist/util/src/Nip86.d.ts +74 -30
  304. package/dist/util/src/Nip86.d.ts.map +1 -1
  305. package/dist/util/src/Nip86.js +169 -30
  306. package/dist/util/src/Nip86.js.map +1 -1
  307. package/dist/util/src/Pow.js +2 -2
  308. package/dist/util/src/Pow.js.map +1 -1
  309. package/dist/util/src/Pubkey.d.ts.map +1 -1
  310. package/dist/util/src/Pubkey.js +2 -1
  311. package/dist/util/src/Pubkey.js.map +1 -1
  312. package/dist/util/src/Relay.d.ts +0 -29
  313. package/dist/util/src/Relay.d.ts.map +1 -1
  314. package/dist/util/src/Relay.js +0 -10
  315. package/dist/util/src/Relay.js.map +1 -1
  316. package/dist/util/src/RelaySelection.d.ts +101 -0
  317. package/dist/util/src/RelaySelection.d.ts.map +1 -0
  318. package/dist/util/src/RelaySelection.js +98 -0
  319. package/dist/util/src/RelaySelection.js.map +1 -0
  320. package/dist/util/src/Tags.d.ts +16 -35
  321. package/dist/util/src/Tags.d.ts.map +1 -1
  322. package/dist/util/src/Tags.js +23 -74
  323. package/dist/util/src/Tags.js.map +1 -1
  324. package/dist/util/src/Topics.d.ts +2 -0
  325. package/dist/util/src/Topics.d.ts.map +1 -0
  326. package/dist/util/src/Topics.js +2 -0
  327. package/dist/util/src/Topics.js.map +1 -0
  328. package/dist/util/src/index.d.ts +2 -1
  329. package/dist/util/src/index.d.ts.map +1 -1
  330. package/dist/util/src/index.js +2 -1
  331. package/dist/util/src/index.js.map +1 -1
  332. package/package.json +11 -9
  333. package/dist/domain/src/EventBuilder.d.ts +0 -35
  334. package/dist/domain/src/EventBuilder.d.ts.map +0 -1
  335. package/dist/domain/src/EventBuilder.js +0 -111
  336. package/dist/domain/src/EventBuilder.js.map +0 -1
  337. package/dist/domain/src/EventReader.d.ts +0 -24
  338. package/dist/domain/src/EventReader.d.ts.map +0 -1
  339. package/dist/domain/src/EventReader.js +0 -57
  340. package/dist/domain/src/EventReader.js.map +0 -1
  341. package/dist/domain/src/ListBuilder.d.ts.map +0 -1
  342. package/dist/domain/src/ListBuilder.js.map +0 -1
  343. package/dist/domain/src/ListReader.d.ts +0 -12
  344. package/dist/domain/src/ListReader.d.ts.map +0 -1
  345. package/dist/domain/src/ListReader.js.map +0 -1
  346. package/dist/domain/src/kinds/SlashCommand.d.ts +0 -38
  347. package/dist/domain/src/kinds/SlashCommand.d.ts.map +0 -1
  348. package/dist/domain/src/kinds/SlashCommand.js +0 -91
  349. package/dist/domain/src/kinds/SlashCommand.js.map +0 -1
  350. package/dist/util/src/Zaps.d.ts +0 -86
  351. package/dist/util/src/Zaps.d.ts.map +0 -1
  352. package/dist/util/src/Zaps.js +0 -184
  353. 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,24 @@
1
+ import type { TrustedEvent } from "@welshman/util";
2
+ import type { KindContext } from "./Kind.js";
3
+ import type { Emoji } from "../behaviors/Emoji.js";
4
+ import type { ZapSplit } from "../behaviors/ZapSplits.js";
5
+ export declare abstract class EventReader {
6
+ readonly kind: number;
7
+ readonly context: KindContext;
8
+ readonly event: TrustedEvent;
9
+ constructor(kind: number, context: KindContext, event: TrustedEvent);
10
+ parse(): Promise<void>;
11
+ id(): string;
12
+ author(): string;
13
+ content(): string;
14
+ tags(): string[][];
15
+ createdAt(): number;
16
+ identifier(): string | undefined;
17
+ address(): string;
18
+ group(): string | undefined;
19
+ protect(): boolean;
20
+ expiration(): number | undefined;
21
+ emojis(): Emoji[];
22
+ zapSplits(): ZapSplit[];
23
+ }
24
+ //# sourceMappingURL=EventReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventReader.d.ts","sourceRoot":"","sources":["../../../../src/core/EventReader.ts"],"names":[],"mappings":"AAEA,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,8BAAsB,WAAW;IAE7B,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;IAOxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAE5B,EAAE;IAIF,MAAM;IAIN,OAAO;IAIP,IAAI;IAIJ,SAAS;IAIT,UAAU;IAIV,OAAO;IAIP,KAAK;IAIL,OAAO;IAIP,UAAU;IAIV,MAAM,IAAI,KAAK,EAAE;IAIjB,SAAS,IAAI,QAAQ,EAAE;CAGxB"}
@@ -0,0 +1,55 @@
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
+ export class EventReader {
6
+ kind;
7
+ context;
8
+ event;
9
+ constructor(kind, context, event) {
10
+ this.kind = kind;
11
+ this.context = context;
12
+ this.event = event;
13
+ if (event.kind !== kind) {
14
+ throw new Error(`Expected a kind ${kind} event, got kind ${event.kind}`);
15
+ }
16
+ }
17
+ async parse() { }
18
+ id() {
19
+ return this.event.id;
20
+ }
21
+ author() {
22
+ return this.event.pubkey;
23
+ }
24
+ content() {
25
+ return this.event.content;
26
+ }
27
+ tags() {
28
+ return this.event.tags;
29
+ }
30
+ createdAt() {
31
+ return this.event.created_at;
32
+ }
33
+ identifier() {
34
+ return tagValue(tagSpec("d"), this.event.tags);
35
+ }
36
+ address() {
37
+ return getAddress(this.event);
38
+ }
39
+ group() {
40
+ return tagValue(tagSpec("h"), this.event.tags);
41
+ }
42
+ protect() {
43
+ return this.event.tags.some(spec(["-"]));
44
+ }
45
+ expiration() {
46
+ return toInt(tagValue(tagSpec("expiration"), this.event.tags) ?? "");
47
+ }
48
+ emojis() {
49
+ return getEmojis(this.event);
50
+ }
51
+ zapSplits() {
52
+ return getZapSplits(this.event);
53
+ }
54
+ }
55
+ //# 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;AACzC,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,MAAM,OAAgB,WAAW;IAEpB;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;IAED,KAAK,CAAC,KAAK,KAAmB,CAAC;IAE/B,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,KAAK;QACH,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"}
@@ -0,0 +1,99 @@
1
+ import type { MaybeAsync } from "@welshman/lib";
2
+ import type { EventTemplate, TrustedEvent, RelaySelection, RelayScenario } from "@welshman/util";
3
+ import type { EventReader } 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 EventReader> {
11
+ readonly kind: number;
12
+ readonly context: KindContext;
13
+ readonly reader?: Reader | undefined;
14
+ content: string;
15
+ groupTag?: 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
+ setGroup(url: string, group: string): this;
26
+ clearGroup(): 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 group) 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
+ groupTag;
23
+ protectTag;
24
+ expirationTag;
25
+ identifierTag;
26
+ extraTags = [];
27
+ forcedRelays;
28
+ pendingResolves = [];
29
+ // Kinds that must publish to explicit relays (e.g. NIP-29 group 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.groupTag = 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
+ setGroup(url, group) {
51
+ this.forcedRelays = [normalizeRelayUrl(url)];
52
+ this.groupTag = ["h", group];
53
+ return this;
54
+ }
55
+ clearGroup() {
56
+ this.forcedRelays = undefined;
57
+ this.groupTag = 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.groupTag && !this.forcedRelays?.length) {
141
+ throw new Error("A group event requires a relay url (set the group via setGroup)");
142
+ }
143
+ if (this.requiresRelays && !this.forcedRelays?.length) {
144
+ throw new Error(`A kind ${this.kind} event must publish to explicit relays (via setGroup 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.groupTag, 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 group) 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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"}
@@ -0,0 +1,39 @@
1
+ import type { TrustedEvent, Resolver } from "@welshman/util";
2
+ import type { ISigner } from "@welshman/signer";
3
+ import type { EventReader } from "./EventReader.js";
4
+ import type { EventWriter } from "./EventWriter.js";
5
+ export type KindContext = {
6
+ resolver: Resolver;
7
+ signer?: ISigner;
8
+ };
9
+ export type KindConfig<Reader extends EventReader, Writer extends EventWriter<Reader>> = {
10
+ kind: number;
11
+ reader: new (kind: number, context: KindContext, event: TrustedEvent) => Reader;
12
+ writer: new (kind: number, context: KindContext, reader?: Reader) => Writer;
13
+ };
14
+ /**
15
+ * Bundles a kind's number, reader, and writer classes.
16
+ *
17
+ * Usage: `export const Profile = new KindFactory({kind: PROFILE, reader:
18
+ * ProfileReader, writer: ProfileWriter})`, then `Profile.kind` reads the number and
19
+ * `Profile.configure(context)` binds the app's dependencies once.
20
+ */
21
+ export declare class KindFactory<Reader extends EventReader, Writer extends EventWriter<Reader>> {
22
+ readonly config: KindConfig<Reader, Writer>;
23
+ constructor(config: KindConfig<Reader, Writer>);
24
+ get kind(): number;
25
+ configure(context: KindContext): ConfiguredKind<Reader, Writer>;
26
+ }
27
+ /**
28
+ * A kind bound to a `KindContext`. Produces readers and writers which share the
29
+ * configured dependencies.
30
+ */
31
+ export declare class ConfiguredKind<Reader extends EventReader, Writer extends EventWriter<Reader>> {
32
+ readonly config: KindConfig<Reader, Writer>;
33
+ readonly context: KindContext;
34
+ constructor(config: KindConfig<Reader, Writer>, context: KindContext);
35
+ get kind(): number;
36
+ reader: (event: TrustedEvent) => Promise<Reader>;
37
+ writer: (reader?: Reader) => Writer;
38
+ }
39
+ //# sourceMappingURL=Kind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Kind.d.ts","sourceRoot":"","sources":["../../../../src/core/Kind.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAEjD,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,UAAU,CAAC,MAAM,SAAS,WAAW,EAAE,MAAM,SAAS,WAAW,CAAC,MAAM,CAAC,IAAI;IACvF,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,KAAK,MAAM,CAAA;IAC/E,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAC5E,CAAA;AAED;;;;;;GAMG;AACH,qBAAa,WAAW,CAAC,MAAM,SAAS,WAAW,EAAE,MAAM,SAAS,WAAW,CAAC,MAAM,CAAC;IACzE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC;gBAAlC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC;IAEvD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;CAGhE;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,MAAM,SAAS,WAAW,EAAE,MAAM,SAAS,WAAW,CAAC,MAAM,CAAC;IAEtF,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,WAAW;gBADpB,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,OAAO,EAAE,WAAW;IAG/B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAGD,MAAM,GAAU,OAAO,YAAY,KAAG,OAAO,CAAC,MAAM,CAAC,CAMpD;IAGD,MAAM,GAAI,SAAS,MAAM,KAAG,MAAM,CAC8B;CACjE"}