@waku/enr 0.0.1

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 (52) hide show
  1. package/bundle/crypto-5b69130e.js +2914 -0
  2. package/bundle/crypto.js +1 -0
  3. package/bundle/index.js +30072 -0
  4. package/dist/constants.d.ts +4 -0
  5. package/dist/constants.js +8 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/crypto.d.ts +22 -0
  8. package/dist/crypto.js +47 -0
  9. package/dist/crypto.js.map +1 -0
  10. package/dist/enr.d.ts +90 -0
  11. package/dist/enr.js +432 -0
  12. package/dist/enr.js.map +1 -0
  13. package/dist/index.d.ts +6 -0
  14. package/dist/index.js +7 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/keypair/index.d.ts +8 -0
  17. package/dist/keypair/index.js +53 -0
  18. package/dist/keypair/index.js.map +1 -0
  19. package/dist/keypair/secp256k1.d.ts +13 -0
  20. package/dist/keypair/secp256k1.js +57 -0
  21. package/dist/keypair/secp256k1.js.map +1 -0
  22. package/dist/keypair/types.d.ts +13 -0
  23. package/dist/keypair/types.js +7 -0
  24. package/dist/keypair/types.js.map +1 -0
  25. package/dist/multiaddr_from_fields.d.ts +2 -0
  26. package/dist/multiaddr_from_fields.js +8 -0
  27. package/dist/multiaddr_from_fields.js.map +1 -0
  28. package/dist/multiaddrs_codec.d.ts +3 -0
  29. package/dist/multiaddrs_codec.js +32 -0
  30. package/dist/multiaddrs_codec.js.map +1 -0
  31. package/dist/types.d.ts +8 -0
  32. package/dist/types.js +3 -0
  33. package/dist/types.js.map +1 -0
  34. package/dist/v4.d.ts +3 -0
  35. package/dist/v4.js +14 -0
  36. package/dist/v4.js.map +1 -0
  37. package/dist/waku2_codec.d.ts +8 -0
  38. package/dist/waku2_codec.js +36 -0
  39. package/dist/waku2_codec.js.map +1 -0
  40. package/package.json +191 -0
  41. package/src/constants.ts +10 -0
  42. package/src/crypto.ts +61 -0
  43. package/src/enr.ts +524 -0
  44. package/src/index.ts +6 -0
  45. package/src/keypair/index.ts +76 -0
  46. package/src/keypair/secp256k1.ts +69 -0
  47. package/src/keypair/types.ts +14 -0
  48. package/src/multiaddr_from_fields.ts +18 -0
  49. package/src/multiaddrs_codec.ts +50 -0
  50. package/src/types.ts +11 -0
  51. package/src/v4.ts +21 -0
  52. package/src/waku2_codec.ts +39 -0
@@ -0,0 +1,50 @@
1
+ import { multiaddr } from "@multiformats/multiaddr";
2
+ import type { Multiaddr } from "@multiformats/multiaddr";
3
+
4
+ import { MULTIADDR_LENGTH_SIZE } from "./constants.js";
5
+
6
+ export function decodeMultiaddrs(bytes: Uint8Array): Multiaddr[] {
7
+ const multiaddrs = [];
8
+
9
+ let index = 0;
10
+
11
+ while (index < bytes.length) {
12
+ const sizeDataView = new DataView(
13
+ bytes.buffer,
14
+ index,
15
+ MULTIADDR_LENGTH_SIZE
16
+ );
17
+ const size = sizeDataView.getUint16(0);
18
+ index += MULTIADDR_LENGTH_SIZE;
19
+
20
+ const multiaddrBytes = bytes.slice(index, index + size);
21
+ index += size;
22
+
23
+ multiaddrs.push(multiaddr(multiaddrBytes));
24
+ }
25
+ return multiaddrs;
26
+ }
27
+
28
+ export function encodeMultiaddrs(multiaddrs: Multiaddr[]): Uint8Array {
29
+ const totalLength = multiaddrs.reduce(
30
+ (acc, ma) => acc + MULTIADDR_LENGTH_SIZE + ma.bytes.length,
31
+ 0
32
+ );
33
+ const bytes = new Uint8Array(totalLength);
34
+ const dataView = new DataView(bytes.buffer);
35
+
36
+ let index = 0;
37
+ multiaddrs.forEach((multiaddr) => {
38
+ if (multiaddr.getPeerId())
39
+ throw new Error("`multiaddr` field MUST not contain peer id");
40
+
41
+ // Prepend the size of the next entry
42
+ dataView.setUint16(index, multiaddr.bytes.length);
43
+ index += MULTIADDR_LENGTH_SIZE;
44
+
45
+ bytes.set(multiaddr.bytes, index);
46
+ index += multiaddr.bytes.length;
47
+ });
48
+
49
+ return bytes;
50
+ }
package/src/types.ts ADDED
@@ -0,0 +1,11 @@
1
+ // Custom and aliased types for ENRs
2
+
3
+ /**
4
+ * We represent NodeId as a hex string, since node equality is used very heavily
5
+ * and it is convenient to index data by NodeId
6
+ */
7
+ export type NodeId = string;
8
+ export type SequenceNumber = bigint;
9
+
10
+ export type ENRKey = string;
11
+ export type ENRValue = Uint8Array;
package/src/v4.ts ADDED
@@ -0,0 +1,21 @@
1
+ import * as secp from "@noble/secp256k1";
2
+ import { bytesToHex } from "@waku/byte-utils";
3
+
4
+ import { keccak256 } from "./crypto.js";
5
+ import { NodeId } from "./types.js";
6
+
7
+ export async function sign(
8
+ privKey: Uint8Array,
9
+ msg: Uint8Array
10
+ ): Promise<Uint8Array> {
11
+ return secp.sign(keccak256(msg), privKey, {
12
+ der: false,
13
+ });
14
+ }
15
+
16
+ export function nodeId(pubKey: Uint8Array): NodeId {
17
+ const publicKey = secp.Point.fromHex(pubKey);
18
+ const uncompressedPubkey = publicKey.toRawBytes(false);
19
+
20
+ return bytesToHex(keccak256(uncompressedPubkey.slice(1)));
21
+ }
@@ -0,0 +1,39 @@
1
+ export interface Waku2 {
2
+ relay: boolean;
3
+ store: boolean;
4
+ filter: boolean;
5
+ lightPush: boolean;
6
+ }
7
+
8
+ export function encodeWaku2(protocols: Waku2): number {
9
+ let byte = 0;
10
+
11
+ if (protocols.lightPush) byte += 1;
12
+ byte = byte << 1;
13
+ if (protocols.filter) byte += 1;
14
+ byte = byte << 1;
15
+ if (protocols.store) byte += 1;
16
+ byte = byte << 1;
17
+ if (protocols.relay) byte += 1;
18
+
19
+ return byte;
20
+ }
21
+
22
+ export function decodeWaku2(byte: number): Waku2 {
23
+ const waku2 = {
24
+ relay: false,
25
+ store: false,
26
+ filter: false,
27
+ lightPush: false,
28
+ };
29
+
30
+ if (byte % 2) waku2.relay = true;
31
+ byte = byte >> 1;
32
+ if (byte % 2) waku2.store = true;
33
+ byte = byte >> 1;
34
+ if (byte % 2) waku2.filter = true;
35
+ byte = byte >> 1;
36
+ if (byte % 2) waku2.lightPush = true;
37
+
38
+ return waku2;
39
+ }