nostr-websocket-utils 0.3.1 → 0.3.3
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.
- package/dist/__mocks__/extendedWsMock.d.ts +6 -8
- package/dist/__mocks__/extendedWsMock.d.ts.map +1 -0
- package/dist/__mocks__/extendedWsMock.js +1 -0
- package/dist/__mocks__/extendedWsMock.js.map +1 -0
- package/dist/__mocks__/mockLogger.d.ts +8 -7
- package/dist/__mocks__/mockLogger.d.ts.map +1 -0
- package/dist/__mocks__/mockLogger.js +1 -0
- package/dist/__mocks__/mockLogger.js.map +1 -0
- package/dist/__mocks__/mockserver.d.ts +7 -11
- package/dist/__mocks__/mockserver.d.ts.map +1 -0
- package/dist/__mocks__/mockserver.js +1 -0
- package/dist/__mocks__/mockserver.js.map +1 -0
- package/dist/__mocks__/wsMock.d.ts +1 -2
- package/dist/__mocks__/wsMock.d.ts.map +1 -0
- package/dist/__mocks__/wsMock.js +1 -0
- package/dist/__mocks__/wsMock.js.map +1 -0
- package/dist/cjs/__mocks__/extendedWsMock.d.ts +52 -0
- package/dist/cjs/__mocks__/extendedWsMock.d.ts.map +1 -0
- package/dist/cjs/__mocks__/extendedWsMock.js +161 -0
- package/dist/cjs/__mocks__/extendedWsMock.js.map +1 -0
- package/dist/cjs/__mocks__/mockLogger.d.ts +42 -0
- package/dist/cjs/__mocks__/mockLogger.d.ts.map +1 -0
- package/dist/cjs/__mocks__/mockLogger.js +53 -0
- package/dist/cjs/__mocks__/mockLogger.js.map +1 -0
- package/dist/cjs/__mocks__/mockserver.d.ts +27 -0
- package/dist/cjs/__mocks__/mockserver.d.ts.map +1 -0
- package/dist/cjs/__mocks__/mockserver.js +44 -0
- package/dist/cjs/__mocks__/mockserver.js.map +1 -0
- package/dist/cjs/__mocks__/wsMock.d.ts +25 -0
- package/dist/cjs/__mocks__/wsMock.d.ts.map +1 -0
- package/dist/cjs/__mocks__/wsMock.js +123 -0
- package/dist/cjs/__mocks__/wsMock.js.map +1 -0
- package/dist/cjs/core/client.d.ts +35 -0
- package/dist/cjs/core/client.d.ts.map +1 -0
- package/dist/cjs/core/client.js +161 -0
- package/dist/cjs/core/client.js.map +1 -0
- package/dist/{nostr-server.d.ts → cjs/core/nostr-server.d.ts} +3 -6
- package/dist/cjs/core/nostr-server.d.ts.map +1 -0
- package/dist/cjs/core/nostr-server.js +101 -0
- package/dist/cjs/core/nostr-server.js.map +1 -0
- package/dist/cjs/core/queue.d.ts +38 -0
- package/dist/cjs/core/queue.d.ts.map +1 -0
- package/dist/cjs/core/queue.js +105 -0
- package/dist/cjs/core/queue.js.map +1 -0
- package/dist/cjs/core/server.d.ts +29 -0
- package/dist/cjs/core/server.d.ts.map +1 -0
- package/dist/cjs/core/server.js +134 -0
- package/dist/cjs/core/server.js.map +1 -0
- package/dist/cjs/crypto/bech32.d.ts +27 -0
- package/dist/cjs/crypto/bech32.d.ts.map +1 -0
- package/dist/cjs/crypto/bech32.js +170 -0
- package/dist/cjs/crypto/bech32.js.map +1 -0
- package/dist/cjs/crypto/handlers.d.ts +19 -0
- package/dist/cjs/crypto/handlers.d.ts.map +1 -0
- package/dist/cjs/crypto/handlers.js +65 -0
- package/dist/cjs/crypto/handlers.js.map +1 -0
- package/dist/cjs/crypto/index.d.ts +7 -0
- package/dist/cjs/crypto/index.d.ts.map +1 -0
- package/dist/cjs/crypto/index.js +23 -0
- package/dist/cjs/crypto/index.js.map +1 -0
- package/dist/cjs/endpoints/metrics.d.ts +30 -0
- package/dist/cjs/endpoints/metrics.d.ts.map +1 -0
- package/dist/cjs/endpoints/metrics.js +106 -0
- package/dist/cjs/endpoints/metrics.js.map +1 -0
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +40 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/nips/index.d.ts +20 -0
- package/dist/cjs/nips/index.d.ts.map +1 -0
- package/dist/cjs/nips/index.js +51 -0
- package/dist/cjs/nips/index.js.map +1 -0
- package/dist/cjs/nips/nip-01.d.ts +35 -0
- package/dist/cjs/nips/nip-01.d.ts.map +1 -0
- package/dist/cjs/nips/nip-01.js +142 -0
- package/dist/cjs/nips/nip-01.js.map +1 -0
- package/dist/cjs/nips/nip-02.d.ts +83 -0
- package/dist/cjs/nips/nip-02.d.ts.map +1 -0
- package/dist/cjs/nips/nip-02.js +119 -0
- package/dist/cjs/nips/nip-02.js.map +1 -0
- package/dist/cjs/nips/nip-04.d.ts +37 -0
- package/dist/cjs/nips/nip-04.d.ts.map +1 -0
- package/dist/cjs/nips/nip-04.js +104 -0
- package/dist/cjs/nips/nip-04.js.map +1 -0
- package/dist/cjs/nips/nip-05.d.ts +88 -0
- package/dist/cjs/nips/nip-05.d.ts.map +1 -0
- package/dist/cjs/nips/nip-05.js +158 -0
- package/dist/cjs/nips/nip-05.js.map +1 -0
- package/dist/cjs/nips/nip-09.d.ts +93 -0
- package/dist/cjs/nips/nip-09.d.ts.map +1 -0
- package/dist/cjs/nips/nip-09.js +180 -0
- package/dist/cjs/nips/nip-09.js.map +1 -0
- package/dist/cjs/nips/nip-11.d.ts +65 -0
- package/dist/cjs/nips/nip-11.d.ts.map +1 -0
- package/dist/cjs/nips/nip-11.js +161 -0
- package/dist/cjs/nips/nip-11.js.map +1 -0
- package/dist/cjs/nips/nip-13.d.ts +74 -0
- package/dist/cjs/nips/nip-13.d.ts.map +1 -0
- package/dist/cjs/nips/nip-13.js +136 -0
- package/dist/cjs/nips/nip-13.js.map +1 -0
- package/dist/cjs/nips/nip-15.d.ts +84 -0
- package/dist/cjs/nips/nip-15.d.ts.map +1 -0
- package/dist/cjs/nips/nip-15.js +102 -0
- package/dist/cjs/nips/nip-15.js.map +1 -0
- package/dist/cjs/nips/nip-16.d.ts +89 -0
- package/dist/cjs/nips/nip-16.d.ts.map +1 -0
- package/dist/cjs/nips/nip-16.js +157 -0
- package/dist/cjs/nips/nip-16.js.map +1 -0
- package/dist/cjs/nips/nip-19.d.ts +29 -0
- package/dist/cjs/nips/nip-19.d.ts.map +1 -0
- package/dist/cjs/nips/nip-19.js +112 -0
- package/dist/cjs/nips/nip-19.js.map +1 -0
- package/dist/cjs/nips/nip-20.d.ts +60 -0
- package/dist/cjs/nips/nip-20.d.ts.map +1 -0
- package/dist/cjs/nips/nip-20.js +102 -0
- package/dist/cjs/nips/nip-20.js.map +1 -0
- package/dist/cjs/nips/nip-22.d.ts +90 -0
- package/dist/cjs/nips/nip-22.d.ts.map +1 -0
- package/dist/cjs/nips/nip-22.js +149 -0
- package/dist/cjs/nips/nip-22.js.map +1 -0
- package/dist/cjs/nips/nip-26.d.ts +53 -0
- package/dist/cjs/nips/nip-26.d.ts.map +1 -0
- package/dist/cjs/nips/nip-26.js +147 -0
- package/dist/cjs/nips/nip-26.js.map +1 -0
- package/dist/cjs/nips/nip-28.d.ts +104 -0
- package/dist/cjs/nips/nip-28.d.ts.map +1 -0
- package/dist/cjs/nips/nip-28.js +164 -0
- package/dist/cjs/nips/nip-28.js.map +1 -0
- package/dist/cjs/nips/nip-33.d.ts +95 -0
- package/dist/cjs/nips/nip-33.d.ts.map +1 -0
- package/dist/cjs/nips/nip-33.js +135 -0
- package/dist/cjs/nips/nip-33.js.map +1 -0
- package/dist/cjs/transport/base.d.ts +54 -0
- package/dist/cjs/transport/base.d.ts.map +1 -0
- package/dist/cjs/transport/base.js +109 -0
- package/dist/cjs/transport/base.js.map +1 -0
- package/dist/cjs/transport/websocket.d.ts +24 -0
- package/dist/cjs/transport/websocket.d.ts.map +1 -0
- package/dist/cjs/transport/websocket.js +136 -0
- package/dist/cjs/transport/websocket.js.map +1 -0
- package/dist/cjs/types/events.d.ts +74 -0
- package/dist/cjs/types/events.d.ts.map +1 -0
- package/dist/cjs/types/events.js +7 -0
- package/dist/cjs/types/events.js.map +1 -0
- package/dist/cjs/types/filters.d.ts +20 -0
- package/dist/cjs/types/filters.d.ts.map +1 -0
- package/dist/cjs/types/filters.js +7 -0
- package/dist/cjs/types/filters.js.map +1 -0
- package/dist/cjs/types/handlers.d.ts +81 -0
- package/dist/cjs/types/handlers.d.ts.map +1 -0
- package/dist/cjs/types/handlers.js +7 -0
- package/dist/cjs/types/handlers.js.map +1 -0
- package/dist/cjs/types/index.d.ts +144 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +37 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/logger.d.ts +41 -0
- package/dist/cjs/types/logger.d.ts.map +1 -0
- package/dist/cjs/types/logger.js +7 -0
- package/dist/cjs/types/logger.js.map +1 -0
- package/dist/cjs/types/messages.d.ts +133 -0
- package/dist/cjs/types/messages.d.ts.map +1 -0
- package/dist/cjs/types/messages.js +46 -0
- package/dist/cjs/types/messages.js.map +1 -0
- package/dist/cjs/types/nostr.d.ts +134 -0
- package/dist/cjs/types/nostr.d.ts.map +1 -0
- package/dist/cjs/types/nostr.js +7 -0
- package/dist/cjs/types/nostr.js.map +1 -0
- package/dist/cjs/types/options.d.ts +155 -0
- package/dist/cjs/types/options.d.ts.map +1 -0
- package/dist/cjs/types/options.js +7 -0
- package/dist/cjs/types/options.js.map +1 -0
- package/dist/cjs/types/priority.d.ts +13 -0
- package/dist/cjs/types/priority.d.ts.map +1 -0
- package/dist/cjs/types/priority.js +17 -0
- package/dist/cjs/types/priority.js.map +1 -0
- package/dist/cjs/types/relays.d.ts +27 -0
- package/dist/cjs/types/relays.d.ts.map +1 -0
- package/dist/cjs/types/relays.js +7 -0
- package/dist/cjs/types/relays.js.map +1 -0
- package/dist/cjs/types/scoring.d.ts +59 -0
- package/dist/cjs/types/scoring.d.ts.map +1 -0
- package/dist/cjs/types/scoring.js +34 -0
- package/dist/cjs/types/scoring.js.map +1 -0
- package/dist/cjs/types/socket.d.ts +98 -0
- package/dist/cjs/types/socket.d.ts.map +1 -0
- package/dist/cjs/types/socket.js +7 -0
- package/dist/cjs/types/socket.js.map +1 -0
- package/dist/cjs/types/transport.d.ts +98 -0
- package/dist/cjs/types/transport.d.ts.map +1 -0
- package/dist/cjs/types/transport.js +7 -0
- package/dist/cjs/types/transport.js.map +1 -0
- package/dist/cjs/types/validation.d.ts +51 -0
- package/dist/cjs/types/validation.d.ts.map +1 -0
- package/dist/cjs/types/validation.js +7 -0
- package/dist/cjs/types/validation.js.map +1 -0
- package/dist/cjs/types/websocket.d.ts +250 -0
- package/dist/cjs/types/websocket.d.ts.map +1 -0
- package/dist/cjs/types/websocket.js +7 -0
- package/dist/cjs/types/websocket.js.map +1 -0
- package/dist/cjs/utils/http.d.ts +11 -0
- package/dist/cjs/utils/http.d.ts.map +1 -0
- package/dist/cjs/utils/http.js +28 -0
- package/dist/cjs/utils/http.js.map +1 -0
- package/dist/cjs/utils/logger.d.ts +26 -0
- package/dist/cjs/utils/logger.d.ts.map +1 -0
- package/dist/cjs/utils/logger.js +43 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/cjs/utils/metrics.d.ts +81 -0
- package/dist/cjs/utils/metrics.d.ts.map +1 -0
- package/dist/cjs/utils/metrics.js +211 -0
- package/dist/cjs/utils/metrics.js.map +1 -0
- package/dist/cjs/utils/rate-limiter.d.ts +86 -0
- package/dist/cjs/utils/rate-limiter.d.ts.map +1 -0
- package/dist/cjs/utils/rate-limiter.js +183 -0
- package/dist/cjs/utils/rate-limiter.js.map +1 -0
- package/dist/core/client.d.ts +1 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +1 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/nostr-server.d.ts +1 -0
- package/dist/core/nostr-server.d.ts.map +1 -0
- package/dist/core/nostr-server.js +1 -0
- package/dist/core/nostr-server.js.map +1 -0
- package/dist/core/queue.d.ts +1 -0
- package/dist/core/queue.d.ts.map +1 -0
- package/dist/core/queue.js +1 -0
- package/dist/core/queue.js.map +1 -0
- package/dist/core/server.d.ts +1 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +1 -0
- package/dist/core/server.js.map +1 -0
- package/dist/crypto/bech32.d.ts +1 -0
- package/dist/crypto/bech32.d.ts.map +1 -0
- package/dist/crypto/bech32.js +1 -0
- package/dist/crypto/bech32.js.map +1 -0
- package/dist/crypto/handlers.d.ts +1 -0
- package/dist/crypto/handlers.d.ts.map +1 -0
- package/dist/crypto/handlers.js +1 -0
- package/dist/crypto/handlers.js.map +1 -0
- package/dist/crypto/index.d.ts +3 -1
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +3 -1
- package/dist/crypto/index.js.map +1 -0
- package/dist/endpoints/metrics.d.ts +1 -0
- package/dist/endpoints/metrics.d.ts.map +1 -0
- package/dist/endpoints/metrics.js +1 -0
- package/dist/endpoints/metrics.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/nips/index.d.ts +1 -0
- package/dist/nips/index.d.ts.map +1 -0
- package/dist/nips/index.js +1 -0
- package/dist/nips/index.js.map +1 -0
- package/dist/nips/nip-01.d.ts +1 -0
- package/dist/nips/nip-01.d.ts.map +1 -0
- package/dist/nips/nip-01.js +1 -0
- package/dist/nips/nip-01.js.map +1 -0
- package/dist/nips/nip-02.d.ts +1 -0
- package/dist/nips/nip-02.d.ts.map +1 -0
- package/dist/nips/nip-02.js +1 -0
- package/dist/nips/nip-02.js.map +1 -0
- package/dist/nips/nip-04.d.ts +1 -0
- package/dist/nips/nip-04.d.ts.map +1 -0
- package/dist/nips/nip-04.js +1 -0
- package/dist/nips/nip-04.js.map +1 -0
- package/dist/nips/nip-05.d.ts +1 -0
- package/dist/nips/nip-05.d.ts.map +1 -0
- package/dist/nips/nip-05.js +1 -0
- package/dist/nips/nip-05.js.map +1 -0
- package/dist/nips/nip-09.d.ts +1 -0
- package/dist/nips/nip-09.d.ts.map +1 -0
- package/dist/nips/nip-09.js +1 -0
- package/dist/nips/nip-09.js.map +1 -0
- package/dist/nips/nip-11.d.ts +1 -0
- package/dist/nips/nip-11.d.ts.map +1 -0
- package/dist/nips/nip-11.js +1 -0
- package/dist/nips/nip-11.js.map +1 -0
- package/dist/nips/nip-13.d.ts +1 -0
- package/dist/nips/nip-13.d.ts.map +1 -0
- package/dist/nips/nip-13.js +1 -0
- package/dist/nips/nip-13.js.map +1 -0
- package/dist/nips/nip-15.d.ts +1 -0
- package/dist/nips/nip-15.d.ts.map +1 -0
- package/dist/nips/nip-15.js +1 -0
- package/dist/nips/nip-15.js.map +1 -0
- package/dist/nips/nip-16.d.ts +1 -0
- package/dist/nips/nip-16.d.ts.map +1 -0
- package/dist/nips/nip-16.js +1 -0
- package/dist/nips/nip-16.js.map +1 -0
- package/dist/nips/nip-19.d.ts +1 -0
- package/dist/nips/nip-19.d.ts.map +1 -0
- package/dist/nips/nip-19.js +1 -0
- package/dist/nips/nip-19.js.map +1 -0
- package/dist/nips/nip-20.d.ts +1 -0
- package/dist/nips/nip-20.d.ts.map +1 -0
- package/dist/nips/nip-20.js +1 -0
- package/dist/nips/nip-20.js.map +1 -0
- package/dist/nips/nip-22.d.ts +1 -0
- package/dist/nips/nip-22.d.ts.map +1 -0
- package/dist/nips/nip-22.js +1 -0
- package/dist/nips/nip-22.js.map +1 -0
- package/dist/nips/nip-26.d.ts +1 -0
- package/dist/nips/nip-26.d.ts.map +1 -0
- package/dist/nips/nip-26.js +1 -0
- package/dist/nips/nip-26.js.map +1 -0
- package/dist/nips/nip-28.d.ts +1 -0
- package/dist/nips/nip-28.d.ts.map +1 -0
- package/dist/nips/nip-28.js +1 -0
- package/dist/nips/nip-28.js.map +1 -0
- package/dist/nips/nip-33.d.ts +1 -0
- package/dist/nips/nip-33.d.ts.map +1 -0
- package/dist/nips/nip-33.js +1 -0
- package/dist/nips/nip-33.js.map +1 -0
- package/dist/transport/base.d.ts +1 -1
- package/dist/transport/base.d.ts.map +1 -0
- package/dist/transport/base.js +1 -0
- package/dist/transport/base.js.map +1 -0
- package/dist/transport/websocket.d.ts +1 -0
- package/dist/transport/websocket.d.ts.map +1 -0
- package/dist/transport/websocket.js +1 -0
- package/dist/transport/websocket.js.map +1 -0
- package/dist/types/events.d.ts +1 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +1 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/filters.d.ts +1 -0
- package/dist/types/filters.d.ts.map +1 -0
- package/dist/types/filters.js +1 -0
- package/dist/types/filters.js.map +1 -0
- package/dist/types/handlers.d.ts +1 -0
- package/dist/types/handlers.d.ts.map +1 -0
- package/dist/types/handlers.js +1 -0
- package/dist/types/handlers.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logger.d.ts +1 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logger.js +1 -0
- package/dist/types/logger.js.map +1 -0
- package/dist/types/messages.d.ts +1 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +1 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/nostr.d.ts +1 -0
- package/dist/types/nostr.d.ts.map +1 -0
- package/dist/types/nostr.js +1 -0
- package/dist/types/nostr.js.map +1 -0
- package/dist/types/options.d.ts +1 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +1 -0
- package/dist/types/options.js.map +1 -0
- package/dist/types/priority.d.ts +1 -0
- package/dist/types/priority.d.ts.map +1 -0
- package/dist/types/priority.js +1 -0
- package/dist/types/priority.js.map +1 -0
- package/dist/types/relays.d.ts +1 -0
- package/dist/types/relays.d.ts.map +1 -0
- package/dist/types/relays.js +1 -0
- package/dist/types/relays.js.map +1 -0
- package/dist/types/scoring.d.ts +1 -2
- package/dist/types/scoring.d.ts.map +1 -0
- package/dist/types/scoring.js +1 -0
- package/dist/types/scoring.js.map +1 -0
- package/dist/types/socket.d.ts +1 -2
- package/dist/types/socket.d.ts.map +1 -0
- package/dist/types/socket.js +1 -0
- package/dist/types/socket.js.map +1 -0
- package/dist/types/transport.d.ts +1 -0
- package/dist/types/transport.d.ts.map +1 -0
- package/dist/types/transport.js +1 -0
- package/dist/types/transport.js.map +1 -0
- package/dist/types/validation.d.ts +1 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +1 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/types/websocket.d.ts +1 -0
- package/dist/types/websocket.d.ts.map +1 -0
- package/dist/types/websocket.js +1 -0
- package/dist/types/websocket.js.map +1 -0
- package/dist/utils/http.d.ts +1 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +1 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/metrics.d.ts +1 -1
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +1 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +1 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +1 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/package.json +14 -2
- package/dist/__mocks__/logger.d.ts +0 -9
- package/dist/__mocks__/logger.js +0 -6
- package/dist/client.d.ts +0 -129
- package/dist/client.js +0 -259
- package/dist/crypto/schnorr.d.ts +0 -16
- package/dist/crypto/schnorr.js +0 -51
- package/dist/nostr-server.js +0 -107
- package/dist/server.d.ts +0 -27
- package/dist/server.js +0 -132
package/dist/client.d.ts
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { EventEmitter } from 'events';
|
|
3
|
-
import type { NostrWSOptions, NostrWSMessage } from './types/index.js';
|
|
4
|
-
/**
|
|
5
|
-
* WebSocket client implementation for Nostr protocol communication
|
|
6
|
-
* Extends EventEmitter to provide event-based message handling
|
|
7
|
-
*
|
|
8
|
-
* @extends EventEmitter
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const client = new NostrWSClient('wss://relay.example.com', {
|
|
12
|
-
* logger: console,
|
|
13
|
-
* heartbeatInterval: 30000,
|
|
14
|
-
* handlers: {
|
|
15
|
-
* message: async (msg) => console.log('Received:', msg),
|
|
16
|
-
* error: (err) => console.error('Error:', err),
|
|
17
|
-
* close: () => console.log('Connection closed')
|
|
18
|
-
* }
|
|
19
|
-
* });
|
|
20
|
-
*
|
|
21
|
-
* await client.connect();
|
|
22
|
-
* client.send({ type: 'EVENT', data: { ... } });
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare class NostrWSClient extends EventEmitter {
|
|
26
|
-
private url;
|
|
27
|
-
private ws;
|
|
28
|
-
private options;
|
|
29
|
-
private reconnectTimeout;
|
|
30
|
-
private heartbeatInterval;
|
|
31
|
-
private reconnectAttempts;
|
|
32
|
-
private messageQueue;
|
|
33
|
-
private clientId;
|
|
34
|
-
/**
|
|
35
|
-
* Creates a new NostrWSClient instance
|
|
36
|
-
*
|
|
37
|
-
* @param {string} url - The WebSocket server URL to connect to
|
|
38
|
-
* @param {Partial<NostrWSOptions>} options - Configuration options
|
|
39
|
-
* @param {number} [options.heartbeatInterval=30000] - Interval for sending heartbeat messages in milliseconds
|
|
40
|
-
* @param {object} options.logger - Logger instance (required)
|
|
41
|
-
* @param {Function} [options.WebSocketImpl=WebSocket] - WebSocket implementation to use
|
|
42
|
-
* @param {object} [options.handlers] - Event handlers
|
|
43
|
-
* @param {Function} [options.handlers.message] - Message handler function
|
|
44
|
-
* @param {Function} [options.handlers.error] - Error handler function
|
|
45
|
-
* @param {Function} [options.handlers.close] - Connection close handler function
|
|
46
|
-
* @throws {Error} If logger is not provided
|
|
47
|
-
*/
|
|
48
|
-
constructor(url: string, options?: Partial<NostrWSOptions>);
|
|
49
|
-
/**
|
|
50
|
-
* Establishes a connection to the WebSocket server
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```typescript
|
|
54
|
-
* client.connect();
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
connect(): void;
|
|
58
|
-
/**
|
|
59
|
-
* Sets up event handlers for the WebSocket connection
|
|
60
|
-
*
|
|
61
|
-
* @private
|
|
62
|
-
*/
|
|
63
|
-
private setupEventHandlers;
|
|
64
|
-
/**
|
|
65
|
-
* Starts sending heartbeat messages at the specified interval
|
|
66
|
-
*
|
|
67
|
-
* @private
|
|
68
|
-
*/
|
|
69
|
-
private startHeartbeat;
|
|
70
|
-
/**
|
|
71
|
-
* Stops sending heartbeat messages
|
|
72
|
-
*
|
|
73
|
-
* @private
|
|
74
|
-
*/
|
|
75
|
-
private stopHeartbeat;
|
|
76
|
-
/**
|
|
77
|
-
* Handles reconnecting to the WebSocket server after a disconnection
|
|
78
|
-
*
|
|
79
|
-
* @private
|
|
80
|
-
*/
|
|
81
|
-
private handleReconnect;
|
|
82
|
-
/**
|
|
83
|
-
* Subscribes to a channel with optional filter
|
|
84
|
-
*
|
|
85
|
-
* @param {string} channel - Channel name
|
|
86
|
-
* @param {unknown} [filter] - Filter data
|
|
87
|
-
* @example
|
|
88
|
-
* ```typescript
|
|
89
|
-
* client.subscribe('channel-name', { ...filterData });
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
subscribe(channel: string, filter?: unknown): void;
|
|
93
|
-
/**
|
|
94
|
-
* Unsubscribes from a channel
|
|
95
|
-
*
|
|
96
|
-
* @param {string} channel - Channel name
|
|
97
|
-
* @example
|
|
98
|
-
* ```typescript
|
|
99
|
-
* client.unsubscribe('channel-name');
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
unsubscribe(channel: string): void;
|
|
103
|
-
/**
|
|
104
|
-
* Flushes the message queue by sending pending messages
|
|
105
|
-
*
|
|
106
|
-
* @private
|
|
107
|
-
*/
|
|
108
|
-
private flushMessageQueue;
|
|
109
|
-
/**
|
|
110
|
-
* Sends a message to the WebSocket server
|
|
111
|
-
*
|
|
112
|
-
* @param {NostrWSMessage} message - Message to send
|
|
113
|
-
* @returns {Promise<void>}
|
|
114
|
-
* @example
|
|
115
|
-
* ```typescript
|
|
116
|
-
* client.send({ type: 'EVENT', data: { ... } });
|
|
117
|
-
* ```
|
|
118
|
-
*/
|
|
119
|
-
send(message: NostrWSMessage): Promise<void>;
|
|
120
|
-
/**
|
|
121
|
-
* Closes the WebSocket connection
|
|
122
|
-
*
|
|
123
|
-
* @example
|
|
124
|
-
* ```typescript
|
|
125
|
-
* client.close();
|
|
126
|
-
* ```
|
|
127
|
-
*/
|
|
128
|
-
close(): void;
|
|
129
|
-
}
|
package/dist/client.js
DELETED
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
-
import WebSocket from 'ws';
|
|
3
|
-
import { EventEmitter } from 'events';
|
|
4
|
-
/**
|
|
5
|
-
* WebSocket client implementation for Nostr protocol communication
|
|
6
|
-
* Extends EventEmitter to provide event-based message handling
|
|
7
|
-
*
|
|
8
|
-
* @extends EventEmitter
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const client = new NostrWSClient('wss://relay.example.com', {
|
|
12
|
-
* logger: console,
|
|
13
|
-
* heartbeatInterval: 30000,
|
|
14
|
-
* handlers: {
|
|
15
|
-
* message: async (msg) => console.log('Received:', msg),
|
|
16
|
-
* error: (err) => console.error('Error:', err),
|
|
17
|
-
* close: () => console.log('Connection closed')
|
|
18
|
-
* }
|
|
19
|
-
* });
|
|
20
|
-
*
|
|
21
|
-
* await client.connect();
|
|
22
|
-
* client.send({ type: 'EVENT', data: { ... } });
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export class NostrWSClient extends EventEmitter {
|
|
26
|
-
/**
|
|
27
|
-
* Creates a new NostrWSClient instance
|
|
28
|
-
*
|
|
29
|
-
* @param {string} url - The WebSocket server URL to connect to
|
|
30
|
-
* @param {Partial<NostrWSOptions>} options - Configuration options
|
|
31
|
-
* @param {number} [options.heartbeatInterval=30000] - Interval for sending heartbeat messages in milliseconds
|
|
32
|
-
* @param {object} options.logger - Logger instance (required)
|
|
33
|
-
* @param {Function} [options.WebSocketImpl=WebSocket] - WebSocket implementation to use
|
|
34
|
-
* @param {object} [options.handlers] - Event handlers
|
|
35
|
-
* @param {Function} [options.handlers.message] - Message handler function
|
|
36
|
-
* @param {Function} [options.handlers.error] - Error handler function
|
|
37
|
-
* @param {Function} [options.handlers.close] - Connection close handler function
|
|
38
|
-
* @throws {Error} If logger is not provided
|
|
39
|
-
*/
|
|
40
|
-
constructor(url, options = {}) {
|
|
41
|
-
super();
|
|
42
|
-
this.url = url;
|
|
43
|
-
this.ws = null;
|
|
44
|
-
this.reconnectTimeout = null;
|
|
45
|
-
this.heartbeatInterval = null;
|
|
46
|
-
this.reconnectAttempts = 0;
|
|
47
|
-
this.messageQueue = [];
|
|
48
|
-
if (!options.logger) {
|
|
49
|
-
throw new Error('Logger is required');
|
|
50
|
-
}
|
|
51
|
-
this.clientId = uuidv4();
|
|
52
|
-
this.options = {
|
|
53
|
-
heartbeatInterval: options.heartbeatInterval || 30000,
|
|
54
|
-
logger: options.logger,
|
|
55
|
-
WebSocketImpl: options.WebSocketImpl || WebSocket,
|
|
56
|
-
handlers: {
|
|
57
|
-
message: options.handlers?.message || (async () => { }),
|
|
58
|
-
error: options.handlers?.error || (() => { }),
|
|
59
|
-
close: options.handlers?.close || (() => { })
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Establishes a connection to the WebSocket server
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* ```typescript
|
|
68
|
-
* client.connect();
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
|
-
connect() {
|
|
72
|
-
if (this.ws) {
|
|
73
|
-
this.options.logger.info('WebSocket connection already exists');
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
try {
|
|
77
|
-
this.options.logger.debug('Creating new WebSocket connection');
|
|
78
|
-
this.ws = new this.options.WebSocketImpl(this.url);
|
|
79
|
-
this.options.logger.debug('WebSocket created successfully');
|
|
80
|
-
this.setupEventHandlers();
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
this.options.logger.error('Failed to create WebSocket connection:', error);
|
|
84
|
-
this.handleReconnect();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Sets up event handlers for the WebSocket connection
|
|
89
|
-
*
|
|
90
|
-
* @private
|
|
91
|
-
*/
|
|
92
|
-
setupEventHandlers() {
|
|
93
|
-
if (!this.ws)
|
|
94
|
-
return;
|
|
95
|
-
this.ws.on('open', () => {
|
|
96
|
-
this.options.logger.info('WebSocket connection established');
|
|
97
|
-
this.reconnectAttempts = 0;
|
|
98
|
-
this.startHeartbeat();
|
|
99
|
-
this.emit('connect');
|
|
100
|
-
this.flushMessageQueue();
|
|
101
|
-
});
|
|
102
|
-
this.ws.on('message', async (data) => {
|
|
103
|
-
try {
|
|
104
|
-
const message = JSON.parse(data.toString());
|
|
105
|
-
this.emit('message', message);
|
|
106
|
-
await this.options.handlers.message(this.ws, message);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
this.emit('error', error);
|
|
110
|
-
if (this.options.handlers.error) {
|
|
111
|
-
this.options.handlers.error(this.ws, error);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
this.ws.on('close', () => {
|
|
116
|
-
this.options.logger.info('WebSocket connection closed');
|
|
117
|
-
this.stopHeartbeat();
|
|
118
|
-
this.handleReconnect();
|
|
119
|
-
this.emit('disconnect');
|
|
120
|
-
if (this.options.handlers.close) {
|
|
121
|
-
this.options.handlers.close(this.ws);
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
this.ws.on('error', (error) => {
|
|
125
|
-
this.options.logger.error('WebSocket error:', error);
|
|
126
|
-
this.emit('error', error);
|
|
127
|
-
if (this.options.handlers.error) {
|
|
128
|
-
this.options.handlers.error(this.ws, error);
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Starts sending heartbeat messages at the specified interval
|
|
134
|
-
*
|
|
135
|
-
* @private
|
|
136
|
-
*/
|
|
137
|
-
startHeartbeat() {
|
|
138
|
-
if (this.heartbeatInterval)
|
|
139
|
-
return;
|
|
140
|
-
this.heartbeatInterval = setInterval(() => {
|
|
141
|
-
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
142
|
-
this.ws.ping();
|
|
143
|
-
}
|
|
144
|
-
}, this.options.heartbeatInterval || 30000);
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Stops sending heartbeat messages
|
|
148
|
-
*
|
|
149
|
-
* @private
|
|
150
|
-
*/
|
|
151
|
-
stopHeartbeat() {
|
|
152
|
-
if (this.heartbeatInterval) {
|
|
153
|
-
clearInterval(this.heartbeatInterval);
|
|
154
|
-
this.heartbeatInterval = null;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Handles reconnecting to the WebSocket server after a disconnection
|
|
159
|
-
*
|
|
160
|
-
* @private
|
|
161
|
-
*/
|
|
162
|
-
handleReconnect() {
|
|
163
|
-
if (this.reconnectTimeout)
|
|
164
|
-
return;
|
|
165
|
-
this.reconnectAttempts++;
|
|
166
|
-
this.reconnectTimeout = setTimeout(() => {
|
|
167
|
-
this.reconnectTimeout = null;
|
|
168
|
-
this.connect();
|
|
169
|
-
this.emit('reconnect');
|
|
170
|
-
}, 5000);
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Subscribes to a channel with optional filter
|
|
174
|
-
*
|
|
175
|
-
* @param {string} channel - Channel name
|
|
176
|
-
* @param {unknown} [filter] - Filter data
|
|
177
|
-
* @example
|
|
178
|
-
* ```typescript
|
|
179
|
-
* client.subscribe('channel-name', { ...filterData });
|
|
180
|
-
* ```
|
|
181
|
-
*/
|
|
182
|
-
subscribe(channel, filter) {
|
|
183
|
-
this.send({
|
|
184
|
-
type: 'subscribe',
|
|
185
|
-
data: { channel, filter }
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Unsubscribes from a channel
|
|
190
|
-
*
|
|
191
|
-
* @param {string} channel - Channel name
|
|
192
|
-
* @example
|
|
193
|
-
* ```typescript
|
|
194
|
-
* client.unsubscribe('channel-name');
|
|
195
|
-
* ```
|
|
196
|
-
*/
|
|
197
|
-
unsubscribe(channel) {
|
|
198
|
-
this.send({
|
|
199
|
-
type: 'unsubscribe',
|
|
200
|
-
data: { channel }
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Flushes the message queue by sending pending messages
|
|
205
|
-
*
|
|
206
|
-
* @private
|
|
207
|
-
*/
|
|
208
|
-
flushMessageQueue() {
|
|
209
|
-
while (this.messageQueue.length > 0 && this.ws?.readyState === WebSocket.OPEN) {
|
|
210
|
-
const message = this.messageQueue.shift();
|
|
211
|
-
if (message) {
|
|
212
|
-
this.send(message);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Sends a message to the WebSocket server
|
|
218
|
-
*
|
|
219
|
-
* @param {NostrWSMessage} message - Message to send
|
|
220
|
-
* @returns {Promise<void>}
|
|
221
|
-
* @example
|
|
222
|
-
* ```typescript
|
|
223
|
-
* client.send({ type: 'EVENT', data: { ... } });
|
|
224
|
-
* ```
|
|
225
|
-
*/
|
|
226
|
-
async send(message) {
|
|
227
|
-
message.id = message.id || uuidv4();
|
|
228
|
-
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
229
|
-
this.messageQueue.push(message);
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
try {
|
|
233
|
-
this.ws.send(JSON.stringify(message));
|
|
234
|
-
}
|
|
235
|
-
catch (error) {
|
|
236
|
-
this.options.logger.error('Failed to send message:', error);
|
|
237
|
-
this.handleReconnect();
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Closes the WebSocket connection
|
|
242
|
-
*
|
|
243
|
-
* @example
|
|
244
|
-
* ```typescript
|
|
245
|
-
* client.close();
|
|
246
|
-
* ```
|
|
247
|
-
*/
|
|
248
|
-
close() {
|
|
249
|
-
this.stopHeartbeat();
|
|
250
|
-
if (this.reconnectTimeout) {
|
|
251
|
-
clearTimeout(this.reconnectTimeout);
|
|
252
|
-
this.reconnectTimeout = null;
|
|
253
|
-
}
|
|
254
|
-
if (this.ws) {
|
|
255
|
-
this.ws.close();
|
|
256
|
-
this.ws = null;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
package/dist/crypto/schnorr.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Schnorr signature implementation for Nostr
|
|
3
|
-
* @module crypto/schnorr
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Sign a message using Schnorr signature
|
|
7
|
-
*/
|
|
8
|
-
export declare function schnorrSign(message: string, privateKey: Uint8Array): Promise<string>;
|
|
9
|
-
/**
|
|
10
|
-
* Verify a Schnorr signature
|
|
11
|
-
*/
|
|
12
|
-
export declare function schnorrVerify(signature: string, message: string, publicKey: string): Promise<boolean>;
|
|
13
|
-
/**
|
|
14
|
-
* Get public key from private key
|
|
15
|
-
*/
|
|
16
|
-
export declare function getPublicKey(privateKey: string): string;
|
package/dist/crypto/schnorr.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Schnorr signature implementation for Nostr
|
|
3
|
-
* @module crypto/schnorr
|
|
4
|
-
*/
|
|
5
|
-
import { utils } from '@noble/secp256k1';
|
|
6
|
-
import * as secp from '@noble/secp256k1';
|
|
7
|
-
/**
|
|
8
|
-
* Sign a message using Schnorr signature
|
|
9
|
-
*/
|
|
10
|
-
export async function schnorrSign(message, privateKey) {
|
|
11
|
-
try {
|
|
12
|
-
// Hash the message
|
|
13
|
-
const messageHash = utils.sha256(Buffer.from(message));
|
|
14
|
-
// Sign using Schnorr
|
|
15
|
-
const signature = await secp.sign(messageHash, privateKey, { canonical: true });
|
|
16
|
-
// Convert to hex
|
|
17
|
-
return utils.bytesToHex(signature);
|
|
18
|
-
}
|
|
19
|
-
catch (error) {
|
|
20
|
-
throw new Error(`Failed to create Schnorr signature: ${error}`);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Verify a Schnorr signature
|
|
25
|
-
*/
|
|
26
|
-
export async function schnorrVerify(signature, message, publicKey) {
|
|
27
|
-
try {
|
|
28
|
-
// Convert inputs to bytes
|
|
29
|
-
const signatureBytes = utils.hexToBytes(signature);
|
|
30
|
-
const messageHash = utils.sha256(Buffer.from(message));
|
|
31
|
-
const publicKeyBytes = utils.hexToBytes(publicKey);
|
|
32
|
-
// Verify using Schnorr
|
|
33
|
-
return await secp.verify(signatureBytes, messageHash, publicKeyBytes, { canonical: true });
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
throw new Error(`Failed to verify Schnorr signature: ${error}`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Get public key from private key
|
|
41
|
-
*/
|
|
42
|
-
export function getPublicKey(privateKey) {
|
|
43
|
-
try {
|
|
44
|
-
const publicKey = secp.getPublicKey(privateKey, true);
|
|
45
|
-
return Buffer.from(publicKey).toString('hex');
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
49
|
-
throw new Error(`Failed to get public key: ${errorMessage}`);
|
|
50
|
-
}
|
|
51
|
-
}
|
package/dist/nostr-server.js
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { Server as WebSocketServer } from 'ws';
|
|
2
|
-
import { getLogger } from './utils/logger';
|
|
3
|
-
/**
|
|
4
|
-
* Represents a Nostr WebSocket server
|
|
5
|
-
*/
|
|
6
|
-
export class NostrWSServer {
|
|
7
|
-
/**
|
|
8
|
-
* Creates a new Nostr WebSocket server instance
|
|
9
|
-
*
|
|
10
|
-
* @param {NostrWSServerOptions} options - Server configuration options
|
|
11
|
-
*/
|
|
12
|
-
constructor(options) {
|
|
13
|
-
/**
|
|
14
|
-
* Logger instance for this server
|
|
15
|
-
*/
|
|
16
|
-
this.logger = getLogger('NostrWSServer');
|
|
17
|
-
this.server = new WebSocketServer({ port: options.port });
|
|
18
|
-
/**
|
|
19
|
-
* Handles incoming WebSocket connections
|
|
20
|
-
*
|
|
21
|
-
* @param {NostrWSSocket} socket - The connected WebSocket client
|
|
22
|
-
*/
|
|
23
|
-
this.server.on('connection', (socket) => {
|
|
24
|
-
socket.subscriptions = new Set();
|
|
25
|
-
socket.isAlive = true;
|
|
26
|
-
if (options.onConnection) {
|
|
27
|
-
options.onConnection(socket);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Handles incoming messages from the client
|
|
31
|
-
*
|
|
32
|
-
* @param {Buffer | ArrayBuffer | Buffer[]} data - The incoming message data
|
|
33
|
-
*/
|
|
34
|
-
const handleMessage = async (data) => {
|
|
35
|
-
try {
|
|
36
|
-
const message = JSON.parse(data.toString());
|
|
37
|
-
if (options.handlers?.message) {
|
|
38
|
-
await options.handlers.message(socket, message);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
if (options.handlers?.error) {
|
|
43
|
-
options.handlers.error(socket, error);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
socket.on('message', handleMessage);
|
|
48
|
-
/**
|
|
49
|
-
* Handles client disconnections
|
|
50
|
-
*/
|
|
51
|
-
socket.on('close', () => {
|
|
52
|
-
if (options.handlers?.close) {
|
|
53
|
-
options.handlers.close(socket);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
/**
|
|
57
|
-
* Handles WebSocket errors
|
|
58
|
-
*
|
|
59
|
-
* @param {Error} error - The error that occurred
|
|
60
|
-
*/
|
|
61
|
-
socket.on('error', (error) => {
|
|
62
|
-
if (options.handlers?.error) {
|
|
63
|
-
options.handlers.error(socket, error);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
// Setup heartbeat
|
|
67
|
-
if (options.heartbeatInterval) {
|
|
68
|
-
const interval = setInterval(() => {
|
|
69
|
-
if (!socket.isAlive) {
|
|
70
|
-
socket.terminate();
|
|
71
|
-
clearInterval(interval);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
socket.isAlive = false;
|
|
75
|
-
socket.ping();
|
|
76
|
-
}, options.heartbeatInterval);
|
|
77
|
-
/**
|
|
78
|
-
* Handles WebSocket pong responses
|
|
79
|
-
*/
|
|
80
|
-
socket.on('pong', () => {
|
|
81
|
-
socket.isAlive = true;
|
|
82
|
-
});
|
|
83
|
-
/**
|
|
84
|
-
* Handles client disconnections (again, to clear the interval)
|
|
85
|
-
*/
|
|
86
|
-
socket.on('close', () => {
|
|
87
|
-
clearInterval(interval);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Closes the WebSocket server
|
|
94
|
-
*/
|
|
95
|
-
close() {
|
|
96
|
-
this.server.close();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Creates a new Nostr WebSocket server instance
|
|
101
|
-
*
|
|
102
|
-
* @param {NostrWSServerOptions} options - Server configuration options
|
|
103
|
-
* @returns {NostrWSServer} The created server instance
|
|
104
|
-
*/
|
|
105
|
-
export function createWSServer(options) {
|
|
106
|
-
return new NostrWSServer(options);
|
|
107
|
-
}
|
package/dist/server.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { WebSocketServer } from 'ws';
|
|
3
|
-
import { EventEmitter } from 'events';
|
|
4
|
-
import type { NostrWSOptions, NostrWSMessage } from './types/index.js';
|
|
5
|
-
/**
|
|
6
|
-
* WebSocket server implementation for Nostr protocol
|
|
7
|
-
* Extends EventEmitter to provide event-based message handling
|
|
8
|
-
*/
|
|
9
|
-
export declare class NostrWSServer extends EventEmitter {
|
|
10
|
-
private wss;
|
|
11
|
-
private options;
|
|
12
|
-
private clients;
|
|
13
|
-
private heartbeatInterval;
|
|
14
|
-
constructor(wss: WebSocketServer, options?: Partial<NostrWSOptions>);
|
|
15
|
-
private setupServer;
|
|
16
|
-
private handleConnection;
|
|
17
|
-
private startHeartbeat;
|
|
18
|
-
broadcast(message: NostrWSMessage): void;
|
|
19
|
-
broadcastToChannel(channel: string, message: NostrWSMessage): void;
|
|
20
|
-
close(): void;
|
|
21
|
-
/**
|
|
22
|
-
* Check if a client with the given ID exists
|
|
23
|
-
* @param clientId - The ID of the client to check
|
|
24
|
-
* @returns boolean indicating if the client exists
|
|
25
|
-
*/
|
|
26
|
-
hasClient(clientId: string): boolean;
|
|
27
|
-
}
|