nostr-websocket-utils 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -7
- package/dist/__mocks__/extendedWsMock.d.ts +31 -14
- package/dist/__mocks__/extendedWsMock.d.ts.map +1 -0
- package/dist/__mocks__/extendedWsMock.js +7 -6
- 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 +21 -80
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +110 -316
- 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 +22 -45
- package/dist/core/queue.d.ts.map +1 -0
- package/dist/core/queue.js +72 -79
- package/dist/core/queue.js.map +1 -0
- package/dist/core/server.d.ts +2 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +29 -13
- 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 +8 -0
- package/dist/crypto/handlers.d.ts.map +1 -0
- package/dist/crypto/handlers.js +27 -2
- 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 +4 -3
- package/dist/nips/nip-01.d.ts.map +1 -0
- package/dist/nips/nip-01.js +18 -29
- package/dist/nips/nip-01.js.map +1 -0
- package/dist/nips/nip-02.d.ts +2 -2
- package/dist/nips/nip-02.d.ts.map +1 -0
- package/dist/nips/nip-02.js +14 -25
- 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 +16 -23
- package/dist/nips/nip-04.js.map +1 -0
- package/dist/nips/nip-05.d.ts +4 -2
- 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 +2 -1
- package/dist/nips/nip-09.d.ts.map +1 -0
- package/dist/nips/nip-09.js +7 -25
- 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 +3 -2
- 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 +2 -6
- 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 +3 -2
- 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 +2 -1
- package/dist/nips/nip-20.d.ts.map +1 -0
- package/dist/nips/nip-20.js +20 -20
- 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 +4 -3
- 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 +17 -31
- 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 +7 -12
- package/dist/nips/nip-33.js.map +1 -0
- package/dist/transport/base.d.ts +4 -4
- 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 +2 -0
- package/dist/transport/websocket.d.ts.map +1 -0
- package/dist/transport/websocket.js +7 -0
- package/dist/transport/websocket.js.map +1 -0
- package/dist/types/events.d.ts +12 -1
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +2 -1
- 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 +13 -6
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -3
- 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 +68 -70
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +28 -26
- package/dist/types/messages.js.map +1 -0
- package/dist/types/nostr.d.ts +3 -2
- 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 +13 -0
- package/dist/types/priority.d.ts.map +1 -0
- package/dist/types/priority.js +14 -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 +19 -7
- package/dist/types/scoring.d.ts.map +1 -0
- package/dist/types/scoring.js +2 -1
- 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 +116 -38
- package/dist/types/websocket.d.ts.map +1 -0
- package/dist/types/websocket.js +2 -1
- 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 +17 -2
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +24 -10
- 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 +6 -4
- 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,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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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-16: Event Treatment
|
|
3
|
+
* @module nips/nip-16
|
|
4
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/16.md
|
|
5
|
+
*/
|
|
6
|
+
import type { NostrWSMessage } from '../types/messages';
|
|
7
|
+
import type { Logger } from '../types/logger';
|
|
8
|
+
/**
|
|
9
|
+
* Event treatment types
|
|
10
|
+
*/
|
|
11
|
+
export declare const EventTreatment: {
|
|
12
|
+
readonly EPHEMERAL: "ephemeral";
|
|
13
|
+
readonly REPLACEABLE: "replaceable";
|
|
14
|
+
readonly PERSISTENT: "persistent";
|
|
15
|
+
};
|
|
16
|
+
export type EventTreatmentType = typeof EventTreatment[keyof typeof EventTreatment];
|
|
17
|
+
/**
|
|
18
|
+
* Replaceable event kinds (10000-19999)
|
|
19
|
+
*/
|
|
20
|
+
export declare const REPLACEABLE_EVENT_KINDS: {
|
|
21
|
+
METADATA: number;
|
|
22
|
+
CONTACT_LIST: number;
|
|
23
|
+
CHANNEL_METADATA: number;
|
|
24
|
+
CHANNEL_MESSAGE: number;
|
|
25
|
+
USER_STATUS: number;
|
|
26
|
+
USER_PROFILE: number;
|
|
27
|
+
RELAY_LIST: number;
|
|
28
|
+
BOOKMARKS: number;
|
|
29
|
+
MUTE_LIST: number;
|
|
30
|
+
PIN_LIST: number;
|
|
31
|
+
RELAY_METADATA: number;
|
|
32
|
+
CLIENT_PREFERENCES: number;
|
|
33
|
+
CUSTOM_START: number;
|
|
34
|
+
CUSTOM_END: number;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Ephemeral event kinds (20000-29999)
|
|
38
|
+
*/
|
|
39
|
+
export declare const EPHEMERAL_EVENT_KINDS: {
|
|
40
|
+
TYPING_INDICATOR: number;
|
|
41
|
+
ONLINE_STATUS: number;
|
|
42
|
+
USER_PRESENCE: number;
|
|
43
|
+
CUSTOM_START: number;
|
|
44
|
+
CUSTOM_END: number;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Determines event treatment type
|
|
48
|
+
* @param eventKind - Event kind number
|
|
49
|
+
* @returns {EventTreatmentType} Event treatment type
|
|
50
|
+
*/
|
|
51
|
+
export declare function getEventTreatment(eventKind: number): EventTreatmentType;
|
|
52
|
+
/**
|
|
53
|
+
* Validates event treatment rules
|
|
54
|
+
* @param message - Message to validate
|
|
55
|
+
* @param logger - Logger instance
|
|
56
|
+
* @returns {boolean} True if event follows treatment rules
|
|
57
|
+
*/
|
|
58
|
+
export declare function validateEventTreatment(message: NostrWSMessage, logger: Logger): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Storage management interface for different event types
|
|
61
|
+
*/
|
|
62
|
+
export interface EventStorageManager {
|
|
63
|
+
/**
|
|
64
|
+
* Determines if an event should be stored
|
|
65
|
+
* @param event - Event to check
|
|
66
|
+
* @returns {boolean} True if event should be stored
|
|
67
|
+
*/
|
|
68
|
+
shouldStore(event: Record<string, unknown>): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Gets storage duration for an event
|
|
71
|
+
* @param event - Event to check
|
|
72
|
+
* @returns {number} Storage duration in seconds (0 for permanent)
|
|
73
|
+
*/
|
|
74
|
+
getStorageDuration(event: Record<string, unknown>): number;
|
|
75
|
+
/**
|
|
76
|
+
* Checks if an event should replace another
|
|
77
|
+
* @param newEvent - New event
|
|
78
|
+
* @param existingEvent - Existing event
|
|
79
|
+
* @returns {boolean} True if new event should replace existing
|
|
80
|
+
*/
|
|
81
|
+
shouldReplace(newEvent: Record<string, unknown>, existingEvent: Record<string, unknown>): boolean;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Creates default event storage manager
|
|
85
|
+
* @param logger - Logger instance
|
|
86
|
+
* @returns {EventStorageManager} Storage manager
|
|
87
|
+
*/
|
|
88
|
+
export declare function createEventStorageManager(logger: Logger): EventStorageManager;
|
|
89
|
+
//# sourceMappingURL=nip-16.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-16.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-16.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEpF;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;CAenC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;CAMjC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,CAQvE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAuCT;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IAErD;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAE3D;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;CACnG;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAwD7E"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NIP-16: Event Treatment
|
|
4
|
+
* @module nips/nip-16
|
|
5
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/16.md
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.EPHEMERAL_EVENT_KINDS = exports.REPLACEABLE_EVENT_KINDS = exports.EventTreatment = void 0;
|
|
9
|
+
exports.getEventTreatment = getEventTreatment;
|
|
10
|
+
exports.validateEventTreatment = validateEventTreatment;
|
|
11
|
+
exports.createEventStorageManager = createEventStorageManager;
|
|
12
|
+
/**
|
|
13
|
+
* Event treatment types
|
|
14
|
+
*/
|
|
15
|
+
exports.EventTreatment = {
|
|
16
|
+
EPHEMERAL: 'ephemeral',
|
|
17
|
+
REPLACEABLE: 'replaceable',
|
|
18
|
+
PERSISTENT: 'persistent'
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Replaceable event kinds (10000-19999)
|
|
22
|
+
*/
|
|
23
|
+
exports.REPLACEABLE_EVENT_KINDS = {
|
|
24
|
+
METADATA: 0,
|
|
25
|
+
CONTACT_LIST: 3,
|
|
26
|
+
CHANNEL_METADATA: 41,
|
|
27
|
+
CHANNEL_MESSAGE: 42,
|
|
28
|
+
USER_STATUS: 10000,
|
|
29
|
+
USER_PROFILE: 10001,
|
|
30
|
+
RELAY_LIST: 10002,
|
|
31
|
+
BOOKMARKS: 10003,
|
|
32
|
+
MUTE_LIST: 10004,
|
|
33
|
+
PIN_LIST: 10005,
|
|
34
|
+
RELAY_METADATA: 10010,
|
|
35
|
+
CLIENT_PREFERENCES: 10015,
|
|
36
|
+
CUSTOM_START: 11000,
|
|
37
|
+
CUSTOM_END: 19999
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Ephemeral event kinds (20000-29999)
|
|
41
|
+
*/
|
|
42
|
+
exports.EPHEMERAL_EVENT_KINDS = {
|
|
43
|
+
TYPING_INDICATOR: 20001,
|
|
44
|
+
ONLINE_STATUS: 20002,
|
|
45
|
+
USER_PRESENCE: 20003,
|
|
46
|
+
CUSTOM_START: 21000,
|
|
47
|
+
CUSTOM_END: 29999
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Determines event treatment type
|
|
51
|
+
* @param eventKind - Event kind number
|
|
52
|
+
* @returns {EventTreatmentType} Event treatment type
|
|
53
|
+
*/
|
|
54
|
+
function getEventTreatment(eventKind) {
|
|
55
|
+
if (eventKind >= 20000 && eventKind < 30000) {
|
|
56
|
+
return exports.EventTreatment.EPHEMERAL;
|
|
57
|
+
}
|
|
58
|
+
if (eventKind >= 10000 && eventKind < 20000 || [0, 3, 41, 42].includes(eventKind)) {
|
|
59
|
+
return exports.EventTreatment.REPLACEABLE;
|
|
60
|
+
}
|
|
61
|
+
return exports.EventTreatment.PERSISTENT;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validates event treatment rules
|
|
65
|
+
* @param message - Message to validate
|
|
66
|
+
* @param logger - Logger instance
|
|
67
|
+
* @returns {boolean} True if event follows treatment rules
|
|
68
|
+
*/
|
|
69
|
+
function validateEventTreatment(message, logger) {
|
|
70
|
+
try {
|
|
71
|
+
if (!Array.isArray(message) || message[0] !== 'EVENT') {
|
|
72
|
+
return true; // Not an event message
|
|
73
|
+
}
|
|
74
|
+
const event = message[1];
|
|
75
|
+
const kind = event.kind;
|
|
76
|
+
const treatment = getEventTreatment(kind);
|
|
77
|
+
// Validate based on treatment type
|
|
78
|
+
switch (treatment) {
|
|
79
|
+
case exports.EventTreatment.EPHEMERAL:
|
|
80
|
+
// Ephemeral events shouldn't have large content
|
|
81
|
+
if (typeof event.content === 'string' && event.content.length > 1000) {
|
|
82
|
+
logger.debug('Ephemeral event content too large');
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
break;
|
|
86
|
+
case exports.EventTreatment.REPLACEABLE:
|
|
87
|
+
// Replaceable events must have proper 'd' tag for uniqueness
|
|
88
|
+
if (Array.isArray(event.tags)) {
|
|
89
|
+
const dTags = event.tags.filter(tag => Array.isArray(tag) && tag[0] === 'd');
|
|
90
|
+
if (dTags.length > 1) {
|
|
91
|
+
logger.debug('Multiple d tags in replaceable event');
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
logger.error('Error validating event treatment:', error);
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Creates default event storage manager
|
|
106
|
+
* @param logger - Logger instance
|
|
107
|
+
* @returns {EventStorageManager} Storage manager
|
|
108
|
+
*/
|
|
109
|
+
function createEventStorageManager(logger) {
|
|
110
|
+
return {
|
|
111
|
+
shouldStore(event) {
|
|
112
|
+
const kind = event.kind;
|
|
113
|
+
const treatment = getEventTreatment(kind);
|
|
114
|
+
// Don't store ephemeral events by default
|
|
115
|
+
if (treatment === exports.EventTreatment.EPHEMERAL) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
return true;
|
|
119
|
+
},
|
|
120
|
+
getStorageDuration(event) {
|
|
121
|
+
const kind = event.kind;
|
|
122
|
+
const treatment = getEventTreatment(kind);
|
|
123
|
+
switch (treatment) {
|
|
124
|
+
case exports.EventTreatment.EPHEMERAL:
|
|
125
|
+
return 300; // 5 minutes
|
|
126
|
+
case exports.EventTreatment.REPLACEABLE:
|
|
127
|
+
return 0; // Permanent until replaced
|
|
128
|
+
default:
|
|
129
|
+
return 0; // Permanent
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
shouldReplace(newEvent, existingEvent) {
|
|
133
|
+
try {
|
|
134
|
+
const kind = newEvent.kind;
|
|
135
|
+
if (kind !== existingEvent.kind)
|
|
136
|
+
return false;
|
|
137
|
+
const treatment = getEventTreatment(kind);
|
|
138
|
+
if (treatment !== exports.EventTreatment.REPLACEABLE)
|
|
139
|
+
return false;
|
|
140
|
+
// Check 'd' tag for parameterized replaceable events
|
|
141
|
+
if (Array.isArray(newEvent.tags) && Array.isArray(existingEvent.tags)) {
|
|
142
|
+
const newDTag = newEvent.tags.find(tag => Array.isArray(tag) && tag[0] === 'd')?.[1];
|
|
143
|
+
const existingDTag = existingEvent.tags.find(tag => Array.isArray(tag) && tag[0] === 'd')?.[1];
|
|
144
|
+
if (newDTag !== existingDTag)
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
// Replace if new event is newer
|
|
148
|
+
return newEvent.created_at > existingEvent.created_at;
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
logger.error('Error checking event replacement:', error);
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=nip-16.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-16.js","sourceRoot":"","sources":["../../../src/nips/nip-16.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-19: bech32-encoded entities
|
|
3
|
+
* @module nips/nip-19
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Encode a public key to bech32 npub format
|
|
7
|
+
*/
|
|
8
|
+
export declare function encodePubkey(pubkey: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Encode a private key to bech32 nsec format
|
|
11
|
+
*/
|
|
12
|
+
export declare function encodePrivkey(privkey: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Decode a bech32 npub to hex pubkey
|
|
15
|
+
*/
|
|
16
|
+
export declare function decodePubkey(npub: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Decode a bech32 nsec to hex privkey
|
|
19
|
+
*/
|
|
20
|
+
export declare function decodePrivkey(nsec: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Process tags containing bech32-encoded entities
|
|
23
|
+
*/
|
|
24
|
+
export declare function processBech32Tags(tags: string[][]): string[][];
|
|
25
|
+
/**
|
|
26
|
+
* Encode tags containing hex pubkeys to bech32
|
|
27
|
+
*/
|
|
28
|
+
export declare function encodeBech32Tags(tags: string[][]): string[][];
|
|
29
|
+
//# sourceMappingURL=nip-19.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-19.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-19.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAa9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAa7D"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NIP-19: bech32-encoded entities
|
|
4
|
+
* @module nips/nip-19
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.encodePubkey = encodePubkey;
|
|
8
|
+
exports.encodePrivkey = encodePrivkey;
|
|
9
|
+
exports.decodePubkey = decodePubkey;
|
|
10
|
+
exports.decodePrivkey = decodePrivkey;
|
|
11
|
+
exports.processBech32Tags = processBech32Tags;
|
|
12
|
+
exports.encodeBech32Tags = encodeBech32Tags;
|
|
13
|
+
const logger_1 = require("../utils/logger");
|
|
14
|
+
const bech32_1 = require("../crypto/bech32");
|
|
15
|
+
const logger = (0, logger_1.getLogger)('NIP-19');
|
|
16
|
+
/**
|
|
17
|
+
* Encode a public key to bech32 npub format
|
|
18
|
+
*/
|
|
19
|
+
function encodePubkey(pubkey) {
|
|
20
|
+
try {
|
|
21
|
+
return (0, bech32_1.encodeToBech32)('npub', pubkey);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
25
|
+
logger.error(`Failed to encode pubkey: ${errorMessage}`);
|
|
26
|
+
throw new Error(`Failed to encode pubkey: ${errorMessage}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Encode a private key to bech32 nsec format
|
|
31
|
+
*/
|
|
32
|
+
function encodePrivkey(privkey) {
|
|
33
|
+
try {
|
|
34
|
+
return (0, bech32_1.encodeToBech32)('nsec', privkey);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
38
|
+
logger.error(`Failed to encode private key: ${errorMessage}`);
|
|
39
|
+
throw new Error(`Failed to encode private key: ${errorMessage}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Decode a bech32 npub to hex pubkey
|
|
44
|
+
*/
|
|
45
|
+
function decodePubkey(npub) {
|
|
46
|
+
try {
|
|
47
|
+
const { prefix, hex } = (0, bech32_1.decodeFromBech32)(npub);
|
|
48
|
+
if (prefix !== 'npub') {
|
|
49
|
+
throw new Error('Invalid prefix for public key');
|
|
50
|
+
}
|
|
51
|
+
return hex;
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
55
|
+
logger.error(`Failed to decode pubkey: ${errorMessage}`);
|
|
56
|
+
throw new Error(`Failed to decode pubkey: ${errorMessage}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Decode a bech32 nsec to hex privkey
|
|
61
|
+
*/
|
|
62
|
+
function decodePrivkey(nsec) {
|
|
63
|
+
try {
|
|
64
|
+
const { prefix, hex } = (0, bech32_1.decodeFromBech32)(nsec);
|
|
65
|
+
if (prefix !== 'nsec') {
|
|
66
|
+
throw new Error('Invalid prefix for private key');
|
|
67
|
+
}
|
|
68
|
+
return hex;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
72
|
+
logger.error(`Failed to decode private key: ${errorMessage}`);
|
|
73
|
+
throw new Error(`Failed to decode private key: ${errorMessage}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Process tags containing bech32-encoded entities
|
|
78
|
+
*/
|
|
79
|
+
function processBech32Tags(tags) {
|
|
80
|
+
return tags.map(tag => {
|
|
81
|
+
try {
|
|
82
|
+
if (tag[0] === 'p' && tag[1].startsWith('npub')) {
|
|
83
|
+
return [tag[0], decodePubkey(tag[1])];
|
|
84
|
+
}
|
|
85
|
+
return tag;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
89
|
+
logger.debug(`Failed to decode pubkey ${tag[1]}: ${errorMessage}`);
|
|
90
|
+
return tag;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Encode tags containing hex pubkeys to bech32
|
|
96
|
+
*/
|
|
97
|
+
function encodeBech32Tags(tags) {
|
|
98
|
+
return tags.map(tag => {
|
|
99
|
+
try {
|
|
100
|
+
if (tag[0] === 'p' && !tag[1].startsWith('npub')) {
|
|
101
|
+
return [tag[0], encodePubkey(tag[1])];
|
|
102
|
+
}
|
|
103
|
+
return tag;
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
107
|
+
logger.debug(`Failed to encode pubkey ${tag[1]}: ${errorMessage}`);
|
|
108
|
+
return tag;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=nip-19.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-19.js","sourceRoot":"","sources":["../../../src/nips/nip-19.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-20 Command Results implementation
|
|
3
|
+
* @module nips/nip-20
|
|
4
|
+
*/
|
|
5
|
+
import { NostrWSMessage } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Command status types
|
|
8
|
+
*/
|
|
9
|
+
export declare enum CommandStatus {
|
|
10
|
+
SUCCESS = "success",
|
|
11
|
+
error = "error",
|
|
12
|
+
PENDING = "pending",
|
|
13
|
+
RATE_LIMITED = "rate_limited",
|
|
14
|
+
AUTH_REQUIRED = "auth_required",
|
|
15
|
+
RESTRICTED = "restricted"
|
|
16
|
+
}
|
|
17
|
+
export type CommandStatusType = CommandStatus;
|
|
18
|
+
/**
|
|
19
|
+
* Command result interface
|
|
20
|
+
*/
|
|
21
|
+
export interface CommandResult {
|
|
22
|
+
status: boolean;
|
|
23
|
+
message?: string;
|
|
24
|
+
code?: CommandStatusType;
|
|
25
|
+
details?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Represents the data structure for command messages
|
|
29
|
+
* @interface CommandMessageData
|
|
30
|
+
* @property {string} [event_id] - ID of the event this command relates to
|
|
31
|
+
* @property {boolean} [status] - Status of the command execution
|
|
32
|
+
* @property {string} [message] - Human-readable message about the command result
|
|
33
|
+
* @property {CommandStatusType} [code] - Status code of the command result
|
|
34
|
+
* @property {Record<string, unknown>} [details] - Additional details about the command result
|
|
35
|
+
*/
|
|
36
|
+
interface CommandMessageData {
|
|
37
|
+
event_id?: string;
|
|
38
|
+
status?: boolean;
|
|
39
|
+
message?: string;
|
|
40
|
+
code?: CommandStatusType;
|
|
41
|
+
details?: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Validates a command message according to NIP-20
|
|
45
|
+
*/
|
|
46
|
+
export declare function validateCommandMessage(message: NostrWSMessage): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Creates a command result message
|
|
49
|
+
*/
|
|
50
|
+
export declare function createCommandResult(data: CommandMessageData): CommandResult;
|
|
51
|
+
/**
|
|
52
|
+
* Creates an OK message
|
|
53
|
+
*/
|
|
54
|
+
export declare function createOkMessage(eventId: string, success?: boolean, details?: Record<string, unknown>): NostrWSMessage;
|
|
55
|
+
/**
|
|
56
|
+
* Creates a NOTICE message
|
|
57
|
+
*/
|
|
58
|
+
export declare function createCommandNoticeMessage(code: CommandStatusType, message: string, details?: Record<string, unknown>): NostrWSMessage;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=nip-20.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-20.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-20.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CA+CvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAU3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,UAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAMlH;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAMtI"}
|