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,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NIP-20 Command Results implementation
|
|
4
|
+
* @module nips/nip-20
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.CommandStatus = void 0;
|
|
8
|
+
exports.validateCommandMessage = validateCommandMessage;
|
|
9
|
+
exports.createCommandResult = createCommandResult;
|
|
10
|
+
exports.createOkMessage = createOkMessage;
|
|
11
|
+
exports.createCommandNoticeMessage = createCommandNoticeMessage;
|
|
12
|
+
const logger_1 = require("../utils/logger");
|
|
13
|
+
const logger = (0, logger_1.getLogger)('NIP-20');
|
|
14
|
+
/**
|
|
15
|
+
* Command status types
|
|
16
|
+
*/
|
|
17
|
+
var CommandStatus;
|
|
18
|
+
(function (CommandStatus) {
|
|
19
|
+
CommandStatus["SUCCESS"] = "success";
|
|
20
|
+
CommandStatus["error"] = "error";
|
|
21
|
+
CommandStatus["PENDING"] = "pending";
|
|
22
|
+
CommandStatus["RATE_LIMITED"] = "rate_limited";
|
|
23
|
+
CommandStatus["AUTH_REQUIRED"] = "auth_required";
|
|
24
|
+
CommandStatus["RESTRICTED"] = "restricted";
|
|
25
|
+
})(CommandStatus || (exports.CommandStatus = CommandStatus = {}));
|
|
26
|
+
/**
|
|
27
|
+
* Validates a command message according to NIP-20
|
|
28
|
+
*/
|
|
29
|
+
function validateCommandMessage(message) {
|
|
30
|
+
if (!Array.isArray(message) || message.length < 2) {
|
|
31
|
+
logger.debug('Invalid command message format');
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const [type, data] = message;
|
|
35
|
+
if (typeof data !== 'object' || !data) {
|
|
36
|
+
logger.debug('Invalid command message data');
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
const commandData = data;
|
|
40
|
+
// For OK/NOTICE messages
|
|
41
|
+
if (type === 'OK') {
|
|
42
|
+
if (!commandData.event_id || typeof commandData.event_id !== 'string') {
|
|
43
|
+
logger.debug('Invalid event_id in OK message');
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if (typeof commandData.status !== 'boolean') {
|
|
47
|
+
logger.debug('Invalid status in OK message');
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// For NOTICE messages
|
|
52
|
+
if (type === 'NOTICE' && commandData.code) {
|
|
53
|
+
if (!Object.values(CommandStatus).includes(commandData.code)) {
|
|
54
|
+
logger.debug('Invalid command status code');
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Optional fields validation
|
|
59
|
+
if (commandData.message && typeof commandData.message !== 'string') {
|
|
60
|
+
logger.debug('Invalid message field');
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
if (commandData.details && typeof commandData.details !== 'object') {
|
|
64
|
+
logger.debug('Invalid details field');
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Creates a command result message
|
|
71
|
+
*/
|
|
72
|
+
function createCommandResult(data) {
|
|
73
|
+
const status = data.status ?? false;
|
|
74
|
+
const code = status ? CommandStatus.SUCCESS : data.code;
|
|
75
|
+
return {
|
|
76
|
+
status,
|
|
77
|
+
code,
|
|
78
|
+
message: data.message,
|
|
79
|
+
details: data.details
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Creates an OK message
|
|
84
|
+
*/
|
|
85
|
+
function createOkMessage(eventId, success = true, details) {
|
|
86
|
+
return ['OK', {
|
|
87
|
+
event_id: eventId,
|
|
88
|
+
status: success,
|
|
89
|
+
...details && { details }
|
|
90
|
+
}];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Creates a NOTICE message
|
|
94
|
+
*/
|
|
95
|
+
function createCommandNoticeMessage(code, message, details) {
|
|
96
|
+
return ['NOTICE', {
|
|
97
|
+
code,
|
|
98
|
+
message,
|
|
99
|
+
...details && { details }
|
|
100
|
+
}];
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=nip-20.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-20.js","sourceRoot":"","sources":["../../../src/nips/nip-20.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-22: Event Created At Limits
|
|
3
|
+
* @module nips/nip-22
|
|
4
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/22.md
|
|
5
|
+
*/
|
|
6
|
+
import type { NostrWSMessage } from '../types/messages';
|
|
7
|
+
import type { Logger } from '../types/logger';
|
|
8
|
+
/**
|
|
9
|
+
* Default time limits in seconds
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_TIME_LIMITS: {
|
|
12
|
+
FUTURE_LIMIT: number;
|
|
13
|
+
PAST_LIMIT: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Time validation result
|
|
17
|
+
*/
|
|
18
|
+
export interface TimeValidationResult {
|
|
19
|
+
valid: boolean;
|
|
20
|
+
reason?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Time validator interface
|
|
24
|
+
*/
|
|
25
|
+
export interface TimeValidator {
|
|
26
|
+
/**
|
|
27
|
+
* Validates event timestamp
|
|
28
|
+
* @param timestamp - Event timestamp
|
|
29
|
+
* @returns {TimeValidationResult} Validation result
|
|
30
|
+
*/
|
|
31
|
+
validateTime(timestamp: number): TimeValidationResult;
|
|
32
|
+
/**
|
|
33
|
+
* Updates server time offset
|
|
34
|
+
* @param serverTime - Server timestamp
|
|
35
|
+
*/
|
|
36
|
+
updateTimeOffset(serverTime: number): void;
|
|
37
|
+
/**
|
|
38
|
+
* Gets current adjusted timestamp
|
|
39
|
+
* @returns {number} Adjusted timestamp
|
|
40
|
+
*/
|
|
41
|
+
getCurrentTime(): number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates a time validator
|
|
45
|
+
* @param logger - Logger instance
|
|
46
|
+
* @param futureLimitSeconds - Future time limit in seconds
|
|
47
|
+
* @param pastLimitSeconds - Past time limit in seconds
|
|
48
|
+
* @returns {TimeValidator} Time validator
|
|
49
|
+
*/
|
|
50
|
+
export declare function createTimeValidator(logger: Logger, futureLimitSeconds?: number, pastLimitSeconds?: number): TimeValidator;
|
|
51
|
+
/**
|
|
52
|
+
* Validates event timestamp
|
|
53
|
+
* @param message - Message to validate
|
|
54
|
+
* @param validator - Time validator
|
|
55
|
+
* @param logger - Logger instance
|
|
56
|
+
* @returns {TimeValidationResult} Validation result
|
|
57
|
+
*/
|
|
58
|
+
export declare function validateEventTime(message: NostrWSMessage, validator: TimeValidator, logger: Logger): TimeValidationResult;
|
|
59
|
+
/**
|
|
60
|
+
* Time synchronization manager interface
|
|
61
|
+
*/
|
|
62
|
+
export interface TimeSyncManager {
|
|
63
|
+
/**
|
|
64
|
+
* Starts time synchronization
|
|
65
|
+
* @param wsUrl - WebSocket URL for time sync
|
|
66
|
+
*/
|
|
67
|
+
startSync(wsUrl: string): void;
|
|
68
|
+
/**
|
|
69
|
+
* Stops time synchronization
|
|
70
|
+
*/
|
|
71
|
+
stopSync(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Gets current synchronized time
|
|
74
|
+
* @returns {number} Current timestamp
|
|
75
|
+
*/
|
|
76
|
+
getCurrentTime(): number;
|
|
77
|
+
/**
|
|
78
|
+
* Validates event timing
|
|
79
|
+
* @param event - Event to validate
|
|
80
|
+
* @returns {TimeValidationResult} Validation result
|
|
81
|
+
*/
|
|
82
|
+
validateEvent(event: NostrWSMessage): TimeValidationResult;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Creates a time synchronization manager
|
|
86
|
+
* @param logger - Logger instance
|
|
87
|
+
* @returns {TimeSyncManager} Time sync manager
|
|
88
|
+
*/
|
|
89
|
+
export declare function createTimeSyncManager(logger: Logger): TimeSyncManager;
|
|
90
|
+
//# sourceMappingURL=nip-22.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-22.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-22.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG9C;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAAC;IAEtD;;;OAGG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3C;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,MAAyC,EAC7D,gBAAgB,GAAE,MAAuC,GACxD,aAAa,CAoCf;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,MAAM,GACb,oBAAoB,CAwBtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,QAAQ,IAAI,IAAI,CAAC;IAEjB;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC;IAEzB;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,oBAAoB,CAAC;CAC5D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAgErE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NIP-22: Event Created At Limits
|
|
4
|
+
* @module nips/nip-22
|
|
5
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/22.md
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.DEFAULT_TIME_LIMITS = void 0;
|
|
9
|
+
exports.createTimeValidator = createTimeValidator;
|
|
10
|
+
exports.validateEventTime = validateEventTime;
|
|
11
|
+
exports.createTimeSyncManager = createTimeSyncManager;
|
|
12
|
+
/**
|
|
13
|
+
* Default time limits in seconds
|
|
14
|
+
*/
|
|
15
|
+
exports.DEFAULT_TIME_LIMITS = {
|
|
16
|
+
FUTURE_LIMIT: 900, // 15 minutes
|
|
17
|
+
PAST_LIMIT: 31536000 // 1 year
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Creates a time validator
|
|
21
|
+
* @param logger - Logger instance
|
|
22
|
+
* @param futureLimitSeconds - Future time limit in seconds
|
|
23
|
+
* @param pastLimitSeconds - Past time limit in seconds
|
|
24
|
+
* @returns {TimeValidator} Time validator
|
|
25
|
+
*/
|
|
26
|
+
function createTimeValidator(logger, futureLimitSeconds = exports.DEFAULT_TIME_LIMITS.FUTURE_LIMIT, pastLimitSeconds = exports.DEFAULT_TIME_LIMITS.PAST_LIMIT) {
|
|
27
|
+
let timeOffset = 0; // Offset between local and server time
|
|
28
|
+
return {
|
|
29
|
+
validateTime(timestamp) {
|
|
30
|
+
const now = Date.now() / 1000 + timeOffset;
|
|
31
|
+
// Check future limit
|
|
32
|
+
if (timestamp > now + futureLimitSeconds) {
|
|
33
|
+
return {
|
|
34
|
+
valid: false,
|
|
35
|
+
reason: 'Event timestamp too far in the future'
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Check past limit
|
|
39
|
+
if (timestamp < now - pastLimitSeconds) {
|
|
40
|
+
return {
|
|
41
|
+
valid: false,
|
|
42
|
+
reason: 'Event timestamp too far in the past'
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return { valid: true };
|
|
46
|
+
},
|
|
47
|
+
updateTimeOffset(serverTime) {
|
|
48
|
+
const localTime = Date.now() / 1000;
|
|
49
|
+
timeOffset = serverTime - localTime;
|
|
50
|
+
logger.debug(`Updated time offset to ${timeOffset} seconds`);
|
|
51
|
+
},
|
|
52
|
+
getCurrentTime() {
|
|
53
|
+
return Math.floor(Date.now() / 1000 + timeOffset);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Validates event timestamp
|
|
59
|
+
* @param message - Message to validate
|
|
60
|
+
* @param validator - Time validator
|
|
61
|
+
* @param logger - Logger instance
|
|
62
|
+
* @returns {TimeValidationResult} Validation result
|
|
63
|
+
*/
|
|
64
|
+
function validateEventTime(message, validator, logger) {
|
|
65
|
+
try {
|
|
66
|
+
if (!Array.isArray(message) || message[0] !== 'EVENT') {
|
|
67
|
+
return { valid: true }; // Not an event message
|
|
68
|
+
}
|
|
69
|
+
const event = message[1];
|
|
70
|
+
const { created_at: timestamp } = event;
|
|
71
|
+
if (typeof timestamp !== 'number') {
|
|
72
|
+
return {
|
|
73
|
+
valid: false,
|
|
74
|
+
reason: 'Missing or invalid timestamp'
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return validator.validateTime(timestamp);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
logger.error('Error validating event time:', error);
|
|
81
|
+
return {
|
|
82
|
+
valid: false,
|
|
83
|
+
reason: 'Error validating timestamp'
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Creates a time synchronization manager
|
|
89
|
+
* @param logger - Logger instance
|
|
90
|
+
* @returns {TimeSyncManager} Time sync manager
|
|
91
|
+
*/
|
|
92
|
+
function createTimeSyncManager(logger) {
|
|
93
|
+
const validator = createTimeValidator(logger);
|
|
94
|
+
let syncInterval = null;
|
|
95
|
+
async function syncTime(wsUrl) {
|
|
96
|
+
try {
|
|
97
|
+
const ws = new WebSocket(wsUrl);
|
|
98
|
+
await new Promise((resolve, reject) => {
|
|
99
|
+
ws.onopen = () => {
|
|
100
|
+
// Send time request
|
|
101
|
+
ws.send(JSON.stringify({
|
|
102
|
+
type: 'TIME',
|
|
103
|
+
data: { client_time: Math.floor(Date.now() / 1000) }
|
|
104
|
+
}));
|
|
105
|
+
};
|
|
106
|
+
ws.onmessage = (event) => {
|
|
107
|
+
try {
|
|
108
|
+
const response = JSON.parse(event.data);
|
|
109
|
+
if (response.type === 'TIME') {
|
|
110
|
+
validator.updateTimeOffset(response.data.server_time);
|
|
111
|
+
resolve();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
reject(error);
|
|
116
|
+
}
|
|
117
|
+
ws.close();
|
|
118
|
+
};
|
|
119
|
+
ws.onerror = reject;
|
|
120
|
+
// Timeout after 5 seconds
|
|
121
|
+
setTimeout(() => reject(new Error('Time sync timeout')), 5000);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
logger.error('Time sync failed:', error);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
startSync(wsUrl) {
|
|
130
|
+
// Initial sync
|
|
131
|
+
syncTime(wsUrl);
|
|
132
|
+
// Periodic sync every 15 minutes
|
|
133
|
+
syncInterval = setInterval(() => syncTime(wsUrl), 900000);
|
|
134
|
+
},
|
|
135
|
+
stopSync() {
|
|
136
|
+
if (syncInterval) {
|
|
137
|
+
clearInterval(syncInterval);
|
|
138
|
+
syncInterval = null;
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
getCurrentTime() {
|
|
142
|
+
return validator.getCurrentTime();
|
|
143
|
+
},
|
|
144
|
+
validateEvent(event) {
|
|
145
|
+
return validateEventTime(event, validator, logger);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=nip-22.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-22.js","sourceRoot":"","sources":["../../../src/nips/nip-22.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-26: Delegated Event Signing
|
|
3
|
+
* @module nips/nip-26
|
|
4
|
+
*/
|
|
5
|
+
import type { NostrEvent } from '../types/events';
|
|
6
|
+
/**
|
|
7
|
+
* Represents the conditions for a Nostr event delegation
|
|
8
|
+
* @interface DelegationConditions
|
|
9
|
+
* @property {number} [kind] - The kind of events this delegation is valid for
|
|
10
|
+
* @property {number} [since] - Unix timestamp from which this delegation is valid
|
|
11
|
+
* @property {number} [until] - Unix timestamp until which this delegation is valid
|
|
12
|
+
* @property {unknown} [key: string] - Any additional conditions
|
|
13
|
+
*/
|
|
14
|
+
interface DelegationConditions {
|
|
15
|
+
kind?: number;
|
|
16
|
+
since?: number;
|
|
17
|
+
until?: number;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Represents a Nostr event delegation
|
|
22
|
+
* @interface Delegation
|
|
23
|
+
* @property {string} pubkey - The public key of the delegator
|
|
24
|
+
* @property {DelegationConditions} conditions - The conditions under which this delegation is valid
|
|
25
|
+
* @property {string} token - The delegation token signed by the delegator
|
|
26
|
+
*/
|
|
27
|
+
interface Delegation {
|
|
28
|
+
pubkey: string;
|
|
29
|
+
conditions: DelegationConditions;
|
|
30
|
+
token: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a delegation token
|
|
34
|
+
*/
|
|
35
|
+
export declare function createDelegation(delegatorPrivkey: string, delegateePubkey: string, conditions: DelegationConditions): Promise<string>;
|
|
36
|
+
/**
|
|
37
|
+
* Verify a delegation token
|
|
38
|
+
*/
|
|
39
|
+
export declare function verifyDelegation(delegatorPubkey: string, delegateePubkey: string, token: string, conditions: DelegationConditions): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Add delegation tag to an event
|
|
42
|
+
*/
|
|
43
|
+
export declare function addDelegationTag(event: NostrEvent, delegation: Delegation): NostrEvent;
|
|
44
|
+
/**
|
|
45
|
+
* Extract delegation from an event
|
|
46
|
+
*/
|
|
47
|
+
export declare function extractDelegation(event: NostrEvent): Delegation | null;
|
|
48
|
+
/**
|
|
49
|
+
* Validate a delegated event
|
|
50
|
+
*/
|
|
51
|
+
export declare function validateDelegatedEvent(event: NostrEvent): Promise<boolean>;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=nip-26.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-26.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-26.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD;;;;;;;GAOG;AACH,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,oBAAoB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAYtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAyBtE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAuChF"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NIP-26: Delegated Event Signing
|
|
4
|
+
* @module nips/nip-26
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createDelegation = createDelegation;
|
|
8
|
+
exports.verifyDelegation = verifyDelegation;
|
|
9
|
+
exports.addDelegationTag = addDelegationTag;
|
|
10
|
+
exports.extractDelegation = extractDelegation;
|
|
11
|
+
exports.validateDelegatedEvent = validateDelegatedEvent;
|
|
12
|
+
const logger_1 = require("../utils/logger");
|
|
13
|
+
const nostr_crypto_utils_1 = require("nostr-crypto-utils");
|
|
14
|
+
const logger = (0, logger_1.getLogger)('NIP-26');
|
|
15
|
+
/**
|
|
16
|
+
* Create a delegation token
|
|
17
|
+
*/
|
|
18
|
+
async function createDelegation(delegatorPrivkey, delegateePubkey, conditions) {
|
|
19
|
+
try {
|
|
20
|
+
const conditionsString = Object.entries(conditions)
|
|
21
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
22
|
+
.sort()
|
|
23
|
+
.join('&');
|
|
24
|
+
const message = `nostr:delegation:${delegateePubkey}:${conditionsString}`;
|
|
25
|
+
// Create a NostrEvent object for signing
|
|
26
|
+
const event = {
|
|
27
|
+
id: '', // This will be set by signEvent
|
|
28
|
+
pubkey: delegateePubkey,
|
|
29
|
+
created_at: Math.floor(Date.now() / 1000),
|
|
30
|
+
kind: 0, // Using kind 0 for delegation events
|
|
31
|
+
tags: [],
|
|
32
|
+
content: message,
|
|
33
|
+
sig: '' // This will be set by signEvent
|
|
34
|
+
};
|
|
35
|
+
const signedEvent = await (0, nostr_crypto_utils_1.signEvent)(event, delegatorPrivkey);
|
|
36
|
+
return signedEvent.sig;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
40
|
+
logger.error(`Failed to create delegation: ${errorMessage}`);
|
|
41
|
+
throw new Error(`Failed to create delegation: ${errorMessage}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Verify a delegation token
|
|
46
|
+
*/
|
|
47
|
+
async function verifyDelegation(delegatorPubkey, delegateePubkey, token, conditions) {
|
|
48
|
+
try {
|
|
49
|
+
const conditionsString = Object.entries(conditions)
|
|
50
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
51
|
+
.sort()
|
|
52
|
+
.join('&');
|
|
53
|
+
const message = `nostr:delegation:${delegateePubkey}:${conditionsString}`;
|
|
54
|
+
const verificationEvent = {
|
|
55
|
+
id: '',
|
|
56
|
+
pubkey: delegatorPubkey,
|
|
57
|
+
created_at: Math.floor(Date.now() / 1000),
|
|
58
|
+
kind: 0,
|
|
59
|
+
tags: [],
|
|
60
|
+
content: message,
|
|
61
|
+
sig: token
|
|
62
|
+
};
|
|
63
|
+
return await (0, nostr_crypto_utils_1.verifySignature)(verificationEvent);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
67
|
+
logger.error(`Failed to verify delegation: ${errorMessage}`);
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Add delegation tag to an event
|
|
73
|
+
*/
|
|
74
|
+
function addDelegationTag(event, delegation) {
|
|
75
|
+
const conditionsString = Object.entries(delegation.conditions)
|
|
76
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
77
|
+
.sort()
|
|
78
|
+
.join('&');
|
|
79
|
+
const delegationTag = ['delegation', delegation.pubkey, conditionsString, delegation.token];
|
|
80
|
+
return {
|
|
81
|
+
...event,
|
|
82
|
+
tags: [...event.tags, delegationTag]
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Extract delegation from an event
|
|
87
|
+
*/
|
|
88
|
+
function extractDelegation(event) {
|
|
89
|
+
try {
|
|
90
|
+
const delegationTag = event.tags.find(tag => tag[0] === 'delegation');
|
|
91
|
+
if (!delegationTag || delegationTag.length !== 4) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const [, pubkey, conditionsString, token] = delegationTag;
|
|
95
|
+
const conditions = {};
|
|
96
|
+
conditionsString.split('&').forEach(pair => {
|
|
97
|
+
const [key, value] = pair.split('=');
|
|
98
|
+
if (key === 'kind' || key === 'since' || key === 'until') {
|
|
99
|
+
conditions[key] = parseInt(value, 10);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
conditions[key] = value;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return { pubkey, conditions, token };
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
109
|
+
logger.error(`Failed to extract delegation: ${errorMessage}`);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Validate a delegated event
|
|
115
|
+
*/
|
|
116
|
+
async function validateDelegatedEvent(event) {
|
|
117
|
+
try {
|
|
118
|
+
const delegation = extractDelegation(event);
|
|
119
|
+
if (!delegation) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
const { kind, created_at } = event;
|
|
123
|
+
const { kind: allowedKind, since, until } = delegation.conditions;
|
|
124
|
+
// Check kind constraint
|
|
125
|
+
if (allowedKind !== undefined && kind !== allowedKind) {
|
|
126
|
+
logger.debug('Event kind does not match delegation conditions');
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
// Check time constraints
|
|
130
|
+
if (since !== undefined && created_at < since) {
|
|
131
|
+
logger.debug('Event is before delegation start time');
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
if (until !== undefined && created_at > until) {
|
|
135
|
+
logger.debug('Event is after delegation end time');
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
// Verify delegation token
|
|
139
|
+
return await verifyDelegation(delegation.pubkey, event.pubkey, delegation.token, delegation.conditions);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
143
|
+
logger.error(`Failed to validate delegated event: ${errorMessage}`);
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=nip-26.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-26.js","sourceRoot":"","sources":["../../../src/nips/nip-26.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-28: Public Chat
|
|
3
|
+
* @module nips/nip-28
|
|
4
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/28.md
|
|
5
|
+
*/
|
|
6
|
+
import type { NostrWSMessage } from '../types/messages';
|
|
7
|
+
import type { Logger } from '../types/logger';
|
|
8
|
+
/**
|
|
9
|
+
* Chat event kinds
|
|
10
|
+
*/
|
|
11
|
+
export declare const ChatEventKinds: {
|
|
12
|
+
readonly CHANNEL_CREATION: 40;
|
|
13
|
+
readonly CHANNEL_METADATA: 41;
|
|
14
|
+
readonly CHANNEL_MESSAGE: 42;
|
|
15
|
+
readonly CHANNEL_HIDE_MESSAGE: 43;
|
|
16
|
+
readonly CHANNEL_MUTE_USER: 44;
|
|
17
|
+
readonly USER_MUTE: 45;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Channel metadata structure
|
|
21
|
+
*/
|
|
22
|
+
export interface ChannelMetadata {
|
|
23
|
+
name: string;
|
|
24
|
+
about?: string;
|
|
25
|
+
picture?: string;
|
|
26
|
+
rules?: string[];
|
|
27
|
+
moderators?: string[];
|
|
28
|
+
pinned?: string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a channel creation message
|
|
32
|
+
* @param metadata - Channel metadata
|
|
33
|
+
* @returns {NostrWSMessage} Channel creation event
|
|
34
|
+
*/
|
|
35
|
+
export declare function createChannelCreationEvent(metadata: ChannelMetadata): NostrWSMessage;
|
|
36
|
+
/**
|
|
37
|
+
* Creates a channel message
|
|
38
|
+
* @param channelId - Channel ID
|
|
39
|
+
* @param content - Message content
|
|
40
|
+
* @param replyTo - Optional ID of message being replied to
|
|
41
|
+
* @returns {NostrWSMessage} Channel message event
|
|
42
|
+
*/
|
|
43
|
+
export declare function createChannelMessage(channelId: string, content: string, replyTo?: string): NostrWSMessage;
|
|
44
|
+
/**
|
|
45
|
+
* Creates a message moderation event
|
|
46
|
+
* @param channelId - Channel ID
|
|
47
|
+
* @param messageId - Message ID to moderate
|
|
48
|
+
* @param reason - Moderation reason
|
|
49
|
+
* @returns {NostrWSMessage} Hide message event
|
|
50
|
+
*/
|
|
51
|
+
export declare function createHideMessageEvent(channelId: string, messageId: string, reason: string): NostrWSMessage;
|
|
52
|
+
/**
|
|
53
|
+
* Chat message handler interface
|
|
54
|
+
*/
|
|
55
|
+
export interface ChatMessageHandler {
|
|
56
|
+
/**
|
|
57
|
+
* Handles incoming chat message
|
|
58
|
+
* @param message - Chat message
|
|
59
|
+
* @returns {Promise<void>}
|
|
60
|
+
*/
|
|
61
|
+
handleMessage(message: NostrWSMessage): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Handles message moderation
|
|
64
|
+
* @param message - Moderation message
|
|
65
|
+
* @returns {Promise<void>}
|
|
66
|
+
*/
|
|
67
|
+
handleModeration(message: NostrWSMessage): Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Creates a chat message handler
|
|
71
|
+
* @param logger - Logger instance
|
|
72
|
+
* @returns {ChatMessageHandler} Message handler
|
|
73
|
+
*/
|
|
74
|
+
export declare function createChatMessageHandler(logger: Logger): ChatMessageHandler;
|
|
75
|
+
/**
|
|
76
|
+
* Channel subscription manager interface
|
|
77
|
+
*/
|
|
78
|
+
export interface ChannelSubscriptionManager {
|
|
79
|
+
/**
|
|
80
|
+
* Subscribes to a channel
|
|
81
|
+
* @param channelId - Channel ID
|
|
82
|
+
* @returns {NostrWSMessage} Subscription message
|
|
83
|
+
*/
|
|
84
|
+
subscribe(channelId: string): NostrWSMessage;
|
|
85
|
+
/**
|
|
86
|
+
* Unsubscribes from a channel
|
|
87
|
+
* @param channelId - Channel ID
|
|
88
|
+
* @returns {NostrWSMessage} Unsubscribe message
|
|
89
|
+
*/
|
|
90
|
+
unsubscribe(channelId: string): NostrWSMessage;
|
|
91
|
+
/**
|
|
92
|
+
* Gets channel metadata
|
|
93
|
+
* @param channelId - Channel ID
|
|
94
|
+
* @returns {Promise<ChannelMetadata | undefined>} Channel metadata
|
|
95
|
+
*/
|
|
96
|
+
getMetadata(channelId: string): Promise<ChannelMetadata | undefined>;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Creates a channel subscription manager
|
|
100
|
+
* @param logger - Logger instance
|
|
101
|
+
* @returns {ChannelSubscriptionManager} Subscription manager
|
|
102
|
+
*/
|
|
103
|
+
export declare function createChannelSubscriptionManager(logger: Logger): ChannelSubscriptionManager;
|
|
104
|
+
//# sourceMappingURL=nip-28.d.ts.map
|