nostr-tools 1.0.0-beta → 1.0.0-beta2

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/.eslintrc.json CHANGED
@@ -24,6 +24,7 @@
24
24
  "document": false,
25
25
  "navigator": false,
26
26
  "window": false,
27
+ "crypto": false,
27
28
  "location": false,
28
29
  "URL": false,
29
30
  "URLSearchParams": false,
package/README.md CHANGED
@@ -2,15 +2,17 @@
2
2
 
3
3
  Tools for developing [Nostr](https://github.com/fiatjaf/nostr) clients.
4
4
 
5
+ Very lean on dependencies.
6
+
5
7
  ## Usage
6
8
 
7
9
  ### Generating a private key and a public key
8
10
 
9
11
  ```js
10
- import { generatePrivateKey, getPublicKey } from 'nostr-tools'
12
+ import {generatePrivateKey, getPublicKey} from 'nostr-tools'
11
13
 
12
- let sk = generatePrivateKey() # `sk` is a hex string
13
- let pk = getPublicKey(sk) # `pk` is a hex string
14
+ let sk = generatePrivateKey() // `sk` is a hex string
15
+ let pk = getPublicKey(sk) // `pk` is a hex string
14
16
  ```
15
17
 
16
18
  ### Creating, signing and verifying events
@@ -31,7 +33,7 @@ let event = {
31
33
  content: 'hello'
32
34
  }
33
35
 
34
- event.id = getEventHash(event.id)
36
+ event.id = getEventHash(event)
35
37
  event.pubkey = getPublicKey(privateKey)
36
38
  event.sig = await signEvent(event, privateKey)
37
39
 
@@ -112,6 +114,12 @@ pub.on('failed', reason => {
112
114
  await relay.close()
113
115
  ```
114
116
 
117
+ To use this on Node.js you first must install `websocket-polyfill` and import it:
118
+
119
+ ```js
120
+ import 'websocket-polyfill'
121
+ ```
122
+
115
123
  ### Querying profile data from a NIP-05 address
116
124
 
117
125
  ```js
@@ -122,8 +130,11 @@ console.log(profile.pubkey)
122
130
  // prints: 32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245
123
131
  console.log(profile.relays)
124
132
  // prints: [wss://relay.damus.io]
133
+ ```
134
+
135
+ To use this on Node.js you first must install `node-fetch@2` and call something like this:
125
136
 
126
- // on nodejs, install node-fetch@2 and call this first:
137
+ ```js
127
138
  nip05.useFetchImplementation(require('node-fetch'))
128
139
  ```
129
140
 
@@ -171,7 +182,7 @@ let pk2 = getPublicKey(sk2)
171
182
 
172
183
  // on the sender side
173
184
  let message = 'hello'
174
- let ciphertext = nip04.encrypt(sk1, pk2, 'hello')
185
+ let ciphertext = await nip04.encrypt(sk1, pk2, 'hello')
175
186
 
176
187
  let event = {
177
188
  kind: 4,
@@ -184,11 +195,10 @@ let event = {
184
195
  sendEvent(event)
185
196
 
186
197
  // on the receiver side
187
-
188
198
  sub.on('event', (event) => {
189
199
  let sender = event.tags.find(([k, v]) => k === 'p' && && v && v !== '')[1]
190
200
  pk1 === sender
191
- let plaintext = nip04.decrypt(sk2, pk1, event.content)
201
+ let plaintext = await nip04.decrypt(sk2, pk1, event.content)
192
202
  })
193
203
  ```
194
204
 
package/build.js CHANGED
@@ -1,16 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const esbuild = require('esbuild')
4
- const alias = require('esbuild-plugin-alias')
5
4
 
6
5
  let common = {
7
6
  entryPoints: ['index.ts'],
8
7
  bundle: true,
9
- plugins: [
10
- alias({
11
- stream: require.resolve('readable-stream')
12
- })
13
- ],
14
8
  sourcemap: 'external'
15
9
  }
16
10
 
package/event.ts CHANGED
@@ -1,8 +1,8 @@
1
- import {Buffer} from 'buffer'
2
- // @ts-ignore
3
1
  import * as secp256k1 from '@noble/secp256k1'
4
2
  import {sha256} from '@noble/hashes/sha256'
5
3
 
4
+ import {utf8Encoder} from './utils'
5
+
6
6
  export type Event = {
7
7
  id?: string
8
8
  sig?: string
@@ -35,8 +35,8 @@ export function serializeEvent(evt: Event): string {
35
35
  }
36
36
 
37
37
  export function getEventHash(event: Event): string {
38
- let eventHash = sha256(Buffer.from(serializeEvent(event)))
39
- return Buffer.from(eventHash).toString('hex')
38
+ let eventHash = sha256(utf8Encoder.encode(serializeEvent(event)))
39
+ return secp256k1.utils.bytesToHex(eventHash)
40
40
  }
41
41
 
42
42
  export function validateEvent(event: Event): boolean {
@@ -63,7 +63,7 @@ export function verifySignature(
63
63
  }
64
64
 
65
65
  export async function signEvent(event: Event, key: string): Promise<string> {
66
- return Buffer.from(
66
+ return secp256k1.utils.bytesToHex(
67
67
  await secp256k1.schnorr.sign(event.id || getEventHash(event), key)
68
- ).toString('hex')
68
+ )
69
69
  }
package/keys.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import * as secp256k1 from '@noble/secp256k1'
2
- import {Buffer} from 'buffer'
3
2
 
4
3
  export function generatePrivateKey(): string {
5
- return Buffer.from(secp256k1.utils.randomPrivateKey()).toString('hex')
4
+ return secp256k1.utils.bytesToHex(secp256k1.utils.randomPrivateKey())
6
5
  }
7
6
 
8
7
  export function getPublicKey(privateKey: string): string {
9
- return Buffer.from(secp256k1.schnorr.getPublicKey(privateKey)).toString('hex')
8
+ return secp256k1.utils.bytesToHex(secp256k1.schnorr.getPublicKey(privateKey))
10
9
  }