nostr-websocket-utils 0.3.1 → 0.3.2

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 (410) hide show
  1. package/dist/__mocks__/extendedWsMock.d.ts +6 -8
  2. package/dist/__mocks__/extendedWsMock.d.ts.map +1 -0
  3. package/dist/__mocks__/extendedWsMock.js +1 -0
  4. package/dist/__mocks__/extendedWsMock.js.map +1 -0
  5. package/dist/__mocks__/mockLogger.d.ts +8 -7
  6. package/dist/__mocks__/mockLogger.d.ts.map +1 -0
  7. package/dist/__mocks__/mockLogger.js +1 -0
  8. package/dist/__mocks__/mockLogger.js.map +1 -0
  9. package/dist/__mocks__/mockserver.d.ts +7 -11
  10. package/dist/__mocks__/mockserver.d.ts.map +1 -0
  11. package/dist/__mocks__/mockserver.js +1 -0
  12. package/dist/__mocks__/mockserver.js.map +1 -0
  13. package/dist/__mocks__/wsMock.d.ts +1 -2
  14. package/dist/__mocks__/wsMock.d.ts.map +1 -0
  15. package/dist/__mocks__/wsMock.js +1 -0
  16. package/dist/__mocks__/wsMock.js.map +1 -0
  17. package/dist/cjs/__mocks__/extendedWsMock.d.ts +52 -0
  18. package/dist/cjs/__mocks__/extendedWsMock.d.ts.map +1 -0
  19. package/dist/cjs/__mocks__/extendedWsMock.js +161 -0
  20. package/dist/cjs/__mocks__/extendedWsMock.js.map +1 -0
  21. package/dist/cjs/__mocks__/mockLogger.d.ts +42 -0
  22. package/dist/cjs/__mocks__/mockLogger.d.ts.map +1 -0
  23. package/dist/cjs/__mocks__/mockLogger.js +53 -0
  24. package/dist/cjs/__mocks__/mockLogger.js.map +1 -0
  25. package/dist/cjs/__mocks__/mockserver.d.ts +27 -0
  26. package/dist/cjs/__mocks__/mockserver.d.ts.map +1 -0
  27. package/dist/cjs/__mocks__/mockserver.js +44 -0
  28. package/dist/cjs/__mocks__/mockserver.js.map +1 -0
  29. package/dist/cjs/__mocks__/wsMock.d.ts +25 -0
  30. package/dist/cjs/__mocks__/wsMock.d.ts.map +1 -0
  31. package/dist/cjs/__mocks__/wsMock.js +123 -0
  32. package/dist/cjs/__mocks__/wsMock.js.map +1 -0
  33. package/dist/cjs/core/client.d.ts +35 -0
  34. package/dist/cjs/core/client.d.ts.map +1 -0
  35. package/dist/cjs/core/client.js +161 -0
  36. package/dist/cjs/core/client.js.map +1 -0
  37. package/dist/{nostr-server.d.ts → cjs/core/nostr-server.d.ts} +3 -6
  38. package/dist/cjs/core/nostr-server.d.ts.map +1 -0
  39. package/dist/cjs/core/nostr-server.js +101 -0
  40. package/dist/cjs/core/nostr-server.js.map +1 -0
  41. package/dist/cjs/core/queue.d.ts +38 -0
  42. package/dist/cjs/core/queue.d.ts.map +1 -0
  43. package/dist/cjs/core/queue.js +105 -0
  44. package/dist/cjs/core/queue.js.map +1 -0
  45. package/dist/cjs/core/server.d.ts +29 -0
  46. package/dist/cjs/core/server.d.ts.map +1 -0
  47. package/dist/cjs/core/server.js +134 -0
  48. package/dist/cjs/core/server.js.map +1 -0
  49. package/dist/cjs/crypto/bech32.d.ts +27 -0
  50. package/dist/cjs/crypto/bech32.d.ts.map +1 -0
  51. package/dist/cjs/crypto/bech32.js +170 -0
  52. package/dist/cjs/crypto/bech32.js.map +1 -0
  53. package/dist/cjs/crypto/handlers.d.ts +19 -0
  54. package/dist/cjs/crypto/handlers.d.ts.map +1 -0
  55. package/dist/cjs/crypto/handlers.js +65 -0
  56. package/dist/cjs/crypto/handlers.js.map +1 -0
  57. package/dist/cjs/crypto/index.d.ts +6 -0
  58. package/dist/cjs/crypto/index.d.ts.map +1 -0
  59. package/dist/cjs/crypto/index.js +22 -0
  60. package/dist/cjs/crypto/index.js.map +1 -0
  61. package/dist/cjs/endpoints/metrics.d.ts +30 -0
  62. package/dist/cjs/endpoints/metrics.d.ts.map +1 -0
  63. package/dist/cjs/endpoints/metrics.js +106 -0
  64. package/dist/cjs/endpoints/metrics.js.map +1 -0
  65. package/dist/cjs/index.d.ts +13 -0
  66. package/dist/cjs/index.d.ts.map +1 -0
  67. package/dist/cjs/index.js +40 -0
  68. package/dist/cjs/index.js.map +1 -0
  69. package/dist/cjs/nips/index.d.ts +20 -0
  70. package/dist/cjs/nips/index.d.ts.map +1 -0
  71. package/dist/cjs/nips/index.js +51 -0
  72. package/dist/cjs/nips/index.js.map +1 -0
  73. package/dist/cjs/nips/nip-01.d.ts +35 -0
  74. package/dist/cjs/nips/nip-01.d.ts.map +1 -0
  75. package/dist/cjs/nips/nip-01.js +142 -0
  76. package/dist/cjs/nips/nip-01.js.map +1 -0
  77. package/dist/cjs/nips/nip-02.d.ts +83 -0
  78. package/dist/cjs/nips/nip-02.d.ts.map +1 -0
  79. package/dist/cjs/nips/nip-02.js +119 -0
  80. package/dist/cjs/nips/nip-02.js.map +1 -0
  81. package/dist/cjs/nips/nip-04.d.ts +37 -0
  82. package/dist/cjs/nips/nip-04.d.ts.map +1 -0
  83. package/dist/cjs/nips/nip-04.js +104 -0
  84. package/dist/cjs/nips/nip-04.js.map +1 -0
  85. package/dist/cjs/nips/nip-05.d.ts +88 -0
  86. package/dist/cjs/nips/nip-05.d.ts.map +1 -0
  87. package/dist/cjs/nips/nip-05.js +158 -0
  88. package/dist/cjs/nips/nip-05.js.map +1 -0
  89. package/dist/cjs/nips/nip-09.d.ts +93 -0
  90. package/dist/cjs/nips/nip-09.d.ts.map +1 -0
  91. package/dist/cjs/nips/nip-09.js +180 -0
  92. package/dist/cjs/nips/nip-09.js.map +1 -0
  93. package/dist/cjs/nips/nip-11.d.ts +65 -0
  94. package/dist/cjs/nips/nip-11.d.ts.map +1 -0
  95. package/dist/cjs/nips/nip-11.js +161 -0
  96. package/dist/cjs/nips/nip-11.js.map +1 -0
  97. package/dist/cjs/nips/nip-13.d.ts +74 -0
  98. package/dist/cjs/nips/nip-13.d.ts.map +1 -0
  99. package/dist/cjs/nips/nip-13.js +136 -0
  100. package/dist/cjs/nips/nip-13.js.map +1 -0
  101. package/dist/cjs/nips/nip-15.d.ts +84 -0
  102. package/dist/cjs/nips/nip-15.d.ts.map +1 -0
  103. package/dist/cjs/nips/nip-15.js +102 -0
  104. package/dist/cjs/nips/nip-15.js.map +1 -0
  105. package/dist/cjs/nips/nip-16.d.ts +89 -0
  106. package/dist/cjs/nips/nip-16.d.ts.map +1 -0
  107. package/dist/cjs/nips/nip-16.js +157 -0
  108. package/dist/cjs/nips/nip-16.js.map +1 -0
  109. package/dist/cjs/nips/nip-19.d.ts +29 -0
  110. package/dist/cjs/nips/nip-19.d.ts.map +1 -0
  111. package/dist/cjs/nips/nip-19.js +112 -0
  112. package/dist/cjs/nips/nip-19.js.map +1 -0
  113. package/dist/cjs/nips/nip-20.d.ts +60 -0
  114. package/dist/cjs/nips/nip-20.d.ts.map +1 -0
  115. package/dist/cjs/nips/nip-20.js +102 -0
  116. package/dist/cjs/nips/nip-20.js.map +1 -0
  117. package/dist/cjs/nips/nip-22.d.ts +90 -0
  118. package/dist/cjs/nips/nip-22.d.ts.map +1 -0
  119. package/dist/cjs/nips/nip-22.js +149 -0
  120. package/dist/cjs/nips/nip-22.js.map +1 -0
  121. package/dist/cjs/nips/nip-26.d.ts +53 -0
  122. package/dist/cjs/nips/nip-26.d.ts.map +1 -0
  123. package/dist/cjs/nips/nip-26.js +147 -0
  124. package/dist/cjs/nips/nip-26.js.map +1 -0
  125. package/dist/cjs/nips/nip-28.d.ts +104 -0
  126. package/dist/cjs/nips/nip-28.d.ts.map +1 -0
  127. package/dist/cjs/nips/nip-28.js +164 -0
  128. package/dist/cjs/nips/nip-28.js.map +1 -0
  129. package/dist/cjs/nips/nip-33.d.ts +95 -0
  130. package/dist/cjs/nips/nip-33.d.ts.map +1 -0
  131. package/dist/cjs/nips/nip-33.js +135 -0
  132. package/dist/cjs/nips/nip-33.js.map +1 -0
  133. package/dist/cjs/transport/base.d.ts +54 -0
  134. package/dist/cjs/transport/base.d.ts.map +1 -0
  135. package/dist/cjs/transport/base.js +109 -0
  136. package/dist/cjs/transport/base.js.map +1 -0
  137. package/dist/cjs/transport/websocket.d.ts +24 -0
  138. package/dist/cjs/transport/websocket.d.ts.map +1 -0
  139. package/dist/cjs/transport/websocket.js +136 -0
  140. package/dist/cjs/transport/websocket.js.map +1 -0
  141. package/dist/cjs/types/events.d.ts +74 -0
  142. package/dist/cjs/types/events.d.ts.map +1 -0
  143. package/dist/cjs/types/events.js +7 -0
  144. package/dist/cjs/types/events.js.map +1 -0
  145. package/dist/cjs/types/filters.d.ts +20 -0
  146. package/dist/cjs/types/filters.d.ts.map +1 -0
  147. package/dist/cjs/types/filters.js +7 -0
  148. package/dist/cjs/types/filters.js.map +1 -0
  149. package/dist/cjs/types/handlers.d.ts +81 -0
  150. package/dist/cjs/types/handlers.d.ts.map +1 -0
  151. package/dist/cjs/types/handlers.js +7 -0
  152. package/dist/cjs/types/handlers.js.map +1 -0
  153. package/dist/cjs/types/index.d.ts +144 -0
  154. package/dist/cjs/types/index.d.ts.map +1 -0
  155. package/dist/cjs/types/index.js +37 -0
  156. package/dist/cjs/types/index.js.map +1 -0
  157. package/dist/cjs/types/logger.d.ts +41 -0
  158. package/dist/cjs/types/logger.d.ts.map +1 -0
  159. package/dist/cjs/types/logger.js +7 -0
  160. package/dist/cjs/types/logger.js.map +1 -0
  161. package/dist/cjs/types/messages.d.ts +133 -0
  162. package/dist/cjs/types/messages.d.ts.map +1 -0
  163. package/dist/cjs/types/messages.js +46 -0
  164. package/dist/cjs/types/messages.js.map +1 -0
  165. package/dist/cjs/types/nostr.d.ts +134 -0
  166. package/dist/cjs/types/nostr.d.ts.map +1 -0
  167. package/dist/cjs/types/nostr.js +7 -0
  168. package/dist/cjs/types/nostr.js.map +1 -0
  169. package/dist/cjs/types/options.d.ts +155 -0
  170. package/dist/cjs/types/options.d.ts.map +1 -0
  171. package/dist/cjs/types/options.js +7 -0
  172. package/dist/cjs/types/options.js.map +1 -0
  173. package/dist/cjs/types/priority.d.ts +13 -0
  174. package/dist/cjs/types/priority.d.ts.map +1 -0
  175. package/dist/cjs/types/priority.js +17 -0
  176. package/dist/cjs/types/priority.js.map +1 -0
  177. package/dist/cjs/types/relays.d.ts +27 -0
  178. package/dist/cjs/types/relays.d.ts.map +1 -0
  179. package/dist/cjs/types/relays.js +7 -0
  180. package/dist/cjs/types/relays.js.map +1 -0
  181. package/dist/cjs/types/scoring.d.ts +59 -0
  182. package/dist/cjs/types/scoring.d.ts.map +1 -0
  183. package/dist/cjs/types/scoring.js +34 -0
  184. package/dist/cjs/types/scoring.js.map +1 -0
  185. package/dist/cjs/types/socket.d.ts +98 -0
  186. package/dist/cjs/types/socket.d.ts.map +1 -0
  187. package/dist/cjs/types/socket.js +7 -0
  188. package/dist/cjs/types/socket.js.map +1 -0
  189. package/dist/cjs/types/transport.d.ts +98 -0
  190. package/dist/cjs/types/transport.d.ts.map +1 -0
  191. package/dist/cjs/types/transport.js +7 -0
  192. package/dist/cjs/types/transport.js.map +1 -0
  193. package/dist/cjs/types/validation.d.ts +51 -0
  194. package/dist/cjs/types/validation.d.ts.map +1 -0
  195. package/dist/cjs/types/validation.js +7 -0
  196. package/dist/cjs/types/validation.js.map +1 -0
  197. package/dist/cjs/types/websocket.d.ts +250 -0
  198. package/dist/cjs/types/websocket.d.ts.map +1 -0
  199. package/dist/cjs/types/websocket.js +7 -0
  200. package/dist/cjs/types/websocket.js.map +1 -0
  201. package/dist/cjs/utils/http.d.ts +11 -0
  202. package/dist/cjs/utils/http.d.ts.map +1 -0
  203. package/dist/cjs/utils/http.js +28 -0
  204. package/dist/cjs/utils/http.js.map +1 -0
  205. package/dist/cjs/utils/logger.d.ts +26 -0
  206. package/dist/cjs/utils/logger.d.ts.map +1 -0
  207. package/dist/cjs/utils/logger.js +43 -0
  208. package/dist/cjs/utils/logger.js.map +1 -0
  209. package/dist/cjs/utils/metrics.d.ts +81 -0
  210. package/dist/cjs/utils/metrics.d.ts.map +1 -0
  211. package/dist/cjs/utils/metrics.js +211 -0
  212. package/dist/cjs/utils/metrics.js.map +1 -0
  213. package/dist/cjs/utils/rate-limiter.d.ts +86 -0
  214. package/dist/cjs/utils/rate-limiter.d.ts.map +1 -0
  215. package/dist/cjs/utils/rate-limiter.js +183 -0
  216. package/dist/cjs/utils/rate-limiter.js.map +1 -0
  217. package/dist/core/client.d.ts +1 -0
  218. package/dist/core/client.d.ts.map +1 -0
  219. package/dist/core/client.js +1 -0
  220. package/dist/core/client.js.map +1 -0
  221. package/dist/core/nostr-server.d.ts +1 -0
  222. package/dist/core/nostr-server.d.ts.map +1 -0
  223. package/dist/core/nostr-server.js +1 -0
  224. package/dist/core/nostr-server.js.map +1 -0
  225. package/dist/core/queue.d.ts +1 -0
  226. package/dist/core/queue.d.ts.map +1 -0
  227. package/dist/core/queue.js +1 -0
  228. package/dist/core/queue.js.map +1 -0
  229. package/dist/core/server.d.ts +1 -0
  230. package/dist/core/server.d.ts.map +1 -0
  231. package/dist/core/server.js +1 -0
  232. package/dist/core/server.js.map +1 -0
  233. package/dist/crypto/bech32.d.ts +1 -0
  234. package/dist/crypto/bech32.d.ts.map +1 -0
  235. package/dist/crypto/bech32.js +1 -0
  236. package/dist/crypto/bech32.js.map +1 -0
  237. package/dist/crypto/handlers.d.ts +1 -0
  238. package/dist/crypto/handlers.d.ts.map +1 -0
  239. package/dist/crypto/handlers.js +1 -0
  240. package/dist/crypto/handlers.js.map +1 -0
  241. package/dist/crypto/index.d.ts +1 -0
  242. package/dist/crypto/index.d.ts.map +1 -0
  243. package/dist/crypto/index.js +1 -0
  244. package/dist/crypto/index.js.map +1 -0
  245. package/dist/endpoints/metrics.d.ts +1 -0
  246. package/dist/endpoints/metrics.d.ts.map +1 -0
  247. package/dist/endpoints/metrics.js +1 -0
  248. package/dist/endpoints/metrics.js.map +1 -0
  249. package/dist/index.d.ts +1 -0
  250. package/dist/index.d.ts.map +1 -0
  251. package/dist/index.js +1 -0
  252. package/dist/index.js.map +1 -0
  253. package/dist/nips/index.d.ts +1 -0
  254. package/dist/nips/index.d.ts.map +1 -0
  255. package/dist/nips/index.js +1 -0
  256. package/dist/nips/index.js.map +1 -0
  257. package/dist/nips/nip-01.d.ts +1 -0
  258. package/dist/nips/nip-01.d.ts.map +1 -0
  259. package/dist/nips/nip-01.js +1 -0
  260. package/dist/nips/nip-01.js.map +1 -0
  261. package/dist/nips/nip-02.d.ts +1 -0
  262. package/dist/nips/nip-02.d.ts.map +1 -0
  263. package/dist/nips/nip-02.js +1 -0
  264. package/dist/nips/nip-02.js.map +1 -0
  265. package/dist/nips/nip-04.d.ts +1 -0
  266. package/dist/nips/nip-04.d.ts.map +1 -0
  267. package/dist/nips/nip-04.js +1 -0
  268. package/dist/nips/nip-04.js.map +1 -0
  269. package/dist/nips/nip-05.d.ts +1 -0
  270. package/dist/nips/nip-05.d.ts.map +1 -0
  271. package/dist/nips/nip-05.js +1 -0
  272. package/dist/nips/nip-05.js.map +1 -0
  273. package/dist/nips/nip-09.d.ts +1 -0
  274. package/dist/nips/nip-09.d.ts.map +1 -0
  275. package/dist/nips/nip-09.js +1 -0
  276. package/dist/nips/nip-09.js.map +1 -0
  277. package/dist/nips/nip-11.d.ts +1 -0
  278. package/dist/nips/nip-11.d.ts.map +1 -0
  279. package/dist/nips/nip-11.js +1 -0
  280. package/dist/nips/nip-11.js.map +1 -0
  281. package/dist/nips/nip-13.d.ts +1 -0
  282. package/dist/nips/nip-13.d.ts.map +1 -0
  283. package/dist/nips/nip-13.js +1 -0
  284. package/dist/nips/nip-13.js.map +1 -0
  285. package/dist/nips/nip-15.d.ts +1 -0
  286. package/dist/nips/nip-15.d.ts.map +1 -0
  287. package/dist/nips/nip-15.js +1 -0
  288. package/dist/nips/nip-15.js.map +1 -0
  289. package/dist/nips/nip-16.d.ts +1 -0
  290. package/dist/nips/nip-16.d.ts.map +1 -0
  291. package/dist/nips/nip-16.js +1 -0
  292. package/dist/nips/nip-16.js.map +1 -0
  293. package/dist/nips/nip-19.d.ts +1 -0
  294. package/dist/nips/nip-19.d.ts.map +1 -0
  295. package/dist/nips/nip-19.js +1 -0
  296. package/dist/nips/nip-19.js.map +1 -0
  297. package/dist/nips/nip-20.d.ts +1 -0
  298. package/dist/nips/nip-20.d.ts.map +1 -0
  299. package/dist/nips/nip-20.js +1 -0
  300. package/dist/nips/nip-20.js.map +1 -0
  301. package/dist/nips/nip-22.d.ts +1 -0
  302. package/dist/nips/nip-22.d.ts.map +1 -0
  303. package/dist/nips/nip-22.js +1 -0
  304. package/dist/nips/nip-22.js.map +1 -0
  305. package/dist/nips/nip-26.d.ts +1 -0
  306. package/dist/nips/nip-26.d.ts.map +1 -0
  307. package/dist/nips/nip-26.js +1 -0
  308. package/dist/nips/nip-26.js.map +1 -0
  309. package/dist/nips/nip-28.d.ts +1 -0
  310. package/dist/nips/nip-28.d.ts.map +1 -0
  311. package/dist/nips/nip-28.js +1 -0
  312. package/dist/nips/nip-28.js.map +1 -0
  313. package/dist/nips/nip-33.d.ts +1 -0
  314. package/dist/nips/nip-33.d.ts.map +1 -0
  315. package/dist/nips/nip-33.js +1 -0
  316. package/dist/nips/nip-33.js.map +1 -0
  317. package/dist/transport/base.d.ts +1 -1
  318. package/dist/transport/base.d.ts.map +1 -0
  319. package/dist/transport/base.js +1 -0
  320. package/dist/transport/base.js.map +1 -0
  321. package/dist/transport/websocket.d.ts +1 -0
  322. package/dist/transport/websocket.d.ts.map +1 -0
  323. package/dist/transport/websocket.js +1 -0
  324. package/dist/transport/websocket.js.map +1 -0
  325. package/dist/types/events.d.ts +1 -0
  326. package/dist/types/events.d.ts.map +1 -0
  327. package/dist/types/events.js +1 -0
  328. package/dist/types/events.js.map +1 -0
  329. package/dist/types/filters.d.ts +1 -0
  330. package/dist/types/filters.d.ts.map +1 -0
  331. package/dist/types/filters.js +1 -0
  332. package/dist/types/filters.js.map +1 -0
  333. package/dist/types/handlers.d.ts +1 -0
  334. package/dist/types/handlers.d.ts.map +1 -0
  335. package/dist/types/handlers.js +1 -0
  336. package/dist/types/handlers.js.map +1 -0
  337. package/dist/types/index.d.ts +1 -0
  338. package/dist/types/index.d.ts.map +1 -0
  339. package/dist/types/index.js +1 -0
  340. package/dist/types/index.js.map +1 -0
  341. package/dist/types/logger.d.ts +1 -0
  342. package/dist/types/logger.d.ts.map +1 -0
  343. package/dist/types/logger.js +1 -0
  344. package/dist/types/logger.js.map +1 -0
  345. package/dist/types/messages.d.ts +1 -0
  346. package/dist/types/messages.d.ts.map +1 -0
  347. package/dist/types/messages.js +1 -0
  348. package/dist/types/messages.js.map +1 -0
  349. package/dist/types/nostr.d.ts +1 -0
  350. package/dist/types/nostr.d.ts.map +1 -0
  351. package/dist/types/nostr.js +1 -0
  352. package/dist/types/nostr.js.map +1 -0
  353. package/dist/types/options.d.ts +1 -0
  354. package/dist/types/options.d.ts.map +1 -0
  355. package/dist/types/options.js +1 -0
  356. package/dist/types/options.js.map +1 -0
  357. package/dist/types/priority.d.ts +1 -0
  358. package/dist/types/priority.d.ts.map +1 -0
  359. package/dist/types/priority.js +1 -0
  360. package/dist/types/priority.js.map +1 -0
  361. package/dist/types/relays.d.ts +1 -0
  362. package/dist/types/relays.d.ts.map +1 -0
  363. package/dist/types/relays.js +1 -0
  364. package/dist/types/relays.js.map +1 -0
  365. package/dist/types/scoring.d.ts +1 -2
  366. package/dist/types/scoring.d.ts.map +1 -0
  367. package/dist/types/scoring.js +1 -0
  368. package/dist/types/scoring.js.map +1 -0
  369. package/dist/types/socket.d.ts +1 -2
  370. package/dist/types/socket.d.ts.map +1 -0
  371. package/dist/types/socket.js +1 -0
  372. package/dist/types/socket.js.map +1 -0
  373. package/dist/types/transport.d.ts +1 -0
  374. package/dist/types/transport.d.ts.map +1 -0
  375. package/dist/types/transport.js +1 -0
  376. package/dist/types/transport.js.map +1 -0
  377. package/dist/types/validation.d.ts +1 -0
  378. package/dist/types/validation.d.ts.map +1 -0
  379. package/dist/types/validation.js +1 -0
  380. package/dist/types/validation.js.map +1 -0
  381. package/dist/types/websocket.d.ts +1 -0
  382. package/dist/types/websocket.d.ts.map +1 -0
  383. package/dist/types/websocket.js +1 -0
  384. package/dist/types/websocket.js.map +1 -0
  385. package/dist/utils/http.d.ts +1 -0
  386. package/dist/utils/http.d.ts.map +1 -0
  387. package/dist/utils/http.js +1 -0
  388. package/dist/utils/http.js.map +1 -0
  389. package/dist/utils/logger.d.ts +1 -0
  390. package/dist/utils/logger.d.ts.map +1 -0
  391. package/dist/utils/logger.js +1 -0
  392. package/dist/utils/logger.js.map +1 -0
  393. package/dist/utils/metrics.d.ts +1 -1
  394. package/dist/utils/metrics.d.ts.map +1 -0
  395. package/dist/utils/metrics.js +1 -0
  396. package/dist/utils/metrics.js.map +1 -0
  397. package/dist/utils/rate-limiter.d.ts +1 -0
  398. package/dist/utils/rate-limiter.d.ts.map +1 -0
  399. package/dist/utils/rate-limiter.js +1 -0
  400. package/dist/utils/rate-limiter.js.map +1 -0
  401. package/package.json +14 -2
  402. package/dist/__mocks__/logger.d.ts +0 -9
  403. package/dist/__mocks__/logger.js +0 -6
  404. package/dist/client.d.ts +0 -129
  405. package/dist/client.js +0 -259
  406. package/dist/crypto/schnorr.d.ts +0 -16
  407. package/dist/crypto/schnorr.js +0 -51
  408. package/dist/nostr-server.js +0 -107
  409. package/dist/server.d.ts +0 -27
  410. package/dist/server.js +0 -132
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-04: Encrypted Direct Message Support
4
+ * @module nips/nip-04
5
+ * @see https://github.com/nostr-protocol/nips/blob/master/04.md
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ENCRYPTED_DM_KIND = void 0;
9
+ exports.createEncryptedDM = createEncryptedDM;
10
+ exports.decryptDM = decryptDM;
11
+ exports.validateEncryptedDM = validateEncryptedDM;
12
+ const nostr_crypto_utils_1 = require("nostr-crypto-utils");
13
+ /**
14
+ * Kind value for encrypted direct messages
15
+ */
16
+ exports.ENCRYPTED_DM_KIND = 4;
17
+ /**
18
+ * Creates an encrypted direct message event
19
+ * @param content - Message content to encrypt
20
+ * @param recipientPubkey - Recipient's public key
21
+ * @param senderPrivkey - Sender's private key
22
+ * @param tags - Additional tags for the event
23
+ * @returns {Promise<NostrWSMessage>} Encrypted message event
24
+ */
25
+ async function createEncryptedDM(content, recipientPubkey, senderPrivkey, tags = []) {
26
+ try {
27
+ const encryptedContent = await (0, nostr_crypto_utils_1.encryptMessage)(content, recipientPubkey, senderPrivkey);
28
+ return ['EVENT', {
29
+ kind: exports.ENCRYPTED_DM_KIND,
30
+ content: encryptedContent,
31
+ tags: [
32
+ ['p', recipientPubkey],
33
+ ...tags
34
+ ]
35
+ }];
36
+ }
37
+ catch (error) {
38
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
39
+ throw new Error(`Failed to create encrypted DM: ${errorMessage}`);
40
+ }
41
+ }
42
+ /**
43
+ * Decrypts a received direct message event
44
+ * @param message - Received message
45
+ * @param recipientPrivkey - Recipient's private key
46
+ * @param senderPubkey - Sender's public key
47
+ * @param logger - Logger instance
48
+ * @returns {Promise<string>} Decrypted message content
49
+ */
50
+ async function decryptDM(message, recipientPrivkey, senderPubkey, logger) {
51
+ try {
52
+ if (!Array.isArray(message) || message[0] !== 'EVENT') {
53
+ throw new Error('Invalid message format');
54
+ }
55
+ const event = message[1];
56
+ if (event.kind !== exports.ENCRYPTED_DM_KIND) {
57
+ throw new Error('Not an encrypted DM event');
58
+ }
59
+ return await (0, nostr_crypto_utils_1.decryptMessage)(event.content, senderPubkey, recipientPrivkey);
60
+ }
61
+ catch (error) {
62
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
63
+ logger.error('Failed to decrypt DM:', errorMessage);
64
+ throw new Error(`Failed to decrypt DM: ${errorMessage}`);
65
+ }
66
+ }
67
+ /**
68
+ * Validates an encrypted DM event format
69
+ * @param message - Message to validate
70
+ * @param logger - Logger instance
71
+ * @returns {boolean} True if message follows NIP-04 format
72
+ */
73
+ function validateEncryptedDM(message, logger) {
74
+ try {
75
+ if (!Array.isArray(message) || message[0] !== 'EVENT') {
76
+ logger.debug('Invalid message format');
77
+ return false;
78
+ }
79
+ const event = message[1];
80
+ if (event.kind !== exports.ENCRYPTED_DM_KIND) {
81
+ logger.debug('Not an encrypted DM event');
82
+ return false;
83
+ }
84
+ if (!event.content || typeof event.content !== 'string') {
85
+ logger.debug('Missing or invalid content');
86
+ return false;
87
+ }
88
+ if (!Array.isArray(event.tags)) {
89
+ logger.debug('Missing tags array');
90
+ return false;
91
+ }
92
+ const recipientTag = event.tags.find((tag) => Array.isArray(tag) && tag[0] === 'p' && tag[1]);
93
+ if (!recipientTag) {
94
+ logger.debug('Missing recipient tag');
95
+ return false;
96
+ }
97
+ return true;
98
+ }
99
+ catch (error) {
100
+ logger.error('Error validating encrypted DM:', error);
101
+ return false;
102
+ }
103
+ }
104
+ //# sourceMappingURL=nip-04.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-04.js","sourceRoot":"","sources":["../../../src/nips/nip-04.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @file NIP-05: DNS-Based Verification
3
+ * @module nips/nip-05
4
+ * @see https://github.com/nostr-protocol/nips/blob/master/05.md
5
+ */
6
+ import { Logger } from 'pino';
7
+ /**
8
+ * NIP-05 verification result
9
+ */
10
+ export interface NIP05VerificationResult {
11
+ valid: boolean;
12
+ pubkey?: string;
13
+ relays?: string[];
14
+ error?: string;
15
+ }
16
+ /**
17
+ * Verifies a NIP-05 identifier
18
+ * @param identifier - Internet identifier (user@domain.com)
19
+ * @param pubkey - Public key to verify
20
+ * @param logger - Logger instance
21
+ * @returns {Promise<NIP05VerificationResult>} Verification result
22
+ */
23
+ export declare function verifyNIP05Identifier(identifier: string, pubkey: string, logger: Logger): Promise<NIP05VerificationResult>;
24
+ /**
25
+ * Creates metadata event with NIP-05 identifier
26
+ * @param identifier - Internet identifier
27
+ * @param metadata - Additional metadata
28
+ * @returns {Record<string, unknown>} Metadata event content
29
+ */
30
+ export declare function createNIP05Metadata(identifier: string, metadata?: Record<string, unknown>): Record<string, unknown>;
31
+ /**
32
+ * NIP-05 verification cache interface
33
+ */
34
+ export interface NIP05VerificationCache {
35
+ /**
36
+ * Gets cached verification result
37
+ * @param identifier - Internet identifier
38
+ * @param pubkey - Public key
39
+ * @returns {NIP05VerificationResult | undefined} Cached result
40
+ */
41
+ get(identifier: string, pubkey: string): NIP05VerificationResult | undefined;
42
+ /**
43
+ * Sets verification result in cache
44
+ * @param identifier - Internet identifier
45
+ * @param pubkey - Public key
46
+ * @param result - Verification result
47
+ * @param ttl - Time to live in seconds
48
+ */
49
+ set(identifier: string, pubkey: string, result: NIP05VerificationResult, ttl: number): void;
50
+ /**
51
+ * Clears expired entries
52
+ */
53
+ cleanup(): void;
54
+ }
55
+ /**
56
+ * Creates a NIP-05 verification cache
57
+ * @param defaultTTL - Default TTL in seconds
58
+ * @returns {NIP05VerificationCache} Verification cache
59
+ */
60
+ export declare function createNIP05VerificationCache(defaultTTL?: number): NIP05VerificationCache;
61
+ /**
62
+ * Batch verification interface for multiple identifiers
63
+ */
64
+ export interface NIP05BatchVerifier {
65
+ /**
66
+ * Adds identifier to verification queue
67
+ * @param identifier - Internet identifier
68
+ * @param pubkey - Public key
69
+ */
70
+ addToQueue(identifier: string, pubkey: string): void;
71
+ /**
72
+ * Verifies all queued identifiers
73
+ * @returns {Promise<Map<string, NIP05VerificationResult>>} Verification results
74
+ */
75
+ verifyAll(): Promise<Map<string, NIP05VerificationResult>>;
76
+ /**
77
+ * Clears verification queue
78
+ */
79
+ clearQueue(): void;
80
+ }
81
+ /**
82
+ * Creates a NIP-05 batch verifier
83
+ * @param logger - Logger instance
84
+ * @param cache - Optional verification cache
85
+ * @returns {NIP05BatchVerifier} Batch verifier
86
+ */
87
+ export declare function createNIP05BatchVerifier(logger: Logger, cache?: NIP05VerificationCache): NIP05BatchVerifier;
88
+ //# sourceMappingURL=nip-05.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-05.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-05.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,CAAC,CAuDlC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAAC;IAE7E;;;;;;OAMG;IACH,GAAG,CACD,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,uBAAuB,EAC/B,GAAG,EAAE,MAAM,GACV,IAAI,CAAC;IAER;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,GAAE,MAAa,GACxB,sBAAsB,CAiDxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAErD;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE3D;;OAEG;IACH,UAAU,IAAI,IAAI,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,sBAAsB,GAC7B,kBAAkB,CAqCpB"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-05: DNS-Based Verification
4
+ * @module nips/nip-05
5
+ * @see https://github.com/nostr-protocol/nips/blob/master/05.md
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.verifyNIP05Identifier = verifyNIP05Identifier;
9
+ exports.createNIP05Metadata = createNIP05Metadata;
10
+ exports.createNIP05VerificationCache = createNIP05VerificationCache;
11
+ exports.createNIP05BatchVerifier = createNIP05BatchVerifier;
12
+ const http_1 = require("../utils/http");
13
+ /**
14
+ * Verifies a NIP-05 identifier
15
+ * @param identifier - Internet identifier (user@domain.com)
16
+ * @param pubkey - Public key to verify
17
+ * @param logger - Logger instance
18
+ * @returns {Promise<NIP05VerificationResult>} Verification result
19
+ */
20
+ async function verifyNIP05Identifier(identifier, pubkey, logger) {
21
+ try {
22
+ // Parse identifier
23
+ const [name, domain] = identifier.split('@');
24
+ if (!name || !domain) {
25
+ return {
26
+ valid: false,
27
+ error: 'Invalid identifier format'
28
+ };
29
+ }
30
+ // Fetch well-known URL
31
+ const url = `https://${domain}/.well-known/nostr.json?name=${name}`;
32
+ const response = await (0, http_1.fetchJson)(url);
33
+ if (!response || !response.names || !response.names[name]) {
34
+ return {
35
+ valid: false,
36
+ error: 'Name not found in well-known file'
37
+ };
38
+ }
39
+ // Verify name matches pubkey
40
+ const verifiedPubkey = response.names[name];
41
+ if (!verifiedPubkey) {
42
+ return {
43
+ valid: false,
44
+ error: 'Name not found'
45
+ };
46
+ }
47
+ if (verifiedPubkey !== pubkey) {
48
+ return {
49
+ valid: false,
50
+ error: 'Public key mismatch'
51
+ };
52
+ }
53
+ // Get associated relays if available
54
+ const relays = response.relays?.[verifiedPubkey];
55
+ return {
56
+ valid: true,
57
+ pubkey: verifiedPubkey,
58
+ relays
59
+ };
60
+ }
61
+ catch (error) {
62
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
63
+ logger.error(`NIP-05 verification failed: ${errorMessage}`);
64
+ return {
65
+ valid: false,
66
+ error: errorMessage
67
+ };
68
+ }
69
+ }
70
+ /**
71
+ * Creates metadata event with NIP-05 identifier
72
+ * @param identifier - Internet identifier
73
+ * @param metadata - Additional metadata
74
+ * @returns {Record<string, unknown>} Metadata event content
75
+ */
76
+ function createNIP05Metadata(identifier, metadata = {}) {
77
+ return {
78
+ ...metadata,
79
+ nip05: identifier
80
+ };
81
+ }
82
+ /**
83
+ * Creates a NIP-05 verification cache
84
+ * @param defaultTTL - Default TTL in seconds
85
+ * @returns {NIP05VerificationCache} Verification cache
86
+ */
87
+ function createNIP05VerificationCache(defaultTTL = 3600) {
88
+ const cache = new Map();
89
+ function getCacheKey(identifier, pubkey) {
90
+ return `${identifier}:${pubkey}`;
91
+ }
92
+ return {
93
+ get(identifier, pubkey) {
94
+ const key = getCacheKey(identifier, pubkey);
95
+ const entry = cache.get(key);
96
+ if (!entry)
97
+ return undefined;
98
+ if (Date.now() > entry.expiresAt) {
99
+ cache.delete(key);
100
+ return undefined;
101
+ }
102
+ return entry.result;
103
+ },
104
+ set(identifier, pubkey, result, ttl = defaultTTL) {
105
+ const key = getCacheKey(identifier, pubkey);
106
+ cache.set(key, {
107
+ result,
108
+ expiresAt: Date.now() + (ttl * 1000)
109
+ });
110
+ },
111
+ cleanup() {
112
+ const now = Date.now();
113
+ for (const [key, entry] of cache.entries()) {
114
+ if (now > entry.expiresAt) {
115
+ cache.delete(key);
116
+ }
117
+ }
118
+ }
119
+ };
120
+ }
121
+ /**
122
+ * Creates a NIP-05 batch verifier
123
+ * @param logger - Logger instance
124
+ * @param cache - Optional verification cache
125
+ * @returns {NIP05BatchVerifier} Batch verifier
126
+ */
127
+ function createNIP05BatchVerifier(logger, cache) {
128
+ const queue = new Map();
129
+ return {
130
+ addToQueue(identifier, pubkey) {
131
+ queue.set(identifier, pubkey);
132
+ },
133
+ async verifyAll() {
134
+ const results = new Map();
135
+ for (const [identifier, pubkey] of queue.entries()) {
136
+ // Check cache first
137
+ if (cache) {
138
+ const cached = cache.get(identifier, pubkey);
139
+ if (cached) {
140
+ results.set(identifier, cached);
141
+ continue;
142
+ }
143
+ }
144
+ // Verify and cache result
145
+ const result = await verifyNIP05Identifier(identifier, pubkey, logger);
146
+ results.set(identifier, result);
147
+ if (cache) {
148
+ cache.set(identifier, pubkey, result, 3600);
149
+ }
150
+ }
151
+ return results;
152
+ },
153
+ clearQueue() {
154
+ queue.clear();
155
+ }
156
+ };
157
+ }
158
+ //# sourceMappingURL=nip-05.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-05.js","sourceRoot":"","sources":["../../../src/nips/nip-05.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @file NIP-09: Event Deletion
3
+ * @module nips/nip-09
4
+ * @see https://github.com/nostr-protocol/nips/blob/master/09.md
5
+ */
6
+ import type { NostrEvent, NostrSubscriptionEvent } from '../types/events';
7
+ /**
8
+ * Represents the result of a deletion operation
9
+ * @interface DeletionResult
10
+ * @property {boolean} success - Whether the deletion operation was successful
11
+ * @property {string} [error] - Error message if the operation failed
12
+ * @property {string[]} [deletedIds] - Array of successfully deleted event IDs
13
+ */
14
+ interface DeletionResult {
15
+ success: boolean;
16
+ error?: string;
17
+ deletedIds?: string[];
18
+ }
19
+ /**
20
+ * Event deletion kind
21
+ */
22
+ export declare const EVENT_DELETION_KIND = 5;
23
+ /**
24
+ * Creates a deletion event
25
+ */
26
+ export declare function createDeletionEvent(eventIds: string[], reason?: string): Omit<NostrEvent, 'id' | 'sig'>;
27
+ /**
28
+ * Validates a deletion event
29
+ */
30
+ export declare function validateDeletionEvent(event: NostrEvent, _logger: any): Promise<boolean>;
31
+ /**
32
+ * Processes a deletion event
33
+ */
34
+ export declare function processDeletionEvent(event: NostrEvent, _logger: any, deleteEvent: (id: string) => Promise<boolean>): Promise<DeletionResult>;
35
+ /**
36
+ * Event deletion manager interface
37
+ */
38
+ export interface EventDeletionManager {
39
+ /**
40
+ * Processes a deletion event
41
+ * @param message - Deletion message
42
+ * @returns {Promise<string[]>} Deleted event IDs
43
+ */
44
+ processDeletion(message: NostrEvent): Promise<string[]>;
45
+ /**
46
+ * Checks if an event has been deleted
47
+ * @param eventId - Event ID to check
48
+ * @returns {boolean} True if event is deleted
49
+ */
50
+ isDeleted(eventId: string): boolean;
51
+ /**
52
+ * Gets deletion reason for an event
53
+ * @param eventId - Event ID
54
+ * @returns {string | undefined} Deletion reason if available
55
+ */
56
+ getDeletionReason(eventId: string): string | undefined;
57
+ /**
58
+ * Gets all deleted events
59
+ * @returns {Map<string, string>} Map of event IDs to deletion reasons
60
+ */
61
+ getDeletedEvents(): Map<string, string>;
62
+ }
63
+ /**
64
+ * Creates an event deletion manager
65
+ * @param _logger - Logger instance
66
+ * @returns {EventDeletionManager} Deletion manager
67
+ */
68
+ export declare function createEventDeletionManager(_logger: any): EventDeletionManager;
69
+ /**
70
+ * Event deletion subscription manager interface
71
+ */
72
+ export interface DeletionSubscriptionManager {
73
+ /**
74
+ * Creates a subscription for deletion events
75
+ * @param eventIds - Event IDs to monitor
76
+ * @returns {NostrSubscriptionEvent} Subscription message
77
+ */
78
+ subscribeToDeletions(eventIds: string[]): NostrSubscriptionEvent;
79
+ /**
80
+ * Creates a subscription for all deletions by a user
81
+ * @param pubkey - Public key of user
82
+ * @returns {NostrSubscriptionEvent} Subscription message
83
+ */
84
+ subscribeToUserDeletions(pubkey: string): NostrSubscriptionEvent;
85
+ }
86
+ /**
87
+ * Creates a deletion subscription manager
88
+ * @param _logger - Logger instance
89
+ * @returns {DeletionSubscriptionManager} Subscription manager
90
+ */
91
+ export declare function createDeletionSubscriptionManager(_logger: any): DeletionSubscriptionManager;
92
+ export {};
93
+ //# sourceMappingURL=nip-09.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-09.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-09.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE1E;;;;;;GAMG;AACH,UAAU,cAAc;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,KAAK,CAAC,CAQhC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,OAAO,CAAC,CA6BlB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,GAAG,EACZ,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC5C,OAAO,CAAC,cAAc,CAAC,CAgDzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAExD;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAEvD;;;OAGG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,GAAG,GACX,oBAAoB,CAgDtB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC;IAEjE;;;;OAIG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,CAAC;CAClE;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,GAAG,GACX,2BAA2B,CAsB7B"}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-09: Event Deletion
4
+ * @module nips/nip-09
5
+ * @see https://github.com/nostr-protocol/nips/blob/master/09.md
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.EVENT_DELETION_KIND = void 0;
9
+ exports.createDeletionEvent = createDeletionEvent;
10
+ exports.validateDeletionEvent = validateDeletionEvent;
11
+ exports.processDeletionEvent = processDeletionEvent;
12
+ exports.createEventDeletionManager = createEventDeletionManager;
13
+ exports.createDeletionSubscriptionManager = createDeletionSubscriptionManager;
14
+ /**
15
+ * Event deletion kind
16
+ */
17
+ exports.EVENT_DELETION_KIND = 5;
18
+ /**
19
+ * Creates a deletion event
20
+ */
21
+ function createDeletionEvent(eventIds, reason) {
22
+ return {
23
+ kind: exports.EVENT_DELETION_KIND,
24
+ created_at: Math.floor(Date.now() / 1000),
25
+ tags: eventIds.map(id => ['e', id]),
26
+ content: reason || '',
27
+ pubkey: '', // To be filled by the caller
28
+ };
29
+ }
30
+ /**
31
+ * Validates a deletion event
32
+ */
33
+ async function validateDeletionEvent(event, _logger) {
34
+ try {
35
+ // Must be kind 5
36
+ if (event.kind !== exports.EVENT_DELETION_KIND) {
37
+ return false;
38
+ }
39
+ // Must have at least one e tag
40
+ const eventIds = event.tags
41
+ .filter((tag) => Array.isArray(tag) && tag[0] === 'e' && typeof tag[1] === 'string')
42
+ .map(tag => tag[1]);
43
+ if (eventIds.length === 0) {
44
+ return false;
45
+ }
46
+ // Validate each event ID format
47
+ const validHexString = /^[0-9a-f]{64}$/;
48
+ const invalidIds = eventIds.filter(id => !validHexString.test(id));
49
+ if (invalidIds.length > 0) {
50
+ return false;
51
+ }
52
+ return true;
53
+ }
54
+ catch (error) {
55
+ return false;
56
+ }
57
+ }
58
+ /**
59
+ * Processes a deletion event
60
+ */
61
+ async function processDeletionEvent(event, _logger, deleteEvent) {
62
+ try {
63
+ if (!validateDeletionEvent(event, _logger)) {
64
+ return {
65
+ success: false,
66
+ error: 'Invalid deletion event'
67
+ };
68
+ }
69
+ const eventIds = event.tags
70
+ .filter((tag) => tag[0] === 'e')
71
+ .map(tag => tag[1]);
72
+ const deletedIds = [];
73
+ const failedIds = [];
74
+ for (const eventId of eventIds) {
75
+ try {
76
+ const success = await deleteEvent(eventId);
77
+ if (success) {
78
+ deletedIds.push(eventId);
79
+ }
80
+ else {
81
+ failedIds.push(eventId);
82
+ }
83
+ }
84
+ catch (error) {
85
+ failedIds.push(eventId);
86
+ }
87
+ }
88
+ if (failedIds.length > 0) {
89
+ return {
90
+ success: false,
91
+ error: `Failed to delete events: ${failedIds.join(', ')}`,
92
+ deletedIds
93
+ };
94
+ }
95
+ return {
96
+ success: true,
97
+ deletedIds
98
+ };
99
+ }
100
+ catch (error) {
101
+ return {
102
+ success: false,
103
+ error: 'Unknown error'
104
+ };
105
+ }
106
+ }
107
+ /**
108
+ * Creates an event deletion manager
109
+ * @param _logger - Logger instance
110
+ * @returns {EventDeletionManager} Deletion manager
111
+ */
112
+ function createEventDeletionManager(_logger) {
113
+ // Map of deleted event IDs to deletion reasons
114
+ const deletedEvents = new Map();
115
+ // Map of deleted event IDs to deletion event IDs
116
+ const deletionEvents = new Map();
117
+ return {
118
+ async processDeletion(message) {
119
+ try {
120
+ if (!validateDeletionEvent(message, _logger)) {
121
+ throw new Error('Invalid deletion event');
122
+ }
123
+ const eventIds = message.tags
124
+ .filter(tag => tag[0] === 'e')
125
+ .map(tag => tag[1]);
126
+ const { content: reason, id: deletionId } = message;
127
+ // Process each event ID
128
+ eventIds.forEach(eventId => {
129
+ // Only delete if not already deleted or if this deletion is newer
130
+ const existingDeletionId = deletionEvents.get(eventId);
131
+ if (!existingDeletionId || deletionId > existingDeletionId) {
132
+ deletedEvents.set(eventId, reason);
133
+ deletionEvents.set(eventId, deletionId);
134
+ }
135
+ });
136
+ return eventIds;
137
+ }
138
+ catch (error) {
139
+ return [];
140
+ }
141
+ },
142
+ isDeleted(eventId) {
143
+ return deletedEvents.has(eventId);
144
+ },
145
+ getDeletionReason(eventId) {
146
+ return deletedEvents.get(eventId);
147
+ },
148
+ getDeletedEvents() {
149
+ return new Map(deletedEvents);
150
+ }
151
+ };
152
+ }
153
+ /**
154
+ * Creates a deletion subscription manager
155
+ * @param _logger - Logger instance
156
+ * @returns {DeletionSubscriptionManager} Subscription manager
157
+ */
158
+ function createDeletionSubscriptionManager(_logger) {
159
+ return {
160
+ subscribeToDeletions(eventIds) {
161
+ return {
162
+ subscriptionId: `deletion_${eventIds.join('_')}`,
163
+ filters: [{
164
+ kinds: [exports.EVENT_DELETION_KIND],
165
+ '#e': eventIds
166
+ }]
167
+ };
168
+ },
169
+ subscribeToUserDeletions(pubkey) {
170
+ return {
171
+ subscriptionId: `user_deletion_${pubkey}`,
172
+ filters: [{
173
+ kinds: [exports.EVENT_DELETION_KIND],
174
+ authors: [pubkey]
175
+ }]
176
+ };
177
+ }
178
+ };
179
+ }
180
+ //# sourceMappingURL=nip-09.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-09.js","sourceRoot":"","sources":["../../../src/nips/nip-09.ts"],"names":[],"mappings":"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"}