nostr-websocket-utils 0.3.16 → 0.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/browser/nostr-websocket-utils.min.js +2 -2
- package/dist/browser/nostr-websocket-utils.min.js.map +7 -1
- package/dist/browser/report.html +2 -2
- package/dist/cjs/core/client.d.ts.map +1 -1
- package/dist/cjs/core/client.js +10 -3
- package/dist/cjs/core/client.js.map +1 -1
- package/dist/cjs/core/nostr-server.d.ts.map +1 -1
- package/dist/cjs/core/nostr-server.js +2 -1
- package/dist/cjs/core/nostr-server.js.map +1 -1
- package/dist/cjs/core/queue.js +6 -6
- package/dist/cjs/core/queue.js.map +1 -1
- package/dist/cjs/core/server.d.ts.map +1 -1
- package/dist/cjs/core/server.js +2 -1
- package/dist/cjs/core/server.js.map +1 -1
- package/dist/cjs/nips/index.d.ts +2 -0
- package/dist/cjs/nips/index.d.ts.map +1 -1
- package/dist/cjs/nips/index.js +5 -1
- package/dist/cjs/nips/index.js.map +1 -1
- package/dist/cjs/nips/nip-26.d.ts.map +1 -1
- package/dist/cjs/nips/nip-26.js +3 -7
- package/dist/cjs/nips/nip-26.js.map +1 -1
- package/dist/cjs/nips/nip-44.d.ts +69 -0
- package/dist/cjs/nips/nip-44.d.ts.map +1 -0
- package/dist/cjs/nips/nip-44.js +143 -0
- package/dist/cjs/nips/nip-44.js.map +1 -0
- package/dist/cjs/nips/nip-46.d.ts +112 -0
- package/dist/cjs/nips/nip-46.d.ts.map +1 -0
- package/dist/cjs/nips/nip-46.js +123 -0
- package/dist/cjs/nips/nip-46.js.map +1 -0
- package/dist/cjs/transport/websocket.d.ts.map +1 -1
- package/dist/cjs/transport/websocket.js +3 -0
- package/dist/cjs/transport/websocket.js.map +1 -1
- package/dist/cjs/utils/rate-limiter.d.ts +5 -0
- package/dist/cjs/utils/rate-limiter.d.ts.map +1 -1
- package/dist/cjs/utils/rate-limiter.js +28 -0
- package/dist/cjs/utils/rate-limiter.js.map +1 -1
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +10 -3
- package/dist/core/client.js.map +1 -1
- package/dist/core/nostr-server.d.ts.map +1 -1
- package/dist/core/nostr-server.js +2 -1
- package/dist/core/nostr-server.js.map +1 -1
- package/dist/core/queue.js +6 -6
- package/dist/core/queue.js.map +1 -1
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +2 -1
- package/dist/core/server.js.map +1 -1
- package/dist/nips/index.d.ts +2 -0
- package/dist/nips/index.d.ts.map +1 -1
- package/dist/nips/index.js +5 -1
- package/dist/nips/index.js.map +1 -1
- package/dist/nips/nip-26.d.ts.map +1 -1
- package/dist/nips/nip-26.js +4 -8
- package/dist/nips/nip-26.js.map +1 -1
- package/dist/nips/nip-44.d.ts +69 -0
- package/dist/nips/nip-44.d.ts.map +1 -0
- package/dist/nips/nip-44.js +134 -0
- package/dist/nips/nip-44.js.map +1 -0
- package/dist/nips/nip-46.d.ts +112 -0
- package/dist/nips/nip-46.d.ts.map +1 -0
- package/dist/nips/nip-46.js +119 -0
- package/dist/nips/nip-46.js.map +1 -0
- package/dist/transport/websocket.d.ts.map +1 -1
- package/dist/transport/websocket.js +3 -0
- package/dist/transport/websocket.js.map +1 -1
- package/dist/utils/rate-limiter.d.ts +5 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -1
- package/dist/utils/rate-limiter.js +28 -0
- package/dist/utils/rate-limiter.js.map +1 -1
- package/package.json +5 -9
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-46: Nostr Connect / Remote Signing Transport
|
|
3
|
+
* @module nips/nip-46
|
|
4
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/46.md
|
|
5
|
+
*
|
|
6
|
+
* nostr-crypto-utils provides the NIP-46 protocol layer (crypto, encoding,
|
|
7
|
+
* message formatting) but has no I/O. This module adds the WebSocket relay
|
|
8
|
+
* transport on top — subscribing for kind 24133 responses, publishing
|
|
9
|
+
* wrapped requests, and correlating request/response pairs.
|
|
10
|
+
*/
|
|
11
|
+
import { nip46 } from 'nostr-crypto-utils';
|
|
12
|
+
import type { Nip46Session, Nip46Request, Nip46Response, SignedNostrEvent, BunkerURI } from 'nostr-crypto-utils';
|
|
13
|
+
import { NostrWSClient } from '../core/client.js';
|
|
14
|
+
import type { NostrWSMessage } from '../types/messages.js';
|
|
15
|
+
/**
|
|
16
|
+
* Options for creating a NIP-46 transport
|
|
17
|
+
*/
|
|
18
|
+
export interface Nip46TransportOptions {
|
|
19
|
+
/** Timeout for waiting for a response (ms). Defaults to 60000 (60s). */
|
|
20
|
+
timeout?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Result of sending a NIP-46 request
|
|
24
|
+
*/
|
|
25
|
+
export interface Nip46TransportResult {
|
|
26
|
+
/** The JSON-RPC response from the remote signer */
|
|
27
|
+
response: Nip46Response;
|
|
28
|
+
/** The raw kind 24133 event that carried the response */
|
|
29
|
+
rawEvent: SignedNostrEvent;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A thin transport layer that bridges nostr-crypto-utils NIP-46 protocol
|
|
33
|
+
* with the WebSocket relay infrastructure in this library.
|
|
34
|
+
*
|
|
35
|
+
* Usage:
|
|
36
|
+
* ```ts
|
|
37
|
+
* const client = new NostrWSClient(['wss://relay.example.com']);
|
|
38
|
+
* await client.connect();
|
|
39
|
+
*
|
|
40
|
+
* const session = nip46.createSession(remotePubkey);
|
|
41
|
+
* const transport = new Nip46Transport(client, session);
|
|
42
|
+
*
|
|
43
|
+
* // Send a connect request
|
|
44
|
+
* const connectReq = nip46.connectRequest(remotePubkey, secret);
|
|
45
|
+
* const result = await transport.sendRequest(connectReq);
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare class Nip46Transport {
|
|
49
|
+
private client;
|
|
50
|
+
private session;
|
|
51
|
+
private timeout;
|
|
52
|
+
constructor(client: NostrWSClient, session: Nip46Session, options?: Nip46TransportOptions);
|
|
53
|
+
/**
|
|
54
|
+
* Subscribe for NIP-46 response events addressed to our ephemeral pubkey.
|
|
55
|
+
* This sends a REQ message to the relay with the appropriate filter.
|
|
56
|
+
* @param subscriptionId - Subscription ID for the REQ message
|
|
57
|
+
* @param since - Optional since timestamp for the filter
|
|
58
|
+
* @returns The subscription message that was sent
|
|
59
|
+
*/
|
|
60
|
+
subscribe(subscriptionId: string, since?: number): Promise<NostrWSMessage>;
|
|
61
|
+
/**
|
|
62
|
+
* Wrap and publish a NIP-46 request as a kind 24133 event.
|
|
63
|
+
* @param request - NIP-46 JSON-RPC request
|
|
64
|
+
* @returns The signed kind 24133 event that was published
|
|
65
|
+
*/
|
|
66
|
+
publishRequest(request: Nip46Request): Promise<SignedNostrEvent>;
|
|
67
|
+
/**
|
|
68
|
+
* Attempt to unwrap a kind 24133 event into a NIP-46 request or response.
|
|
69
|
+
* Returns null if the event is not kind 24133 or decryption fails.
|
|
70
|
+
* @param event - A signed Nostr event
|
|
71
|
+
* @returns Decrypted NIP-46 payload, or null on failure
|
|
72
|
+
*/
|
|
73
|
+
unwrapEvent(event: SignedNostrEvent): Nip46Request | Nip46Response | null;
|
|
74
|
+
/**
|
|
75
|
+
* Get the NIP-46 response filter for this session.
|
|
76
|
+
* Useful for manual subscription management.
|
|
77
|
+
* @param since - Optional since timestamp
|
|
78
|
+
* @returns Filter object for kind 24133 events tagged to our pubkey
|
|
79
|
+
*/
|
|
80
|
+
getResponseFilter(since?: number): {
|
|
81
|
+
kinds: number[];
|
|
82
|
+
'#p': string[];
|
|
83
|
+
since?: number;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Get the current session (read-only info).
|
|
87
|
+
* @returns The session's client and remote pubkeys
|
|
88
|
+
*/
|
|
89
|
+
getSessionInfo(): {
|
|
90
|
+
clientPubkey: string;
|
|
91
|
+
remotePubkey: string;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** Parse a bunker:// URI */
|
|
95
|
+
export declare const parseBunkerURI: (uri: string) => BunkerURI;
|
|
96
|
+
/** Create a bunker:// URI */
|
|
97
|
+
export declare const createBunkerURI: (remotePubkey: string, relays: string[], secret?: string) => string;
|
|
98
|
+
/** Validate a bunker:// URI */
|
|
99
|
+
export declare const validateBunkerURI: typeof nip46.validateBunkerURI;
|
|
100
|
+
/** Create a new NIP-46 session */
|
|
101
|
+
export declare const createNip46Session: typeof nip46.createSession;
|
|
102
|
+
/** Restore a NIP-46 session */
|
|
103
|
+
export declare const restoreNip46Session: typeof nip46.restoreSession;
|
|
104
|
+
/** Create a 'connect' request */
|
|
105
|
+
export declare const connectRequest: typeof nip46.connectRequest;
|
|
106
|
+
/** Create a 'ping' request */
|
|
107
|
+
export declare const pingRequest: typeof nip46.pingRequest;
|
|
108
|
+
/** Create a 'get_public_key' request */
|
|
109
|
+
export declare const getPublicKeyRequest: typeof nip46.getPublicKeyRequest;
|
|
110
|
+
/** Create a 'sign_event' request */
|
|
111
|
+
export declare const signEventRequest: typeof nip46.signEventRequest;
|
|
112
|
+
//# sourceMappingURL=nip-46.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-46.d.ts","sourceRoot":"","sources":["../../src/nips/nip-46.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,SAAS,EACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,QAAQ,EAAE,aAAa,CAAC;IACxB,yDAAyD;IACzD,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGtB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,qBAA0B;IAOrC;;;;;;OAMG;IACG,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAWhF;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAatE;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,GAAG,aAAa,GAAG,IAAI;IAUzE;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAItF;;;OAGG;IACH,cAAc,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;CAGjE;AAKD,4BAA4B;AAC5B,eAAO,MAAM,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAgC,CAAC;AAE/E,6BAA6B;AAC7B,eAAO,MAAM,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAA8B,CAAC;AAE1H,+BAA+B;AAC/B,eAAO,MAAM,iBAAiB,EAAE,OAAO,KAAK,CAAC,iBAA2C,CAAC;AAEzF,kCAAkC;AAClC,eAAO,MAAM,kBAAkB,EAAE,OAAO,KAAK,CAAC,aAAmC,CAAC;AAElF,+BAA+B;AAC/B,eAAO,MAAM,mBAAmB,EAAE,OAAO,KAAK,CAAC,cAAqC,CAAC;AAErF,iCAAiC;AACjC,eAAO,MAAM,cAAc,EAAE,OAAO,KAAK,CAAC,cAAqC,CAAC;AAEhF,8BAA8B;AAC9B,eAAO,MAAM,WAAW,EAAE,OAAO,KAAK,CAAC,WAA+B,CAAC;AAEvE,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,EAAE,OAAO,KAAK,CAAC,mBAA+C,CAAC;AAE/F,oCAAoC;AACpC,eAAO,MAAM,gBAAgB,EAAE,OAAO,KAAK,CAAC,gBAAyC,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-46: Nostr Connect / Remote Signing Transport
|
|
3
|
+
* @module nips/nip-46
|
|
4
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/46.md
|
|
5
|
+
*
|
|
6
|
+
* nostr-crypto-utils provides the NIP-46 protocol layer (crypto, encoding,
|
|
7
|
+
* message formatting) but has no I/O. This module adds the WebSocket relay
|
|
8
|
+
* transport on top — subscribing for kind 24133 responses, publishing
|
|
9
|
+
* wrapped requests, and correlating request/response pairs.
|
|
10
|
+
*/
|
|
11
|
+
import { nip46 } from 'nostr-crypto-utils';
|
|
12
|
+
import { getLogger } from '../utils/logger.js';
|
|
13
|
+
const logger = getLogger('NIP-46');
|
|
14
|
+
/**
|
|
15
|
+
* A thin transport layer that bridges nostr-crypto-utils NIP-46 protocol
|
|
16
|
+
* with the WebSocket relay infrastructure in this library.
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* ```ts
|
|
20
|
+
* const client = new NostrWSClient(['wss://relay.example.com']);
|
|
21
|
+
* await client.connect();
|
|
22
|
+
*
|
|
23
|
+
* const session = nip46.createSession(remotePubkey);
|
|
24
|
+
* const transport = new Nip46Transport(client, session);
|
|
25
|
+
*
|
|
26
|
+
* // Send a connect request
|
|
27
|
+
* const connectReq = nip46.connectRequest(remotePubkey, secret);
|
|
28
|
+
* const result = await transport.sendRequest(connectReq);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export class Nip46Transport {
|
|
32
|
+
constructor(client, session, options = {}) {
|
|
33
|
+
this.client = client;
|
|
34
|
+
this.session = session;
|
|
35
|
+
this.timeout = options.timeout ?? 60000;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Subscribe for NIP-46 response events addressed to our ephemeral pubkey.
|
|
39
|
+
* This sends a REQ message to the relay with the appropriate filter.
|
|
40
|
+
* @param subscriptionId - Subscription ID for the REQ message
|
|
41
|
+
* @param since - Optional since timestamp for the filter
|
|
42
|
+
* @returns The subscription message that was sent
|
|
43
|
+
*/
|
|
44
|
+
async subscribe(subscriptionId, since) {
|
|
45
|
+
const filter = nip46.createResponseFilter(this.session.clientPubkey, since);
|
|
46
|
+
const message = ['REQ', {
|
|
47
|
+
subscription_id: subscriptionId,
|
|
48
|
+
filters: [filter]
|
|
49
|
+
}];
|
|
50
|
+
await this.client.sendMessage(message);
|
|
51
|
+
logger.debug({ subscriptionId, filter }, 'Subscribed for NIP-46 responses');
|
|
52
|
+
return message;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Wrap and publish a NIP-46 request as a kind 24133 event.
|
|
56
|
+
* @param request - NIP-46 JSON-RPC request
|
|
57
|
+
* @returns The signed kind 24133 event that was published
|
|
58
|
+
*/
|
|
59
|
+
async publishRequest(request) {
|
|
60
|
+
const event = await nip46.wrapEvent(request, this.session, this.session.remotePubkey);
|
|
61
|
+
const message = ['EVENT', event];
|
|
62
|
+
await this.client.sendMessage(message);
|
|
63
|
+
logger.debug({ requestId: request.id, method: request.method }, 'Published NIP-46 request');
|
|
64
|
+
return event;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Attempt to unwrap a kind 24133 event into a NIP-46 request or response.
|
|
68
|
+
* Returns null if the event is not kind 24133 or decryption fails.
|
|
69
|
+
* @param event - A signed Nostr event
|
|
70
|
+
* @returns Decrypted NIP-46 payload, or null on failure
|
|
71
|
+
*/
|
|
72
|
+
unwrapEvent(event) {
|
|
73
|
+
try {
|
|
74
|
+
return nip46.unwrapEvent(event, this.session);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
78
|
+
logger.debug({ error: errorMessage }, 'Failed to unwrap NIP-46 event');
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the NIP-46 response filter for this session.
|
|
84
|
+
* Useful for manual subscription management.
|
|
85
|
+
* @param since - Optional since timestamp
|
|
86
|
+
* @returns Filter object for kind 24133 events tagged to our pubkey
|
|
87
|
+
*/
|
|
88
|
+
getResponseFilter(since) {
|
|
89
|
+
return nip46.createResponseFilter(this.session.clientPubkey, since);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get the current session (read-only info).
|
|
93
|
+
* @returns The session's client and remote pubkeys
|
|
94
|
+
*/
|
|
95
|
+
getSessionInfo() {
|
|
96
|
+
return nip46.getSessionInfo(this.session);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ─── Convenience re-exports from nostr-crypto-utils ─────────────────────────
|
|
100
|
+
// These let consumers access NIP-46 protocol helpers without a separate import.
|
|
101
|
+
/** Parse a bunker:// URI */
|
|
102
|
+
export const parseBunkerURI = nip46.parseBunkerURI;
|
|
103
|
+
/** Create a bunker:// URI */
|
|
104
|
+
export const createBunkerURI = nip46.createBunkerURI;
|
|
105
|
+
/** Validate a bunker:// URI */
|
|
106
|
+
export const validateBunkerURI = nip46.validateBunkerURI;
|
|
107
|
+
/** Create a new NIP-46 session */
|
|
108
|
+
export const createNip46Session = nip46.createSession;
|
|
109
|
+
/** Restore a NIP-46 session */
|
|
110
|
+
export const restoreNip46Session = nip46.restoreSession;
|
|
111
|
+
/** Create a 'connect' request */
|
|
112
|
+
export const connectRequest = nip46.connectRequest;
|
|
113
|
+
/** Create a 'ping' request */
|
|
114
|
+
export const pingRequest = nip46.pingRequest;
|
|
115
|
+
/** Create a 'get_public_key' request */
|
|
116
|
+
export const getPublicKeyRequest = nip46.getPublicKeyRequest;
|
|
117
|
+
/** Create a 'sign_event' request */
|
|
118
|
+
export const signEventRequest = nip46.signEventRequest;
|
|
119
|
+
//# sourceMappingURL=nip-46.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-46.js","sourceRoot":"","sources":["../../src/nips/nip-46.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIlD,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,OAAO,CAAC,WAAW,CAAqC;gBAE5C,OAAO,GAAE,gBAAqB;IAIpC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIlD,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,OAAO,CAAC,WAAW,CAAqC;gBAE5C,OAAO,GAAE,gBAAqB;IAIpC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DxC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtD,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;YAOxD,mBAAmB;IAsBjC;;OAEG;IACI,oBAAoB,IAAI,MAAM,EAAE;IAIvC;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAI9C"}
|
|
@@ -17,6 +17,9 @@ export class WebSocketTransport extends BaseTransport {
|
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
try {
|
|
20
|
+
if (endpoint.startsWith('ws://') && !endpoint.includes('localhost') && !endpoint.includes('127.0.0.1')) {
|
|
21
|
+
console.warn('[nostr-websocket] WARNING: Connecting over plaintext ws:// — messages are not encrypted');
|
|
22
|
+
}
|
|
20
23
|
const ws = new WebSocket(endpoint);
|
|
21
24
|
ws.on('open', () => {
|
|
22
25
|
this.trackMetric(endpoint, 'connection', true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,12 +75,17 @@ export declare function createConnectionRateLimiter(config: {
|
|
|
75
75
|
export declare class RateLimiterImpl implements RateLimiter {
|
|
76
76
|
private clients;
|
|
77
77
|
private config;
|
|
78
|
+
private checkCount;
|
|
78
79
|
constructor(config: RateLimitConfig);
|
|
79
80
|
getClientState(clientId: string): ClientState;
|
|
80
81
|
shouldLimit(clientId: string, message: NostrWSMessage): Promise<boolean>;
|
|
81
82
|
recordRequest(clientId: string, message: NostrWSMessage): void;
|
|
82
83
|
getRemainingRequests(clientId: string, messageType: string): number;
|
|
83
84
|
isBlocked(clientId: string): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Remove stale client entries to prevent memory leaks
|
|
87
|
+
*/
|
|
88
|
+
private cleanup;
|
|
84
89
|
}
|
|
85
90
|
export {};
|
|
86
91
|
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,UAAU,WAAW;IACnB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IACpE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CAC/C;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAoB/D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,YAAsB,EAC7D,OAAO,EAAE,MAAM,GACd,WAAW,CAMb;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpD;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/D;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE;IACN,uBAAuB,EAAE,MAAM,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB,EACD,MAAM,EAAE,MAAM,GACb,qBAAqB,CAsFvB;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,MAAM,CAA4B;
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,UAAU,WAAW;IACnB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IACpE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CAC/C;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAoB/D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,YAAsB,EAC7D,OAAO,EAAE,MAAM,GACd,WAAW,CAMb;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpD;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/D;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE;IACN,uBAAuB,EAAE,MAAM,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB,EACD,MAAM,EAAE,MAAM,GACb,qBAAqB,CAsFvB;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,UAAU,CAAK;gBAEX,MAAM,EAAE,eAAe;IAQ5B,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IASvC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC9E,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAO9D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAQnE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK3C;;OAEG;IACH,OAAO,CAAC,OAAO;CAqBhB"}
|
|
@@ -120,6 +120,7 @@ export function createConnectionRateLimiter(config, logger) {
|
|
|
120
120
|
export class RateLimiterImpl {
|
|
121
121
|
constructor(config) {
|
|
122
122
|
this.clients = new Map();
|
|
123
|
+
this.checkCount = 0;
|
|
123
124
|
this.config = {
|
|
124
125
|
windowMs: config.windowMs || 60000,
|
|
125
126
|
maxRequests: config.maxRequests || 100,
|
|
@@ -135,6 +136,11 @@ export class RateLimiterImpl {
|
|
|
135
136
|
return state;
|
|
136
137
|
}
|
|
137
138
|
async shouldLimit(clientId, message) {
|
|
139
|
+
// Periodically clean up stale client entries to prevent memory leaks
|
|
140
|
+
this.checkCount++;
|
|
141
|
+
if (this.checkCount % 100 === 0) {
|
|
142
|
+
this.cleanup();
|
|
143
|
+
}
|
|
138
144
|
const now = Date.now();
|
|
139
145
|
const state = this.getClientState(clientId);
|
|
140
146
|
// Check if client is blocked
|
|
@@ -173,5 +179,27 @@ export class RateLimiterImpl {
|
|
|
173
179
|
const state = this.getClientState(clientId);
|
|
174
180
|
return !!state.blockedUntil && state.blockedUntil > Date.now();
|
|
175
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Remove stale client entries to prevent memory leaks
|
|
184
|
+
*/
|
|
185
|
+
cleanup() {
|
|
186
|
+
const now = Date.now();
|
|
187
|
+
for (const [key, state] of this.clients) {
|
|
188
|
+
// Remove if blocked period has expired and no recent requests
|
|
189
|
+
const cutoff = now - this.config.windowMs - this.config.blockDurationMs;
|
|
190
|
+
// Check if all request arrays are empty or stale
|
|
191
|
+
let hasRecentActivity = false;
|
|
192
|
+
for (const [, timestamps] of state.requests) {
|
|
193
|
+
if (timestamps.length > 0 && timestamps[timestamps.length - 1] > cutoff) {
|
|
194
|
+
hasRecentActivity = true;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Also keep if still actively blocked
|
|
199
|
+
if (!hasRecentActivity && (!state.blockedUntil || state.blockedUntil < now)) {
|
|
200
|
+
this.clients.delete(key);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
176
204
|
}
|
|
177
205
|
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nostr-websocket-utils",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.18",
|
|
4
4
|
"description": "Robust WebSocket utilities for Nostr applications with automatic reconnection, supporting both ESM and CommonJS. Features channel-based messaging, heartbeat monitoring, message queueing, and comprehensive error handling with type-safe handlers.",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"scripts": {
|
|
23
23
|
"build": "npm run build:ts && npm run build:browser",
|
|
24
24
|
"build:ts": "tsc && tsc -p tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
|
|
25
|
-
"build:browser": "
|
|
25
|
+
"build:browser": "node esbuild.browser.mjs",
|
|
26
26
|
"test": "vitest run",
|
|
27
27
|
"test:watch": "vitest",
|
|
28
28
|
"test:coverage": "vitest run --coverage",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"homepage": "https://github.com/HumanjavaEnterprises/nostr-websocket-utils#readme",
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"@types/uuid": "^10.0.0",
|
|
64
|
-
"nostr-crypto-utils": "^0.
|
|
64
|
+
"nostr-crypto-utils": "^0.5.1",
|
|
65
65
|
"pino": "^8.21.0",
|
|
66
66
|
"uuid": "^11.1.0",
|
|
67
67
|
"ws": "^8.19.0"
|
|
@@ -73,16 +73,12 @@
|
|
|
73
73
|
"@typescript-eslint/eslint-plugin": "^8.56.0",
|
|
74
74
|
"@typescript-eslint/parser": "^8.56.0",
|
|
75
75
|
"@vitest/coverage-v8": "^3.2.4",
|
|
76
|
+
"esbuild": "^0.27.3",
|
|
76
77
|
"eslint": "^10.0.0",
|
|
77
|
-
"terser-webpack-plugin": "^5.3.16",
|
|
78
|
-
"ts-loader": "^9.5.4",
|
|
79
78
|
"typedoc": "^0.28.17",
|
|
80
79
|
"typedoc-plugin-markdown": "^4.10.0",
|
|
81
80
|
"typescript": "^5.9.3",
|
|
82
|
-
"vitest": "^3.2.4"
|
|
83
|
-
"webpack": "^5.105.2",
|
|
84
|
-
"webpack-bundle-analyzer": "^4.10.1",
|
|
85
|
-
"webpack-cli": "^5.1.4"
|
|
81
|
+
"vitest": "^3.2.4"
|
|
86
82
|
},
|
|
87
83
|
"files": [
|
|
88
84
|
"dist",
|