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,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NIP-04: Encrypted Direct Message Support
|
|
4
|
+
* @module nips/nip-04
|
|
5
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/04.md
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ENCRYPTED_DM_KIND = void 0;
|
|
9
|
+
exports.createEncryptedDM = createEncryptedDM;
|
|
10
|
+
exports.decryptDM = decryptDM;
|
|
11
|
+
exports.validateEncryptedDM = validateEncryptedDM;
|
|
12
|
+
const nostr_crypto_utils_1 = require("nostr-crypto-utils");
|
|
13
|
+
/**
|
|
14
|
+
* Kind value for encrypted direct messages
|
|
15
|
+
*/
|
|
16
|
+
exports.ENCRYPTED_DM_KIND = 4;
|
|
17
|
+
/**
|
|
18
|
+
* Creates an encrypted direct message event
|
|
19
|
+
* @param content - Message content to encrypt
|
|
20
|
+
* @param recipientPubkey - Recipient's public key
|
|
21
|
+
* @param senderPrivkey - Sender's private key
|
|
22
|
+
* @param tags - Additional tags for the event
|
|
23
|
+
* @returns {Promise<NostrWSMessage>} Encrypted message event
|
|
24
|
+
*/
|
|
25
|
+
async function createEncryptedDM(content, recipientPubkey, senderPrivkey, tags = []) {
|
|
26
|
+
try {
|
|
27
|
+
const encryptedContent = await (0, nostr_crypto_utils_1.encryptMessage)(content, recipientPubkey, senderPrivkey);
|
|
28
|
+
return ['EVENT', {
|
|
29
|
+
kind: exports.ENCRYPTED_DM_KIND,
|
|
30
|
+
content: encryptedContent,
|
|
31
|
+
tags: [
|
|
32
|
+
['p', recipientPubkey],
|
|
33
|
+
...tags
|
|
34
|
+
]
|
|
35
|
+
}];
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
39
|
+
throw new Error(`Failed to create encrypted DM: ${errorMessage}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Decrypts a received direct message event
|
|
44
|
+
* @param message - Received message
|
|
45
|
+
* @param recipientPrivkey - Recipient's private key
|
|
46
|
+
* @param senderPubkey - Sender's public key
|
|
47
|
+
* @param logger - Logger instance
|
|
48
|
+
* @returns {Promise<string>} Decrypted message content
|
|
49
|
+
*/
|
|
50
|
+
async function decryptDM(message, recipientPrivkey, senderPubkey, logger) {
|
|
51
|
+
try {
|
|
52
|
+
if (!Array.isArray(message) || message[0] !== 'EVENT') {
|
|
53
|
+
throw new Error('Invalid message format');
|
|
54
|
+
}
|
|
55
|
+
const event = message[1];
|
|
56
|
+
if (event.kind !== exports.ENCRYPTED_DM_KIND) {
|
|
57
|
+
throw new Error('Not an encrypted DM event');
|
|
58
|
+
}
|
|
59
|
+
return await (0, nostr_crypto_utils_1.decryptMessage)(event.content, senderPubkey, recipientPrivkey);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
63
|
+
logger.error('Failed to decrypt DM:', errorMessage);
|
|
64
|
+
throw new Error(`Failed to decrypt DM: ${errorMessage}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validates an encrypted DM event format
|
|
69
|
+
* @param message - Message to validate
|
|
70
|
+
* @param logger - Logger instance
|
|
71
|
+
* @returns {boolean} True if message follows NIP-04 format
|
|
72
|
+
*/
|
|
73
|
+
function validateEncryptedDM(message, logger) {
|
|
74
|
+
try {
|
|
75
|
+
if (!Array.isArray(message) || message[0] !== 'EVENT') {
|
|
76
|
+
logger.debug('Invalid message format');
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
const event = message[1];
|
|
80
|
+
if (event.kind !== exports.ENCRYPTED_DM_KIND) {
|
|
81
|
+
logger.debug('Not an encrypted DM event');
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
if (!event.content || typeof event.content !== 'string') {
|
|
85
|
+
logger.debug('Missing or invalid content');
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
if (!Array.isArray(event.tags)) {
|
|
89
|
+
logger.debug('Missing tags array');
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
const recipientTag = event.tags.find((tag) => Array.isArray(tag) && tag[0] === 'p' && tag[1]);
|
|
93
|
+
if (!recipientTag) {
|
|
94
|
+
logger.debug('Missing recipient tag');
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
logger.error('Error validating encrypted DM:', error);
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=nip-04.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-04.js","sourceRoot":"","sources":["../../../src/nips/nip-04.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-05: DNS-Based Verification
|
|
3
|
+
* @module nips/nip-05
|
|
4
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/05.md
|
|
5
|
+
*/
|
|
6
|
+
import { Logger } from 'pino';
|
|
7
|
+
/**
|
|
8
|
+
* NIP-05 verification result
|
|
9
|
+
*/
|
|
10
|
+
export interface NIP05VerificationResult {
|
|
11
|
+
valid: boolean;
|
|
12
|
+
pubkey?: string;
|
|
13
|
+
relays?: string[];
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Verifies a NIP-05 identifier
|
|
18
|
+
* @param identifier - Internet identifier (user@domain.com)
|
|
19
|
+
* @param pubkey - Public key to verify
|
|
20
|
+
* @param logger - Logger instance
|
|
21
|
+
* @returns {Promise<NIP05VerificationResult>} Verification result
|
|
22
|
+
*/
|
|
23
|
+
export declare function verifyNIP05Identifier(identifier: string, pubkey: string, logger: Logger): Promise<NIP05VerificationResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Creates metadata event with NIP-05 identifier
|
|
26
|
+
* @param identifier - Internet identifier
|
|
27
|
+
* @param metadata - Additional metadata
|
|
28
|
+
* @returns {Record<string, unknown>} Metadata event content
|
|
29
|
+
*/
|
|
30
|
+
export declare function createNIP05Metadata(identifier: string, metadata?: Record<string, unknown>): Record<string, unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* NIP-05 verification cache interface
|
|
33
|
+
*/
|
|
34
|
+
export interface NIP05VerificationCache {
|
|
35
|
+
/**
|
|
36
|
+
* Gets cached verification result
|
|
37
|
+
* @param identifier - Internet identifier
|
|
38
|
+
* @param pubkey - Public key
|
|
39
|
+
* @returns {NIP05VerificationResult | undefined} Cached result
|
|
40
|
+
*/
|
|
41
|
+
get(identifier: string, pubkey: string): NIP05VerificationResult | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Sets verification result in cache
|
|
44
|
+
* @param identifier - Internet identifier
|
|
45
|
+
* @param pubkey - Public key
|
|
46
|
+
* @param result - Verification result
|
|
47
|
+
* @param ttl - Time to live in seconds
|
|
48
|
+
*/
|
|
49
|
+
set(identifier: string, pubkey: string, result: NIP05VerificationResult, ttl: number): void;
|
|
50
|
+
/**
|
|
51
|
+
* Clears expired entries
|
|
52
|
+
*/
|
|
53
|
+
cleanup(): void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Creates a NIP-05 verification cache
|
|
57
|
+
* @param defaultTTL - Default TTL in seconds
|
|
58
|
+
* @returns {NIP05VerificationCache} Verification cache
|
|
59
|
+
*/
|
|
60
|
+
export declare function createNIP05VerificationCache(defaultTTL?: number): NIP05VerificationCache;
|
|
61
|
+
/**
|
|
62
|
+
* Batch verification interface for multiple identifiers
|
|
63
|
+
*/
|
|
64
|
+
export interface NIP05BatchVerifier {
|
|
65
|
+
/**
|
|
66
|
+
* Adds identifier to verification queue
|
|
67
|
+
* @param identifier - Internet identifier
|
|
68
|
+
* @param pubkey - Public key
|
|
69
|
+
*/
|
|
70
|
+
addToQueue(identifier: string, pubkey: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Verifies all queued identifiers
|
|
73
|
+
* @returns {Promise<Map<string, NIP05VerificationResult>>} Verification results
|
|
74
|
+
*/
|
|
75
|
+
verifyAll(): Promise<Map<string, NIP05VerificationResult>>;
|
|
76
|
+
/**
|
|
77
|
+
* Clears verification queue
|
|
78
|
+
*/
|
|
79
|
+
clearQueue(): void;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Creates a NIP-05 batch verifier
|
|
83
|
+
* @param logger - Logger instance
|
|
84
|
+
* @param cache - Optional verification cache
|
|
85
|
+
* @returns {NIP05BatchVerifier} Batch verifier
|
|
86
|
+
*/
|
|
87
|
+
export declare function createNIP05BatchVerifier(logger: Logger, cache?: NIP05VerificationCache): NIP05BatchVerifier;
|
|
88
|
+
//# sourceMappingURL=nip-05.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-05.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-05.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,CAAC,CAuDlC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAAC;IAE7E;;;;;;OAMG;IACH,GAAG,CACD,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,uBAAuB,EAC/B,GAAG,EAAE,MAAM,GACV,IAAI,CAAC;IAER;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,GAAE,MAAa,GACxB,sBAAsB,CAiDxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAErD;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE3D;;OAEG;IACH,UAAU,IAAI,IAAI,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,sBAAsB,GAC7B,kBAAkB,CAqCpB"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NIP-05: DNS-Based Verification
|
|
4
|
+
* @module nips/nip-05
|
|
5
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/05.md
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.verifyNIP05Identifier = verifyNIP05Identifier;
|
|
9
|
+
exports.createNIP05Metadata = createNIP05Metadata;
|
|
10
|
+
exports.createNIP05VerificationCache = createNIP05VerificationCache;
|
|
11
|
+
exports.createNIP05BatchVerifier = createNIP05BatchVerifier;
|
|
12
|
+
const http_1 = require("../utils/http");
|
|
13
|
+
/**
|
|
14
|
+
* Verifies a NIP-05 identifier
|
|
15
|
+
* @param identifier - Internet identifier (user@domain.com)
|
|
16
|
+
* @param pubkey - Public key to verify
|
|
17
|
+
* @param logger - Logger instance
|
|
18
|
+
* @returns {Promise<NIP05VerificationResult>} Verification result
|
|
19
|
+
*/
|
|
20
|
+
async function verifyNIP05Identifier(identifier, pubkey, logger) {
|
|
21
|
+
try {
|
|
22
|
+
// Parse identifier
|
|
23
|
+
const [name, domain] = identifier.split('@');
|
|
24
|
+
if (!name || !domain) {
|
|
25
|
+
return {
|
|
26
|
+
valid: false,
|
|
27
|
+
error: 'Invalid identifier format'
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Fetch well-known URL
|
|
31
|
+
const url = `https://${domain}/.well-known/nostr.json?name=${name}`;
|
|
32
|
+
const response = await (0, http_1.fetchJson)(url);
|
|
33
|
+
if (!response || !response.names || !response.names[name]) {
|
|
34
|
+
return {
|
|
35
|
+
valid: false,
|
|
36
|
+
error: 'Name not found in well-known file'
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Verify name matches pubkey
|
|
40
|
+
const verifiedPubkey = response.names[name];
|
|
41
|
+
if (!verifiedPubkey) {
|
|
42
|
+
return {
|
|
43
|
+
valid: false,
|
|
44
|
+
error: 'Name not found'
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (verifiedPubkey !== pubkey) {
|
|
48
|
+
return {
|
|
49
|
+
valid: false,
|
|
50
|
+
error: 'Public key mismatch'
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Get associated relays if available
|
|
54
|
+
const relays = response.relays?.[verifiedPubkey];
|
|
55
|
+
return {
|
|
56
|
+
valid: true,
|
|
57
|
+
pubkey: verifiedPubkey,
|
|
58
|
+
relays
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
63
|
+
logger.error(`NIP-05 verification failed: ${errorMessage}`);
|
|
64
|
+
return {
|
|
65
|
+
valid: false,
|
|
66
|
+
error: errorMessage
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Creates metadata event with NIP-05 identifier
|
|
72
|
+
* @param identifier - Internet identifier
|
|
73
|
+
* @param metadata - Additional metadata
|
|
74
|
+
* @returns {Record<string, unknown>} Metadata event content
|
|
75
|
+
*/
|
|
76
|
+
function createNIP05Metadata(identifier, metadata = {}) {
|
|
77
|
+
return {
|
|
78
|
+
...metadata,
|
|
79
|
+
nip05: identifier
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Creates a NIP-05 verification cache
|
|
84
|
+
* @param defaultTTL - Default TTL in seconds
|
|
85
|
+
* @returns {NIP05VerificationCache} Verification cache
|
|
86
|
+
*/
|
|
87
|
+
function createNIP05VerificationCache(defaultTTL = 3600) {
|
|
88
|
+
const cache = new Map();
|
|
89
|
+
function getCacheKey(identifier, pubkey) {
|
|
90
|
+
return `${identifier}:${pubkey}`;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
get(identifier, pubkey) {
|
|
94
|
+
const key = getCacheKey(identifier, pubkey);
|
|
95
|
+
const entry = cache.get(key);
|
|
96
|
+
if (!entry)
|
|
97
|
+
return undefined;
|
|
98
|
+
if (Date.now() > entry.expiresAt) {
|
|
99
|
+
cache.delete(key);
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
return entry.result;
|
|
103
|
+
},
|
|
104
|
+
set(identifier, pubkey, result, ttl = defaultTTL) {
|
|
105
|
+
const key = getCacheKey(identifier, pubkey);
|
|
106
|
+
cache.set(key, {
|
|
107
|
+
result,
|
|
108
|
+
expiresAt: Date.now() + (ttl * 1000)
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
cleanup() {
|
|
112
|
+
const now = Date.now();
|
|
113
|
+
for (const [key, entry] of cache.entries()) {
|
|
114
|
+
if (now > entry.expiresAt) {
|
|
115
|
+
cache.delete(key);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Creates a NIP-05 batch verifier
|
|
123
|
+
* @param logger - Logger instance
|
|
124
|
+
* @param cache - Optional verification cache
|
|
125
|
+
* @returns {NIP05BatchVerifier} Batch verifier
|
|
126
|
+
*/
|
|
127
|
+
function createNIP05BatchVerifier(logger, cache) {
|
|
128
|
+
const queue = new Map();
|
|
129
|
+
return {
|
|
130
|
+
addToQueue(identifier, pubkey) {
|
|
131
|
+
queue.set(identifier, pubkey);
|
|
132
|
+
},
|
|
133
|
+
async verifyAll() {
|
|
134
|
+
const results = new Map();
|
|
135
|
+
for (const [identifier, pubkey] of queue.entries()) {
|
|
136
|
+
// Check cache first
|
|
137
|
+
if (cache) {
|
|
138
|
+
const cached = cache.get(identifier, pubkey);
|
|
139
|
+
if (cached) {
|
|
140
|
+
results.set(identifier, cached);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Verify and cache result
|
|
145
|
+
const result = await verifyNIP05Identifier(identifier, pubkey, logger);
|
|
146
|
+
results.set(identifier, result);
|
|
147
|
+
if (cache) {
|
|
148
|
+
cache.set(identifier, pubkey, result, 3600);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return results;
|
|
152
|
+
},
|
|
153
|
+
clearQueue() {
|
|
154
|
+
queue.clear();
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=nip-05.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-05.js","sourceRoot":"","sources":["../../../src/nips/nip-05.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-09: Event Deletion
|
|
3
|
+
* @module nips/nip-09
|
|
4
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/09.md
|
|
5
|
+
*/
|
|
6
|
+
import type { NostrEvent, NostrSubscriptionEvent } from '../types/events';
|
|
7
|
+
/**
|
|
8
|
+
* Represents the result of a deletion operation
|
|
9
|
+
* @interface DeletionResult
|
|
10
|
+
* @property {boolean} success - Whether the deletion operation was successful
|
|
11
|
+
* @property {string} [error] - Error message if the operation failed
|
|
12
|
+
* @property {string[]} [deletedIds] - Array of successfully deleted event IDs
|
|
13
|
+
*/
|
|
14
|
+
interface DeletionResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
error?: string;
|
|
17
|
+
deletedIds?: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Event deletion kind
|
|
21
|
+
*/
|
|
22
|
+
export declare const EVENT_DELETION_KIND = 5;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a deletion event
|
|
25
|
+
*/
|
|
26
|
+
export declare function createDeletionEvent(eventIds: string[], reason?: string): Omit<NostrEvent, 'id' | 'sig'>;
|
|
27
|
+
/**
|
|
28
|
+
* Validates a deletion event
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateDeletionEvent(event: NostrEvent, _logger: any): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Processes a deletion event
|
|
33
|
+
*/
|
|
34
|
+
export declare function processDeletionEvent(event: NostrEvent, _logger: any, deleteEvent: (id: string) => Promise<boolean>): Promise<DeletionResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Event deletion manager interface
|
|
37
|
+
*/
|
|
38
|
+
export interface EventDeletionManager {
|
|
39
|
+
/**
|
|
40
|
+
* Processes a deletion event
|
|
41
|
+
* @param message - Deletion message
|
|
42
|
+
* @returns {Promise<string[]>} Deleted event IDs
|
|
43
|
+
*/
|
|
44
|
+
processDeletion(message: NostrEvent): Promise<string[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Checks if an event has been deleted
|
|
47
|
+
* @param eventId - Event ID to check
|
|
48
|
+
* @returns {boolean} True if event is deleted
|
|
49
|
+
*/
|
|
50
|
+
isDeleted(eventId: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Gets deletion reason for an event
|
|
53
|
+
* @param eventId - Event ID
|
|
54
|
+
* @returns {string | undefined} Deletion reason if available
|
|
55
|
+
*/
|
|
56
|
+
getDeletionReason(eventId: string): string | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Gets all deleted events
|
|
59
|
+
* @returns {Map<string, string>} Map of event IDs to deletion reasons
|
|
60
|
+
*/
|
|
61
|
+
getDeletedEvents(): Map<string, string>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Creates an event deletion manager
|
|
65
|
+
* @param _logger - Logger instance
|
|
66
|
+
* @returns {EventDeletionManager} Deletion manager
|
|
67
|
+
*/
|
|
68
|
+
export declare function createEventDeletionManager(_logger: any): EventDeletionManager;
|
|
69
|
+
/**
|
|
70
|
+
* Event deletion subscription manager interface
|
|
71
|
+
*/
|
|
72
|
+
export interface DeletionSubscriptionManager {
|
|
73
|
+
/**
|
|
74
|
+
* Creates a subscription for deletion events
|
|
75
|
+
* @param eventIds - Event IDs to monitor
|
|
76
|
+
* @returns {NostrSubscriptionEvent} Subscription message
|
|
77
|
+
*/
|
|
78
|
+
subscribeToDeletions(eventIds: string[]): NostrSubscriptionEvent;
|
|
79
|
+
/**
|
|
80
|
+
* Creates a subscription for all deletions by a user
|
|
81
|
+
* @param pubkey - Public key of user
|
|
82
|
+
* @returns {NostrSubscriptionEvent} Subscription message
|
|
83
|
+
*/
|
|
84
|
+
subscribeToUserDeletions(pubkey: string): NostrSubscriptionEvent;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Creates a deletion subscription manager
|
|
88
|
+
* @param _logger - Logger instance
|
|
89
|
+
* @returns {DeletionSubscriptionManager} Subscription manager
|
|
90
|
+
*/
|
|
91
|
+
export declare function createDeletionSubscriptionManager(_logger: any): DeletionSubscriptionManager;
|
|
92
|
+
export {};
|
|
93
|
+
//# sourceMappingURL=nip-09.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-09.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-09.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE1E;;;;;;GAMG;AACH,UAAU,cAAc;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,KAAK,CAAC,CAQhC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,OAAO,CAAC,CA6BlB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,GAAG,EACZ,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC5C,OAAO,CAAC,cAAc,CAAC,CAgDzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAExD;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAEvD;;;OAGG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,GAAG,GACX,oBAAoB,CAgDtB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC;IAEjE;;;;OAIG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,CAAC;CAClE;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,GAAG,GACX,2BAA2B,CAsB7B"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NIP-09: Event Deletion
|
|
4
|
+
* @module nips/nip-09
|
|
5
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/09.md
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.EVENT_DELETION_KIND = void 0;
|
|
9
|
+
exports.createDeletionEvent = createDeletionEvent;
|
|
10
|
+
exports.validateDeletionEvent = validateDeletionEvent;
|
|
11
|
+
exports.processDeletionEvent = processDeletionEvent;
|
|
12
|
+
exports.createEventDeletionManager = createEventDeletionManager;
|
|
13
|
+
exports.createDeletionSubscriptionManager = createDeletionSubscriptionManager;
|
|
14
|
+
/**
|
|
15
|
+
* Event deletion kind
|
|
16
|
+
*/
|
|
17
|
+
exports.EVENT_DELETION_KIND = 5;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a deletion event
|
|
20
|
+
*/
|
|
21
|
+
function createDeletionEvent(eventIds, reason) {
|
|
22
|
+
return {
|
|
23
|
+
kind: exports.EVENT_DELETION_KIND,
|
|
24
|
+
created_at: Math.floor(Date.now() / 1000),
|
|
25
|
+
tags: eventIds.map(id => ['e', id]),
|
|
26
|
+
content: reason || '',
|
|
27
|
+
pubkey: '', // To be filled by the caller
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Validates a deletion event
|
|
32
|
+
*/
|
|
33
|
+
async function validateDeletionEvent(event, _logger) {
|
|
34
|
+
try {
|
|
35
|
+
// Must be kind 5
|
|
36
|
+
if (event.kind !== exports.EVENT_DELETION_KIND) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
// Must have at least one e tag
|
|
40
|
+
const eventIds = event.tags
|
|
41
|
+
.filter((tag) => Array.isArray(tag) && tag[0] === 'e' && typeof tag[1] === 'string')
|
|
42
|
+
.map(tag => tag[1]);
|
|
43
|
+
if (eventIds.length === 0) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
// Validate each event ID format
|
|
47
|
+
const validHexString = /^[0-9a-f]{64}$/;
|
|
48
|
+
const invalidIds = eventIds.filter(id => !validHexString.test(id));
|
|
49
|
+
if (invalidIds.length > 0) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Processes a deletion event
|
|
60
|
+
*/
|
|
61
|
+
async function processDeletionEvent(event, _logger, deleteEvent) {
|
|
62
|
+
try {
|
|
63
|
+
if (!validateDeletionEvent(event, _logger)) {
|
|
64
|
+
return {
|
|
65
|
+
success: false,
|
|
66
|
+
error: 'Invalid deletion event'
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const eventIds = event.tags
|
|
70
|
+
.filter((tag) => tag[0] === 'e')
|
|
71
|
+
.map(tag => tag[1]);
|
|
72
|
+
const deletedIds = [];
|
|
73
|
+
const failedIds = [];
|
|
74
|
+
for (const eventId of eventIds) {
|
|
75
|
+
try {
|
|
76
|
+
const success = await deleteEvent(eventId);
|
|
77
|
+
if (success) {
|
|
78
|
+
deletedIds.push(eventId);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
failedIds.push(eventId);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
failedIds.push(eventId);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (failedIds.length > 0) {
|
|
89
|
+
return {
|
|
90
|
+
success: false,
|
|
91
|
+
error: `Failed to delete events: ${failedIds.join(', ')}`,
|
|
92
|
+
deletedIds
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
success: true,
|
|
97
|
+
deletedIds
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
return {
|
|
102
|
+
success: false,
|
|
103
|
+
error: 'Unknown error'
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Creates an event deletion manager
|
|
109
|
+
* @param _logger - Logger instance
|
|
110
|
+
* @returns {EventDeletionManager} Deletion manager
|
|
111
|
+
*/
|
|
112
|
+
function createEventDeletionManager(_logger) {
|
|
113
|
+
// Map of deleted event IDs to deletion reasons
|
|
114
|
+
const deletedEvents = new Map();
|
|
115
|
+
// Map of deleted event IDs to deletion event IDs
|
|
116
|
+
const deletionEvents = new Map();
|
|
117
|
+
return {
|
|
118
|
+
async processDeletion(message) {
|
|
119
|
+
try {
|
|
120
|
+
if (!validateDeletionEvent(message, _logger)) {
|
|
121
|
+
throw new Error('Invalid deletion event');
|
|
122
|
+
}
|
|
123
|
+
const eventIds = message.tags
|
|
124
|
+
.filter(tag => tag[0] === 'e')
|
|
125
|
+
.map(tag => tag[1]);
|
|
126
|
+
const { content: reason, id: deletionId } = message;
|
|
127
|
+
// Process each event ID
|
|
128
|
+
eventIds.forEach(eventId => {
|
|
129
|
+
// Only delete if not already deleted or if this deletion is newer
|
|
130
|
+
const existingDeletionId = deletionEvents.get(eventId);
|
|
131
|
+
if (!existingDeletionId || deletionId > existingDeletionId) {
|
|
132
|
+
deletedEvents.set(eventId, reason);
|
|
133
|
+
deletionEvents.set(eventId, deletionId);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
return eventIds;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
isDeleted(eventId) {
|
|
143
|
+
return deletedEvents.has(eventId);
|
|
144
|
+
},
|
|
145
|
+
getDeletionReason(eventId) {
|
|
146
|
+
return deletedEvents.get(eventId);
|
|
147
|
+
},
|
|
148
|
+
getDeletedEvents() {
|
|
149
|
+
return new Map(deletedEvents);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Creates a deletion subscription manager
|
|
155
|
+
* @param _logger - Logger instance
|
|
156
|
+
* @returns {DeletionSubscriptionManager} Subscription manager
|
|
157
|
+
*/
|
|
158
|
+
function createDeletionSubscriptionManager(_logger) {
|
|
159
|
+
return {
|
|
160
|
+
subscribeToDeletions(eventIds) {
|
|
161
|
+
return {
|
|
162
|
+
subscriptionId: `deletion_${eventIds.join('_')}`,
|
|
163
|
+
filters: [{
|
|
164
|
+
kinds: [exports.EVENT_DELETION_KIND],
|
|
165
|
+
'#e': eventIds
|
|
166
|
+
}]
|
|
167
|
+
};
|
|
168
|
+
},
|
|
169
|
+
subscribeToUserDeletions(pubkey) {
|
|
170
|
+
return {
|
|
171
|
+
subscriptionId: `user_deletion_${pubkey}`,
|
|
172
|
+
filters: [{
|
|
173
|
+
kinds: [exports.EVENT_DELETION_KIND],
|
|
174
|
+
authors: [pubkey]
|
|
175
|
+
}]
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=nip-09.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-09.js","sourceRoot":"","sources":["../../../src/nips/nip-09.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAyBH,kDAWC;AAKD,sDAgCC;AAKD,oDAoDC;AAuCD,gEAkDC;AA0BD,8EAwBC;AA5PD;;GAEG;AACU,QAAA,mBAAmB,GAAG,CAAC,CAAC;AAErC;;GAEG;AACH,SAAgB,mBAAmB,CACjC,QAAkB,EAClB,MAAe;IAEf,OAAO;QACL,IAAI,EAAE,2BAAmB;QACzB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACzC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACnC,OAAO,EAAE,MAAM,IAAI,EAAE;QACrB,MAAM,EAAE,EAAE,EAAE,6BAA6B;KAC1C,CAAC;AACJ,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB,CACzC,KAAiB,EACjB,OAAY;IAEZ,IAAI,CAAC;QACH,iBAAiB;QACjB,IAAI,KAAK,CAAC,IAAI,KAAK,2BAAmB,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI;aACxB,MAAM,CAAC,CAAC,GAAa,EAA2B,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;aACpE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gCAAgC;QAChC,MAAM,cAAc,GAAG,gBAAgB,CAAC;QACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEnE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,KAAiB,EACjB,OAAY,EACZ,WAA6C;IAE7C,IAAI,CAAC;QACH,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAC3C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,wBAAwB;aAChC,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI;aACxB,MAAM,CAAC,CAAC,GAAG,EAA2B,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;aACxD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtB,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC3C,IAAI,OAAO,EAAE,CAAC;oBACZ,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,4BAA4B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACzD,UAAU;aACX,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU;SACX,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,eAAe;SACvB,CAAC;IACJ,CAAC;AACH,CAAC;AAkCD;;;;GAIG;AACH,SAAgB,0BAA0B,CACxC,OAAY;IAEZ,+CAA+C;IAC/C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,iDAAiD;IACjD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,OAAO;QACL,KAAK,CAAC,eAAe,CAAC,OAAmB;YACvC,IAAI,CAAC;gBACH,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC7C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI;qBAC1B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;qBAC7B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEtB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;gBAEpD,wBAAwB;gBACxB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACzB,kEAAkE;oBAClE,MAAM,kBAAkB,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACvD,IAAI,CAAC,kBAAkB,IAAI,UAAU,GAAG,kBAAkB,EAAE,CAAC;wBAC3D,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBACnC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,SAAS,CAAC,OAAe;YACvB,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,iBAAiB,CAAC,OAAe;YAC/B,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,gBAAgB;YACd,OAAO,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC;AAqBD;;;;GAIG;AACH,SAAgB,iCAAiC,CAC/C,OAAY;IAEZ,OAAO;QACL,oBAAoB,CAAC,QAAkB;YACrC,OAAO;gBACL,cAAc,EAAE,YAAY,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChD,OAAO,EAAE,CAAC;wBACR,KAAK,EAAE,CAAC,2BAAmB,CAAC;wBAC5B,IAAI,EAAE,QAAQ;qBACf,CAAC;aACH,CAAC;QACJ,CAAC;QAED,wBAAwB,CAAC,MAAc;YACrC,OAAO;gBACL,cAAc,EAAE,iBAAiB,MAAM,EAAE;gBACzC,OAAO,EAAE,CAAC;wBACR,KAAK,EAAE,CAAC,2BAAmB,CAAC;wBAC5B,OAAO,EAAE,CAAC,MAAM,CAAC;qBAClB,CAAC;aACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|