nostr-tools 2.23.3 → 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.
Files changed (122) hide show
  1. package/lib/cjs/index.js +175 -15
  2. package/lib/cjs/index.js.map +4 -4
  3. package/lib/cjs/nip17.js +31 -9
  4. package/lib/cjs/nip17.js.map +2 -2
  5. package/lib/cjs/nip22.js +154 -0
  6. package/lib/cjs/nip22.js.map +7 -0
  7. package/lib/cjs/nip44.js +34 -10
  8. package/lib/cjs/nip44.js.map +2 -2
  9. package/lib/cjs/nip46.js +34 -10
  10. package/lib/cjs/nip46.js.map +2 -2
  11. package/lib/cjs/nip47.js +3 -3
  12. package/lib/cjs/nip47.js.map +2 -2
  13. package/lib/cjs/nip59.js +31 -9
  14. package/lib/cjs/nip59.js.map +2 -2
  15. package/lib/esm/index.js +175 -15
  16. package/lib/esm/index.js.map +4 -4
  17. package/lib/esm/nip17.js +31 -9
  18. package/lib/esm/nip17.js.map +2 -2
  19. package/lib/esm/nip22.js +133 -0
  20. package/lib/esm/nip22.js.map +7 -0
  21. package/lib/esm/nip44.js +34 -10
  22. package/lib/esm/nip44.js.map +2 -2
  23. package/lib/esm/nip46.js +34 -10
  24. package/lib/esm/nip46.js.map +2 -2
  25. package/lib/esm/nip47.js +3 -3
  26. package/lib/esm/nip47.js.map +2 -2
  27. package/lib/esm/nip59.js +31 -9
  28. package/lib/esm/nip59.js.map +2 -2
  29. package/lib/nostr.bundle.js +175 -15
  30. package/lib/nostr.bundle.js.map +4 -4
  31. package/package.json +8 -2
  32. package/lib/types/abstract-pool.d.ts +0 -60
  33. package/lib/types/abstract-relay.d.ts +0 -110
  34. package/lib/types/benchmarks.d.ts +0 -1
  35. package/lib/types/core.d.ts +0 -32
  36. package/lib/types/core.test.d.ts +0 -1
  37. package/lib/types/fakejson.d.ts +0 -6
  38. package/lib/types/fakejson.test.d.ts +0 -1
  39. package/lib/types/filter.d.ts +0 -19
  40. package/lib/types/filter.test.d.ts +0 -1
  41. package/lib/types/helpers.d.ts +0 -2
  42. package/lib/types/index.d.ts +0 -30
  43. package/lib/types/kinds.d.ts +0 -200
  44. package/lib/types/kinds.test.d.ts +0 -1
  45. package/lib/types/nip04.d.ts +0 -2
  46. package/lib/types/nip04.test.d.ts +0 -1
  47. package/lib/types/nip05.d.ts +0 -17
  48. package/lib/types/nip05.test.d.ts +0 -1
  49. package/lib/types/nip06.d.ts +0 -15
  50. package/lib/types/nip06.test.d.ts +0 -1
  51. package/lib/types/nip07.d.ts +0 -13
  52. package/lib/types/nip10.d.ts +0 -24
  53. package/lib/types/nip10.test.d.ts +0 -1
  54. package/lib/types/nip11.d.ts +0 -266
  55. package/lib/types/nip11.test.d.ts +0 -1
  56. package/lib/types/nip13.d.ts +0 -8
  57. package/lib/types/nip13.test.d.ts +0 -1
  58. package/lib/types/nip17.d.ts +0 -15
  59. package/lib/types/nip17.test.d.ts +0 -1
  60. package/lib/types/nip18.d.ts +0 -22
  61. package/lib/types/nip18.test.d.ts +0 -1
  62. package/lib/types/nip19.d.ts +0 -81
  63. package/lib/types/nip19.test.d.ts +0 -1
  64. package/lib/types/nip21.d.ts +0 -34
  65. package/lib/types/nip21.test.d.ts +0 -1
  66. package/lib/types/nip25.d.ts +0 -15
  67. package/lib/types/nip25.test.d.ts +0 -1
  68. package/lib/types/nip27.d.ts +0 -32
  69. package/lib/types/nip27.test.d.ts +0 -1
  70. package/lib/types/nip28.d.ts +0 -46
  71. package/lib/types/nip28.test.d.ts +0 -1
  72. package/lib/types/nip29.d.ts +0 -265
  73. package/lib/types/nip30.d.ts +0 -22
  74. package/lib/types/nip30.test.d.ts +0 -1
  75. package/lib/types/nip39.d.ts +0 -2
  76. package/lib/types/nip39.test.d.ts +0 -1
  77. package/lib/types/nip40.d.ts +0 -10
  78. package/lib/types/nip40.test.d.ts +0 -1
  79. package/lib/types/nip42.d.ts +0 -5
  80. package/lib/types/nip42.test.d.ts +0 -1
  81. package/lib/types/nip44.d.ts +0 -13
  82. package/lib/types/nip44.test.d.ts +0 -1
  83. package/lib/types/nip46.d.ts +0 -117
  84. package/lib/types/nip47.d.ts +0 -9
  85. package/lib/types/nip47.test.d.ts +0 -1
  86. package/lib/types/nip49.d.ts +0 -3
  87. package/lib/types/nip49.test.d.ts +0 -1
  88. package/lib/types/nip54.d.ts +0 -1
  89. package/lib/types/nip54.test.d.ts +0 -1
  90. package/lib/types/nip55.d.ts +0 -30
  91. package/lib/types/nip55.test.d.ts +0 -1
  92. package/lib/types/nip57.d.ts +0 -25
  93. package/lib/types/nip57.test.d.ts +0 -1
  94. package/lib/types/nip58.d.ts +0 -134
  95. package/lib/types/nip58.test.d.ts +0 -1
  96. package/lib/types/nip59.d.ts +0 -12
  97. package/lib/types/nip59.test.d.ts +0 -1
  98. package/lib/types/nip75.d.ts +0 -61
  99. package/lib/types/nip75.test.d.ts +0 -1
  100. package/lib/types/nip77.d.ts +0 -102
  101. package/lib/types/nip77.test.d.ts +0 -1
  102. package/lib/types/nip94.d.ts +0 -87
  103. package/lib/types/nip94.test.d.ts +0 -1
  104. package/lib/types/nip98.d.ts +0 -74
  105. package/lib/types/nip98.test.d.ts +0 -1
  106. package/lib/types/nip99.d.ts +0 -92
  107. package/lib/types/nip99.test.d.ts +0 -1
  108. package/lib/types/nipb7.d.ts +0 -23
  109. package/lib/types/nipb7.test.d.ts +0 -1
  110. package/lib/types/pool.d.ts +0 -6
  111. package/lib/types/pool.test.d.ts +0 -1
  112. package/lib/types/pure.d.ts +0 -8
  113. package/lib/types/pure.test.d.ts +0 -1
  114. package/lib/types/references.d.ts +0 -10
  115. package/lib/types/references.test.d.ts +0 -1
  116. package/lib/types/relay.d.ts +0 -11
  117. package/lib/types/relay.test.d.ts +0 -1
  118. package/lib/types/signer.d.ts +0 -11
  119. package/lib/types/test-helpers.d.ts +0 -14
  120. package/lib/types/utils.d.ts +0 -9
  121. package/lib/types/utils.test.d.ts +0 -1
  122. 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 = 65535;
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 = 1 << Math.floor(Math.log2(len - 1)) + 1;
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 > maxPlaintextSize)
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
- const prefix = writeU16BE(unpaddedLen);
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 unpaddedLen = new DataView(padded.buffer).getUint16(0);
161
- const unpadded = padded.subarray(2, 2 + unpaddedLen);
162
- if (unpaddedLen < minPlaintextSize || unpaddedLen > maxPlaintextSize || unpadded.length !== unpaddedLen || padded.length !== 2 + calcPaddedLen(unpaddedLen))
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 || plen > 87472)
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 || dlen > 65603)
209
+ if (dlen < 99)
188
210
  throw new Error("invalid data length: " + dlen);
189
211
  const vers = data[0];
190
212
  if (vers !== 2)
@@ -1200,7 +1222,9 @@ var BunkerSigner = class {
1200
1222
  signer.conversationKey = getConversationKey(clientSecretKey, event.pubkey);
1201
1223
  signer.setupSubscription();
1202
1224
  success = true;
1203
- await Promise.race([new Promise((resolve2) => setTimeout(resolve2, 1e3)), signer.switchRelays()]);
1225
+ if (!bunkerParams.skipSwitchRelays) {
1226
+ await Promise.race([new Promise((resolve2) => setTimeout(resolve2, 1e3)), signer.switchRelays()]);
1227
+ }
1204
1228
  resolve(signer);
1205
1229
  }
1206
1230
  } catch (e) {