@unicitylabs/nostr-js-sdk 0.0.1

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 (124) hide show
  1. package/README.md +290 -0
  2. package/dist/browser/index.js +8444 -0
  3. package/dist/browser/index.js.map +1 -0
  4. package/dist/browser/index.min.js +12 -0
  5. package/dist/browser/index.min.js.map +1 -0
  6. package/dist/browser/index.umd.js +8524 -0
  7. package/dist/browser/index.umd.js.map +1 -0
  8. package/dist/browser/index.umd.min.js +12 -0
  9. package/dist/browser/index.umd.min.js.map +1 -0
  10. package/dist/cjs/NostrKeyManager.js +265 -0
  11. package/dist/cjs/NostrKeyManager.js.map +1 -0
  12. package/dist/cjs/client/NostrClient.js +518 -0
  13. package/dist/cjs/client/NostrClient.js.map +1 -0
  14. package/dist/cjs/client/NostrEventListener.js +31 -0
  15. package/dist/cjs/client/NostrEventListener.js.map +1 -0
  16. package/dist/cjs/client/WebSocketAdapter.js +90 -0
  17. package/dist/cjs/client/WebSocketAdapter.js.map +1 -0
  18. package/dist/cjs/client/index.js +18 -0
  19. package/dist/cjs/client/index.js.map +1 -0
  20. package/dist/cjs/crypto/bech32.js +201 -0
  21. package/dist/cjs/crypto/bech32.js.map +1 -0
  22. package/dist/cjs/crypto/index.js +49 -0
  23. package/dist/cjs/crypto/index.js.map +1 -0
  24. package/dist/cjs/crypto/nip04.js +327 -0
  25. package/dist/cjs/crypto/nip04.js.map +1 -0
  26. package/dist/cjs/crypto/schnorr.js +101 -0
  27. package/dist/cjs/crypto/schnorr.js.map +1 -0
  28. package/dist/cjs/index.js +57 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/nametag/NametagBinding.js +196 -0
  31. package/dist/cjs/nametag/NametagBinding.js.map +1 -0
  32. package/dist/cjs/nametag/NametagUtils.js +156 -0
  33. package/dist/cjs/nametag/NametagUtils.js.map +1 -0
  34. package/dist/cjs/nametag/index.js +47 -0
  35. package/dist/cjs/nametag/index.js.map +1 -0
  36. package/dist/cjs/protocol/Event.js +209 -0
  37. package/dist/cjs/protocol/Event.js.map +1 -0
  38. package/dist/cjs/protocol/EventKinds.js +126 -0
  39. package/dist/cjs/protocol/EventKinds.js.map +1 -0
  40. package/dist/cjs/protocol/Filter.js +202 -0
  41. package/dist/cjs/protocol/Filter.js.map +1 -0
  42. package/dist/cjs/protocol/index.js +50 -0
  43. package/dist/cjs/protocol/index.js.map +1 -0
  44. package/dist/cjs/token/TokenTransferProtocol.js +196 -0
  45. package/dist/cjs/token/TokenTransferProtocol.js.map +1 -0
  46. package/dist/cjs/token/index.js +45 -0
  47. package/dist/cjs/token/index.js.map +1 -0
  48. package/dist/esm/NostrKeyManager.js +228 -0
  49. package/dist/esm/NostrKeyManager.js.map +1 -0
  50. package/dist/esm/client/NostrClient.js +481 -0
  51. package/dist/esm/client/NostrClient.js.map +1 -0
  52. package/dist/esm/client/NostrEventListener.js +27 -0
  53. package/dist/esm/client/NostrEventListener.js.map +1 -0
  54. package/dist/esm/client/WebSocketAdapter.js +52 -0
  55. package/dist/esm/client/WebSocketAdapter.js.map +1 -0
  56. package/dist/esm/client/index.js +7 -0
  57. package/dist/esm/client/index.js.map +1 -0
  58. package/dist/esm/crypto/bech32.js +193 -0
  59. package/dist/esm/crypto/bech32.js.map +1 -0
  60. package/dist/esm/crypto/index.js +10 -0
  61. package/dist/esm/crypto/index.js.map +1 -0
  62. package/dist/esm/crypto/nip04.js +286 -0
  63. package/dist/esm/crypto/nip04.js.map +1 -0
  64. package/dist/esm/crypto/schnorr.js +93 -0
  65. package/dist/esm/crypto/schnorr.js.map +1 -0
  66. package/dist/esm/index.js +32 -0
  67. package/dist/esm/index.js.map +1 -0
  68. package/dist/esm/nametag/NametagBinding.js +155 -0
  69. package/dist/esm/nametag/NametagBinding.js.map +1 -0
  70. package/dist/esm/nametag/NametagUtils.js +149 -0
  71. package/dist/esm/nametag/NametagUtils.js.map +1 -0
  72. package/dist/esm/nametag/index.js +8 -0
  73. package/dist/esm/nametag/index.js.map +1 -0
  74. package/dist/esm/protocol/Event.js +172 -0
  75. package/dist/esm/protocol/Event.js.map +1 -0
  76. package/dist/esm/protocol/EventKinds.js +119 -0
  77. package/dist/esm/protocol/EventKinds.js.map +1 -0
  78. package/dist/esm/protocol/Filter.js +197 -0
  79. package/dist/esm/protocol/Filter.js.map +1 -0
  80. package/dist/esm/protocol/index.js +8 -0
  81. package/dist/esm/protocol/index.js.map +1 -0
  82. package/dist/esm/token/TokenTransferProtocol.js +154 -0
  83. package/dist/esm/token/TokenTransferProtocol.js.map +1 -0
  84. package/dist/esm/token/index.js +6 -0
  85. package/dist/esm/token/index.js.map +1 -0
  86. package/dist/types/NostrKeyManager.d.ts +150 -0
  87. package/dist/types/NostrKeyManager.d.ts.map +1 -0
  88. package/dist/types/client/NostrClient.d.ts +154 -0
  89. package/dist/types/client/NostrClient.d.ts.map +1 -0
  90. package/dist/types/client/NostrEventListener.d.ts +40 -0
  91. package/dist/types/client/NostrEventListener.d.ts.map +1 -0
  92. package/dist/types/client/WebSocketAdapter.d.ts +55 -0
  93. package/dist/types/client/WebSocketAdapter.d.ts.map +1 -0
  94. package/dist/types/client/index.d.ts +9 -0
  95. package/dist/types/client/index.d.ts.map +1 -0
  96. package/dist/types/crypto/bech32.d.ts +51 -0
  97. package/dist/types/crypto/bech32.d.ts.map +1 -0
  98. package/dist/types/crypto/index.d.ts +10 -0
  99. package/dist/types/crypto/index.d.ts.map +1 -0
  100. package/dist/types/crypto/nip04.d.ts +56 -0
  101. package/dist/types/crypto/nip04.d.ts.map +1 -0
  102. package/dist/types/crypto/schnorr.d.ts +47 -0
  103. package/dist/types/crypto/schnorr.d.ts.map +1 -0
  104. package/dist/types/index.d.ts +31 -0
  105. package/dist/types/index.d.ts.map +1 -0
  106. package/dist/types/nametag/NametagBinding.d.ts +68 -0
  107. package/dist/types/nametag/NametagBinding.d.ts.map +1 -0
  108. package/dist/types/nametag/NametagUtils.d.ts +44 -0
  109. package/dist/types/nametag/NametagUtils.d.ts.map +1 -0
  110. package/dist/types/nametag/index.d.ts +8 -0
  111. package/dist/types/nametag/index.d.ts.map +1 -0
  112. package/dist/types/protocol/Event.d.ts +112 -0
  113. package/dist/types/protocol/Event.d.ts.map +1 -0
  114. package/dist/types/protocol/EventKinds.d.ts +62 -0
  115. package/dist/types/protocol/EventKinds.d.ts.map +1 -0
  116. package/dist/types/protocol/Filter.d.ts +146 -0
  117. package/dist/types/protocol/Filter.d.ts.map +1 -0
  118. package/dist/types/protocol/index.d.ts +10 -0
  119. package/dist/types/protocol/index.d.ts.map +1 -0
  120. package/dist/types/token/TokenTransferProtocol.d.ts +67 -0
  121. package/dist/types/token/TokenTransferProtocol.d.ts.map +1 -0
  122. package/dist/types/token/index.d.ts +6 -0
  123. package/dist/types/token/index.d.ts.map +1 -0
  124. package/package.json +89 -0
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ /**
3
+ * NostrKeyManager - High-level cryptographic operations manager for Nostr.
4
+ * Manages key pairs, signing, and NIP-04 encryption/decryption.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.NostrKeyManager = void 0;
41
+ const utils_1 = require("@noble/hashes/utils");
42
+ const Bech32 = __importStar(require("./crypto/bech32.js"));
43
+ const Schnorr = __importStar(require("./crypto/schnorr.js"));
44
+ const NIP04 = __importStar(require("./crypto/nip04.js"));
45
+ /**
46
+ * NostrKeyManager provides a high-level interface for cryptographic operations.
47
+ * It manages a Nostr key pair and provides methods for signing, verification,
48
+ * and NIP-04 encryption/decryption.
49
+ */
50
+ class NostrKeyManager {
51
+ privateKey;
52
+ publicKey;
53
+ cleared = false;
54
+ /**
55
+ * Private constructor - use static factory methods instead.
56
+ */
57
+ constructor(privateKey) {
58
+ if (privateKey.length !== 32) {
59
+ throw new Error('Private key must be 32 bytes');
60
+ }
61
+ // Make a copy to prevent external modification
62
+ this.privateKey = new Uint8Array(privateKey);
63
+ this.publicKey = Schnorr.getPublicKey(this.privateKey);
64
+ }
65
+ /**
66
+ * Create a NostrKeyManager from a 32-byte private key.
67
+ * @param privateKey 32-byte private key
68
+ * @returns NostrKeyManager instance
69
+ */
70
+ static fromPrivateKey(privateKey) {
71
+ return new NostrKeyManager(privateKey);
72
+ }
73
+ /**
74
+ * Create a NostrKeyManager from a hex-encoded private key.
75
+ * @param privateKeyHex Hex-encoded private key (64 characters)
76
+ * @returns NostrKeyManager instance
77
+ */
78
+ static fromPrivateKeyHex(privateKeyHex) {
79
+ const privateKey = (0, utils_1.hexToBytes)(privateKeyHex);
80
+ return new NostrKeyManager(privateKey);
81
+ }
82
+ /**
83
+ * Create a NostrKeyManager from a Bech32-encoded nsec string.
84
+ * @param nsec nsec-encoded private key
85
+ * @returns NostrKeyManager instance
86
+ */
87
+ static fromNsec(nsec) {
88
+ const privateKey = Bech32.decodeNsec(nsec);
89
+ return new NostrKeyManager(privateKey);
90
+ }
91
+ /**
92
+ * Generate a new random key pair.
93
+ * @returns NostrKeyManager instance with a new random key pair
94
+ */
95
+ static generate() {
96
+ const privateKey = (0, utils_1.randomBytes)(32);
97
+ return new NostrKeyManager(privateKey);
98
+ }
99
+ /**
100
+ * Check if the key manager has been cleared.
101
+ * @throws Error if the key manager has been cleared
102
+ */
103
+ ensureNotCleared() {
104
+ if (this.cleared) {
105
+ throw new Error('KeyManager has been cleared');
106
+ }
107
+ }
108
+ /**
109
+ * Get a copy of the private key bytes.
110
+ * @returns 32-byte private key (copy)
111
+ */
112
+ getPrivateKey() {
113
+ this.ensureNotCleared();
114
+ return new Uint8Array(this.privateKey);
115
+ }
116
+ /**
117
+ * Get the hex-encoded private key.
118
+ * @returns Hex-encoded private key (64 characters)
119
+ */
120
+ getPrivateKeyHex() {
121
+ this.ensureNotCleared();
122
+ return (0, utils_1.bytesToHex)(this.privateKey);
123
+ }
124
+ /**
125
+ * Get the Bech32-encoded nsec private key.
126
+ * @returns nsec-encoded private key
127
+ */
128
+ getNsec() {
129
+ this.ensureNotCleared();
130
+ return Bech32.encodeNsec(this.privateKey);
131
+ }
132
+ /**
133
+ * Get a copy of the x-only public key bytes.
134
+ * @returns 32-byte x-only public key (copy)
135
+ */
136
+ getPublicKey() {
137
+ this.ensureNotCleared();
138
+ return new Uint8Array(this.publicKey);
139
+ }
140
+ /**
141
+ * Get the hex-encoded public key.
142
+ * @returns Hex-encoded public key (64 characters)
143
+ */
144
+ getPublicKeyHex() {
145
+ this.ensureNotCleared();
146
+ return (0, utils_1.bytesToHex)(this.publicKey);
147
+ }
148
+ /**
149
+ * Get the Bech32-encoded npub public key.
150
+ * @returns npub-encoded public key
151
+ */
152
+ getNpub() {
153
+ this.ensureNotCleared();
154
+ return Bech32.encodeNpub(this.publicKey);
155
+ }
156
+ /**
157
+ * Sign a 32-byte message hash using BIP-340 Schnorr signature.
158
+ * @param messageHash 32-byte message hash
159
+ * @returns 64-byte Schnorr signature
160
+ */
161
+ sign(messageHash) {
162
+ this.ensureNotCleared();
163
+ return Schnorr.sign(messageHash, this.privateKey);
164
+ }
165
+ /**
166
+ * Sign a message hash and return hex-encoded signature.
167
+ * @param messageHash 32-byte message hash
168
+ * @returns Hex-encoded 64-byte Schnorr signature
169
+ */
170
+ signHex(messageHash) {
171
+ this.ensureNotCleared();
172
+ return Schnorr.signHex(messageHash, this.privateKey);
173
+ }
174
+ /**
175
+ * Verify a Schnorr signature (static method).
176
+ * @param signature 64-byte Schnorr signature
177
+ * @param messageHash 32-byte message hash
178
+ * @param publicKey 32-byte x-only public key
179
+ * @returns true if the signature is valid
180
+ */
181
+ static verify(signature, messageHash, publicKey) {
182
+ return Schnorr.verify(signature, messageHash, publicKey);
183
+ }
184
+ /**
185
+ * Verify a hex-encoded Schnorr signature (static method).
186
+ * @param signatureHex Hex-encoded 64-byte signature
187
+ * @param messageHash 32-byte message hash
188
+ * @param publicKeyHex Hex-encoded 32-byte public key
189
+ * @returns true if the signature is valid
190
+ */
191
+ static verifyHex(signatureHex, messageHash, publicKeyHex) {
192
+ return Schnorr.verifyHex(signatureHex, messageHash, publicKeyHex);
193
+ }
194
+ /**
195
+ * Encrypt a message using NIP-04 encryption.
196
+ * @param message Message to encrypt
197
+ * @param recipientPublicKey 32-byte x-only public key of recipient
198
+ * @returns Encrypted content string
199
+ */
200
+ async encrypt(message, recipientPublicKey) {
201
+ this.ensureNotCleared();
202
+ return NIP04.encrypt(message, this.privateKey, recipientPublicKey);
203
+ }
204
+ /**
205
+ * Encrypt a message using hex-encoded recipient public key.
206
+ * @param message Message to encrypt
207
+ * @param recipientPublicKeyHex Hex-encoded recipient public key
208
+ * @returns Encrypted content string
209
+ */
210
+ async encryptHex(message, recipientPublicKeyHex) {
211
+ this.ensureNotCleared();
212
+ const recipientPublicKey = (0, utils_1.hexToBytes)(recipientPublicKeyHex);
213
+ return NIP04.encrypt(message, this.privateKey, recipientPublicKey);
214
+ }
215
+ /**
216
+ * Decrypt a NIP-04 encrypted message.
217
+ * @param encryptedContent Encrypted content string
218
+ * @param senderPublicKey 32-byte x-only public key of sender
219
+ * @returns Decrypted message
220
+ */
221
+ async decrypt(encryptedContent, senderPublicKey) {
222
+ this.ensureNotCleared();
223
+ return NIP04.decrypt(encryptedContent, this.privateKey, senderPublicKey);
224
+ }
225
+ /**
226
+ * Decrypt a message using hex-encoded sender public key.
227
+ * @param encryptedContent Encrypted content string
228
+ * @param senderPublicKeyHex Hex-encoded sender public key
229
+ * @returns Decrypted message
230
+ */
231
+ async decryptHex(encryptedContent, senderPublicKeyHex) {
232
+ this.ensureNotCleared();
233
+ const senderPublicKey = (0, utils_1.hexToBytes)(senderPublicKeyHex);
234
+ return NIP04.decrypt(encryptedContent, this.privateKey, senderPublicKey);
235
+ }
236
+ /**
237
+ * Derive a shared secret using ECDH.
238
+ * @param theirPublicKey 32-byte x-only public key
239
+ * @returns 32-byte shared secret
240
+ */
241
+ deriveSharedSecret(theirPublicKey) {
242
+ this.ensureNotCleared();
243
+ return NIP04.deriveSharedSecret(this.privateKey, theirPublicKey);
244
+ }
245
+ /**
246
+ * Check if a public key matches this key manager's public key.
247
+ * @param publicKeyHex Hex-encoded public key to check
248
+ * @returns true if the public key matches
249
+ */
250
+ isMyPublicKey(publicKeyHex) {
251
+ this.ensureNotCleared();
252
+ return this.getPublicKeyHex() === publicKeyHex.toLowerCase();
253
+ }
254
+ /**
255
+ * Clear the private key from memory.
256
+ * After calling this method, the key manager cannot be used for signing or decryption.
257
+ */
258
+ clear() {
259
+ // Overwrite private key with zeros
260
+ this.privateKey.fill(0);
261
+ this.cleared = true;
262
+ }
263
+ }
264
+ exports.NostrKeyManager = NostrKeyManager;
265
+ //# sourceMappingURL=NostrKeyManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NostrKeyManager.js","sourceRoot":"","sources":["../../src/NostrKeyManager.ts"],"names":[],"mappings":"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"}