@welshman/app 0.8.16 → 0.9.0-pre1

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 (548) hide show
  1. package/dist/app/src/app.d.ts +47 -0
  2. package/dist/app/src/app.d.ts.map +1 -0
  3. package/dist/app/src/app.js +56 -0
  4. package/dist/app/src/app.js.map +1 -0
  5. package/dist/app/src/createApp.d.ts +12 -0
  6. package/dist/app/src/createApp.d.ts.map +1 -0
  7. package/dist/app/src/createApp.js +12 -0
  8. package/dist/app/src/createApp.js.map +1 -0
  9. package/dist/app/src/index.d.ts +34 -27
  10. package/dist/app/src/index.d.ts.map +1 -1
  11. package/dist/app/src/index.js +34 -92
  12. package/dist/app/src/index.js.map +1 -1
  13. package/dist/app/src/plugins/base.d.ts +86 -0
  14. package/dist/app/src/plugins/base.d.ts.map +1 -0
  15. package/dist/app/src/plugins/base.js +124 -0
  16. package/dist/app/src/plugins/base.js.map +1 -0
  17. package/dist/app/src/plugins/blockedRelayLists.d.ts +19 -0
  18. package/dist/app/src/plugins/blockedRelayLists.d.ts.map +1 -0
  19. package/dist/app/src/plugins/blockedRelayLists.js +35 -0
  20. package/dist/app/src/plugins/blockedRelayLists.js.map +1 -0
  21. package/dist/app/src/plugins/blossom.d.ts +12 -0
  22. package/dist/app/src/plugins/blossom.d.ts.map +1 -0
  23. package/dist/app/src/plugins/blossom.js +21 -0
  24. package/dist/app/src/plugins/blossom.js.map +1 -0
  25. package/dist/app/src/plugins/feeds.d.ts +21 -0
  26. package/dist/app/src/plugins/feeds.d.ts.map +1 -0
  27. package/dist/app/src/plugins/feeds.js +58 -0
  28. package/dist/app/src/plugins/feeds.js.map +1 -0
  29. package/dist/app/src/plugins/follows.d.ts +15 -0
  30. package/dist/app/src/plugins/follows.d.ts.map +1 -0
  31. package/dist/app/src/plugins/follows.js +32 -0
  32. package/dist/app/src/plugins/follows.js.map +1 -0
  33. package/dist/app/src/plugins/handles.d.ts +20 -0
  34. package/dist/app/src/plugins/handles.d.ts.map +1 -0
  35. package/dist/app/src/plugins/handles.js +64 -0
  36. package/dist/app/src/plugins/handles.js.map +1 -0
  37. package/dist/app/src/plugins/logger.d.ts +26 -0
  38. package/dist/app/src/plugins/logger.d.ts.map +1 -0
  39. package/dist/app/src/plugins/logger.js +19 -0
  40. package/dist/app/src/plugins/logger.js.map +1 -0
  41. package/dist/app/src/plugins/messagingRelayLists.d.ts +19 -0
  42. package/dist/app/src/plugins/messagingRelayLists.d.ts.map +1 -0
  43. package/dist/app/src/plugins/messagingRelayLists.js +35 -0
  44. package/dist/app/src/plugins/messagingRelayLists.js.map +1 -0
  45. package/dist/app/src/plugins/mutes.d.ts +19 -0
  46. package/dist/app/src/plugins/mutes.d.ts.map +1 -0
  47. package/dist/app/src/plugins/mutes.js +39 -0
  48. package/dist/app/src/plugins/mutes.js.map +1 -0
  49. package/dist/app/src/plugins/network.d.ts +24 -0
  50. package/dist/app/src/plugins/network.d.ts.map +1 -0
  51. package/dist/app/src/plugins/network.js +41 -0
  52. package/dist/app/src/plugins/network.js.map +1 -0
  53. package/dist/app/src/plugins/pins.d.ts +15 -0
  54. package/dist/app/src/plugins/pins.d.ts.map +1 -0
  55. package/dist/app/src/plugins/pins.js +32 -0
  56. package/dist/app/src/plugins/pins.js.map +1 -0
  57. package/dist/app/src/plugins/plaintext.d.ts +11 -0
  58. package/dist/app/src/plugins/plaintext.d.ts.map +1 -0
  59. package/dist/app/src/plugins/plaintext.js +18 -0
  60. package/dist/app/src/plugins/plaintext.js.map +1 -0
  61. package/dist/app/src/plugins/profiles.d.ts +15 -0
  62. package/dist/app/src/plugins/profiles.d.ts.map +1 -0
  63. package/dist/app/src/plugins/profiles.js +39 -0
  64. package/dist/app/src/plugins/profiles.js.map +1 -0
  65. package/dist/app/src/plugins/relayLists.d.ts +23 -0
  66. package/dist/app/src/plugins/relayLists.d.ts.map +1 -0
  67. package/dist/app/src/plugins/relayLists.js +65 -0
  68. package/dist/app/src/plugins/relayLists.js.map +1 -0
  69. package/dist/app/src/plugins/relayManagement.d.ts +12 -0
  70. package/dist/app/src/plugins/relayManagement.d.ts.map +1 -0
  71. package/dist/app/src/plugins/relayManagement.js +19 -0
  72. package/dist/app/src/plugins/relayManagement.js.map +1 -0
  73. package/dist/app/src/plugins/relayStats.d.ts +39 -0
  74. package/dist/app/src/plugins/relayStats.d.ts.map +1 -0
  75. package/dist/app/src/plugins/relayStats.js +173 -0
  76. package/dist/app/src/plugins/relayStats.js.map +1 -0
  77. package/dist/app/src/plugins/relays.d.ts +15 -0
  78. package/dist/app/src/plugins/relays.d.ts.map +1 -0
  79. package/dist/app/src/plugins/relays.js +43 -0
  80. package/dist/app/src/plugins/relays.js.map +1 -0
  81. package/dist/app/src/plugins/rooms.d.ts +30 -0
  82. package/dist/app/src/plugins/rooms.d.ts.map +1 -0
  83. package/dist/app/src/plugins/rooms.js +36 -0
  84. package/dist/app/src/plugins/rooms.js.map +1 -0
  85. package/dist/app/src/plugins/router.d.ts +13 -0
  86. package/dist/app/src/plugins/router.d.ts.map +1 -0
  87. package/dist/app/src/plugins/router.js +26 -0
  88. package/dist/app/src/plugins/router.js.map +1 -0
  89. package/dist/app/src/plugins/search.d.ts +35 -0
  90. package/dist/app/src/plugins/search.d.ts.map +1 -0
  91. package/dist/app/src/plugins/search.js +88 -0
  92. package/dist/app/src/plugins/search.js.map +1 -0
  93. package/dist/app/src/plugins/searchRelayLists.d.ts +19 -0
  94. package/dist/app/src/plugins/searchRelayLists.d.ts.map +1 -0
  95. package/dist/app/src/plugins/searchRelayLists.js +35 -0
  96. package/dist/app/src/plugins/searchRelayLists.js.map +1 -0
  97. package/dist/app/src/plugins/slashCommands.d.ts +22 -0
  98. package/dist/app/src/plugins/slashCommands.d.ts.map +1 -0
  99. package/dist/app/src/plugins/slashCommands.js +70 -0
  100. package/dist/app/src/plugins/slashCommands.js.map +1 -0
  101. package/dist/app/src/plugins/stores.d.ts +22 -0
  102. package/dist/app/src/plugins/stores.d.ts.map +1 -0
  103. package/dist/app/src/plugins/stores.js +22 -0
  104. package/dist/app/src/plugins/stores.js.map +1 -0
  105. package/dist/app/src/plugins/sync.d.ts +20 -0
  106. package/dist/app/src/plugins/sync.d.ts.map +1 -0
  107. package/dist/app/src/plugins/sync.js +41 -0
  108. package/dist/app/src/plugins/sync.js.map +1 -0
  109. package/dist/app/src/plugins/tags.d.ts +20 -0
  110. package/dist/app/src/plugins/tags.d.ts.map +1 -0
  111. package/dist/app/src/plugins/tags.js +106 -0
  112. package/dist/app/src/plugins/tags.js.map +1 -0
  113. package/dist/app/src/plugins/thunk.d.ts +75 -0
  114. package/dist/app/src/plugins/thunk.d.ts.map +1 -0
  115. package/dist/app/src/{thunk.js → plugins/thunk.js} +162 -152
  116. package/dist/app/src/plugins/thunk.js.map +1 -0
  117. package/dist/app/src/plugins/topics.d.ts +17 -0
  118. package/dist/app/src/plugins/topics.d.ts.map +1 -0
  119. package/dist/app/src/plugins/topics.js +45 -0
  120. package/dist/app/src/plugins/topics.js.map +1 -0
  121. package/dist/app/src/plugins/wot.d.ts +28 -0
  122. package/dist/app/src/plugins/wot.d.ts.map +1 -0
  123. package/dist/app/src/plugins/wot.js +116 -0
  124. package/dist/app/src/plugins/wot.js.map +1 -0
  125. package/dist/app/src/plugins/wraps.d.ts +25 -0
  126. package/dist/app/src/plugins/wraps.d.ts.map +1 -0
  127. package/dist/app/src/plugins/wraps.js +59 -0
  128. package/dist/app/src/plugins/wraps.js.map +1 -0
  129. package/dist/app/src/plugins/zappers.d.ts +28 -0
  130. package/dist/app/src/plugins/zappers.d.ts.map +1 -0
  131. package/dist/app/src/plugins/zappers.js +106 -0
  132. package/dist/app/src/plugins/zappers.js.map +1 -0
  133. package/dist/app/src/policy.d.ts +51 -0
  134. package/dist/app/src/policy.d.ts.map +1 -0
  135. package/dist/app/src/policy.js +129 -0
  136. package/dist/app/src/policy.js.map +1 -0
  137. package/dist/app/src/session.d.ts +36 -103
  138. package/dist/app/src/session.d.ts.map +1 -1
  139. package/dist/app/src/session.js +42 -171
  140. package/dist/app/src/session.js.map +1 -1
  141. package/dist/app/src/user.d.ts +34 -33
  142. package/dist/app/src/user.d.ts.map +1 -1
  143. package/dist/app/src/user.js +51 -53
  144. package/dist/app/src/user.js.map +1 -1
  145. package/dist/domain/src/EventBuilder.d.ts +35 -0
  146. package/dist/domain/src/EventBuilder.d.ts.map +1 -0
  147. package/dist/domain/src/EventBuilder.js +111 -0
  148. package/dist/domain/src/EventBuilder.js.map +1 -0
  149. package/dist/domain/src/EventReader.d.ts +24 -0
  150. package/dist/domain/src/EventReader.d.ts.map +1 -0
  151. package/dist/domain/src/EventReader.js +57 -0
  152. package/dist/domain/src/EventReader.js.map +1 -0
  153. package/dist/domain/src/ListBuilder.d.ts +21 -0
  154. package/dist/domain/src/ListBuilder.d.ts.map +1 -0
  155. package/dist/domain/src/ListBuilder.js +73 -0
  156. package/dist/domain/src/ListBuilder.js.map +1 -0
  157. package/dist/domain/src/ListReader.d.ts +12 -0
  158. package/dist/domain/src/ListReader.d.ts.map +1 -0
  159. package/dist/domain/src/ListReader.js +31 -0
  160. package/dist/domain/src/ListReader.js.map +1 -0
  161. package/dist/domain/src/index.d.ts +54 -0
  162. package/dist/domain/src/index.d.ts.map +1 -0
  163. package/dist/domain/src/index.js +54 -0
  164. package/dist/domain/src/index.js.map +1 -0
  165. package/dist/domain/src/kinds/BlockedRelayList.d.ts +15 -0
  166. package/dist/domain/src/kinds/BlockedRelayList.d.ts.map +1 -0
  167. package/dist/domain/src/kinds/BlockedRelayList.js +30 -0
  168. package/dist/domain/src/kinds/BlockedRelayList.js.map +1 -0
  169. package/dist/domain/src/kinds/BlossomServerList.d.ts +15 -0
  170. package/dist/domain/src/kinds/BlossomServerList.d.ts.map +1 -0
  171. package/dist/domain/src/kinds/BlossomServerList.js +30 -0
  172. package/dist/domain/src/kinds/BlossomServerList.js.map +1 -0
  173. package/dist/domain/src/kinds/BookmarkList.d.ts +17 -0
  174. package/dist/domain/src/kinds/BookmarkList.d.ts.map +1 -0
  175. package/dist/domain/src/kinds/BookmarkList.js +36 -0
  176. package/dist/domain/src/kinds/BookmarkList.js.map +1 -0
  177. package/dist/domain/src/kinds/Classified.d.ts +27 -0
  178. package/dist/domain/src/kinds/Classified.d.ts.map +1 -0
  179. package/dist/domain/src/kinds/Classified.js +65 -0
  180. package/dist/domain/src/kinds/Classified.js.map +1 -0
  181. package/dist/domain/src/kinds/Comment.d.ts +29 -0
  182. package/dist/domain/src/kinds/Comment.d.ts.map +1 -0
  183. package/dist/domain/src/kinds/Comment.js +82 -0
  184. package/dist/domain/src/kinds/Comment.js.map +1 -0
  185. package/dist/domain/src/kinds/EmojiList.d.ts +16 -0
  186. package/dist/domain/src/kinds/EmojiList.d.ts.map +1 -0
  187. package/dist/domain/src/kinds/EmojiList.js +33 -0
  188. package/dist/domain/src/kinds/EmojiList.js.map +1 -0
  189. package/dist/domain/src/kinds/Feed.d.ts +17 -0
  190. package/dist/domain/src/kinds/Feed.d.ts.map +1 -0
  191. package/dist/domain/src/kinds/Feed.js +33 -0
  192. package/dist/domain/src/kinds/Feed.js.map +1 -0
  193. package/dist/domain/src/kinds/FeedList.d.ts +15 -0
  194. package/dist/domain/src/kinds/FeedList.d.ts.map +1 -0
  195. package/dist/domain/src/kinds/FeedList.js +30 -0
  196. package/dist/domain/src/kinds/FeedList.js.map +1 -0
  197. package/dist/domain/src/kinds/FollowList.d.ts +14 -0
  198. package/dist/domain/src/kinds/FollowList.d.ts.map +1 -0
  199. package/dist/domain/src/kinds/FollowList.js +27 -0
  200. package/dist/domain/src/kinds/FollowList.js.map +1 -0
  201. package/dist/domain/src/kinds/GroupList.d.ts +13 -0
  202. package/dist/domain/src/kinds/GroupList.d.ts.map +1 -0
  203. package/dist/domain/src/kinds/GroupList.js +24 -0
  204. package/dist/domain/src/kinds/GroupList.js.map +1 -0
  205. package/dist/domain/src/kinds/Handler.d.ts +41 -0
  206. package/dist/domain/src/kinds/Handler.d.ts.map +1 -0
  207. package/dist/domain/src/kinds/Handler.js +86 -0
  208. package/dist/domain/src/kinds/Handler.js.map +1 -0
  209. package/dist/domain/src/kinds/HandlerRecommendation.d.ts +15 -0
  210. package/dist/domain/src/kinds/HandlerRecommendation.d.ts.map +1 -0
  211. package/dist/domain/src/kinds/HandlerRecommendation.js +32 -0
  212. package/dist/domain/src/kinds/HandlerRecommendation.js.map +1 -0
  213. package/dist/domain/src/kinds/MessagingRelayList.d.ts +14 -0
  214. package/dist/domain/src/kinds/MessagingRelayList.d.ts.map +1 -0
  215. package/dist/domain/src/kinds/MessagingRelayList.js +27 -0
  216. package/dist/domain/src/kinds/MessagingRelayList.js.map +1 -0
  217. package/dist/domain/src/kinds/MuteList.d.ts +15 -0
  218. package/dist/domain/src/kinds/MuteList.d.ts.map +1 -0
  219. package/dist/domain/src/kinds/MuteList.js +30 -0
  220. package/dist/domain/src/kinds/MuteList.js.map +1 -0
  221. package/dist/domain/src/kinds/Pin.d.ts +37 -0
  222. package/dist/domain/src/kinds/Pin.d.ts.map +1 -0
  223. package/dist/domain/src/kinds/Pin.js +74 -0
  224. package/dist/domain/src/kinds/Pin.js.map +1 -0
  225. package/dist/domain/src/kinds/PinList.d.ts +15 -0
  226. package/dist/domain/src/kinds/PinList.d.ts.map +1 -0
  227. package/dist/domain/src/kinds/PinList.js +30 -0
  228. package/dist/domain/src/kinds/PinList.js.map +1 -0
  229. package/dist/domain/src/kinds/Pinboard.d.ts +21 -0
  230. package/dist/domain/src/kinds/Pinboard.d.ts.map +1 -0
  231. package/dist/domain/src/kinds/Pinboard.js +53 -0
  232. package/dist/domain/src/kinds/Pinboard.js.map +1 -0
  233. package/dist/domain/src/kinds/Poll.d.ts +37 -0
  234. package/dist/domain/src/kinds/Poll.d.ts.map +1 -0
  235. package/dist/domain/src/kinds/Poll.js +80 -0
  236. package/dist/domain/src/kinds/Poll.js.map +1 -0
  237. package/dist/domain/src/kinds/PollResponse.d.ts +15 -0
  238. package/dist/domain/src/kinds/PollResponse.d.ts.map +1 -0
  239. package/dist/domain/src/kinds/PollResponse.js +33 -0
  240. package/dist/domain/src/kinds/PollResponse.js.map +1 -0
  241. package/dist/domain/src/kinds/Profile.d.ts +36 -0
  242. package/dist/domain/src/kinds/Profile.d.ts.map +1 -0
  243. package/dist/domain/src/kinds/Profile.js +105 -0
  244. package/dist/domain/src/kinds/Profile.js.map +1 -0
  245. package/dist/domain/src/kinds/RelayAddMember.d.ts +12 -0
  246. package/dist/domain/src/kinds/RelayAddMember.d.ts.map +1 -0
  247. package/dist/domain/src/kinds/RelayAddMember.js +21 -0
  248. package/dist/domain/src/kinds/RelayAddMember.js.map +1 -0
  249. package/dist/domain/src/kinds/RelayInvite.d.ts +12 -0
  250. package/dist/domain/src/kinds/RelayInvite.d.ts.map +1 -0
  251. package/dist/domain/src/kinds/RelayInvite.js +21 -0
  252. package/dist/domain/src/kinds/RelayInvite.js.map +1 -0
  253. package/dist/domain/src/kinds/RelayJoin.d.ts +14 -0
  254. package/dist/domain/src/kinds/RelayJoin.d.ts.map +1 -0
  255. package/dist/domain/src/kinds/RelayJoin.js +27 -0
  256. package/dist/domain/src/kinds/RelayJoin.js.map +1 -0
  257. package/dist/domain/src/kinds/RelayLeave.d.ts +10 -0
  258. package/dist/domain/src/kinds/RelayLeave.d.ts.map +1 -0
  259. package/dist/domain/src/kinds/RelayLeave.js +14 -0
  260. package/dist/domain/src/kinds/RelayLeave.js.map +1 -0
  261. package/dist/domain/src/kinds/RelayList.d.ts +24 -0
  262. package/dist/domain/src/kinds/RelayList.d.ts.map +1 -0
  263. package/dist/domain/src/kinds/RelayList.js +89 -0
  264. package/dist/domain/src/kinds/RelayList.js.map +1 -0
  265. package/dist/domain/src/kinds/RelayMembers.d.ts +17 -0
  266. package/dist/domain/src/kinds/RelayMembers.d.ts.map +1 -0
  267. package/dist/domain/src/kinds/RelayMembers.js +38 -0
  268. package/dist/domain/src/kinds/RelayMembers.js.map +1 -0
  269. package/dist/domain/src/kinds/RelayRemoveMember.d.ts +12 -0
  270. package/dist/domain/src/kinds/RelayRemoveMember.d.ts.map +1 -0
  271. package/dist/domain/src/kinds/RelayRemoveMember.js +21 -0
  272. package/dist/domain/src/kinds/RelayRemoveMember.js.map +1 -0
  273. package/dist/domain/src/kinds/RelaySet.d.ts +20 -0
  274. package/dist/domain/src/kinds/RelaySet.d.ts.map +1 -0
  275. package/dist/domain/src/kinds/RelaySet.js +45 -0
  276. package/dist/domain/src/kinds/RelaySet.js.map +1 -0
  277. package/dist/domain/src/kinds/Report.d.ts +18 -0
  278. package/dist/domain/src/kinds/Report.d.ts.map +1 -0
  279. package/dist/domain/src/kinds/Report.js +59 -0
  280. package/dist/domain/src/kinds/Report.js.map +1 -0
  281. package/dist/domain/src/kinds/RoomAddMember.d.ts +12 -0
  282. package/dist/domain/src/kinds/RoomAddMember.d.ts.map +1 -0
  283. package/dist/domain/src/kinds/RoomAddMember.js +21 -0
  284. package/dist/domain/src/kinds/RoomAddMember.js.map +1 -0
  285. package/dist/domain/src/kinds/RoomAdmins.d.ts +14 -0
  286. package/dist/domain/src/kinds/RoomAdmins.d.ts.map +1 -0
  287. package/dist/domain/src/kinds/RoomAdmins.js +27 -0
  288. package/dist/domain/src/kinds/RoomAdmins.js.map +1 -0
  289. package/dist/domain/src/kinds/RoomCreate.d.ts +11 -0
  290. package/dist/domain/src/kinds/RoomCreate.d.ts.map +1 -0
  291. package/dist/domain/src/kinds/RoomCreate.js +20 -0
  292. package/dist/domain/src/kinds/RoomCreate.js.map +1 -0
  293. package/dist/domain/src/kinds/RoomCreatePermission.d.ts +15 -0
  294. package/dist/domain/src/kinds/RoomCreatePermission.d.ts.map +1 -0
  295. package/dist/domain/src/kinds/RoomCreatePermission.js +30 -0
  296. package/dist/domain/src/kinds/RoomCreatePermission.js.map +1 -0
  297. package/dist/domain/src/kinds/RoomDelete.d.ts +11 -0
  298. package/dist/domain/src/kinds/RoomDelete.d.ts.map +1 -0
  299. package/dist/domain/src/kinds/RoomDelete.js +20 -0
  300. package/dist/domain/src/kinds/RoomDelete.js.map +1 -0
  301. package/dist/domain/src/kinds/RoomEdit.d.ts +28 -0
  302. package/dist/domain/src/kinds/RoomEdit.d.ts.map +1 -0
  303. package/dist/domain/src/kinds/RoomEdit.js +80 -0
  304. package/dist/domain/src/kinds/RoomEdit.js.map +1 -0
  305. package/dist/domain/src/kinds/RoomJoin.d.ts +15 -0
  306. package/dist/domain/src/kinds/RoomJoin.d.ts.map +1 -0
  307. package/dist/domain/src/kinds/RoomJoin.js +33 -0
  308. package/dist/domain/src/kinds/RoomJoin.js.map +1 -0
  309. package/dist/domain/src/kinds/RoomLeave.d.ts +11 -0
  310. package/dist/domain/src/kinds/RoomLeave.d.ts.map +1 -0
  311. package/dist/domain/src/kinds/RoomLeave.js +20 -0
  312. package/dist/domain/src/kinds/RoomLeave.js.map +1 -0
  313. package/dist/domain/src/kinds/RoomList.d.ts +14 -0
  314. package/dist/domain/src/kinds/RoomList.d.ts.map +1 -0
  315. package/dist/domain/src/kinds/RoomList.js +27 -0
  316. package/dist/domain/src/kinds/RoomList.js.map +1 -0
  317. package/dist/domain/src/kinds/RoomMembers.d.ts +15 -0
  318. package/dist/domain/src/kinds/RoomMembers.d.ts.map +1 -0
  319. package/dist/domain/src/kinds/RoomMembers.js +30 -0
  320. package/dist/domain/src/kinds/RoomMembers.js.map +1 -0
  321. package/dist/domain/src/kinds/RoomMeta.d.ts +27 -0
  322. package/dist/domain/src/kinds/RoomMeta.d.ts.map +1 -0
  323. package/dist/domain/src/kinds/RoomMeta.js +72 -0
  324. package/dist/domain/src/kinds/RoomMeta.js.map +1 -0
  325. package/dist/domain/src/kinds/RoomRemoveMember.d.ts +14 -0
  326. package/dist/domain/src/kinds/RoomRemoveMember.d.ts.map +1 -0
  327. package/dist/domain/src/kinds/RoomRemoveMember.js +27 -0
  328. package/dist/domain/src/kinds/RoomRemoveMember.js.map +1 -0
  329. package/dist/domain/src/kinds/SearchRelayList.d.ts +15 -0
  330. package/dist/domain/src/kinds/SearchRelayList.d.ts.map +1 -0
  331. package/dist/domain/src/kinds/SearchRelayList.js +30 -0
  332. package/dist/domain/src/kinds/SearchRelayList.js.map +1 -0
  333. package/dist/domain/src/kinds/SlashCommand.d.ts +38 -0
  334. package/dist/domain/src/kinds/SlashCommand.d.ts.map +1 -0
  335. package/dist/domain/src/kinds/SlashCommand.js +91 -0
  336. package/dist/domain/src/kinds/SlashCommand.js.map +1 -0
  337. package/dist/domain/src/kinds/Thread.d.ts +12 -0
  338. package/dist/domain/src/kinds/Thread.d.ts.map +1 -0
  339. package/dist/domain/src/kinds/Thread.js +21 -0
  340. package/dist/domain/src/kinds/Thread.js.map +1 -0
  341. package/dist/domain/src/kinds/TimeEvent.d.ts +21 -0
  342. package/dist/domain/src/kinds/TimeEvent.d.ts.map +1 -0
  343. package/dist/domain/src/kinds/TimeEvent.js +58 -0
  344. package/dist/domain/src/kinds/TimeEvent.js.map +1 -0
  345. package/dist/domain/src/kinds/TopicList.d.ts +17 -0
  346. package/dist/domain/src/kinds/TopicList.d.ts.map +1 -0
  347. package/dist/domain/src/kinds/TopicList.js +36 -0
  348. package/dist/domain/src/kinds/TopicList.js.map +1 -0
  349. package/dist/domain/src/kinds/ZapGoal.d.ts +20 -0
  350. package/dist/domain/src/kinds/ZapGoal.d.ts.map +1 -0
  351. package/dist/domain/src/kinds/ZapGoal.js +52 -0
  352. package/dist/domain/src/kinds/ZapGoal.js.map +1 -0
  353. package/dist/domain/src/kinds/ZapReceipt.d.ts +28 -0
  354. package/dist/domain/src/kinds/ZapReceipt.d.ts.map +1 -0
  355. package/dist/domain/src/kinds/ZapReceipt.js +93 -0
  356. package/dist/domain/src/kinds/ZapReceipt.js.map +1 -0
  357. package/dist/domain/src/kinds/ZapRequest.d.ts +20 -0
  358. package/dist/domain/src/kinds/ZapRequest.d.ts.map +1 -0
  359. package/dist/domain/src/kinds/ZapRequest.js +47 -0
  360. package/dist/domain/src/kinds/ZapRequest.js.map +1 -0
  361. package/dist/feeds/src/compiler.d.ts +2 -0
  362. package/dist/feeds/src/compiler.d.ts.map +1 -1
  363. package/dist/feeds/src/compiler.js +3 -0
  364. package/dist/feeds/src/compiler.js.map +1 -1
  365. package/dist/feeds/src/controller.d.ts.map +1 -1
  366. package/dist/feeds/src/controller.js +2 -0
  367. package/dist/feeds/src/controller.js.map +1 -1
  368. package/dist/feeds/src/request.d.ts +5 -2
  369. package/dist/feeds/src/request.d.ts.map +1 -1
  370. package/dist/feeds/src/request.js +9 -9
  371. package/dist/feeds/src/request.js.map +1 -1
  372. package/dist/lib/src/Tools.d.ts +4 -0
  373. package/dist/lib/src/Tools.d.ts.map +1 -1
  374. package/dist/lib/src/Tools.js +4 -0
  375. package/dist/lib/src/Tools.js.map +1 -1
  376. package/dist/net/src/adapter.d.ts +2 -2
  377. package/dist/net/src/adapter.d.ts.map +1 -1
  378. package/dist/net/src/adapter.js +8 -4
  379. package/dist/net/src/adapter.js.map +1 -1
  380. package/dist/net/src/auth.d.ts +1 -1
  381. package/dist/net/src/auth.d.ts.map +1 -1
  382. package/dist/net/src/auth.js +3 -3
  383. package/dist/net/src/auth.js.map +1 -1
  384. package/dist/net/src/context.d.ts +4 -7
  385. package/dist/net/src/context.d.ts.map +1 -1
  386. package/dist/net/src/context.js +1 -9
  387. package/dist/net/src/context.js.map +1 -1
  388. package/dist/net/src/pool.d.ts +1 -8
  389. package/dist/net/src/pool.d.ts.map +1 -1
  390. package/dist/net/src/pool.js +2 -18
  391. package/dist/net/src/pool.js.map +1 -1
  392. package/dist/net/src/repository.d.ts +1 -2
  393. package/dist/net/src/repository.d.ts.map +1 -1
  394. package/dist/net/src/repository.js +6 -9
  395. package/dist/net/src/repository.js.map +1 -1
  396. package/dist/net/src/request.d.ts +0 -2
  397. package/dist/net/src/request.d.ts.map +1 -1
  398. package/dist/net/src/request.js +4 -7
  399. package/dist/net/src/request.js.map +1 -1
  400. package/dist/net/src/wrapManager.d.ts +1 -0
  401. package/dist/net/src/wrapManager.d.ts.map +1 -1
  402. package/dist/net/src/wrapManager.js +5 -1
  403. package/dist/net/src/wrapManager.js.map +1 -1
  404. package/dist/router/src/index.d.ts +163 -0
  405. package/dist/router/src/index.d.ts.map +1 -0
  406. package/dist/router/src/index.js +214 -0
  407. package/dist/router/src/index.js.map +1 -0
  408. package/dist/signer/src/util.d.ts +1 -1
  409. package/dist/signer/src/util.d.ts.map +1 -1
  410. package/dist/signer/src/util.js +18 -6
  411. package/dist/signer/src/util.js.map +1 -1
  412. package/dist/tsconfig.build.tsbuildinfo +1 -1
  413. package/dist/util/src/Handles.d.ts +15 -0
  414. package/dist/util/src/Handles.d.ts.map +1 -0
  415. package/dist/util/src/Handles.js +25 -0
  416. package/dist/util/src/Handles.js.map +1 -0
  417. package/dist/util/src/Kinds.d.ts +4 -1
  418. package/dist/util/src/Kinds.d.ts.map +1 -1
  419. package/dist/util/src/Kinds.js +4 -1
  420. package/dist/util/src/Kinds.js.map +1 -1
  421. package/dist/util/src/Nip86.d.ts +8 -2
  422. package/dist/util/src/Nip86.d.ts.map +1 -1
  423. package/dist/util/src/Nip86.js +6 -0
  424. package/dist/util/src/Nip86.js.map +1 -1
  425. package/dist/util/src/Zaps.d.ts +31 -0
  426. package/dist/util/src/Zaps.d.ts.map +1 -1
  427. package/dist/util/src/Zaps.js +52 -3
  428. package/dist/util/src/Zaps.js.map +1 -1
  429. package/dist/util/src/index.d.ts +1 -5
  430. package/dist/util/src/index.d.ts.map +1 -1
  431. package/dist/util/src/index.js +1 -5
  432. package/dist/util/src/index.js.map +1 -1
  433. package/package.json +18 -16
  434. package/dist/app/src/blockedRelayLists.d.ts +0 -9
  435. package/dist/app/src/blockedRelayLists.d.ts.map +0 -1
  436. package/dist/app/src/blockedRelayLists.js +0 -18
  437. package/dist/app/src/blockedRelayLists.js.map +0 -1
  438. package/dist/app/src/blossom.d.ts +0 -8
  439. package/dist/app/src/blossom.d.ts.map +0 -1
  440. package/dist/app/src/blossom.js +0 -17
  441. package/dist/app/src/blossom.js.map +0 -1
  442. package/dist/app/src/commands.d.ts +0 -43
  443. package/dist/app/src/commands.d.ts.map +0 -1
  444. package/dist/app/src/commands.js +0 -216
  445. package/dist/app/src/commands.js.map +0 -1
  446. package/dist/app/src/context.d.ts +0 -5
  447. package/dist/app/src/context.d.ts.map +0 -1
  448. package/dist/app/src/context.js +0 -2
  449. package/dist/app/src/context.js.map +0 -1
  450. package/dist/app/src/core.d.ts +0 -4
  451. package/dist/app/src/core.d.ts.map +0 -1
  452. package/dist/app/src/core.js +0 -4
  453. package/dist/app/src/core.js.map +0 -1
  454. package/dist/app/src/feeds.d.ts +0 -9
  455. package/dist/app/src/feeds.d.ts.map +0 -1
  456. package/dist/app/src/feeds.js +0 -35
  457. package/dist/app/src/feeds.js.map +0 -1
  458. package/dist/app/src/follows.d.ts +0 -9
  459. package/dist/app/src/follows.d.ts.map +0 -1
  460. package/dist/app/src/follows.js +0 -18
  461. package/dist/app/src/follows.js.map +0 -1
  462. package/dist/app/src/handles.d.ts +0 -30
  463. package/dist/app/src/handles.d.ts.map +0 -1
  464. package/dist/app/src/handles.js +0 -95
  465. package/dist/app/src/handles.js.map +0 -1
  466. package/dist/app/src/messagingRelayLists.d.ts +0 -9
  467. package/dist/app/src/messagingRelayLists.d.ts.map +0 -1
  468. package/dist/app/src/messagingRelayLists.js +0 -18
  469. package/dist/app/src/messagingRelayLists.js.map +0 -1
  470. package/dist/app/src/mutes.d.ts +0 -10
  471. package/dist/app/src/mutes.d.ts.map +0 -1
  472. package/dist/app/src/mutes.js +0 -32
  473. package/dist/app/src/mutes.js.map +0 -1
  474. package/dist/app/src/pins.d.ts +0 -9
  475. package/dist/app/src/pins.d.ts.map +0 -1
  476. package/dist/app/src/pins.js +0 -18
  477. package/dist/app/src/pins.js.map +0 -1
  478. package/dist/app/src/plaintext.d.ts +0 -6
  479. package/dist/app/src/plaintext.d.ts.map +0 -1
  480. package/dist/app/src/plaintext.js +0 -35
  481. package/dist/app/src/plaintext.js.map +0 -1
  482. package/dist/app/src/profiles.d.ts +0 -11
  483. package/dist/app/src/profiles.d.ts.map +0 -1
  484. package/dist/app/src/profiles.js +0 -23
  485. package/dist/app/src/profiles.js.map +0 -1
  486. package/dist/app/src/relayLists.d.ts +0 -13
  487. package/dist/app/src/relayLists.d.ts.map +0 -1
  488. package/dist/app/src/relayLists.js +0 -52
  489. package/dist/app/src/relayLists.js.map +0 -1
  490. package/dist/app/src/relayStats.d.ts +0 -34
  491. package/dist/app/src/relayStats.d.ts.map +0 -1
  492. package/dist/app/src/relayStats.js +0 -196
  493. package/dist/app/src/relayStats.js.map +0 -1
  494. package/dist/app/src/relays.d.ts +0 -18
  495. package/dist/app/src/relays.d.ts.map +0 -1
  496. package/dist/app/src/relays.js +0 -50
  497. package/dist/app/src/relays.js.map +0 -1
  498. package/dist/app/src/search.d.ts +0 -23
  499. package/dist/app/src/search.d.ts.map +0 -1
  500. package/dist/app/src/search.js +0 -76
  501. package/dist/app/src/search.js.map +0 -1
  502. package/dist/app/src/searchRelayLists.d.ts +0 -9
  503. package/dist/app/src/searchRelayLists.d.ts.map +0 -1
  504. package/dist/app/src/searchRelayLists.js +0 -18
  505. package/dist/app/src/searchRelayLists.js.map +0 -1
  506. package/dist/app/src/sync.d.ts +0 -9
  507. package/dist/app/src/sync.d.ts.map +0 -1
  508. package/dist/app/src/sync.js +0 -32
  509. package/dist/app/src/sync.js.map +0 -1
  510. package/dist/app/src/tags.d.ts +0 -10
  511. package/dist/app/src/tags.d.ts.map +0 -1
  512. package/dist/app/src/tags.js +0 -96
  513. package/dist/app/src/tags.js.map +0 -1
  514. package/dist/app/src/thunk.d.ts +0 -61
  515. package/dist/app/src/thunk.d.ts.map +0 -1
  516. package/dist/app/src/thunk.js.map +0 -1
  517. package/dist/app/src/topics.d.ts +0 -7
  518. package/dist/app/src/topics.d.ts.map +0 -1
  519. package/dist/app/src/topics.js +0 -38
  520. package/dist/app/src/topics.js.map +0 -1
  521. package/dist/app/src/wot.d.ts +0 -17
  522. package/dist/app/src/wot.d.ts.map +0 -1
  523. package/dist/app/src/wot.js +0 -72
  524. package/dist/app/src/wot.js.map +0 -1
  525. package/dist/app/src/zappers.d.ts +0 -21
  526. package/dist/app/src/zappers.d.ts.map +0 -1
  527. package/dist/app/src/zappers.js +0 -102
  528. package/dist/app/src/zappers.js.map +0 -1
  529. package/dist/util/src/Encryptable.d.ts +0 -34
  530. package/dist/util/src/Encryptable.d.ts.map +0 -1
  531. package/dist/util/src/Encryptable.js +0 -52
  532. package/dist/util/src/Encryptable.js.map +0 -1
  533. package/dist/util/src/Handler.d.ts +0 -17
  534. package/dist/util/src/Handler.d.ts.map +0 -1
  535. package/dist/util/src/Handler.js +0 -33
  536. package/dist/util/src/Handler.js.map +0 -1
  537. package/dist/util/src/List.d.ts +0 -42
  538. package/dist/util/src/List.d.ts.map +0 -1
  539. package/dist/util/src/List.js +0 -86
  540. package/dist/util/src/List.js.map +0 -1
  541. package/dist/util/src/Profile.d.ts +0 -26
  542. package/dist/util/src/Profile.d.ts.map +0 -1
  543. package/dist/util/src/Profile.js +0 -50
  544. package/dist/util/src/Profile.js.map +0 -1
  545. package/dist/util/src/Room.d.ts +0 -63
  546. package/dist/util/src/Room.d.ts.map +0 -1
  547. package/dist/util/src/Room.js +0 -94
  548. package/dist/util/src/Room.js.map +0 -1
@@ -0,0 +1,106 @@
1
+ import { uniq, remove } from "@welshman/lib";
2
+ import { getAddress, isReplaceable, getReplyTags, getPubkeyTagValues, isReplaceableKind, isShareableRelayUrl, } from "@welshman/util";
3
+ import { Router } from "./router.js";
4
+ import { Profiles } from "./profiles.js";
5
+ /**
6
+ * Builders for nostr tags (p/e/a/q/zap/reply/comment/reaction). Needs the router
7
+ * for relay hints, the profiles collection for display names, and the app's
8
+ * user to avoid self-tagging.
9
+ */
10
+ export class Tags {
11
+ app;
12
+ constructor(app) {
13
+ this.app = app;
14
+ }
15
+ tagZapSplit = (pubkey, split = 1) => [
16
+ "zap",
17
+ pubkey,
18
+ this.app.use(Router).FromPubkey(pubkey).getUrl() || "",
19
+ String(split),
20
+ ];
21
+ tagPubkey = (pubkey) => [
22
+ "p",
23
+ pubkey,
24
+ this.app.use(Router).FromPubkey(pubkey).getUrl() || "",
25
+ this.app.use(Profiles).display(pubkey).get(),
26
+ ];
27
+ tagEvent = (event, url = "", mark = "") => {
28
+ if (!url) {
29
+ url = this.app.use(Router).Event(event).getUrl() || "";
30
+ }
31
+ const tags = [["e", event.id, url, mark, event.pubkey]];
32
+ if (isReplaceable(event)) {
33
+ tags.push(["a", getAddress(event), url, mark, event.pubkey]);
34
+ }
35
+ return tags;
36
+ };
37
+ tagEventPubkeys = (event) => uniq(remove(this.app.user?.pubkey ?? "", [event.pubkey, ...getPubkeyTagValues(event.tags)])).map(pubkey => this.tagPubkey(pubkey));
38
+ tagEventForQuote = (event, relay) => {
39
+ const hint = relay || this.app.use(Router).Event(event).getUrl() || "";
40
+ return ["q", event.id, hint, event.pubkey];
41
+ };
42
+ tagEventForReply = (event, relay) => {
43
+ const tags = this.tagEventPubkeys(event);
44
+ const { roots, replies } = getReplyTags(event.tags);
45
+ const parents = roots.length > 0 ? roots : replies;
46
+ const mark = parents.length > 0 ? "reply" : "root";
47
+ const hint = relay || this.app.use(Router).Event(event).getUrl() || "";
48
+ // If the parent included roots use them, otherwise use replies as a fallback
49
+ for (const [k, id, originalHint = "", _, pubkey = ""] of parents) {
50
+ const hint = isShareableRelayUrl(originalHint)
51
+ ? originalHint
52
+ : this.app.use(Router).EventRoots(event).getUrl();
53
+ tags.push([k, id, hint || "", "root", pubkey]);
54
+ }
55
+ // e-tag the event
56
+ tags.push(["e", event.id, hint, mark, event.pubkey]);
57
+ // a-tag the event
58
+ if (isReplaceable(event)) {
59
+ tags.push(["a", getAddress(event), hint, mark, event.pubkey]);
60
+ }
61
+ return tags;
62
+ };
63
+ tagEventForComment = (event, relay) => {
64
+ const pubkeyHint = this.app.use(Router).FromPubkey(event.pubkey).getUrl() || "";
65
+ const eventHint = relay || this.app.use(Router).Event(event).getUrl() || "";
66
+ const address = getAddress(event);
67
+ const seenRoots = new Set();
68
+ const tags = [];
69
+ for (const [t, ...tag] of event.tags) {
70
+ if (["K", "E", "A", "I", "P"].includes(t)) {
71
+ tags.push([t, ...tag]);
72
+ seenRoots.add(t);
73
+ }
74
+ }
75
+ if (seenRoots.size === 0) {
76
+ tags.push(["K", String(event.kind)]);
77
+ tags.push(["P", event.pubkey, pubkeyHint]);
78
+ tags.push(["E", event.id, eventHint, event.pubkey]);
79
+ if (isReplaceableKind(event.kind)) {
80
+ tags.push(["A", address, eventHint, event.pubkey]);
81
+ }
82
+ }
83
+ tags.push(["k", String(event.kind)]);
84
+ tags.push(["p", event.pubkey, pubkeyHint]);
85
+ tags.push(["e", event.id, eventHint, event.pubkey]);
86
+ if (isReplaceableKind(event.kind)) {
87
+ tags.push(["a", address, eventHint, event.pubkey]);
88
+ }
89
+ return tags;
90
+ };
91
+ tagEventForReaction = (event, relay) => {
92
+ const hint = relay || this.app.use(Router).Event(event).getUrl() || "";
93
+ const tags = [];
94
+ // Mention the event's author
95
+ if (event.pubkey !== this.app.user?.pubkey) {
96
+ tags.push(this.tagPubkey(event.pubkey));
97
+ }
98
+ tags.push(["k", String(event.kind)]);
99
+ tags.push(["e", event.id, hint]);
100
+ if (isReplaceable(event)) {
101
+ tags.push(["a", getAddress(event), hint]);
102
+ }
103
+ return tags;
104
+ };
105
+ }
106
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../../src/plugins/tags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import type { Subscriber } from "svelte/store";
2
+ import type { Override } from "@welshman/lib";
3
+ import { TaskQueue } from "@welshman/lib";
4
+ import { HashedEvent, EventTemplate, SignedEvent } from "@welshman/util";
5
+ import { PublishStatus, PublishResult, PublishOptions, PublishResultsByRelay } from "@welshman/net";
6
+ import type { IApp } from "../app.js";
7
+ import { User } from "../user.js";
8
+ export type ThunkOptions = Override<PublishOptions, {
9
+ app: IApp;
10
+ event: EventTemplate;
11
+ recipient?: string;
12
+ delay?: number;
13
+ pow?: number;
14
+ }>;
15
+ /**
16
+ * Shared base for `Thunk` and `MergedThunk`: a subscribable bag of per-relay
17
+ * publish `results`.
18
+ */
19
+ export declare abstract class BaseThunk {
20
+ _subs: Subscriber<any>[];
21
+ results: PublishResultsByRelay;
22
+ abstract abort(): void;
23
+ _notify(): void;
24
+ subscribe(subscriber: Subscriber<this>): () => void;
25
+ getUrlsWithStatus(statuses: PublishStatus | PublishStatus[]): string[];
26
+ getCompleteUrls(): string[];
27
+ getIncompleteUrls(): string[];
28
+ getFailedUrls(): string[];
29
+ hasStatus(statuses: PublishStatus | PublishStatus[]): boolean;
30
+ isComplete(): boolean;
31
+ getError(): string | undefined;
32
+ waitForError(): Promise<string>;
33
+ waitForCompletion(): Promise<void>;
34
+ }
35
+ export declare class Thunk extends BaseThunk {
36
+ readonly options: ThunkOptions;
37
+ event: HashedEvent;
38
+ complete: import("@welshman/lib").Deferred<void, void>;
39
+ controller: AbortController;
40
+ wrap?: SignedEvent;
41
+ constructor(options: ThunkOptions);
42
+ get user(): User;
43
+ _fail(detail: string): void;
44
+ _setPending: (result: PublishResult) => void;
45
+ _setTimeout: (result: PublishResult) => void;
46
+ _setAborted: (result: PublishResult) => void;
47
+ _publish(event: SignedEvent): Promise<void>;
48
+ publish(): Promise<void>;
49
+ abort(): void;
50
+ }
51
+ export declare class MergedThunk extends BaseThunk {
52
+ readonly thunks: Thunk[];
53
+ constructor(thunks: Thunk[]);
54
+ abort(): void;
55
+ }
56
+ /**
57
+ * Per-app thunk manager — the publish-side counterpart of `Network`. Owns
58
+ * the app's optimistic-publish `history` store and the `queue` that paces
59
+ * publishing. Reach it via `app.use(Thunks)`; `publish` fills in the app
60
+ * (the acting user is derived from it), enqueues the thunk (optimistically
61
+ * writing it to the repository), and returns it.
62
+ */
63
+ export declare class Thunks {
64
+ readonly app: IApp;
65
+ history: import("svelte/store").Writable<Thunk[]>;
66
+ queue: TaskQueue<Thunk>;
67
+ constructor(app: IApp);
68
+ enqueue(thunk: Thunk): void;
69
+ publish: (options: Omit<ThunkOptions, "app">) => Thunk;
70
+ publishToOutbox: (options: Omit<ThunkOptions, "app" | "relays">) => Thunk;
71
+ retry: (thunk: BaseThunk) => Thunk | MergedThunk;
72
+ merge(thunks: BaseThunk[]): MergedThunk;
73
+ flatten(thunks: BaseThunk[]): Iterable<Thunk>;
74
+ }
75
+ //# sourceMappingURL=thunk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thunk.d.ts","sourceRoot":"","sources":["../../../../src/plugins/thunk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAS,SAAS,EAAmD,MAAM,eAAe,CAAA;AACjG,OAAO,EACL,WAAW,EACX,aAAa,EACb,WAAW,EAKZ,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAC,MAAM,eAAe,CAAA;AAEjG,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAInC,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAA;AAE/B,MAAM,MAAM,YAAY,GAAG,QAAQ,CACjC,cAAc,EACd;IACE,GAAG,EAAE,IAAI,CAAA;IACT,KAAK,EAAE,aAAa,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CACF,CAAA;AAED;;;GAGG;AACH,8BAAsB,SAAS;IAC7B,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAK;IAC7B,OAAO,EAAE,qBAAqB,CAAK;IAEnC,QAAQ,CAAC,KAAK,IAAI,IAAI;IAEtB,OAAO;IAMP,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC;IAUtC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,EAAE,GAKvC,MAAM,EAAE;IAG5B,eAAe;IAMf,iBAAiB;IAIjB,aAAa;IAIb,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,EAAE;IAInD,UAAU;IAIV,QAAQ;IAYR,YAAY;IAYZ,iBAAiB;CASlB;AAED,qBAAa,KAAM,SAAQ,SAAS;IAMtB,QAAQ,CAAC,OAAO,EAAE,YAAY;IAL1C,KAAK,EAAE,WAAW,CAAA;IAClB,QAAQ,+CAAgB;IACxB,UAAU,kBAAwB;IAClC,IAAI,CAAC,EAAE,WAAW,CAAA;gBAEG,OAAO,EAAE,YAAY;IA4B1C,IAAI,IAAI,SAEP;IAED,KAAK,CAAC,MAAM,EAAE,MAAM;IAYpB,WAAW,GAAI,QAAQ,aAAa,UAInC;IAED,WAAW,GAAI,QAAQ,aAAa,UAInC;IAED,WAAW,GAAI,QAAQ,aAAa,UAInC;IAEK,QAAQ,CAAC,KAAK,EAAE,WAAW;IA0C3B,OAAO;IA+Db,KAAK;CAGN;AAED,qBAAa,WAAY,SAAQ,SAAS;IAC5B,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE;gBAAf,MAAM,EAAE,KAAK,EAAE;IA6BpC,KAAK;CAGN;AAED;;;;;;GAMG;AACH,qBAAa,MAAM;IAWL,QAAQ,CAAC,GAAG,EAAE,IAAI;IAV9B,OAAO,2CAAwB;IAE/B,KAAK,mBAMH;gBAEmB,GAAG,EAAE,IAAI;IAE9B,OAAO,CAAC,KAAK,EAAE,KAAK;IAqBpB,OAAO,GAAI,SAAS,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,WAM5C;IAGD,eAAe,GAAI,SAAS,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,QAAQ,CAAC,WAI5D;IAEJ,KAAK,GAAI,OAAO,SAAS,yBAGmB;IAE5C,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE;IAIxB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;CAS/C"}
@@ -1,36 +1,95 @@
1
1
  import { writable } from "svelte/store";
2
2
  import { append, TaskQueue, ensurePlural, remove, defer, sleep, nth, without } from "@welshman/lib";
3
3
  import { isSignedEvent, WRAPPED_KINDS, prep, makePow, } from "@welshman/util";
4
- import { publish, PublishStatus, } from "@welshman/net";
4
+ import { PublishStatus } from "@welshman/net";
5
5
  import { Nip01Signer, Nip59 } from "@welshman/signer";
6
- import { repository, tracker } from "./core.js";
7
- import { pubkey, signer, wrapManager } from "./session.js";
8
- export class Thunk {
9
- options;
6
+ import { Network } from "./network.js";
7
+ import { addMinimalFallbacks } from "@welshman/router";
8
+ import { Router } from "./router.js";
9
+ import { User } from "../user.js";
10
+ /**
11
+ * Shared base for `Thunk` and `MergedThunk`: a subscribable bag of per-relay
12
+ * publish `results`.
13
+ */
14
+ export class BaseThunk {
10
15
  _subs = [];
11
- pubkey;
12
- signer;
13
- event;
14
16
  results = {};
17
+ _notify() {
18
+ for (const subscriber of this._subs) {
19
+ subscriber(this);
20
+ }
21
+ }
22
+ subscribe(subscriber) {
23
+ this._subs.push(subscriber);
24
+ subscriber(this);
25
+ return () => {
26
+ this._subs = remove(subscriber, this._subs);
27
+ };
28
+ }
29
+ getUrlsWithStatus(statuses) {
30
+ const matches = ensurePlural(statuses);
31
+ return Object.entries(this.results)
32
+ .filter(([_, { status }]) => matches.includes(status))
33
+ .map(nth(0));
34
+ }
35
+ getCompleteUrls() {
36
+ return this.getUrlsWithStatus(without([PublishStatus.Sending, PublishStatus.Pending], Object.values(PublishStatus)));
37
+ }
38
+ getIncompleteUrls() {
39
+ return this.getUrlsWithStatus([PublishStatus.Sending, PublishStatus.Pending]);
40
+ }
41
+ getFailedUrls() {
42
+ return this.getUrlsWithStatus([PublishStatus.Failure, PublishStatus.Timeout]);
43
+ }
44
+ hasStatus(statuses) {
45
+ return this.getUrlsWithStatus(statuses).length > 0;
46
+ }
47
+ isComplete() {
48
+ return !this.hasStatus([PublishStatus.Sending, PublishStatus.Pending]);
49
+ }
50
+ getError() {
51
+ for (const [_, { status, detail }] of Object.entries(this.results)) {
52
+ if (status === PublishStatus.Failure) {
53
+ return detail;
54
+ }
55
+ }
56
+ if (this.isComplete()) {
57
+ return "";
58
+ }
59
+ }
60
+ waitForError() {
61
+ return new Promise(resolve => {
62
+ this.subscribe(thunk => {
63
+ const error = thunk.getError();
64
+ if (error !== undefined) {
65
+ resolve(error);
66
+ }
67
+ });
68
+ });
69
+ }
70
+ waitForCompletion() {
71
+ return new Promise(resolve => {
72
+ this.subscribe(thunk => {
73
+ if (thunk.isComplete()) {
74
+ resolve();
75
+ }
76
+ });
77
+ });
78
+ }
79
+ }
80
+ export class Thunk extends BaseThunk {
81
+ options;
82
+ event;
15
83
  complete = defer();
16
84
  controller = new AbortController();
17
85
  wrap;
18
86
  constructor(options) {
87
+ super();
19
88
  this.options = options;
20
89
  if (!options.recipient && WRAPPED_KINDS.includes(options.event.kind)) {
21
90
  throw new Error(`Attempted to publish a kind ${options.event.kind} without wrapping it`);
22
91
  }
23
- const $pubkey = pubkey.get();
24
- if (!$pubkey) {
25
- throw new Error(`Attempted to publish an event without an active pubkey`);
26
- }
27
- const $signer = signer.get();
28
- if (!$signer) {
29
- throw new Error(`Attempted to publish an event without an active signer`);
30
- }
31
- this.pubkey = $pubkey;
32
- this.signer = $signer;
33
- this.event = prep(options.event, this.pubkey);
92
+ this.event = prep(options.event, this.user.pubkey);
34
93
  for (const relay of options.relays) {
35
94
  this.results[relay] = {
36
95
  relay,
@@ -48,10 +107,8 @@ export class Thunk {
48
107
  }
49
108
  });
50
109
  }
51
- _notify() {
52
- for (const subscriber of this._subs) {
53
- subscriber(this);
54
- }
110
+ get user() {
111
+ return User.require(this.options.app);
55
112
  }
56
113
  _fail(detail) {
57
114
  for (const relay of this.options.relays) {
@@ -88,7 +145,7 @@ export class Thunk {
88
145
  return;
89
146
  }
90
147
  // Send it off
91
- await publish({
148
+ await this.options.app.use(Network).publish({
92
149
  ...this.options,
93
150
  event,
94
151
  onSuccess: (result) => {
@@ -97,21 +154,17 @@ export class Thunk {
97
154
  this._notify();
98
155
  },
99
156
  onFailure: (result) => {
100
- tracker.removeRelay(event.id, result.relay);
101
157
  this.options.onFailure?.(result);
102
158
  this.results[result.relay] = result;
103
159
  this._notify();
104
160
  },
105
161
  onPending: this._setPending,
106
- onTimeout: (result) => {
107
- tracker.removeRelay(event.id, result.relay);
108
- this._setTimeout(result);
109
- },
110
- onAborted: (result) => {
111
- tracker.removeRelay(event.id, result.relay);
112
- this._setAborted(result);
113
- },
162
+ onTimeout: this._setTimeout,
163
+ onAborted: this._setAborted,
114
164
  onComplete: (result) => {
165
+ if (result.status !== PublishStatus.Success) {
166
+ this.options.app.tracker.removeRelay(event.id, result.relay);
167
+ }
115
168
  this.options.onComplete?.(result);
116
169
  this._subs = [];
117
170
  },
@@ -127,7 +180,7 @@ export class Thunk {
127
180
  // If we're sending it privately, wrap the event using nip 59
128
181
  if (recipient) {
129
182
  const wrapper = Nip01Signer.ephemeral();
130
- const nip59 = new Nip59(this.signer, wrapper);
183
+ const nip59 = new Nip59(this.user.signer, wrapper);
131
184
  this.wrap = await nip59.wrap(recipient, this.event);
132
185
  // If we're calculating pow, update the hash and re-sign
133
186
  if (this.options.pow) {
@@ -135,7 +188,7 @@ export class Thunk {
135
188
  signal: AbortSignal.timeout(30_000),
136
189
  });
137
190
  }
138
- wrapManager.add({ recipient, wrap: this.wrap, rumor: this.event });
191
+ this.options.app.wrapManager.add({ recipient, wrap: this.wrap, rumor: this.event });
139
192
  return this._publish(this.wrap);
140
193
  }
141
194
  // If the event has been signed, we're good to go
@@ -151,18 +204,18 @@ export class Thunk {
151
204
  if (this.options.pow) {
152
205
  this.event = await makePow(this.event, this.options.pow).result;
153
206
  }
154
- const signedEvent = await this.signer.sign(this.event, {
207
+ const signedEvent = await this.user.signer.sign(this.event, {
155
208
  signal: AbortSignal.timeout(30_000),
156
209
  });
157
210
  // Update tracker and repository with the signed event since the id will have changed
158
211
  if (this.options.pow) {
159
212
  for (const url of this.options.relays) {
160
- tracker.removeRelay(this.event.id, url);
161
- tracker.track(signedEvent.id, url);
213
+ this.options.app.tracker.removeRelay(this.event.id, url);
214
+ this.options.app.tracker.track(signedEvent.id, url);
162
215
  }
163
216
  }
164
- repository.removeEvent(this.event.id);
165
- repository.publish(signedEvent);
217
+ this.options.app.repository.removeEvent(this.event.id);
218
+ this.options.app.repository.publish(signedEvent);
166
219
  return this._publish(signedEvent);
167
220
  }
168
221
  catch (e) {
@@ -170,144 +223,101 @@ export class Thunk {
170
223
  return this._fail(String(e || "Failed to sign event"));
171
224
  }
172
225
  }
173
- enqueue() {
174
- thunkQueue.push(this);
175
- for (const url of this.options.relays) {
176
- tracker.track(this.event.id, url);
177
- }
178
- repository.publish(this.event);
179
- thunks.update($thunks => append(this, $thunks));
180
- this.controller.signal.addEventListener("abort", () => {
181
- if (this.wrap) {
182
- wrapManager.remove(this.wrap.id);
183
- }
184
- else {
185
- repository.removeEvent(this.event.id);
186
- }
187
- thunks.update($thunks => remove(this, $thunks));
188
- });
189
- }
190
- subscribe(subscriber) {
191
- this._subs.push(subscriber);
192
- subscriber(this);
193
- return () => {
194
- this._subs = remove(subscriber, this._subs);
195
- };
226
+ abort() {
227
+ this.controller.abort();
196
228
  }
197
229
  }
198
- export class MergedThunk {
230
+ export class MergedThunk extends BaseThunk {
199
231
  thunks;
200
- _subs = [];
201
- results = {};
202
232
  constructor(thunks) {
233
+ super();
203
234
  this.thunks = thunks;
204
235
  const { Aborted, Failure, Timeout, Pending, Sending, Success } = PublishStatus;
205
236
  const relays = new Set(thunks.flatMap(thunk => thunk.options.relays));
206
237
  for (const thunk of thunks) {
207
- thunk.subscribe($thunk => {
238
+ thunk.subscribe(() => {
208
239
  this.results = {};
209
240
  for (const relay of relays) {
210
241
  for (const status of [Aborted, Failure, Timeout, Pending, Sending, Success]) {
211
- const thunk = thunks.find(t => t.results[relay]?.status === status);
212
- if (thunk) {
213
- this.results[relay] = thunk.results[relay];
242
+ const match = thunks.find(t => t.results[relay]?.status === status);
243
+ if (match) {
244
+ this.results[relay] = match.results[relay];
214
245
  }
215
246
  }
216
247
  }
217
248
  this._notify();
218
- if (thunks.every(thunkIsComplete)) {
249
+ if (thunks.every(t => t.isComplete())) {
219
250
  this._subs = [];
220
251
  }
221
252
  });
222
253
  }
223
254
  }
224
- _notify() {
225
- for (const subscriber of this._subs) {
226
- subscriber(this);
227
- }
228
- }
229
- subscribe(subscriber) {
230
- this._subs.push(subscriber);
231
- subscriber(this);
232
- return () => {
233
- this._subs = remove(subscriber, this._subs);
234
- };
255
+ abort() {
256
+ this.thunks.forEach(thunk => thunk.abort());
235
257
  }
236
258
  }
237
- export const isThunk = (thunk) => thunk instanceof Thunk;
238
- export const isMergedThunk = (thunk) => thunk instanceof MergedThunk;
239
- // Thunk status urls
240
- export const getThunkUrlsWithStatus = (statuses, thunk) => {
241
- statuses = ensurePlural(statuses);
242
- return Object.entries(thunk.results)
243
- .filter(([_, { status }]) => statuses.includes(status))
244
- .map(nth(0));
245
- };
246
- export const getCompleteThunkUrls = (thunk) => getThunkUrlsWithStatus(without([PublishStatus.Sending, PublishStatus.Pending], Object.values(PublishStatus)), thunk);
247
- export const getIncompleteThunkUrls = (thunk) => getThunkUrlsWithStatus([PublishStatus.Sending, PublishStatus.Pending], thunk);
248
- export const getFailedThunkUrls = (thunk) => getThunkUrlsWithStatus([PublishStatus.Failure, PublishStatus.Timeout], thunk);
249
- // Thunk status checks
250
- export const thunkHasStatus = (statuses, thunk) => getThunkUrlsWithStatus(statuses, thunk).length > 0;
251
- export const thunkIsComplete = (thunk) => !thunkHasStatus([PublishStatus.Sending, PublishStatus.Pending], thunk);
252
- // Thunk errors
253
- export const getThunkError = (thunk) => {
254
- for (const [_, { status, detail }] of Object.entries(thunk.results)) {
255
- if (status === PublishStatus.Failure) {
256
- return detail;
257
- }
258
- }
259
- if (thunkIsComplete(thunk)) {
260
- return "";
261
- }
262
- };
263
- // Thunk utilities that return promises
264
- export const waitForThunkError = (thunk) => new Promise(resolve => {
265
- thunk.subscribe($thunk => {
266
- const error = getThunkError($thunk);
267
- if (error !== undefined) {
268
- resolve(error);
269
- }
259
+ /**
260
+ * Per-app thunk manager — the publish-side counterpart of `Network`. Owns
261
+ * the app's optimistic-publish `history` store and the `queue` that paces
262
+ * publishing. Reach it via `app.use(Thunks)`; `publish` fills in the app
263
+ * (the acting user is derived from it), enqueues the thunk (optimistically
264
+ * writing it to the repository), and returns it.
265
+ */
266
+ export class Thunks {
267
+ app;
268
+ history = writable([]);
269
+ queue = new TaskQueue({
270
+ batchSize: 10,
271
+ batchDelay: 100,
272
+ processItem: (thunk) => {
273
+ thunk.publish();
274
+ },
270
275
  });
271
- });
272
- export const waitForThunkCompletion = (thunk) => new Promise(resolve => {
273
- thunk.subscribe($thunk => {
274
- if (thunkIsComplete($thunk)) {
275
- resolve();
276
+ constructor(app) {
277
+ this.app = app;
278
+ }
279
+ enqueue(thunk) {
280
+ this.queue.push(thunk);
281
+ for (const url of thunk.options.relays) {
282
+ this.app.tracker.track(thunk.event.id, url);
276
283
  }
284
+ this.app.repository.publish(thunk.event);
285
+ this.history.update($history => append(thunk, $history));
286
+ thunk.controller.signal.addEventListener("abort", () => {
287
+ if (thunk.wrap) {
288
+ this.app.wrapManager.remove(thunk.wrap.id);
289
+ }
290
+ else {
291
+ this.app.repository.removeEvent(thunk.event.id);
292
+ }
293
+ this.history.update($history => remove(thunk, $history));
294
+ });
295
+ }
296
+ publish = (options) => {
297
+ const thunk = new Thunk({ ...options, app: this.app });
298
+ this.enqueue(thunk);
299
+ return thunk;
300
+ };
301
+ // Publish as the user to their outbox (write) relays
302
+ publishToOutbox = (options) => this.publish({
303
+ ...options,
304
+ relays: this.app.use(Router).FromUser().policy(addMinimalFallbacks).getUrls(),
277
305
  });
278
- });
279
- // Thunk state
280
- export const thunks = writable([]);
281
- export const thunkQueue = new TaskQueue({
282
- batchSize: 10,
283
- batchDelay: 100,
284
- processItem: (thunk) => {
285
- thunk.publish();
286
- },
287
- });
288
- // Other thunk utilities
289
- export const mergeThunks = (thunks) => new MergedThunk(Array.from(flattenThunks(thunks)));
290
- export function* flattenThunks(thunks) {
291
- for (const thunk of thunks) {
292
- if (isMergedThunk(thunk)) {
293
- yield* flattenThunks(thunk.thunks);
294
- }
295
- else {
296
- yield thunk;
306
+ retry = (thunk) => thunk instanceof MergedThunk
307
+ ? new MergedThunk(thunk.thunks.map(t => this.publish(t.options)))
308
+ : this.publish(thunk.options);
309
+ merge(thunks) {
310
+ return new MergedThunk(Array.from(this.flatten(thunks)));
311
+ }
312
+ *flatten(thunks) {
313
+ for (const thunk of thunks) {
314
+ if (thunk instanceof MergedThunk) {
315
+ yield* this.flatten(thunk.thunks);
316
+ }
317
+ else if (thunk instanceof Thunk) {
318
+ yield thunk;
319
+ }
297
320
  }
298
321
  }
299
322
  }
300
- export const publishThunk = (options) => {
301
- const thunk = new Thunk(options);
302
- thunk.enqueue();
303
- return thunk;
304
- };
305
- export const abortThunk = (thunk) => {
306
- for (const child of flattenThunks([thunk])) {
307
- child.controller.abort();
308
- }
309
- };
310
- export const retryThunk = (thunk) => isMergedThunk(thunk)
311
- ? mergeThunks(thunk.thunks.map(t => publishThunk(t.options)))
312
- : publishThunk(thunk.options);
313
323
  //# sourceMappingURL=thunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thunk.js","sourceRoot":"","sources":["../../../../src/plugins/thunk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Readable } from "svelte/store";
2
+ import type { IApp } from "../app.js";
3
+ export type Topic = {
4
+ name: string;
5
+ count: number;
6
+ };
7
+ /**
8
+ * Hashtag topics with occurrence counts, derived live from the app's
9
+ * repository tag index.
10
+ */
11
+ export declare class Topics {
12
+ readonly app: IApp;
13
+ byName: Readable<Map<string, Topic>>;
14
+ all: Readable<Topic[]>;
15
+ constructor(app: IApp);
16
+ }
17
+ //# sourceMappingURL=topics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.d.ts","sourceRoot":"","sources":["../../../../src/plugins/topics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAA;AAK1C,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAEnC,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;GAGG;AACH,qBAAa,MAAM;IAIL,QAAQ,CAAC,GAAG,EAAE,IAAI;IAH9B,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IACpC,GAAG,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;gBAED,GAAG,EAAE,IAAI;CAsC/B"}