@welshman/domain 0.9.0-pre1 → 0.9.0-pre3

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