@welshman/signer 0.1.3 → 0.2.0

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 (188) hide show
  1. package/LICENSE +21 -0
  2. package/dist/lib/src/Deferred.d.ts +21 -0
  3. package/dist/lib/src/Deferred.d.ts.map +1 -0
  4. package/dist/lib/src/Deferred.js +21 -0
  5. package/dist/lib/src/Deferred.js.map +1 -0
  6. package/dist/lib/src/Emitter.d.ts +14 -0
  7. package/dist/lib/src/Emitter.d.ts.map +1 -0
  8. package/dist/lib/src/Emitter.js +18 -0
  9. package/dist/lib/src/Emitter.js.map +1 -0
  10. package/dist/lib/src/LRUCache.d.ts +42 -0
  11. package/dist/lib/src/LRUCache.d.ts.map +1 -0
  12. package/dist/lib/src/LRUCache.js +62 -0
  13. package/dist/lib/src/LRUCache.js.map +1 -0
  14. package/dist/lib/src/TaskQueue.d.ts +20 -0
  15. package/dist/lib/src/TaskQueue.d.ts.map +1 -0
  16. package/dist/lib/src/TaskQueue.js +57 -0
  17. package/dist/lib/src/TaskQueue.js.map +1 -0
  18. package/dist/lib/src/Tools.d.ts +727 -0
  19. package/dist/lib/src/Tools.d.ts.map +1 -0
  20. package/dist/lib/src/Tools.js +1224 -0
  21. package/dist/lib/src/Tools.js.map +1 -0
  22. package/dist/lib/src/index.d.ts +7 -0
  23. package/dist/lib/src/index.d.ts.map +1 -0
  24. package/dist/lib/src/index.js +7 -0
  25. package/dist/lib/src/index.js.map +1 -0
  26. package/dist/lib/src/normalize-url/index.d.ts +286 -0
  27. package/dist/lib/src/normalize-url/index.d.ts.map +1 -0
  28. package/dist/lib/src/normalize-url/index.js +252 -0
  29. package/dist/lib/src/normalize-url/index.js.map +1 -0
  30. package/dist/net/src/adapter.d.ts +44 -0
  31. package/dist/net/src/adapter.d.ts.map +1 -0
  32. package/dist/net/src/adapter.js +91 -0
  33. package/dist/net/src/adapter.js.map +1 -0
  34. package/dist/net/src/auth.d.ts +43 -0
  35. package/dist/net/src/auth.d.ts.map +1 -0
  36. package/dist/net/src/auth.js +114 -0
  37. package/dist/net/src/auth.js.map +1 -0
  38. package/dist/net/src/context.d.ts +13 -0
  39. package/dist/net/src/context.d.ts.map +1 -0
  40. package/dist/net/src/context.js +10 -0
  41. package/dist/net/src/context.js.map +1 -0
  42. package/dist/net/src/diff.d.ts +54 -0
  43. package/dist/net/src/diff.d.ts.map +1 -0
  44. package/dist/net/src/diff.js +146 -0
  45. package/dist/net/src/diff.js.map +1 -0
  46. package/dist/net/src/index.d.ts +13 -0
  47. package/dist/net/src/index.d.ts.map +1 -0
  48. package/dist/net/src/index.js +13 -0
  49. package/dist/net/src/index.js.map +1 -0
  50. package/dist/net/src/message.d.ts +60 -0
  51. package/dist/net/src/message.d.ts.map +1 -0
  52. package/dist/net/src/message.js +35 -0
  53. package/dist/net/src/message.js.map +1 -0
  54. package/dist/net/src/negentropy.d.ts +48 -0
  55. package/dist/net/src/negentropy.d.ts.map +1 -0
  56. package/dist/net/src/negentropy.js +536 -0
  57. package/dist/net/src/negentropy.js.map +1 -0
  58. package/dist/net/src/policy.d.ts +40 -0
  59. package/dist/net/src/policy.d.ts.map +1 -0
  60. package/dist/net/src/policy.js +180 -0
  61. package/dist/net/src/policy.js.map +1 -0
  62. package/dist/net/src/pool.d.ts +21 -0
  63. package/dist/net/src/pool.d.ts.map +1 -0
  64. package/dist/net/src/pool.js +67 -0
  65. package/dist/net/src/pool.js.map +1 -0
  66. package/dist/net/src/publish.d.ts +44 -0
  67. package/dist/net/src/publish.d.ts.map +1 -0
  68. package/dist/net/src/publish.js +96 -0
  69. package/dist/net/src/publish.js.map +1 -0
  70. package/dist/net/src/request.d.ts +55 -0
  71. package/dist/net/src/request.d.ts.map +1 -0
  72. package/dist/net/src/request.js +212 -0
  73. package/dist/net/src/request.js.map +1 -0
  74. package/dist/net/src/socket.d.ts +43 -0
  75. package/dist/net/src/socket.d.ts.map +1 -0
  76. package/dist/net/src/socket.js +115 -0
  77. package/dist/net/src/socket.js.map +1 -0
  78. package/dist/net/src/tracker.d.ts +16 -0
  79. package/dist/net/src/tracker.d.ts.map +1 -0
  80. package/dist/net/src/tracker.js +63 -0
  81. package/dist/net/src/tracker.js.map +1 -0
  82. package/dist/net/src/util.d.ts +2 -0
  83. package/dist/net/src/util.d.ts.map +1 -0
  84. package/dist/net/src/util.js +2 -0
  85. package/dist/net/src/util.js.map +1 -0
  86. package/dist/relay/src/index.d.ts +3 -0
  87. package/dist/relay/src/index.d.ts.map +1 -0
  88. package/dist/relay/src/index.js +3 -0
  89. package/dist/relay/src/index.js.map +1 -0
  90. package/dist/relay/src/relay.d.ts +13 -0
  91. package/dist/relay/src/relay.d.ts.map +1 -0
  92. package/dist/relay/src/relay.js +48 -0
  93. package/dist/relay/src/relay.js.map +1 -0
  94. package/dist/relay/src/repository.d.ts +63 -0
  95. package/dist/relay/src/repository.d.ts.map +1 -0
  96. package/dist/relay/src/repository.js +270 -0
  97. package/dist/relay/src/repository.js.map +1 -0
  98. package/{build → dist/signer}/src/index.d.ts +1 -0
  99. package/dist/signer/src/index.d.ts.map +1 -0
  100. package/dist/signer/src/index.js.map +1 -0
  101. package/{build → dist/signer}/src/nip59.d.ts +1 -0
  102. package/dist/signer/src/nip59.d.ts.map +1 -0
  103. package/dist/signer/src/nip59.js.map +1 -0
  104. package/{build → dist/signer}/src/signers/nip01.d.ts +1 -0
  105. package/dist/signer/src/signers/nip01.d.ts.map +1 -0
  106. package/dist/signer/src/signers/nip01.js.map +1 -0
  107. package/{build → dist/signer}/src/signers/nip07.d.ts +1 -0
  108. package/dist/signer/src/signers/nip07.d.ts.map +1 -0
  109. package/dist/signer/src/signers/nip07.js.map +1 -0
  110. package/{build → dist/signer}/src/signers/nip46.d.ts +4 -3
  111. package/dist/signer/src/signers/nip46.d.ts.map +1 -0
  112. package/{build → dist/signer}/src/signers/nip46.js +26 -20
  113. package/dist/signer/src/signers/nip46.js.map +1 -0
  114. package/{build → dist/signer}/src/signers/nip55.d.ts +1 -0
  115. package/dist/signer/src/signers/nip55.d.ts.map +1 -0
  116. package/dist/signer/src/signers/nip55.js.map +1 -0
  117. package/{build → dist/signer}/src/util.d.ts +3 -2
  118. package/dist/signer/src/util.d.ts.map +1 -0
  119. package/dist/signer/src/util.js.map +1 -0
  120. package/dist/tsconfig.build.tsbuildinfo +1 -0
  121. package/dist/util/src/Address.d.ts +21 -0
  122. package/dist/util/src/Address.d.ts.map +1 -0
  123. package/dist/util/src/Address.js +43 -0
  124. package/dist/util/src/Address.js.map +1 -0
  125. package/dist/util/src/Encryptable.d.ts +34 -0
  126. package/dist/util/src/Encryptable.d.ts.map +1 -0
  127. package/dist/util/src/Encryptable.js +52 -0
  128. package/dist/util/src/Encryptable.js.map +1 -0
  129. package/dist/util/src/Events.d.ts +77 -0
  130. package/dist/util/src/Events.d.ts.map +1 -0
  131. package/dist/util/src/Events.js +63 -0
  132. package/dist/util/src/Events.js.map +1 -0
  133. package/dist/util/src/Filters.d.ts +48 -0
  134. package/dist/util/src/Filters.d.ts.map +1 -0
  135. package/dist/util/src/Filters.js +185 -0
  136. package/dist/util/src/Filters.js.map +1 -0
  137. package/dist/util/src/Handler.d.ts +17 -0
  138. package/dist/util/src/Handler.d.ts.map +1 -0
  139. package/dist/util/src/Handler.js +33 -0
  140. package/dist/util/src/Handler.js.map +1 -0
  141. package/dist/util/src/Kinds.d.ts +159 -0
  142. package/dist/util/src/Kinds.d.ts.map +1 -0
  143. package/dist/util/src/Kinds.js +160 -0
  144. package/dist/util/src/Kinds.js.map +1 -0
  145. package/dist/util/src/Links.d.ts +3 -0
  146. package/dist/util/src/Links.d.ts.map +1 -0
  147. package/dist/util/src/Links.js +3 -0
  148. package/dist/util/src/Links.js.map +1 -0
  149. package/dist/util/src/List.d.ts +34 -0
  150. package/dist/util/src/List.d.ts.map +1 -0
  151. package/dist/util/src/List.js +74 -0
  152. package/dist/util/src/List.js.map +1 -0
  153. package/dist/util/src/Profile.d.ts +26 -0
  154. package/dist/util/src/Profile.d.ts.map +1 -0
  155. package/dist/util/src/Profile.js +50 -0
  156. package/dist/util/src/Profile.js.map +1 -0
  157. package/dist/util/src/Relay.d.ts +32 -0
  158. package/dist/util/src/Relay.d.ts.map +1 -0
  159. package/dist/util/src/Relay.js +49 -0
  160. package/dist/util/src/Relay.js.map +1 -0
  161. package/dist/util/src/Tags.d.ts +32 -0
  162. package/dist/util/src/Tags.d.ts.map +1 -0
  163. package/dist/util/src/Tags.js +74 -0
  164. package/dist/util/src/Tags.js.map +1 -0
  165. package/dist/util/src/Zaps.d.ts +20 -0
  166. package/dist/util/src/Zaps.d.ts.map +1 -0
  167. package/dist/util/src/Zaps.js +93 -0
  168. package/dist/util/src/Zaps.js.map +1 -0
  169. package/dist/util/src/index.d.ts +13 -0
  170. package/dist/util/src/index.d.ts.map +1 -0
  171. package/dist/util/src/index.js +13 -0
  172. package/dist/util/src/index.js.map +1 -0
  173. package/package.json +18 -24
  174. package/README.md +0 -93
  175. package/build/src/index.js.map +0 -1
  176. package/build/src/nip59.js.map +0 -1
  177. package/build/src/signers/nip01.js.map +0 -1
  178. package/build/src/signers/nip07.js.map +0 -1
  179. package/build/src/signers/nip46.js.map +0 -1
  180. package/build/src/signers/nip55.js.map +0 -1
  181. package/build/src/util.js.map +0 -1
  182. package/build/tsconfig.tsbuildinfo +0 -1
  183. /package/{build → dist/signer}/src/index.js +0 -0
  184. /package/{build → dist/signer}/src/nip59.js +0 -0
  185. /package/{build → dist/signer}/src/signers/nip01.js +0 -0
  186. /package/{build → dist/signer}/src/signers/nip07.js +0 -0
  187. /package/{build → dist/signer}/src/signers/nip55.js +0 -0
  188. /package/{build → dist/signer}/src/util.js +0 -0
@@ -0,0 +1,536 @@
1
+ // (C) 2023 Doug Hoyte. MIT license
2
+ /* eslint-disable */
3
+ // @ts-nocheck
4
+ const PROTOCOL_VERSION = 0x61; // Version 1
5
+ const ID_SIZE = 32;
6
+ const FINGERPRINT_SIZE = 16;
7
+ const Mode = {
8
+ Skip: 0,
9
+ Fingerprint: 1,
10
+ IdList: 2,
11
+ };
12
+ class WrappedBuffer {
13
+ constructor(buffer) {
14
+ this._raw = new Uint8Array(buffer || 512);
15
+ this.length = buffer ? buffer.length : 0;
16
+ }
17
+ unwrap() {
18
+ return this._raw.subarray(0, this.length);
19
+ }
20
+ get capacity() {
21
+ return this._raw.byteLength;
22
+ }
23
+ extend(buf) {
24
+ if (buf._raw)
25
+ buf = buf.unwrap();
26
+ if (typeof buf.length !== "number")
27
+ throw Error("bad length");
28
+ const targetSize = buf.length + this.length;
29
+ if (this.capacity < targetSize) {
30
+ const oldRaw = this._raw;
31
+ const newCapacity = Math.max(this.capacity * 2, targetSize);
32
+ this._raw = new Uint8Array(newCapacity);
33
+ this._raw.set(oldRaw);
34
+ }
35
+ this._raw.set(buf, this.length);
36
+ this.length += buf.length;
37
+ }
38
+ shift() {
39
+ const first = this._raw[0];
40
+ this._raw = this._raw.subarray(1);
41
+ this.length--;
42
+ return first;
43
+ }
44
+ shiftN(n = 1) {
45
+ const firstSubarray = this._raw.subarray(0, n);
46
+ this._raw = this._raw.subarray(n);
47
+ this.length -= n;
48
+ return firstSubarray;
49
+ }
50
+ }
51
+ function decodeVarInt(buf) {
52
+ let res = 0;
53
+ while (1) {
54
+ if (buf.length === 0)
55
+ throw Error("parse ends prematurely");
56
+ const byte = buf.shift();
57
+ res = (res << 7) | (byte & 127);
58
+ if ((byte & 128) === 0)
59
+ break;
60
+ }
61
+ return res;
62
+ }
63
+ function encodeVarInt(n) {
64
+ if (n === 0)
65
+ return new WrappedBuffer([0]);
66
+ const o = [];
67
+ while (n !== 0) {
68
+ o.push(n & 127);
69
+ n >>>= 7;
70
+ }
71
+ o.reverse();
72
+ for (let i = 0; i < o.length - 1; i++)
73
+ o[i] |= 128;
74
+ return new WrappedBuffer(o);
75
+ }
76
+ function getByte(buf) {
77
+ return getBytes(buf, 1)[0];
78
+ }
79
+ function getBytes(buf, n) {
80
+ if (buf.length < n)
81
+ throw Error("parse ends prematurely");
82
+ return buf.shiftN(n);
83
+ }
84
+ class Accumulator {
85
+ constructor() {
86
+ this.setToZero();
87
+ if (typeof window === "undefined") {
88
+ // node.js
89
+ const crypto = require("crypto");
90
+ this.sha256 = async (slice) => new Uint8Array(crypto.createHash("sha256").update(slice).digest());
91
+ }
92
+ else {
93
+ // browser
94
+ this.sha256 = async (slice) => new Uint8Array(await crypto.subtle.digest("SHA-256", slice));
95
+ }
96
+ }
97
+ setToZero() {
98
+ this.buf = new Uint8Array(ID_SIZE);
99
+ }
100
+ add(otherBuf) {
101
+ let currCarry = 0, nextCarry = 0;
102
+ const p = new DataView(this.buf.buffer);
103
+ const po = new DataView(otherBuf.buffer);
104
+ for (let i = 0; i < 8; i++) {
105
+ const offset = i * 4;
106
+ const orig = p.getUint32(offset, true);
107
+ const otherV = po.getUint32(offset, true);
108
+ let next = orig;
109
+ next += currCarry;
110
+ next += otherV;
111
+ if (next > 0xffffffff)
112
+ nextCarry = 1;
113
+ p.setUint32(offset, next & 0xffffffff, true);
114
+ currCarry = nextCarry;
115
+ nextCarry = 0;
116
+ }
117
+ }
118
+ negate() {
119
+ const p = new DataView(this.buf.buffer);
120
+ for (let i = 0; i < 8; i++) {
121
+ const offset = i * 4;
122
+ p.setUint32(offset, ~p.getUint32(offset, true));
123
+ }
124
+ const one = new Uint8Array(ID_SIZE);
125
+ one[0] = 1;
126
+ this.add(one);
127
+ }
128
+ async getFingerprint(n) {
129
+ const input = new WrappedBuffer();
130
+ input.extend(this.buf);
131
+ input.extend(encodeVarInt(n));
132
+ const hash = await this.sha256(input.unwrap());
133
+ return hash.subarray(0, FINGERPRINT_SIZE);
134
+ }
135
+ }
136
+ class NegentropyStorageVector {
137
+ constructor() {
138
+ this.items = [];
139
+ this.sealed = false;
140
+ }
141
+ insert(timestamp, id) {
142
+ if (this.sealed)
143
+ throw Error("already sealed");
144
+ id = loadInputBuffer(id);
145
+ if (id.byteLength !== ID_SIZE)
146
+ throw Error("bad id size for added item");
147
+ this.items.push({ timestamp, id });
148
+ }
149
+ seal() {
150
+ if (this.sealed)
151
+ throw Error("already sealed");
152
+ this.sealed = true;
153
+ this.items.sort(itemCompare);
154
+ for (let i = 1; i < this.items.length; i++) {
155
+ if (itemCompare(this.items[i - 1], this.items[i]) === 0)
156
+ throw Error("duplicate item inserted");
157
+ }
158
+ }
159
+ unseal() {
160
+ this.sealed = false;
161
+ }
162
+ size() {
163
+ this._checkSealed();
164
+ return this.items.length;
165
+ }
166
+ getItem(i) {
167
+ this._checkSealed();
168
+ if (i >= this.items.length)
169
+ throw Error("out of range");
170
+ return this.items[i];
171
+ }
172
+ iterate(begin, end, cb) {
173
+ this._checkSealed();
174
+ this._checkBounds(begin, end);
175
+ for (let i = begin; i < end; ++i) {
176
+ if (!cb(this.items[i], i))
177
+ break;
178
+ }
179
+ }
180
+ findLowerBound(begin, end, bound) {
181
+ this._checkSealed();
182
+ this._checkBounds(begin, end);
183
+ return this._binarySearch(this.items, begin, end, a => itemCompare(a, bound) < 0);
184
+ }
185
+ async fingerprint(begin, end) {
186
+ const out = new Accumulator();
187
+ out.setToZero();
188
+ this.iterate(begin, end, (item, i) => {
189
+ out.add(item.id);
190
+ return true;
191
+ });
192
+ return await out.getFingerprint(end - begin);
193
+ }
194
+ _checkSealed() {
195
+ if (!this.sealed)
196
+ throw Error("not sealed");
197
+ }
198
+ _checkBounds(begin, end) {
199
+ if (begin > end || end > this.items.length)
200
+ throw Error("bad range");
201
+ }
202
+ _binarySearch(arr, first, last, cmp) {
203
+ let count = last - first;
204
+ while (count > 0) {
205
+ let it = first;
206
+ const step = Math.floor(count / 2);
207
+ it += step;
208
+ if (cmp(arr[it])) {
209
+ first = ++it;
210
+ count -= step + 1;
211
+ }
212
+ else {
213
+ count = step;
214
+ }
215
+ }
216
+ return first;
217
+ }
218
+ }
219
+ class Negentropy {
220
+ constructor(storage, frameSizeLimit = 0) {
221
+ if (frameSizeLimit !== 0 && frameSizeLimit < 4096)
222
+ throw Error("frameSizeLimit too small");
223
+ this.storage = storage;
224
+ this.frameSizeLimit = frameSizeLimit;
225
+ this.lastTimestampIn = 0;
226
+ this.lastTimestampOut = 0;
227
+ }
228
+ _bound(timestamp, id) {
229
+ return { timestamp, id: id ? id : new Uint8Array(0) };
230
+ }
231
+ async initiate() {
232
+ if (this.isInitiator)
233
+ throw Error("already initiated");
234
+ this.isInitiator = true;
235
+ const output = new WrappedBuffer();
236
+ output.extend([PROTOCOL_VERSION]);
237
+ await this.splitRange(0, this.storage.size(), this._bound(Number.MAX_VALUE), output);
238
+ return this._renderOutput(output);
239
+ }
240
+ setInitiator() {
241
+ this.isInitiator = true;
242
+ }
243
+ async reconcile(query) {
244
+ const haveIds = [], needIds = [];
245
+ query = new WrappedBuffer(loadInputBuffer(query));
246
+ this.lastTimestampIn = this.lastTimestampOut = 0; // reset for each message
247
+ const fullOutput = new WrappedBuffer();
248
+ fullOutput.extend([PROTOCOL_VERSION]);
249
+ const protocolVersion = getByte(query);
250
+ if (protocolVersion < 0x60 || protocolVersion > 0x6f)
251
+ throw Error("invalid negentropy protocol version byte");
252
+ if (protocolVersion !== PROTOCOL_VERSION) {
253
+ if (this.isInitiator)
254
+ throw Error("unsupported negentropy protocol version requested: " + (protocolVersion - 0x60));
255
+ else
256
+ return [this._renderOutput(fullOutput), haveIds, needIds];
257
+ }
258
+ const storageSize = this.storage.size();
259
+ let prevBound = this._bound(0);
260
+ let prevIndex = 0;
261
+ let skip = false;
262
+ while (query.length !== 0) {
263
+ let o = new WrappedBuffer();
264
+ const doSkip = () => {
265
+ if (skip) {
266
+ skip = false;
267
+ o.extend(this.encodeBound(prevBound));
268
+ o.extend(encodeVarInt(Mode.Skip));
269
+ }
270
+ };
271
+ const currBound = this.decodeBound(query);
272
+ const mode = decodeVarInt(query);
273
+ const lower = prevIndex;
274
+ let upper = this.storage.findLowerBound(prevIndex, storageSize, currBound);
275
+ if (mode === Mode.Skip) {
276
+ skip = true;
277
+ }
278
+ else if (mode === Mode.Fingerprint) {
279
+ const theirFingerprint = getBytes(query, FINGERPRINT_SIZE);
280
+ const ourFingerprint = await this.storage.fingerprint(lower, upper);
281
+ if (compareUint8Array(theirFingerprint, ourFingerprint) !== 0) {
282
+ doSkip();
283
+ await this.splitRange(lower, upper, currBound, o);
284
+ }
285
+ else {
286
+ skip = true;
287
+ }
288
+ }
289
+ else if (mode === Mode.IdList) {
290
+ const numIds = decodeVarInt(query);
291
+ const theirElems = {}; // stringified Uint8Array -> original Uint8Array (or hex)
292
+ for (let i = 0; i < numIds; i++) {
293
+ const e = getBytes(query, ID_SIZE);
294
+ if (this.isInitiator)
295
+ theirElems[e] = e;
296
+ }
297
+ if (this.isInitiator) {
298
+ skip = true;
299
+ this.storage.iterate(lower, upper, item => {
300
+ const k = item.id;
301
+ if (!theirElems[k]) {
302
+ // ID exists on our side, but not their side
303
+ if (this.isInitiator)
304
+ haveIds.push(this.wantUint8ArrayOutput ? k : uint8ArrayToHex(k));
305
+ }
306
+ else {
307
+ // ID exists on both sides
308
+ delete theirElems[k];
309
+ }
310
+ return true;
311
+ });
312
+ for (const v of Object.values(theirElems)) {
313
+ // ID exists on their side, but not our side
314
+ needIds.push(this.wantUint8ArrayOutput ? v : uint8ArrayToHex(v));
315
+ }
316
+ }
317
+ else {
318
+ doSkip();
319
+ const responseIds = new WrappedBuffer();
320
+ let numResponseIds = 0;
321
+ let endBound = currBound;
322
+ this.storage.iterate(lower, upper, (item, index) => {
323
+ if (this.exceededFrameSizeLimit(fullOutput.length + responseIds.length)) {
324
+ endBound = item;
325
+ upper = index; // shrink upper so that remaining range gets correct fingerprint
326
+ return false;
327
+ }
328
+ responseIds.extend(item.id);
329
+ numResponseIds++;
330
+ return true;
331
+ });
332
+ o.extend(this.encodeBound(endBound));
333
+ o.extend(encodeVarInt(Mode.IdList));
334
+ o.extend(encodeVarInt(numResponseIds));
335
+ o.extend(responseIds);
336
+ fullOutput.extend(o);
337
+ o = new WrappedBuffer();
338
+ }
339
+ }
340
+ else {
341
+ throw Error("unexpected mode");
342
+ }
343
+ if (this.exceededFrameSizeLimit(fullOutput.length + o.length)) {
344
+ // frameSizeLimit exceeded: Stop range processing and return a fingerprint for the remaining range
345
+ const remainingFingerprint = await this.storage.fingerprint(upper, storageSize);
346
+ fullOutput.extend(this.encodeBound(this._bound(Number.MAX_VALUE)));
347
+ fullOutput.extend(encodeVarInt(Mode.Fingerprint));
348
+ fullOutput.extend(remainingFingerprint);
349
+ break;
350
+ }
351
+ else {
352
+ fullOutput.extend(o);
353
+ }
354
+ prevIndex = upper;
355
+ prevBound = currBound;
356
+ }
357
+ return [
358
+ fullOutput.length === 1 && this.isInitiator ? null : this._renderOutput(fullOutput),
359
+ haveIds,
360
+ needIds,
361
+ ];
362
+ }
363
+ async splitRange(lower, upper, upperBound, o) {
364
+ const numElems = upper - lower;
365
+ const buckets = 16;
366
+ if (numElems < buckets * 2) {
367
+ o.extend(this.encodeBound(upperBound));
368
+ o.extend(encodeVarInt(Mode.IdList));
369
+ o.extend(encodeVarInt(numElems));
370
+ this.storage.iterate(lower, upper, item => {
371
+ o.extend(item.id);
372
+ return true;
373
+ });
374
+ }
375
+ else {
376
+ const itemsPerBucket = Math.floor(numElems / buckets);
377
+ const bucketsWithExtra = numElems % buckets;
378
+ let curr = lower;
379
+ for (let i = 0; i < buckets; i++) {
380
+ const bucketSize = itemsPerBucket + (i < bucketsWithExtra ? 1 : 0);
381
+ const ourFingerprint = await this.storage.fingerprint(curr, curr + bucketSize);
382
+ curr += bucketSize;
383
+ let nextBound;
384
+ if (curr === upper) {
385
+ nextBound = upperBound;
386
+ }
387
+ else {
388
+ let prevItem, currItem;
389
+ this.storage.iterate(curr - 1, curr + 1, (item, index) => {
390
+ if (index === curr - 1)
391
+ prevItem = item;
392
+ else
393
+ currItem = item;
394
+ return true;
395
+ });
396
+ nextBound = this.getMinimalBound(prevItem, currItem);
397
+ }
398
+ o.extend(this.encodeBound(nextBound));
399
+ o.extend(encodeVarInt(Mode.Fingerprint));
400
+ o.extend(ourFingerprint);
401
+ }
402
+ }
403
+ }
404
+ _renderOutput(o) {
405
+ o = o.unwrap();
406
+ if (!this.wantUint8ArrayOutput)
407
+ o = uint8ArrayToHex(o);
408
+ return o;
409
+ }
410
+ exceededFrameSizeLimit(n) {
411
+ return this.frameSizeLimit && n > this.frameSizeLimit - 200;
412
+ }
413
+ // Decoding
414
+ decodeTimestampIn(encoded) {
415
+ let timestamp = decodeVarInt(encoded);
416
+ timestamp = timestamp === 0 ? Number.MAX_VALUE : timestamp - 1;
417
+ if (this.lastTimestampIn === Number.MAX_VALUE || timestamp === Number.MAX_VALUE) {
418
+ this.lastTimestampIn = Number.MAX_VALUE;
419
+ return Number.MAX_VALUE;
420
+ }
421
+ timestamp += this.lastTimestampIn;
422
+ this.lastTimestampIn = timestamp;
423
+ return timestamp;
424
+ }
425
+ decodeBound(encoded) {
426
+ const timestamp = this.decodeTimestampIn(encoded);
427
+ const len = decodeVarInt(encoded);
428
+ if (len > ID_SIZE)
429
+ throw Error("bound key too long");
430
+ const id = getBytes(encoded, len);
431
+ return { timestamp, id };
432
+ }
433
+ // Encoding
434
+ encodeTimestampOut(timestamp) {
435
+ if (timestamp === Number.MAX_VALUE) {
436
+ this.lastTimestampOut = Number.MAX_VALUE;
437
+ return encodeVarInt(0);
438
+ }
439
+ const temp = timestamp;
440
+ timestamp -= this.lastTimestampOut;
441
+ this.lastTimestampOut = temp;
442
+ return encodeVarInt(timestamp + 1);
443
+ }
444
+ encodeBound(key) {
445
+ const output = new WrappedBuffer();
446
+ output.extend(this.encodeTimestampOut(key.timestamp));
447
+ output.extend(encodeVarInt(key.id.length));
448
+ output.extend(key.id);
449
+ return output;
450
+ }
451
+ getMinimalBound(prev, curr) {
452
+ if (curr.timestamp !== prev.timestamp) {
453
+ return this._bound(curr.timestamp);
454
+ }
455
+ else {
456
+ let sharedPrefixBytes = 0;
457
+ const currKey = curr.id;
458
+ const prevKey = prev.id;
459
+ for (let i = 0; i < ID_SIZE; i++) {
460
+ if (currKey[i] !== prevKey[i])
461
+ break;
462
+ sharedPrefixBytes++;
463
+ }
464
+ return this._bound(curr.timestamp, curr.id.subarray(0, sharedPrefixBytes + 1));
465
+ }
466
+ }
467
+ }
468
+ function loadInputBuffer(inp) {
469
+ if (typeof inp === "string")
470
+ inp = hexToUint8Array(inp);
471
+ else if (__proto__ !== Uint8Array.prototype)
472
+ inp = new Uint8Array(inp); // node Buffer?
473
+ return inp;
474
+ }
475
+ function hexToUint8Array(h) {
476
+ if (h.startsWith("0x"))
477
+ h = h.substr(2);
478
+ if (h.length % 2 === 1)
479
+ throw Error("odd length of hex string");
480
+ const arr = new Uint8Array(h.length / 2);
481
+ for (let i = 0; i < arr.length; i++)
482
+ arr[i] = parseInt(h.substr(i * 2, 2), 16);
483
+ return arr;
484
+ }
485
+ const uint8ArrayToHexLookupTable = new Array(256);
486
+ {
487
+ const hexAlphabet = [
488
+ "0",
489
+ "1",
490
+ "2",
491
+ "3",
492
+ "4",
493
+ "5",
494
+ "6",
495
+ "7",
496
+ "8",
497
+ "9",
498
+ "a",
499
+ "b",
500
+ "c",
501
+ "d",
502
+ "e",
503
+ "f",
504
+ ];
505
+ for (let i = 0; i < 256; i++) {
506
+ uint8ArrayToHexLookupTable[i] = hexAlphabet[(i >>> 4) & 0xf] + hexAlphabet[i & 0xf];
507
+ }
508
+ }
509
+ function uint8ArrayToHex(arr) {
510
+ let out = "";
511
+ for (let i = 0, edx = arr.length; i < edx; i++) {
512
+ out += uint8ArrayToHexLookupTable[arr[i]];
513
+ }
514
+ return out;
515
+ }
516
+ function compareUint8Array(a, b) {
517
+ for (let i = 0; i < a.byteLength; i++) {
518
+ if (a[i] < b[i])
519
+ return -1;
520
+ if (a[i] > b[i])
521
+ return 1;
522
+ }
523
+ if (a.byteLength > b.byteLength)
524
+ return 1;
525
+ if (a.byteLength < b.byteLength)
526
+ return -1;
527
+ return 0;
528
+ }
529
+ function itemCompare(a, b) {
530
+ if (a.timestamp === b.timestamp) {
531
+ return compareUint8Array(a.id, b.id);
532
+ }
533
+ return a.timestamp - b.timestamp;
534
+ }
535
+ export { Negentropy, NegentropyStorageVector };
536
+ //# sourceMappingURL=negentropy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"negentropy.js","sourceRoot":"","sources":["../../../../net/src/negentropy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { StampedEvent, SignedEvent } from "@welshman/util";
2
+ import { Socket } from "./socket.js";
3
+ /**
4
+ * Handles auth-related message management:
5
+ * - Defers sending messages when a challenge is pending
6
+ * - Re-enqueues event/req messages once if rejected due to auth-required
7
+ * @param socket - a Socket object
8
+ * @return a cleanup function
9
+ */
10
+ export declare const socketPolicyAuthBuffer: (socket: Socket) => () => void;
11
+ /**
12
+ * Auto-connects a closed socket when a message is sent unless there was a recent error
13
+ * @param socket - a Socket object
14
+ * @return a cleanup function
15
+ */
16
+ export declare const socketPolicyConnectOnSend: (socket: Socket) => () => void;
17
+ /**
18
+ * Auto-closes a socket after 30 seconds of inactivity
19
+ * @param socket - a Socket object
20
+ * @return a cleanup function
21
+ */
22
+ export declare const socketPolicyCloseOnTimeout: (socket: Socket) => () => void;
23
+ /**
24
+ * Automatically re-opens a socket if there are active requests or publishes
25
+ * @param socket - a Socket object
26
+ * @return a cleanup function
27
+ */
28
+ export declare const socketPolicyReopenActive: (socket: Socket) => () => void;
29
+ export type SocketPolicyAuthOptions = {
30
+ sign: (event: StampedEvent) => Promise<SignedEvent>;
31
+ shouldAuth?: (socket: Socket) => boolean;
32
+ };
33
+ /**
34
+ * Factory function for a policy which may authenticate the socket
35
+ * @param options - SocketPolicyAuthOptions object
36
+ * @return a socket policy
37
+ */
38
+ export declare const makeSocketPolicyAuth: (options: SocketPolicyAuthOptions) => (socket: Socket) => () => void;
39
+ export declare const defaultSocketPolicies: ((socket: Socket) => () => void)[];
40
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../net/src/policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,YAAY,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAA;AAanE,OAAO,EAAC,MAAM,EAA4B,MAAM,aAAa,CAAA;AAG7D;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,MAAM,eAuDpD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,QAAQ,MAAM,eAmBvD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,QAAQ,MAAM,eAsBxD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,eA0CtD,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;CACzC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,SAAS,uBAAuB,MAAM,QAAQ,MAAM,eAcxF,CAAA;AAED,eAAO,MAAM,qBAAqB,YA3La,MAAM,kBAgMpD,CAAA"}