@peerbit/log 1.0.2

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 (92) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +11 -0
  3. package/lib/esm/change.d.ts +5 -0
  4. package/lib/esm/change.js +2 -0
  5. package/lib/esm/change.js.map +1 -0
  6. package/lib/esm/clock.d.ts +87 -0
  7. package/lib/esm/clock.js +260 -0
  8. package/lib/esm/clock.js.map +1 -0
  9. package/lib/esm/difference.d.ts +1 -0
  10. package/lib/esm/difference.js +20 -0
  11. package/lib/esm/difference.js.map +1 -0
  12. package/lib/esm/encoding.d.ts +7 -0
  13. package/lib/esm/encoding.js +20 -0
  14. package/lib/esm/encoding.js.map +1 -0
  15. package/lib/esm/entry-index.d.ts +21 -0
  16. package/lib/esm/entry-index.js +63 -0
  17. package/lib/esm/entry-index.js.map +1 -0
  18. package/lib/esm/entry-with-refs.d.ts +5 -0
  19. package/lib/esm/entry-with-refs.js +2 -0
  20. package/lib/esm/entry-with-refs.js.map +1 -0
  21. package/lib/esm/entry.d.ts +179 -0
  22. package/lib/esm/entry.js +591 -0
  23. package/lib/esm/entry.js.map +1 -0
  24. package/lib/esm/find-uniques.d.ts +1 -0
  25. package/lib/esm/find-uniques.js +12 -0
  26. package/lib/esm/find-uniques.js.map +1 -0
  27. package/lib/esm/heads-cache.d.ts +64 -0
  28. package/lib/esm/heads-cache.js +317 -0
  29. package/lib/esm/heads-cache.js.map +1 -0
  30. package/lib/esm/heads.d.ts +63 -0
  31. package/lib/esm/heads.js +143 -0
  32. package/lib/esm/heads.js.map +1 -0
  33. package/lib/esm/hrtime.d.ts +5 -0
  34. package/lib/esm/hrtime.js +71 -0
  35. package/lib/esm/hrtime.js.map +1 -0
  36. package/lib/esm/index.d.ts +11 -0
  37. package/lib/esm/index.js +11 -0
  38. package/lib/esm/index.js.map +1 -0
  39. package/lib/esm/is-defined.d.ts +1 -0
  40. package/lib/esm/is-defined.js +2 -0
  41. package/lib/esm/is-defined.js.map +1 -0
  42. package/lib/esm/log-errors.d.ts +5 -0
  43. package/lib/esm/log-errors.js +6 -0
  44. package/lib/esm/log-errors.js.map +1 -0
  45. package/lib/esm/log-sorting.d.ts +44 -0
  46. package/lib/esm/log-sorting.js +86 -0
  47. package/lib/esm/log-sorting.js.map +1 -0
  48. package/lib/esm/log.d.ts +205 -0
  49. package/lib/esm/log.js +1004 -0
  50. package/lib/esm/log.js.map +1 -0
  51. package/lib/esm/logger.d.ts +2 -0
  52. package/lib/esm/logger.js +4 -0
  53. package/lib/esm/logger.js.map +1 -0
  54. package/lib/esm/package.json +3 -0
  55. package/lib/esm/snapshot.d.ts +22 -0
  56. package/lib/esm/snapshot.js +83 -0
  57. package/lib/esm/snapshot.js.map +1 -0
  58. package/lib/esm/trim.d.ts +49 -0
  59. package/lib/esm/trim.js +203 -0
  60. package/lib/esm/trim.js.map +1 -0
  61. package/lib/esm/types.d.ts +6 -0
  62. package/lib/esm/types.js +23 -0
  63. package/lib/esm/types.js.map +1 -0
  64. package/lib/esm/utils.d.ts +2 -0
  65. package/lib/esm/utils.js +3 -0
  66. package/lib/esm/utils.js.map +1 -0
  67. package/lib/esm/values.d.ts +33 -0
  68. package/lib/esm/values.js +141 -0
  69. package/lib/esm/values.js.map +1 -0
  70. package/package.json +79 -0
  71. package/src/change.ts +2 -0
  72. package/src/clock.ts +280 -0
  73. package/src/difference.ts +22 -0
  74. package/src/encoding.ts +27 -0
  75. package/src/entry-index.ts +78 -0
  76. package/src/entry-with-refs.ts +6 -0
  77. package/src/entry.ts +749 -0
  78. package/src/find-uniques.ts +14 -0
  79. package/src/heads-cache.ts +400 -0
  80. package/src/heads.ts +208 -0
  81. package/src/hrtime.ts +78 -0
  82. package/src/index.ts +11 -0
  83. package/src/is-defined.ts +1 -0
  84. package/src/log-errors.ts +9 -0
  85. package/src/log-sorting.ts +108 -0
  86. package/src/log.ts +1262 -0
  87. package/src/logger.ts +3 -0
  88. package/src/snapshot.ts +103 -0
  89. package/src/trim.ts +269 -0
  90. package/src/types.ts +12 -0
  91. package/src/utils.ts +2 -0
  92. package/src/values.ts +193 -0
@@ -0,0 +1,591 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var Entry_1;
11
+ import { HLC, LamportClock as Clock, Timestamp } from "./clock.js";
12
+ import { isDefined } from "./is-defined.js";
13
+ import { variant, field, serialize, deserialize, option, vec, fixedArray, } from "@dao-xyz/borsh";
14
+ import { DecryptedThing, MaybeEncrypted, X25519PublicKey, SignatureWithKey, AccessError, Ed25519PublicKey, sha256Base64, randomBytes, } from "@peerbit/crypto";
15
+ import { verify } from "@peerbit/crypto";
16
+ import { compare, equals } from "@peerbit/uint8arrays";
17
+ import { NO_ENCODING } from "./encoding.js";
18
+ import { StringArray } from "./types.js";
19
+ import { logger } from "./logger.js";
20
+ const isMaybeEryptionPublicKey = (o) => {
21
+ if (!o) {
22
+ return true;
23
+ }
24
+ if (o instanceof X25519PublicKey || o instanceof Ed25519PublicKey) {
25
+ return true;
26
+ }
27
+ if (Array.isArray(o)) {
28
+ return true; // assume entries are either X25519PublicKey or Ed25519PublicKey
29
+ }
30
+ return false;
31
+ };
32
+ function arrayToHex(arr) {
33
+ return [...new Uint8Array(arr)]
34
+ .map((b) => b.toString(16).padStart(2, "0"))
35
+ .join("");
36
+ }
37
+ export function toBufferLE(num, width) {
38
+ const hex = num.toString(16);
39
+ const padded = hex.padStart(width * 2, "0").slice(0, width * 2);
40
+ const arr = padded.match(/.{1,2}/g)?.map((byte) => parseInt(byte, 16));
41
+ if (!arr) {
42
+ throw new Error("Unexpected");
43
+ }
44
+ const buffer = Uint8Array.from(arr);
45
+ buffer.reverse();
46
+ return buffer;
47
+ }
48
+ export function toBigIntLE(buf) {
49
+ const reversed = buf.reverse();
50
+ const hex = arrayToHex(reversed);
51
+ if (hex.length === 0) {
52
+ return BigInt(0);
53
+ }
54
+ return BigInt(`0x${hex}`);
55
+ }
56
+ export let Payload = class Payload {
57
+ data;
58
+ encoding;
59
+ _value;
60
+ constructor(props) {
61
+ this.data = props.data;
62
+ this._value = props.value;
63
+ this.encoding = props?.encoding;
64
+ }
65
+ equals(other) {
66
+ return equals(this.data, other.data);
67
+ }
68
+ getValue(encoding = this.encoding || NO_ENCODING) {
69
+ if (this._value != undefined) {
70
+ return this._value;
71
+ }
72
+ return encoding.decoder(this.data);
73
+ }
74
+ };
75
+ __decorate([
76
+ field({ type: Uint8Array }),
77
+ __metadata("design:type", Uint8Array)
78
+ ], Payload.prototype, "data", void 0);
79
+ Payload = __decorate([
80
+ variant(0),
81
+ __metadata("design:paramtypes", [Object])
82
+ ], Payload);
83
+ export var EntryType;
84
+ (function (EntryType) {
85
+ EntryType[EntryType["APPEND"] = 0] = "APPEND";
86
+ EntryType[EntryType["CUT"] = 1] = "CUT";
87
+ })(EntryType || (EntryType = {}));
88
+ export let Metadata = class Metadata {
89
+ gid; // graph id
90
+ clock;
91
+ maxChainLength; // longest chain/merkle tree path frmo this node. maxChainLength := max ( maxChainLength(this.next) , 1)
92
+ type;
93
+ constructor(properties) {
94
+ if (properties) {
95
+ this.gid = properties.gid;
96
+ this.clock = properties.clock;
97
+ this.maxChainLength = properties.maxChainLength;
98
+ this.type = properties.type;
99
+ }
100
+ }
101
+ };
102
+ __decorate([
103
+ field({ type: "string" }),
104
+ __metadata("design:type", String)
105
+ ], Metadata.prototype, "gid", void 0);
106
+ __decorate([
107
+ field({ type: Clock }),
108
+ __metadata("design:type", Clock)
109
+ ], Metadata.prototype, "clock", void 0);
110
+ __decorate([
111
+ field({ type: "u64" }),
112
+ __metadata("design:type", BigInt)
113
+ ], Metadata.prototype, "maxChainLength", void 0);
114
+ __decorate([
115
+ field({ type: "u8" }),
116
+ __metadata("design:type", Number)
117
+ ], Metadata.prototype, "type", void 0);
118
+ Metadata = __decorate([
119
+ variant(0),
120
+ __metadata("design:paramtypes", [Object])
121
+ ], Metadata);
122
+ export let Signatures = class Signatures {
123
+ signatures;
124
+ constructor(properties) {
125
+ if (properties) {
126
+ this.signatures = properties.signatures;
127
+ }
128
+ }
129
+ equals(other) {
130
+ if (this.signatures.length !== other.signatures.length) {
131
+ return false;
132
+ }
133
+ for (let i = 0; i < this.signatures.length; i++) {
134
+ if (!this.signatures[i].equals(other.signatures[i])) {
135
+ return false;
136
+ }
137
+ }
138
+ return true;
139
+ }
140
+ };
141
+ __decorate([
142
+ field({ type: vec(MaybeEncrypted) }),
143
+ __metadata("design:type", Array)
144
+ ], Signatures.prototype, "signatures", void 0);
145
+ Signatures = __decorate([
146
+ variant(0),
147
+ __metadata("design:paramtypes", [Object])
148
+ ], Signatures);
149
+ const maybeEncrypt = (thing, keypair, reciever) => {
150
+ const recievers = reciever
151
+ ? Array.isArray(reciever)
152
+ ? reciever
153
+ : [reciever]
154
+ : undefined;
155
+ if (recievers?.length && recievers?.length > 0) {
156
+ if (!keypair) {
157
+ throw new Error("Keypair not provided");
158
+ }
159
+ return new DecryptedThing({
160
+ data: serialize(thing),
161
+ value: thing,
162
+ }).encrypt(keypair, ...recievers);
163
+ }
164
+ return new DecryptedThing({
165
+ data: serialize(thing),
166
+ value: thing,
167
+ });
168
+ };
169
+ export let Entry = Entry_1 = class Entry {
170
+ _metadata;
171
+ _payload;
172
+ _next; // Array of hashes (the tree)
173
+ _reserved;
174
+ _signatures;
175
+ hash; // "zd...Foo", we'll set the hash after persisting the entry
176
+ createdLocally;
177
+ _keychain;
178
+ _encoding;
179
+ constructor(obj) {
180
+ this._metadata = obj.metadata;
181
+ this._payload = obj.payload;
182
+ this._signatures = obj.signatures;
183
+ this._next = obj.next;
184
+ this._reserved = obj.reserved || new Uint8Array([0, 0, 0, 0]);
185
+ this.createdLocally = obj.createdLocally;
186
+ }
187
+ init(props) {
188
+ if (props instanceof Entry_1) {
189
+ this._keychain = props._keychain;
190
+ this._encoding = props._encoding;
191
+ }
192
+ else {
193
+ this._keychain = props.keychain;
194
+ this._encoding = props.encoding;
195
+ }
196
+ return this;
197
+ }
198
+ get encoding() {
199
+ if (!this._encoding) {
200
+ throw new Error("Not initialized");
201
+ }
202
+ return this._encoding;
203
+ }
204
+ get metadata() {
205
+ return this._metadata.decrypted.getValue(Metadata);
206
+ }
207
+ async getMetadata() {
208
+ await this._metadata.decrypt(this._keychain);
209
+ return this.metadata;
210
+ }
211
+ get gid() {
212
+ return this.metadata.gid;
213
+ }
214
+ async getGid() {
215
+ return (await this.getMetadata()).gid;
216
+ }
217
+ async getClock() {
218
+ return (await this.getMetadata()).clock;
219
+ }
220
+ get maxChainLength() {
221
+ return this._metadata.decrypted.getValue(Metadata).maxChainLength;
222
+ }
223
+ async getMaxChainLength() {
224
+ return (await this.getMetadata()).maxChainLength;
225
+ }
226
+ get payload() {
227
+ const payload = this._payload.decrypted.getValue(Payload);
228
+ payload.encoding = payload.encoding || this.encoding;
229
+ return payload;
230
+ }
231
+ async getPayload() {
232
+ if (this._payload instanceof DecryptedThing) {
233
+ return this.payload;
234
+ }
235
+ await this._payload.decrypt(this._keychain);
236
+ return this.payload;
237
+ }
238
+ async getPayloadValue() {
239
+ const payload = await this.getPayload();
240
+ return payload.getValue(this.encoding);
241
+ }
242
+ get publicKeys() {
243
+ return this.signatures.map((x) => x.publicKey);
244
+ }
245
+ async getPublicKeys() {
246
+ await this.getSignatures();
247
+ return this.publicKeys;
248
+ }
249
+ get next() {
250
+ return this._next.decrypted.getValue(StringArray).arr;
251
+ }
252
+ async getNext() {
253
+ await this._next.decrypt(this._keychain);
254
+ return this.next;
255
+ }
256
+ /**
257
+ * Will only return signatures I can decrypt
258
+ * @returns signatures
259
+ */
260
+ get signatures() {
261
+ const signatures = this._signatures.signatures.filter((x) => {
262
+ try {
263
+ x.decrypted;
264
+ return true;
265
+ }
266
+ catch (error) {
267
+ return false;
268
+ }
269
+ }).map((x) => x.decrypted.getValue(SignatureWithKey));
270
+ if (signatures.length === 0) {
271
+ this._signatures?.signatures.forEach((x) => x.clear());
272
+ throw new Error("Failed to resolve any signature");
273
+ }
274
+ return signatures;
275
+ }
276
+ /**
277
+ * Will only return signatures I can decrypt
278
+ * @returns signatures
279
+ */
280
+ async getSignatures() {
281
+ const results = await Promise.allSettled(this._signatures.signatures.map((x) => x.decrypt(this._keychain)));
282
+ if (logger.level === "debug" || logger.level === "trace") {
283
+ for (const [i, result] of results.entries()) {
284
+ if (result.status === "rejected") {
285
+ logger.debug("Failed to decrypt signature with index: " + i);
286
+ }
287
+ }
288
+ }
289
+ return this.signatures;
290
+ }
291
+ /**
292
+ * Will only verify signatures I can decrypt
293
+ * @returns true if all are verified
294
+ */
295
+ async verifySignatures() {
296
+ const signatures = await this.getSignatures();
297
+ if (signatures.length === 0) {
298
+ return false;
299
+ }
300
+ for (const signature of signatures) {
301
+ if (!(await verify(signature, Entry_1.toSignable(this)))) {
302
+ return false;
303
+ }
304
+ }
305
+ return true;
306
+ }
307
+ static toSignable(entry) {
308
+ // TODO fix types
309
+ const trimmed = new Entry_1({
310
+ metadata: entry._metadata,
311
+ next: entry._next,
312
+ payload: entry._payload,
313
+ reserved: entry._reserved,
314
+ signatures: undefined,
315
+ hash: undefined,
316
+ });
317
+ return serialize(trimmed);
318
+ }
319
+ toSignable() {
320
+ if (this._signatures) {
321
+ throw new Error("Expected signatures to be undefined");
322
+ }
323
+ if (this.hash) {
324
+ throw new Error("Expected hash to be undefined");
325
+ }
326
+ return Entry_1.toSignable(this);
327
+ }
328
+ equals(other) {
329
+ return (equals(this._reserved, other._reserved) &&
330
+ this._metadata.equals(other._metadata) &&
331
+ this._signatures.equals(other._signatures) &&
332
+ this._next.equals(other._next) &&
333
+ this._payload.equals(other._payload)); // dont compare hashes because the hash is a function of the other properties
334
+ }
335
+ async delete(store) {
336
+ if (!this.hash) {
337
+ throw new Error("Missing hash");
338
+ }
339
+ await store.rm(this.hash);
340
+ }
341
+ static createGid(seed) {
342
+ return sha256Base64(seed || randomBytes(32));
343
+ }
344
+ static async create(properties) {
345
+ if (!properties.encoding || !properties.next) {
346
+ properties = {
347
+ ...properties,
348
+ next: properties.next ? properties.next : [],
349
+ encoding: properties.encoding ? properties.encoding : NO_ENCODING,
350
+ };
351
+ }
352
+ if (!properties.encoding) {
353
+ throw new Error("Missing encoding options");
354
+ }
355
+ if (!isDefined(properties.data))
356
+ throw new Error("Entry requires data");
357
+ if (!isDefined(properties.next) || !Array.isArray(properties.next))
358
+ throw new Error("'next' argument is not an array");
359
+ // Clean the next objects and convert to hashes
360
+ const nexts = properties.next;
361
+ const payloadToSave = new Payload({
362
+ data: properties.encoding.encoder(properties.data),
363
+ value: properties.data,
364
+ encoding: properties.encoding,
365
+ });
366
+ let clock = properties.clock;
367
+ if (!clock) {
368
+ const hlc = new HLC();
369
+ for (const next of nexts) {
370
+ hlc.update(next.metadata.clock.timestamp);
371
+ }
372
+ if (properties.encryption?.reciever.signatures &&
373
+ properties.encryption?.reciever.metadata) {
374
+ throw new Error("Signature is to be encrypted yet the clock is not, which contains the publicKey as id. Either provide a custom Clock value that is not sensitive or set the reciever (encryption target) for the clock");
375
+ }
376
+ clock = new Clock({
377
+ id: properties.identity.publicKey.bytes,
378
+ timestamp: hlc.now(),
379
+ });
380
+ }
381
+ else {
382
+ const cv = clock;
383
+ // check if nexts, that all nexts are happening BEFORE this clock value (else clock make no sense)
384
+ for (const n of nexts) {
385
+ if (Timestamp.compare(n.metadata.clock.timestamp, cv.timestamp) >= 0) {
386
+ throw new Error("Expecting next(s) to happen before entry, got: " +
387
+ n.metadata.clock.timestamp +
388
+ " > " +
389
+ cv.timestamp);
390
+ }
391
+ }
392
+ }
393
+ const payload = await maybeEncrypt(payloadToSave, properties.encryption?.keypair, properties.encryption?.reciever.payload);
394
+ const nextHashes = [];
395
+ let gid;
396
+ let maxChainLength = 0n;
397
+ const maxClock = new Timestamp({ wallTime: 0n, logical: 0 });
398
+ if (nexts?.length > 0) {
399
+ // take min gid as our gid
400
+ for (const n of nexts) {
401
+ if (!n.hash) {
402
+ throw new Error("Expecting hash to be defined to next entries");
403
+ }
404
+ nextHashes.push(n.hash);
405
+ if (maxChainLength < n.maxChainLength ||
406
+ maxChainLength == n.maxChainLength) {
407
+ maxChainLength = n.maxChainLength;
408
+ if (!gid) {
409
+ gid = n.metadata.gid;
410
+ continue;
411
+ }
412
+ // replace gid if next is from alonger chain, or from a later time, or same time but "smaller" gid
413
+ else if (Timestamp.compare(n.metadata.clock.timestamp, maxClock) > 0 ||
414
+ (Timestamp.compare(n.metadata.clock.timestamp, maxClock) == 0 &&
415
+ n.metadata.gid < gid)) {
416
+ gid = n.metadata.gid;
417
+ }
418
+ }
419
+ }
420
+ if (!gid) {
421
+ throw new Error("Unexpected behaviour, could not find gid");
422
+ }
423
+ }
424
+ else {
425
+ gid = properties.gid || (await Entry_1.createGid(properties.gidSeed));
426
+ }
427
+ maxChainLength += 1n; // include this
428
+ const metadataEncrypted = await maybeEncrypt(new Metadata({
429
+ maxChainLength,
430
+ clock,
431
+ gid,
432
+ type: properties.type ?? EntryType.APPEND,
433
+ }), properties.encryption?.keypair, properties.encryption?.reciever.metadata);
434
+ const next = nextHashes;
435
+ next?.forEach((next) => {
436
+ if (typeof next !== "string") {
437
+ throw new Error("Unsupported next type");
438
+ }
439
+ });
440
+ const nextEncrypted = await maybeEncrypt(new StringArray({
441
+ arr: next,
442
+ }), properties.encryption?.keypair, properties.encryption?.reciever.next);
443
+ // Sign id, encrypted payload, clock, nexts, refs
444
+ const entry = new Entry_1({
445
+ payload,
446
+ metadata: metadataEncrypted,
447
+ signatures: undefined,
448
+ createdLocally: true,
449
+ next: nextEncrypted, // Array of hashes
450
+ /* refs: properties.refs, */
451
+ });
452
+ const signers = properties.signers || [
453
+ properties.identity.sign.bind(properties.identity),
454
+ ];
455
+ const signable = entry.toSignable();
456
+ let signatures = await Promise.all(signers.map((signer) => signer(signable)));
457
+ signatures = signatures.sort((a, b) => compare(a.signature, b.signature));
458
+ const encryptedSignatures = [];
459
+ const encryptAllSignaturesWithSameKey = isMaybeEryptionPublicKey(properties.encryption?.reciever?.signatures);
460
+ for (const signature of signatures) {
461
+ const encryptionRecievers = encryptAllSignaturesWithSameKey
462
+ ? properties.encryption?.reciever?.signatures
463
+ : properties.encryption?.reciever?.signatures?.[signature.publicKey.hashcode()];
464
+ const signatureEncrypted = await maybeEncrypt(signature, properties.encryption?.keypair, encryptionRecievers);
465
+ encryptedSignatures.push(signatureEncrypted);
466
+ }
467
+ entry._signatures = new Signatures({
468
+ signatures: encryptedSignatures,
469
+ });
470
+ if (properties.canAppend && !(await properties.canAppend(entry))) {
471
+ throw new AccessError();
472
+ }
473
+ // Append hash and signature
474
+ entry.hash = await Entry_1.toMultihash(properties.store, entry);
475
+ entry.init({ encoding: properties.encoding });
476
+ return entry;
477
+ }
478
+ /**
479
+ * Get the multihash of an Entry.
480
+ * @example
481
+ * const multfihash = await Entry.toMultihash(store, entry)
482
+ * console.log(multihash)
483
+ * // "Qm...Foo"
484
+ */
485
+ static async toMultihash(store, entry) {
486
+ if (entry.hash) {
487
+ throw new Error("Expected hash to be missing");
488
+ }
489
+ const result = store.put(serialize(entry));
490
+ return result;
491
+ }
492
+ /**
493
+ * Create an Entry from a hash.
494
+ * @example
495
+ * const entry = await Entry.fromMultihash(store, "zd...Foo")
496
+ * console.log(entry)
497
+ * // { hash: "Zd...Foo", payload: "hello", next: [] }
498
+ */
499
+ static async fromMultihash(store, hash, options) {
500
+ if (!hash)
501
+ throw new Error(`Invalid hash: ${hash}`);
502
+ const bytes = await store.get(hash, options);
503
+ if (!bytes) {
504
+ throw new Error("Failed to resolve block: " + hash);
505
+ }
506
+ const entry = deserialize(bytes, Entry_1);
507
+ entry.hash = hash;
508
+ return entry;
509
+ }
510
+ /**
511
+ * Compares two entries.
512
+ * @param {Entry} a
513
+ * @param {Entry} b
514
+ * @returns {number} 1 if a is greater, -1 is b is greater
515
+ */
516
+ static compare(a, b) {
517
+ const aClock = a.metadata.clock;
518
+ const bClock = b.metadata.clock;
519
+ const distance = Clock.compare(aClock, bClock);
520
+ if (distance === 0)
521
+ return aClock.id < bClock.id ? -1 : 1;
522
+ return distance;
523
+ }
524
+ /**
525
+ * Check if an entry equals another entry.
526
+ * @param {Entry} a
527
+ * @param {Entry} b
528
+ * @returns {boolean}
529
+ */
530
+ static isEqual(a, b) {
531
+ return a.hash === b.hash;
532
+ }
533
+ /**
534
+ * Check if an entry is a parent to another entry.
535
+ * @param {Entry} entry1 Entry to check
536
+ * @param {Entry} entry2 The parent Entry
537
+ * @returns {boolean}
538
+ */
539
+ static isDirectParent(entry1, entry2) {
540
+ return entry2.next.indexOf(entry1.hash) > -1; // TODO fix types
541
+ }
542
+ /**
543
+ * Find entry's children from an Array of entries.
544
+ * Returns entry's children as an Array up to the last know child.
545
+ * @param {Entry} entry Entry for which to find the parents
546
+ * @param {Array<Entry<T>>} values Entries to search parents from
547
+ * @returns {Array<Entry<T>>}
548
+ */
549
+ static findDirectChildren(entry, values) {
550
+ let stack = [];
551
+ let parent = values.find((e) => Entry_1.isDirectParent(entry, e));
552
+ let prev = entry;
553
+ while (parent) {
554
+ stack.push(parent);
555
+ prev = parent;
556
+ parent = values.find((e) => Entry_1.isDirectParent(prev, e));
557
+ }
558
+ stack = stack.sort((a, b) => Clock.compare(a.metadata.clock, b.metadata.clock));
559
+ return stack;
560
+ }
561
+ };
562
+ __decorate([
563
+ field({ type: MaybeEncrypted }),
564
+ __metadata("design:type", MaybeEncrypted)
565
+ ], Entry.prototype, "_metadata", void 0);
566
+ __decorate([
567
+ field({ type: MaybeEncrypted }),
568
+ __metadata("design:type", MaybeEncrypted)
569
+ ], Entry.prototype, "_payload", void 0);
570
+ __decorate([
571
+ field({ type: MaybeEncrypted }),
572
+ __metadata("design:type", MaybeEncrypted)
573
+ ], Entry.prototype, "_next", void 0);
574
+ __decorate([
575
+ field({ type: fixedArray("u8", 4) }),
576
+ __metadata("design:type", Uint8Array)
577
+ ], Entry.prototype, "_reserved", void 0);
578
+ __decorate([
579
+ field({ type: option(Signatures) }),
580
+ __metadata("design:type", Signatures)
581
+ ], Entry.prototype, "_signatures", void 0);
582
+ __decorate([
583
+ field({ type: option("string") }) // we do option because we serialize and store this in a block without the hash, to recieve the hash, which we later set
584
+ ,
585
+ __metadata("design:type", String)
586
+ ], Entry.prototype, "hash", void 0);
587
+ Entry = Entry_1 = __decorate([
588
+ variant(0),
589
+ __metadata("design:paramtypes", [Object])
590
+ ], Entry);
591
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const findUniques: <T>(value: T[], key?: string) => T[];
@@ -0,0 +1,12 @@
1
+ export const findUniques = (value, key) => {
2
+ // Create an index of the collection
3
+ // TODO fix types. This method is quite ugly, maybe lets remove it altogether
4
+ const uniques = {};
5
+ const get = (key) => uniques[key];
6
+ const addToIndex = (e) => (uniques[key
7
+ ? e[key]
8
+ : e] = e);
9
+ value.forEach(addToIndex);
10
+ return Object.keys(uniques).map(get);
11
+ };
12
+ //# sourceMappingURL=find-uniques.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-uniques.js","sourceRoot":"","sources":["../../src/find-uniques.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,KAAU,EAAE,GAAY,EAAO,EAAE;IAC/D,oCAAoC;IACpC,6EAA6E;IAC7E,MAAM,OAAO,GAA2C,EAAE,CAAC;IAC3D,MAAM,GAAG,GAAG,CAAC,GAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,CAAC,CAAI,EAAE,EAAE,CAC3B,CAAC,OAAO,CACP,GAAG;QACF,CAAC,CAAG,CAAS,CAAC,GAAG,CAA8B;QAC/C,CAAC,CAAE,CAA8B,CAClC,GAAG,CAAC,CAAC,CAAC;IACR,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC,CAAC"}