nostr-crypto-utils 0.4.12 → 0.4.13
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 +52 -2
- package/dist/browser/343.nostr-crypto-utils.min.js +1 -0
- package/dist/browser/419.nostr-crypto-utils.min.js +1 -0
- package/dist/browser/crypto.nostr-crypto-utils.min.js +1 -1
- package/dist/browser/main.nostr-crypto-utils.min.js +1 -0
- package/dist/browser/protocol.nostr-crypto-utils.min.js +1 -1
- package/dist/cjs/event/index.d.ts +7 -0
- package/dist/cjs/event/index.d.ts.map +1 -0
- package/dist/cjs/event/index.js +15 -0
- package/dist/cjs/event/index.js.map +1 -0
- package/dist/cjs/event/signing.d.ts +12 -0
- package/dist/cjs/event/signing.d.ts.map +1 -1
- package/dist/cjs/event/signing.js +29 -0
- package/dist/cjs/event/signing.js.map +1 -1
- package/dist/cjs/index.d.ts +11 -8
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +58 -56
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/nips/nip-04.d.ts +1 -1
- package/dist/cjs/nips/nip-04.d.ts.map +1 -1
- package/dist/cjs/nips/nip-04.js +1 -0
- package/dist/cjs/nips/nip-04.js.map +1 -1
- package/dist/cjs/protocol/index.d.ts +9 -9
- package/dist/cjs/protocol/index.d.ts.map +1 -1
- package/dist/cjs/protocol/index.js +8 -9
- package/dist/cjs/protocol/index.js.map +1 -1
- package/dist/cjs/types/base.d.ts +45 -121
- package/dist/cjs/types/base.d.ts.map +1 -1
- package/dist/cjs/types/base.js +10 -28
- package/dist/cjs/types/base.js.map +1 -1
- package/dist/cjs/utils/encoding.d.ts +12 -0
- package/dist/cjs/utils/encoding.d.ts.map +1 -1
- package/dist/cjs/utils/encoding.js +18 -0
- package/dist/cjs/utils/encoding.js.map +1 -1
- package/dist/cjs/utils/integration.d.ts +14 -15
- package/dist/cjs/utils/integration.d.ts.map +1 -1
- package/dist/cjs/utils/integration.js +145 -98
- package/dist/cjs/utils/integration.js.map +1 -1
- package/dist/cjs/utils/logger.d.ts +17 -2
- package/dist/cjs/utils/logger.d.ts.map +1 -1
- package/dist/cjs/utils/logger.js +40 -3
- package/dist/cjs/utils/logger.js.map +1 -1
- package/dist/cjs/utils/validation.d.ts +6 -0
- package/dist/cjs/utils/validation.d.ts.map +1 -1
- package/dist/cjs/utils/validation.js +37 -0
- package/dist/cjs/utils/validation.js.map +1 -1
- package/dist/cjs/validation/keys.d.ts +7 -0
- package/dist/cjs/validation/keys.d.ts.map +1 -0
- package/dist/cjs/validation/keys.js +23 -0
- package/dist/cjs/validation/keys.js.map +1 -0
- package/dist/esm/event/index.d.ts +7 -0
- package/dist/esm/event/index.d.ts.map +1 -0
- package/dist/esm/event/index.js +7 -0
- package/dist/esm/event/index.js.map +1 -0
- package/dist/esm/event/signing.d.ts +12 -0
- package/dist/esm/event/signing.d.ts.map +1 -1
- package/dist/esm/event/signing.js +27 -0
- package/dist/esm/event/signing.js.map +1 -1
- package/dist/esm/index.d.ts +11 -8
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +16 -14
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/nips/nip-04.d.ts +1 -1
- package/dist/esm/nips/nip-04.d.ts.map +1 -1
- package/dist/esm/nips/nip-04.js +1 -0
- package/dist/esm/nips/nip-04.js.map +1 -1
- package/dist/esm/protocol/index.d.ts +9 -9
- package/dist/esm/protocol/index.d.ts.map +1 -1
- package/dist/esm/protocol/index.js +8 -9
- package/dist/esm/protocol/index.js.map +1 -1
- package/dist/esm/types/base.d.ts +45 -121
- package/dist/esm/types/base.d.ts.map +1 -1
- package/dist/esm/types/base.js +10 -28
- package/dist/esm/types/base.js.map +1 -1
- package/dist/esm/utils/encoding.d.ts +12 -0
- package/dist/esm/utils/encoding.d.ts.map +1 -1
- package/dist/esm/utils/encoding.js +16 -0
- package/dist/esm/utils/encoding.js.map +1 -1
- package/dist/esm/utils/integration.d.ts +14 -15
- package/dist/esm/utils/integration.d.ts.map +1 -1
- package/dist/esm/utils/integration.js +136 -89
- package/dist/esm/utils/integration.js.map +1 -1
- package/dist/esm/utils/logger.d.ts +17 -2
- package/dist/esm/utils/logger.d.ts.map +1 -1
- package/dist/esm/utils/logger.js +38 -2
- package/dist/esm/utils/logger.js.map +1 -1
- package/dist/esm/utils/validation.d.ts +6 -0
- package/dist/esm/utils/validation.d.ts.map +1 -1
- package/dist/esm/utils/validation.js +36 -0
- package/dist/esm/utils/validation.js.map +1 -1
- package/dist/esm/validation/keys.d.ts +7 -0
- package/dist/esm/validation/keys.d.ts.map +1 -0
- package/dist/esm/validation/keys.js +20 -0
- package/dist/esm/validation/keys.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/integration.test.ts +1 -1
- package/src/__tests__/types.test.ts +36 -242
- package/src/event/index.ts +7 -0
- package/src/event/signing.ts +29 -0
- package/src/index.ts +39 -47
- package/src/nips/nip-04.ts +2 -0
- package/src/protocol/index.ts +23 -14
- package/src/types/base.ts +58 -122
- package/src/utils/encoding.ts +18 -0
- package/src/utils/integration.ts +159 -107
- package/src/utils/logger.ts +46 -2
- package/src/utils/validation.ts +37 -0
- package/src/validation/keys.ts +19 -0
- package/dist/browser/551.nostr-crypto-utils.min.js +0 -1
- package/dist/browser/565.nostr-crypto-utils.min.js +0 -1
- package/dist/browser/69.nostr-crypto-utils.min.js +0 -1
- package/dist/browser/main-43dd7041.nostr-crypto-utils.min.js +0 -1
- package/dist/browser/main-7bd12dde.nostr-crypto-utils.min.js +0 -1
- package/dist/browser/main-d277ceb9.nostr-crypto-utils.min.js +0 -1
package/src/types/base.ts
CHANGED
|
@@ -3,212 +3,148 @@
|
|
|
3
3
|
* @description Core type definitions for Nostr protocol
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
* Represents a public key in hex format
|
|
8
|
-
* @see https://github.com/nostr-protocol/nips/blob/master/01.md
|
|
9
|
-
*/
|
|
6
|
+
// Key Types
|
|
10
7
|
export type PublicKeyHex = string;
|
|
8
|
+
export type PrivateKeyHex = string;
|
|
11
9
|
|
|
12
|
-
/**
|
|
13
|
-
* Represents a public key with additional formats
|
|
14
|
-
* @see https://github.com/nostr-protocol/nips/blob/master/01.md
|
|
15
|
-
*/
|
|
16
10
|
export interface PublicKeyDetails {
|
|
17
11
|
/** Public key in hex format */
|
|
18
12
|
hex: string;
|
|
13
|
+
/** NIP-05 identifier */
|
|
14
|
+
nip05: string;
|
|
15
|
+
/** Public key in bytes format */
|
|
16
|
+
bytes: Uint8Array;
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
/**
|
|
22
|
-
* Public key can be either a hex string or a detailed object
|
|
23
|
-
*/
|
|
24
19
|
export type PublicKey = PublicKeyHex | PublicKeyDetails;
|
|
25
20
|
|
|
26
|
-
/**
|
|
27
|
-
* Key pair used for signing and encryption
|
|
28
|
-
* @see https://github.com/nostr-protocol/nips/blob/master/01.md
|
|
29
|
-
*/
|
|
30
21
|
export interface KeyPair {
|
|
31
22
|
/** Private key in hex format */
|
|
32
|
-
privateKey:
|
|
23
|
+
privateKey: PrivateKeyHex;
|
|
33
24
|
/** Public key details */
|
|
34
25
|
publicKey: PublicKeyDetails;
|
|
35
26
|
}
|
|
36
27
|
|
|
37
|
-
|
|
38
|
-
* Enum defining all possible Nostr event kinds as specified in various NIPs
|
|
39
|
-
* @see https://github.com/nostr-protocol/nips
|
|
40
|
-
*/
|
|
28
|
+
// Event Types
|
|
41
29
|
export enum NostrEventKind {
|
|
42
|
-
|
|
30
|
+
// NIP-01: Core Protocol
|
|
43
31
|
SET_METADATA = 0,
|
|
44
|
-
/** NIP-01: Plain text note */
|
|
45
32
|
TEXT_NOTE = 1,
|
|
46
|
-
/** NIP-01: Recommend relay to followers */
|
|
47
33
|
RECOMMEND_SERVER = 2,
|
|
48
|
-
/** NIP-02: Contact list and relay list metadata */
|
|
49
34
|
CONTACTS = 3,
|
|
50
|
-
/** NIP-04: Encrypted direct message */
|
|
51
35
|
ENCRYPTED_DIRECT_MESSAGE = 4,
|
|
52
|
-
/** NIP-09: Event deletion */
|
|
53
36
|
EVENT_DELETION = 5,
|
|
54
|
-
|
|
37
|
+
REPOST = 6,
|
|
55
38
|
REACTION = 7,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
39
|
+
|
|
40
|
+
// NIP-28: Public Chat
|
|
41
|
+
CHANNEL_CREATION = 40,
|
|
59
42
|
CHANNEL_METADATA = 41,
|
|
60
|
-
/** NIP-28: Channel message */
|
|
61
43
|
CHANNEL_MESSAGE = 42,
|
|
62
|
-
/** NIP-28: Hide message in channel */
|
|
63
44
|
CHANNEL_HIDE_MESSAGE = 43,
|
|
64
|
-
/** NIP-28: Mute user in channel */
|
|
65
45
|
CHANNEL_MUTE_USER = 44,
|
|
66
|
-
|
|
46
|
+
|
|
47
|
+
// NIP-42: Authentication
|
|
67
48
|
AUTH = 22242,
|
|
68
|
-
/** NIP-42: Authentication response */
|
|
69
49
|
AUTH_RESPONSE = 22243
|
|
70
50
|
}
|
|
71
51
|
|
|
72
|
-
/**
|
|
73
|
-
|
|
74
|
-
* @see https://github.com/nostr-protocol/nips/blob/master/01.md
|
|
75
|
-
*/
|
|
76
|
-
export interface NostrEvent {
|
|
52
|
+
/** Base interface for all Nostr events */
|
|
53
|
+
export interface BaseNostrEvent {
|
|
77
54
|
/** Event kind as defined in NIPs */
|
|
78
|
-
kind:
|
|
55
|
+
kind: number;
|
|
79
56
|
/** Content of the event */
|
|
80
57
|
content: string;
|
|
81
|
-
/** Array of tags
|
|
58
|
+
/** Array of tags */
|
|
82
59
|
tags: string[][];
|
|
83
60
|
/** Unix timestamp in seconds */
|
|
84
61
|
created_at: number;
|
|
85
|
-
/** Public key of the event creator in hex format */
|
|
86
|
-
pubkey: string;
|
|
87
62
|
}
|
|
88
63
|
|
|
89
|
-
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
64
|
+
/** Interface for events that haven't been signed yet */
|
|
65
|
+
export interface UnsignedNostrEvent extends BaseNostrEvent {
|
|
66
|
+
/** Optional public key */
|
|
67
|
+
pubkey?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Interface for signed events */
|
|
71
|
+
export interface SignedNostrEvent extends BaseNostrEvent {
|
|
72
|
+
/** Public key of the event creator */
|
|
73
|
+
pubkey: string;
|
|
74
|
+
/** Event ID (sha256 of the serialized event) */
|
|
95
75
|
id: string;
|
|
96
76
|
/** Schnorr signature of the event ID */
|
|
97
77
|
sig: string;
|
|
98
78
|
}
|
|
99
79
|
|
|
100
|
-
/**
|
|
101
|
-
|
|
102
|
-
*/
|
|
103
|
-
export interface ValidationResult {
|
|
104
|
-
/** Whether the validation passed */
|
|
105
|
-
isValid: boolean;
|
|
106
|
-
/** Error message if validation failed */
|
|
107
|
-
error?: string;
|
|
108
|
-
}
|
|
80
|
+
/** Alias for backward compatibility */
|
|
81
|
+
export type NostrEvent = SignedNostrEvent;
|
|
109
82
|
|
|
110
|
-
/**
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
83
|
+
/** Type for creating new events */
|
|
84
|
+
export type UnsignedEvent = Omit<NostrEvent, 'id' | 'sig'>;
|
|
85
|
+
|
|
86
|
+
// Filter Types
|
|
114
87
|
export interface NostrFilter {
|
|
115
|
-
/** Filter by event IDs */
|
|
116
88
|
ids?: string[];
|
|
117
|
-
/** Filter by author public keys */
|
|
118
89
|
authors?: string[];
|
|
119
|
-
/** Filter by event kinds */
|
|
120
90
|
kinds?: NostrEventKind[];
|
|
121
|
-
/** Filter by start timestamp */
|
|
122
91
|
since?: number;
|
|
123
|
-
/** Filter by end timestamp */
|
|
124
92
|
until?: number;
|
|
125
|
-
/** Limit number of results */
|
|
126
93
|
limit?: number;
|
|
127
|
-
/** Filter by event references */
|
|
128
94
|
'#e'?: string[];
|
|
129
|
-
/** Filter by pubkey references */
|
|
130
95
|
'#p'?: string[];
|
|
131
|
-
/** Filter by arbitrary tag */
|
|
132
|
-
[key: `#${string}`]: string[] | undefined;
|
|
133
|
-
/** Full-text search query */
|
|
134
96
|
search?: string;
|
|
97
|
+
/** Support for arbitrary tags (NIP-12) */
|
|
98
|
+
[key: `#${string}`]: string[] | undefined;
|
|
135
99
|
}
|
|
136
100
|
|
|
137
|
-
/**
|
|
138
|
-
* Subscription for Nostr events
|
|
139
|
-
* @see https://github.com/nostr-protocol/nips/blob/master/01.md
|
|
140
|
-
*/
|
|
141
101
|
export interface NostrSubscription {
|
|
142
|
-
/** Unique subscription identifier */
|
|
143
102
|
id: string;
|
|
144
|
-
/** Array of filters to apply to the subscription */
|
|
145
103
|
filters: NostrFilter[];
|
|
146
104
|
}
|
|
147
105
|
|
|
148
|
-
|
|
149
|
-
* Nostr message types for client-relay communication
|
|
150
|
-
* @see https://github.com/nostr-protocol/nips/blob/master/01.md
|
|
151
|
-
*/
|
|
106
|
+
// Message Types
|
|
152
107
|
export enum NostrMessageType {
|
|
153
108
|
EVENT = 'EVENT',
|
|
154
|
-
REQ = 'REQ',
|
|
155
|
-
CLOSE = 'CLOSE',
|
|
156
109
|
NOTICE = 'NOTICE',
|
|
157
|
-
EOSE = 'EOSE',
|
|
158
110
|
OK = 'OK',
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
111
|
+
EOSE = 'EOSE',
|
|
112
|
+
REQ = 'REQ',
|
|
113
|
+
CLOSE = 'CLOSE',
|
|
114
|
+
AUTH = 'AUTH'
|
|
162
115
|
}
|
|
163
116
|
|
|
164
|
-
/**
|
|
165
|
-
* Nostr message interface
|
|
166
|
-
*/
|
|
167
117
|
export interface NostrMessage {
|
|
168
|
-
/** Type of the message */
|
|
169
118
|
type: NostrMessageType;
|
|
170
|
-
|
|
171
|
-
|
|
119
|
+
event?: SignedNostrEvent;
|
|
120
|
+
subscriptionId?: string;
|
|
121
|
+
filters?: NostrFilter[];
|
|
122
|
+
eventId?: string;
|
|
123
|
+
accepted?: boolean;
|
|
124
|
+
message?: string;
|
|
125
|
+
count?: number;
|
|
126
|
+
payload?: string | (string | boolean)[];
|
|
172
127
|
}
|
|
173
128
|
|
|
174
|
-
/**
|
|
175
|
-
* Nostr response interface
|
|
176
|
-
*/
|
|
177
129
|
export interface NostrResponse {
|
|
178
|
-
/** Type of the response */
|
|
179
130
|
type: NostrMessageType;
|
|
180
|
-
/** Event data if applicable */
|
|
181
131
|
event?: SignedNostrEvent;
|
|
182
|
-
/** Subscription ID if applicable */
|
|
183
132
|
subscriptionId?: string;
|
|
184
|
-
/** Filters if applicable */
|
|
185
133
|
filters?: NostrFilter[];
|
|
186
|
-
/** Event ID if applicable */
|
|
187
134
|
eventId?: string;
|
|
188
|
-
/** Whether the request was accepted */
|
|
189
135
|
accepted?: boolean;
|
|
190
|
-
/** Message if applicable */
|
|
191
136
|
message?: string;
|
|
137
|
+
count?: number;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Utility Types
|
|
141
|
+
export interface ValidationResult {
|
|
142
|
+
isValid: boolean;
|
|
143
|
+
error?: string;
|
|
192
144
|
}
|
|
193
145
|
|
|
194
|
-
/**
|
|
195
|
-
* Nostr error interface
|
|
196
|
-
*/
|
|
197
146
|
export interface NostrError {
|
|
198
|
-
/** Error code */
|
|
199
147
|
code: string;
|
|
200
|
-
/** Error message */
|
|
201
148
|
message: string;
|
|
202
|
-
/** Additional error details */
|
|
203
149
|
details?: Record<string, unknown>;
|
|
204
150
|
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Encryption result interface
|
|
208
|
-
*/
|
|
209
|
-
export interface EncryptionResult {
|
|
210
|
-
/** Encrypted ciphertext */
|
|
211
|
-
ciphertext: string;
|
|
212
|
-
/** Initialization vector */
|
|
213
|
-
iv: string;
|
|
214
|
-
}
|
package/src/utils/encoding.ts
CHANGED
|
@@ -25,3 +25,21 @@ export function bytesToHex(bytes: Uint8Array): string {
|
|
|
25
25
|
.map(b => b.toString(16).padStart(2, '0'))
|
|
26
26
|
.join('');
|
|
27
27
|
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Convert a UTF-8 string to Uint8Array
|
|
31
|
+
* @param str UTF-8 string to convert
|
|
32
|
+
* @returns Uint8Array of bytes
|
|
33
|
+
*/
|
|
34
|
+
export function utf8ToBytes(str: string): Uint8Array {
|
|
35
|
+
return new TextEncoder().encode(str);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Convert Uint8Array to UTF-8 string
|
|
40
|
+
* @param bytes Uint8Array to convert
|
|
41
|
+
* @returns UTF-8 string
|
|
42
|
+
*/
|
|
43
|
+
export function bytesToUtf8(bytes: Uint8Array): string {
|
|
44
|
+
return new TextDecoder().decode(bytes);
|
|
45
|
+
}
|