@libp2p/kad-dht 0.28.6

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 (166) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +105 -0
  3. package/dist/src/constants.d.ts +20 -0
  4. package/dist/src/constants.d.ts.map +1 -0
  5. package/dist/src/constants.js +34 -0
  6. package/dist/src/constants.js.map +1 -0
  7. package/dist/src/content-fetching/index.d.ts +55 -0
  8. package/dist/src/content-fetching/index.d.ts.map +1 -0
  9. package/dist/src/content-fetching/index.js +190 -0
  10. package/dist/src/content-fetching/index.js.map +1 -0
  11. package/dist/src/content-routing/index.d.ts +42 -0
  12. package/dist/src/content-routing/index.d.ts.map +1 -0
  13. package/dist/src/content-routing/index.js +129 -0
  14. package/dist/src/content-routing/index.js.map +1 -0
  15. package/dist/src/dual-kad-dht.d.ts +65 -0
  16. package/dist/src/dual-kad-dht.d.ts.map +1 -0
  17. package/dist/src/dual-kad-dht.js +191 -0
  18. package/dist/src/dual-kad-dht.js.map +1 -0
  19. package/dist/src/index.d.ts +4 -0
  20. package/dist/src/index.d.ts.map +1 -0
  21. package/dist/src/index.js +15 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/kad-dht.d.ts +131 -0
  24. package/dist/src/kad-dht.d.ts.map +1 -0
  25. package/dist/src/kad-dht.js +268 -0
  26. package/dist/src/kad-dht.js.map +1 -0
  27. package/dist/src/message/dht.d.ts +297 -0
  28. package/dist/src/message/dht.js +921 -0
  29. package/dist/src/message/index.d.ts +32 -0
  30. package/dist/src/message/index.d.ts.map +1 -0
  31. package/dist/src/message/index.js +81 -0
  32. package/dist/src/message/index.js.map +1 -0
  33. package/dist/src/network.d.ts +60 -0
  34. package/dist/src/network.d.ts.map +1 -0
  35. package/dist/src/network.js +124 -0
  36. package/dist/src/network.js.map +1 -0
  37. package/dist/src/peer-list/index.d.ts +29 -0
  38. package/dist/src/peer-list/index.d.ts.map +1 -0
  39. package/dist/src/peer-list/index.js +44 -0
  40. package/dist/src/peer-list/index.js.map +1 -0
  41. package/dist/src/peer-list/peer-distance-list.d.ts +34 -0
  42. package/dist/src/peer-list/peer-distance-list.d.ts.map +1 -0
  43. package/dist/src/peer-list/peer-distance-list.js +64 -0
  44. package/dist/src/peer-list/peer-distance-list.js.map +1 -0
  45. package/dist/src/peer-routing/index.d.ts +71 -0
  46. package/dist/src/peer-routing/index.d.ts.map +1 -0
  47. package/dist/src/peer-routing/index.js +256 -0
  48. package/dist/src/peer-routing/index.js.map +1 -0
  49. package/dist/src/providers.d.ts +64 -0
  50. package/dist/src/providers.d.ts.map +1 -0
  51. package/dist/src/providers.js +208 -0
  52. package/dist/src/providers.js.map +1 -0
  53. package/dist/src/query/events.d.ts +46 -0
  54. package/dist/src/query/events.d.ts.map +1 -0
  55. package/dist/src/query/events.js +73 -0
  56. package/dist/src/query/events.js.map +1 -0
  57. package/dist/src/query/manager.d.ts +40 -0
  58. package/dist/src/query/manager.d.ts.map +1 -0
  59. package/dist/src/query/manager.js +140 -0
  60. package/dist/src/query/manager.js.map +1 -0
  61. package/dist/src/query/query-path.d.ts +58 -0
  62. package/dist/src/query/query-path.d.ts.map +1 -0
  63. package/dist/src/query/query-path.js +171 -0
  64. package/dist/src/query/query-path.js.map +1 -0
  65. package/dist/src/query/types.d.ts +16 -0
  66. package/dist/src/query/types.d.ts.map +1 -0
  67. package/dist/src/query/types.js +2 -0
  68. package/dist/src/query/types.js.map +1 -0
  69. package/dist/src/query-self.d.ts +31 -0
  70. package/dist/src/query-self.d.ts.map +1 -0
  71. package/dist/src/query-self.js +73 -0
  72. package/dist/src/query-self.js.map +1 -0
  73. package/dist/src/routing-table/generated-prefix-list-browser.d.ts +3 -0
  74. package/dist/src/routing-table/generated-prefix-list-browser.d.ts.map +1 -0
  75. package/dist/src/routing-table/generated-prefix-list-browser.js +1027 -0
  76. package/dist/src/routing-table/generated-prefix-list-browser.js.map +1 -0
  77. package/dist/src/routing-table/generated-prefix-list.d.ts +3 -0
  78. package/dist/src/routing-table/generated-prefix-list.d.ts.map +1 -0
  79. package/dist/src/routing-table/generated-prefix-list.js +4099 -0
  80. package/dist/src/routing-table/generated-prefix-list.js.map +1 -0
  81. package/dist/src/routing-table/index.d.ts +91 -0
  82. package/dist/src/routing-table/index.d.ts.map +1 -0
  83. package/dist/src/routing-table/index.js +183 -0
  84. package/dist/src/routing-table/index.js.map +1 -0
  85. package/dist/src/routing-table/refresh.d.ts +50 -0
  86. package/dist/src/routing-table/refresh.d.ts.map +1 -0
  87. package/dist/src/routing-table/refresh.js +204 -0
  88. package/dist/src/routing-table/refresh.js.map +1 -0
  89. package/dist/src/routing-table/types.d.ts +24 -0
  90. package/dist/src/routing-table/types.d.ts.map +1 -0
  91. package/dist/src/rpc/handlers/add-provider.d.ts +13 -0
  92. package/dist/src/rpc/handlers/add-provider.d.ts.map +1 -0
  93. package/dist/src/rpc/handlers/add-provider.js +42 -0
  94. package/dist/src/rpc/handlers/add-provider.js.map +1 -0
  95. package/dist/src/rpc/handlers/find-node.d.ts +18 -0
  96. package/dist/src/rpc/handlers/find-node.d.ts.map +1 -0
  97. package/dist/src/rpc/handlers/find-node.js +32 -0
  98. package/dist/src/rpc/handlers/find-node.js.map +1 -0
  99. package/dist/src/rpc/handlers/get-providers.d.ts +24 -0
  100. package/dist/src/rpc/handlers/get-providers.d.ts.map +1 -0
  101. package/dist/src/rpc/handlers/get-providers.js +60 -0
  102. package/dist/src/rpc/handlers/get-providers.js.map +1 -0
  103. package/dist/src/rpc/handlers/get-value.d.ts +27 -0
  104. package/dist/src/rpc/handlers/get-value.d.ts.map +1 -0
  105. package/dist/src/rpc/handlers/get-value.js +94 -0
  106. package/dist/src/rpc/handlers/get-value.js.map +1 -0
  107. package/dist/src/rpc/handlers/index.d.ts +13 -0
  108. package/dist/src/rpc/handlers/index.d.ts.map +1 -0
  109. package/dist/src/rpc/handlers/ping.d.ts +7 -0
  110. package/dist/src/rpc/handlers/ping.d.ts.map +1 -0
  111. package/dist/src/rpc/handlers/ping.js +9 -0
  112. package/dist/src/rpc/handlers/ping.js.map +1 -0
  113. package/dist/src/rpc/handlers/put-value.d.ts +18 -0
  114. package/dist/src/rpc/handlers/put-value.d.ts.map +1 -0
  115. package/dist/src/rpc/handlers/put-value.js +35 -0
  116. package/dist/src/rpc/handlers/put-value.js.map +1 -0
  117. package/dist/src/rpc/index.d.ts +38 -0
  118. package/dist/src/rpc/index.d.ts.map +1 -0
  119. package/dist/src/rpc/index.js +75 -0
  120. package/dist/src/rpc/index.js.map +1 -0
  121. package/dist/src/rpc/types.d.ts +6 -0
  122. package/dist/src/rpc/types.d.ts.map +1 -0
  123. package/dist/src/topology-listener.d.ts +33 -0
  124. package/dist/src/topology-listener.d.ts.map +1 -0
  125. package/dist/src/topology-listener.js +50 -0
  126. package/dist/src/topology-listener.js.map +1 -0
  127. package/dist/src/types.d.ts +143 -0
  128. package/dist/src/types.d.ts.map +1 -0
  129. package/dist/src/utils.d.ts +33 -0
  130. package/dist/src/utils.d.ts.map +1 -0
  131. package/dist/src/utils.js +89 -0
  132. package/dist/src/utils.js.map +1 -0
  133. package/package.json +200 -0
  134. package/src/constants.ts +50 -0
  135. package/src/content-fetching/index.ts +276 -0
  136. package/src/content-routing/index.ts +202 -0
  137. package/src/dual-kad-dht.ts +257 -0
  138. package/src/index.ts +21 -0
  139. package/src/kad-dht.ts +396 -0
  140. package/src/message/dht.d.ts +297 -0
  141. package/src/message/dht.js +921 -0
  142. package/src/message/dht.proto +75 -0
  143. package/src/message/index.ts +111 -0
  144. package/src/network.ts +185 -0
  145. package/src/peer-list/index.ts +54 -0
  146. package/src/peer-list/peer-distance-list.ts +93 -0
  147. package/src/peer-routing/index.ts +332 -0
  148. package/src/providers.ts +278 -0
  149. package/src/query/events.ts +126 -0
  150. package/src/query/manager.ts +188 -0
  151. package/src/query/query-path.ts +263 -0
  152. package/src/query/types.ts +22 -0
  153. package/src/query-self.ts +106 -0
  154. package/src/routing-table/generated-prefix-list-browser.ts +1026 -0
  155. package/src/routing-table/generated-prefix-list.ts +4098 -0
  156. package/src/routing-table/index.ts +265 -0
  157. package/src/routing-table/refresh.ts +263 -0
  158. package/src/rpc/handlers/add-provider.ts +63 -0
  159. package/src/rpc/handlers/find-node.ts +57 -0
  160. package/src/rpc/handlers/get-providers.ts +95 -0
  161. package/src/rpc/handlers/get-value.ts +130 -0
  162. package/src/rpc/handlers/ping.ts +13 -0
  163. package/src/rpc/handlers/put-value.ts +58 -0
  164. package/src/rpc/index.ts +118 -0
  165. package/src/topology-listener.ts +78 -0
  166. package/src/utils.ts +108 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topology-listener.js","sourceRoot":"","sources":["../../src/topology-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAgBvC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,YAAoC;IAOxE,YAAa,OAAgC;QAC3C,KAAK,EAAE,CAAA;QAEP,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;QAE5C,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,oCAAoC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAC5E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAM;SACP;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QAEnB,kCAAkC;QAClC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;gBACpB,IAAI,CAAC,GAAG,CAAC,mCAAmC,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBACpE,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE;oBACzC,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC,CAAA;YACL,CAAC;SACF,CAAC,CAAA;QACF,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC3E,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QAEpB,mCAAmC;QACnC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;YAC5B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAC3C,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;SAC7B;IACH,CAAC;CACF"}
@@ -0,0 +1,143 @@
1
+ import type PeerId from 'peer-id';
2
+ import type { Multiaddr } from 'multiaddr';
3
+ import type { CID } from 'multiformats/cid';
4
+ import type { MuxedStream } from 'libp2p/src/upgrader';
5
+ import type { PublicKey } from 'libp2p-crypto';
6
+ import type { Message } from './message/dht';
7
+ export declare enum EventTypes {
8
+ SENDING_QUERY = 0,
9
+ PEER_RESPONSE = 1,
10
+ FINAL_PEER = 2,
11
+ QUERY_ERROR = 3,
12
+ PROVIDER = 4,
13
+ VALUE = 5,
14
+ ADDING_PEER = 6,
15
+ DIALING_PEER = 7
16
+ }
17
+ export declare type MessageName = keyof typeof Message.MessageType;
18
+ export interface PeerData {
19
+ id: PeerId;
20
+ multiaddrs: Multiaddr[];
21
+ }
22
+ export interface DHTRecord {
23
+ key: Uint8Array;
24
+ value: Uint8Array;
25
+ timeReceived?: Date;
26
+ }
27
+ export interface AbortOptions {
28
+ signal?: AbortSignal;
29
+ }
30
+ export interface QueryOptions extends AbortOptions {
31
+ queryFuncTimeout?: number;
32
+ }
33
+ /**
34
+ * Emitted when sending queries to remote peers
35
+ */
36
+ export interface SendingQueryEvent {
37
+ to: PeerId;
38
+ type: EventTypes.SENDING_QUERY;
39
+ name: 'SENDING_QUERY';
40
+ messageName: keyof typeof Message.MessageType;
41
+ messageType: Message.MessageType;
42
+ }
43
+ /**
44
+ * Emitted when query responses are received form remote peers. Depending on the query
45
+ * these events may be followed by a `FinalPeerEvent`, a `ValueEvent` or a `ProviderEvent`.
46
+ */
47
+ export interface PeerResponseEvent {
48
+ from: PeerId;
49
+ type: EventTypes.PEER_RESPONSE;
50
+ name: 'PEER_RESPONSE';
51
+ messageName: keyof typeof Message.MessageType;
52
+ messageType: Message.MessageType;
53
+ closer: PeerData[];
54
+ providers: PeerData[];
55
+ record?: DHTRecord;
56
+ }
57
+ /**
58
+ * Emitted at the end of a `findPeer` query
59
+ */
60
+ export interface FinalPeerEvent {
61
+ from: PeerId;
62
+ peer: PeerData;
63
+ type: EventTypes.FINAL_PEER;
64
+ name: 'FINAL_PEER';
65
+ }
66
+ /**
67
+ * Something went wrong with the query
68
+ */
69
+ export interface QueryErrorEvent {
70
+ from: PeerId;
71
+ type: EventTypes.QUERY_ERROR;
72
+ name: 'QUERY_ERROR';
73
+ error: Error;
74
+ }
75
+ /**
76
+ * Emitted when providers are found
77
+ */
78
+ export interface ProviderEvent {
79
+ from: PeerId;
80
+ type: EventTypes.PROVIDER;
81
+ name: 'PROVIDER';
82
+ providers: PeerData[];
83
+ }
84
+ /**
85
+ * Emitted when values are found
86
+ */
87
+ export interface ValueEvent {
88
+ from: PeerId;
89
+ type: EventTypes.VALUE;
90
+ name: 'VALUE';
91
+ value: Uint8Array;
92
+ }
93
+ /**
94
+ * Emitted when peers are added to a query
95
+ */
96
+ export interface AddingPeerEvent {
97
+ type: EventTypes.ADDING_PEER;
98
+ name: 'ADDING_PEER';
99
+ peer: PeerId;
100
+ }
101
+ /**
102
+ * Emitted when peers are dialled as part of a query
103
+ */
104
+ export interface DialingPeerEvent {
105
+ peer: PeerId;
106
+ type: EventTypes.DIALING_PEER;
107
+ name: 'DIALING_PEER';
108
+ }
109
+ export declare type QueryEvent = SendingQueryEvent | PeerResponseEvent | FinalPeerEvent | QueryErrorEvent | ProviderEvent | ValueEvent | AddingPeerEvent | DialingPeerEvent;
110
+ export interface DHT {
111
+ /**
112
+ * Get a value from the DHT, the final ValueEvent will be the best value
113
+ */
114
+ get: (key: Uint8Array, options?: QueryOptions) => AsyncIterable<QueryEvent>;
115
+ findProviders: (key: CID, options?: QueryOptions) => AsyncIterable<QueryEvent>;
116
+ findPeer: (id: PeerId, options?: QueryOptions) => AsyncIterable<QueryEvent>;
117
+ getClosestPeers: (key: Uint8Array, options?: QueryOptions) => AsyncIterable<QueryEvent>;
118
+ getPublicKey: (peer: PeerId, options?: QueryOptions) => Promise<PublicKey>;
119
+ provide: (key: CID, options?: QueryOptions) => AsyncIterable<QueryEvent>;
120
+ put: (key: Uint8Array, value: Uint8Array, options?: QueryOptions) => AsyncIterable<QueryEvent>;
121
+ enableServerMode: () => Promise<void>;
122
+ enableClientMode: () => Promise<void>;
123
+ refreshRoutingTable: () => Promise<void>;
124
+ on: (event: 'peer', handler: (peerData: PeerData) => void) => this;
125
+ }
126
+ export interface Dialer {
127
+ dialProtocol: (peer: PeerId, protocol: string, options?: {
128
+ signal?: AbortSignal;
129
+ }) => Promise<{
130
+ stream: MuxedStream;
131
+ }>;
132
+ }
133
+ export interface Addressable {
134
+ multiaddrs: Multiaddr[];
135
+ }
136
+ export interface Metrics {
137
+ updateComponentMetric: (options: {
138
+ component: string;
139
+ metric: string;
140
+ value: number;
141
+ }) => void;
142
+ }
143
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Key } from 'interface-datastore/key';
2
+ import type { PeerData } from '@libp2p/interfaces/peer-data';
3
+ import type { PeerId } from '@libp2p/interfaces/peer-id';
4
+ export declare function removePrivateAddresses(peer: PeerData): PeerData;
5
+ export declare function removePublicAddresses(peer: PeerData): PeerData;
6
+ /**
7
+ * Creates a DHT ID by hashing a given Uint8Array
8
+ */
9
+ export declare function convertBuffer(buf: Uint8Array): Promise<Uint8Array>;
10
+ /**
11
+ * Creates a DHT ID by hashing a Peer ID
12
+ */
13
+ export declare function convertPeerId(peerId: PeerId): Promise<Uint8Array>;
14
+ /**
15
+ * Convert a Uint8Array to their SHA2-256 hash
16
+ */
17
+ export declare function bufferToKey(buf: Uint8Array): Key;
18
+ /**
19
+ * Convert a Uint8Array to their SHA2-256 hash
20
+ */
21
+ export declare function bufferToRecordKey(buf: Uint8Array): Key;
22
+ /**
23
+ * Generate the key for a public key.
24
+ */
25
+ export declare function keyForPublicKey(peer: PeerId): Uint8Array;
26
+ export declare function isPublicKeyKey(key: Uint8Array): boolean;
27
+ export declare function isIPNSKey(key: Uint8Array): boolean;
28
+ export declare function fromPublicKeyKey(key: Uint8Array): PeerId;
29
+ /**
30
+ * Create a new put record, encodes and signs it if enabled
31
+ */
32
+ export declare function createPutRecord(key: Uint8Array, value: Uint8Array): Uint8Array;
33
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAM7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAMxD,wBAAgB,sBAAsB,CAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAchE;AAED,wBAAgB,qBAAqB,CAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAc/D;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAE,GAAG,EAAE,UAAU,uBAInD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAE,MAAM,EAAE,MAAM,uBAElD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,UAAU,OAE3C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,OAEjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAE,IAAI,EAAE,MAAM,cAK5C;AAED,wBAAgB,cAAc,CAAE,GAAG,EAAE,UAAU,WAE9C;AAED,wBAAgB,SAAS,CAAE,GAAG,EAAE,UAAU,WAEzC;AAED,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,UAAU,UAEhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,cAKlE"}
@@ -0,0 +1,89 @@
1
+ import { sha256 } from 'multiformats/hashes/sha2';
2
+ import { Key } from 'interface-datastore/key';
3
+ import { Libp2pRecord } from '@libp2p/record';
4
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
5
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
6
+ import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
7
+ import isPrivateIp from 'private-ip';
8
+ import { peerIdFromBytes } from '@libp2p/peer-id';
9
+ import { RECORD_KEY_PREFIX } from './constants.js';
10
+ // const IPNS_PREFIX = uint8ArrayFromString('/ipns/')
11
+ const PK_PREFIX = uint8ArrayFromString('/pk/');
12
+ export function removePrivateAddresses(peer) {
13
+ return {
14
+ ...peer,
15
+ multiaddrs: peer.multiaddrs.filter(multiaddr => {
16
+ const [[type, addr]] = multiaddr.stringTuples();
17
+ if (type !== 4 && type !== 6) {
18
+ return false;
19
+ }
20
+ // @ts-expect-error types are wrong https://github.com/frenchbread/private-ip/issues/18
21
+ return !isPrivateIp(addr);
22
+ })
23
+ };
24
+ }
25
+ export function removePublicAddresses(peer) {
26
+ return {
27
+ ...peer,
28
+ multiaddrs: peer.multiaddrs.filter(multiaddr => {
29
+ const [[type, addr]] = multiaddr.stringTuples();
30
+ if (type !== 4 && type !== 6) {
31
+ return false;
32
+ }
33
+ // @ts-expect-error types are wrong https://github.com/frenchbread/private-ip/issues/18
34
+ return isPrivateIp(addr);
35
+ })
36
+ };
37
+ }
38
+ /**
39
+ * Creates a DHT ID by hashing a given Uint8Array
40
+ */
41
+ export async function convertBuffer(buf) {
42
+ const multihash = await sha256.digest(buf);
43
+ return multihash.digest;
44
+ }
45
+ /**
46
+ * Creates a DHT ID by hashing a Peer ID
47
+ */
48
+ export async function convertPeerId(peerId) {
49
+ return await convertBuffer(peerId.toBytes());
50
+ }
51
+ /**
52
+ * Convert a Uint8Array to their SHA2-256 hash
53
+ */
54
+ export function bufferToKey(buf) {
55
+ return new Key('/' + uint8ArrayToString(buf, 'base32'), false);
56
+ }
57
+ /**
58
+ * Convert a Uint8Array to their SHA2-256 hash
59
+ */
60
+ export function bufferToRecordKey(buf) {
61
+ return new Key(`${RECORD_KEY_PREFIX}/${uint8ArrayToString(buf, 'base32')}`, false);
62
+ }
63
+ /**
64
+ * Generate the key for a public key.
65
+ */
66
+ export function keyForPublicKey(peer) {
67
+ return uint8ArrayConcat([
68
+ PK_PREFIX,
69
+ peer.toBytes()
70
+ ]);
71
+ }
72
+ export function isPublicKeyKey(key) {
73
+ return uint8ArrayToString(key.slice(0, 4)) === '/pk/';
74
+ }
75
+ export function isIPNSKey(key) {
76
+ return uint8ArrayToString(key.slice(0, 4)) === '/ipns/';
77
+ }
78
+ export function fromPublicKeyKey(key) {
79
+ return peerIdFromBytes(key.slice(4));
80
+ }
81
+ /**
82
+ * Create a new put record, encodes and signs it if enabled
83
+ */
84
+ export function createPutRecord(key, value) {
85
+ const timeReceived = new Date();
86
+ const rec = new Libp2pRecord(key, value, timeReceived);
87
+ return rec.serialize();
88
+ }
89
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,200 @@
1
+ {
2
+ "name": "@libp2p/kad-dht",
3
+ "version": "0.28.6",
4
+ "description": "JavaScript implementation of the Kad-DHT for libp2p",
5
+ "license": "Apache-2.0 OR MIT",
6
+ "homepage": "https://github.com/libp2p/js-libp2p-kad-dht#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/libp2p/js-libp2p-kad-dht.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/libp2p/js-libp2p-kad-dht/issues"
13
+ },
14
+ "keywords": [
15
+ "IPFS"
16
+ ],
17
+ "engines": {
18
+ "node": ">=16.0.0",
19
+ "npm": ">=7.0.0"
20
+ },
21
+ "type": "module",
22
+ "types": "./dist/src/index.d.ts",
23
+ "files": [
24
+ "src",
25
+ "dist/src",
26
+ "!dist/test",
27
+ "!**/*.tsbuildinfo"
28
+ ],
29
+ "exports": {
30
+ ".": {
31
+ "import": "./dist/src/index.js"
32
+ }
33
+ },
34
+ "eslintConfig": {
35
+ "extends": "ipfs",
36
+ "parserOptions": {
37
+ "sourceType": "module"
38
+ },
39
+ "ignorePatterns": [
40
+ "src/message/dht.d.ts"
41
+ ]
42
+ },
43
+ "release": {
44
+ "branches": [
45
+ "master"
46
+ ],
47
+ "plugins": [
48
+ [
49
+ "@semantic-release/commit-analyzer",
50
+ {
51
+ "preset": "conventionalcommits",
52
+ "releaseRules": [
53
+ {
54
+ "breaking": true,
55
+ "release": "major"
56
+ },
57
+ {
58
+ "revert": true,
59
+ "release": "patch"
60
+ },
61
+ {
62
+ "type": "feat",
63
+ "release": "minor"
64
+ },
65
+ {
66
+ "type": "fix",
67
+ "release": "patch"
68
+ },
69
+ {
70
+ "type": "chore",
71
+ "release": "patch"
72
+ },
73
+ {
74
+ "type": "docs",
75
+ "release": "patch"
76
+ },
77
+ {
78
+ "type": "test",
79
+ "release": "patch"
80
+ },
81
+ {
82
+ "scope": "no-release",
83
+ "release": false
84
+ }
85
+ ]
86
+ }
87
+ ],
88
+ [
89
+ "@semantic-release/release-notes-generator",
90
+ {
91
+ "preset": "conventionalcommits",
92
+ "presetConfig": {
93
+ "types": [
94
+ {
95
+ "type": "feat",
96
+ "section": "Features"
97
+ },
98
+ {
99
+ "type": "fix",
100
+ "section": "Bug Fixes"
101
+ },
102
+ {
103
+ "type": "chore",
104
+ "section": "Trivial Changes"
105
+ },
106
+ {
107
+ "type": "docs",
108
+ "section": "Trivial Changes"
109
+ },
110
+ {
111
+ "type": "test",
112
+ "section": "Tests"
113
+ }
114
+ ]
115
+ }
116
+ }
117
+ ],
118
+ "@semantic-release/changelog",
119
+ "@semantic-release/npm",
120
+ "@semantic-release/github",
121
+ "@semantic-release/git"
122
+ ]
123
+ },
124
+ "scripts": {
125
+ "lint": "aegir lint",
126
+ "build": "tsc",
127
+ "postbuild": "npm run build:copy-proto-files",
128
+ "generate": "npm run generate:proto && npm run generate:proto-types",
129
+ "generate:proto": "pbjs -t static-module -w es6 -r libp2p-dht-message --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/message/dht.js ./src/message/dht.proto",
130
+ "generate:proto-types": "pbts -o src/message/dht.d.ts src/message/dht.js",
131
+ "build:copy-proto-files": "cp src/message/dht.js src/message/dht.d.ts dist/src/message",
132
+ "pretest": "npm run build",
133
+ "test": "aegir test -t node -f ./dist/test",
134
+ "test:node": "aegir test -t node -f ./dist/test",
135
+ "dep-check": "aegir dep-check",
136
+ "release": "semantic-release"
137
+ },
138
+ "dependencies": {
139
+ "@libp2p/crypto": "^0.22.7",
140
+ "@libp2p/interfaces": "^1.3.2",
141
+ "@libp2p/logger": "^1.0.2",
142
+ "@libp2p/peer-id": "^1.0.4",
143
+ "@libp2p/record": "^0.10.6",
144
+ "@libp2p/topology": "^1.0.3",
145
+ "@multiformats/multiaddr": "^10.0.0",
146
+ "any-signal": "^3.0.0",
147
+ "datastore-core": "^7.0.0",
148
+ "err-code": "^3.0.0",
149
+ "hashlru": "^2.3.0",
150
+ "interface-datastore": "^6.0.2",
151
+ "it-all": "^1.0.5",
152
+ "it-drain": "^1.0.4",
153
+ "it-first": "^1.0.4",
154
+ "it-length": "^1.0.3",
155
+ "it-length-prefixed": "^6.0.1",
156
+ "it-map": "^1.0.5",
157
+ "it-merge": "^1.0.3",
158
+ "it-parallel": "^2.0.1",
159
+ "it-pipe": "^2.0.3",
160
+ "it-stream-types": "^1.0.4",
161
+ "it-take": "^1.0.2",
162
+ "k-bucket": "^5.1.0",
163
+ "multiformats": "^9.4.5",
164
+ "p-defer": "^4.0.0",
165
+ "p-map": "^5.3.0",
166
+ "p-queue": "^7.2.0",
167
+ "private-ip": "^2.3.3",
168
+ "protobufjs": "^6.10.2",
169
+ "streaming-iterables": "^6.0.0",
170
+ "timeout-abort-controller": "^3.0.0",
171
+ "uint8arrays": "^3.0.0",
172
+ "varint": "^6.0.0"
173
+ },
174
+ "devDependencies": {
175
+ "@libp2p/interface-compliance-tests": "^1.1.3",
176
+ "@libp2p/peer-id-factory": "^1.0.4",
177
+ "@libp2p/peer-store": "^1.0.1",
178
+ "@types/lodash.random": "^3.2.6",
179
+ "@types/lodash.range": "^3.2.6",
180
+ "@types/node": "^16.11.7",
181
+ "@types/varint": "^6.0.0",
182
+ "@types/which": "^2.0.1",
183
+ "aegir": "^36.1.3",
184
+ "datastore-level": "^8.0.0",
185
+ "delay": "^5.0.0",
186
+ "execa": "^6.0.0",
187
+ "it-filter": "^1.0.3",
188
+ "it-last": "^1.0.6",
189
+ "it-pair": "^2.0.2",
190
+ "libp2p": "^0.36.2",
191
+ "lodash.random": "^3.2.0",
192
+ "lodash.range": "^3.2.0",
193
+ "p-retry": "^5.0.0",
194
+ "sinon": "^13.0.1",
195
+ "which": "^2.0.2"
196
+ },
197
+ "browser": {
198
+ "./dist/src/routing-table/generated-prefix-list.js": "./dist/src/routing-table/generated-prefix-list-browser.js"
199
+ }
200
+ }
@@ -0,0 +1,50 @@
1
+ // MaxRecordAge specifies the maximum time that any node will hold onto a record
2
+ // from the time its received. This does not apply to any other forms of validity that
3
+ // the record may contain.
4
+ // For example, a record may contain an ipns entry with an EOL saying its valid
5
+ // until the year 2020 (a great time in the future). For that record to stick around
6
+ // it must be rebroadcasted more frequently than once every 'MaxRecordAge'
7
+
8
+ export const second = 1000
9
+ export const minute = 60 * second
10
+ export const hour = 60 * minute
11
+
12
+ export const MAX_RECORD_AGE = 36 * hour
13
+
14
+ export const PROTOCOL_DHT = '/kad/1.0.0'
15
+
16
+ export const RECORD_KEY_PREFIX = '/dht/record'
17
+
18
+ export const PROVIDER_KEY_PREFIX = '/dht/provider'
19
+
20
+ export const PROVIDERS_LRU_CACHE_SIZE = 256
21
+
22
+ export const PROVIDERS_VALIDITY = 24 * hour
23
+
24
+ export const PROVIDERS_CLEANUP_INTERVAL = hour
25
+
26
+ export const READ_MESSAGE_TIMEOUT = 10 * second
27
+
28
+ // The number of records that will be retrieved on a call to getMany()
29
+ export const GET_MANY_RECORD_COUNT = 16
30
+
31
+ // K is the maximum number of requests to perform before returning failure
32
+ export const K = 20
33
+
34
+ // Alpha is the concurrency for asynchronous requests
35
+ export const ALPHA = 3
36
+
37
+ // How often we look for our closest DHT neighbours
38
+ export const QUERY_SELF_INTERVAL = Number(5 * minute)
39
+
40
+ // How long to look for our closest DHT neighbours for
41
+ export const QUERY_SELF_TIMEOUT = Number(30 * second)
42
+
43
+ // How often we try to find new peers
44
+ export const TABLE_REFRESH_INTERVAL = Number(5 * minute)
45
+
46
+ // How how long to look for new peers for
47
+ export const TABLE_REFRESH_QUERY_TIMEOUT = Number(30 * second)
48
+
49
+ // When a timeout is not specified, run a query for this long
50
+ export const DEFAULT_QUERY_TIMEOUT = Number(30 * second)