nostr-websocket-utils 0.3.0 → 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 (411) hide show
  1. package/README.md +8 -7
  2. package/dist/__mocks__/extendedWsMock.d.ts +31 -14
  3. package/dist/__mocks__/extendedWsMock.d.ts.map +1 -0
  4. package/dist/__mocks__/extendedWsMock.js +7 -6
  5. package/dist/__mocks__/extendedWsMock.js.map +1 -0
  6. package/dist/__mocks__/mockLogger.d.ts +8 -7
  7. package/dist/__mocks__/mockLogger.d.ts.map +1 -0
  8. package/dist/__mocks__/mockLogger.js +1 -0
  9. package/dist/__mocks__/mockLogger.js.map +1 -0
  10. package/dist/__mocks__/mockserver.d.ts +7 -11
  11. package/dist/__mocks__/mockserver.d.ts.map +1 -0
  12. package/dist/__mocks__/mockserver.js +1 -0
  13. package/dist/__mocks__/mockserver.js.map +1 -0
  14. package/dist/__mocks__/wsMock.d.ts +1 -2
  15. package/dist/__mocks__/wsMock.d.ts.map +1 -0
  16. package/dist/__mocks__/wsMock.js +1 -0
  17. package/dist/__mocks__/wsMock.js.map +1 -0
  18. package/dist/cjs/__mocks__/extendedWsMock.d.ts +52 -0
  19. package/dist/cjs/__mocks__/extendedWsMock.d.ts.map +1 -0
  20. package/dist/cjs/__mocks__/extendedWsMock.js +161 -0
  21. package/dist/cjs/__mocks__/extendedWsMock.js.map +1 -0
  22. package/dist/cjs/__mocks__/mockLogger.d.ts +42 -0
  23. package/dist/cjs/__mocks__/mockLogger.d.ts.map +1 -0
  24. package/dist/cjs/__mocks__/mockLogger.js +53 -0
  25. package/dist/cjs/__mocks__/mockLogger.js.map +1 -0
  26. package/dist/cjs/__mocks__/mockserver.d.ts +27 -0
  27. package/dist/cjs/__mocks__/mockserver.d.ts.map +1 -0
  28. package/dist/cjs/__mocks__/mockserver.js +44 -0
  29. package/dist/cjs/__mocks__/mockserver.js.map +1 -0
  30. package/dist/cjs/__mocks__/wsMock.d.ts +25 -0
  31. package/dist/cjs/__mocks__/wsMock.d.ts.map +1 -0
  32. package/dist/cjs/__mocks__/wsMock.js +123 -0
  33. package/dist/cjs/__mocks__/wsMock.js.map +1 -0
  34. package/dist/cjs/core/client.d.ts +35 -0
  35. package/dist/cjs/core/client.d.ts.map +1 -0
  36. package/dist/cjs/core/client.js +161 -0
  37. package/dist/cjs/core/client.js.map +1 -0
  38. package/dist/{nostr-server.d.ts → cjs/core/nostr-server.d.ts} +3 -6
  39. package/dist/cjs/core/nostr-server.d.ts.map +1 -0
  40. package/dist/cjs/core/nostr-server.js +101 -0
  41. package/dist/cjs/core/nostr-server.js.map +1 -0
  42. package/dist/cjs/core/queue.d.ts +38 -0
  43. package/dist/cjs/core/queue.d.ts.map +1 -0
  44. package/dist/cjs/core/queue.js +105 -0
  45. package/dist/cjs/core/queue.js.map +1 -0
  46. package/dist/cjs/core/server.d.ts +29 -0
  47. package/dist/cjs/core/server.d.ts.map +1 -0
  48. package/dist/cjs/core/server.js +134 -0
  49. package/dist/cjs/core/server.js.map +1 -0
  50. package/dist/cjs/crypto/bech32.d.ts +27 -0
  51. package/dist/cjs/crypto/bech32.d.ts.map +1 -0
  52. package/dist/cjs/crypto/bech32.js +170 -0
  53. package/dist/cjs/crypto/bech32.js.map +1 -0
  54. package/dist/cjs/crypto/handlers.d.ts +19 -0
  55. package/dist/cjs/crypto/handlers.d.ts.map +1 -0
  56. package/dist/cjs/crypto/handlers.js +65 -0
  57. package/dist/cjs/crypto/handlers.js.map +1 -0
  58. package/dist/cjs/crypto/index.d.ts +6 -0
  59. package/dist/cjs/crypto/index.d.ts.map +1 -0
  60. package/dist/cjs/crypto/index.js +22 -0
  61. package/dist/cjs/crypto/index.js.map +1 -0
  62. package/dist/cjs/endpoints/metrics.d.ts +30 -0
  63. package/dist/cjs/endpoints/metrics.d.ts.map +1 -0
  64. package/dist/cjs/endpoints/metrics.js +106 -0
  65. package/dist/cjs/endpoints/metrics.js.map +1 -0
  66. package/dist/cjs/index.d.ts +13 -0
  67. package/dist/cjs/index.d.ts.map +1 -0
  68. package/dist/cjs/index.js +40 -0
  69. package/dist/cjs/index.js.map +1 -0
  70. package/dist/cjs/nips/index.d.ts +20 -0
  71. package/dist/cjs/nips/index.d.ts.map +1 -0
  72. package/dist/cjs/nips/index.js +51 -0
  73. package/dist/cjs/nips/index.js.map +1 -0
  74. package/dist/cjs/nips/nip-01.d.ts +35 -0
  75. package/dist/cjs/nips/nip-01.d.ts.map +1 -0
  76. package/dist/cjs/nips/nip-01.js +142 -0
  77. package/dist/cjs/nips/nip-01.js.map +1 -0
  78. package/dist/cjs/nips/nip-02.d.ts +83 -0
  79. package/dist/cjs/nips/nip-02.d.ts.map +1 -0
  80. package/dist/cjs/nips/nip-02.js +119 -0
  81. package/dist/cjs/nips/nip-02.js.map +1 -0
  82. package/dist/cjs/nips/nip-04.d.ts +37 -0
  83. package/dist/cjs/nips/nip-04.d.ts.map +1 -0
  84. package/dist/cjs/nips/nip-04.js +104 -0
  85. package/dist/cjs/nips/nip-04.js.map +1 -0
  86. package/dist/cjs/nips/nip-05.d.ts +88 -0
  87. package/dist/cjs/nips/nip-05.d.ts.map +1 -0
  88. package/dist/cjs/nips/nip-05.js +158 -0
  89. package/dist/cjs/nips/nip-05.js.map +1 -0
  90. package/dist/cjs/nips/nip-09.d.ts +93 -0
  91. package/dist/cjs/nips/nip-09.d.ts.map +1 -0
  92. package/dist/cjs/nips/nip-09.js +180 -0
  93. package/dist/cjs/nips/nip-09.js.map +1 -0
  94. package/dist/cjs/nips/nip-11.d.ts +65 -0
  95. package/dist/cjs/nips/nip-11.d.ts.map +1 -0
  96. package/dist/cjs/nips/nip-11.js +161 -0
  97. package/dist/cjs/nips/nip-11.js.map +1 -0
  98. package/dist/cjs/nips/nip-13.d.ts +74 -0
  99. package/dist/cjs/nips/nip-13.d.ts.map +1 -0
  100. package/dist/cjs/nips/nip-13.js +136 -0
  101. package/dist/cjs/nips/nip-13.js.map +1 -0
  102. package/dist/cjs/nips/nip-15.d.ts +84 -0
  103. package/dist/cjs/nips/nip-15.d.ts.map +1 -0
  104. package/dist/cjs/nips/nip-15.js +102 -0
  105. package/dist/cjs/nips/nip-15.js.map +1 -0
  106. package/dist/cjs/nips/nip-16.d.ts +89 -0
  107. package/dist/cjs/nips/nip-16.d.ts.map +1 -0
  108. package/dist/cjs/nips/nip-16.js +157 -0
  109. package/dist/cjs/nips/nip-16.js.map +1 -0
  110. package/dist/cjs/nips/nip-19.d.ts +29 -0
  111. package/dist/cjs/nips/nip-19.d.ts.map +1 -0
  112. package/dist/cjs/nips/nip-19.js +112 -0
  113. package/dist/cjs/nips/nip-19.js.map +1 -0
  114. package/dist/cjs/nips/nip-20.d.ts +60 -0
  115. package/dist/cjs/nips/nip-20.d.ts.map +1 -0
  116. package/dist/cjs/nips/nip-20.js +102 -0
  117. package/dist/cjs/nips/nip-20.js.map +1 -0
  118. package/dist/cjs/nips/nip-22.d.ts +90 -0
  119. package/dist/cjs/nips/nip-22.d.ts.map +1 -0
  120. package/dist/cjs/nips/nip-22.js +149 -0
  121. package/dist/cjs/nips/nip-22.js.map +1 -0
  122. package/dist/cjs/nips/nip-26.d.ts +53 -0
  123. package/dist/cjs/nips/nip-26.d.ts.map +1 -0
  124. package/dist/cjs/nips/nip-26.js +147 -0
  125. package/dist/cjs/nips/nip-26.js.map +1 -0
  126. package/dist/cjs/nips/nip-28.d.ts +104 -0
  127. package/dist/cjs/nips/nip-28.d.ts.map +1 -0
  128. package/dist/cjs/nips/nip-28.js +164 -0
  129. package/dist/cjs/nips/nip-28.js.map +1 -0
  130. package/dist/cjs/nips/nip-33.d.ts +95 -0
  131. package/dist/cjs/nips/nip-33.d.ts.map +1 -0
  132. package/dist/cjs/nips/nip-33.js +135 -0
  133. package/dist/cjs/nips/nip-33.js.map +1 -0
  134. package/dist/cjs/transport/base.d.ts +54 -0
  135. package/dist/cjs/transport/base.d.ts.map +1 -0
  136. package/dist/cjs/transport/base.js +109 -0
  137. package/dist/cjs/transport/base.js.map +1 -0
  138. package/dist/cjs/transport/websocket.d.ts +24 -0
  139. package/dist/cjs/transport/websocket.d.ts.map +1 -0
  140. package/dist/cjs/transport/websocket.js +136 -0
  141. package/dist/cjs/transport/websocket.js.map +1 -0
  142. package/dist/cjs/types/events.d.ts +74 -0
  143. package/dist/cjs/types/events.d.ts.map +1 -0
  144. package/dist/cjs/types/events.js +7 -0
  145. package/dist/cjs/types/events.js.map +1 -0
  146. package/dist/cjs/types/filters.d.ts +20 -0
  147. package/dist/cjs/types/filters.d.ts.map +1 -0
  148. package/dist/cjs/types/filters.js +7 -0
  149. package/dist/cjs/types/filters.js.map +1 -0
  150. package/dist/cjs/types/handlers.d.ts +81 -0
  151. package/dist/cjs/types/handlers.d.ts.map +1 -0
  152. package/dist/cjs/types/handlers.js +7 -0
  153. package/dist/cjs/types/handlers.js.map +1 -0
  154. package/dist/cjs/types/index.d.ts +144 -0
  155. package/dist/cjs/types/index.d.ts.map +1 -0
  156. package/dist/cjs/types/index.js +37 -0
  157. package/dist/cjs/types/index.js.map +1 -0
  158. package/dist/cjs/types/logger.d.ts +41 -0
  159. package/dist/cjs/types/logger.d.ts.map +1 -0
  160. package/dist/cjs/types/logger.js +7 -0
  161. package/dist/cjs/types/logger.js.map +1 -0
  162. package/dist/cjs/types/messages.d.ts +133 -0
  163. package/dist/cjs/types/messages.d.ts.map +1 -0
  164. package/dist/cjs/types/messages.js +46 -0
  165. package/dist/cjs/types/messages.js.map +1 -0
  166. package/dist/cjs/types/nostr.d.ts +134 -0
  167. package/dist/cjs/types/nostr.d.ts.map +1 -0
  168. package/dist/cjs/types/nostr.js +7 -0
  169. package/dist/cjs/types/nostr.js.map +1 -0
  170. package/dist/cjs/types/options.d.ts +155 -0
  171. package/dist/cjs/types/options.d.ts.map +1 -0
  172. package/dist/cjs/types/options.js +7 -0
  173. package/dist/cjs/types/options.js.map +1 -0
  174. package/dist/cjs/types/priority.d.ts +13 -0
  175. package/dist/cjs/types/priority.d.ts.map +1 -0
  176. package/dist/cjs/types/priority.js +17 -0
  177. package/dist/cjs/types/priority.js.map +1 -0
  178. package/dist/cjs/types/relays.d.ts +27 -0
  179. package/dist/cjs/types/relays.d.ts.map +1 -0
  180. package/dist/cjs/types/relays.js +7 -0
  181. package/dist/cjs/types/relays.js.map +1 -0
  182. package/dist/cjs/types/scoring.d.ts +59 -0
  183. package/dist/cjs/types/scoring.d.ts.map +1 -0
  184. package/dist/cjs/types/scoring.js +34 -0
  185. package/dist/cjs/types/scoring.js.map +1 -0
  186. package/dist/cjs/types/socket.d.ts +98 -0
  187. package/dist/cjs/types/socket.d.ts.map +1 -0
  188. package/dist/cjs/types/socket.js +7 -0
  189. package/dist/cjs/types/socket.js.map +1 -0
  190. package/dist/cjs/types/transport.d.ts +98 -0
  191. package/dist/cjs/types/transport.d.ts.map +1 -0
  192. package/dist/cjs/types/transport.js +7 -0
  193. package/dist/cjs/types/transport.js.map +1 -0
  194. package/dist/cjs/types/validation.d.ts +51 -0
  195. package/dist/cjs/types/validation.d.ts.map +1 -0
  196. package/dist/cjs/types/validation.js +7 -0
  197. package/dist/cjs/types/validation.js.map +1 -0
  198. package/dist/cjs/types/websocket.d.ts +250 -0
  199. package/dist/cjs/types/websocket.d.ts.map +1 -0
  200. package/dist/cjs/types/websocket.js +7 -0
  201. package/dist/cjs/types/websocket.js.map +1 -0
  202. package/dist/cjs/utils/http.d.ts +11 -0
  203. package/dist/cjs/utils/http.d.ts.map +1 -0
  204. package/dist/cjs/utils/http.js +28 -0
  205. package/dist/cjs/utils/http.js.map +1 -0
  206. package/dist/cjs/utils/logger.d.ts +26 -0
  207. package/dist/cjs/utils/logger.d.ts.map +1 -0
  208. package/dist/cjs/utils/logger.js +43 -0
  209. package/dist/cjs/utils/logger.js.map +1 -0
  210. package/dist/cjs/utils/metrics.d.ts +81 -0
  211. package/dist/cjs/utils/metrics.d.ts.map +1 -0
  212. package/dist/cjs/utils/metrics.js +211 -0
  213. package/dist/cjs/utils/metrics.js.map +1 -0
  214. package/dist/cjs/utils/rate-limiter.d.ts +86 -0
  215. package/dist/cjs/utils/rate-limiter.d.ts.map +1 -0
  216. package/dist/cjs/utils/rate-limiter.js +183 -0
  217. package/dist/cjs/utils/rate-limiter.js.map +1 -0
  218. package/dist/core/client.d.ts +21 -80
  219. package/dist/core/client.d.ts.map +1 -0
  220. package/dist/core/client.js +110 -316
  221. package/dist/core/client.js.map +1 -0
  222. package/dist/core/nostr-server.d.ts +1 -0
  223. package/dist/core/nostr-server.d.ts.map +1 -0
  224. package/dist/core/nostr-server.js +1 -0
  225. package/dist/core/nostr-server.js.map +1 -0
  226. package/dist/core/queue.d.ts +22 -45
  227. package/dist/core/queue.d.ts.map +1 -0
  228. package/dist/core/queue.js +72 -79
  229. package/dist/core/queue.js.map +1 -0
  230. package/dist/core/server.d.ts +2 -0
  231. package/dist/core/server.d.ts.map +1 -0
  232. package/dist/core/server.js +29 -13
  233. package/dist/core/server.js.map +1 -0
  234. package/dist/crypto/bech32.d.ts +1 -0
  235. package/dist/crypto/bech32.d.ts.map +1 -0
  236. package/dist/crypto/bech32.js +1 -0
  237. package/dist/crypto/bech32.js.map +1 -0
  238. package/dist/crypto/handlers.d.ts +8 -0
  239. package/dist/crypto/handlers.d.ts.map +1 -0
  240. package/dist/crypto/handlers.js +27 -2
  241. package/dist/crypto/handlers.js.map +1 -0
  242. package/dist/crypto/index.d.ts +1 -0
  243. package/dist/crypto/index.d.ts.map +1 -0
  244. package/dist/crypto/index.js +1 -0
  245. package/dist/crypto/index.js.map +1 -0
  246. package/dist/endpoints/metrics.d.ts +1 -0
  247. package/dist/endpoints/metrics.d.ts.map +1 -0
  248. package/dist/endpoints/metrics.js +1 -0
  249. package/dist/endpoints/metrics.js.map +1 -0
  250. package/dist/index.d.ts +1 -0
  251. package/dist/index.d.ts.map +1 -0
  252. package/dist/index.js +1 -0
  253. package/dist/index.js.map +1 -0
  254. package/dist/nips/index.d.ts +1 -0
  255. package/dist/nips/index.d.ts.map +1 -0
  256. package/dist/nips/index.js +1 -0
  257. package/dist/nips/index.js.map +1 -0
  258. package/dist/nips/nip-01.d.ts +4 -3
  259. package/dist/nips/nip-01.d.ts.map +1 -0
  260. package/dist/nips/nip-01.js +18 -29
  261. package/dist/nips/nip-01.js.map +1 -0
  262. package/dist/nips/nip-02.d.ts +2 -2
  263. package/dist/nips/nip-02.d.ts.map +1 -0
  264. package/dist/nips/nip-02.js +14 -25
  265. package/dist/nips/nip-02.js.map +1 -0
  266. package/dist/nips/nip-04.d.ts +1 -0
  267. package/dist/nips/nip-04.d.ts.map +1 -0
  268. package/dist/nips/nip-04.js +16 -23
  269. package/dist/nips/nip-04.js.map +1 -0
  270. package/dist/nips/nip-05.d.ts +4 -2
  271. package/dist/nips/nip-05.d.ts.map +1 -0
  272. package/dist/nips/nip-05.js +1 -0
  273. package/dist/nips/nip-05.js.map +1 -0
  274. package/dist/nips/nip-09.d.ts +2 -1
  275. package/dist/nips/nip-09.d.ts.map +1 -0
  276. package/dist/nips/nip-09.js +7 -25
  277. package/dist/nips/nip-09.js.map +1 -0
  278. package/dist/nips/nip-11.d.ts +1 -0
  279. package/dist/nips/nip-11.d.ts.map +1 -0
  280. package/dist/nips/nip-11.js +1 -0
  281. package/dist/nips/nip-11.js.map +1 -0
  282. package/dist/nips/nip-13.d.ts +1 -0
  283. package/dist/nips/nip-13.d.ts.map +1 -0
  284. package/dist/nips/nip-13.js +3 -2
  285. package/dist/nips/nip-13.js.map +1 -0
  286. package/dist/nips/nip-15.d.ts +1 -0
  287. package/dist/nips/nip-15.d.ts.map +1 -0
  288. package/dist/nips/nip-15.js +2 -6
  289. package/dist/nips/nip-15.js.map +1 -0
  290. package/dist/nips/nip-16.d.ts +1 -0
  291. package/dist/nips/nip-16.d.ts.map +1 -0
  292. package/dist/nips/nip-16.js +3 -2
  293. package/dist/nips/nip-16.js.map +1 -0
  294. package/dist/nips/nip-19.d.ts +1 -0
  295. package/dist/nips/nip-19.d.ts.map +1 -0
  296. package/dist/nips/nip-19.js +1 -0
  297. package/dist/nips/nip-19.js.map +1 -0
  298. package/dist/nips/nip-20.d.ts +2 -1
  299. package/dist/nips/nip-20.d.ts.map +1 -0
  300. package/dist/nips/nip-20.js +20 -20
  301. package/dist/nips/nip-20.js.map +1 -0
  302. package/dist/nips/nip-22.d.ts +1 -0
  303. package/dist/nips/nip-22.d.ts.map +1 -0
  304. package/dist/nips/nip-22.js +4 -3
  305. package/dist/nips/nip-22.js.map +1 -0
  306. package/dist/nips/nip-26.d.ts +1 -0
  307. package/dist/nips/nip-26.d.ts.map +1 -0
  308. package/dist/nips/nip-26.js +1 -0
  309. package/dist/nips/nip-26.js.map +1 -0
  310. package/dist/nips/nip-28.d.ts +1 -0
  311. package/dist/nips/nip-28.d.ts.map +1 -0
  312. package/dist/nips/nip-28.js +17 -31
  313. package/dist/nips/nip-28.js.map +1 -0
  314. package/dist/nips/nip-33.d.ts +1 -0
  315. package/dist/nips/nip-33.d.ts.map +1 -0
  316. package/dist/nips/nip-33.js +7 -12
  317. package/dist/nips/nip-33.js.map +1 -0
  318. package/dist/transport/base.d.ts +4 -4
  319. package/dist/transport/base.d.ts.map +1 -0
  320. package/dist/transport/base.js +1 -0
  321. package/dist/transport/base.js.map +1 -0
  322. package/dist/transport/websocket.d.ts +2 -0
  323. package/dist/transport/websocket.d.ts.map +1 -0
  324. package/dist/transport/websocket.js +7 -0
  325. package/dist/transport/websocket.js.map +1 -0
  326. package/dist/types/events.d.ts +12 -1
  327. package/dist/types/events.d.ts.map +1 -0
  328. package/dist/types/events.js +2 -1
  329. package/dist/types/events.js.map +1 -0
  330. package/dist/types/filters.d.ts +1 -0
  331. package/dist/types/filters.d.ts.map +1 -0
  332. package/dist/types/filters.js +1 -0
  333. package/dist/types/filters.js.map +1 -0
  334. package/dist/types/handlers.d.ts +1 -0
  335. package/dist/types/handlers.d.ts.map +1 -0
  336. package/dist/types/handlers.js +1 -0
  337. package/dist/types/handlers.js.map +1 -0
  338. package/dist/types/index.d.ts +13 -6
  339. package/dist/types/index.d.ts.map +1 -0
  340. package/dist/types/index.js +2 -3
  341. package/dist/types/index.js.map +1 -0
  342. package/dist/types/logger.d.ts +1 -0
  343. package/dist/types/logger.d.ts.map +1 -0
  344. package/dist/types/logger.js +1 -0
  345. package/dist/types/logger.js.map +1 -0
  346. package/dist/types/messages.d.ts +68 -70
  347. package/dist/types/messages.d.ts.map +1 -0
  348. package/dist/types/messages.js +28 -26
  349. package/dist/types/messages.js.map +1 -0
  350. package/dist/types/nostr.d.ts +3 -2
  351. package/dist/types/nostr.d.ts.map +1 -0
  352. package/dist/types/nostr.js +1 -0
  353. package/dist/types/nostr.js.map +1 -0
  354. package/dist/types/options.d.ts +1 -0
  355. package/dist/types/options.d.ts.map +1 -0
  356. package/dist/types/options.js +1 -0
  357. package/dist/types/options.js.map +1 -0
  358. package/dist/types/priority.d.ts +13 -0
  359. package/dist/types/priority.d.ts.map +1 -0
  360. package/dist/types/priority.js +14 -0
  361. package/dist/types/priority.js.map +1 -0
  362. package/dist/types/relays.d.ts +1 -0
  363. package/dist/types/relays.d.ts.map +1 -0
  364. package/dist/types/relays.js +1 -0
  365. package/dist/types/relays.js.map +1 -0
  366. package/dist/types/scoring.d.ts +19 -7
  367. package/dist/types/scoring.d.ts.map +1 -0
  368. package/dist/types/scoring.js +2 -1
  369. package/dist/types/scoring.js.map +1 -0
  370. package/dist/types/socket.d.ts +1 -2
  371. package/dist/types/socket.d.ts.map +1 -0
  372. package/dist/types/socket.js +1 -0
  373. package/dist/types/socket.js.map +1 -0
  374. package/dist/types/transport.d.ts +1 -0
  375. package/dist/types/transport.d.ts.map +1 -0
  376. package/dist/types/transport.js +1 -0
  377. package/dist/types/transport.js.map +1 -0
  378. package/dist/types/validation.d.ts +1 -0
  379. package/dist/types/validation.d.ts.map +1 -0
  380. package/dist/types/validation.js +1 -0
  381. package/dist/types/validation.js.map +1 -0
  382. package/dist/types/websocket.d.ts +116 -38
  383. package/dist/types/websocket.d.ts.map +1 -0
  384. package/dist/types/websocket.js +2 -1
  385. package/dist/types/websocket.js.map +1 -0
  386. package/dist/utils/http.d.ts +1 -0
  387. package/dist/utils/http.d.ts.map +1 -0
  388. package/dist/utils/http.js +1 -0
  389. package/dist/utils/http.js.map +1 -0
  390. package/dist/utils/logger.d.ts +17 -2
  391. package/dist/utils/logger.d.ts.map +1 -0
  392. package/dist/utils/logger.js +24 -10
  393. package/dist/utils/logger.js.map +1 -0
  394. package/dist/utils/metrics.d.ts +1 -1
  395. package/dist/utils/metrics.d.ts.map +1 -0
  396. package/dist/utils/metrics.js +1 -0
  397. package/dist/utils/metrics.js.map +1 -0
  398. package/dist/utils/rate-limiter.d.ts +1 -0
  399. package/dist/utils/rate-limiter.d.ts.map +1 -0
  400. package/dist/utils/rate-limiter.js +6 -4
  401. package/dist/utils/rate-limiter.js.map +1 -0
  402. package/package.json +14 -2
  403. package/dist/__mocks__/logger.d.ts +0 -9
  404. package/dist/__mocks__/logger.js +0 -6
  405. package/dist/client.d.ts +0 -129
  406. package/dist/client.js +0 -259
  407. package/dist/crypto/schnorr.d.ts +0 -16
  408. package/dist/crypto/schnorr.js +0 -51
  409. package/dist/nostr-server.js +0 -107
  410. package/dist/server.d.ts +0 -27
  411. package/dist/server.js +0 -132
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-20 Command Results implementation
4
+ * @module nips/nip-20
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CommandStatus = void 0;
8
+ exports.validateCommandMessage = validateCommandMessage;
9
+ exports.createCommandResult = createCommandResult;
10
+ exports.createOkMessage = createOkMessage;
11
+ exports.createCommandNoticeMessage = createCommandNoticeMessage;
12
+ const logger_1 = require("../utils/logger");
13
+ const logger = (0, logger_1.getLogger)('NIP-20');
14
+ /**
15
+ * Command status types
16
+ */
17
+ var CommandStatus;
18
+ (function (CommandStatus) {
19
+ CommandStatus["SUCCESS"] = "success";
20
+ CommandStatus["error"] = "error";
21
+ CommandStatus["PENDING"] = "pending";
22
+ CommandStatus["RATE_LIMITED"] = "rate_limited";
23
+ CommandStatus["AUTH_REQUIRED"] = "auth_required";
24
+ CommandStatus["RESTRICTED"] = "restricted";
25
+ })(CommandStatus || (exports.CommandStatus = CommandStatus = {}));
26
+ /**
27
+ * Validates a command message according to NIP-20
28
+ */
29
+ function validateCommandMessage(message) {
30
+ if (!Array.isArray(message) || message.length < 2) {
31
+ logger.debug('Invalid command message format');
32
+ return false;
33
+ }
34
+ const [type, data] = message;
35
+ if (typeof data !== 'object' || !data) {
36
+ logger.debug('Invalid command message data');
37
+ return false;
38
+ }
39
+ const commandData = data;
40
+ // For OK/NOTICE messages
41
+ if (type === 'OK') {
42
+ if (!commandData.event_id || typeof commandData.event_id !== 'string') {
43
+ logger.debug('Invalid event_id in OK message');
44
+ return false;
45
+ }
46
+ if (typeof commandData.status !== 'boolean') {
47
+ logger.debug('Invalid status in OK message');
48
+ return false;
49
+ }
50
+ }
51
+ // For NOTICE messages
52
+ if (type === 'NOTICE' && commandData.code) {
53
+ if (!Object.values(CommandStatus).includes(commandData.code)) {
54
+ logger.debug('Invalid command status code');
55
+ return false;
56
+ }
57
+ }
58
+ // Optional fields validation
59
+ if (commandData.message && typeof commandData.message !== 'string') {
60
+ logger.debug('Invalid message field');
61
+ return false;
62
+ }
63
+ if (commandData.details && typeof commandData.details !== 'object') {
64
+ logger.debug('Invalid details field');
65
+ return false;
66
+ }
67
+ return true;
68
+ }
69
+ /**
70
+ * Creates a command result message
71
+ */
72
+ function createCommandResult(data) {
73
+ const status = data.status ?? false;
74
+ const code = status ? CommandStatus.SUCCESS : data.code;
75
+ return {
76
+ status,
77
+ code,
78
+ message: data.message,
79
+ details: data.details
80
+ };
81
+ }
82
+ /**
83
+ * Creates an OK message
84
+ */
85
+ function createOkMessage(eventId, success = true, details) {
86
+ return ['OK', {
87
+ event_id: eventId,
88
+ status: success,
89
+ ...details && { details }
90
+ }];
91
+ }
92
+ /**
93
+ * Creates a NOTICE message
94
+ */
95
+ function createCommandNoticeMessage(code, message, details) {
96
+ return ['NOTICE', {
97
+ code,
98
+ message,
99
+ ...details && { details }
100
+ }];
101
+ }
102
+ //# sourceMappingURL=nip-20.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-20.js","sourceRoot":"","sources":["../../../src/nips/nip-20.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @file NIP-22: Event Created At Limits
3
+ * @module nips/nip-22
4
+ * @see https://github.com/nostr-protocol/nips/blob/master/22.md
5
+ */
6
+ import type { NostrWSMessage } from '../types/messages';
7
+ import type { Logger } from '../types/logger';
8
+ /**
9
+ * Default time limits in seconds
10
+ */
11
+ export declare const DEFAULT_TIME_LIMITS: {
12
+ FUTURE_LIMIT: number;
13
+ PAST_LIMIT: number;
14
+ };
15
+ /**
16
+ * Time validation result
17
+ */
18
+ export interface TimeValidationResult {
19
+ valid: boolean;
20
+ reason?: string;
21
+ }
22
+ /**
23
+ * Time validator interface
24
+ */
25
+ export interface TimeValidator {
26
+ /**
27
+ * Validates event timestamp
28
+ * @param timestamp - Event timestamp
29
+ * @returns {TimeValidationResult} Validation result
30
+ */
31
+ validateTime(timestamp: number): TimeValidationResult;
32
+ /**
33
+ * Updates server time offset
34
+ * @param serverTime - Server timestamp
35
+ */
36
+ updateTimeOffset(serverTime: number): void;
37
+ /**
38
+ * Gets current adjusted timestamp
39
+ * @returns {number} Adjusted timestamp
40
+ */
41
+ getCurrentTime(): number;
42
+ }
43
+ /**
44
+ * Creates a time validator
45
+ * @param logger - Logger instance
46
+ * @param futureLimitSeconds - Future time limit in seconds
47
+ * @param pastLimitSeconds - Past time limit in seconds
48
+ * @returns {TimeValidator} Time validator
49
+ */
50
+ export declare function createTimeValidator(logger: Logger, futureLimitSeconds?: number, pastLimitSeconds?: number): TimeValidator;
51
+ /**
52
+ * Validates event timestamp
53
+ * @param message - Message to validate
54
+ * @param validator - Time validator
55
+ * @param logger - Logger instance
56
+ * @returns {TimeValidationResult} Validation result
57
+ */
58
+ export declare function validateEventTime(message: NostrWSMessage, validator: TimeValidator, logger: Logger): TimeValidationResult;
59
+ /**
60
+ * Time synchronization manager interface
61
+ */
62
+ export interface TimeSyncManager {
63
+ /**
64
+ * Starts time synchronization
65
+ * @param wsUrl - WebSocket URL for time sync
66
+ */
67
+ startSync(wsUrl: string): void;
68
+ /**
69
+ * Stops time synchronization
70
+ */
71
+ stopSync(): void;
72
+ /**
73
+ * Gets current synchronized time
74
+ * @returns {number} Current timestamp
75
+ */
76
+ getCurrentTime(): number;
77
+ /**
78
+ * Validates event timing
79
+ * @param event - Event to validate
80
+ * @returns {TimeValidationResult} Validation result
81
+ */
82
+ validateEvent(event: NostrWSMessage): TimeValidationResult;
83
+ }
84
+ /**
85
+ * Creates a time synchronization manager
86
+ * @param logger - Logger instance
87
+ * @returns {TimeSyncManager} Time sync manager
88
+ */
89
+ export declare function createTimeSyncManager(logger: Logger): TimeSyncManager;
90
+ //# sourceMappingURL=nip-22.d.ts.map
@@ -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