nostr-tools 2.23.2 → 2.23.4
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/lib/cjs/abstract-pool.js +6 -2
- package/lib/cjs/abstract-pool.js.map +2 -2
- package/lib/cjs/abstract-relay.js +6 -2
- package/lib/cjs/abstract-relay.js.map +2 -2
- package/lib/cjs/index.js +181 -17
- package/lib/cjs/index.js.map +4 -4
- package/lib/cjs/nip17.js +31 -9
- package/lib/cjs/nip17.js.map +2 -2
- package/lib/cjs/nip22.js +154 -0
- package/lib/cjs/nip22.js.map +7 -0
- package/lib/cjs/nip44.js +34 -10
- package/lib/cjs/nip44.js.map +2 -2
- package/lib/cjs/nip46.js +40 -12
- package/lib/cjs/nip46.js.map +2 -2
- package/lib/cjs/nip47.js +3 -3
- package/lib/cjs/nip47.js.map +2 -2
- package/lib/cjs/nip59.js +31 -9
- package/lib/cjs/nip59.js.map +2 -2
- package/lib/cjs/pool.js +6 -2
- package/lib/cjs/pool.js.map +2 -2
- package/lib/cjs/relay.js +6 -2
- package/lib/cjs/relay.js.map +2 -2
- package/lib/esm/abstract-pool.js +6 -2
- package/lib/esm/abstract-pool.js.map +2 -2
- package/lib/esm/abstract-relay.js +6 -2
- package/lib/esm/abstract-relay.js.map +2 -2
- package/lib/esm/index.js +181 -17
- package/lib/esm/index.js.map +4 -4
- package/lib/esm/nip17.js +31 -9
- package/lib/esm/nip17.js.map +2 -2
- package/lib/esm/nip22.js +133 -0
- package/lib/esm/nip22.js.map +7 -0
- package/lib/esm/nip44.js +34 -10
- package/lib/esm/nip44.js.map +2 -2
- package/lib/esm/nip46.js +40 -12
- package/lib/esm/nip46.js.map +2 -2
- package/lib/esm/nip47.js +3 -3
- package/lib/esm/nip47.js.map +2 -2
- package/lib/esm/nip59.js +31 -9
- package/lib/esm/nip59.js.map +2 -2
- package/lib/esm/pool.js +6 -2
- package/lib/esm/pool.js.map +2 -2
- package/lib/esm/relay.js +6 -2
- package/lib/esm/relay.js.map +2 -2
- package/lib/nostr.bundle.js +189 -25
- package/lib/nostr.bundle.js.map +4 -4
- package/package.json +8 -2
- package/lib/types/abstract-pool.d.ts +0 -60
- package/lib/types/abstract-relay.d.ts +0 -110
- package/lib/types/benchmarks.d.ts +0 -1
- package/lib/types/core.d.ts +0 -32
- package/lib/types/core.test.d.ts +0 -1
- package/lib/types/fakejson.d.ts +0 -6
- package/lib/types/fakejson.test.d.ts +0 -1
- package/lib/types/filter.d.ts +0 -19
- package/lib/types/filter.test.d.ts +0 -1
- package/lib/types/helpers.d.ts +0 -2
- package/lib/types/index.d.ts +0 -30
- package/lib/types/kinds.d.ts +0 -200
- package/lib/types/kinds.test.d.ts +0 -1
- package/lib/types/nip04.d.ts +0 -2
- package/lib/types/nip04.test.d.ts +0 -1
- package/lib/types/nip05.d.ts +0 -17
- package/lib/types/nip05.test.d.ts +0 -1
- package/lib/types/nip06.d.ts +0 -15
- package/lib/types/nip06.test.d.ts +0 -1
- package/lib/types/nip07.d.ts +0 -13
- package/lib/types/nip10.d.ts +0 -24
- package/lib/types/nip10.test.d.ts +0 -1
- package/lib/types/nip11.d.ts +0 -266
- package/lib/types/nip11.test.d.ts +0 -1
- package/lib/types/nip13.d.ts +0 -8
- package/lib/types/nip13.test.d.ts +0 -1
- package/lib/types/nip17.d.ts +0 -15
- package/lib/types/nip17.test.d.ts +0 -1
- package/lib/types/nip18.d.ts +0 -22
- package/lib/types/nip18.test.d.ts +0 -1
- package/lib/types/nip19.d.ts +0 -81
- package/lib/types/nip19.test.d.ts +0 -1
- package/lib/types/nip21.d.ts +0 -34
- package/lib/types/nip21.test.d.ts +0 -1
- package/lib/types/nip25.d.ts +0 -15
- package/lib/types/nip25.test.d.ts +0 -1
- package/lib/types/nip27.d.ts +0 -32
- package/lib/types/nip27.test.d.ts +0 -1
- package/lib/types/nip28.d.ts +0 -46
- package/lib/types/nip28.test.d.ts +0 -1
- package/lib/types/nip29.d.ts +0 -265
- package/lib/types/nip30.d.ts +0 -22
- package/lib/types/nip30.test.d.ts +0 -1
- package/lib/types/nip39.d.ts +0 -2
- package/lib/types/nip39.test.d.ts +0 -1
- package/lib/types/nip40.d.ts +0 -10
- package/lib/types/nip40.test.d.ts +0 -1
- package/lib/types/nip42.d.ts +0 -5
- package/lib/types/nip42.test.d.ts +0 -1
- package/lib/types/nip44.d.ts +0 -13
- package/lib/types/nip44.test.d.ts +0 -1
- package/lib/types/nip46.d.ts +0 -117
- package/lib/types/nip47.d.ts +0 -9
- package/lib/types/nip47.test.d.ts +0 -1
- package/lib/types/nip49.d.ts +0 -3
- package/lib/types/nip49.test.d.ts +0 -1
- package/lib/types/nip54.d.ts +0 -1
- package/lib/types/nip54.test.d.ts +0 -1
- package/lib/types/nip55.d.ts +0 -30
- package/lib/types/nip55.test.d.ts +0 -1
- package/lib/types/nip57.d.ts +0 -25
- package/lib/types/nip57.test.d.ts +0 -1
- package/lib/types/nip58.d.ts +0 -134
- package/lib/types/nip58.test.d.ts +0 -1
- package/lib/types/nip59.d.ts +0 -12
- package/lib/types/nip59.test.d.ts +0 -1
- package/lib/types/nip75.d.ts +0 -61
- package/lib/types/nip75.test.d.ts +0 -1
- package/lib/types/nip77.d.ts +0 -102
- package/lib/types/nip77.test.d.ts +0 -1
- package/lib/types/nip94.d.ts +0 -87
- package/lib/types/nip94.test.d.ts +0 -1
- package/lib/types/nip98.d.ts +0 -74
- package/lib/types/nip98.test.d.ts +0 -1
- package/lib/types/nip99.d.ts +0 -92
- package/lib/types/nip99.test.d.ts +0 -1
- package/lib/types/nipb7.d.ts +0 -23
- package/lib/types/nipb7.test.d.ts +0 -1
- package/lib/types/pool.d.ts +0 -6
- package/lib/types/pool.test.d.ts +0 -1
- package/lib/types/pure.d.ts +0 -8
- package/lib/types/pure.test.d.ts +0 -1
- package/lib/types/references.d.ts +0 -10
- package/lib/types/references.test.d.ts +0 -1
- package/lib/types/relay.d.ts +0 -11
- package/lib/types/relay.test.d.ts +0 -1
- package/lib/types/signer.d.ts +0 -11
- package/lib/types/test-helpers.d.ts +0 -14
- package/lib/types/utils.d.ts +0 -9
- package/lib/types/utils.test.d.ts +0 -1
- package/lib/types/wasm.d.ts +0 -8
package/lib/esm/nip46.js
CHANGED
|
@@ -120,7 +120,8 @@ import { sha256 as sha2562 } from "@noble/hashes/sha2.js";
|
|
|
120
120
|
import { concatBytes, hexToBytes as hexToBytes3, randomBytes } from "@noble/hashes/utils.js";
|
|
121
121
|
import { base64 } from "@scure/base";
|
|
122
122
|
var minPlaintextSize = 1;
|
|
123
|
-
var maxPlaintextSize =
|
|
123
|
+
var maxPlaintextSize = 4294967295;
|
|
124
|
+
var extendedPrefixThreshold = 65536;
|
|
124
125
|
function getConversationKey(privkeyA, pubkeyB) {
|
|
125
126
|
const sharedX = secp256k1.getSharedSecret(privkeyA, hexToBytes3("02" + pubkeyB)).subarray(1, 33);
|
|
126
127
|
return hkdf_extract(sha2562, sharedX, utf8Encoder.encode("nip44-v2"));
|
|
@@ -138,28 +139,49 @@ function calcPaddedLen(len) {
|
|
|
138
139
|
throw new Error("expected positive integer");
|
|
139
140
|
if (len <= 32)
|
|
140
141
|
return 32;
|
|
141
|
-
const nextPower =
|
|
142
|
+
const nextPower = 2 ** (Math.floor(Math.log2(len - 1)) + 1);
|
|
142
143
|
const chunk = nextPower <= 256 ? 32 : nextPower / 8;
|
|
143
144
|
return chunk * (Math.floor((len - 1) / chunk) + 1);
|
|
144
145
|
}
|
|
145
146
|
function writeU16BE(num) {
|
|
146
|
-
if (!Number.isSafeInteger(num) || num < minPlaintextSize || num >
|
|
147
|
+
if (!Number.isSafeInteger(num) || num < minPlaintextSize || num > 65535)
|
|
147
148
|
throw new Error("invalid plaintext size: must be between 1 and 65535 bytes");
|
|
148
149
|
const arr = new Uint8Array(2);
|
|
149
150
|
new DataView(arr.buffer).setUint16(0, num, false);
|
|
150
151
|
return arr;
|
|
151
152
|
}
|
|
153
|
+
function writeU32BE(num) {
|
|
154
|
+
if (!Number.isSafeInteger(num) || num < extendedPrefixThreshold || num > maxPlaintextSize)
|
|
155
|
+
throw new Error("invalid plaintext size: must be between 65536 and 4294967295 bytes");
|
|
156
|
+
const arr = new Uint8Array(4);
|
|
157
|
+
new DataView(arr.buffer).setUint32(0, num, false);
|
|
158
|
+
return arr;
|
|
159
|
+
}
|
|
152
160
|
function pad(plaintext) {
|
|
153
161
|
const unpadded = utf8Encoder.encode(plaintext);
|
|
154
162
|
const unpaddedLen = unpadded.length;
|
|
155
|
-
|
|
163
|
+
if (unpaddedLen < minPlaintextSize || unpaddedLen > maxPlaintextSize)
|
|
164
|
+
throw new Error("invalid plaintext size: must be between 1 and 4294967295 bytes");
|
|
165
|
+
const prefix = unpaddedLen >= extendedPrefixThreshold ? concatBytes(new Uint8Array([0, 0]), writeU32BE(unpaddedLen)) : writeU16BE(unpaddedLen);
|
|
156
166
|
const suffix = new Uint8Array(calcPaddedLen(unpaddedLen) - unpaddedLen);
|
|
157
167
|
return concatBytes(prefix, unpadded, suffix);
|
|
158
168
|
}
|
|
159
169
|
function unpad(padded) {
|
|
160
|
-
const
|
|
161
|
-
const
|
|
162
|
-
|
|
170
|
+
const dv = new DataView(padded.buffer, padded.byteOffset, padded.byteLength);
|
|
171
|
+
const firstTwo = dv.getUint16(0);
|
|
172
|
+
let unpaddedLen;
|
|
173
|
+
let prefixLen;
|
|
174
|
+
if (firstTwo === 0) {
|
|
175
|
+
unpaddedLen = dv.getUint32(2);
|
|
176
|
+
if (unpaddedLen < extendedPrefixThreshold)
|
|
177
|
+
throw new Error("invalid padding");
|
|
178
|
+
prefixLen = 6;
|
|
179
|
+
} else {
|
|
180
|
+
unpaddedLen = firstTwo;
|
|
181
|
+
prefixLen = 2;
|
|
182
|
+
}
|
|
183
|
+
const unpadded = padded.subarray(prefixLen, prefixLen + unpaddedLen);
|
|
184
|
+
if (unpaddedLen < minPlaintextSize || unpaddedLen > maxPlaintextSize || unpadded.length !== unpaddedLen || padded.length !== prefixLen + calcPaddedLen(unpaddedLen))
|
|
163
185
|
throw new Error("invalid padding");
|
|
164
186
|
return utf8Decoder.decode(unpadded);
|
|
165
187
|
}
|
|
@@ -173,7 +195,7 @@ function decodePayload(payload) {
|
|
|
173
195
|
if (typeof payload !== "string")
|
|
174
196
|
throw new Error("payload must be a valid string");
|
|
175
197
|
const plen = payload.length;
|
|
176
|
-
if (plen < 132
|
|
198
|
+
if (plen < 132)
|
|
177
199
|
throw new Error("invalid payload length: " + plen);
|
|
178
200
|
if (payload[0] === "#")
|
|
179
201
|
throw new Error("unknown encryption version");
|
|
@@ -184,7 +206,7 @@ function decodePayload(payload) {
|
|
|
184
206
|
throw new Error("invalid base64: " + error.message);
|
|
185
207
|
}
|
|
186
208
|
const dlen = data.length;
|
|
187
|
-
if (dlen < 99
|
|
209
|
+
if (dlen < 99)
|
|
188
210
|
throw new Error("invalid data length: " + dlen);
|
|
189
211
|
const vers = data[0];
|
|
190
212
|
if (vers !== 2)
|
|
@@ -686,8 +708,12 @@ var AbstractRelay = class {
|
|
|
686
708
|
}
|
|
687
709
|
}
|
|
688
710
|
} catch (err) {
|
|
689
|
-
|
|
690
|
-
|
|
711
|
+
try {
|
|
712
|
+
const [_, __, event] = JSON.parse(json);
|
|
713
|
+
console.warn(`[nostr] relay ${this.url} error processing message:`, err, event);
|
|
714
|
+
} catch (_) {
|
|
715
|
+
console.warn(`[nostr] relay ${this.url} error processing message:`, err);
|
|
716
|
+
}
|
|
691
717
|
return;
|
|
692
718
|
}
|
|
693
719
|
}
|
|
@@ -1196,7 +1222,9 @@ var BunkerSigner = class {
|
|
|
1196
1222
|
signer.conversationKey = getConversationKey(clientSecretKey, event.pubkey);
|
|
1197
1223
|
signer.setupSubscription();
|
|
1198
1224
|
success = true;
|
|
1199
|
-
|
|
1225
|
+
if (!bunkerParams.skipSwitchRelays) {
|
|
1226
|
+
await Promise.race([new Promise((resolve2) => setTimeout(resolve2, 1e3)), signer.switchRelays()]);
|
|
1227
|
+
}
|
|
1200
1228
|
resolve(signer);
|
|
1201
1229
|
}
|
|
1202
1230
|
} catch (e) {
|