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,65 @@
1
+ /**
2
+ * @file NIP-11: Relay Information Document
3
+ * @module nips/nip-11
4
+ * @see https://github.com/nostr-protocol/nips/blob/master/11.md
5
+ */
6
+ /**
7
+ * Relay information document structure
8
+ */
9
+ export interface RelayInformation {
10
+ name?: string;
11
+ description?: string;
12
+ pubkey?: string;
13
+ contact?: string;
14
+ supported_nips?: number[];
15
+ software?: string;
16
+ version?: string;
17
+ limitation?: {
18
+ max_message_length?: number;
19
+ max_subscriptions?: number;
20
+ max_filters?: number;
21
+ max_limit?: number;
22
+ max_subid_length?: number;
23
+ min_prefix?: number;
24
+ max_event_tags?: number;
25
+ max_content_length?: number;
26
+ min_pow_difficulty?: number;
27
+ auth_required?: boolean;
28
+ payment_required?: boolean;
29
+ };
30
+ }
31
+ /**
32
+ * Fetches relay information document
33
+ * @param url - Relay URL (ws:// or wss://)
34
+ * @returns {Promise<RelayInformation>} Relay information
35
+ */
36
+ export declare function getRelayInformation(url: string): Promise<RelayInformation>;
37
+ /**
38
+ * Checks if relay meets requirements
39
+ * @param relay - Relay information
40
+ * @param requirements - Required relay features
41
+ * @returns {boolean} True if relay meets all requirements
42
+ */
43
+ export declare function checkRelayRequirements(relay: RelayInformation, requirements: Partial<RelayInformation>): boolean;
44
+ /**
45
+ * Validates relay capabilities against required features
46
+ * @param info - Relay information
47
+ * @param requiredNips - Required NIPs
48
+ * @param requiredFeatures - Required relay features
49
+ * @returns {boolean} True if relay supports all required features
50
+ */
51
+ export declare function validateRelayCapabilities(info: RelayInformation, requiredNips?: number[], requiredFeatures?: Partial<RelayInformation['limitation']>): boolean;
52
+ /**
53
+ * Creates a relay selection score based on capabilities
54
+ * @param info - Relay information
55
+ * @param preferences - Scoring preferences
56
+ * @returns {number} Relay score (higher is better)
57
+ */
58
+ export declare function scoreRelayCapabilities(info: RelayInformation, preferences?: {
59
+ preferredNips?: number[];
60
+ minMessageLength?: number;
61
+ minSubscriptions?: number;
62
+ requireAuth?: boolean;
63
+ requirePayment?: boolean;
64
+ }): number;
65
+ //# sourceMappingURL=nip-11.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-11.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-11.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE;QACX,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAUhF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,gBAAgB,EACvB,YAAY,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACtC,OAAO,CAqDT;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,gBAAgB,EACtB,YAAY,GAAE,MAAM,EAAO,EAC3B,gBAAgB,GAAE,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAM,GAC7D,OAAO,CAiCT;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,gBAAgB,EACtB,WAAW,GAAE;IACX,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CACrB,GACL,MAAM,CAoCR"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-11: Relay Information Document
4
+ * @module nips/nip-11
5
+ * @see https://github.com/nostr-protocol/nips/blob/master/11.md
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.getRelayInformation = getRelayInformation;
9
+ exports.checkRelayRequirements = checkRelayRequirements;
10
+ exports.validateRelayCapabilities = validateRelayCapabilities;
11
+ exports.scoreRelayCapabilities = scoreRelayCapabilities;
12
+ const logger_1 = require("../utils/logger");
13
+ const http_1 = require("../utils/http");
14
+ const logger = (0, logger_1.getLogger)('NIP-11');
15
+ /**
16
+ * Fetches relay information document
17
+ * @param url - Relay URL (ws:// or wss://)
18
+ * @returns {Promise<RelayInformation>} Relay information
19
+ */
20
+ async function getRelayInformation(url) {
21
+ try {
22
+ const relayUrl = url.replace('ws://', 'http://').replace('wss://', 'https://');
23
+ const response = await (0, http_1.fetchJson)(`${relayUrl}/.well-known/nostr.json`);
24
+ return response;
25
+ }
26
+ catch (error) {
27
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
28
+ logger.error(`Failed to fetch relay information: ${errorMessage}`);
29
+ throw new Error(`Failed to fetch relay information: ${errorMessage}`);
30
+ }
31
+ }
32
+ /**
33
+ * Checks if relay meets requirements
34
+ * @param relay - Relay information
35
+ * @param requirements - Required relay features
36
+ * @returns {boolean} True if relay meets all requirements
37
+ */
38
+ function checkRelayRequirements(relay, requirements) {
39
+ try {
40
+ // Check supported NIPs
41
+ if (requirements.supported_nips && relay.supported_nips) {
42
+ const missingNips = requirements.supported_nips.filter(nip => !relay.supported_nips?.includes(nip));
43
+ if (missingNips.length > 0) {
44
+ logger.debug(`Missing required NIPs: ${missingNips.join(', ')}`);
45
+ return false;
46
+ }
47
+ }
48
+ // Check limitations
49
+ if (requirements.limitation && relay.limitation) {
50
+ for (const [key, value] of Object.entries(requirements.limitation)) {
51
+ const relayValue = relay.limitation[key];
52
+ // Skip if relay doesn't specify this limitation
53
+ if (relayValue === undefined)
54
+ continue;
55
+ // For maximum values, relay should support at least the required value
56
+ if (key.startsWith('max_') && typeof relayValue === 'number' && typeof value === 'number') {
57
+ if (relayValue < value) {
58
+ logger.debug(`Relay ${key} too low: ${relayValue} < ${value}`);
59
+ return false;
60
+ }
61
+ }
62
+ // For minimum values, relay should not require more than specified
63
+ if (key.startsWith('min_') && typeof relayValue === 'number' && typeof value === 'number') {
64
+ if (relayValue > value) {
65
+ logger.debug(`Relay ${key} too high: ${relayValue} > ${value}`);
66
+ return false;
67
+ }
68
+ }
69
+ // For boolean flags, values must match if specified
70
+ if (typeof relayValue === 'boolean' && typeof value === 'boolean') {
71
+ if (relayValue !== value) {
72
+ logger.debug(`Relay ${key} mismatch: ${relayValue} !== ${value}`);
73
+ return false;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ return true;
79
+ }
80
+ catch (error) {
81
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
82
+ logger.error(`Error checking relay requirements: ${errorMessage}`);
83
+ return false;
84
+ }
85
+ }
86
+ /**
87
+ * Validates relay capabilities against required features
88
+ * @param info - Relay information
89
+ * @param requiredNips - Required NIPs
90
+ * @param requiredFeatures - Required relay features
91
+ * @returns {boolean} True if relay supports all required features
92
+ */
93
+ function validateRelayCapabilities(info, requiredNips = [], requiredFeatures = {}) {
94
+ // Check NIP support
95
+ if (requiredNips.length > 0) {
96
+ if (!info.supported_nips)
97
+ return false;
98
+ if (!requiredNips.every(nip => info.supported_nips?.includes(nip))) {
99
+ return false;
100
+ }
101
+ }
102
+ // Check limitations
103
+ if (info.limitation) {
104
+ for (const [key, value] of Object.entries(requiredFeatures)) {
105
+ const relayValue = info.limitation[key];
106
+ if (relayValue === undefined)
107
+ return false;
108
+ // For maximum values, relay limit should be higher
109
+ if (key.startsWith('max_') && typeof relayValue === 'number' && typeof value === 'number') {
110
+ if (relayValue < value)
111
+ return false;
112
+ }
113
+ // For minimum values, relay limit should be lower
114
+ if (key.startsWith('min_') && typeof relayValue === 'number' && typeof value === 'number') {
115
+ if (relayValue > value)
116
+ return false;
117
+ }
118
+ // For boolean flags, must match exactly
119
+ if (typeof relayValue === 'boolean' && typeof value === 'boolean') {
120
+ if (relayValue !== value)
121
+ return false;
122
+ }
123
+ }
124
+ }
125
+ return true;
126
+ }
127
+ /**
128
+ * Creates a relay selection score based on capabilities
129
+ * @param info - Relay information
130
+ * @param preferences - Scoring preferences
131
+ * @returns {number} Relay score (higher is better)
132
+ */
133
+ function scoreRelayCapabilities(info, preferences = {}) {
134
+ let score = 0;
135
+ // Score NIP support
136
+ if (info.supported_nips && preferences.preferredNips) {
137
+ score += preferences.preferredNips.filter(nip => info.supported_nips?.includes(nip)).length * 10;
138
+ }
139
+ // Score limitations
140
+ if (info.limitation) {
141
+ const limits = info.limitation;
142
+ // Message length
143
+ if (limits.max_message_length && preferences.minMessageLength) {
144
+ score += limits.max_message_length >= preferences.minMessageLength ? 5 : -5;
145
+ }
146
+ // Subscriptions
147
+ if (limits.max_subscriptions && preferences.minSubscriptions) {
148
+ score += limits.max_subscriptions >= preferences.minSubscriptions ? 5 : -5;
149
+ }
150
+ // Auth requirements
151
+ if (preferences.requireAuth !== undefined) {
152
+ score += (limits.auth_required === preferences.requireAuth) ? 5 : -10;
153
+ }
154
+ // Payment requirements
155
+ if (preferences.requirePayment !== undefined) {
156
+ score += (limits.payment_required === preferences.requirePayment) ? 5 : -10;
157
+ }
158
+ }
159
+ return score;
160
+ }
161
+ //# sourceMappingURL=nip-11.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-11.js","sourceRoot":"","sources":["../../../src/nips/nip-11.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @file NIP-13: Proof of Work
3
+ * @module nips/nip-13
4
+ * @see https://github.com/nostr-protocol/nips/blob/master/13.md
5
+ */
6
+ import type { NostrWSMessage } from '../types/messages';
7
+ import type { Logger } from '../types/logger';
8
+ /**
9
+ * Calculates the number of leading zero bits in a hex string
10
+ * @param hex - Hex string to check
11
+ * @returns {number} Number of leading zero bits
12
+ */
13
+ export declare function countLeadingZeroBits(hex: string): number;
14
+ /**
15
+ * Calculates event ID with proof of work
16
+ * @param event - Event object without ID
17
+ * @param targetDifficulty - Target number of leading zero bits
18
+ * @param maxAttempts - Maximum number of attempts
19
+ * @returns {Promise<string>} Event ID with sufficient proof of work
20
+ */
21
+ export declare function calculatePowEventId(event: Record<string, unknown>, targetDifficulty: number, maxAttempts?: number): Promise<string>;
22
+ /**
23
+ * Validates proof of work for an event
24
+ * @param message - Message containing event
25
+ * @param minDifficulty - Minimum required difficulty
26
+ * @param logger - Logger instance
27
+ * @returns {boolean} True if proof of work is valid
28
+ */
29
+ export declare function validateEventPoW(message: NostrWSMessage, minDifficulty: number, logger: Logger): boolean;
30
+ /**
31
+ * Dynamic difficulty calculator based on event type and content
32
+ */
33
+ export interface DifficultyCalculator {
34
+ /**
35
+ * Calculates required difficulty for an event
36
+ * @param event - Event to check
37
+ * @returns {number} Required number of leading zero bits
38
+ */
39
+ calculateRequiredDifficulty(event: Record<string, unknown>): number;
40
+ }
41
+ /**
42
+ * Creates a default difficulty calculator
43
+ * @param baseDifficulty - Base difficulty for all events
44
+ * @param contentMultiplier - Multiplier based on content length
45
+ * @returns {DifficultyCalculator} Difficulty calculator
46
+ */
47
+ export declare function createDifficultyCalculator(baseDifficulty?: number, contentMultiplier?: number): DifficultyCalculator;
48
+ /**
49
+ * Rate limiter interface for proof of work
50
+ */
51
+ export interface PowRateLimiter {
52
+ /**
53
+ * Checks if an event should be rate limited
54
+ * @param pubkey - Publisher's public key
55
+ * @param currentTime - Current timestamp
56
+ * @returns {boolean} True if should be rate limited
57
+ */
58
+ shouldRateLimit(pubkey: string, currentTime: number): boolean;
59
+ /**
60
+ * Records an event for rate limiting
61
+ * @param pubkey - Publisher's public key
62
+ * @param difficulty - Event difficulty
63
+ * @param currentTime - Current timestamp
64
+ */
65
+ recordEvent(pubkey: string, difficulty: number, currentTime: number): void;
66
+ }
67
+ /**
68
+ * Creates a default PoW rate limiter
69
+ * @param windowSeconds - Time window for rate limiting
70
+ * @param maxDifficulty - Maximum cumulative difficulty per window
71
+ * @returns {PowRateLimiter} Rate limiter
72
+ */
73
+ export declare function createPowRateLimiter(windowSeconds?: number, maxDifficulty?: number): PowRateLimiter;
74
+ //# sourceMappingURL=nip-13.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-13.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-13.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYxD;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,gBAAgB,EAAE,MAAM,EACxB,WAAW,GAAE,MAAgB,GAC5B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAmBT;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CACrE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,GAAE,MAAU,EAC1B,iBAAiB,GAAE,MAAc,GAChC,oBAAoB,CAmBtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAE9D;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,GAAE,MAAa,EAC5B,aAAa,GAAE,MAAY,GAC1B,cAAc,CA2BhB"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-13: Proof of Work
4
+ * @module nips/nip-13
5
+ * @see https://github.com/nostr-protocol/nips/blob/master/13.md
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.countLeadingZeroBits = countLeadingZeroBits;
9
+ exports.calculatePowEventId = calculatePowEventId;
10
+ exports.validateEventPoW = validateEventPoW;
11
+ exports.createDifficultyCalculator = createDifficultyCalculator;
12
+ exports.createPowRateLimiter = createPowRateLimiter;
13
+ const crypto_1 = require("crypto");
14
+ /**
15
+ * Calculates the number of leading zero bits in a hex string
16
+ * @param hex - Hex string to check
17
+ * @returns {number} Number of leading zero bits
18
+ */
19
+ function countLeadingZeroBits(hex) {
20
+ let count = 0;
21
+ for (const char of hex) {
22
+ const nibble = parseInt(char, 16);
23
+ if (nibble === 0) {
24
+ count += 4;
25
+ }
26
+ else {
27
+ count += Math.clz32(nibble) - 28;
28
+ break;
29
+ }
30
+ }
31
+ return count;
32
+ }
33
+ /**
34
+ * Calculates event ID with proof of work
35
+ * @param event - Event object without ID
36
+ * @param targetDifficulty - Target number of leading zero bits
37
+ * @param maxAttempts - Maximum number of attempts
38
+ * @returns {Promise<string>} Event ID with sufficient proof of work
39
+ */
40
+ async function calculatePowEventId(event, targetDifficulty, maxAttempts = 1000000) {
41
+ let nonce = 0;
42
+ const eventCopy = { ...event };
43
+ while (nonce < maxAttempts) {
44
+ eventCopy.nonce = nonce.toString();
45
+ const serialized = JSON.stringify([
46
+ 0,
47
+ eventCopy.pubkey,
48
+ eventCopy.created_at,
49
+ eventCopy.kind,
50
+ eventCopy.tags,
51
+ eventCopy.content,
52
+ eventCopy.nonce
53
+ ]);
54
+ const hash = (0, crypto_1.createHash)('sha256').update(serialized).digest('hex');
55
+ const difficulty = countLeadingZeroBits(hash);
56
+ if (difficulty >= targetDifficulty) {
57
+ return hash;
58
+ }
59
+ nonce++;
60
+ }
61
+ throw new Error('Failed to find proof of work within maximum attempts');
62
+ }
63
+ /**
64
+ * Validates proof of work for an event
65
+ * @param message - Message containing event
66
+ * @param minDifficulty - Minimum required difficulty
67
+ * @param logger - Logger instance
68
+ * @returns {boolean} True if proof of work is valid
69
+ */
70
+ function validateEventPoW(message, minDifficulty, logger) {
71
+ try {
72
+ if (!Array.isArray(message) || message[0] !== 'EVENT') {
73
+ return true; // Not an event message
74
+ }
75
+ const event = message[1];
76
+ if (!event.id || typeof event.id !== 'string') {
77
+ logger.debug('Missing event ID');
78
+ return false;
79
+ }
80
+ // Calculate difficulty
81
+ const difficulty = countLeadingZeroBits(event.id);
82
+ return difficulty >= minDifficulty;
83
+ }
84
+ catch (error) {
85
+ logger.error('Error validating proof of work:', error);
86
+ return false;
87
+ }
88
+ }
89
+ /**
90
+ * Creates a default difficulty calculator
91
+ * @param baseDifficulty - Base difficulty for all events
92
+ * @param contentMultiplier - Multiplier based on content length
93
+ * @returns {DifficultyCalculator} Difficulty calculator
94
+ */
95
+ function createDifficultyCalculator(baseDifficulty = 8, contentMultiplier = 0.001) {
96
+ return {
97
+ calculateRequiredDifficulty(event) {
98
+ let difficulty = baseDifficulty;
99
+ // Increase difficulty for larger content
100
+ if (typeof event.content === 'string') {
101
+ difficulty += Math.floor(event.content.length * contentMultiplier);
102
+ }
103
+ // Increase difficulty for certain event kinds
104
+ const kind = event.kind;
105
+ if (kind >= 1000) {
106
+ difficulty += 4; // Higher difficulty for application-specific events
107
+ }
108
+ return difficulty;
109
+ }
110
+ };
111
+ }
112
+ /**
113
+ * Creates a default PoW rate limiter
114
+ * @param windowSeconds - Time window for rate limiting
115
+ * @param maxDifficulty - Maximum cumulative difficulty per window
116
+ * @returns {PowRateLimiter} Rate limiter
117
+ */
118
+ function createPowRateLimiter(windowSeconds = 3600, maxDifficulty = 100) {
119
+ const difficulties = new Map();
120
+ return {
121
+ shouldRateLimit(pubkey, currentTime) {
122
+ const events = difficulties.get(pubkey) || [];
123
+ // Remove old events
124
+ const validEvents = events.filter(([time]) => currentTime - time < windowSeconds);
125
+ // Calculate cumulative difficulty
126
+ const totalDifficulty = validEvents.reduce((sum, [, diff]) => sum + diff, 0);
127
+ return totalDifficulty >= maxDifficulty;
128
+ },
129
+ recordEvent(pubkey, difficulty, currentTime) {
130
+ const events = difficulties.get(pubkey) || [];
131
+ events.push([currentTime, difficulty]);
132
+ difficulties.set(pubkey, events);
133
+ }
134
+ };
135
+ }
136
+ //# sourceMappingURL=nip-13.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-13.js","sourceRoot":"","sources":["../../../src/nips/nip-13.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @file NIP-15: End of Stored Events Notice
3
+ * @module nips/nip-15
4
+ * @see https://github.com/nostr-protocol/nips/blob/master/15.md
5
+ */
6
+ import type { NostrWSMessage } from '../types/messages';
7
+ import type { Logger } from '../types/logger';
8
+ /**
9
+ * Creates an EOSE (End of Stored Events) message
10
+ * @param subscriptionId - Subscription ID
11
+ * @returns {NostrWSMessage} EOSE message
12
+ */
13
+ export declare function createEOSEMessage(subscriptionId: string): NostrWSMessage;
14
+ /**
15
+ * Subscription state manager interface
16
+ */
17
+ export interface SubscriptionStateManager {
18
+ /**
19
+ * Registers a new subscription
20
+ * @param subscriptionId - Subscription ID
21
+ * @param filter - Subscription filter
22
+ */
23
+ registerSubscription(subscriptionId: string, filter: Record<string, unknown>): void;
24
+ /**
25
+ * Marks a subscription as complete (EOSE sent)
26
+ * @param subscriptionId - Subscription ID
27
+ */
28
+ markComplete(subscriptionId: string): void;
29
+ /**
30
+ * Checks if a subscription is complete
31
+ * @param subscriptionId - Subscription ID
32
+ * @returns {boolean} True if EOSE has been sent
33
+ */
34
+ isComplete(subscriptionId: string): boolean;
35
+ /**
36
+ * Gets subscription filter
37
+ * @param subscriptionId - Subscription ID
38
+ * @returns {Record<string, unknown> | undefined} Subscription filter
39
+ */
40
+ getFilter(subscriptionId: string): Record<string, unknown> | undefined;
41
+ /**
42
+ * Removes a subscription
43
+ * @param subscriptionId - Subscription ID
44
+ */
45
+ removeSubscription(subscriptionId: string): void;
46
+ }
47
+ /**
48
+ * Creates a subscription state manager
49
+ * @param logger - Logger instance
50
+ * @returns {SubscriptionStateManager} Subscription state manager
51
+ */
52
+ export declare function createSubscriptionStateManager(logger: Logger): SubscriptionStateManager;
53
+ /**
54
+ * Pagination handler interface
55
+ */
56
+ export interface PaginationHandler {
57
+ /**
58
+ * Gets next page of events
59
+ * @param subscriptionId - Subscription ID
60
+ * @param pageSize - Number of events per page
61
+ * @returns {Promise<NostrWSMessage[]>} Next page of events
62
+ */
63
+ getNextPage(subscriptionId: string, pageSize: number): Promise<NostrWSMessage[]>;
64
+ /**
65
+ * Checks if more events are available
66
+ * @param subscriptionId - Subscription ID
67
+ * @returns {boolean} True if more events exist
68
+ */
69
+ hasMoreEvents(subscriptionId: string): boolean;
70
+ /**
71
+ * Updates pagination state with new events
72
+ * @param subscriptionId - Subscription ID
73
+ * @param events - New events
74
+ */
75
+ updateState(subscriptionId: string, events: NostrWSMessage[]): void;
76
+ }
77
+ /**
78
+ * Creates a pagination handler
79
+ * @param stateManager - Subscription state manager
80
+ * @param logger - Logger instance
81
+ * @returns {PaginationHandler} Pagination handler
82
+ */
83
+ export declare function createPaginationHandler(stateManager: SubscriptionStateManager, logger: Logger): PaginationHandler;
84
+ //# sourceMappingURL=nip-15.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-15.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-15.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,CAExE;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,oBAAoB,CAClB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI,CAAC;IAER;;;OAGG;IACH,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3C;;;;OAIG;IACH,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;IAE5C;;;;OAIG;IACH,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAEvE;;;OAGG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,GACb,wBAAwB,CA0C1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,WAAW,CACT,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAE7B;;;;OAIG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;IAE/C;;;;OAIG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;CACrE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,wBAAwB,EACtC,MAAM,EAAE,MAAM,GACb,iBAAiB,CAuDnB"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ /**
3
+ * @file NIP-15: End of Stored Events Notice
4
+ * @module nips/nip-15
5
+ * @see https://github.com/nostr-protocol/nips/blob/master/15.md
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.createEOSEMessage = createEOSEMessage;
9
+ exports.createSubscriptionStateManager = createSubscriptionStateManager;
10
+ exports.createPaginationHandler = createPaginationHandler;
11
+ /**
12
+ * Creates an EOSE (End of Stored Events) message
13
+ * @param subscriptionId - Subscription ID
14
+ * @returns {NostrWSMessage} EOSE message
15
+ */
16
+ function createEOSEMessage(subscriptionId) {
17
+ return ['EOSE', subscriptionId];
18
+ }
19
+ /**
20
+ * Creates a subscription state manager
21
+ * @param logger - Logger instance
22
+ * @returns {SubscriptionStateManager} Subscription state manager
23
+ */
24
+ function createSubscriptionStateManager(logger) {
25
+ const subscriptions = new Map();
26
+ return {
27
+ registerSubscription(subscriptionId, filter) {
28
+ subscriptions.set(subscriptionId, {
29
+ filter,
30
+ complete: false,
31
+ timestamp: Date.now()
32
+ });
33
+ },
34
+ markComplete(subscriptionId) {
35
+ const state = subscriptions.get(subscriptionId);
36
+ if (state) {
37
+ state.complete = true;
38
+ }
39
+ else {
40
+ logger.debug(`Attempting to mark unknown subscription ${subscriptionId} as complete`);
41
+ }
42
+ },
43
+ isComplete(subscriptionId) {
44
+ return subscriptions.get(subscriptionId)?.complete || false;
45
+ },
46
+ getFilter(subscriptionId) {
47
+ return subscriptions.get(subscriptionId)?.filter;
48
+ },
49
+ removeSubscription(subscriptionId) {
50
+ subscriptions.delete(subscriptionId);
51
+ }
52
+ };
53
+ }
54
+ /**
55
+ * Creates a pagination handler
56
+ * @param stateManager - Subscription state manager
57
+ * @param logger - Logger instance
58
+ * @returns {PaginationHandler} Pagination handler
59
+ */
60
+ function createPaginationHandler(stateManager, logger) {
61
+ const paginationStates = new Map();
62
+ return {
63
+ async getNextPage(subscriptionId, pageSize) {
64
+ const state = paginationStates.get(subscriptionId);
65
+ if (!state) {
66
+ logger.debug(`No pagination state for subscription ${subscriptionId}`);
67
+ return [];
68
+ }
69
+ const start = state.currentIndex;
70
+ const end = Math.min(start + pageSize, state.events.length);
71
+ state.currentIndex = end;
72
+ state.hasMore = end < state.events.length;
73
+ // If this is the last page, send EOSE
74
+ if (!state.hasMore && !stateManager.isComplete(subscriptionId)) {
75
+ stateManager.markComplete(subscriptionId);
76
+ return [
77
+ ...state.events.slice(start, end),
78
+ createEOSEMessage(subscriptionId)
79
+ ];
80
+ }
81
+ return state.events.slice(start, end);
82
+ },
83
+ hasMoreEvents(subscriptionId) {
84
+ return paginationStates.get(subscriptionId)?.hasMore || false;
85
+ },
86
+ updateState(subscriptionId, events) {
87
+ const existing = paginationStates.get(subscriptionId);
88
+ if (existing) {
89
+ existing.events.push(...events);
90
+ existing.hasMore = true;
91
+ }
92
+ else {
93
+ paginationStates.set(subscriptionId, {
94
+ events,
95
+ currentIndex: 0,
96
+ hasMore: true
97
+ });
98
+ }
99
+ }
100
+ };
101
+ }
102
+ //# sourceMappingURL=nip-15.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip-15.js","sourceRoot":"","sources":["../../../src/nips/nip-15.ts"],"names":[],"mappings":"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"}