@welshman/app 0.1.1 → 0.2.0

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 (402) hide show
  1. package/LICENSE +21 -0
  2. package/dist/app/src/commands.d.ts +7 -0
  3. package/dist/app/src/commands.d.ts.map +1 -0
  4. package/{build → dist/app}/src/commands.js +13 -7
  5. package/dist/app/src/commands.js.map +1 -0
  6. package/{build → dist/app}/src/context.d.ts +1 -0
  7. package/dist/app/src/context.d.ts.map +1 -0
  8. package/dist/app/src/context.js.map +1 -0
  9. package/{build → dist/app}/src/core.d.ts +3 -1
  10. package/dist/app/src/core.d.ts.map +1 -0
  11. package/{build → dist/app}/src/core.js +4 -18
  12. package/dist/app/src/core.js.map +1 -0
  13. package/dist/app/src/feeds.d.ts +9 -0
  14. package/dist/app/src/feeds.d.ts.map +1 -0
  15. package/dist/app/src/feeds.js +41 -0
  16. package/dist/app/src/feeds.js.map +1 -0
  17. package/dist/app/src/follows.d.ts +4 -0
  18. package/dist/app/src/follows.d.ts.map +1 -0
  19. package/dist/app/src/follows.js +16 -0
  20. package/dist/app/src/follows.js.map +1 -0
  21. package/{build → dist/app}/src/handles.d.ts +3 -3
  22. package/dist/app/src/handles.d.ts.map +1 -0
  23. package/{build → dist/app}/src/handles.js +6 -4
  24. package/dist/app/src/handles.js.map +1 -0
  25. package/{build → dist/app}/src/index.d.ts +2 -3
  26. package/dist/app/src/index.d.ts.map +1 -0
  27. package/dist/app/src/index.js +63 -0
  28. package/dist/app/src/index.js.map +1 -0
  29. package/dist/app/src/mutes.d.ts +4 -0
  30. package/dist/app/src/mutes.d.ts.map +1 -0
  31. package/{build → dist/app}/src/mutes.js +3 -11
  32. package/dist/app/src/mutes.js.map +1 -0
  33. package/dist/app/src/pins.d.ts +4 -0
  34. package/dist/app/src/pins.d.ts.map +1 -0
  35. package/dist/app/src/pins.js +16 -0
  36. package/dist/app/src/pins.js.map +1 -0
  37. package/{build → dist/app}/src/plaintext.d.ts +1 -0
  38. package/dist/app/src/plaintext.d.ts.map +1 -0
  39. package/dist/app/src/plaintext.js.map +1 -0
  40. package/{build → dist/app}/src/profiles.d.ts +3 -3
  41. package/dist/app/src/profiles.d.ts.map +1 -0
  42. package/dist/app/src/profiles.js +21 -0
  43. package/dist/app/src/profiles.js.map +1 -0
  44. package/dist/app/src/relaySelections.d.ts +15 -0
  45. package/dist/app/src/relaySelections.d.ts.map +1 -0
  46. package/dist/app/src/relaySelections.js +53 -0
  47. package/dist/app/src/relaySelections.js.map +1 -0
  48. package/{build → dist/app}/src/relays.d.ts +3 -1
  49. package/dist/app/src/relays.d.ts.map +1 -0
  50. package/{build → dist/app}/src/relays.js +41 -14
  51. package/dist/app/src/relays.js.map +1 -0
  52. package/{build → dist/app}/src/search.d.ts +1 -0
  53. package/dist/app/src/search.d.ts.map +1 -0
  54. package/{build → dist/app}/src/search.js +1 -1
  55. package/dist/app/src/search.js.map +1 -0
  56. package/{build → dist/app}/src/session.d.ts +26 -7
  57. package/dist/app/src/session.d.ts.map +1 -0
  58. package/{build → dist/app}/src/session.js +50 -3
  59. package/dist/app/src/session.js.map +1 -0
  60. package/dist/app/src/storage.d.ts +22 -0
  61. package/dist/app/src/storage.d.ts.map +1 -0
  62. package/dist/app/src/storage.js +80 -0
  63. package/dist/app/src/storage.js.map +1 -0
  64. package/dist/app/src/storageAdapters.d.ts +88 -0
  65. package/dist/app/src/storageAdapters.d.ts.map +1 -0
  66. package/dist/app/src/storageAdapters.js +174 -0
  67. package/dist/app/src/storageAdapters.js.map +1 -0
  68. package/{build → dist/app}/src/sync.d.ts +1 -0
  69. package/dist/app/src/sync.d.ts.map +1 -0
  70. package/{build → dist/app}/src/sync.js +7 -9
  71. package/dist/app/src/sync.js.map +1 -0
  72. package/{build → dist/app}/src/tags.d.ts +1 -0
  73. package/dist/app/src/tags.d.ts.map +1 -0
  74. package/{build → dist/app}/src/tags.js +11 -11
  75. package/dist/app/src/tags.js.map +1 -0
  76. package/dist/app/src/thunk.d.ts +48 -0
  77. package/dist/app/src/thunk.d.ts.map +1 -0
  78. package/dist/app/src/thunk.js +225 -0
  79. package/dist/app/src/thunk.js.map +1 -0
  80. package/{build → dist/app}/src/topics.d.ts +1 -0
  81. package/dist/app/src/topics.d.ts.map +1 -0
  82. package/dist/app/src/topics.js.map +1 -0
  83. package/{build → dist/app}/src/user.d.ts +1 -0
  84. package/dist/app/src/user.d.ts.map +1 -0
  85. package/dist/app/src/user.js.map +1 -0
  86. package/{build → dist/app}/src/util.d.ts +1 -0
  87. package/dist/app/src/util.d.ts.map +1 -0
  88. package/dist/app/src/util.js.map +1 -0
  89. package/{build → dist/app}/src/wot.d.ts +1 -0
  90. package/dist/app/src/wot.d.ts.map +1 -0
  91. package/dist/app/src/wot.js.map +1 -0
  92. package/dist/app/src/zappers.d.ts +6 -0
  93. package/dist/app/src/zappers.d.ts.map +1 -0
  94. package/{build → dist/app}/src/zappers.js +3 -3
  95. package/dist/app/src/zappers.js.map +1 -0
  96. package/dist/dvm/src/handler.d.ts +30 -0
  97. package/dist/dvm/src/handler.d.ts.map +1 -0
  98. package/dist/dvm/src/handler.js +84 -0
  99. package/dist/dvm/src/handler.js.map +1 -0
  100. package/dist/dvm/src/index.d.ts +3 -0
  101. package/dist/dvm/src/index.d.ts.map +1 -0
  102. package/dist/dvm/src/index.js +3 -0
  103. package/dist/dvm/src/index.js.map +1 -0
  104. package/dist/dvm/src/request.d.ts +14 -0
  105. package/dist/dvm/src/request.d.ts.map +1 -0
  106. package/dist/dvm/src/request.js +29 -0
  107. package/dist/dvm/src/request.js.map +1 -0
  108. package/dist/feeds/src/compiler.d.ts +49 -0
  109. package/dist/feeds/src/compiler.d.ts.map +1 -0
  110. package/dist/feeds/src/compiler.js +246 -0
  111. package/dist/feeds/src/compiler.js.map +1 -0
  112. package/dist/feeds/src/controller.d.ts +23 -0
  113. package/dist/feeds/src/controller.d.ts.map +1 -0
  114. package/dist/feeds/src/controller.js +212 -0
  115. package/dist/feeds/src/controller.js.map +1 -0
  116. package/dist/feeds/src/core.d.ts +76 -0
  117. package/dist/feeds/src/core.d.ts.map +1 -0
  118. package/dist/feeds/src/core.js +28 -0
  119. package/dist/feeds/src/core.js.map +1 -0
  120. package/dist/feeds/src/display.d.ts +21 -0
  121. package/dist/feeds/src/display.d.ts.map +1 -0
  122. package/dist/feeds/src/display.js +136 -0
  123. package/dist/feeds/src/display.js.map +1 -0
  124. package/dist/feeds/src/index.d.ts +7 -0
  125. package/dist/feeds/src/index.d.ts.map +1 -0
  126. package/dist/feeds/src/index.js +7 -0
  127. package/dist/feeds/src/index.js.map +1 -0
  128. package/dist/feeds/src/request.d.ts +22 -0
  129. package/dist/feeds/src/request.d.ts.map +1 -0
  130. package/dist/feeds/src/request.js +61 -0
  131. package/dist/feeds/src/request.js.map +1 -0
  132. package/dist/feeds/src/utils.d.ts +56 -0
  133. package/dist/feeds/src/utils.d.ts.map +1 -0
  134. package/dist/feeds/src/utils.js +152 -0
  135. package/dist/feeds/src/utils.js.map +1 -0
  136. package/dist/feeds/src/validate.d.ts +24 -0
  137. package/dist/feeds/src/validate.d.ts.map +1 -0
  138. package/dist/feeds/src/validate.js +137 -0
  139. package/dist/feeds/src/validate.js.map +1 -0
  140. package/dist/lib/src/Deferred.d.ts +21 -0
  141. package/dist/lib/src/Deferred.d.ts.map +1 -0
  142. package/dist/lib/src/Deferred.js +21 -0
  143. package/dist/lib/src/Deferred.js.map +1 -0
  144. package/dist/lib/src/Emitter.d.ts +14 -0
  145. package/dist/lib/src/Emitter.d.ts.map +1 -0
  146. package/dist/lib/src/Emitter.js +18 -0
  147. package/dist/lib/src/Emitter.js.map +1 -0
  148. package/dist/lib/src/LRUCache.d.ts +42 -0
  149. package/dist/lib/src/LRUCache.d.ts.map +1 -0
  150. package/dist/lib/src/LRUCache.js +62 -0
  151. package/dist/lib/src/LRUCache.js.map +1 -0
  152. package/dist/lib/src/TaskQueue.d.ts +20 -0
  153. package/dist/lib/src/TaskQueue.d.ts.map +1 -0
  154. package/dist/lib/src/TaskQueue.js +57 -0
  155. package/dist/lib/src/TaskQueue.js.map +1 -0
  156. package/dist/lib/src/Tools.d.ts +727 -0
  157. package/dist/lib/src/Tools.d.ts.map +1 -0
  158. package/dist/lib/src/Tools.js +1224 -0
  159. package/dist/lib/src/Tools.js.map +1 -0
  160. package/dist/lib/src/index.d.ts +7 -0
  161. package/dist/lib/src/index.d.ts.map +1 -0
  162. package/dist/lib/src/index.js +7 -0
  163. package/dist/lib/src/index.js.map +1 -0
  164. package/dist/lib/src/normalize-url/index.d.ts +286 -0
  165. package/dist/lib/src/normalize-url/index.d.ts.map +1 -0
  166. package/dist/lib/src/normalize-url/index.js +252 -0
  167. package/dist/lib/src/normalize-url/index.js.map +1 -0
  168. package/dist/net/src/adapter.d.ts +44 -0
  169. package/dist/net/src/adapter.d.ts.map +1 -0
  170. package/dist/net/src/adapter.js +91 -0
  171. package/dist/net/src/adapter.js.map +1 -0
  172. package/dist/net/src/auth.d.ts +43 -0
  173. package/dist/net/src/auth.d.ts.map +1 -0
  174. package/dist/net/src/auth.js +114 -0
  175. package/dist/net/src/auth.js.map +1 -0
  176. package/dist/net/src/context.d.ts +13 -0
  177. package/dist/net/src/context.d.ts.map +1 -0
  178. package/dist/net/src/context.js +10 -0
  179. package/dist/net/src/context.js.map +1 -0
  180. package/dist/net/src/diff.d.ts +54 -0
  181. package/dist/net/src/diff.d.ts.map +1 -0
  182. package/dist/net/src/diff.js +146 -0
  183. package/dist/net/src/diff.js.map +1 -0
  184. package/dist/net/src/index.d.ts +13 -0
  185. package/dist/net/src/index.d.ts.map +1 -0
  186. package/dist/net/src/index.js +13 -0
  187. package/dist/net/src/index.js.map +1 -0
  188. package/dist/net/src/message.d.ts +60 -0
  189. package/dist/net/src/message.d.ts.map +1 -0
  190. package/dist/net/src/message.js +35 -0
  191. package/dist/net/src/message.js.map +1 -0
  192. package/dist/net/src/negentropy.d.ts +48 -0
  193. package/dist/net/src/negentropy.d.ts.map +1 -0
  194. package/dist/net/src/negentropy.js +536 -0
  195. package/dist/net/src/negentropy.js.map +1 -0
  196. package/dist/net/src/policy.d.ts +40 -0
  197. package/dist/net/src/policy.d.ts.map +1 -0
  198. package/dist/net/src/policy.js +180 -0
  199. package/dist/net/src/policy.js.map +1 -0
  200. package/dist/net/src/pool.d.ts +21 -0
  201. package/dist/net/src/pool.d.ts.map +1 -0
  202. package/dist/net/src/pool.js +67 -0
  203. package/dist/net/src/pool.js.map +1 -0
  204. package/dist/net/src/publish.d.ts +44 -0
  205. package/dist/net/src/publish.d.ts.map +1 -0
  206. package/dist/net/src/publish.js +96 -0
  207. package/dist/net/src/publish.js.map +1 -0
  208. package/dist/net/src/request.d.ts +55 -0
  209. package/dist/net/src/request.d.ts.map +1 -0
  210. package/dist/net/src/request.js +212 -0
  211. package/dist/net/src/request.js.map +1 -0
  212. package/dist/net/src/socket.d.ts +43 -0
  213. package/dist/net/src/socket.d.ts.map +1 -0
  214. package/dist/net/src/socket.js +115 -0
  215. package/dist/net/src/socket.js.map +1 -0
  216. package/dist/net/src/tracker.d.ts +16 -0
  217. package/dist/net/src/tracker.d.ts.map +1 -0
  218. package/dist/net/src/tracker.js +63 -0
  219. package/dist/net/src/tracker.js.map +1 -0
  220. package/dist/net/src/util.d.ts +2 -0
  221. package/dist/net/src/util.d.ts.map +1 -0
  222. package/dist/net/src/util.js +2 -0
  223. package/dist/net/src/util.js.map +1 -0
  224. package/dist/relay/src/index.d.ts +3 -0
  225. package/dist/relay/src/index.d.ts.map +1 -0
  226. package/dist/relay/src/index.js +3 -0
  227. package/dist/relay/src/index.js.map +1 -0
  228. package/dist/relay/src/relay.d.ts +13 -0
  229. package/dist/relay/src/relay.d.ts.map +1 -0
  230. package/dist/relay/src/relay.js +48 -0
  231. package/dist/relay/src/relay.js.map +1 -0
  232. package/dist/relay/src/repository.d.ts +63 -0
  233. package/dist/relay/src/repository.d.ts.map +1 -0
  234. package/dist/relay/src/repository.js +270 -0
  235. package/dist/relay/src/repository.js.map +1 -0
  236. package/dist/signer/src/index.d.ts +7 -0
  237. package/dist/signer/src/index.d.ts.map +1 -0
  238. package/dist/signer/src/index.js +7 -0
  239. package/dist/signer/src/index.js.map +1 -0
  240. package/dist/signer/src/nip59.d.ts +27 -0
  241. package/dist/signer/src/nip59.d.ts.map +1 -0
  242. package/dist/signer/src/nip59.js +68 -0
  243. package/dist/signer/src/nip59.js.map +1 -0
  244. package/dist/signer/src/signers/nip01.d.ts +28 -0
  245. package/dist/signer/src/signers/nip01.d.ts.map +1 -0
  246. package/dist/signer/src/signers/nip01.js +22 -0
  247. package/dist/signer/src/signers/nip01.js.map +1 -0
  248. package/dist/signer/src/signers/nip07.d.ts +23 -0
  249. package/dist/signer/src/signers/nip07.d.ts.map +1 -0
  250. package/dist/signer/src/signers/nip07.js +30 -0
  251. package/dist/signer/src/signers/nip07.js.map +1 -0
  252. package/dist/signer/src/signers/nip46.d.ts +108 -0
  253. package/dist/signer/src/signers/nip46.d.ts.map +1 -0
  254. package/dist/signer/src/signers/nip46.js +349 -0
  255. package/dist/signer/src/signers/nip46.js.map +1 -0
  256. package/dist/signer/src/signers/nip55.d.ts +19 -0
  257. package/dist/signer/src/signers/nip55.d.ts.map +1 -0
  258. package/dist/signer/src/signers/nip55.js +134 -0
  259. package/dist/signer/src/signers/nip55.js.map +1 -0
  260. package/dist/signer/src/util.d.ts +65 -0
  261. package/dist/signer/src/util.d.ts.map +1 -0
  262. package/dist/signer/src/util.js +32 -0
  263. package/dist/signer/src/util.js.map +1 -0
  264. package/dist/store/src/collection.d.ts +32 -0
  265. package/dist/store/src/collection.d.ts.map +1 -0
  266. package/{build → dist/store}/src/collection.js +33 -11
  267. package/dist/store/src/collection.js.map +1 -0
  268. package/dist/store/src/custom.d.ts +10 -0
  269. package/dist/store/src/custom.d.ts.map +1 -0
  270. package/dist/store/src/custom.js +41 -0
  271. package/dist/store/src/custom.js.map +1 -0
  272. package/dist/store/src/getter.d.ts +11 -0
  273. package/dist/store/src/getter.d.ts.map +1 -0
  274. package/dist/store/src/getter.js +11 -0
  275. package/dist/store/src/getter.js.map +1 -0
  276. package/dist/store/src/index.d.ts +7 -0
  277. package/dist/store/src/index.d.ts.map +1 -0
  278. package/dist/store/src/index.js +7 -0
  279. package/dist/store/src/index.js.map +1 -0
  280. package/dist/store/src/repository.d.ts +16 -0
  281. package/dist/store/src/repository.d.ts.map +1 -0
  282. package/dist/store/src/repository.js +100 -0
  283. package/dist/store/src/repository.js.map +1 -0
  284. package/dist/store/src/synced.d.ts +2 -0
  285. package/dist/store/src/synced.d.ts.map +1 -0
  286. package/dist/store/src/synced.js +9 -0
  287. package/dist/store/src/synced.js.map +1 -0
  288. package/dist/store/src/throttle.d.ts +3 -0
  289. package/dist/store/src/throttle.d.ts.map +1 -0
  290. package/dist/store/src/throttle.js +9 -0
  291. package/dist/store/src/throttle.js.map +1 -0
  292. package/dist/tsconfig.build.tsbuildinfo +1 -0
  293. package/dist/util/src/Address.d.ts +21 -0
  294. package/dist/util/src/Address.d.ts.map +1 -0
  295. package/dist/util/src/Address.js +43 -0
  296. package/dist/util/src/Address.js.map +1 -0
  297. package/dist/util/src/Encryptable.d.ts +34 -0
  298. package/dist/util/src/Encryptable.d.ts.map +1 -0
  299. package/dist/util/src/Encryptable.js +52 -0
  300. package/dist/util/src/Encryptable.js.map +1 -0
  301. package/dist/util/src/Events.d.ts +77 -0
  302. package/dist/util/src/Events.d.ts.map +1 -0
  303. package/dist/util/src/Events.js +63 -0
  304. package/dist/util/src/Events.js.map +1 -0
  305. package/dist/util/src/Filters.d.ts +48 -0
  306. package/dist/util/src/Filters.d.ts.map +1 -0
  307. package/dist/util/src/Filters.js +185 -0
  308. package/dist/util/src/Filters.js.map +1 -0
  309. package/dist/util/src/Handler.d.ts +17 -0
  310. package/dist/util/src/Handler.d.ts.map +1 -0
  311. package/dist/util/src/Handler.js +33 -0
  312. package/dist/util/src/Handler.js.map +1 -0
  313. package/dist/util/src/Kinds.d.ts +159 -0
  314. package/dist/util/src/Kinds.d.ts.map +1 -0
  315. package/dist/util/src/Kinds.js +160 -0
  316. package/dist/util/src/Kinds.js.map +1 -0
  317. package/dist/util/src/Links.d.ts +3 -0
  318. package/dist/util/src/Links.d.ts.map +1 -0
  319. package/dist/util/src/Links.js +3 -0
  320. package/dist/util/src/Links.js.map +1 -0
  321. package/dist/util/src/List.d.ts +34 -0
  322. package/dist/util/src/List.d.ts.map +1 -0
  323. package/dist/util/src/List.js +74 -0
  324. package/dist/util/src/List.js.map +1 -0
  325. package/dist/util/src/Profile.d.ts +26 -0
  326. package/dist/util/src/Profile.d.ts.map +1 -0
  327. package/dist/util/src/Profile.js +50 -0
  328. package/dist/util/src/Profile.js.map +1 -0
  329. package/dist/util/src/Relay.d.ts +32 -0
  330. package/dist/util/src/Relay.d.ts.map +1 -0
  331. package/dist/util/src/Relay.js +49 -0
  332. package/dist/util/src/Relay.js.map +1 -0
  333. package/dist/util/src/Tags.d.ts +32 -0
  334. package/dist/util/src/Tags.d.ts.map +1 -0
  335. package/dist/util/src/Tags.js +74 -0
  336. package/dist/util/src/Tags.js.map +1 -0
  337. package/dist/util/src/Zaps.d.ts +20 -0
  338. package/dist/util/src/Zaps.d.ts.map +1 -0
  339. package/dist/util/src/Zaps.js +93 -0
  340. package/dist/util/src/Zaps.js.map +1 -0
  341. package/dist/util/src/index.d.ts +13 -0
  342. package/dist/util/src/index.d.ts.map +1 -0
  343. package/dist/util/src/index.js +13 -0
  344. package/dist/util/src/index.js.map +1 -0
  345. package/package.json +24 -26
  346. package/README.md +0 -73
  347. package/build/src/collection.d.ts +0 -12
  348. package/build/src/collection.js.map +0 -1
  349. package/build/src/commands.d.ts +0 -42
  350. package/build/src/commands.js.map +0 -1
  351. package/build/src/context.js.map +0 -1
  352. package/build/src/core.js.map +0 -1
  353. package/build/src/feeds.d.ts +0 -10
  354. package/build/src/feeds.js +0 -93
  355. package/build/src/feeds.js.map +0 -1
  356. package/build/src/follows.d.ts +0 -4
  357. package/build/src/follows.js +0 -24
  358. package/build/src/follows.js.map +0 -1
  359. package/build/src/freshness.d.ts +0 -10
  360. package/build/src/freshness.js +0 -14
  361. package/build/src/freshness.js.map +0 -1
  362. package/build/src/handles.js.map +0 -1
  363. package/build/src/index.js +0 -27
  364. package/build/src/index.js.map +0 -1
  365. package/build/src/mutes.d.ts +0 -4
  366. package/build/src/mutes.js.map +0 -1
  367. package/build/src/pins.d.ts +0 -4
  368. package/build/src/pins.js +0 -24
  369. package/build/src/pins.js.map +0 -1
  370. package/build/src/plaintext.js.map +0 -1
  371. package/build/src/profiles.js +0 -30
  372. package/build/src/profiles.js.map +0 -1
  373. package/build/src/relaySelections.d.ts +0 -9
  374. package/build/src/relaySelections.js +0 -51
  375. package/build/src/relaySelections.js.map +0 -1
  376. package/build/src/relays.js.map +0 -1
  377. package/build/src/router.d.ts +0 -197
  378. package/build/src/router.js +0 -272
  379. package/build/src/router.js.map +0 -1
  380. package/build/src/search.js.map +0 -1
  381. package/build/src/session.js.map +0 -1
  382. package/build/src/storage.d.ts +0 -70
  383. package/build/src/storage.js +0 -187
  384. package/build/src/storage.js.map +0 -1
  385. package/build/src/sync.js.map +0 -1
  386. package/build/src/tags.js.map +0 -1
  387. package/build/src/thunk.d.ts +0 -61
  388. package/build/src/thunk.js +0 -169
  389. package/build/src/thunk.js.map +0 -1
  390. package/build/src/topics.js.map +0 -1
  391. package/build/src/user.js.map +0 -1
  392. package/build/src/util.js.map +0 -1
  393. package/build/src/wot.js.map +0 -1
  394. package/build/src/zappers.d.ts +0 -6
  395. package/build/src/zappers.js.map +0 -1
  396. package/build/tsconfig.tsbuildinfo +0 -1
  397. /package/{build → dist/app}/src/context.js +0 -0
  398. /package/{build → dist/app}/src/plaintext.js +0 -0
  399. /package/{build → dist/app}/src/topics.js +0 -0
  400. /package/{build → dist/app}/src/user.js +0 -0
  401. /package/{build → dist/app}/src/util.js +0 -0
  402. /package/{build → dist/app}/src/wot.js +0 -0
@@ -0,0 +1,65 @@
1
+ import { SignedEvent, HashedEvent, EventTemplate, StampedEvent, OwnedEvent } from "@welshman/util";
2
+ export declare const makeSecret: () => string;
3
+ export declare const getPubkey: (secret: string) => string;
4
+ export declare const getHash: (event: OwnedEvent) => string;
5
+ export declare const getSig: (event: HashedEvent, secret: string) => string;
6
+ export declare const stamp: (event: EventTemplate, created_at?: number) => {
7
+ created_at: number;
8
+ tags: string[][];
9
+ content: string;
10
+ kind: number;
11
+ };
12
+ export declare const own: (event: StampedEvent, pubkey: string) => {
13
+ pubkey: string;
14
+ tags: string[][];
15
+ content: string;
16
+ kind: number;
17
+ created_at: number;
18
+ };
19
+ export declare const hash: (event: OwnedEvent) => {
20
+ id: string;
21
+ tags: string[][];
22
+ content: string;
23
+ kind: number;
24
+ created_at: number;
25
+ pubkey: string;
26
+ };
27
+ export declare const sign: (event: HashedEvent, secret: string) => {
28
+ sig: string;
29
+ tags: string[][];
30
+ content: string;
31
+ kind: number;
32
+ created_at: number;
33
+ pubkey: string;
34
+ id: string;
35
+ };
36
+ export declare const nip04: {
37
+ detect: (m: string) => boolean;
38
+ encrypt: (pubkey: string, secret: string, m: string) => string;
39
+ decrypt: (pubkey: string, secret: string, m: string) => string;
40
+ };
41
+ export declare const nip44: {
42
+ getSharedSecret: {
43
+ (...args: string[]): Uint8Array<ArrayBufferLike>;
44
+ cache: import("@welshman/lib").LRUCache<string, Uint8Array<ArrayBufferLike>>;
45
+ getKey: (args: string[]) => string;
46
+ getValue: (args: string[]) => Uint8Array<ArrayBufferLike>;
47
+ };
48
+ encrypt: (pubkey: string, secret: string, m: string) => string;
49
+ decrypt: (pubkey: string, secret: string, m: string) => string;
50
+ };
51
+ export type Sign = (event: StampedEvent) => Promise<SignedEvent>;
52
+ export type Encrypt = (pubkey: string, message: string) => Promise<string>;
53
+ export type Decrypt = (pubkey: string, message: string) => Promise<string>;
54
+ export type EncryptionImplementation = {
55
+ encrypt: Encrypt;
56
+ decrypt: Decrypt;
57
+ };
58
+ export interface ISigner {
59
+ sign: Sign;
60
+ nip04: EncryptionImplementation;
61
+ nip44: EncryptionImplementation;
62
+ getPubkey: () => Promise<string>;
63
+ }
64
+ export declare const decrypt: (signer: ISigner, pubkey: string, message: string) => Promise<string>;
65
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../signer/src/util.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAA;AAEhG,eAAO,MAAM,UAAU,cAAwC,CAAA;AAE/D,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,WAAqC,CAAA;AAE7E,eAAO,MAAM,OAAO,GAAI,OAAO,UAAU,WAAwB,CAAA;AAEjE,eAAO,MAAM,MAAM,GAAI,OAAO,WAAW,EAAE,QAAQ,MAAM,WACb,CAAA;AAE5C,eAAO,MAAM,KAAK,GAAI,OAAO,aAAa,EAAE,mBAAkB;;;;;CAA6B,CAAA;AAE3F,eAAO,MAAM,GAAG,GAAI,OAAO,YAAY,EAAE,QAAQ,MAAM;;;;;;CAAyB,CAAA;AAEhF,eAAO,MAAM,IAAI,GAAI,OAAO,UAAU;;;;;;;CAAqC,CAAA;AAE3E,eAAO,MAAM,IAAI,GAAI,OAAO,WAAW,EAAE,QAAQ,MAAM;;;;;;;;CAA6C,CAAA;AAEpG,eAAO,MAAM,KAAK;gBACJ,MAAM;sBACA,MAAM,UAAU,MAAM,KAAK,MAAM;sBACjC,MAAM,UAAU,MAAM,KAAK,MAAM;CACpD,CAAA;AAED,eAAO,MAAM,KAAK;;;;;;;sBAOE,MAAM,UAAU,MAAM,KAAK,MAAM;sBAEjC,MAAM,UAAU,MAAM,KAAK,MAAM;CAEpD,CAAA;AAED,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;AAEhE,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAE1E,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAE1E,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,wBAAwB,CAAA;IAC/B,KAAK,EAAE,wBAAwB,CAAA;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CACjC;AAED,eAAO,MAAM,OAAO,GAAU,QAAQ,OAAO,EAAE,QAAQ,MAAM,EAAE,SAAS,MAAM,oBAGnC,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { schnorr } from "@noble/curves/secp256k1";
2
+ import { bytesToHex, hexToBytes } from "@noble/hashes/utils";
3
+ import * as nt04 from "nostr-tools/nip04";
4
+ import * as nt44 from "nostr-tools/nip44";
5
+ import { generateSecretKey, getPublicKey, getEventHash } from "nostr-tools/pure";
6
+ import { cached, now } from "@welshman/lib";
7
+ export const makeSecret = () => bytesToHex(generateSecretKey());
8
+ export const getPubkey = (secret) => getPublicKey(hexToBytes(secret));
9
+ export const getHash = (event) => getEventHash(event);
10
+ export const getSig = (event, secret) => bytesToHex(schnorr.sign(event.id, secret));
11
+ export const stamp = (event, created_at = now()) => ({ ...event, created_at });
12
+ export const own = (event, pubkey) => ({ ...event, pubkey });
13
+ export const hash = (event) => ({ ...event, id: getHash(event) });
14
+ export const sign = (event, secret) => ({ ...event, sig: getSig(event, secret) });
15
+ export const nip04 = {
16
+ detect: (m) => m.includes("?iv="),
17
+ encrypt: (pubkey, secret, m) => nt04.encrypt(secret, pubkey, m),
18
+ decrypt: (pubkey, secret, m) => nt04.decrypt(secret, pubkey, m),
19
+ };
20
+ export const nip44 = {
21
+ getSharedSecret: cached({
22
+ maxSize: 10000,
23
+ getKey: ([secret, pubkey]) => `${secret}:${pubkey}`,
24
+ getValue: ([secret, pubkey]) => nt44.v2.utils.getConversationKey(hexToBytes(secret), pubkey),
25
+ }),
26
+ encrypt: (pubkey, secret, m) => nt44.v2.encrypt(m, nip44.getSharedSecret(secret, pubkey)),
27
+ decrypt: (pubkey, secret, m) => nt44.v2.decrypt(m, nip44.getSharedSecret(secret, pubkey)),
28
+ };
29
+ export const decrypt = async (signer, pubkey, message) => nip04.detect(message)
30
+ ? signer.nip04.decrypt(pubkey, message)
31
+ : signer.nip44.decrypt(pubkey, message);
32
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../signer/src/util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Readable, Subscriber } from "svelte/store";
2
+ import { ReadableWithGetter } from "./getter.js";
3
+ export type FreshnessUpdate = {
4
+ ns: string;
5
+ key: string;
6
+ ts: number;
7
+ };
8
+ export declare const freshness: import("./getter.js").WritableWithGetter<Record<string, number>>;
9
+ export declare const getFreshnessKey: (ns: string, key: string) => string;
10
+ export declare const getFreshness: (ns: string, key: string) => number;
11
+ export declare const setFreshnessImmediate: ({ ns, key, ts }: FreshnessUpdate) => void;
12
+ export declare const setFreshnessThrottled: (x: FreshnessUpdate) => void;
13
+ export type CachedLoaderOptions<T> = {
14
+ name: string;
15
+ indexStore: ReadableWithGetter<Map<string, T>>;
16
+ load: (key: string, relays: string[]) => Promise<any>;
17
+ subscribers?: Subscriber<T>[];
18
+ };
19
+ export declare const makeCachedLoader: <T>({ name, load, indexStore, subscribers, }: CachedLoaderOptions<T>) => (key: string, relays?: string[]) => Promise<T | undefined>;
20
+ export type CollectionOptions<T> = {
21
+ name: string;
22
+ store: Readable<T[]>;
23
+ getKey: (item: T) => string;
24
+ load: (key: string, relays: string[]) => Promise<any>;
25
+ };
26
+ export declare const collection: <T>({ name, store, getKey, load }: CollectionOptions<T>) => {
27
+ indexStore: ReadableWithGetter<Map<string, T>>;
28
+ deriveItem: (key: string | undefined, relays?: string[]) => Readable<T | undefined>;
29
+ loadItem: (key: string, relays?: string[]) => Promise<T | undefined>;
30
+ onItem: (cb: Subscriber<T>) => () => void;
31
+ };
32
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../../../store/src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,QAAQ,EAAE,UAAU,EAAC,MAAM,cAAc,CAAA;AAE9E,OAAO,EAAa,kBAAkB,EAAC,MAAM,aAAa,CAAA;AAI1D,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,eAAO,MAAM,SAAS,kEAAmD,CAAA;AAEzE,eAAO,MAAM,eAAe,GAAI,IAAI,MAAM,EAAE,KAAK,MAAM,WAAmB,CAAA;AAE1E,eAAO,MAAM,YAAY,GAAI,IAAI,MAAM,EAAE,KAAK,MAAM,WACJ,CAAA;AAEhD,eAAO,MAAM,qBAAqB,GAAI,iBAAe,eAAe,SACb,CAAA;AAEvD,eAAO,MAAM,qBAAqB,8BAQjC,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IACrD,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,0CAKjC,mBAAmB,CAAC,CAAC,CAAC,MAIT,KAAK,MAAM,EAAE,SAAQ,MAAM,EAAO,2BAuDjD,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IAC3B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CACtD,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,+BAA6B,iBAAiB,CAAC,CAAC,CAAC;;sBAOpD,MAAM,GAAG,SAAS,WAAU,MAAM,EAAE;oBAvE1C,MAAM,WAAU,MAAM,EAAE;iBAmFvB,UAAU,CAAC,CAAC,CAAC;CASlC,CAAA"}
@@ -1,12 +1,20 @@
1
- import { readable, derived } from "svelte/store";
2
- import { indexBy, now } from "@welshman/lib";
3
- import { withGetter } from "@welshman/store";
4
- import { getFreshness, setFreshnessThrottled } from "./freshness.js";
5
- export const collection = ({ name, store, getKey, load, }) => {
6
- const indexStore = withGetter(derived(store, $items => indexBy(getKey, $items)));
1
+ import { readable, derived, writable } from "svelte/store";
2
+ import { batch, indexBy, remove, assoc, now } from "@welshman/lib";
3
+ import { withGetter } from "./getter.js";
4
+ export const freshness = withGetter(writable({}));
5
+ export const getFreshnessKey = (ns, key) => `${ns}:${key}`;
6
+ export const getFreshness = (ns, key) => freshness.get()[getFreshnessKey(ns, key)] || 0;
7
+ export const setFreshnessImmediate = ({ ns, key, ts }) => freshness.update(assoc(getFreshnessKey(ns, key), ts));
8
+ export const setFreshnessThrottled = batch(100, (updates) => freshness.update($freshness => {
9
+ for (const { ns, key, ts } of updates) {
10
+ $freshness[getFreshnessKey(ns, key)] = ts;
11
+ }
12
+ return $freshness;
13
+ }));
14
+ export const makeCachedLoader = ({ name, load, indexStore, subscribers = [], }) => {
7
15
  const pending = new Map();
8
16
  const loadAttempts = new Map();
9
- const loadItem = async (key, ...args) => {
17
+ return async (key, relays = []) => {
10
18
  const stale = indexStore.get().get(key);
11
19
  // If we have no loader function, nothing we can do
12
20
  if (!load) {
@@ -28,7 +36,7 @@ export const collection = ({ name, store, getKey, load, }) => {
28
36
  }
29
37
  loadAttempts.set(key, attempt + 1);
30
38
  setFreshnessThrottled({ ns: name, key, ts: now() });
31
- const promise = load(key, ...args);
39
+ const promise = load(key, relays);
32
40
  pending.set(key, promise);
33
41
  try {
34
42
  await promise;
@@ -42,18 +50,32 @@ export const collection = ({ name, store, getKey, load, }) => {
42
50
  const fresh = indexStore.get().get(key);
43
51
  if (fresh) {
44
52
  loadAttempts.delete(key);
53
+ for (const subscriber of subscribers) {
54
+ subscriber(fresh);
55
+ }
45
56
  }
46
57
  return fresh;
47
58
  };
48
- const deriveItem = (key, ...args) => {
59
+ };
60
+ export const collection = ({ name, store, getKey, load }) => {
61
+ const indexStore = withGetter(derived(store, $items => indexBy(getKey, $items)));
62
+ let subscribers = [];
63
+ const loadItem = makeCachedLoader({ name, load, indexStore, subscribers });
64
+ const deriveItem = (key, relays = []) => {
49
65
  if (!key) {
50
66
  return readable(undefined);
51
67
  }
52
68
  // If we don't yet have the item, or it's stale, trigger a request for it. The derived
53
69
  // store will update when it arrives
54
- loadItem(key, ...args);
70
+ loadItem(key, relays);
55
71
  return derived(indexStore, $index => $index.get(key));
56
72
  };
57
- return { indexStore, deriveItem, loadItem };
73
+ const onItem = (cb) => {
74
+ subscribers.push(cb);
75
+ return () => {
76
+ subscribers = remove(cb, subscribers);
77
+ };
78
+ };
79
+ return { indexStore, deriveItem, loadItem, onItem };
58
80
  };
59
81
  //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../../../../store/src/collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Subscriber, Unsubscriber } from "svelte/store";
2
+ import { WritableWithGetter } from "./getter.js";
3
+ type Start<T> = (set: Subscriber<T>) => Unsubscriber;
4
+ export type CustomStoreOpts<T> = {
5
+ throttle?: number;
6
+ set?: (x: T) => void;
7
+ };
8
+ export declare const custom: <T>(start: Start<T>, opts?: CustomStoreOpts<T>) => WritableWithGetter<T>;
9
+ export {};
10
+ //# sourceMappingURL=custom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../store/src/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,YAAY,EAAC,MAAM,cAAc,CAAA;AAErD,OAAO,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAA;AAE9C,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,YAAY,CAAA;AAEpD,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,EACtB,OAAO,KAAK,CAAC,CAAC,CAAC,EACf,OAAM,eAAe,CAAC,CAAC,CAAM,KAC5B,kBAAkB,CAAC,CAAC,CAkDtB,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { throttle } from "@welshman/lib";
2
+ export const custom = (start, opts = {}) => {
3
+ const subs = [];
4
+ let value;
5
+ let stop;
6
+ const set = (newValue) => {
7
+ for (const sub of subs) {
8
+ sub(newValue);
9
+ }
10
+ value = newValue;
11
+ };
12
+ return {
13
+ get: () => value,
14
+ set: (newValue) => {
15
+ set(newValue);
16
+ opts.set?.(newValue);
17
+ },
18
+ update: (f) => {
19
+ const newValue = f(value);
20
+ set(newValue);
21
+ opts.set?.(newValue);
22
+ },
23
+ subscribe: (sub) => {
24
+ if (opts.throttle) {
25
+ sub = throttle(opts.throttle, sub);
26
+ }
27
+ if (subs.length === 0) {
28
+ stop = start(set);
29
+ }
30
+ subs.push(sub);
31
+ sub(value);
32
+ return () => {
33
+ subs.splice(subs.findIndex(s => s === sub), 1);
34
+ if (subs.length === 0) {
35
+ stop();
36
+ }
37
+ };
38
+ },
39
+ };
40
+ };
41
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../../store/src/custom.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AAUtC,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,KAAe,EACf,OAA2B,EAAE,EACN,EAAE;IACzB,MAAM,IAAI,GAAoB,EAAE,CAAA;IAEhC,IAAI,KAAQ,CAAA;IACZ,IAAI,IAAgB,CAAA;IAEpB,MAAM,GAAG,GAAG,CAAC,QAAW,EAAE,EAAE;QAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,QAAQ,CAAC,CAAA;QACf,CAAC;QAED,KAAK,GAAG,QAAQ,CAAA;IAClB,CAAC,CAAA;IAED,OAAO;QACL,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK;QAChB,GAAG,EAAE,CAAC,QAAW,EAAE,EAAE;YACnB,GAAG,CAAC,QAAQ,CAAC,CAAA;YACb,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAA;QACtB,CAAC;QACD,MAAM,EAAE,CAAC,CAAkB,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;YAEzB,GAAG,CAAC,QAAQ,CAAC,CAAA;YACb,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAA;QACtB,CAAC;QACD,SAAS,EAAE,CAAC,GAAkB,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACpC,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YACnB,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACd,GAAG,CAAC,KAAK,CAAC,CAAA;YAEV,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,MAAM,CACT,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,EAC9B,CAAC,CACF,CAAA;gBAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtB,IAAI,EAAE,CAAA;gBACR,CAAC;YACH,CAAC,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { Readable, Writable } from "svelte/store";
2
+ export declare const getter: <T>(store: Readable<T>) => () => T;
3
+ export type WritableWithGetter<T> = Writable<T> & {
4
+ get: () => T;
5
+ };
6
+ export type ReadableWithGetter<T> = Readable<T> & {
7
+ get: () => T;
8
+ };
9
+ export declare function withGetter<T>(store: Writable<T>): WritableWithGetter<T>;
10
+ export declare function withGetter<T>(store: Readable<T>): ReadableWithGetter<T>;
11
+ //# sourceMappingURL=getter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getter.d.ts","sourceRoot":"","sources":["../../../../store/src/getter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,MAAM,cAAc,CAAA;AAE/C,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,YAQ3C,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC,CAAA;CAAC,CAAA;AAChE,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC,CAAA;CAAC,CAAA;AAEhE,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;AACxE,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ export const getter = (store) => {
2
+ let value;
3
+ store.subscribe((newValue) => {
4
+ value = newValue;
5
+ });
6
+ return () => value;
7
+ };
8
+ export function withGetter(store) {
9
+ return { ...store, get: getter(store) };
10
+ }
11
+ //# sourceMappingURL=getter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getter.js","sourceRoot":"","sources":["../../../../store/src/getter.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,KAAkB,EAAE,EAAE;IAC9C,IAAI,KAAQ,CAAA;IAEZ,KAAK,CAAC,SAAS,CAAC,CAAC,QAAW,EAAE,EAAE;QAC9B,KAAK,GAAG,QAAQ,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,EAAE,CAAC,KAAK,CAAA;AACpB,CAAC,CAAA;AAOD,MAAM,UAAU,UAAU,CAAI,KAAgC;IAC5D,OAAO,EAAC,GAAG,KAAK,EAAE,GAAG,EAAE,MAAM,CAAI,KAAK,CAAC,EAAC,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from "./synced.js";
2
+ export * from "./getter.js";
3
+ export * from "./throttle.js";
4
+ export * from "./custom.js";
5
+ export * from "./repository.js";
6
+ export * from "./collection.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../store/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,7 @@
1
+ export * from "./synced.js";
2
+ export * from "./getter.js";
3
+ export * from "./throttle.js";
4
+ export * from "./custom.js";
5
+ export * from "./repository.js";
6
+ export * from "./collection.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../store/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { Repository } from "@welshman/relay";
2
+ import { Filter, TrustedEvent } from "@welshman/util";
3
+ export type DeriveEventsMappedOptions<T> = {
4
+ filters: Filter[];
5
+ eventToItem: (event: TrustedEvent) => T | T[] | Promise<T | T[]> | undefined;
6
+ itemToEvent: (item: T) => TrustedEvent;
7
+ throttle?: number;
8
+ includeDeleted?: boolean;
9
+ };
10
+ export declare const deriveEventsMapped: <T>(repository: Repository, { filters, eventToItem, itemToEvent, throttle, includeDeleted, }: DeriveEventsMappedOptions<T>) => import("./getter.js").WritableWithGetter<T[]>;
11
+ export type DeriveEventsOptions<T> = Omit<DeriveEventsMappedOptions<T>, "itemToEvent" | "eventToItem">;
12
+ export declare const deriveEvents: <T>(repository: Repository, opts: DeriveEventsOptions<T>) => import("./getter.js").WritableWithGetter<TrustedEvent[]>;
13
+ export declare const deriveEvent: (repository: Repository, idOrAddress: string) => import("svelte/store").Readable<TrustedEvent | undefined>;
14
+ export declare const deriveIsDeleted: (repository: Repository, event: TrustedEvent) => import("./getter.js").WritableWithGetter<boolean>;
15
+ export declare const deriveIsDeletedByAddress: (repository: Repository, event: TrustedEvent) => import("./getter.js").WritableWithGetter<boolean>;
16
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../store/src/repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAA8C,MAAM,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAGhG,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI;IACzC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;IAC5E,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,YAAY,CAAA;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAClC,YAAY,UAAU,EACtB,kEAMG,yBAAyB,CAAC,CAAC,CAAC,kDAkG9B,CAAA;AAEH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,IAAI,CACvC,yBAAyB,CAAC,CAAC,CAAC,EAC5B,aAAa,GAAG,aAAa,CAC9B,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,YAAY,UAAU,EAAE,MAAM,mBAAmB,CAAC,CAAC,CAAC,6DAKhF,CAAA;AAEJ,eAAO,MAAM,WAAW,GAAI,YAAY,UAAU,EAAE,aAAa,MAAM,8DAOpE,CAAA;AAEH,eAAO,MAAM,eAAe,GAAI,YAAY,UAAU,EAAE,OAAO,YAAY,sDASvE,CAAA;AAEJ,eAAO,MAAM,wBAAwB,GAAI,YAAY,UAAU,EAAE,OAAO,YAAY,sDAShF,CAAA"}
@@ -0,0 +1,100 @@
1
+ import { derived } from "svelte/store";
2
+ import { identity, ensurePlural, batch, partition, first } from "@welshman/lib";
3
+ import { matchFilters, getIdAndAddress, getIdFilters } from "@welshman/util";
4
+ import { custom } from "./custom.js";
5
+ export const deriveEventsMapped = (repository, { filters, eventToItem, itemToEvent, throttle = 0, includeDeleted = false, }) => custom(setter => {
6
+ let data = [];
7
+ const deferred = new Set();
8
+ const defer = (event, promise) => {
9
+ deferred.add(event.id);
10
+ void promise.then(items => {
11
+ if (deferred.has(event.id)) {
12
+ deferred.delete(event.id);
13
+ for (const item of ensurePlural(items)) {
14
+ data.push(item);
15
+ }
16
+ setter(data);
17
+ }
18
+ });
19
+ };
20
+ for (const event of repository.query(filters, { includeDeleted })) {
21
+ const items = eventToItem(event);
22
+ if (!items) {
23
+ continue;
24
+ }
25
+ if (items instanceof Promise) {
26
+ defer(event, items);
27
+ }
28
+ else {
29
+ for (const item of ensurePlural(items)) {
30
+ data.push(item);
31
+ }
32
+ }
33
+ }
34
+ setter(data);
35
+ const onUpdate = batch(300, (updates) => {
36
+ const removed = new Set();
37
+ const added = new Map();
38
+ // Apply updates in order
39
+ for (const update of updates) {
40
+ for (const event of update.added.values()) {
41
+ added.set(event.id, event);
42
+ removed.delete(event.id);
43
+ }
44
+ for (const id of update.removed) {
45
+ removed.add(id);
46
+ added.delete(id);
47
+ deferred.delete(id);
48
+ }
49
+ }
50
+ let dirty = false;
51
+ for (const event of added.values()) {
52
+ if (matchFilters(filters, event)) {
53
+ const items = eventToItem(event);
54
+ if (items instanceof Promise) {
55
+ defer(event, items);
56
+ }
57
+ else if (items) {
58
+ dirty = true;
59
+ for (const item of ensurePlural(items)) {
60
+ data.push(item);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ if (!includeDeleted && removed.size > 0) {
66
+ const [deleted, ok] = partition((item) => getIdAndAddress(itemToEvent(item)).some((id) => removed.has(id)), data);
67
+ if (deleted.length > 0) {
68
+ dirty = true;
69
+ data = ok;
70
+ }
71
+ }
72
+ if (dirty) {
73
+ setter(data);
74
+ }
75
+ });
76
+ repository.on("update", onUpdate);
77
+ return () => repository.off("update", onUpdate);
78
+ }, { throttle });
79
+ export const deriveEvents = (repository, opts) => deriveEventsMapped(repository, {
80
+ ...opts,
81
+ eventToItem: identity,
82
+ itemToEvent: identity,
83
+ });
84
+ export const deriveEvent = (repository, idOrAddress) => derived(deriveEvents(repository, {
85
+ filters: getIdFilters([idOrAddress]),
86
+ includeDeleted: true,
87
+ }), first);
88
+ export const deriveIsDeleted = (repository, event) => custom(setter => {
89
+ setter(repository.isDeleted(event));
90
+ const onUpdate = batch(300, () => setter(repository.isDeleted(event)));
91
+ repository.on("update", onUpdate);
92
+ return () => repository.off("update", onUpdate);
93
+ });
94
+ export const deriveIsDeletedByAddress = (repository, event) => custom(setter => {
95
+ setter(repository.isDeletedByAddress(event));
96
+ const onUpdate = batch(300, () => setter(repository.isDeletedByAddress(event)));
97
+ repository.on("update", onUpdate);
98
+ return () => repository.off("update", onUpdate);
99
+ });
100
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../store/src/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const synced: <T>(key: string, defaultValue: T) => import("svelte/store").Writable<T>;
2
+ //# sourceMappingURL=synced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synced.d.ts","sourceRoot":"","sources":["../../../../store/src/synced.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,KAAK,MAAM,EAAE,cAAc,CAAC,uCAOrD,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { writable } from "svelte/store";
2
+ import { getJson, setJson } from "@welshman/lib";
3
+ export const synced = (key, defaultValue) => {
4
+ const init = getJson(key);
5
+ const store = writable(init === undefined ? defaultValue : init);
6
+ store.subscribe((value) => setJson(key, value));
7
+ return store;
8
+ };
9
+ //# sourceMappingURL=synced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synced.js","sourceRoot":"","sources":["../../../../store/src/synced.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAA;AACrC,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,GAAW,EAAE,YAAe,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACzB,MAAM,KAAK,GAAG,QAAQ,CAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAEnE,KAAK,CAAC,SAAS,CAAC,CAAC,KAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;IAElD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Readable } from "svelte/store";
2
+ export declare const throttled: <T, S extends Readable<T>>(delay: number, store: S) => S;
3
+ //# sourceMappingURL=throttle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../../store/src/throttle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAa,MAAM,cAAc,CAAA;AAGjD,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,MAAM,EAAE,OAAO,CAAC,MAQ1E,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { throttle } from "@welshman/lib";
2
+ export const throttled = (delay, store) => {
3
+ if (delay) {
4
+ const { subscribe } = store;
5
+ store = { ...store, subscribe: (f) => subscribe(throttle(delay, f)) };
6
+ }
7
+ return store;
8
+ };
9
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../../store/src/throttle.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AAEtC,MAAM,CAAC,MAAM,SAAS,GAAG,CAA2B,KAAa,EAAE,KAAQ,EAAE,EAAE;IAC7E,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,EAAC,SAAS,EAAC,GAAG,KAAK,CAAA;QAEzB,KAAK,GAAG,EAAC,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC,CAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAC,CAAA;IACpF,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"root":["../src/commands.ts","../src/context.ts","../src/core.ts","../src/feeds.ts","../src/follows.ts","../src/handles.ts","../src/index.ts","../src/mutes.ts","../src/pins.ts","../src/plaintext.ts","../src/profiles.ts","../src/relayselections.ts","../src/relays.ts","../src/search.ts","../src/session.ts","../src/storage.ts","../src/storageadapters.ts","../src/sync.ts","../src/tags.ts","../src/thunk.ts","../src/topics.ts","../src/user.ts","../src/util.ts","../src/wot.ts","../src/zappers.ts"],"version":"5.8.2"}
@@ -0,0 +1,21 @@
1
+ type AddressableEvent = {
2
+ kind: number;
3
+ pubkey: string;
4
+ tags: string[][];
5
+ };
6
+ export declare class Address {
7
+ readonly kind: number;
8
+ readonly pubkey: string;
9
+ readonly identifier: string;
10
+ readonly relays: string[];
11
+ constructor(kind: number, pubkey: string, identifier: string, relays?: string[]);
12
+ static isAddress(address: string): boolean;
13
+ static from(address: string, relays?: string[]): Address;
14
+ static fromNaddr(naddr: string): Address;
15
+ static fromEvent(event: AddressableEvent, relays?: string[]): Address;
16
+ toString: () => string;
17
+ toNaddr: () => `naddr1${string}`;
18
+ }
19
+ export declare const getAddress: (e: AddressableEvent) => string;
20
+ export {};
21
+ //# sourceMappingURL=Address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Address.d.ts","sourceRoot":"","sources":["../../../../util/src/Address.ts"],"names":[],"mappings":"AAGA,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;CACjB,CAAA;AAED,qBAAa,OAAO;IAEhB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE;gBAHhB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAM,EAAO;IAGhC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM;IAIhC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO;IAMlD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM;IAkB9B,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,GAAE,MAAM,EAAO;IAM/D,QAAQ,eAAyD;IAEjE,OAAO,0BAA0B;CAClC;AAID,eAAO,MAAM,UAAU,GAAI,GAAG,gBAAgB,WAAoC,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { decode, naddrEncode } from "nostr-tools/nip19";
2
+ export class Address {
3
+ kind;
4
+ pubkey;
5
+ identifier;
6
+ relays;
7
+ constructor(kind, pubkey, identifier, relays = []) {
8
+ this.kind = kind;
9
+ this.pubkey = pubkey;
10
+ this.identifier = identifier;
11
+ this.relays = relays;
12
+ }
13
+ static isAddress(address) {
14
+ return Boolean(address.match(/^\d+:\w+:.*$/));
15
+ }
16
+ static from(address, relays = []) {
17
+ const [kind, pubkey, identifier = ""] = address.match(/^(\d+):(\w+):(.*)$/).slice(1);
18
+ return new Address(parseInt(kind), pubkey, identifier, relays);
19
+ }
20
+ static fromNaddr(naddr) {
21
+ let decoded;
22
+ try {
23
+ decoded = decode(naddr);
24
+ }
25
+ catch (e) {
26
+ // pass
27
+ }
28
+ if (decoded?.type !== "naddr") {
29
+ throw new Error(`Invalid naddr ${naddr}`);
30
+ }
31
+ const { kind, pubkey, identifier, relays } = decoded.data;
32
+ return new Address(kind, pubkey, identifier, relays);
33
+ }
34
+ static fromEvent(event, relays = []) {
35
+ const identifier = event.tags.find(t => t[0] === "d")?.[1] || "";
36
+ return new Address(event.kind, event.pubkey, identifier, relays);
37
+ }
38
+ toString = () => `${this.kind}:${this.pubkey}:${this.identifier}`;
39
+ toNaddr = () => naddrEncode(this);
40
+ }
41
+ // Utils
42
+ export const getAddress = (e) => Address.fromEvent(e).toString();
43
+ //# sourceMappingURL=Address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Address.js","sourceRoot":"","sources":["../../../../util/src/Address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,mBAAmB,CAAA;AASrD,MAAM,OAAO,OAAO;IAEP;IACA;IACA;IACA;IAJX,YACW,IAAY,EACZ,MAAc,EACd,UAAkB,EAClB,SAAmB,EAAE;QAHrB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAe;IAC7B,CAAC;IAEJ,MAAM,CAAC,SAAS,CAAC,OAAe;QAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,SAAmB,EAAE;QAChD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAErF,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAa;QAC5B,IAAI,OAAY,CAAA;QAEhB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,IAAI,OAAO,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,EAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC,IAAI,CAAA;QAEvD,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IACtD,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAuB,EAAE,SAAmB,EAAE;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAEhE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IAClE,CAAC;IAED,QAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAA;IAEjE,OAAO,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;CAClC;AAED,QAAQ;AAER,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA"}