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 @@
1
+ {"version":3,"file":"nip-22.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-22.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG9C;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAAC;IAEtD;;;OAGG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3C;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,MAAyC,EAC7D,gBAAgB,GAAE,MAAuC,GACxD,aAAa,CAoCf;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,MAAM,GACb,oBAAoB,CAwBtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,QAAQ,IAAI,IAAI,CAAC;IAEjB;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC;IAEzB;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,oBAAoB,CAAC;CAC5D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAgErE"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-22: Event Created At Limits
4
+ * @module nips/nip-22
5
+ * @see https://github.com/nostr-protocol/nips/blob/master/22.md
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.DEFAULT_TIME_LIMITS = void 0;
9
+ exports.createTimeValidator = createTimeValidator;
10
+ exports.validateEventTime = validateEventTime;
11
+ exports.createTimeSyncManager = createTimeSyncManager;
12
+ /**
13
+ * Default time limits in seconds
14
+ */
15
+ exports.DEFAULT_TIME_LIMITS = {
16
+ FUTURE_LIMIT: 900, // 15 minutes
17
+ PAST_LIMIT: 31536000 // 1 year
18
+ };
19
+ /**
20
+ * Creates a time validator
21
+ * @param logger - Logger instance
22
+ * @param futureLimitSeconds - Future time limit in seconds
23
+ * @param pastLimitSeconds - Past time limit in seconds
24
+ * @returns {TimeValidator} Time validator
25
+ */
26
+ function createTimeValidator(logger, futureLimitSeconds = exports.DEFAULT_TIME_LIMITS.FUTURE_LIMIT, pastLimitSeconds = exports.DEFAULT_TIME_LIMITS.PAST_LIMIT) {
27
+ let timeOffset = 0; // Offset between local and server time
28
+ return {
29
+ validateTime(timestamp) {
30
+ const now = Date.now() / 1000 + timeOffset;
31
+ // Check future limit
32
+ if (timestamp > now + futureLimitSeconds) {
33
+ return {
34
+ valid: false,
35
+ reason: 'Event timestamp too far in the future'
36
+ };
37
+ }
38
+ // Check past limit
39
+ if (timestamp < now - pastLimitSeconds) {
40
+ return {
41
+ valid: false,
42
+ reason: 'Event timestamp too far in the past'
43
+ };
44
+ }
45
+ return { valid: true };
46
+ },
47
+ updateTimeOffset(serverTime) {
48
+ const localTime = Date.now() / 1000;
49
+ timeOffset = serverTime - localTime;
50
+ logger.debug(`Updated time offset to ${timeOffset} seconds`);
51
+ },
52
+ getCurrentTime() {
53
+ return Math.floor(Date.now() / 1000 + timeOffset);
54
+ }
55
+ };
56
+ }
57
+ /**
58
+ * Validates event timestamp
59
+ * @param message - Message to validate
60
+ * @param validator - Time validator
61
+ * @param logger - Logger instance
62
+ * @returns {TimeValidationResult} Validation result
63
+ */
64
+ function validateEventTime(message, validator, logger) {
65
+ try {
66
+ if (!Array.isArray(message) || message[0] !== 'EVENT') {
67
+ return { valid: true }; // Not an event message
68
+ }
69
+ const event = message[1];
70
+ const { created_at: timestamp } = event;
71
+ if (typeof timestamp !== 'number') {
72
+ return {
73
+ valid: false,
74
+ reason: 'Missing or invalid timestamp'
75
+ };
76
+ }
77
+ return validator.validateTime(timestamp);
78
+ }
79
+ catch (error) {
80
+ logger.error('Error validating event time:', error);
81
+ return {
82
+ valid: false,
83
+ reason: 'Error validating timestamp'
84
+ };
85
+ }
86
+ }
87
+ /**
88
+ * Creates a time synchronization manager
89
+ * @param logger - Logger instance
90
+ * @returns {TimeSyncManager} Time sync manager
91
+ */
92
+ function createTimeSyncManager(logger) {
93
+ const validator = createTimeValidator(logger);
94
+ let syncInterval = null;
95
+ async function syncTime(wsUrl) {
96
+ try {
97
+ const ws = new WebSocket(wsUrl);
98
+ await new Promise((resolve, reject) => {
99
+ ws.onopen = () => {
100
+ // Send time request
101
+ ws.send(JSON.stringify({
102
+ type: 'TIME',
103
+ data: { client_time: Math.floor(Date.now() / 1000) }
104
+ }));
105
+ };
106
+ ws.onmessage = (event) => {
107
+ try {
108
+ const response = JSON.parse(event.data);
109
+ if (response.type === 'TIME') {
110
+ validator.updateTimeOffset(response.data.server_time);
111
+ resolve();
112
+ }
113
+ }
114
+ catch (error) {
115
+ reject(error);
116
+ }
117
+ ws.close();
118
+ };
119
+ ws.onerror = reject;
120
+ // Timeout after 5 seconds
121
+ setTimeout(() => reject(new Error('Time sync timeout')), 5000);
122
+ });
123
+ }
124
+ catch (error) {
125
+ logger.error('Time sync failed:', error);
126
+ }
127
+ }
128
+ return {
129
+ startSync(wsUrl) {
130
+ // Initial sync
131
+ syncTime(wsUrl);
132
+ // Periodic sync every 15 minutes
133
+ syncInterval = setInterval(() => syncTime(wsUrl), 900000);
134
+ },
135
+ stopSync() {
136
+ if (syncInterval) {
137
+ clearInterval(syncInterval);
138
+ syncInterval = null;
139
+ }
140
+ },
141
+ getCurrentTime() {
142
+ return validator.getCurrentTime();
143
+ },
144
+ validateEvent(event) {
145
+ return validateEventTime(event, validator, logger);
146
+ }
147
+ };
148
+ }
149
+ //# sourceMappingURL=nip-22.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-22.js","sourceRoot":"","sources":["../../../src/nips/nip-22.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @file NIP-26: Delegated Event Signing
3
+ * @module nips/nip-26
4
+ */
5
+ import type { NostrEvent } from '../types/events';
6
+ /**
7
+ * Represents the conditions for a Nostr event delegation
8
+ * @interface DelegationConditions
9
+ * @property {number} [kind] - The kind of events this delegation is valid for
10
+ * @property {number} [since] - Unix timestamp from which this delegation is valid
11
+ * @property {number} [until] - Unix timestamp until which this delegation is valid
12
+ * @property {unknown} [key: string] - Any additional conditions
13
+ */
14
+ interface DelegationConditions {
15
+ kind?: number;
16
+ since?: number;
17
+ until?: number;
18
+ [key: string]: unknown;
19
+ }
20
+ /**
21
+ * Represents a Nostr event delegation
22
+ * @interface Delegation
23
+ * @property {string} pubkey - The public key of the delegator
24
+ * @property {DelegationConditions} conditions - The conditions under which this delegation is valid
25
+ * @property {string} token - The delegation token signed by the delegator
26
+ */
27
+ interface Delegation {
28
+ pubkey: string;
29
+ conditions: DelegationConditions;
30
+ token: string;
31
+ }
32
+ /**
33
+ * Create a delegation token
34
+ */
35
+ export declare function createDelegation(delegatorPrivkey: string, delegateePubkey: string, conditions: DelegationConditions): Promise<string>;
36
+ /**
37
+ * Verify a delegation token
38
+ */
39
+ export declare function verifyDelegation(delegatorPubkey: string, delegateePubkey: string, token: string, conditions: DelegationConditions): Promise<boolean>;
40
+ /**
41
+ * Add delegation tag to an event
42
+ */
43
+ export declare function addDelegationTag(event: NostrEvent, delegation: Delegation): NostrEvent;
44
+ /**
45
+ * Extract delegation from an event
46
+ */
47
+ export declare function extractDelegation(event: NostrEvent): Delegation | null;
48
+ /**
49
+ * Validate a delegated event
50
+ */
51
+ export declare function validateDelegatedEvent(event: NostrEvent): Promise<boolean>;
52
+ export {};
53
+ //# sourceMappingURL=nip-26.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-26.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-26.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD;;;;;;;GAOG;AACH,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,oBAAoB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAYtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAyBtE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAuChF"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-26: Delegated Event Signing
4
+ * @module nips/nip-26
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createDelegation = createDelegation;
8
+ exports.verifyDelegation = verifyDelegation;
9
+ exports.addDelegationTag = addDelegationTag;
10
+ exports.extractDelegation = extractDelegation;
11
+ exports.validateDelegatedEvent = validateDelegatedEvent;
12
+ const logger_1 = require("../utils/logger");
13
+ const nostr_crypto_utils_1 = require("nostr-crypto-utils");
14
+ const logger = (0, logger_1.getLogger)('NIP-26');
15
+ /**
16
+ * Create a delegation token
17
+ */
18
+ async function createDelegation(delegatorPrivkey, delegateePubkey, conditions) {
19
+ try {
20
+ const conditionsString = Object.entries(conditions)
21
+ .map(([key, value]) => `${key}=${value}`)
22
+ .sort()
23
+ .join('&');
24
+ const message = `nostr:delegation:${delegateePubkey}:${conditionsString}`;
25
+ // Create a NostrEvent object for signing
26
+ const event = {
27
+ id: '', // This will be set by signEvent
28
+ pubkey: delegateePubkey,
29
+ created_at: Math.floor(Date.now() / 1000),
30
+ kind: 0, // Using kind 0 for delegation events
31
+ tags: [],
32
+ content: message,
33
+ sig: '' // This will be set by signEvent
34
+ };
35
+ const signedEvent = await (0, nostr_crypto_utils_1.signEvent)(event, delegatorPrivkey);
36
+ return signedEvent.sig;
37
+ }
38
+ catch (error) {
39
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
40
+ logger.error(`Failed to create delegation: ${errorMessage}`);
41
+ throw new Error(`Failed to create delegation: ${errorMessage}`);
42
+ }
43
+ }
44
+ /**
45
+ * Verify a delegation token
46
+ */
47
+ async function verifyDelegation(delegatorPubkey, delegateePubkey, token, conditions) {
48
+ try {
49
+ const conditionsString = Object.entries(conditions)
50
+ .map(([key, value]) => `${key}=${value}`)
51
+ .sort()
52
+ .join('&');
53
+ const message = `nostr:delegation:${delegateePubkey}:${conditionsString}`;
54
+ const verificationEvent = {
55
+ id: '',
56
+ pubkey: delegatorPubkey,
57
+ created_at: Math.floor(Date.now() / 1000),
58
+ kind: 0,
59
+ tags: [],
60
+ content: message,
61
+ sig: token
62
+ };
63
+ return await (0, nostr_crypto_utils_1.verifySignature)(verificationEvent);
64
+ }
65
+ catch (error) {
66
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
67
+ logger.error(`Failed to verify delegation: ${errorMessage}`);
68
+ return false;
69
+ }
70
+ }
71
+ /**
72
+ * Add delegation tag to an event
73
+ */
74
+ function addDelegationTag(event, delegation) {
75
+ const conditionsString = Object.entries(delegation.conditions)
76
+ .map(([key, value]) => `${key}=${value}`)
77
+ .sort()
78
+ .join('&');
79
+ const delegationTag = ['delegation', delegation.pubkey, conditionsString, delegation.token];
80
+ return {
81
+ ...event,
82
+ tags: [...event.tags, delegationTag]
83
+ };
84
+ }
85
+ /**
86
+ * Extract delegation from an event
87
+ */
88
+ function extractDelegation(event) {
89
+ try {
90
+ const delegationTag = event.tags.find(tag => tag[0] === 'delegation');
91
+ if (!delegationTag || delegationTag.length !== 4) {
92
+ return null;
93
+ }
94
+ const [, pubkey, conditionsString, token] = delegationTag;
95
+ const conditions = {};
96
+ conditionsString.split('&').forEach(pair => {
97
+ const [key, value] = pair.split('=');
98
+ if (key === 'kind' || key === 'since' || key === 'until') {
99
+ conditions[key] = parseInt(value, 10);
100
+ }
101
+ else {
102
+ conditions[key] = value;
103
+ }
104
+ });
105
+ return { pubkey, conditions, token };
106
+ }
107
+ catch (error) {
108
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
109
+ logger.error(`Failed to extract delegation: ${errorMessage}`);
110
+ return null;
111
+ }
112
+ }
113
+ /**
114
+ * Validate a delegated event
115
+ */
116
+ async function validateDelegatedEvent(event) {
117
+ try {
118
+ const delegation = extractDelegation(event);
119
+ if (!delegation) {
120
+ return false;
121
+ }
122
+ const { kind, created_at } = event;
123
+ const { kind: allowedKind, since, until } = delegation.conditions;
124
+ // Check kind constraint
125
+ if (allowedKind !== undefined && kind !== allowedKind) {
126
+ logger.debug('Event kind does not match delegation conditions');
127
+ return false;
128
+ }
129
+ // Check time constraints
130
+ if (since !== undefined && created_at < since) {
131
+ logger.debug('Event is before delegation start time');
132
+ return false;
133
+ }
134
+ if (until !== undefined && created_at > until) {
135
+ logger.debug('Event is after delegation end time');
136
+ return false;
137
+ }
138
+ // Verify delegation token
139
+ return await verifyDelegation(delegation.pubkey, event.pubkey, delegation.token, delegation.conditions);
140
+ }
141
+ catch (error) {
142
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
143
+ logger.error(`Failed to validate delegated event: ${errorMessage}`);
144
+ return false;
145
+ }
146
+ }
147
+ //# sourceMappingURL=nip-26.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-26.js","sourceRoot":"","sources":["../../../src/nips/nip-26.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @file NIP-28: Public Chat
3
+ * @module nips/nip-28
4
+ * @see https://github.com/nostr-protocol/nips/blob/master/28.md
5
+ */
6
+ import type { NostrWSMessage } from '../types/messages';
7
+ import type { Logger } from '../types/logger';
8
+ /**
9
+ * Chat event kinds
10
+ */
11
+ export declare const ChatEventKinds: {
12
+ readonly CHANNEL_CREATION: 40;
13
+ readonly CHANNEL_METADATA: 41;
14
+ readonly CHANNEL_MESSAGE: 42;
15
+ readonly CHANNEL_HIDE_MESSAGE: 43;
16
+ readonly CHANNEL_MUTE_USER: 44;
17
+ readonly USER_MUTE: 45;
18
+ };
19
+ /**
20
+ * Channel metadata structure
21
+ */
22
+ export interface ChannelMetadata {
23
+ name: string;
24
+ about?: string;
25
+ picture?: string;
26
+ rules?: string[];
27
+ moderators?: string[];
28
+ pinned?: string[];
29
+ }
30
+ /**
31
+ * Creates a channel creation message
32
+ * @param metadata - Channel metadata
33
+ * @returns {NostrWSMessage} Channel creation event
34
+ */
35
+ export declare function createChannelCreationEvent(metadata: ChannelMetadata): NostrWSMessage;
36
+ /**
37
+ * Creates a channel message
38
+ * @param channelId - Channel ID
39
+ * @param content - Message content
40
+ * @param replyTo - Optional ID of message being replied to
41
+ * @returns {NostrWSMessage} Channel message event
42
+ */
43
+ export declare function createChannelMessage(channelId: string, content: string, replyTo?: string): NostrWSMessage;
44
+ /**
45
+ * Creates a message moderation event
46
+ * @param channelId - Channel ID
47
+ * @param messageId - Message ID to moderate
48
+ * @param reason - Moderation reason
49
+ * @returns {NostrWSMessage} Hide message event
50
+ */
51
+ export declare function createHideMessageEvent(channelId: string, messageId: string, reason: string): NostrWSMessage;
52
+ /**
53
+ * Chat message handler interface
54
+ */
55
+ export interface ChatMessageHandler {
56
+ /**
57
+ * Handles incoming chat message
58
+ * @param message - Chat message
59
+ * @returns {Promise<void>}
60
+ */
61
+ handleMessage(message: NostrWSMessage): Promise<void>;
62
+ /**
63
+ * Handles message moderation
64
+ * @param message - Moderation message
65
+ * @returns {Promise<void>}
66
+ */
67
+ handleModeration(message: NostrWSMessage): Promise<void>;
68
+ }
69
+ /**
70
+ * Creates a chat message handler
71
+ * @param logger - Logger instance
72
+ * @returns {ChatMessageHandler} Message handler
73
+ */
74
+ export declare function createChatMessageHandler(logger: Logger): ChatMessageHandler;
75
+ /**
76
+ * Channel subscription manager interface
77
+ */
78
+ export interface ChannelSubscriptionManager {
79
+ /**
80
+ * Subscribes to a channel
81
+ * @param channelId - Channel ID
82
+ * @returns {NostrWSMessage} Subscription message
83
+ */
84
+ subscribe(channelId: string): NostrWSMessage;
85
+ /**
86
+ * Unsubscribes from a channel
87
+ * @param channelId - Channel ID
88
+ * @returns {NostrWSMessage} Unsubscribe message
89
+ */
90
+ unsubscribe(channelId: string): NostrWSMessage;
91
+ /**
92
+ * Gets channel metadata
93
+ * @param channelId - Channel ID
94
+ * @returns {Promise<ChannelMetadata | undefined>} Channel metadata
95
+ */
96
+ getMetadata(channelId: string): Promise<ChannelMetadata | undefined>;
97
+ }
98
+ /**
99
+ * Creates a channel subscription manager
100
+ * @param logger - Logger instance
101
+ * @returns {ChannelSubscriptionManager} Subscription manager
102
+ */
103
+ export declare function createChannelSubscriptionManager(logger: Logger): ChannelSubscriptionManager;
104
+ //# sourceMappingURL=nip-28.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-28.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-28.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,eAAe,GACxB,cAAc,CAMhB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,cAAc,CAWhB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,cAAc,CAShB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA8D3E;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAC;IAE7C;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAC;IAE/C;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;CACtE;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,GACb,0BAA0B,CAoC5B"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-28: Public Chat
4
+ * @module nips/nip-28
5
+ * @see https://github.com/nostr-protocol/nips/blob/master/28.md
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ChatEventKinds = void 0;
9
+ exports.createChannelCreationEvent = createChannelCreationEvent;
10
+ exports.createChannelMessage = createChannelMessage;
11
+ exports.createHideMessageEvent = createHideMessageEvent;
12
+ exports.createChatMessageHandler = createChatMessageHandler;
13
+ exports.createChannelSubscriptionManager = createChannelSubscriptionManager;
14
+ /**
15
+ * Chat event kinds
16
+ */
17
+ exports.ChatEventKinds = {
18
+ CHANNEL_CREATION: 40,
19
+ CHANNEL_METADATA: 41,
20
+ CHANNEL_MESSAGE: 42,
21
+ CHANNEL_HIDE_MESSAGE: 43,
22
+ CHANNEL_MUTE_USER: 44,
23
+ USER_MUTE: 45
24
+ };
25
+ /**
26
+ * Creates a channel creation message
27
+ * @param metadata - Channel metadata
28
+ * @returns {NostrWSMessage} Channel creation event
29
+ */
30
+ function createChannelCreationEvent(metadata) {
31
+ return ['EVENT', {
32
+ kind: exports.ChatEventKinds.CHANNEL_CREATION,
33
+ content: JSON.stringify(metadata),
34
+ tags: []
35
+ }];
36
+ }
37
+ /**
38
+ * Creates a channel message
39
+ * @param channelId - Channel ID
40
+ * @param content - Message content
41
+ * @param replyTo - Optional ID of message being replied to
42
+ * @returns {NostrWSMessage} Channel message event
43
+ */
44
+ function createChannelMessage(channelId, content, replyTo) {
45
+ const tags = [['e', channelId, '', 'root']];
46
+ if (replyTo) {
47
+ tags.push(['e', replyTo, '', 'reply']);
48
+ }
49
+ return ['EVENT', {
50
+ kind: exports.ChatEventKinds.CHANNEL_MESSAGE,
51
+ content,
52
+ tags
53
+ }];
54
+ }
55
+ /**
56
+ * Creates a message moderation event
57
+ * @param channelId - Channel ID
58
+ * @param messageId - Message ID to moderate
59
+ * @param reason - Moderation reason
60
+ * @returns {NostrWSMessage} Hide message event
61
+ */
62
+ function createHideMessageEvent(channelId, messageId, reason) {
63
+ return ['EVENT', {
64
+ kind: exports.ChatEventKinds.CHANNEL_HIDE_MESSAGE,
65
+ content: reason,
66
+ tags: [
67
+ ['e', channelId, '', 'root'],
68
+ ['e', messageId, '', 'reply']
69
+ ]
70
+ }];
71
+ }
72
+ /**
73
+ * Creates a chat message handler
74
+ * @param logger - Logger instance
75
+ * @returns {ChatMessageHandler} Message handler
76
+ */
77
+ function createChatMessageHandler(logger) {
78
+ return {
79
+ async handleMessage(message) {
80
+ try {
81
+ if (!Array.isArray(message) || message[0] !== 'EVENT')
82
+ return;
83
+ const event = message[1];
84
+ if (event.kind !== exports.ChatEventKinds.CHANNEL_MESSAGE)
85
+ return;
86
+ // Extract channel ID and reply ID from tags
87
+ const { tags } = event;
88
+ const channelId = tags.find(tag => tag[0] === 'e' && tag[3] === 'root')?.[1];
89
+ const replyId = tags.find(tag => tag[0] === 'e' && tag[3] === 'reply')?.[1];
90
+ // Process message
91
+ logger.debug('Processing chat message', {
92
+ channelId,
93
+ replyId,
94
+ content: event.content
95
+ });
96
+ // Additional message processing logic here
97
+ }
98
+ catch (error) {
99
+ logger.error('Error handling chat message:', error);
100
+ }
101
+ },
102
+ async handleModeration(message) {
103
+ try {
104
+ if (!Array.isArray(message) || message[0] !== 'EVENT')
105
+ return;
106
+ const event = message[1];
107
+ if (event.kind !== exports.ChatEventKinds.CHANNEL_HIDE_MESSAGE)
108
+ return;
109
+ // Extract channel and message IDs
110
+ const { tags } = event;
111
+ const channelId = tags.find(tag => tag[0] === 'e' && tag[3] === 'root')?.[1];
112
+ const messageId = tags.find(tag => tag[0] === 'e' && tag[3] === 'reply')?.[1];
113
+ // Process moderation
114
+ logger.debug('Processing message moderation', {
115
+ channelId,
116
+ messageId,
117
+ reason: event.content
118
+ });
119
+ // Additional moderation logic here
120
+ }
121
+ catch (error) {
122
+ logger.error('Error handling message moderation:', error);
123
+ }
124
+ }
125
+ };
126
+ }
127
+ /**
128
+ * Creates a channel subscription manager
129
+ * @param logger - Logger instance
130
+ * @returns {ChannelSubscriptionManager} Subscription manager
131
+ */
132
+ function createChannelSubscriptionManager(logger) {
133
+ const subscriptions = new Map(); // channelId -> subscriptionId
134
+ const metadata = new Map();
135
+ return {
136
+ subscribe(channelId) {
137
+ const subscriptionId = `chat:${channelId}:${Date.now()}`;
138
+ subscriptions.set(channelId, subscriptionId);
139
+ return ['REQ', {
140
+ subscription_id: subscriptionId,
141
+ filter: {
142
+ kinds: [
143
+ exports.ChatEventKinds.CHANNEL_MESSAGE,
144
+ exports.ChatEventKinds.CHANNEL_HIDE_MESSAGE
145
+ ],
146
+ '#e': [channelId]
147
+ }
148
+ }];
149
+ },
150
+ unsubscribe(channelId) {
151
+ const subscriptionId = subscriptions.get(channelId);
152
+ if (!subscriptionId) {
153
+ logger.debug(`No subscription found for channel ${channelId}`);
154
+ return ['CLOSE', { subscription_id: '' }];
155
+ }
156
+ subscriptions.delete(channelId);
157
+ return ['CLOSE', { subscription_id: subscriptionId }];
158
+ },
159
+ async getMetadata(channelId) {
160
+ return metadata.get(channelId);
161
+ }
162
+ };
163
+ }
164
+ //# sourceMappingURL=nip-28.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-28.js","sourceRoot":"","sources":["../../../src/nips/nip-28.ts"],"names":[],"mappings":"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"}