nostr-websocket-utils 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__mocks__/extendedWsMock.d.ts +6 -8
- package/dist/__mocks__/extendedWsMock.d.ts.map +1 -0
- package/dist/__mocks__/extendedWsMock.js +1 -0
- package/dist/__mocks__/extendedWsMock.js.map +1 -0
- package/dist/__mocks__/mockLogger.d.ts +8 -7
- package/dist/__mocks__/mockLogger.d.ts.map +1 -0
- package/dist/__mocks__/mockLogger.js +1 -0
- package/dist/__mocks__/mockLogger.js.map +1 -0
- package/dist/__mocks__/mockserver.d.ts +7 -11
- package/dist/__mocks__/mockserver.d.ts.map +1 -0
- package/dist/__mocks__/mockserver.js +1 -0
- package/dist/__mocks__/mockserver.js.map +1 -0
- package/dist/__mocks__/wsMock.d.ts +1 -2
- package/dist/__mocks__/wsMock.d.ts.map +1 -0
- package/dist/__mocks__/wsMock.js +1 -0
- package/dist/__mocks__/wsMock.js.map +1 -0
- package/dist/cjs/__mocks__/extendedWsMock.d.ts +52 -0
- package/dist/cjs/__mocks__/extendedWsMock.d.ts.map +1 -0
- package/dist/cjs/__mocks__/extendedWsMock.js +161 -0
- package/dist/cjs/__mocks__/extendedWsMock.js.map +1 -0
- package/dist/cjs/__mocks__/mockLogger.d.ts +42 -0
- package/dist/cjs/__mocks__/mockLogger.d.ts.map +1 -0
- package/dist/cjs/__mocks__/mockLogger.js +53 -0
- package/dist/cjs/__mocks__/mockLogger.js.map +1 -0
- package/dist/cjs/__mocks__/mockserver.d.ts +27 -0
- package/dist/cjs/__mocks__/mockserver.d.ts.map +1 -0
- package/dist/cjs/__mocks__/mockserver.js +44 -0
- package/dist/cjs/__mocks__/mockserver.js.map +1 -0
- package/dist/cjs/__mocks__/wsMock.d.ts +25 -0
- package/dist/cjs/__mocks__/wsMock.d.ts.map +1 -0
- package/dist/cjs/__mocks__/wsMock.js +123 -0
- package/dist/cjs/__mocks__/wsMock.js.map +1 -0
- package/dist/cjs/core/client.d.ts +35 -0
- package/dist/cjs/core/client.d.ts.map +1 -0
- package/dist/cjs/core/client.js +161 -0
- package/dist/cjs/core/client.js.map +1 -0
- package/dist/{nostr-server.d.ts → cjs/core/nostr-server.d.ts} +3 -6
- package/dist/cjs/core/nostr-server.d.ts.map +1 -0
- package/dist/cjs/core/nostr-server.js +101 -0
- package/dist/cjs/core/nostr-server.js.map +1 -0
- package/dist/cjs/core/queue.d.ts +38 -0
- package/dist/cjs/core/queue.d.ts.map +1 -0
- package/dist/cjs/core/queue.js +105 -0
- package/dist/cjs/core/queue.js.map +1 -0
- package/dist/cjs/core/server.d.ts +29 -0
- package/dist/cjs/core/server.d.ts.map +1 -0
- package/dist/cjs/core/server.js +134 -0
- package/dist/cjs/core/server.js.map +1 -0
- package/dist/cjs/crypto/bech32.d.ts +27 -0
- package/dist/cjs/crypto/bech32.d.ts.map +1 -0
- package/dist/cjs/crypto/bech32.js +170 -0
- package/dist/cjs/crypto/bech32.js.map +1 -0
- package/dist/cjs/crypto/handlers.d.ts +19 -0
- package/dist/cjs/crypto/handlers.d.ts.map +1 -0
- package/dist/cjs/crypto/handlers.js +65 -0
- package/dist/cjs/crypto/handlers.js.map +1 -0
- package/dist/cjs/crypto/index.d.ts +6 -0
- package/dist/cjs/crypto/index.d.ts.map +1 -0
- package/dist/cjs/crypto/index.js +22 -0
- package/dist/cjs/crypto/index.js.map +1 -0
- package/dist/cjs/endpoints/metrics.d.ts +30 -0
- package/dist/cjs/endpoints/metrics.d.ts.map +1 -0
- package/dist/cjs/endpoints/metrics.js +106 -0
- package/dist/cjs/endpoints/metrics.js.map +1 -0
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +40 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/nips/index.d.ts +20 -0
- package/dist/cjs/nips/index.d.ts.map +1 -0
- package/dist/cjs/nips/index.js +51 -0
- package/dist/cjs/nips/index.js.map +1 -0
- package/dist/cjs/nips/nip-01.d.ts +35 -0
- package/dist/cjs/nips/nip-01.d.ts.map +1 -0
- package/dist/cjs/nips/nip-01.js +142 -0
- package/dist/cjs/nips/nip-01.js.map +1 -0
- package/dist/cjs/nips/nip-02.d.ts +83 -0
- package/dist/cjs/nips/nip-02.d.ts.map +1 -0
- package/dist/cjs/nips/nip-02.js +119 -0
- package/dist/cjs/nips/nip-02.js.map +1 -0
- package/dist/cjs/nips/nip-04.d.ts +37 -0
- package/dist/cjs/nips/nip-04.d.ts.map +1 -0
- package/dist/cjs/nips/nip-04.js +104 -0
- package/dist/cjs/nips/nip-04.js.map +1 -0
- package/dist/cjs/nips/nip-05.d.ts +88 -0
- package/dist/cjs/nips/nip-05.d.ts.map +1 -0
- package/dist/cjs/nips/nip-05.js +158 -0
- package/dist/cjs/nips/nip-05.js.map +1 -0
- package/dist/cjs/nips/nip-09.d.ts +93 -0
- package/dist/cjs/nips/nip-09.d.ts.map +1 -0
- package/dist/cjs/nips/nip-09.js +180 -0
- package/dist/cjs/nips/nip-09.js.map +1 -0
- package/dist/cjs/nips/nip-11.d.ts +65 -0
- package/dist/cjs/nips/nip-11.d.ts.map +1 -0
- package/dist/cjs/nips/nip-11.js +161 -0
- package/dist/cjs/nips/nip-11.js.map +1 -0
- package/dist/cjs/nips/nip-13.d.ts +74 -0
- package/dist/cjs/nips/nip-13.d.ts.map +1 -0
- package/dist/cjs/nips/nip-13.js +136 -0
- package/dist/cjs/nips/nip-13.js.map +1 -0
- package/dist/cjs/nips/nip-15.d.ts +84 -0
- package/dist/cjs/nips/nip-15.d.ts.map +1 -0
- package/dist/cjs/nips/nip-15.js +102 -0
- package/dist/cjs/nips/nip-15.js.map +1 -0
- package/dist/cjs/nips/nip-16.d.ts +89 -0
- package/dist/cjs/nips/nip-16.d.ts.map +1 -0
- package/dist/cjs/nips/nip-16.js +157 -0
- package/dist/cjs/nips/nip-16.js.map +1 -0
- package/dist/cjs/nips/nip-19.d.ts +29 -0
- package/dist/cjs/nips/nip-19.d.ts.map +1 -0
- package/dist/cjs/nips/nip-19.js +112 -0
- package/dist/cjs/nips/nip-19.js.map +1 -0
- package/dist/cjs/nips/nip-20.d.ts +60 -0
- package/dist/cjs/nips/nip-20.d.ts.map +1 -0
- package/dist/cjs/nips/nip-20.js +102 -0
- package/dist/cjs/nips/nip-20.js.map +1 -0
- package/dist/cjs/nips/nip-22.d.ts +90 -0
- package/dist/cjs/nips/nip-22.d.ts.map +1 -0
- package/dist/cjs/nips/nip-22.js +149 -0
- package/dist/cjs/nips/nip-22.js.map +1 -0
- package/dist/cjs/nips/nip-26.d.ts +53 -0
- package/dist/cjs/nips/nip-26.d.ts.map +1 -0
- package/dist/cjs/nips/nip-26.js +147 -0
- package/dist/cjs/nips/nip-26.js.map +1 -0
- package/dist/cjs/nips/nip-28.d.ts +104 -0
- package/dist/cjs/nips/nip-28.d.ts.map +1 -0
- package/dist/cjs/nips/nip-28.js +164 -0
- package/dist/cjs/nips/nip-28.js.map +1 -0
- package/dist/cjs/nips/nip-33.d.ts +95 -0
- package/dist/cjs/nips/nip-33.d.ts.map +1 -0
- package/dist/cjs/nips/nip-33.js +135 -0
- package/dist/cjs/nips/nip-33.js.map +1 -0
- package/dist/cjs/transport/base.d.ts +54 -0
- package/dist/cjs/transport/base.d.ts.map +1 -0
- package/dist/cjs/transport/base.js +109 -0
- package/dist/cjs/transport/base.js.map +1 -0
- package/dist/cjs/transport/websocket.d.ts +24 -0
- package/dist/cjs/transport/websocket.d.ts.map +1 -0
- package/dist/cjs/transport/websocket.js +136 -0
- package/dist/cjs/transport/websocket.js.map +1 -0
- package/dist/cjs/types/events.d.ts +74 -0
- package/dist/cjs/types/events.d.ts.map +1 -0
- package/dist/cjs/types/events.js +7 -0
- package/dist/cjs/types/events.js.map +1 -0
- package/dist/cjs/types/filters.d.ts +20 -0
- package/dist/cjs/types/filters.d.ts.map +1 -0
- package/dist/cjs/types/filters.js +7 -0
- package/dist/cjs/types/filters.js.map +1 -0
- package/dist/cjs/types/handlers.d.ts +81 -0
- package/dist/cjs/types/handlers.d.ts.map +1 -0
- package/dist/cjs/types/handlers.js +7 -0
- package/dist/cjs/types/handlers.js.map +1 -0
- package/dist/cjs/types/index.d.ts +144 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +37 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/logger.d.ts +41 -0
- package/dist/cjs/types/logger.d.ts.map +1 -0
- package/dist/cjs/types/logger.js +7 -0
- package/dist/cjs/types/logger.js.map +1 -0
- package/dist/cjs/types/messages.d.ts +133 -0
- package/dist/cjs/types/messages.d.ts.map +1 -0
- package/dist/cjs/types/messages.js +46 -0
- package/dist/cjs/types/messages.js.map +1 -0
- package/dist/cjs/types/nostr.d.ts +134 -0
- package/dist/cjs/types/nostr.d.ts.map +1 -0
- package/dist/cjs/types/nostr.js +7 -0
- package/dist/cjs/types/nostr.js.map +1 -0
- package/dist/cjs/types/options.d.ts +155 -0
- package/dist/cjs/types/options.d.ts.map +1 -0
- package/dist/cjs/types/options.js +7 -0
- package/dist/cjs/types/options.js.map +1 -0
- package/dist/cjs/types/priority.d.ts +13 -0
- package/dist/cjs/types/priority.d.ts.map +1 -0
- package/dist/cjs/types/priority.js +17 -0
- package/dist/cjs/types/priority.js.map +1 -0
- package/dist/cjs/types/relays.d.ts +27 -0
- package/dist/cjs/types/relays.d.ts.map +1 -0
- package/dist/cjs/types/relays.js +7 -0
- package/dist/cjs/types/relays.js.map +1 -0
- package/dist/cjs/types/scoring.d.ts +59 -0
- package/dist/cjs/types/scoring.d.ts.map +1 -0
- package/dist/cjs/types/scoring.js +34 -0
- package/dist/cjs/types/scoring.js.map +1 -0
- package/dist/cjs/types/socket.d.ts +98 -0
- package/dist/cjs/types/socket.d.ts.map +1 -0
- package/dist/cjs/types/socket.js +7 -0
- package/dist/cjs/types/socket.js.map +1 -0
- package/dist/cjs/types/transport.d.ts +98 -0
- package/dist/cjs/types/transport.d.ts.map +1 -0
- package/dist/cjs/types/transport.js +7 -0
- package/dist/cjs/types/transport.js.map +1 -0
- package/dist/cjs/types/validation.d.ts +51 -0
- package/dist/cjs/types/validation.d.ts.map +1 -0
- package/dist/cjs/types/validation.js +7 -0
- package/dist/cjs/types/validation.js.map +1 -0
- package/dist/cjs/types/websocket.d.ts +250 -0
- package/dist/cjs/types/websocket.d.ts.map +1 -0
- package/dist/cjs/types/websocket.js +7 -0
- package/dist/cjs/types/websocket.js.map +1 -0
- package/dist/cjs/utils/http.d.ts +11 -0
- package/dist/cjs/utils/http.d.ts.map +1 -0
- package/dist/cjs/utils/http.js +28 -0
- package/dist/cjs/utils/http.js.map +1 -0
- package/dist/cjs/utils/logger.d.ts +26 -0
- package/dist/cjs/utils/logger.d.ts.map +1 -0
- package/dist/cjs/utils/logger.js +43 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/cjs/utils/metrics.d.ts +81 -0
- package/dist/cjs/utils/metrics.d.ts.map +1 -0
- package/dist/cjs/utils/metrics.js +211 -0
- package/dist/cjs/utils/metrics.js.map +1 -0
- package/dist/cjs/utils/rate-limiter.d.ts +86 -0
- package/dist/cjs/utils/rate-limiter.d.ts.map +1 -0
- package/dist/cjs/utils/rate-limiter.js +183 -0
- package/dist/cjs/utils/rate-limiter.js.map +1 -0
- package/dist/core/client.d.ts +1 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +1 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/nostr-server.d.ts +1 -0
- package/dist/core/nostr-server.d.ts.map +1 -0
- package/dist/core/nostr-server.js +1 -0
- package/dist/core/nostr-server.js.map +1 -0
- package/dist/core/queue.d.ts +1 -0
- package/dist/core/queue.d.ts.map +1 -0
- package/dist/core/queue.js +1 -0
- package/dist/core/queue.js.map +1 -0
- package/dist/core/server.d.ts +1 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +1 -0
- package/dist/core/server.js.map +1 -0
- package/dist/crypto/bech32.d.ts +1 -0
- package/dist/crypto/bech32.d.ts.map +1 -0
- package/dist/crypto/bech32.js +1 -0
- package/dist/crypto/bech32.js.map +1 -0
- package/dist/crypto/handlers.d.ts +1 -0
- package/dist/crypto/handlers.d.ts.map +1 -0
- package/dist/crypto/handlers.js +1 -0
- package/dist/crypto/handlers.js.map +1 -0
- package/dist/crypto/index.d.ts +1 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +1 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/endpoints/metrics.d.ts +1 -0
- package/dist/endpoints/metrics.d.ts.map +1 -0
- package/dist/endpoints/metrics.js +1 -0
- package/dist/endpoints/metrics.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/nips/index.d.ts +1 -0
- package/dist/nips/index.d.ts.map +1 -0
- package/dist/nips/index.js +1 -0
- package/dist/nips/index.js.map +1 -0
- package/dist/nips/nip-01.d.ts +1 -0
- package/dist/nips/nip-01.d.ts.map +1 -0
- package/dist/nips/nip-01.js +1 -0
- package/dist/nips/nip-01.js.map +1 -0
- package/dist/nips/nip-02.d.ts +1 -0
- package/dist/nips/nip-02.d.ts.map +1 -0
- package/dist/nips/nip-02.js +1 -0
- package/dist/nips/nip-02.js.map +1 -0
- package/dist/nips/nip-04.d.ts +1 -0
- package/dist/nips/nip-04.d.ts.map +1 -0
- package/dist/nips/nip-04.js +1 -0
- package/dist/nips/nip-04.js.map +1 -0
- package/dist/nips/nip-05.d.ts +1 -0
- package/dist/nips/nip-05.d.ts.map +1 -0
- package/dist/nips/nip-05.js +1 -0
- package/dist/nips/nip-05.js.map +1 -0
- package/dist/nips/nip-09.d.ts +1 -0
- package/dist/nips/nip-09.d.ts.map +1 -0
- package/dist/nips/nip-09.js +1 -0
- package/dist/nips/nip-09.js.map +1 -0
- package/dist/nips/nip-11.d.ts +1 -0
- package/dist/nips/nip-11.d.ts.map +1 -0
- package/dist/nips/nip-11.js +1 -0
- package/dist/nips/nip-11.js.map +1 -0
- package/dist/nips/nip-13.d.ts +1 -0
- package/dist/nips/nip-13.d.ts.map +1 -0
- package/dist/nips/nip-13.js +1 -0
- package/dist/nips/nip-13.js.map +1 -0
- package/dist/nips/nip-15.d.ts +1 -0
- package/dist/nips/nip-15.d.ts.map +1 -0
- package/dist/nips/nip-15.js +1 -0
- package/dist/nips/nip-15.js.map +1 -0
- package/dist/nips/nip-16.d.ts +1 -0
- package/dist/nips/nip-16.d.ts.map +1 -0
- package/dist/nips/nip-16.js +1 -0
- package/dist/nips/nip-16.js.map +1 -0
- package/dist/nips/nip-19.d.ts +1 -0
- package/dist/nips/nip-19.d.ts.map +1 -0
- package/dist/nips/nip-19.js +1 -0
- package/dist/nips/nip-19.js.map +1 -0
- package/dist/nips/nip-20.d.ts +1 -0
- package/dist/nips/nip-20.d.ts.map +1 -0
- package/dist/nips/nip-20.js +1 -0
- package/dist/nips/nip-20.js.map +1 -0
- package/dist/nips/nip-22.d.ts +1 -0
- package/dist/nips/nip-22.d.ts.map +1 -0
- package/dist/nips/nip-22.js +1 -0
- package/dist/nips/nip-22.js.map +1 -0
- package/dist/nips/nip-26.d.ts +1 -0
- package/dist/nips/nip-26.d.ts.map +1 -0
- package/dist/nips/nip-26.js +1 -0
- package/dist/nips/nip-26.js.map +1 -0
- package/dist/nips/nip-28.d.ts +1 -0
- package/dist/nips/nip-28.d.ts.map +1 -0
- package/dist/nips/nip-28.js +1 -0
- package/dist/nips/nip-28.js.map +1 -0
- package/dist/nips/nip-33.d.ts +1 -0
- package/dist/nips/nip-33.d.ts.map +1 -0
- package/dist/nips/nip-33.js +1 -0
- package/dist/nips/nip-33.js.map +1 -0
- package/dist/transport/base.d.ts +1 -1
- package/dist/transport/base.d.ts.map +1 -0
- package/dist/transport/base.js +1 -0
- package/dist/transport/base.js.map +1 -0
- package/dist/transport/websocket.d.ts +1 -0
- package/dist/transport/websocket.d.ts.map +1 -0
- package/dist/transport/websocket.js +1 -0
- package/dist/transport/websocket.js.map +1 -0
- package/dist/types/events.d.ts +1 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +1 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/filters.d.ts +1 -0
- package/dist/types/filters.d.ts.map +1 -0
- package/dist/types/filters.js +1 -0
- package/dist/types/filters.js.map +1 -0
- package/dist/types/handlers.d.ts +1 -0
- package/dist/types/handlers.d.ts.map +1 -0
- package/dist/types/handlers.js +1 -0
- package/dist/types/handlers.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logger.d.ts +1 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logger.js +1 -0
- package/dist/types/logger.js.map +1 -0
- package/dist/types/messages.d.ts +1 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +1 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/nostr.d.ts +1 -0
- package/dist/types/nostr.d.ts.map +1 -0
- package/dist/types/nostr.js +1 -0
- package/dist/types/nostr.js.map +1 -0
- package/dist/types/options.d.ts +1 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +1 -0
- package/dist/types/options.js.map +1 -0
- package/dist/types/priority.d.ts +1 -0
- package/dist/types/priority.d.ts.map +1 -0
- package/dist/types/priority.js +1 -0
- package/dist/types/priority.js.map +1 -0
- package/dist/types/relays.d.ts +1 -0
- package/dist/types/relays.d.ts.map +1 -0
- package/dist/types/relays.js +1 -0
- package/dist/types/relays.js.map +1 -0
- package/dist/types/scoring.d.ts +1 -2
- package/dist/types/scoring.d.ts.map +1 -0
- package/dist/types/scoring.js +1 -0
- package/dist/types/scoring.js.map +1 -0
- package/dist/types/socket.d.ts +1 -2
- package/dist/types/socket.d.ts.map +1 -0
- package/dist/types/socket.js +1 -0
- package/dist/types/socket.js.map +1 -0
- package/dist/types/transport.d.ts +1 -0
- package/dist/types/transport.d.ts.map +1 -0
- package/dist/types/transport.js +1 -0
- package/dist/types/transport.js.map +1 -0
- package/dist/types/validation.d.ts +1 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +1 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/types/websocket.d.ts +1 -0
- package/dist/types/websocket.d.ts.map +1 -0
- package/dist/types/websocket.js +1 -0
- package/dist/types/websocket.js.map +1 -0
- package/dist/utils/http.d.ts +1 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +1 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/metrics.d.ts +1 -1
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +1 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +1 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +1 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/package.json +14 -2
- package/dist/__mocks__/logger.d.ts +0 -9
- package/dist/__mocks__/logger.js +0 -6
- package/dist/client.d.ts +0 -129
- package/dist/client.js +0 -259
- package/dist/crypto/schnorr.d.ts +0 -16
- package/dist/crypto/schnorr.js +0 -51
- package/dist/nostr-server.js +0 -107
- package/dist/server.d.ts +0 -27
- package/dist/server.js +0 -132
|
@@ -0,0 +1,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":";AAAA;;;;GAIG;;;AAoDH,8CAQC;AAQD,wDA0CC;AAkCD,8DAwDC;AAnMD;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;CAChB,CAAC;AAIX;;GAEG;AACU,QAAA,uBAAuB,GAAG;IACrC,QAAQ,EAAE,CAAC;IACX,YAAY,EAAE,CAAC;IACf,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;IACnB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,KAAK;IACf,cAAc,EAAE,KAAK;IACrB,kBAAkB,EAAE,KAAK;IACzB,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF;;GAEG;AACU,QAAA,qBAAqB,GAAG;IACnC,gBAAgB,EAAE,KAAK;IACvB,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,KAAK;IACpB,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS,GAAG,KAAK,EAAE,CAAC;QAC5C,OAAO,sBAAc,CAAC,SAAS,CAAC;IAClC,CAAC;IACD,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClF,OAAO,sBAAc,CAAC,WAAW,CAAC;IACpC,CAAC;IACD,OAAO,sBAAc,CAAC,UAAU,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CACpC,OAAuB,EACvB,MAAc;IAEd,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,CAAC,uBAAuB;QACtC,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAA4B,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc,CAAC;QAClC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE1C,mCAAmC;QACnC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,sBAAc,CAAC,SAAS;gBAC3B,gDAAgD;gBAChD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;oBACrE,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;oBAClD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM;YAER,KAAK,sBAAc,CAAC,WAAW;gBAC7B,6DAA6D;gBAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACpC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CACrC,CAAC;oBACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACrB,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;wBACrD,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;gBACD,MAAM;QACV,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AA6BD;;;;GAIG;AACH,SAAgB,yBAAyB,CAAC,MAAc;IACtD,OAAO;QACL,WAAW,CAAC,KAA8B;YACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc,CAAC;YAClC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAE1C,0CAA0C;YAC1C,IAAI,SAAS,KAAK,sBAAc,CAAC,SAAS,EAAE,CAAC;gBAC3C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kBAAkB,CAAC,KAA8B;YAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc,CAAC;YAClC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAE1C,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,sBAAc,CAAC,SAAS;oBAC3B,OAAO,GAAG,CAAC,CAAC,YAAY;gBAC1B,KAAK,sBAAc,CAAC,WAAW;oBAC7B,OAAO,CAAC,CAAC,CAAC,2BAA2B;gBACvC;oBACE,OAAO,CAAC,CAAC,CAAC,YAAY;YAC1B,CAAC;QACH,CAAC;QAED,aAAa,CAAC,QAAiC,EAAE,aAAsC;YACrF,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAc,CAAC;gBACrC,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAE9C,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,SAAS,KAAK,sBAAc,CAAC,WAAW;oBAAE,OAAO,KAAK,CAAC;gBAE3D,qDAAqD;gBACrD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACvC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CACrC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACP,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CACrC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAEP,IAAI,OAAO,KAAK,YAAY;wBAAE,OAAO,KAAK,CAAC;gBAC7C,CAAC;gBAED,gCAAgC;gBAChC,OAAQ,QAAQ,CAAC,UAAqB,GAAI,aAAa,CAAC,UAAqB,CAAC;YAChF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;gBACzD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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"}
|
|
@@ -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
|