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.
- 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 +6 -0
- package/dist/cjs/crypto/index.d.ts.map +1 -0
- package/dist/cjs/crypto/index.js +22 -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 +1 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +1 -0
- 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
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-33: Parameterized Replaceable Events
|
|
3
|
+
* @module nips/nip-33
|
|
4
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/33.md
|
|
5
|
+
*/
|
|
6
|
+
import type { NostrWSMessage } from '../types/messages';
|
|
7
|
+
import type { Logger } from '../types/logger';
|
|
8
|
+
/**
|
|
9
|
+
* Parameterized replaceable event kinds (30000-39999)
|
|
10
|
+
*/
|
|
11
|
+
export declare const PARAMETERIZED_REPLACEABLE_KINDS: {
|
|
12
|
+
CATEGORIZED_BOOKMARK: number;
|
|
13
|
+
CATEGORIZED_HIGHLIGHT: number;
|
|
14
|
+
CATEGORIZED_PEOPLE_LIST: number;
|
|
15
|
+
PROFILE_BADGES: number;
|
|
16
|
+
BADGE_DEFINITION: number;
|
|
17
|
+
CUSTOM_START: number;
|
|
18
|
+
CUSTOM_END: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Creates a parameterized replaceable event
|
|
22
|
+
* @param kind - Event kind
|
|
23
|
+
* @param content - Event content
|
|
24
|
+
* @param identifier - Unique identifier for the parameter
|
|
25
|
+
* @param additionalTags - Additional tags
|
|
26
|
+
* @returns {NostrWSMessage} Parameterized replaceable event
|
|
27
|
+
*/
|
|
28
|
+
export declare function createParameterizedEvent(kind: number, content: string, identifier: string, additionalTags?: string[][]): NostrWSMessage;
|
|
29
|
+
/**
|
|
30
|
+
* Validates a parameterized replaceable event
|
|
31
|
+
* @param message - Message to validate
|
|
32
|
+
* @param _logger - Logger instance
|
|
33
|
+
* @returns {boolean} True if valid
|
|
34
|
+
*/
|
|
35
|
+
export declare function validateParameterizedEvent(message: NostrWSMessage, _logger: Logger): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Parameterized event manager interface
|
|
38
|
+
*/
|
|
39
|
+
export interface ParameterizedEventManager {
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new parameterized event
|
|
42
|
+
* @param kind - Event kind
|
|
43
|
+
* @param content - Event content
|
|
44
|
+
* @param identifier - Parameter identifier
|
|
45
|
+
* @param tags - Additional tags
|
|
46
|
+
* @returns {NostrWSMessage} Created event
|
|
47
|
+
*/
|
|
48
|
+
createEvent(kind: number, content: string, identifier: string, tags?: string[][]): NostrWSMessage;
|
|
49
|
+
/**
|
|
50
|
+
* Updates an existing parameterized event
|
|
51
|
+
* @param kind - Event kind
|
|
52
|
+
* @param identifier - Parameter identifier
|
|
53
|
+
* @param content - New content
|
|
54
|
+
* @returns {NostrWSMessage} Update event
|
|
55
|
+
*/
|
|
56
|
+
updateEvent(kind: number, identifier: string, content: string): NostrWSMessage;
|
|
57
|
+
/**
|
|
58
|
+
* Subscribes to parameterized events
|
|
59
|
+
* @param kinds - Event kinds to subscribe to
|
|
60
|
+
* @param identifiers - Parameter identifiers
|
|
61
|
+
* @returns {NostrWSMessage} Subscription message
|
|
62
|
+
*/
|
|
63
|
+
subscribe(kinds: number[], identifiers: string[]): NostrWSMessage;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Creates a parameterized event manager
|
|
67
|
+
* @param _logger - Logger instance
|
|
68
|
+
* @returns {ParameterizedEventManager} Event manager
|
|
69
|
+
*/
|
|
70
|
+
export declare function createParameterizedEventManager(_logger: Logger): ParameterizedEventManager;
|
|
71
|
+
/**
|
|
72
|
+
* Event replacement handler interface
|
|
73
|
+
*/
|
|
74
|
+
export interface EventReplacementHandler {
|
|
75
|
+
/**
|
|
76
|
+
* Checks if an event should replace another
|
|
77
|
+
* @param newEvent - New event
|
|
78
|
+
* @param existingEvent - Existing event
|
|
79
|
+
* @returns {boolean} True if should replace
|
|
80
|
+
*/
|
|
81
|
+
shouldReplace(newEvent: Record<string, unknown>, existingEvent: Record<string, unknown>): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Gets replacement key for an event
|
|
84
|
+
* @param event - Event to get key for
|
|
85
|
+
* @returns {string} Replacement key
|
|
86
|
+
*/
|
|
87
|
+
getReplacementKey(event: Record<string, unknown>): string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Creates an event replacement handler
|
|
91
|
+
* @param _logger - Logger instance
|
|
92
|
+
* @returns {EventReplacementHandler} Replacement handler
|
|
93
|
+
*/
|
|
94
|
+
export declare function createEventReplacementHandler(_logger: Logger): EventReplacementHandler;
|
|
95
|
+
//# sourceMappingURL=nip-33.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-33.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-33.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;CAQ3C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,cAAc,GAAE,MAAM,EAAE,EAAO,GAC9B,cAAc,CAShB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,GACd,OAAO,CAmCT;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;;;;OAOG;IACH,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAChB,cAAc,CAAC;IAElB;;;;;;OAMG;IACH,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,cAAc,CAAC;IAElB;;;;;OAKG;IACH,SAAS,CACP,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,EAAE,GACpB,cAAc,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,GACd,yBAAyB,CA4B3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,aAAa,CACX,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,OAAO,CAAC;IAEX;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CAC3D;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,GACd,uBAAuB,CAiCzB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NIP-33: Parameterized Replaceable Events
|
|
4
|
+
* @module nips/nip-33
|
|
5
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/33.md
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.PARAMETERIZED_REPLACEABLE_KINDS = void 0;
|
|
9
|
+
exports.createParameterizedEvent = createParameterizedEvent;
|
|
10
|
+
exports.validateParameterizedEvent = validateParameterizedEvent;
|
|
11
|
+
exports.createParameterizedEventManager = createParameterizedEventManager;
|
|
12
|
+
exports.createEventReplacementHandler = createEventReplacementHandler;
|
|
13
|
+
/**
|
|
14
|
+
* Parameterized replaceable event kinds (30000-39999)
|
|
15
|
+
*/
|
|
16
|
+
exports.PARAMETERIZED_REPLACEABLE_KINDS = {
|
|
17
|
+
CATEGORIZED_BOOKMARK: 30000,
|
|
18
|
+
CATEGORIZED_HIGHLIGHT: 30001,
|
|
19
|
+
CATEGORIZED_PEOPLE_LIST: 30002,
|
|
20
|
+
PROFILE_BADGES: 30008,
|
|
21
|
+
BADGE_DEFINITION: 30009,
|
|
22
|
+
CUSTOM_START: 31000,
|
|
23
|
+
CUSTOM_END: 39999
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Creates a parameterized replaceable event
|
|
27
|
+
* @param kind - Event kind
|
|
28
|
+
* @param content - Event content
|
|
29
|
+
* @param identifier - Unique identifier for the parameter
|
|
30
|
+
* @param additionalTags - Additional tags
|
|
31
|
+
* @returns {NostrWSMessage} Parameterized replaceable event
|
|
32
|
+
*/
|
|
33
|
+
function createParameterizedEvent(kind, content, identifier, additionalTags = []) {
|
|
34
|
+
return ['EVENT', {
|
|
35
|
+
kind,
|
|
36
|
+
content,
|
|
37
|
+
tags: [
|
|
38
|
+
['d', identifier],
|
|
39
|
+
...additionalTags
|
|
40
|
+
]
|
|
41
|
+
}];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Validates a parameterized replaceable event
|
|
45
|
+
* @param message - Message to validate
|
|
46
|
+
* @param _logger - Logger instance
|
|
47
|
+
* @returns {boolean} True if valid
|
|
48
|
+
*/
|
|
49
|
+
function validateParameterizedEvent(message, _logger) {
|
|
50
|
+
try {
|
|
51
|
+
if (!Array.isArray(message) || message[0] !== 'EVENT') {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const event = message[1];
|
|
55
|
+
const kind = event.kind;
|
|
56
|
+
// Check if kind is in valid range
|
|
57
|
+
if (kind < 30000 || kind > 39999) {
|
|
58
|
+
_logger.debug('Invalid kind for parameterized replaceable event');
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// Must have exactly one 'd' tag
|
|
62
|
+
if (!Array.isArray(event.tags)) {
|
|
63
|
+
_logger.debug('Missing tags array');
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
const dTags = event.tags.filter(tag => Array.isArray(tag) && tag[0] === 'd' && tag[1]);
|
|
67
|
+
if (dTags.length !== 1) {
|
|
68
|
+
_logger.debug('Must have exactly one d tag');
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
_logger.error('Error validating parameterized event:', error);
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Creates a parameterized event manager
|
|
80
|
+
* @param _logger - Logger instance
|
|
81
|
+
* @returns {ParameterizedEventManager} Event manager
|
|
82
|
+
*/
|
|
83
|
+
function createParameterizedEventManager(_logger) {
|
|
84
|
+
return {
|
|
85
|
+
createEvent(kind, content, identifier, tags = []) {
|
|
86
|
+
return createParameterizedEvent(kind, content, identifier, tags);
|
|
87
|
+
},
|
|
88
|
+
updateEvent(kind, identifier, content) {
|
|
89
|
+
return createParameterizedEvent(kind, content, identifier);
|
|
90
|
+
},
|
|
91
|
+
subscribe(kinds, identifiers) {
|
|
92
|
+
return ['REQ', {
|
|
93
|
+
filter: {
|
|
94
|
+
kinds,
|
|
95
|
+
'#d': identifiers
|
|
96
|
+
}
|
|
97
|
+
}];
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Creates an event replacement handler
|
|
103
|
+
* @param _logger - Logger instance
|
|
104
|
+
* @returns {EventReplacementHandler} Replacement handler
|
|
105
|
+
*/
|
|
106
|
+
function createEventReplacementHandler(_logger) {
|
|
107
|
+
return {
|
|
108
|
+
shouldReplace(newEvent, existingEvent) {
|
|
109
|
+
try {
|
|
110
|
+
// Must be same kind
|
|
111
|
+
if (newEvent.kind !== existingEvent.kind)
|
|
112
|
+
return false;
|
|
113
|
+
// Must have same 'd' tag value
|
|
114
|
+
const newTags = newEvent.tags;
|
|
115
|
+
const existingTags = existingEvent.tags;
|
|
116
|
+
const newDTag = newTags?.find(tag => tag[0] === 'd')?.[1];
|
|
117
|
+
const existingDTag = existingTags?.find(tag => tag[0] === 'd')?.[1];
|
|
118
|
+
if (newDTag !== existingDTag)
|
|
119
|
+
return false;
|
|
120
|
+
// Replace if newer
|
|
121
|
+
return newEvent.created_at > existingEvent.created_at;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
_logger.error('Error checking event replacement:', error);
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
getReplacementKey(event) {
|
|
129
|
+
const kind = event.kind;
|
|
130
|
+
const dTag = event.tags?.find(tag => tag[0] === 'd')?.[1];
|
|
131
|
+
return `${kind}:${dTag}`;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=nip-33.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-33.js","sourceRoot":"","sources":["../../../src/nips/nip-33.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Base transport layer for Nostr connections
|
|
3
|
+
* @module transport/base
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import type { MetricsProvider, ScoringStrategy, MetricValue, TransportData } from '../types/scoring';
|
|
7
|
+
export interface TransportOptions {
|
|
8
|
+
metricsProvider?: MetricsProvider;
|
|
9
|
+
scoringStrategy?: ScoringStrategy;
|
|
10
|
+
metricsEnabled?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare abstract class BaseTransport extends EventEmitter {
|
|
13
|
+
protected scoringStrategy: ScoringStrategy;
|
|
14
|
+
protected metricsProvider?: MetricsProvider;
|
|
15
|
+
protected metricsEnabled: boolean;
|
|
16
|
+
constructor(options?: TransportOptions);
|
|
17
|
+
/**
|
|
18
|
+
* Create a default metrics provider if none is supplied
|
|
19
|
+
*/
|
|
20
|
+
protected createDefaultMetricsProvider(): MetricsProvider;
|
|
21
|
+
/**
|
|
22
|
+
* Track a metric update
|
|
23
|
+
*/
|
|
24
|
+
protected trackMetric(endpoint: string, metricType: string, value: MetricValue): void;
|
|
25
|
+
/**
|
|
26
|
+
* Gets the score for an endpoint
|
|
27
|
+
* @param endpoint - Endpoint to get score for
|
|
28
|
+
* @returns {number} Score between 0 and 100
|
|
29
|
+
*/
|
|
30
|
+
getScore(endpoint: string): number;
|
|
31
|
+
/**
|
|
32
|
+
* Gets scores for all endpoints
|
|
33
|
+
* @returns {Map<string, number>} Map of endpoint scores
|
|
34
|
+
*/
|
|
35
|
+
getAllScores(): Map<string, number>;
|
|
36
|
+
/**
|
|
37
|
+
* Enable/disable metrics
|
|
38
|
+
*/
|
|
39
|
+
setMetricsEnabled(enabled: boolean): void;
|
|
40
|
+
/**
|
|
41
|
+
* Updates the scoring strategy
|
|
42
|
+
* @param strategy - New scoring strategy
|
|
43
|
+
*/
|
|
44
|
+
updateScoringStrategy(strategy: ScoringStrategy): void;
|
|
45
|
+
/**
|
|
46
|
+
* Updates the metrics provider
|
|
47
|
+
* @param provider - New metrics provider
|
|
48
|
+
*/
|
|
49
|
+
updateMetricsProvider(provider?: MetricsProvider): void;
|
|
50
|
+
abstract connect(endpoint: string): Promise<void>;
|
|
51
|
+
abstract disconnect(endpoint: string): Promise<void>;
|
|
52
|
+
abstract send(endpoint: string, data: TransportData): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/transport/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEf,WAAW,EACX,aAAa,EACd,MAAM,kBAAkB,CAAC;AAI1B,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,8BAAsB,aAAc,SAAQ,YAAY;IACtD,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAC3C,SAAS,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC5C,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;gBAEtB,OAAO,GAAE,gBAAqB;IAO1C;;OAEG;IACH,SAAS,CAAC,4BAA4B,IAAI,eAAe;IAkBzD;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW;IAoB9E;;;;OAIG;IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IASzC;;;OAGG;IACI,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAW1C;;OAEG;IACI,iBAAiB,CAAC,OAAO,EAAE,OAAO;IAIzC;;;OAGG;IACI,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI7D;;;OAGG;IACI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI;IAM9D,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACpD,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CACpE"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file Base transport layer for Nostr connections
|
|
4
|
+
* @module transport/base
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.BaseTransport = void 0;
|
|
8
|
+
const events_1 = require("events");
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
const scoring_1 = require("../types/scoring");
|
|
11
|
+
const logger = (0, logger_1.getLogger)('BaseTransport');
|
|
12
|
+
class BaseTransport extends events_1.EventEmitter {
|
|
13
|
+
constructor(options = {}) {
|
|
14
|
+
super();
|
|
15
|
+
this.scoringStrategy = options.scoringStrategy ?? new scoring_1.DefaultScoringStrategy();
|
|
16
|
+
this.metricsProvider = options.metricsProvider;
|
|
17
|
+
this.metricsEnabled = !!this.metricsProvider;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create a default metrics provider if none is supplied
|
|
21
|
+
*/
|
|
22
|
+
createDefaultMetricsProvider() {
|
|
23
|
+
return {
|
|
24
|
+
getMetrics: () => ({
|
|
25
|
+
totalConnections: 0,
|
|
26
|
+
activeConnections: 0,
|
|
27
|
+
connectionErrors: 0,
|
|
28
|
+
messagesReceived: 0,
|
|
29
|
+
messagesSent: 0,
|
|
30
|
+
bytesReceived: 0,
|
|
31
|
+
bytesSent: 0,
|
|
32
|
+
averageLatency: 0,
|
|
33
|
+
lastSeen: Date.now()
|
|
34
|
+
}),
|
|
35
|
+
getAllMetrics: () => new Map(),
|
|
36
|
+
trackMetric: () => { }
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Track a metric update
|
|
41
|
+
*/
|
|
42
|
+
trackMetric(endpoint, metricType, value) {
|
|
43
|
+
if (!this.metricsEnabled)
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
this.metricsProvider?.trackMetric(endpoint, metricType, value);
|
|
47
|
+
const event = {
|
|
48
|
+
endpoint,
|
|
49
|
+
metricType,
|
|
50
|
+
value,
|
|
51
|
+
timestamp: Date.now()
|
|
52
|
+
};
|
|
53
|
+
this.emit('metric', event);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
logger.error({ error, endpoint, metricType }, 'Error tracking metric');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Gets the score for an endpoint
|
|
61
|
+
* @param endpoint - Endpoint to get score for
|
|
62
|
+
* @returns {number} Score between 0 and 100
|
|
63
|
+
*/
|
|
64
|
+
getScore(endpoint) {
|
|
65
|
+
if (!this.metricsEnabled)
|
|
66
|
+
return 100;
|
|
67
|
+
const metrics = this.metricsProvider?.getMetrics(endpoint);
|
|
68
|
+
if (!metrics)
|
|
69
|
+
return 100;
|
|
70
|
+
return this.scoringStrategy.calculateScore(metrics);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Gets scores for all endpoints
|
|
74
|
+
* @returns {Map<string, number>} Map of endpoint scores
|
|
75
|
+
*/
|
|
76
|
+
getAllScores() {
|
|
77
|
+
if (!this.metricsEnabled || !this.metricsProvider)
|
|
78
|
+
return new Map();
|
|
79
|
+
const scores = new Map();
|
|
80
|
+
const allMetrics = this.metricsProvider.getAllMetrics();
|
|
81
|
+
for (const [endpoint, metrics] of allMetrics) {
|
|
82
|
+
scores.set(endpoint, this.scoringStrategy.calculateScore(metrics));
|
|
83
|
+
}
|
|
84
|
+
return scores;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Enable/disable metrics
|
|
88
|
+
*/
|
|
89
|
+
setMetricsEnabled(enabled) {
|
|
90
|
+
this.metricsEnabled = enabled;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Updates the scoring strategy
|
|
94
|
+
* @param strategy - New scoring strategy
|
|
95
|
+
*/
|
|
96
|
+
updateScoringStrategy(strategy) {
|
|
97
|
+
this.scoringStrategy = strategy;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Updates the metrics provider
|
|
101
|
+
* @param provider - New metrics provider
|
|
102
|
+
*/
|
|
103
|
+
updateMetricsProvider(provider) {
|
|
104
|
+
this.metricsProvider = provider;
|
|
105
|
+
this.metricsEnabled = !!provider;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.BaseTransport = BaseTransport;
|
|
109
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/transport/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file WebSocket transport implementation
|
|
3
|
+
* @module transport/websocket
|
|
4
|
+
*/
|
|
5
|
+
import { BaseTransport } from './base';
|
|
6
|
+
import type { TransportOptions } from './base';
|
|
7
|
+
export declare class WebSocketTransport extends BaseTransport {
|
|
8
|
+
private connections;
|
|
9
|
+
constructor(options?: TransportOptions);
|
|
10
|
+
connect(endpoint: string): Promise<void>;
|
|
11
|
+
disconnect(endpoint: string): Promise<void>;
|
|
12
|
+
send(endpoint: string, data: any): Promise<void>;
|
|
13
|
+
protected trackMetric(endpoint: string, metric: string, value: unknown): void;
|
|
14
|
+
private checkEndpointHealth;
|
|
15
|
+
/**
|
|
16
|
+
* Get all active WebSocket connections
|
|
17
|
+
*/
|
|
18
|
+
getActiveConnections(): string[];
|
|
19
|
+
/**
|
|
20
|
+
* Check if connected to endpoint
|
|
21
|
+
*/
|
|
22
|
+
isConnected(endpoint: string): boolean;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/transport/websocket.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAI/C,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,OAAO,CAAC,WAAW,CAAqC;gBAE5C,OAAO,GAAE,gBAAqB;IAIpC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuDxC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtD,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;YAOxD,mBAAmB;IAsBjC;;OAEG;IACI,oBAAoB,IAAI,MAAM,EAAE;IAIvC;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAI9C"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file WebSocket transport implementation
|
|
4
|
+
* @module transport/websocket
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.WebSocketTransport = void 0;
|
|
11
|
+
const ws_1 = __importDefault(require("ws"));
|
|
12
|
+
const base_1 = require("./base");
|
|
13
|
+
const logger_1 = require("../utils/logger");
|
|
14
|
+
const logger = (0, logger_1.getLogger)('WebSocketTransport');
|
|
15
|
+
class WebSocketTransport extends base_1.BaseTransport {
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
super(options);
|
|
18
|
+
this.connections = new Map();
|
|
19
|
+
}
|
|
20
|
+
async connect(endpoint) {
|
|
21
|
+
if (this.connections.has(endpoint)) {
|
|
22
|
+
logger.warn({ endpoint }, 'Already connected to endpoint');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const ws = new ws_1.default(endpoint);
|
|
27
|
+
ws.on('open', () => {
|
|
28
|
+
this.trackMetric(endpoint, 'connection', true);
|
|
29
|
+
this.trackMetric(endpoint, 'openHandshake', Date.now());
|
|
30
|
+
});
|
|
31
|
+
ws.on('close', () => {
|
|
32
|
+
this.trackMetric(endpoint, 'connection', false);
|
|
33
|
+
this.trackMetric(endpoint, 'closeHandshake', Date.now());
|
|
34
|
+
this.connections.delete(endpoint);
|
|
35
|
+
});
|
|
36
|
+
ws.on('message', (data) => {
|
|
37
|
+
const length = data instanceof Buffer ? data.length :
|
|
38
|
+
data instanceof ArrayBuffer ? data.byteLength :
|
|
39
|
+
data instanceof Array ? data.reduce((acc, buf) => acc + buf.length, 0) : 0;
|
|
40
|
+
this.trackMetric(endpoint, 'messageReceived', length);
|
|
41
|
+
});
|
|
42
|
+
ws.on('error', (error) => {
|
|
43
|
+
this.trackMetric(endpoint, 'error', error);
|
|
44
|
+
logger.error({ error, endpoint }, 'WebSocket error');
|
|
45
|
+
});
|
|
46
|
+
// Track ping/pong for latency
|
|
47
|
+
ws.on('ping', () => {
|
|
48
|
+
this.trackMetric(endpoint, 'ping', Date.now());
|
|
49
|
+
});
|
|
50
|
+
ws.on('pong', () => {
|
|
51
|
+
if (!this.metricsEnabled || !this.metricsProvider)
|
|
52
|
+
return;
|
|
53
|
+
const now = Date.now();
|
|
54
|
+
const metrics = this.metricsProvider.getMetrics(endpoint);
|
|
55
|
+
if (!metrics || !metrics.lastSeen)
|
|
56
|
+
return;
|
|
57
|
+
this.trackMetric(endpoint, 'latency', now - metrics.lastSeen);
|
|
58
|
+
});
|
|
59
|
+
this.connections.set(endpoint, ws);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
this.trackMetric(endpoint, 'connectionError', error);
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async disconnect(endpoint) {
|
|
67
|
+
const ws = this.connections.get(endpoint);
|
|
68
|
+
if (!ws)
|
|
69
|
+
return;
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
ws.close();
|
|
72
|
+
ws.on('close', () => {
|
|
73
|
+
this.connections.delete(endpoint);
|
|
74
|
+
resolve();
|
|
75
|
+
});
|
|
76
|
+
ws.on('error', reject);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async send(endpoint, data) {
|
|
80
|
+
const ws = this.connections.get(endpoint);
|
|
81
|
+
if (!ws)
|
|
82
|
+
throw new Error(`Not connected to ${endpoint}`);
|
|
83
|
+
return new Promise((resolve, reject) => {
|
|
84
|
+
ws.send(data, (error) => {
|
|
85
|
+
if (error) {
|
|
86
|
+
this.trackMetric(endpoint, 'sendError', error);
|
|
87
|
+
reject(error);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.trackMetric(endpoint, 'messageSent', data.length);
|
|
91
|
+
resolve();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
trackMetric(endpoint, metric, value) {
|
|
97
|
+
if (this.metricsProvider && this.metricsEnabled) {
|
|
98
|
+
const metricValue = value instanceof Error ? value.message : String(value);
|
|
99
|
+
this.metricsProvider.trackMetric(endpoint, metric, metricValue);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async checkEndpointHealth(endpoint) {
|
|
103
|
+
try {
|
|
104
|
+
if (!this.metricsEnabled || !this.metricsProvider) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
const metrics = this.metricsProvider.getMetrics(endpoint);
|
|
108
|
+
if (!metrics || !metrics.lastSeen) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
const now = Date.now();
|
|
112
|
+
const elapsed = now - metrics.lastSeen;
|
|
113
|
+
// If we haven't seen a ping response in 30 seconds, consider unhealthy
|
|
114
|
+
return elapsed < 30000;
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
logger.error('Error checking endpoint health:', error);
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get all active WebSocket connections
|
|
123
|
+
*/
|
|
124
|
+
getActiveConnections() {
|
|
125
|
+
return Array.from(this.connections.keys());
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if connected to endpoint
|
|
129
|
+
*/
|
|
130
|
+
isConnected(endpoint) {
|
|
131
|
+
const ws = this.connections.get(endpoint);
|
|
132
|
+
return ws?.readyState === ws_1.default.OPEN;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.WebSocketTransport = WebSocketTransport;
|
|
136
|
+
//# sourceMappingURL=websocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/transport/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Nostr event type definitions
|
|
3
|
+
* @module types/events
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Base Nostr event interface following NIP-01 specification
|
|
7
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/01.md
|
|
8
|
+
*/
|
|
9
|
+
export interface NostrEvent {
|
|
10
|
+
/** Event ID in hex format */
|
|
11
|
+
id: string;
|
|
12
|
+
/** Public key of the event creator in hex format */
|
|
13
|
+
pubkey: string;
|
|
14
|
+
/** Unix timestamp in seconds */
|
|
15
|
+
created_at: number;
|
|
16
|
+
/** Event kind number */
|
|
17
|
+
kind: number;
|
|
18
|
+
/** Array of tags */
|
|
19
|
+
tags: string[][];
|
|
20
|
+
/** Event content */
|
|
21
|
+
content: string;
|
|
22
|
+
/** Signature of the event data in hex format */
|
|
23
|
+
sig: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Signed Nostr event with id and signature
|
|
27
|
+
* @extends NostrEvent
|
|
28
|
+
*/
|
|
29
|
+
export interface SignedNostrEvent extends NostrEvent {
|
|
30
|
+
/** Event ID in hex format */
|
|
31
|
+
id: string;
|
|
32
|
+
/** Signature of the event data in hex format */
|
|
33
|
+
sig: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Event validation result
|
|
37
|
+
*/
|
|
38
|
+
export interface NostrEventValidationResult {
|
|
39
|
+
valid: boolean;
|
|
40
|
+
error?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Event subscription filter
|
|
44
|
+
*/
|
|
45
|
+
export interface NostrEventFilter {
|
|
46
|
+
ids?: string[];
|
|
47
|
+
authors?: string[];
|
|
48
|
+
kinds?: number[];
|
|
49
|
+
since?: number;
|
|
50
|
+
until?: number;
|
|
51
|
+
limit?: number;
|
|
52
|
+
[key: string]: unknown;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Nostr subscription event interface
|
|
56
|
+
* Used for creating subscription messages to relays
|
|
57
|
+
*/
|
|
58
|
+
export interface NostrSubscriptionEvent {
|
|
59
|
+
/** Subscription ID */
|
|
60
|
+
subscriptionId: string;
|
|
61
|
+
/** Array of filters */
|
|
62
|
+
filters: NostrEventFilter[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Event handler interface for WebSocket client
|
|
66
|
+
*/
|
|
67
|
+
export interface NostrWSEventHandlers {
|
|
68
|
+
onMessage?: (message: string) => void;
|
|
69
|
+
onError?: (error: Error) => void;
|
|
70
|
+
onConnect?: () => void;
|
|
71
|
+
onDisconnect?: () => void;
|
|
72
|
+
onReconnect?: () => void;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/types/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IAEX,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IAEf,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IAEnB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,oBAAoB;IACpB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IAEjB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAEhB,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB;IACvB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B"}
|