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.
Files changed (114) hide show
  1. package/README.md +52 -2
  2. package/dist/browser/343.nostr-crypto-utils.min.js +1 -0
  3. package/dist/browser/419.nostr-crypto-utils.min.js +1 -0
  4. package/dist/browser/crypto.nostr-crypto-utils.min.js +1 -1
  5. package/dist/browser/main.nostr-crypto-utils.min.js +1 -0
  6. package/dist/browser/protocol.nostr-crypto-utils.min.js +1 -1
  7. package/dist/cjs/event/index.d.ts +7 -0
  8. package/dist/cjs/event/index.d.ts.map +1 -0
  9. package/dist/cjs/event/index.js +15 -0
  10. package/dist/cjs/event/index.js.map +1 -0
  11. package/dist/cjs/event/signing.d.ts +12 -0
  12. package/dist/cjs/event/signing.d.ts.map +1 -1
  13. package/dist/cjs/event/signing.js +29 -0
  14. package/dist/cjs/event/signing.js.map +1 -1
  15. package/dist/cjs/index.d.ts +11 -8
  16. package/dist/cjs/index.d.ts.map +1 -1
  17. package/dist/cjs/index.js +58 -56
  18. package/dist/cjs/index.js.map +1 -1
  19. package/dist/cjs/nips/nip-04.d.ts +1 -1
  20. package/dist/cjs/nips/nip-04.d.ts.map +1 -1
  21. package/dist/cjs/nips/nip-04.js +1 -0
  22. package/dist/cjs/nips/nip-04.js.map +1 -1
  23. package/dist/cjs/protocol/index.d.ts +9 -9
  24. package/dist/cjs/protocol/index.d.ts.map +1 -1
  25. package/dist/cjs/protocol/index.js +8 -9
  26. package/dist/cjs/protocol/index.js.map +1 -1
  27. package/dist/cjs/types/base.d.ts +45 -121
  28. package/dist/cjs/types/base.d.ts.map +1 -1
  29. package/dist/cjs/types/base.js +10 -28
  30. package/dist/cjs/types/base.js.map +1 -1
  31. package/dist/cjs/utils/encoding.d.ts +12 -0
  32. package/dist/cjs/utils/encoding.d.ts.map +1 -1
  33. package/dist/cjs/utils/encoding.js +18 -0
  34. package/dist/cjs/utils/encoding.js.map +1 -1
  35. package/dist/cjs/utils/integration.d.ts +14 -15
  36. package/dist/cjs/utils/integration.d.ts.map +1 -1
  37. package/dist/cjs/utils/integration.js +145 -98
  38. package/dist/cjs/utils/integration.js.map +1 -1
  39. package/dist/cjs/utils/logger.d.ts +17 -2
  40. package/dist/cjs/utils/logger.d.ts.map +1 -1
  41. package/dist/cjs/utils/logger.js +40 -3
  42. package/dist/cjs/utils/logger.js.map +1 -1
  43. package/dist/cjs/utils/validation.d.ts +6 -0
  44. package/dist/cjs/utils/validation.d.ts.map +1 -1
  45. package/dist/cjs/utils/validation.js +37 -0
  46. package/dist/cjs/utils/validation.js.map +1 -1
  47. package/dist/cjs/validation/keys.d.ts +7 -0
  48. package/dist/cjs/validation/keys.d.ts.map +1 -0
  49. package/dist/cjs/validation/keys.js +23 -0
  50. package/dist/cjs/validation/keys.js.map +1 -0
  51. package/dist/esm/event/index.d.ts +7 -0
  52. package/dist/esm/event/index.d.ts.map +1 -0
  53. package/dist/esm/event/index.js +7 -0
  54. package/dist/esm/event/index.js.map +1 -0
  55. package/dist/esm/event/signing.d.ts +12 -0
  56. package/dist/esm/event/signing.d.ts.map +1 -1
  57. package/dist/esm/event/signing.js +27 -0
  58. package/dist/esm/event/signing.js.map +1 -1
  59. package/dist/esm/index.d.ts +11 -8
  60. package/dist/esm/index.d.ts.map +1 -1
  61. package/dist/esm/index.js +16 -14
  62. package/dist/esm/index.js.map +1 -1
  63. package/dist/esm/nips/nip-04.d.ts +1 -1
  64. package/dist/esm/nips/nip-04.d.ts.map +1 -1
  65. package/dist/esm/nips/nip-04.js +1 -0
  66. package/dist/esm/nips/nip-04.js.map +1 -1
  67. package/dist/esm/protocol/index.d.ts +9 -9
  68. package/dist/esm/protocol/index.d.ts.map +1 -1
  69. package/dist/esm/protocol/index.js +8 -9
  70. package/dist/esm/protocol/index.js.map +1 -1
  71. package/dist/esm/types/base.d.ts +45 -121
  72. package/dist/esm/types/base.d.ts.map +1 -1
  73. package/dist/esm/types/base.js +10 -28
  74. package/dist/esm/types/base.js.map +1 -1
  75. package/dist/esm/utils/encoding.d.ts +12 -0
  76. package/dist/esm/utils/encoding.d.ts.map +1 -1
  77. package/dist/esm/utils/encoding.js +16 -0
  78. package/dist/esm/utils/encoding.js.map +1 -1
  79. package/dist/esm/utils/integration.d.ts +14 -15
  80. package/dist/esm/utils/integration.d.ts.map +1 -1
  81. package/dist/esm/utils/integration.js +136 -89
  82. package/dist/esm/utils/integration.js.map +1 -1
  83. package/dist/esm/utils/logger.d.ts +17 -2
  84. package/dist/esm/utils/logger.d.ts.map +1 -1
  85. package/dist/esm/utils/logger.js +38 -2
  86. package/dist/esm/utils/logger.js.map +1 -1
  87. package/dist/esm/utils/validation.d.ts +6 -0
  88. package/dist/esm/utils/validation.d.ts.map +1 -1
  89. package/dist/esm/utils/validation.js +36 -0
  90. package/dist/esm/utils/validation.js.map +1 -1
  91. package/dist/esm/validation/keys.d.ts +7 -0
  92. package/dist/esm/validation/keys.d.ts.map +1 -0
  93. package/dist/esm/validation/keys.js +20 -0
  94. package/dist/esm/validation/keys.js.map +1 -0
  95. package/package.json +1 -1
  96. package/src/__tests__/integration.test.ts +1 -1
  97. package/src/__tests__/types.test.ts +36 -242
  98. package/src/event/index.ts +7 -0
  99. package/src/event/signing.ts +29 -0
  100. package/src/index.ts +39 -47
  101. package/src/nips/nip-04.ts +2 -0
  102. package/src/protocol/index.ts +23 -14
  103. package/src/types/base.ts +58 -122
  104. package/src/utils/encoding.ts +18 -0
  105. package/src/utils/integration.ts +159 -107
  106. package/src/utils/logger.ts +46 -2
  107. package/src/utils/validation.ts +37 -0
  108. package/src/validation/keys.ts +19 -0
  109. package/dist/browser/551.nostr-crypto-utils.min.js +0 -1
  110. package/dist/browser/565.nostr-crypto-utils.min.js +0 -1
  111. package/dist/browser/69.nostr-crypto-utils.min.js +0 -1
  112. package/dist/browser/main-43dd7041.nostr-crypto-utils.min.js +0 -1
  113. package/dist/browser/main-7bd12dde.nostr-crypto-utils.min.js +0 -1
  114. 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: string;
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
- /** NIP-01: Set metadata about the user */
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
- /** NIP-25: Reactions to events */
37
+ REPOST = 6,
55
38
  REACTION = 7,
56
- /** NIP-28: Channel creation */
57
- CHANNEL_CREATE = 40,
58
- /** NIP-28: Channel metadata */
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
- /** NIP-42: Authentication */
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
- * Basic Nostr event interface
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: NostrEventKind;
55
+ kind: number;
79
56
  /** Content of the event */
80
57
  content: string;
81
- /** Array of tags associated with the event */
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
- * Signed Nostr event interface, extends NostrEvent with signature
91
- * @see https://github.com/nostr-protocol/nips/blob/master/01.md
92
- */
93
- export interface SignedNostrEvent extends NostrEvent {
94
- /** Event ID (32-bytes sha256 of the serialized event data) */
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
- * Result of a validation operation
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
- * Filter for Nostr events
112
- * @see https://github.com/nostr-protocol/nips/blob/master/01.md
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
- AUTH = 'AUTH',
160
- ERROR = 'ERROR',
161
- COUNT = 'COUNT'
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
- /** Payload of the message */
171
- payload: unknown;
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
- }
@@ -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
+ }