@openclaw/nostr 2026.7.2-beta.4 → 2026.7.2-beta.7

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 (470) hide show
  1. package/dist/api.js +9 -6
  2. package/dist/{channel-DqbdMXMg.js → channel-O6-jXoT5.js} +21 -32
  3. package/dist/channel-plugin-api.js +1 -1
  4. package/dist/setup-api.js +1 -1
  5. package/dist/setup-plugin-api.js +1 -1
  6. package/dist/{setup-surface-ChtM-WSY.js → setup-surface-BJCFpe02.js} +8 -24
  7. package/node_modules/nostr-tools/lib/cjs/abstract-pool.js +24 -25
  8. package/node_modules/nostr-tools/lib/cjs/abstract-pool.js.map +3 -3
  9. package/node_modules/nostr-tools/lib/cjs/abstract-relay.js +14 -5
  10. package/node_modules/nostr-tools/lib/cjs/abstract-relay.js.map +2 -2
  11. package/node_modules/nostr-tools/lib/cjs/core.js +17 -1
  12. package/node_modules/nostr-tools/lib/cjs/core.js.map +3 -3
  13. package/node_modules/nostr-tools/lib/cjs/filter.js.map +1 -1
  14. package/node_modules/nostr-tools/lib/cjs/index.js +137 -127
  15. package/node_modules/nostr-tools/lib/cjs/index.js.map +4 -4
  16. package/node_modules/nostr-tools/lib/cjs/kinds.js +17 -1
  17. package/node_modules/nostr-tools/lib/cjs/kinds.js.map +3 -3
  18. package/node_modules/nostr-tools/lib/cjs/nip04.js.map +1 -1
  19. package/node_modules/nostr-tools/lib/cjs/nip10.js +20 -5
  20. package/node_modules/nostr-tools/lib/cjs/nip10.js.map +3 -3
  21. package/node_modules/nostr-tools/lib/cjs/nip13.js.map +1 -1
  22. package/node_modules/nostr-tools/lib/cjs/nip17.js +30 -23
  23. package/node_modules/nostr-tools/lib/cjs/nip17.js.map +4 -4
  24. package/node_modules/nostr-tools/lib/cjs/nip18.js +21 -14
  25. package/node_modules/nostr-tools/lib/cjs/nip18.js.map +4 -4
  26. package/node_modules/nostr-tools/lib/cjs/nip19.js.map +1 -1
  27. package/node_modules/nostr-tools/lib/cjs/nip21.js.map +1 -1
  28. package/node_modules/nostr-tools/lib/cjs/nip22.js +22 -7
  29. package/node_modules/nostr-tools/lib/cjs/nip22.js.map +3 -3
  30. package/node_modules/nostr-tools/lib/cjs/nip25.js +21 -14
  31. package/node_modules/nostr-tools/lib/cjs/nip25.js.map +4 -4
  32. package/node_modules/nostr-tools/lib/cjs/nip27.js.map +1 -1
  33. package/node_modules/nostr-tools/lib/cjs/nip28.js +21 -14
  34. package/node_modules/nostr-tools/lib/cjs/nip28.js.map +4 -4
  35. package/node_modules/nostr-tools/lib/cjs/nip29.js.map +1 -1
  36. package/node_modules/nostr-tools/lib/cjs/nip30.js.map +2 -2
  37. package/node_modules/nostr-tools/lib/cjs/nip42.js.map +2 -2
  38. package/node_modules/nostr-tools/lib/cjs/nip44.js.map +1 -1
  39. package/node_modules/nostr-tools/lib/cjs/nip45.js +22 -9
  40. package/node_modules/nostr-tools/lib/cjs/nip45.js.map +4 -4
  41. package/node_modules/nostr-tools/lib/cjs/nip46.js +76 -67
  42. package/node_modules/nostr-tools/lib/cjs/nip46.js.map +4 -4
  43. package/node_modules/nostr-tools/lib/cjs/nip47.js +25 -18
  44. package/node_modules/nostr-tools/lib/cjs/nip47.js.map +4 -4
  45. package/node_modules/nostr-tools/lib/cjs/nip57.js +23 -16
  46. package/node_modules/nostr-tools/lib/cjs/nip57.js.map +4 -4
  47. package/node_modules/nostr-tools/lib/cjs/nip58.js.map +2 -2
  48. package/node_modules/nostr-tools/lib/cjs/nip59.js +16 -7
  49. package/node_modules/nostr-tools/lib/cjs/nip59.js.map +3 -3
  50. package/node_modules/nostr-tools/lib/cjs/nip75.js.map +1 -1
  51. package/node_modules/nostr-tools/lib/cjs/nip94.js.map +1 -1
  52. package/node_modules/nostr-tools/lib/cjs/nip98.js +23 -16
  53. package/node_modules/nostr-tools/lib/cjs/nip98.js.map +4 -4
  54. package/node_modules/nostr-tools/lib/cjs/nip99.js.map +2 -2
  55. package/node_modules/nostr-tools/lib/cjs/nipb0.js +34 -16
  56. package/node_modules/nostr-tools/lib/cjs/nipb0.js.map +4 -4
  57. package/node_modules/nostr-tools/lib/cjs/nipb7.js +13 -7
  58. package/node_modules/nostr-tools/lib/cjs/nipb7.js.map +2 -2
  59. package/node_modules/nostr-tools/lib/cjs/pool.js +67 -58
  60. package/node_modules/nostr-tools/lib/cjs/pool.js.map +4 -4
  61. package/node_modules/nostr-tools/lib/cjs/pure.js +21 -14
  62. package/node_modules/nostr-tools/lib/cjs/pure.js.map +4 -4
  63. package/node_modules/nostr-tools/lib/cjs/references.js.map +1 -1
  64. package/node_modules/nostr-tools/lib/cjs/relay.js +56 -40
  65. package/node_modules/nostr-tools/lib/cjs/relay.js.map +4 -4
  66. package/node_modules/nostr-tools/lib/cjs/signer.js +21 -14
  67. package/node_modules/nostr-tools/lib/cjs/signer.js.map +4 -4
  68. package/node_modules/nostr-tools/lib/cjs/utils.js +10 -0
  69. package/node_modules/nostr-tools/lib/cjs/utils.js.map +2 -2
  70. package/node_modules/nostr-tools/lib/cjs/wasm.js +16 -2
  71. package/node_modules/nostr-tools/lib/cjs/wasm.js.map +4 -4
  72. package/node_modules/nostr-tools/lib/esm/abstract-pool.js +24 -25
  73. package/node_modules/nostr-tools/lib/esm/abstract-pool.js.map +3 -3
  74. package/node_modules/nostr-tools/lib/esm/abstract-relay.js +14 -5
  75. package/node_modules/nostr-tools/lib/esm/abstract-relay.js.map +2 -2
  76. package/node_modules/nostr-tools/lib/esm/core.js +15 -1
  77. package/node_modules/nostr-tools/lib/esm/core.js.map +3 -3
  78. package/node_modules/nostr-tools/lib/esm/filter.js.map +1 -1
  79. package/node_modules/nostr-tools/lib/esm/index.js +87 -77
  80. package/node_modules/nostr-tools/lib/esm/index.js.map +4 -4
  81. package/node_modules/nostr-tools/lib/esm/kinds.js +17 -1
  82. package/node_modules/nostr-tools/lib/esm/kinds.js.map +3 -3
  83. package/node_modules/nostr-tools/lib/esm/nip04.js.map +1 -1
  84. package/node_modules/nostr-tools/lib/esm/nip10.js +18 -5
  85. package/node_modules/nostr-tools/lib/esm/nip10.js.map +3 -3
  86. package/node_modules/nostr-tools/lib/esm/nip13.js.map +1 -1
  87. package/node_modules/nostr-tools/lib/esm/nip17.js +15 -8
  88. package/node_modules/nostr-tools/lib/esm/nip17.js.map +4 -4
  89. package/node_modules/nostr-tools/lib/esm/nip18.js +15 -8
  90. package/node_modules/nostr-tools/lib/esm/nip18.js.map +4 -4
  91. package/node_modules/nostr-tools/lib/esm/nip19.js.map +1 -1
  92. package/node_modules/nostr-tools/lib/esm/nip21.js.map +1 -1
  93. package/node_modules/nostr-tools/lib/esm/nip22.js +20 -7
  94. package/node_modules/nostr-tools/lib/esm/nip22.js.map +3 -3
  95. package/node_modules/nostr-tools/lib/esm/nip25.js +15 -8
  96. package/node_modules/nostr-tools/lib/esm/nip25.js.map +4 -4
  97. package/node_modules/nostr-tools/lib/esm/nip27.js.map +1 -1
  98. package/node_modules/nostr-tools/lib/esm/nip28.js +15 -8
  99. package/node_modules/nostr-tools/lib/esm/nip28.js.map +4 -4
  100. package/node_modules/nostr-tools/lib/esm/nip29.js.map +1 -1
  101. package/node_modules/nostr-tools/lib/esm/nip30.js.map +2 -2
  102. package/node_modules/nostr-tools/lib/esm/nip42.js.map +2 -2
  103. package/node_modules/nostr-tools/lib/esm/nip44.js.map +1 -1
  104. package/node_modules/nostr-tools/lib/esm/nip45.js +23 -10
  105. package/node_modules/nostr-tools/lib/esm/nip45.js.map +4 -4
  106. package/node_modules/nostr-tools/lib/esm/nip46.js +60 -51
  107. package/node_modules/nostr-tools/lib/esm/nip46.js.map +4 -4
  108. package/node_modules/nostr-tools/lib/esm/nip47.js +15 -8
  109. package/node_modules/nostr-tools/lib/esm/nip47.js.map +4 -4
  110. package/node_modules/nostr-tools/lib/esm/nip57.js +17 -10
  111. package/node_modules/nostr-tools/lib/esm/nip57.js.map +4 -4
  112. package/node_modules/nostr-tools/lib/esm/nip58.js.map +2 -2
  113. package/node_modules/nostr-tools/lib/esm/nip59.js +10 -1
  114. package/node_modules/nostr-tools/lib/esm/nip59.js.map +3 -3
  115. package/node_modules/nostr-tools/lib/esm/nip75.js.map +1 -1
  116. package/node_modules/nostr-tools/lib/esm/nip94.js.map +1 -1
  117. package/node_modules/nostr-tools/lib/esm/nip98.js +15 -8
  118. package/node_modules/nostr-tools/lib/esm/nip98.js.map +4 -4
  119. package/node_modules/nostr-tools/lib/esm/nip99.js.map +2 -2
  120. package/node_modules/nostr-tools/lib/esm/nipb0.js +35 -17
  121. package/node_modules/nostr-tools/lib/esm/nipb0.js.map +4 -4
  122. package/node_modules/nostr-tools/lib/esm/nipb7.js +13 -7
  123. package/node_modules/nostr-tools/lib/esm/nipb7.js.map +2 -2
  124. package/node_modules/nostr-tools/lib/esm/pool.js +60 -51
  125. package/node_modules/nostr-tools/lib/esm/pool.js.map +4 -4
  126. package/node_modules/nostr-tools/lib/esm/pure.js +15 -8
  127. package/node_modules/nostr-tools/lib/esm/pure.js.map +4 -4
  128. package/node_modules/nostr-tools/lib/esm/references.js.map +1 -1
  129. package/node_modules/nostr-tools/lib/esm/relay.js +50 -34
  130. package/node_modules/nostr-tools/lib/esm/relay.js.map +4 -4
  131. package/node_modules/nostr-tools/lib/esm/signer.js +15 -8
  132. package/node_modules/nostr-tools/lib/esm/signer.js.map +4 -4
  133. package/node_modules/nostr-tools/lib/esm/utils.js +10 -0
  134. package/node_modules/nostr-tools/lib/esm/utils.js.map +2 -2
  135. package/node_modules/nostr-tools/lib/esm/wasm.js +17 -3
  136. package/node_modules/nostr-tools/lib/esm/wasm.js.map +4 -4
  137. package/node_modules/nostr-tools/lib/nostr.bundle.js +86 -74
  138. package/node_modules/nostr-tools/lib/nostr.bundle.js.map +4 -4
  139. package/node_modules/nostr-tools/lib/types/abstract-pool.d.ts +6 -4
  140. package/node_modules/nostr-tools/lib/types/abstract-relay.d.ts +2 -2
  141. package/node_modules/nostr-tools/lib/types/kinds.d.ts +2 -0
  142. package/node_modules/nostr-tools/lib/types/nipb0.d.ts +0 -1
  143. package/node_modules/nostr-tools/lib/types/nipb7.d.ts +0 -1
  144. package/node_modules/nostr-tools/lib/types/utils.d.ts +4 -0
  145. package/node_modules/nostr-tools/node_modules/nostr-wasm/dist/generate.d.ts +1 -0
  146. package/node_modules/nostr-tools/package.json +1 -1
  147. package/package.json +5 -6
  148. package/node_modules/nostr-tools/lib/types/helpers.d.ts +0 -2
  149. package/npm-shrinkwrap.json +0 -137
  150. /package/node_modules/{nostr-wasm/dist/generate.d.ts → nostr-tools/lib/types/nipb0.test.d.ts} +0 -0
  151. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/LICENSE +0 -0
  152. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/README.md +0 -0
  153. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_arx.d.ts +0 -0
  154. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_arx.d.ts.map +0 -0
  155. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_arx.js +0 -0
  156. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_arx.js.map +0 -0
  157. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_poly1305.d.ts +0 -0
  158. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_poly1305.d.ts.map +0 -0
  159. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_poly1305.js +0 -0
  160. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_poly1305.js.map +0 -0
  161. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_polyval.d.ts +0 -0
  162. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_polyval.d.ts.map +0 -0
  163. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_polyval.js +0 -0
  164. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/_polyval.js.map +0 -0
  165. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/aes.d.ts +0 -0
  166. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/aes.d.ts.map +0 -0
  167. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/aes.js +0 -0
  168. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/aes.js.map +0 -0
  169. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/chacha.d.ts +0 -0
  170. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/chacha.d.ts.map +0 -0
  171. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/chacha.js +0 -0
  172. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/chacha.js.map +0 -0
  173. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/ff1.d.ts +0 -0
  174. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/ff1.d.ts.map +0 -0
  175. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/ff1.js +0 -0
  176. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/ff1.js.map +0 -0
  177. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/index.d.ts +0 -0
  178. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/index.d.ts.map +0 -0
  179. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/index.js +0 -0
  180. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/index.js.map +0 -0
  181. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/package.json +0 -0
  182. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/salsa.d.ts +0 -0
  183. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/salsa.d.ts.map +0 -0
  184. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/salsa.js +0 -0
  185. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/salsa.js.map +0 -0
  186. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/_arx.ts +0 -0
  187. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/_poly1305.ts +0 -0
  188. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/_polyval.ts +0 -0
  189. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/aes.ts +0 -0
  190. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/chacha.ts +0 -0
  191. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/ff1.ts +0 -0
  192. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/index.ts +0 -0
  193. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/salsa.ts +0 -0
  194. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/utils.ts +0 -0
  195. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/src/webcrypto.ts +0 -0
  196. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/utils.d.ts +0 -0
  197. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/utils.d.ts.map +0 -0
  198. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/utils.js +0 -0
  199. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/utils.js.map +0 -0
  200. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/webcrypto.d.ts +0 -0
  201. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/webcrypto.d.ts.map +0 -0
  202. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/webcrypto.js +0 -0
  203. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/ciphers/webcrypto.js.map +0 -0
  204. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/LICENSE +0 -0
  205. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/README.md +0 -0
  206. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/bls.d.ts +0 -0
  207. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/bls.d.ts.map +0 -0
  208. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/bls.js +0 -0
  209. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/bls.js.map +0 -0
  210. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/curve.d.ts +0 -0
  211. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/curve.d.ts.map +0 -0
  212. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/curve.js +0 -0
  213. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/curve.js.map +0 -0
  214. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/edwards.d.ts +0 -0
  215. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/edwards.d.ts.map +0 -0
  216. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/edwards.js +0 -0
  217. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/edwards.js.map +0 -0
  218. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/fft.d.ts +0 -0
  219. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/fft.d.ts.map +0 -0
  220. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/fft.js +0 -0
  221. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/fft.js.map +0 -0
  222. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/hash-to-curve.d.ts +0 -0
  223. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/hash-to-curve.d.ts.map +0 -0
  224. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/hash-to-curve.js +0 -0
  225. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/hash-to-curve.js.map +0 -0
  226. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/modular.d.ts +0 -0
  227. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/modular.d.ts.map +0 -0
  228. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/modular.js +0 -0
  229. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/modular.js.map +0 -0
  230. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/montgomery.d.ts +0 -0
  231. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/montgomery.d.ts.map +0 -0
  232. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/montgomery.js +0 -0
  233. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/montgomery.js.map +0 -0
  234. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/oprf.d.ts +0 -0
  235. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/oprf.d.ts.map +0 -0
  236. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/oprf.js +0 -0
  237. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/oprf.js.map +0 -0
  238. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/poseidon.d.ts +0 -0
  239. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/poseidon.d.ts.map +0 -0
  240. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/poseidon.js +0 -0
  241. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/poseidon.js.map +0 -0
  242. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/tower.d.ts +0 -0
  243. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/tower.d.ts.map +0 -0
  244. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/tower.js +0 -0
  245. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/tower.js.map +0 -0
  246. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/weierstrass.d.ts +0 -0
  247. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/weierstrass.d.ts.map +0 -0
  248. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/weierstrass.js +0 -0
  249. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/abstract/weierstrass.js.map +0 -0
  250. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/bls12-381.d.ts +0 -0
  251. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/bls12-381.d.ts.map +0 -0
  252. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/bls12-381.js +0 -0
  253. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/bls12-381.js.map +0 -0
  254. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/bn254.d.ts +0 -0
  255. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/bn254.d.ts.map +0 -0
  256. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/bn254.js +0 -0
  257. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/bn254.js.map +0 -0
  258. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/ed25519.d.ts +0 -0
  259. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/ed25519.d.ts.map +0 -0
  260. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/ed25519.js +0 -0
  261. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/ed25519.js.map +0 -0
  262. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/ed448.d.ts +0 -0
  263. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/ed448.d.ts.map +0 -0
  264. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/ed448.js +0 -0
  265. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/ed448.js.map +0 -0
  266. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/index.d.ts +0 -0
  267. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/index.d.ts.map +0 -0
  268. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/index.js +0 -0
  269. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/index.js.map +0 -0
  270. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/misc.d.ts +0 -0
  271. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/misc.d.ts.map +0 -0
  272. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/misc.js +0 -0
  273. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/misc.js.map +0 -0
  274. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/nist.d.ts +0 -0
  275. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/nist.d.ts.map +0 -0
  276. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/nist.js +0 -0
  277. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/nist.js.map +0 -0
  278. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/package.json +0 -0
  279. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/secp256k1.d.ts +0 -0
  280. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/secp256k1.d.ts.map +0 -0
  281. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/secp256k1.js +0 -0
  282. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/secp256k1.js.map +0 -0
  283. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/bls.ts +0 -0
  284. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/curve.ts +0 -0
  285. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/edwards.ts +0 -0
  286. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/fft.ts +0 -0
  287. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/hash-to-curve.ts +0 -0
  288. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/modular.ts +0 -0
  289. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/montgomery.ts +0 -0
  290. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/oprf.ts +0 -0
  291. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/poseidon.ts +0 -0
  292. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/tower.ts +0 -0
  293. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/abstract/weierstrass.ts +0 -0
  294. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/bls12-381.ts +0 -0
  295. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/bn254.ts +0 -0
  296. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/ed25519.ts +0 -0
  297. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/ed448.ts +0 -0
  298. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/index.ts +0 -0
  299. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/misc.ts +0 -0
  300. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/nist.ts +0 -0
  301. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/secp256k1.ts +0 -0
  302. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/utils.ts +0 -0
  303. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/src/webcrypto.ts +0 -0
  304. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/utils.d.ts +0 -0
  305. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/utils.d.ts.map +0 -0
  306. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/utils.js +0 -0
  307. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/utils.js.map +0 -0
  308. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/webcrypto.d.ts +0 -0
  309. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/webcrypto.d.ts.map +0 -0
  310. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/webcrypto.js +0 -0
  311. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/curves/webcrypto.js.map +0 -0
  312. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/LICENSE +0 -0
  313. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/README.md +0 -0
  314. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_blake.d.ts +0 -0
  315. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_blake.d.ts.map +0 -0
  316. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_blake.js +0 -0
  317. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_blake.js.map +0 -0
  318. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_md.d.ts +0 -0
  319. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_md.d.ts.map +0 -0
  320. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_md.js +0 -0
  321. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_md.js.map +0 -0
  322. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_u64.d.ts +0 -0
  323. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_u64.d.ts.map +0 -0
  324. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_u64.js +0 -0
  325. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/_u64.js.map +0 -0
  326. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/argon2.d.ts +0 -0
  327. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/argon2.d.ts.map +0 -0
  328. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/argon2.js +0 -0
  329. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/argon2.js.map +0 -0
  330. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake1.d.ts +0 -0
  331. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake1.d.ts.map +0 -0
  332. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake1.js +0 -0
  333. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake1.js.map +0 -0
  334. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake2.d.ts +0 -0
  335. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake2.d.ts.map +0 -0
  336. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake2.js +0 -0
  337. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake2.js.map +0 -0
  338. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake3.d.ts +0 -0
  339. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake3.d.ts.map +0 -0
  340. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake3.js +0 -0
  341. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/blake3.js.map +0 -0
  342. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/eskdf.d.ts +0 -0
  343. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/eskdf.d.ts.map +0 -0
  344. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/eskdf.js +0 -0
  345. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/eskdf.js.map +0 -0
  346. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/hkdf.d.ts +0 -0
  347. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/hkdf.d.ts.map +0 -0
  348. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/hkdf.js +0 -0
  349. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/hkdf.js.map +0 -0
  350. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/hmac.d.ts +0 -0
  351. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/hmac.d.ts.map +0 -0
  352. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/hmac.js +0 -0
  353. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/hmac.js.map +0 -0
  354. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/index.d.ts +0 -0
  355. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/index.d.ts.map +0 -0
  356. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/index.js +0 -0
  357. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/index.js.map +0 -0
  358. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/legacy.d.ts +0 -0
  359. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/legacy.d.ts.map +0 -0
  360. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/legacy.js +0 -0
  361. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/legacy.js.map +0 -0
  362. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/package.json +0 -0
  363. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/pbkdf2.d.ts +0 -0
  364. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/pbkdf2.d.ts.map +0 -0
  365. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/pbkdf2.js +0 -0
  366. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/pbkdf2.js.map +0 -0
  367. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/scrypt.d.ts +0 -0
  368. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/scrypt.d.ts.map +0 -0
  369. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/scrypt.js +0 -0
  370. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/scrypt.js.map +0 -0
  371. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha2.d.ts +0 -0
  372. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha2.d.ts.map +0 -0
  373. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha2.js +0 -0
  374. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha2.js.map +0 -0
  375. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha3-addons.d.ts +0 -0
  376. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha3-addons.d.ts.map +0 -0
  377. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha3-addons.js +0 -0
  378. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha3-addons.js.map +0 -0
  379. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha3.d.ts +0 -0
  380. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha3.d.ts.map +0 -0
  381. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha3.js +0 -0
  382. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/sha3.js.map +0 -0
  383. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/_blake.ts +0 -0
  384. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/_md.ts +0 -0
  385. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/_u64.ts +0 -0
  386. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/argon2.ts +0 -0
  387. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/blake1.ts +0 -0
  388. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/blake2.ts +0 -0
  389. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/blake3.ts +0 -0
  390. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/eskdf.ts +0 -0
  391. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/hkdf.ts +0 -0
  392. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/hmac.ts +0 -0
  393. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/index.ts +0 -0
  394. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/legacy.ts +0 -0
  395. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/pbkdf2.ts +0 -0
  396. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/scrypt.ts +0 -0
  397. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/sha2.ts +0 -0
  398. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/sha3-addons.ts +0 -0
  399. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/sha3.ts +0 -0
  400. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/utils.ts +0 -0
  401. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/src/webcrypto.ts +0 -0
  402. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/utils.d.ts +0 -0
  403. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/utils.d.ts.map +0 -0
  404. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/utils.js +0 -0
  405. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/utils.js.map +0 -0
  406. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/webcrypto.d.ts +0 -0
  407. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/webcrypto.d.ts.map +0 -0
  408. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/webcrypto.js +0 -0
  409. /package/node_modules/{@noble → nostr-tools/node_modules/@noble}/hashes/webcrypto.js.map +0 -0
  410. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/base/LICENSE +0 -0
  411. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/base/README.md +0 -0
  412. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/base/index.d.ts +0 -0
  413. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/base/index.d.ts.map +0 -0
  414. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/base/index.js +0 -0
  415. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/base/index.js.map +0 -0
  416. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/base/index.ts +0 -0
  417. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/base/package.json +0 -0
  418. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip32/LICENSE +0 -0
  419. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip32/README.md +0 -0
  420. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip32/index.d.ts +0 -0
  421. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip32/index.d.ts.map +0 -0
  422. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip32/index.js +0 -0
  423. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip32/index.js.map +0 -0
  424. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip32/index.ts +0 -0
  425. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip32/package.json +0 -0
  426. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/LICENSE +0 -0
  427. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/README.md +0 -0
  428. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/index.d.ts +0 -0
  429. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/index.js +0 -0
  430. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/package.json +0 -0
  431. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/src/index.ts +0 -0
  432. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/czech.d.ts +0 -0
  433. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/czech.js +0 -0
  434. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/english.d.ts +0 -0
  435. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/english.js +0 -0
  436. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/french.d.ts +0 -0
  437. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/french.js +0 -0
  438. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/italian.d.ts +0 -0
  439. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/italian.js +0 -0
  440. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/japanese.d.ts +0 -0
  441. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/japanese.js +0 -0
  442. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/korean.d.ts +0 -0
  443. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/korean.js +0 -0
  444. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/portuguese.d.ts +0 -0
  445. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/portuguese.js +0 -0
  446. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/simplified-chinese.d.ts +0 -0
  447. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/simplified-chinese.js +0 -0
  448. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/spanish.d.ts +0 -0
  449. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/spanish.js +0 -0
  450. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/traditional-chinese.d.ts +0 -0
  451. /package/node_modules/{@scure → nostr-tools/node_modules/@scure}/bip39/wordlists/traditional-chinese.js +0 -0
  452. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/README.md +0 -0
  453. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/api/emsimp.d.ts +0 -0
  454. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/api/nostr.d.ts +0 -0
  455. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/api/secp256k1-types.d.ts +0 -0
  456. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/api/secp256k1.d.ts +0 -0
  457. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/api/types.d.ts +0 -0
  458. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/api/wasm-env.d.ts +0 -0
  459. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/gen/wasm.d.ts +0 -0
  460. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/gzipped.d.ts +0 -0
  461. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/gzipped.js +0 -0
  462. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/headless.d.ts +0 -0
  463. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/main.d.ts +0 -0
  464. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/main.js +0 -0
  465. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/nostr.js +0 -0
  466. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/secp256k1.js +0 -0
  467. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/dist/types.d.ts +0 -0
  468. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/package.json +0 -0
  469. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/public/out/secp256k1.js +0 -0
  470. /package/node_modules/{nostr-wasm → nostr-tools/node_modules/nostr-wasm}/public/out/secp256k1.wasm +0 -0
@@ -2,6 +2,20 @@
2
2
  import { schnorr } from "@noble/curves/secp256k1.js";
3
3
  import { bytesToHex as bytesToHex2, hexToBytes as hexToBytes2 } from "@noble/hashes/utils.js";
4
4
 
5
+ // utils.ts
6
+ import { bytesToHex, hexToBytes } from "@noble/hashes/utils.js";
7
+ var utf8Decoder = new TextDecoder("utf-8");
8
+ var utf8Encoder = new TextEncoder();
9
+ function isHex32(input) {
10
+ for (let i2 = 0; i2 < 64; i2++) {
11
+ let cc = input.charCodeAt(i2);
12
+ if (isNaN(cc) || cc < 48 || cc > 102 || cc > 57 && cc < 97) {
13
+ return false;
14
+ }
15
+ }
16
+ return true;
17
+ }
18
+
5
19
  // core.ts
6
20
  var verifiedSymbol = Symbol("verified");
7
21
  var isRecord = (obj) => obj instanceof Object;
@@ -16,7 +30,7 @@ function validateEvent(event) {
16
30
  return false;
17
31
  if (typeof event.pubkey !== "string")
18
32
  return false;
19
- if (!event.pubkey.match(/^[a-f0-9]{64}$/))
33
+ if (!isHex32(event.pubkey))
20
34
  return false;
21
35
  if (!Array.isArray(event.tags))
22
36
  return false;
@@ -34,13 +48,6 @@ function validateEvent(event) {
34
48
 
35
49
  // pure.ts
36
50
  import { sha256 } from "@noble/hashes/sha2.js";
37
-
38
- // utils.ts
39
- import { bytesToHex, hexToBytes } from "@noble/hashes/utils.js";
40
- var utf8Decoder = new TextDecoder("utf-8");
41
- var utf8Encoder = new TextEncoder();
42
-
43
- // pure.ts
44
51
  var JS = class {
45
52
  generateSecretKey() {
46
53
  return schnorr.utils.randomSecretKey();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../pure.ts", "../../core.ts", "../../utils.ts", "../../signer.ts"],
4
- "sourcesContent": ["import { schnorr } from '@noble/curves/secp256k1.js'\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js'\nimport { Nostr, Event, EventTemplate, UnsignedEvent, VerifiedEvent, verifiedSymbol, validateEvent } from './core.ts'\nimport { sha256 } from '@noble/hashes/sha2.js'\n\nimport { utf8Encoder } from './utils.ts'\n\nclass JS implements Nostr {\n generateSecretKey(): Uint8Array {\n return schnorr.utils.randomSecretKey()\n }\n getPublicKey(secretKey: Uint8Array): string {\n return bytesToHex(schnorr.getPublicKey(secretKey))\n }\n finalizeEvent(t: EventTemplate, secretKey: Uint8Array): VerifiedEvent {\n const event = t as VerifiedEvent\n event.pubkey = bytesToHex(schnorr.getPublicKey(secretKey))\n event.id = getEventHash(event)\n event.sig = bytesToHex(schnorr.sign(hexToBytes(getEventHash(event)), secretKey))\n event[verifiedSymbol] = true\n return event\n }\n verifyEvent(event: Event): event is VerifiedEvent {\n if (typeof event[verifiedSymbol] === 'boolean') return event[verifiedSymbol]\n\n try {\n const hash = getEventHash(event)\n if (hash !== event.id) {\n event[verifiedSymbol] = false\n return false\n }\n\n const valid = schnorr.verify(hexToBytes(event.sig), hexToBytes(hash), hexToBytes(event.pubkey))\n event[verifiedSymbol] = valid\n return valid\n } catch (err) {\n event[verifiedSymbol] = false\n return false\n }\n }\n}\n\nexport function serializeEvent(evt: UnsignedEvent): string {\n if (!validateEvent(evt)) throw new Error(\"can't serialize event with wrong or missing properties\")\n return JSON.stringify([0, evt.pubkey, evt.created_at, evt.kind, evt.tags, evt.content])\n}\n\nexport function getEventHash(event: UnsignedEvent): string {\n let eventHash = sha256(utf8Encoder.encode(serializeEvent(event)))\n return bytesToHex(eventHash)\n}\n\nconst i: JS = new JS()\n\nexport const generateSecretKey = i.generateSecretKey\nexport const getPublicKey = i.getPublicKey\nexport const finalizeEvent = i.finalizeEvent\nexport const verifyEvent = i.verifyEvent\nexport * from './core.ts'\n", "export interface Nostr {\n generateSecretKey(): Uint8Array\n getPublicKey(secretKey: Uint8Array): string\n finalizeEvent(event: EventTemplate, secretKey: Uint8Array): VerifiedEvent\n verifyEvent(event: Event): event is VerifiedEvent\n}\n\n/** Designates a verified event signature. */\nexport const verifiedSymbol = Symbol('verified')\n\nexport type NostrEvent = {\n kind: number\n tags: string[][]\n content: string\n created_at: number\n pubkey: string\n id: string\n sig: string\n [verifiedSymbol]?: boolean\n}\n\nexport type Event = NostrEvent\nexport type EventTemplate = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at'>\nexport type UnsignedEvent = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at' | 'pubkey'>\n\n/** An event whose signature has been verified. */\nexport interface VerifiedEvent extends Event {\n [verifiedSymbol]: true\n}\n\nconst isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object\n\nexport function validateEvent<T>(event: T): event is T & UnsignedEvent {\n if (!isRecord(event)) return false\n if (typeof event.kind !== 'number') return false\n if (typeof event.content !== 'string') return false\n if (typeof event.created_at !== 'number') return false\n if (typeof event.pubkey !== 'string') return false\n if (!event.pubkey.match(/^[a-f0-9]{64}$/)) return false\n\n if (!Array.isArray(event.tags)) return false\n for (let i = 0; i < event.tags.length; i++) {\n let tag = event.tags[i]\n if (!Array.isArray(tag)) return false\n for (let j = 0; j < tag.length; j++) {\n if (typeof tag[j] !== 'string') return false\n }\n }\n\n return true\n}\n\n/**\n * Sort events in reverse-chronological order by the `created_at` timestamp,\n * and then by the event `id` (lexicographically) in case of ties.\n * This mutates the array.\n */\nexport function sortEvents(events: Event[]): Event[] {\n return events.sort((a: NostrEvent, b: NostrEvent): number => {\n if (a.created_at !== b.created_at) {\n return b.created_at - a.created_at\n }\n return a.id.localeCompare(b.id)\n })\n}\n", "import type { NostrEvent } from './core.ts'\n\nexport const utf8Decoder: TextDecoder = new TextDecoder('utf-8')\nexport const utf8Encoder: TextEncoder = new TextEncoder()\n\nexport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js'\n\nexport function normalizeURL(url: string): string {\n try {\n if (url.indexOf('://') === -1) url = 'wss://' + url\n let p = new URL(url)\n if (p.protocol === 'http:') p.protocol = 'ws:'\n else if (p.protocol === 'https:') p.protocol = 'wss:'\n p.pathname = p.pathname.replace(/\\/+/g, '/')\n if (p.pathname.endsWith('/')) p.pathname = p.pathname.slice(0, -1)\n if ((p.port === '80' && p.protocol === 'ws:') || (p.port === '443' && p.protocol === 'wss:')) p.port = ''\n p.searchParams.sort()\n p.hash = ''\n return p.toString()\n } catch (e) {\n throw new Error(`Invalid URL: ${url}`)\n }\n}\n\nexport function insertEventIntoDescendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return b.created_at - event.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function insertEventIntoAscendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return event.created_at - b.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function binarySearch<T>(arr: T[], compare: (b: T) => number): [number, boolean] {\n let start = 0\n let end = arr.length - 1\n\n while (start <= end) {\n const mid = Math.floor((start + end) / 2)\n const cmp = compare(arr[mid])\n\n if (cmp === 0) {\n return [mid, true]\n }\n\n if (cmp < 0) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return [start, false]\n}\n\nexport function mergeReverseSortedLists(list1: NostrEvent[], list2: NostrEvent[]): NostrEvent[] {\n const result: NostrEvent[] = new Array(list1.length + list2.length)\n result.length = 0\n let i1 = 0\n let i2 = 0\n let sameTimestampIds: string[] = []\n\n while (i1 < list1.length && i2 < list2.length) {\n let next: NostrEvent\n if (list1[i1]?.created_at > list2[i2]?.created_at) {\n next = list1[i1]\n i1++\n } else {\n next = list2[i2]\n i2++\n }\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i1 < list1.length) {\n const next = list1[i1]\n i1++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i2 < list2.length) {\n const next = list2[i2]\n i2++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n return result\n}\n", "import { EventTemplate, VerifiedEvent } from './core.ts'\nimport { finalizeEvent, getPublicKey } from './pure.ts'\n\nexport interface Signer {\n getPublicKey(): Promise<string>\n signEvent(event: EventTemplate): Promise<VerifiedEvent>\n}\n\nexport class PlainKeySigner implements Signer {\n private secretKey: Uint8Array\n\n constructor(secretKey: Uint8Array) {\n this.secretKey = secretKey\n }\n\n async getPublicKey(): Promise<string> {\n return getPublicKey(this.secretKey)\n }\n\n async signEvent(event: EventTemplate): Promise<VerifiedEvent> {\n return finalizeEvent(event, this.secretKey)\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["bytesToHex", "hexToBytes", "i", "bytesToHex", "hexToBytes"]
3
+ "sources": ["../../pure.ts", "../../utils.ts", "../../core.ts", "../../signer.ts"],
4
+ "sourcesContent": ["import { schnorr } from '@noble/curves/secp256k1.js'\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js'\nimport { Nostr, Event, EventTemplate, UnsignedEvent, VerifiedEvent, verifiedSymbol, validateEvent } from './core.ts'\nimport { sha256 } from '@noble/hashes/sha2.js'\n\nimport { utf8Encoder } from './utils.ts'\n\nclass JS implements Nostr {\n generateSecretKey(): Uint8Array {\n return schnorr.utils.randomSecretKey()\n }\n getPublicKey(secretKey: Uint8Array): string {\n return bytesToHex(schnorr.getPublicKey(secretKey))\n }\n finalizeEvent(t: EventTemplate, secretKey: Uint8Array): VerifiedEvent {\n const event = t as VerifiedEvent\n event.pubkey = bytesToHex(schnorr.getPublicKey(secretKey))\n event.id = getEventHash(event)\n event.sig = bytesToHex(schnorr.sign(hexToBytes(getEventHash(event)), secretKey))\n event[verifiedSymbol] = true\n return event\n }\n verifyEvent(event: Event): event is VerifiedEvent {\n if (typeof event[verifiedSymbol] === 'boolean') return event[verifiedSymbol]\n\n try {\n const hash = getEventHash(event)\n if (hash !== event.id) {\n event[verifiedSymbol] = false\n return false\n }\n\n const valid = schnorr.verify(hexToBytes(event.sig), hexToBytes(hash), hexToBytes(event.pubkey))\n event[verifiedSymbol] = valid\n return valid\n } catch (err) {\n event[verifiedSymbol] = false\n return false\n }\n }\n}\n\nexport function serializeEvent(evt: UnsignedEvent): string {\n if (!validateEvent(evt)) throw new Error(\"can't serialize event with wrong or missing properties\")\n return JSON.stringify([0, evt.pubkey, evt.created_at, evt.kind, evt.tags, evt.content])\n}\n\nexport function getEventHash(event: UnsignedEvent): string {\n let eventHash = sha256(utf8Encoder.encode(serializeEvent(event)))\n return bytesToHex(eventHash)\n}\n\nconst i: JS = new JS()\n\nexport const generateSecretKey = i.generateSecretKey\nexport const getPublicKey = i.getPublicKey\nexport const finalizeEvent = i.finalizeEvent\nexport const verifyEvent = i.verifyEvent\nexport * from './core.ts'\n", "import type { NostrEvent } from './core.ts'\n\nexport const utf8Decoder: TextDecoder = new TextDecoder('utf-8')\nexport const utf8Encoder: TextEncoder = new TextEncoder()\n\nexport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js'\n\nexport function normalizeURL(url: string): string {\n try {\n if (url.indexOf('://') === -1) url = 'wss://' + url\n let p = new URL(url)\n if (p.protocol === 'http:') p.protocol = 'ws:'\n else if (p.protocol === 'https:') p.protocol = 'wss:'\n p.pathname = p.pathname.replace(/\\/+/g, '/')\n if (p.pathname.endsWith('/')) p.pathname = p.pathname.slice(0, -1)\n if ((p.port === '80' && p.protocol === 'ws:') || (p.port === '443' && p.protocol === 'wss:')) p.port = ''\n p.searchParams.sort()\n p.hash = ''\n return p.toString()\n } catch (e) {\n throw new Error(`Invalid URL: ${url}`)\n }\n}\n\nexport function insertEventIntoDescendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return b.created_at - event.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function insertEventIntoAscendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return event.created_at - b.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function binarySearch<T>(arr: T[], compare: (b: T) => number): [number, boolean] {\n let start = 0\n let end = arr.length - 1\n\n while (start <= end) {\n const mid = Math.floor((start + end) / 2)\n const cmp = compare(arr[mid])\n\n if (cmp === 0) {\n return [mid, true]\n }\n\n if (cmp < 0) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return [start, false]\n}\n\nexport function mergeReverseSortedLists(list1: NostrEvent[], list2: NostrEvent[]): NostrEvent[] {\n const result: NostrEvent[] = new Array(list1.length + list2.length)\n result.length = 0\n let i1 = 0\n let i2 = 0\n let sameTimestampIds: string[] = []\n\n while (i1 < list1.length && i2 < list2.length) {\n let next: NostrEvent\n if (list1[i1]?.created_at > list2[i2]?.created_at) {\n next = list1[i1]\n i1++\n } else {\n next = list2[i2]\n i2++\n }\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i1 < list1.length) {\n const next = list1[i1]\n i1++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i2 < list2.length) {\n const next = list2[i2]\n i2++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n return result\n}\n\n/**\n * Checks if a string is a 64-char lowercase hex string as most Nostr ids and pubkeys.\n */\nexport function isHex32(input: string): boolean {\n for (let i = 0; i < 64; i++) {\n let cc = input.charCodeAt(i)\n if (isNaN(cc) || cc < 48 || cc > 102 || (cc > 57 && cc < 97)) {\n return false\n }\n }\n return true\n}\n", "import { isHex32 } from './utils.ts'\n\nexport interface Nostr {\n generateSecretKey(): Uint8Array\n getPublicKey(secretKey: Uint8Array): string\n finalizeEvent(event: EventTemplate, secretKey: Uint8Array): VerifiedEvent\n verifyEvent(event: Event): event is VerifiedEvent\n}\n\n/** Designates a verified event signature. */\nexport const verifiedSymbol = Symbol('verified')\n\nexport type NostrEvent = {\n kind: number\n tags: string[][]\n content: string\n created_at: number\n pubkey: string\n id: string\n sig: string\n [verifiedSymbol]?: boolean\n}\n\nexport type Event = NostrEvent\nexport type EventTemplate = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at'>\nexport type UnsignedEvent = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at' | 'pubkey'>\n\n/** An event whose signature has been verified. */\nexport interface VerifiedEvent extends Event {\n [verifiedSymbol]: true\n}\n\nconst isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object\n\nexport function validateEvent<T>(event: T): event is T & UnsignedEvent {\n if (!isRecord(event)) return false\n if (typeof event.kind !== 'number') return false\n if (typeof event.content !== 'string') return false\n if (typeof event.created_at !== 'number') return false\n if (typeof event.pubkey !== 'string') return false\n if (!isHex32(event.pubkey)) return false\n\n if (!Array.isArray(event.tags)) return false\n for (let i = 0; i < event.tags.length; i++) {\n let tag = event.tags[i]\n if (!Array.isArray(tag)) return false\n for (let j = 0; j < tag.length; j++) {\n if (typeof tag[j] !== 'string') return false\n }\n }\n\n return true\n}\n\n/**\n * Sort events in reverse-chronological order by the `created_at` timestamp,\n * and then by the event `id` (lexicographically) in case of ties.\n * This mutates the array.\n */\nexport function sortEvents(events: Event[]): Event[] {\n return events.sort((a: NostrEvent, b: NostrEvent): number => {\n if (a.created_at !== b.created_at) {\n return b.created_at - a.created_at\n }\n return a.id.localeCompare(b.id)\n })\n}\n", "import { EventTemplate, VerifiedEvent } from './core.ts'\nimport { finalizeEvent, getPublicKey } from './pure.ts'\n\nexport interface Signer {\n getPublicKey(): Promise<string>\n signEvent(event: EventTemplate): Promise<VerifiedEvent>\n}\n\nexport class PlainKeySigner implements Signer {\n private secretKey: Uint8Array\n\n constructor(secretKey: Uint8Array) {\n this.secretKey = secretKey\n }\n\n async getPublicKey(): Promise<string> {\n return getPublicKey(this.secretKey)\n }\n\n async signEvent(event: EventTemplate): Promise<VerifiedEvent> {\n return finalizeEvent(event, this.secretKey)\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["bytesToHex", "hexToBytes", "i", "i", "bytesToHex", "hexToBytes"]
7
7
  }
@@ -116,12 +116,22 @@ function mergeReverseSortedLists(list1, list2) {
116
116
  }
117
117
  return result;
118
118
  }
119
+ function isHex32(input) {
120
+ for (let i = 0; i < 64; i++) {
121
+ let cc = input.charCodeAt(i);
122
+ if (isNaN(cc) || cc < 48 || cc > 102 || cc > 57 && cc < 97) {
123
+ return false;
124
+ }
125
+ }
126
+ return true;
127
+ }
119
128
  export {
120
129
  binarySearch,
121
130
  bytesToHex,
122
131
  hexToBytes,
123
132
  insertEventIntoAscendingList,
124
133
  insertEventIntoDescendingList,
134
+ isHex32,
125
135
  mergeReverseSortedLists,
126
136
  normalizeURL,
127
137
  utf8Decoder,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../utils.ts"],
4
- "sourcesContent": ["import type { NostrEvent } from './core.ts'\n\nexport const utf8Decoder: TextDecoder = new TextDecoder('utf-8')\nexport const utf8Encoder: TextEncoder = new TextEncoder()\n\nexport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js'\n\nexport function normalizeURL(url: string): string {\n try {\n if (url.indexOf('://') === -1) url = 'wss://' + url\n let p = new URL(url)\n if (p.protocol === 'http:') p.protocol = 'ws:'\n else if (p.protocol === 'https:') p.protocol = 'wss:'\n p.pathname = p.pathname.replace(/\\/+/g, '/')\n if (p.pathname.endsWith('/')) p.pathname = p.pathname.slice(0, -1)\n if ((p.port === '80' && p.protocol === 'ws:') || (p.port === '443' && p.protocol === 'wss:')) p.port = ''\n p.searchParams.sort()\n p.hash = ''\n return p.toString()\n } catch (e) {\n throw new Error(`Invalid URL: ${url}`)\n }\n}\n\nexport function insertEventIntoDescendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return b.created_at - event.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function insertEventIntoAscendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return event.created_at - b.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function binarySearch<T>(arr: T[], compare: (b: T) => number): [number, boolean] {\n let start = 0\n let end = arr.length - 1\n\n while (start <= end) {\n const mid = Math.floor((start + end) / 2)\n const cmp = compare(arr[mid])\n\n if (cmp === 0) {\n return [mid, true]\n }\n\n if (cmp < 0) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return [start, false]\n}\n\nexport function mergeReverseSortedLists(list1: NostrEvent[], list2: NostrEvent[]): NostrEvent[] {\n const result: NostrEvent[] = new Array(list1.length + list2.length)\n result.length = 0\n let i1 = 0\n let i2 = 0\n let sameTimestampIds: string[] = []\n\n while (i1 < list1.length && i2 < list2.length) {\n let next: NostrEvent\n if (list1[i1]?.created_at > list2[i2]?.created_at) {\n next = list1[i1]\n i1++\n } else {\n next = list2[i2]\n i2++\n }\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i1 < list1.length) {\n const next = list1[i1]\n i1++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i2 < list2.length) {\n const next = list2[i2]\n i2++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n return result\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { NostrEvent } from './core.ts'\n\nexport const utf8Decoder: TextDecoder = new TextDecoder('utf-8')\nexport const utf8Encoder: TextEncoder = new TextEncoder()\n\nexport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js'\n\nexport function normalizeURL(url: string): string {\n try {\n if (url.indexOf('://') === -1) url = 'wss://' + url\n let p = new URL(url)\n if (p.protocol === 'http:') p.protocol = 'ws:'\n else if (p.protocol === 'https:') p.protocol = 'wss:'\n p.pathname = p.pathname.replace(/\\/+/g, '/')\n if (p.pathname.endsWith('/')) p.pathname = p.pathname.slice(0, -1)\n if ((p.port === '80' && p.protocol === 'ws:') || (p.port === '443' && p.protocol === 'wss:')) p.port = ''\n p.searchParams.sort()\n p.hash = ''\n return p.toString()\n } catch (e) {\n throw new Error(`Invalid URL: ${url}`)\n }\n}\n\nexport function insertEventIntoDescendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return b.created_at - event.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function insertEventIntoAscendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return event.created_at - b.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function binarySearch<T>(arr: T[], compare: (b: T) => number): [number, boolean] {\n let start = 0\n let end = arr.length - 1\n\n while (start <= end) {\n const mid = Math.floor((start + end) / 2)\n const cmp = compare(arr[mid])\n\n if (cmp === 0) {\n return [mid, true]\n }\n\n if (cmp < 0) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return [start, false]\n}\n\nexport function mergeReverseSortedLists(list1: NostrEvent[], list2: NostrEvent[]): NostrEvent[] {\n const result: NostrEvent[] = new Array(list1.length + list2.length)\n result.length = 0\n let i1 = 0\n let i2 = 0\n let sameTimestampIds: string[] = []\n\n while (i1 < list1.length && i2 < list2.length) {\n let next: NostrEvent\n if (list1[i1]?.created_at > list2[i2]?.created_at) {\n next = list1[i1]\n i1++\n } else {\n next = list2[i2]\n i2++\n }\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i1 < list1.length) {\n const next = list1[i1]\n i1++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i2 < list2.length) {\n const next = list2[i2]\n i2++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n return result\n}\n\n/**\n * Checks if a string is a 64-char lowercase hex string as most Nostr ids and pubkeys.\n */\nexport function isHex32(input: string): boolean {\n for (let i = 0; i < 64; i++) {\n let cc = input.charCodeAt(i)\n if (isNaN(cc) || cc < 48 || cc > 102 || (cc > 57 && cc < 97)) {\n return false\n }\n }\n return true\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,19 @@
1
1
  // wasm.ts
2
- import { bytesToHex } from "@noble/hashes/utils.js";
2
+ import { bytesToHex as bytesToHex2 } from "@noble/hashes/utils.js";
3
+
4
+ // utils.ts
5
+ import { bytesToHex, hexToBytes } from "@noble/hashes/utils.js";
6
+ var utf8Decoder = new TextDecoder("utf-8");
7
+ var utf8Encoder = new TextEncoder();
8
+ function isHex32(input) {
9
+ for (let i2 = 0; i2 < 64; i2++) {
10
+ let cc = input.charCodeAt(i2);
11
+ if (isNaN(cc) || cc < 48 || cc > 102 || cc > 57 && cc < 97) {
12
+ return false;
13
+ }
14
+ }
15
+ return true;
16
+ }
3
17
 
4
18
  // core.ts
5
19
  var verifiedSymbol = Symbol("verified");
@@ -15,7 +29,7 @@ function validateEvent(event) {
15
29
  return false;
16
30
  if (typeof event.pubkey !== "string")
17
31
  return false;
18
- if (!event.pubkey.match(/^[a-f0-9]{64}$/))
32
+ if (!isHex32(event.pubkey))
19
33
  return false;
20
34
  if (!Array.isArray(event.tags))
21
35
  return false;
@@ -49,7 +63,7 @@ var Wasm = class {
49
63
  return nw.generateSecretKey();
50
64
  }
51
65
  getPublicKey(secretKey) {
52
- return bytesToHex(nw.getPublicKey(secretKey));
66
+ return bytesToHex2(nw.getPublicKey(secretKey));
53
67
  }
54
68
  finalizeEvent(t, secretKey) {
55
69
  nw.finalizeEvent(t, secretKey);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../wasm.ts", "../../core.ts"],
4
- "sourcesContent": ["import { bytesToHex } from '@noble/hashes/utils.js'\nimport { Nostr as NostrWasm } from 'nostr-wasm'\nimport { EventTemplate, Event, Nostr, VerifiedEvent, verifiedSymbol } from './core.ts'\n\nlet nw: NostrWasm\n\nexport function setNostrWasm(x: NostrWasm) {\n nw = x\n}\n\nclass Wasm implements Nostr {\n generateSecretKey(): Uint8Array {\n return nw.generateSecretKey()\n }\n getPublicKey(secretKey: Uint8Array): string {\n return bytesToHex(nw.getPublicKey(secretKey))\n }\n finalizeEvent(t: EventTemplate, secretKey: Uint8Array): VerifiedEvent {\n nw.finalizeEvent(t as any, secretKey)\n return t as VerifiedEvent\n }\n verifyEvent(event: Event): event is VerifiedEvent {\n try {\n nw.verifyEvent(event)\n event[verifiedSymbol] = true\n return true\n } catch (err) {\n return false\n }\n }\n}\n\nconst i: Wasm = new Wasm()\nexport const generateSecretKey = i.generateSecretKey\nexport const getPublicKey = i.getPublicKey\nexport const finalizeEvent = i.finalizeEvent\nexport const verifyEvent = i.verifyEvent\nexport * from './core.ts'\n", "export interface Nostr {\n generateSecretKey(): Uint8Array\n getPublicKey(secretKey: Uint8Array): string\n finalizeEvent(event: EventTemplate, secretKey: Uint8Array): VerifiedEvent\n verifyEvent(event: Event): event is VerifiedEvent\n}\n\n/** Designates a verified event signature. */\nexport const verifiedSymbol = Symbol('verified')\n\nexport type NostrEvent = {\n kind: number\n tags: string[][]\n content: string\n created_at: number\n pubkey: string\n id: string\n sig: string\n [verifiedSymbol]?: boolean\n}\n\nexport type Event = NostrEvent\nexport type EventTemplate = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at'>\nexport type UnsignedEvent = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at' | 'pubkey'>\n\n/** An event whose signature has been verified. */\nexport interface VerifiedEvent extends Event {\n [verifiedSymbol]: true\n}\n\nconst isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object\n\nexport function validateEvent<T>(event: T): event is T & UnsignedEvent {\n if (!isRecord(event)) return false\n if (typeof event.kind !== 'number') return false\n if (typeof event.content !== 'string') return false\n if (typeof event.created_at !== 'number') return false\n if (typeof event.pubkey !== 'string') return false\n if (!event.pubkey.match(/^[a-f0-9]{64}$/)) return false\n\n if (!Array.isArray(event.tags)) return false\n for (let i = 0; i < event.tags.length; i++) {\n let tag = event.tags[i]\n if (!Array.isArray(tag)) return false\n for (let j = 0; j < tag.length; j++) {\n if (typeof tag[j] !== 'string') return false\n }\n }\n\n return true\n}\n\n/**\n * Sort events in reverse-chronological order by the `created_at` timestamp,\n * and then by the event `id` (lexicographically) in case of ties.\n * This mutates the array.\n */\nexport function sortEvents(events: Event[]): Event[] {\n return events.sort((a: NostrEvent, b: NostrEvent): number => {\n if (a.created_at !== b.created_at) {\n return b.created_at - a.created_at\n }\n return a.id.localeCompare(b.id)\n })\n}\n"],
5
- "mappings": ";AAAA,SAAS,kBAAkB;;;ACQpB,IAAM,iBAAiB,OAAO,UAAU;AAsB/C,IAAM,WAAW,CAAC,QAAiD,eAAe;AAE3E,SAAS,cAAiB,OAAsC;AACrE,MAAI,CAAC,SAAS,KAAK;AAAG,WAAO;AAC7B,MAAI,OAAO,MAAM,SAAS;AAAU,WAAO;AAC3C,MAAI,OAAO,MAAM,YAAY;AAAU,WAAO;AAC9C,MAAI,OAAO,MAAM,eAAe;AAAU,WAAO;AACjD,MAAI,OAAO,MAAM,WAAW;AAAU,WAAO;AAC7C,MAAI,CAAC,MAAM,OAAO,MAAM,gBAAgB;AAAG,WAAO;AAElD,MAAI,CAAC,MAAM,QAAQ,MAAM,IAAI;AAAG,WAAO;AACvC,WAASA,KAAI,GAAGA,KAAI,MAAM,KAAK,QAAQA,MAAK;AAC1C,QAAI,MAAM,MAAM,KAAKA;AACrB,QAAI,CAAC,MAAM,QAAQ,GAAG;AAAG,aAAO;AAChC,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAI,OAAO,IAAI,OAAO;AAAU,eAAO;AAAA,IACzC;AAAA,EACF;AAEA,SAAO;AACT;AAOO,SAAS,WAAW,QAA0B;AACnD,SAAO,OAAO,KAAK,CAAC,GAAe,MAA0B;AAC3D,QAAI,EAAE,eAAe,EAAE,YAAY;AACjC,aAAO,EAAE,aAAa,EAAE;AAAA,IAC1B;AACA,WAAO,EAAE,GAAG,cAAc,EAAE,EAAE;AAAA,EAChC,CAAC;AACH;;;AD5DA,IAAI;AAEG,SAAS,aAAa,GAAc;AACzC,OAAK;AACP;AAEA,IAAM,OAAN,MAA4B;AAAA,EAC1B,oBAAgC;AAC9B,WAAO,GAAG,kBAAkB;AAAA,EAC9B;AAAA,EACA,aAAa,WAA+B;AAC1C,WAAO,WAAW,GAAG,aAAa,SAAS,CAAC;AAAA,EAC9C;AAAA,EACA,cAAc,GAAkB,WAAsC;AACpE,OAAG,cAAc,GAAU,SAAS;AACpC,WAAO;AAAA,EACT;AAAA,EACA,YAAY,OAAsC;AAChD,QAAI;AACF,SAAG,YAAY,KAAK;AACpB,YAAM,kBAAkB;AACxB,aAAO;AAAA,IACT,SAAS,KAAP;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,IAAM,IAAU,IAAI,KAAK;AAClB,IAAM,oBAAoB,EAAE;AAC5B,IAAM,eAAe,EAAE;AACvB,IAAM,gBAAgB,EAAE;AACxB,IAAM,cAAc,EAAE;",
6
- "names": ["i"]
3
+ "sources": ["../../wasm.ts", "../../utils.ts", "../../core.ts"],
4
+ "sourcesContent": ["import { bytesToHex } from '@noble/hashes/utils.js'\nimport { Nostr as NostrWasm } from 'nostr-wasm'\nimport { EventTemplate, Event, Nostr, VerifiedEvent, verifiedSymbol } from './core.ts'\n\nlet nw: NostrWasm\n\nexport function setNostrWasm(x: NostrWasm) {\n nw = x\n}\n\nclass Wasm implements Nostr {\n generateSecretKey(): Uint8Array {\n return nw.generateSecretKey()\n }\n getPublicKey(secretKey: Uint8Array): string {\n return bytesToHex(nw.getPublicKey(secretKey))\n }\n finalizeEvent(t: EventTemplate, secretKey: Uint8Array): VerifiedEvent {\n nw.finalizeEvent(t as any, secretKey)\n return t as VerifiedEvent\n }\n verifyEvent(event: Event): event is VerifiedEvent {\n try {\n nw.verifyEvent(event)\n event[verifiedSymbol] = true\n return true\n } catch (err) {\n return false\n }\n }\n}\n\nconst i: Wasm = new Wasm()\nexport const generateSecretKey = i.generateSecretKey\nexport const getPublicKey = i.getPublicKey\nexport const finalizeEvent = i.finalizeEvent\nexport const verifyEvent = i.verifyEvent\nexport * from './core.ts'\n", "import type { NostrEvent } from './core.ts'\n\nexport const utf8Decoder: TextDecoder = new TextDecoder('utf-8')\nexport const utf8Encoder: TextEncoder = new TextEncoder()\n\nexport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js'\n\nexport function normalizeURL(url: string): string {\n try {\n if (url.indexOf('://') === -1) url = 'wss://' + url\n let p = new URL(url)\n if (p.protocol === 'http:') p.protocol = 'ws:'\n else if (p.protocol === 'https:') p.protocol = 'wss:'\n p.pathname = p.pathname.replace(/\\/+/g, '/')\n if (p.pathname.endsWith('/')) p.pathname = p.pathname.slice(0, -1)\n if ((p.port === '80' && p.protocol === 'ws:') || (p.port === '443' && p.protocol === 'wss:')) p.port = ''\n p.searchParams.sort()\n p.hash = ''\n return p.toString()\n } catch (e) {\n throw new Error(`Invalid URL: ${url}`)\n }\n}\n\nexport function insertEventIntoDescendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return b.created_at - event.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function insertEventIntoAscendingList(sortedArray: NostrEvent[], event: NostrEvent): NostrEvent[] {\n const [idx, found] = binarySearch(sortedArray, b => {\n if (event.id === b.id) return 0\n if (event.created_at === b.created_at) return -1\n return event.created_at - b.created_at\n })\n if (!found) {\n sortedArray.splice(idx, 0, event)\n }\n return sortedArray\n}\n\nexport function binarySearch<T>(arr: T[], compare: (b: T) => number): [number, boolean] {\n let start = 0\n let end = arr.length - 1\n\n while (start <= end) {\n const mid = Math.floor((start + end) / 2)\n const cmp = compare(arr[mid])\n\n if (cmp === 0) {\n return [mid, true]\n }\n\n if (cmp < 0) {\n end = mid - 1\n } else {\n start = mid + 1\n }\n }\n\n return [start, false]\n}\n\nexport function mergeReverseSortedLists(list1: NostrEvent[], list2: NostrEvent[]): NostrEvent[] {\n const result: NostrEvent[] = new Array(list1.length + list2.length)\n result.length = 0\n let i1 = 0\n let i2 = 0\n let sameTimestampIds: string[] = []\n\n while (i1 < list1.length && i2 < list2.length) {\n let next: NostrEvent\n if (list1[i1]?.created_at > list2[i2]?.created_at) {\n next = list1[i1]\n i1++\n } else {\n next = list2[i2]\n i2++\n }\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i1 < list1.length) {\n const next = list1[i1]\n i1++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n while (i2 < list2.length) {\n const next = list2[i2]\n i2++\n\n if (result.length > 0 && result[result.length - 1].created_at === next.created_at) {\n if (sameTimestampIds.includes(next.id)) continue\n } else {\n sameTimestampIds.length = 0\n }\n result.push(next)\n sameTimestampIds.push(next.id)\n }\n\n return result\n}\n\n/**\n * Checks if a string is a 64-char lowercase hex string as most Nostr ids and pubkeys.\n */\nexport function isHex32(input: string): boolean {\n for (let i = 0; i < 64; i++) {\n let cc = input.charCodeAt(i)\n if (isNaN(cc) || cc < 48 || cc > 102 || (cc > 57 && cc < 97)) {\n return false\n }\n }\n return true\n}\n", "import { isHex32 } from './utils.ts'\n\nexport interface Nostr {\n generateSecretKey(): Uint8Array\n getPublicKey(secretKey: Uint8Array): string\n finalizeEvent(event: EventTemplate, secretKey: Uint8Array): VerifiedEvent\n verifyEvent(event: Event): event is VerifiedEvent\n}\n\n/** Designates a verified event signature. */\nexport const verifiedSymbol = Symbol('verified')\n\nexport type NostrEvent = {\n kind: number\n tags: string[][]\n content: string\n created_at: number\n pubkey: string\n id: string\n sig: string\n [verifiedSymbol]?: boolean\n}\n\nexport type Event = NostrEvent\nexport type EventTemplate = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at'>\nexport type UnsignedEvent = Pick<Event, 'kind' | 'tags' | 'content' | 'created_at' | 'pubkey'>\n\n/** An event whose signature has been verified. */\nexport interface VerifiedEvent extends Event {\n [verifiedSymbol]: true\n}\n\nconst isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object\n\nexport function validateEvent<T>(event: T): event is T & UnsignedEvent {\n if (!isRecord(event)) return false\n if (typeof event.kind !== 'number') return false\n if (typeof event.content !== 'string') return false\n if (typeof event.created_at !== 'number') return false\n if (typeof event.pubkey !== 'string') return false\n if (!isHex32(event.pubkey)) return false\n\n if (!Array.isArray(event.tags)) return false\n for (let i = 0; i < event.tags.length; i++) {\n let tag = event.tags[i]\n if (!Array.isArray(tag)) return false\n for (let j = 0; j < tag.length; j++) {\n if (typeof tag[j] !== 'string') return false\n }\n }\n\n return true\n}\n\n/**\n * Sort events in reverse-chronological order by the `created_at` timestamp,\n * and then by the event `id` (lexicographically) in case of ties.\n * This mutates the array.\n */\nexport function sortEvents(events: Event[]): Event[] {\n return events.sort((a: NostrEvent, b: NostrEvent): number => {\n if (a.created_at !== b.created_at) {\n return b.created_at - a.created_at\n }\n return a.id.localeCompare(b.id)\n })\n}\n"],
5
+ "mappings": ";AAAA,SAAS,cAAAA,mBAAkB;;;ACK3B,SAAS,YAAY,kBAAkB;AAHhC,IAAM,cAA2B,IAAI,YAAY,OAAO;AACxD,IAAM,cAA2B,IAAI,YAAY;AA8HjD,SAAS,QAAQ,OAAwB;AAC9C,WAASC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAC3B,QAAI,KAAK,MAAM,WAAWA,EAAC;AAC3B,QAAI,MAAM,EAAE,KAAK,KAAK,MAAM,KAAK,OAAQ,KAAK,MAAM,KAAK,IAAK;AAC5D,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;AC/HO,IAAM,iBAAiB,OAAO,UAAU;AAsB/C,IAAM,WAAW,CAAC,QAAiD,eAAe;AAE3E,SAAS,cAAiB,OAAsC;AACrE,MAAI,CAAC,SAAS,KAAK;AAAG,WAAO;AAC7B,MAAI,OAAO,MAAM,SAAS;AAAU,WAAO;AAC3C,MAAI,OAAO,MAAM,YAAY;AAAU,WAAO;AAC9C,MAAI,OAAO,MAAM,eAAe;AAAU,WAAO;AACjD,MAAI,OAAO,MAAM,WAAW;AAAU,WAAO;AAC7C,MAAI,CAAC,QAAQ,MAAM,MAAM;AAAG,WAAO;AAEnC,MAAI,CAAC,MAAM,QAAQ,MAAM,IAAI;AAAG,WAAO;AACvC,WAASC,KAAI,GAAGA,KAAI,MAAM,KAAK,QAAQA,MAAK;AAC1C,QAAI,MAAM,MAAM,KAAKA;AACrB,QAAI,CAAC,MAAM,QAAQ,GAAG;AAAG,aAAO;AAChC,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAI,OAAO,IAAI,OAAO;AAAU,eAAO;AAAA,IACzC;AAAA,EACF;AAEA,SAAO;AACT;AAOO,SAAS,WAAW,QAA0B;AACnD,SAAO,OAAO,KAAK,CAAC,GAAe,MAA0B;AAC3D,QAAI,EAAE,eAAe,EAAE,YAAY;AACjC,aAAO,EAAE,aAAa,EAAE;AAAA,IAC1B;AACA,WAAO,EAAE,GAAG,cAAc,EAAE,EAAE;AAAA,EAChC,CAAC;AACH;;;AF9DA,IAAI;AAEG,SAAS,aAAa,GAAc;AACzC,OAAK;AACP;AAEA,IAAM,OAAN,MAA4B;AAAA,EAC1B,oBAAgC;AAC9B,WAAO,GAAG,kBAAkB;AAAA,EAC9B;AAAA,EACA,aAAa,WAA+B;AAC1C,WAAOC,YAAW,GAAG,aAAa,SAAS,CAAC;AAAA,EAC9C;AAAA,EACA,cAAc,GAAkB,WAAsC;AACpE,OAAG,cAAc,GAAU,SAAS;AACpC,WAAO;AAAA,EACT;AAAA,EACA,YAAY,OAAsC;AAChD,QAAI;AACF,SAAG,YAAY,KAAK;AACpB,YAAM,kBAAkB;AACxB,aAAO;AAAA,IACT,SAAS,KAAP;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,IAAM,IAAU,IAAI,KAAK;AAClB,IAAM,oBAAoB,EAAE;AAC5B,IAAM,eAAe,EAAE;AACvB,IAAM,gBAAgB,EAAE;AACxB,IAAM,cAAc,EAAE;",
6
+ "names": ["bytesToHex", "i", "i", "bytesToHex"]
7
7
  }
@@ -2228,44 +2228,6 @@ var NostrTools = (() => {
2228
2228
  };
2229
2229
  })();
2230
2230
 
2231
- // core.ts
2232
- var verifiedSymbol = Symbol("verified");
2233
- var isRecord = (obj) => obj instanceof Object;
2234
- function validateEvent(event) {
2235
- if (!isRecord(event))
2236
- return false;
2237
- if (typeof event.kind !== "number")
2238
- return false;
2239
- if (typeof event.content !== "string")
2240
- return false;
2241
- if (typeof event.created_at !== "number")
2242
- return false;
2243
- if (typeof event.pubkey !== "string")
2244
- return false;
2245
- if (!event.pubkey.match(/^[a-f0-9]{64}$/))
2246
- return false;
2247
- if (!Array.isArray(event.tags))
2248
- return false;
2249
- for (let i2 = 0; i2 < event.tags.length; i2++) {
2250
- let tag = event.tags[i2];
2251
- if (!Array.isArray(tag))
2252
- return false;
2253
- for (let j = 0; j < tag.length; j++) {
2254
- if (typeof tag[j] !== "string")
2255
- return false;
2256
- }
2257
- }
2258
- return true;
2259
- }
2260
- function sortEvents(events) {
2261
- return events.sort((a, b) => {
2262
- if (a.created_at !== b.created_at) {
2263
- return b.created_at - a.created_at;
2264
- }
2265
- return a.id.localeCompare(b.id);
2266
- });
2267
- }
2268
-
2269
2231
  // utils.ts
2270
2232
  var utils_exports = {};
2271
2233
  __export(utils_exports, {
@@ -2274,6 +2236,7 @@ var NostrTools = (() => {
2274
2236
  hexToBytes: () => hexToBytes,
2275
2237
  insertEventIntoAscendingList: () => insertEventIntoAscendingList,
2276
2238
  insertEventIntoDescendingList: () => insertEventIntoDescendingList,
2239
+ isHex32: () => isHex32,
2277
2240
  mergeReverseSortedLists: () => mergeReverseSortedLists,
2278
2241
  normalizeURL: () => normalizeURL,
2279
2242
  utf8Decoder: () => utf8Decoder,
@@ -2395,6 +2358,53 @@ var NostrTools = (() => {
2395
2358
  }
2396
2359
  return result;
2397
2360
  }
2361
+ function isHex32(input) {
2362
+ for (let i2 = 0; i2 < 64; i2++) {
2363
+ let cc = input.charCodeAt(i2);
2364
+ if (isNaN(cc) || cc < 48 || cc > 102 || cc > 57 && cc < 97) {
2365
+ return false;
2366
+ }
2367
+ }
2368
+ return true;
2369
+ }
2370
+
2371
+ // core.ts
2372
+ var verifiedSymbol = Symbol("verified");
2373
+ var isRecord = (obj) => obj instanceof Object;
2374
+ function validateEvent(event) {
2375
+ if (!isRecord(event))
2376
+ return false;
2377
+ if (typeof event.kind !== "number")
2378
+ return false;
2379
+ if (typeof event.content !== "string")
2380
+ return false;
2381
+ if (typeof event.created_at !== "number")
2382
+ return false;
2383
+ if (typeof event.pubkey !== "string")
2384
+ return false;
2385
+ if (!isHex32(event.pubkey))
2386
+ return false;
2387
+ if (!Array.isArray(event.tags))
2388
+ return false;
2389
+ for (let i2 = 0; i2 < event.tags.length; i2++) {
2390
+ let tag = event.tags[i2];
2391
+ if (!Array.isArray(tag))
2392
+ return false;
2393
+ for (let j = 0; j < tag.length; j++) {
2394
+ if (typeof tag[j] !== "string")
2395
+ return false;
2396
+ }
2397
+ }
2398
+ return true;
2399
+ }
2400
+ function sortEvents(events) {
2401
+ return events.sort((a, b) => {
2402
+ if (a.created_at !== b.created_at) {
2403
+ return b.created_at - a.created_at;
2404
+ }
2405
+ return a.id.localeCompare(b.id);
2406
+ });
2407
+ }
2398
2408
 
2399
2409
  // pure.ts
2400
2410
  var JS = class {
@@ -2499,6 +2509,7 @@ var NostrTools = (() => {
2499
2509
  Emojisets: () => Emojisets,
2500
2510
  EncryptedDirectMessage: () => EncryptedDirectMessage,
2501
2511
  EventDeletion: () => EventDeletion,
2512
+ FavoriteFollowSets: () => FavoriteFollowSets,
2502
2513
  FavoritePodcasts: () => FavoritePodcasts,
2503
2514
  FavoriteRelays: () => FavoriteRelays,
2504
2515
  FedimintAnnouncement: () => FedimintAnnouncement,
@@ -2771,6 +2782,7 @@ var NostrTools = (() => {
2771
2782
  var InterestsList = 10015;
2772
2783
  var NutZapInfo = 10019;
2773
2784
  var MediaFollows = 10020;
2785
+ var FavoriteFollowSets = 10021;
2774
2786
  var UserEmojiList = 10030;
2775
2787
  var DecoupledKeyAnnouncement = 10044;
2776
2788
  var DirectMessageRelaysList = 10050;
@@ -3094,6 +3106,11 @@ var NostrTools = (() => {
3094
3106
  }, backoff);
3095
3107
  }
3096
3108
  handleHardClose(reason) {
3109
+ if (this.ws) {
3110
+ this.ws.onopen = null;
3111
+ this.ws.onerror = null;
3112
+ this.ws.onclose = null;
3113
+ }
3097
3114
  if (this.pingIntervalHandle) {
3098
3115
  clearInterval(this.pingIntervalHandle);
3099
3116
  this.pingIntervalHandle = void 0;
@@ -3124,7 +3141,6 @@ var NostrTools = (() => {
3124
3141
  if (this.reconnectAttempts === 0) {
3125
3142
  this.skipReconnection = true;
3126
3143
  }
3127
- this.onclose?.();
3128
3144
  this.handleHardClose("relay connection timed out");
3129
3145
  }, opts.timeout);
3130
3146
  }
@@ -3170,7 +3186,6 @@ var NostrTools = (() => {
3170
3186
  if (this.reconnectAttempts === 0) {
3171
3187
  this.skipReconnection = true;
3172
3188
  }
3173
- this.onclose?.();
3174
3189
  this.handleHardClose("relay connection failed");
3175
3190
  };
3176
3191
  this.ws.onclose = (ev) => {
@@ -3339,11 +3354,17 @@ var NostrTools = (() => {
3339
3354
  }
3340
3355
  this.closeAllSubscriptions("relay connection closed by us");
3341
3356
  this._connected = false;
3357
+ this.connectionPromise = void 0;
3342
3358
  this.idleSince = void 0;
3343
3359
  this.clearIdleTimeout();
3344
3360
  this.onclose?.();
3345
- if (this.ws?.readyState === this._WebSocket.OPEN) {
3346
- this.ws?.close();
3361
+ if (this.ws) {
3362
+ this.ws.onopen = null;
3363
+ this.ws.onerror = null;
3364
+ this.ws.onclose = null;
3365
+ if (this.ws.readyState !== this._WebSocket.CLOSING && this.ws.readyState !== this._WebSocket.CLOSED) {
3366
+ this.ws.close();
3367
+ }
3347
3368
  }
3348
3369
  }
3349
3370
  _onmessage(ev) {
@@ -3370,7 +3391,7 @@ var NostrTools = (() => {
3370
3391
  case "EVENT": {
3371
3392
  const so = this.openSubs.get(data[1]);
3372
3393
  const event = data[2];
3373
- if (this.verifyEvent(event) && matchFilters(so.filters, event)) {
3394
+ if (matchFilters(so.filters, event) && this.verifyEvent(event, this.url)) {
3374
3395
  so.onevent(event);
3375
3396
  } else {
3376
3397
  so.oninvalidevent?.(event);
@@ -3543,12 +3564,6 @@ var NostrTools = (() => {
3543
3564
  }
3544
3565
  };
3545
3566
 
3546
- // helpers.ts
3547
- var alwaysTrue = (t) => {
3548
- t[verifiedSymbol] = true;
3549
- return true;
3550
- };
3551
-
3552
3567
  // nip45.ts
3553
3568
  var M = 256;
3554
3569
  var HLL_HEX_LENGTH = M * 2;
@@ -3573,7 +3588,7 @@ var NostrTools = (() => {
3573
3588
  return new Uint8Array(M);
3574
3589
  }
3575
3590
  function hllDecode(hex2) {
3576
- if (hex2.length !== HLL_HEX_LENGTH || !/^[0-9a-fA-F]+$/.test(hex2))
3591
+ if (hex2.length !== HLL_HEX_LENGTH || !/^[0-9a-f]+$/.test(hex2))
3577
3592
  return void 0;
3578
3593
  const registers = new Uint8Array(M);
3579
3594
  for (let i2 = 0; i2 < M; i2++) {
@@ -3614,7 +3629,6 @@ var NostrTools = (() => {
3614
3629
  enableReconnect;
3615
3630
  idleTimeout = 2e4;
3616
3631
  automaticallyAuth;
3617
- trustedRelayURLs = /* @__PURE__ */ new Set();
3618
3632
  onRelayConnectionFailure;
3619
3633
  onRelayConnectionSuccess;
3620
3634
  allowConnectingToRelay;
@@ -3638,7 +3652,7 @@ var NostrTools = (() => {
3638
3652
  let relay = this.relays.get(url);
3639
3653
  if (!relay) {
3640
3654
  relay = new AbstractRelay(url, {
3641
- verifyEvent: this.trustedRelayURLs.has(url) ? alwaysTrue : this.verifyEvent,
3655
+ verifyEvent: this.verifyEvent,
3642
3656
  websocketImplementation: this._WebSocket,
3643
3657
  enablePing: this.enablePing,
3644
3658
  enableReconnect: this.enableReconnect,
@@ -3722,11 +3736,11 @@ var NostrTools = (() => {
3722
3736
  }
3723
3737
  };
3724
3738
  const closesReceived = [];
3725
- let handleClose = (i2, reason) => {
3739
+ let handleClose = (i2, url, reason) => {
3726
3740
  if (closesReceived[i2])
3727
3741
  return;
3728
3742
  handleEose(i2);
3729
- closesReceived[i2] = reason;
3743
+ closesReceived[i2] = { url, reason };
3730
3744
  if (closesReceived.filter((a) => a).length === groupedRequests.length) {
3731
3745
  params.onclose?.(closesReceived);
3732
3746
  handleClose = () => {
@@ -3744,7 +3758,7 @@ var NostrTools = (() => {
3744
3758
  const allOpened = Promise.all(
3745
3759
  groupedRequests.map(async ({ url, filters }, i2) => {
3746
3760
  if (this.allowConnectingToRelay?.(url, ["read", filters]) === false) {
3747
- handleClose(i2, "connection skipped by allowConnectingToRelay");
3761
+ handleClose(i2, url, "connection skipped by allowConnectingToRelay");
3748
3762
  return;
3749
3763
  }
3750
3764
  let relay;
@@ -3755,7 +3769,7 @@ var NostrTools = (() => {
3755
3769
  });
3756
3770
  } catch (err) {
3757
3771
  this.onRelayConnectionFailure?.(url);
3758
- handleClose(i2, err?.message || String(err));
3772
+ handleClose(i2, url, err?.message || String(err));
3759
3773
  return;
3760
3774
  }
3761
3775
  this.onRelayConnectionSuccess?.(url);
@@ -3769,17 +3783,17 @@ var NostrTools = (() => {
3769
3783
  ...params,
3770
3784
  oneose: () => handleEose(i2),
3771
3785
  onclose: (reason2) => {
3772
- handleClose(i2, reason2);
3786
+ handleClose(i2, url, reason2);
3773
3787
  },
3774
3788
  alreadyHaveEvent: localAlreadyHaveEventHandler,
3775
3789
  eoseTimeout: params.maxWait,
3776
3790
  abort: params.abort
3777
3791
  });
3778
3792
  }).catch((err) => {
3779
- handleClose(i2, `auth was required and attempted, but failed with: ${err}`);
3793
+ handleClose(i2, url, `auth was required and attempted, but failed with: ${err}`);
3780
3794
  });
3781
3795
  } else {
3782
- handleClose(i2, reason);
3796
+ handleClose(i2, url, reason);
3783
3797
  }
3784
3798
  },
3785
3799
  alreadyHaveEvent: localAlreadyHaveEventHandler,
@@ -3807,7 +3821,7 @@ var NostrTools = (() => {
3807
3821
  if (subcloser)
3808
3822
  subcloser.close(reason);
3809
3823
  else
3810
- params.onclose?.(relays.map((_) => reason));
3824
+ params.onclose?.(relays.map((url) => ({ url, reason })));
3811
3825
  }
3812
3826
  });
3813
3827
  return subcloser;
@@ -5223,7 +5237,6 @@ var NostrTools = (() => {
5223
5237
  __export(nip10_exports, {
5224
5238
  parse: () => parse
5225
5239
  });
5226
- var HEX64 = /^[0-9a-fA-F]{64}$/;
5227
5240
  function parse(event) {
5228
5241
  const result = {
5229
5242
  reply: void 0,
@@ -5236,12 +5249,12 @@ var NostrTools = (() => {
5236
5249
  let maybeRoot;
5237
5250
  for (let i2 = event.tags.length - 1; i2 >= 0; i2--) {
5238
5251
  const tag = event.tags[i2];
5239
- if (tag[0] === "e" && tag[1] && HEX64.test(tag[1])) {
5252
+ if (tag[0] === "e" && tag[1] && isHex32(tag[1])) {
5240
5253
  const [_, eTagEventId, eTagRelayUrl, eTagMarker, eTagAuthor] = tag;
5241
5254
  const eventPointer = {
5242
5255
  id: eTagEventId,
5243
5256
  relays: eTagRelayUrl ? [eTagRelayUrl] : [],
5244
- author: eTagAuthor && HEX64.test(eTagAuthor) ? eTagAuthor : void 0
5257
+ author: eTagAuthor && isHex32(eTagAuthor) ? eTagAuthor : void 0
5245
5258
  };
5246
5259
  if (eTagMarker === "root") {
5247
5260
  result.root = eventPointer;
@@ -5263,14 +5276,14 @@ var NostrTools = (() => {
5263
5276
  result.mentions.push(eventPointer);
5264
5277
  continue;
5265
5278
  }
5266
- if (tag[0] === "q" && tag[1] && HEX64.test(tag[1])) {
5279
+ if (tag[0] === "q" && tag[1] && isHex32(tag[1])) {
5267
5280
  const [_, eTagEventId, eTagRelayUrl] = tag;
5268
5281
  result.quotes.push({
5269
5282
  id: eTagEventId,
5270
5283
  relays: eTagRelayUrl ? [eTagRelayUrl] : []
5271
5284
  });
5272
5285
  }
5273
- if (tag[0] === "p" && tag[1] && HEX64.test(tag[1])) {
5286
+ if (tag[0] === "p" && tag[1] && isHex32(tag[1])) {
5274
5287
  result.profiles.push({
5275
5288
  pubkey: tag[1],
5276
5289
  relays: tag[2] ? [tag[2]] : []
@@ -6390,7 +6403,6 @@ var NostrTools = (() => {
6390
6403
  __export(nip22_exports, {
6391
6404
  parse: () => parse3
6392
6405
  });
6393
- var HEX642 = /^[0-9a-fA-F]{64}$/;
6394
6406
  function parseKind(kind) {
6395
6407
  if (!kind)
6396
6408
  return void 0;
@@ -6405,7 +6417,7 @@ var NostrTools = (() => {
6405
6417
  if (Number.isNaN(kind))
6406
6418
  return void 0;
6407
6419
  const pubkey = value.slice(idx + 1, idx2);
6408
- if (!HEX642.test(pubkey))
6420
+ if (!isHex32(pubkey))
6409
6421
  return void 0;
6410
6422
  return {
6411
6423
  kind,
@@ -6418,12 +6430,12 @@ var NostrTools = (() => {
6418
6430
  switch (tag[0]) {
6419
6431
  case "E":
6420
6432
  case "e":
6421
- if (!tag[1] || !HEX642.test(tag[1]))
6433
+ if (!tag[1] || !isHex32(tag[1]))
6422
6434
  return void 0;
6423
6435
  return {
6424
6436
  id: tag[1],
6425
6437
  relays: tag[2] ? [tag[2]] : [],
6426
- author: tag[3] && HEX642.test(tag[3]) ? tag[3] : void 0
6438
+ author: tag[3] && isHex32(tag[3]) ? tag[3] : void 0
6427
6439
  };
6428
6440
  case "A":
6429
6441
  case "a":
@@ -6446,12 +6458,12 @@ var NostrTools = (() => {
6446
6458
  if (tag[1].includes(":")) {
6447
6459
  return parseAddressPointer(tag[1], tag[2]);
6448
6460
  }
6449
- if (!HEX642.test(tag[1]))
6461
+ if (!isHex32(tag[1]))
6450
6462
  return void 0;
6451
6463
  return {
6452
6464
  id: tag[1],
6453
6465
  relays: tag[2] ? [tag[2]] : [],
6454
- author: tag[3] && HEX642.test(tag[3]) ? tag[3] : void 0
6466
+ author: tag[3] && isHex32(tag[3]) ? tag[3] : void 0
6455
6467
  };
6456
6468
  }
6457
6469
  function choosePointer(candidates) {
@@ -6511,7 +6523,7 @@ var NostrTools = (() => {
6511
6523
  result.quotes.push(pointer);
6512
6524
  continue;
6513
6525
  }
6514
- if ((tag[0] === "P" || tag[0] === "p") && tag[1] && HEX642.test(tag[1])) {
6526
+ if ((tag[0] === "P" || tag[0] === "p") && tag[1] && isHex32(tag[1])) {
6515
6527
  result.profiles.push({
6516
6528
  pubkey: tag[1],
6517
6529
  relays: tag[2] ? [tag[2]] : []
@@ -7011,10 +7023,10 @@ var NostrTools = (() => {
7011
7023
  let p = zapRequest.tags.find(([t, v]) => t === "p" && v);
7012
7024
  if (!p)
7013
7025
  return "Zap request doesn't have a 'p' tag.";
7014
- if (!p[1].match(/^[a-f0-9]{64}$/))
7026
+ if (!isHex32(p[1]))
7015
7027
  return "Zap request 'p' tag is not valid hex.";
7016
7028
  let e = zapRequest.tags.find(([t, v]) => t === "e" && v);
7017
- if (e && !e[1].match(/^[a-f0-9]{64}$/))
7029
+ if (e && !isHex32(e[1]))
7018
7030
  return "Zap request 'e' tag is not valid hex.";
7019
7031
  let relays = zapRequest.tags.find(([t, v]) => t === "relays" && v);
7020
7032
  if (!relays)