libp2p 0.46.21 → 1.0.0-06e6d235f

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 (301) hide show
  1. package/README.md +52 -48
  2. package/dist/index.min.js +40 -28
  3. package/dist/src/address-manager/index.d.ts +4 -5
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +3 -3
  6. package/dist/src/address-manager/index.js.map +1 -1
  7. package/dist/src/components.d.ts +4 -15
  8. package/dist/src/components.d.ts.map +1 -1
  9. package/dist/src/components.js +2 -2
  10. package/dist/src/components.js.map +1 -1
  11. package/dist/src/config/connection-gater.browser.d.ts +1 -1
  12. package/dist/src/config/connection-gater.browser.d.ts.map +1 -1
  13. package/dist/src/config/connection-gater.browser.js.map +1 -1
  14. package/dist/src/config/connection-gater.d.ts +1 -1
  15. package/dist/src/config/connection-gater.d.ts.map +1 -1
  16. package/dist/src/config.d.ts.map +1 -1
  17. package/dist/src/config.js +1 -2
  18. package/dist/src/config.js.map +1 -1
  19. package/dist/src/connection/index.d.ts +4 -6
  20. package/dist/src/connection/index.d.ts.map +1 -1
  21. package/dist/src/connection/index.js +11 -13
  22. package/dist/src/connection/index.js.map +1 -1
  23. package/dist/src/connection-manager/auto-dial.d.ts +3 -6
  24. package/dist/src/connection-manager/auto-dial.d.ts.map +1 -1
  25. package/dist/src/connection-manager/auto-dial.js +21 -21
  26. package/dist/src/connection-manager/auto-dial.js.map +1 -1
  27. package/dist/src/connection-manager/connection-pruner.d.ts +3 -5
  28. package/dist/src/connection-manager/connection-pruner.d.ts.map +1 -1
  29. package/dist/src/connection-manager/connection-pruner.js +8 -8
  30. package/dist/src/connection-manager/connection-pruner.js.map +1 -1
  31. package/dist/src/connection-manager/constants.defaults.d.ts +0 -4
  32. package/dist/src/connection-manager/constants.defaults.d.ts.map +1 -1
  33. package/dist/src/connection-manager/constants.defaults.js +0 -4
  34. package/dist/src/connection-manager/constants.defaults.js.map +1 -1
  35. package/dist/src/connection-manager/dial-queue.d.ts +3 -10
  36. package/dist/src/connection-manager/dial-queue.d.ts.map +1 -1
  37. package/dist/src/connection-manager/dial-queue.js +30 -38
  38. package/dist/src/connection-manager/dial-queue.js.map +1 -1
  39. package/dist/src/connection-manager/index.d.ts +3 -18
  40. package/dist/src/connection-manager/index.d.ts.map +1 -1
  41. package/dist/src/connection-manager/index.js +17 -19
  42. package/dist/src/connection-manager/index.js.map +1 -1
  43. package/dist/src/connection-manager/utils.js +1 -1
  44. package/dist/src/connection-manager/utils.js.map +1 -1
  45. package/dist/src/content-routing/index.d.ts +1 -5
  46. package/dist/src/content-routing/index.d.ts.map +1 -1
  47. package/dist/src/content-routing/index.js +2 -2
  48. package/dist/src/content-routing/index.js.map +1 -1
  49. package/dist/src/content-routing/utils.d.ts +1 -2
  50. package/dist/src/content-routing/utils.d.ts.map +1 -1
  51. package/dist/src/content-routing/utils.js +1 -1
  52. package/dist/src/content-routing/utils.js.map +1 -1
  53. package/dist/src/errors.d.ts +0 -2
  54. package/dist/src/errors.d.ts.map +1 -1
  55. package/dist/src/errors.js +0 -2
  56. package/dist/src/errors.js.map +1 -1
  57. package/dist/src/get-peer.d.ts +1 -1
  58. package/dist/src/get-peer.d.ts.map +1 -1
  59. package/dist/src/get-peer.js +1 -5
  60. package/dist/src/get-peer.js.map +1 -1
  61. package/dist/src/index.d.ts +5 -16
  62. package/dist/src/index.d.ts.map +1 -1
  63. package/dist/src/index.js.map +1 -1
  64. package/dist/src/libp2p.d.ts +4 -12
  65. package/dist/src/libp2p.d.ts.map +1 -1
  66. package/dist/src/libp2p.js +30 -65
  67. package/dist/src/libp2p.js.map +1 -1
  68. package/dist/src/peer-routing.d.ts +6 -6
  69. package/dist/src/peer-routing.d.ts.map +1 -1
  70. package/dist/src/peer-routing.js +12 -9
  71. package/dist/src/peer-routing.js.map +1 -1
  72. package/dist/src/registrar.d.ts +5 -7
  73. package/dist/src/registrar.d.ts.map +1 -1
  74. package/dist/src/registrar.js +4 -4
  75. package/dist/src/registrar.js.map +1 -1
  76. package/dist/src/transport-manager.d.ts +5 -9
  77. package/dist/src/transport-manager.d.ts.map +1 -1
  78. package/dist/src/transport-manager.js +12 -13
  79. package/dist/src/transport-manager.js.map +1 -1
  80. package/dist/src/upgrader.d.ts +8 -19
  81. package/dist/src/upgrader.d.ts.map +1 -1
  82. package/dist/src/upgrader.js +75 -38
  83. package/dist/src/upgrader.js.map +1 -1
  84. package/dist/src/version.d.ts +1 -1
  85. package/dist/src/version.d.ts.map +1 -1
  86. package/dist/src/version.js +1 -1
  87. package/dist/src/version.js.map +1 -1
  88. package/package.json +41 -110
  89. package/src/address-manager/index.ts +6 -9
  90. package/src/components.ts +5 -16
  91. package/src/config/connection-gater.browser.ts +1 -1
  92. package/src/config/connection-gater.ts +1 -1
  93. package/src/config.ts +1 -2
  94. package/src/connection/index.ts +12 -17
  95. package/src/connection-manager/auto-dial.ts +23 -26
  96. package/src/connection-manager/connection-pruner.ts +10 -12
  97. package/src/connection-manager/constants.defaults.ts +0 -5
  98. package/src/connection-manager/dial-queue.ts +31 -46
  99. package/src/connection-manager/index.ts +19 -37
  100. package/src/connection-manager/utils.ts +1 -1
  101. package/src/content-routing/index.ts +3 -7
  102. package/src/content-routing/utils.ts +2 -3
  103. package/src/errors.ts +0 -2
  104. package/src/get-peer.ts +2 -7
  105. package/src/index.ts +6 -17
  106. package/src/libp2p.ts +32 -80
  107. package/src/peer-routing.ts +16 -15
  108. package/src/registrar.ts +8 -12
  109. package/src/transport-manager.ts +15 -22
  110. package/src/upgrader.ts +110 -64
  111. package/src/version.ts +1 -1
  112. package/dist/src/autonat/constants.d.ts +0 -18
  113. package/dist/src/autonat/constants.d.ts.map +0 -1
  114. package/dist/src/autonat/constants.js +0 -18
  115. package/dist/src/autonat/constants.js.map +0 -1
  116. package/dist/src/autonat/index.d.ts +0 -62
  117. package/dist/src/autonat/index.d.ts.map +0 -1
  118. package/dist/src/autonat/index.js +0 -447
  119. package/dist/src/autonat/index.js.map +0 -1
  120. package/dist/src/autonat/pb/index.d.ts +0 -57
  121. package/dist/src/autonat/pb/index.d.ts.map +0 -1
  122. package/dist/src/autonat/pb/index.js +0 -250
  123. package/dist/src/autonat/pb/index.js.map +0 -1
  124. package/dist/src/circuit-relay/constants.d.ts +0 -50
  125. package/dist/src/circuit-relay/constants.d.ts.map +0 -1
  126. package/dist/src/circuit-relay/constants.js +0 -56
  127. package/dist/src/circuit-relay/constants.js.map +0 -1
  128. package/dist/src/circuit-relay/index.d.ts +0 -55
  129. package/dist/src/circuit-relay/index.d.ts.map +0 -1
  130. package/dist/src/circuit-relay/index.js +0 -38
  131. package/dist/src/circuit-relay/index.js.map +0 -1
  132. package/dist/src/circuit-relay/pb/index.d.ts +0 -93
  133. package/dist/src/circuit-relay/pb/index.d.ts.map +0 -1
  134. package/dist/src/circuit-relay/pb/index.js +0 -425
  135. package/dist/src/circuit-relay/pb/index.js.map +0 -1
  136. package/dist/src/circuit-relay/server/advert-service.d.ts +0 -43
  137. package/dist/src/circuit-relay/server/advert-service.d.ts.map +0 -1
  138. package/dist/src/circuit-relay/server/advert-service.js +0 -73
  139. package/dist/src/circuit-relay/server/advert-service.js.map +0 -1
  140. package/dist/src/circuit-relay/server/index.d.ts +0 -65
  141. package/dist/src/circuit-relay/server/index.d.ts.map +0 -1
  142. package/dist/src/circuit-relay/server/index.js +0 -312
  143. package/dist/src/circuit-relay/server/index.js.map +0 -1
  144. package/dist/src/circuit-relay/server/reservation-store.d.ts +0 -49
  145. package/dist/src/circuit-relay/server/reservation-store.d.ts.map +0 -1
  146. package/dist/src/circuit-relay/server/reservation-store.js +0 -65
  147. package/dist/src/circuit-relay/server/reservation-store.js.map +0 -1
  148. package/dist/src/circuit-relay/server/reservation-voucher.d.ts +0 -18
  149. package/dist/src/circuit-relay/server/reservation-voucher.d.ts.map +0 -1
  150. package/dist/src/circuit-relay/server/reservation-voucher.js +0 -36
  151. package/dist/src/circuit-relay/server/reservation-voucher.js.map +0 -1
  152. package/dist/src/circuit-relay/transport/discovery.d.ts +0 -45
  153. package/dist/src/circuit-relay/transport/discovery.d.ts.map +0 -1
  154. package/dist/src/circuit-relay/transport/discovery.js +0 -97
  155. package/dist/src/circuit-relay/transport/discovery.js.map +0 -1
  156. package/dist/src/circuit-relay/transport/index.d.ts +0 -57
  157. package/dist/src/circuit-relay/transport/index.d.ts.map +0 -1
  158. package/dist/src/circuit-relay/transport/index.js +0 -276
  159. package/dist/src/circuit-relay/transport/index.js.map +0 -1
  160. package/dist/src/circuit-relay/transport/listener.d.ts +0 -9
  161. package/dist/src/circuit-relay/transport/listener.d.ts.map +0 -1
  162. package/dist/src/circuit-relay/transport/listener.js +0 -66
  163. package/dist/src/circuit-relay/transport/listener.js.map +0 -1
  164. package/dist/src/circuit-relay/transport/reservation-store.d.ts +0 -72
  165. package/dist/src/circuit-relay/transport/reservation-store.d.ts.map +0 -1
  166. package/dist/src/circuit-relay/transport/reservation-store.js +0 -209
  167. package/dist/src/circuit-relay/transport/reservation-store.js.map +0 -1
  168. package/dist/src/circuit-relay/utils.d.ts +0 -13
  169. package/dist/src/circuit-relay/utils.d.ts.map +0 -1
  170. package/dist/src/circuit-relay/utils.js +0 -108
  171. package/dist/src/circuit-relay/utils.js.map +0 -1
  172. package/dist/src/dcutr/dcutr.d.ts +0 -43
  173. package/dist/src/dcutr/dcutr.d.ts.map +0 -1
  174. package/dist/src/dcutr/dcutr.js +0 -313
  175. package/dist/src/dcutr/dcutr.js.map +0 -1
  176. package/dist/src/dcutr/index.d.ts +0 -92
  177. package/dist/src/dcutr/index.d.ts.map +0 -1
  178. package/dist/src/dcutr/index.js +0 -63
  179. package/dist/src/dcutr/index.js.map +0 -1
  180. package/dist/src/dcutr/pb/message.d.ts +0 -20
  181. package/dist/src/dcutr/pb/message.d.ts.map +0 -1
  182. package/dist/src/dcutr/pb/message.js +0 -77
  183. package/dist/src/dcutr/pb/message.js.map +0 -1
  184. package/dist/src/dcutr/utils.d.ts +0 -8
  185. package/dist/src/dcutr/utils.d.ts.map +0 -1
  186. package/dist/src/dcutr/utils.js +0 -27
  187. package/dist/src/dcutr/utils.js.map +0 -1
  188. package/dist/src/fetch/constants.d.ts +0 -3
  189. package/dist/src/fetch/constants.d.ts.map +0 -1
  190. package/dist/src/fetch/constants.js +0 -4
  191. package/dist/src/fetch/constants.js.map +0 -1
  192. package/dist/src/fetch/index.d.ts +0 -61
  193. package/dist/src/fetch/index.d.ts.map +0 -1
  194. package/dist/src/fetch/index.js +0 -205
  195. package/dist/src/fetch/index.js.map +0 -1
  196. package/dist/src/fetch/pb/proto.d.ts +0 -28
  197. package/dist/src/fetch/pb/proto.d.ts.map +0 -1
  198. package/dist/src/fetch/pb/proto.js +0 -120
  199. package/dist/src/fetch/pb/proto.js.map +0 -1
  200. package/dist/src/identify/consts.d.ts +0 -10
  201. package/dist/src/identify/consts.d.ts.map +0 -1
  202. package/dist/src/identify/consts.js +0 -11
  203. package/dist/src/identify/consts.js.map +0 -1
  204. package/dist/src/identify/identify.d.ts +0 -54
  205. package/dist/src/identify/identify.d.ts.map +0 -1
  206. package/dist/src/identify/identify.js +0 -447
  207. package/dist/src/identify/identify.js.map +0 -1
  208. package/dist/src/identify/index.d.ts +0 -72
  209. package/dist/src/identify/index.d.ts.map +0 -1
  210. package/dist/src/identify/index.js +0 -15
  211. package/dist/src/identify/index.js.map +0 -1
  212. package/dist/src/identify/pb/message.d.ts +0 -17
  213. package/dist/src/identify/pb/message.d.ts.map +0 -1
  214. package/dist/src/identify/pb/message.js +0 -98
  215. package/dist/src/identify/pb/message.js.map +0 -1
  216. package/dist/src/insecure/index.d.ts +0 -26
  217. package/dist/src/insecure/index.d.ts.map +0 -1
  218. package/dist/src/insecure/index.js +0 -110
  219. package/dist/src/insecure/index.js.map +0 -1
  220. package/dist/src/insecure/pb/proto.d.ts +0 -30
  221. package/dist/src/insecure/pb/proto.d.ts.map +0 -1
  222. package/dist/src/insecure/pb/proto.js +0 -127
  223. package/dist/src/insecure/pb/proto.js.map +0 -1
  224. package/dist/src/ping/constants.d.ts +0 -9
  225. package/dist/src/ping/constants.d.ts.map +0 -1
  226. package/dist/src/ping/constants.js +0 -15
  227. package/dist/src/ping/constants.js.map +0 -1
  228. package/dist/src/ping/index.d.ts +0 -24
  229. package/dist/src/ping/index.d.ts.map +0 -1
  230. package/dist/src/ping/index.js +0 -115
  231. package/dist/src/ping/index.js.map +0 -1
  232. package/dist/src/pnet/crypto.d.ts +0 -18
  233. package/dist/src/pnet/crypto.d.ts.map +0 -1
  234. package/dist/src/pnet/crypto.js +0 -60
  235. package/dist/src/pnet/crypto.js.map +0 -1
  236. package/dist/src/pnet/errors.d.ts +0 -6
  237. package/dist/src/pnet/errors.d.ts.map +0 -1
  238. package/dist/src/pnet/errors.js +0 -6
  239. package/dist/src/pnet/errors.js.map +0 -1
  240. package/dist/src/pnet/index.d.ts +0 -31
  241. package/dist/src/pnet/index.d.ts.map +0 -1
  242. package/dist/src/pnet/index.js +0 -97
  243. package/dist/src/pnet/index.js.map +0 -1
  244. package/dist/src/pnet/key-generator.d.ts +0 -11
  245. package/dist/src/pnet/key-generator.d.ts.map +0 -1
  246. package/dist/src/pnet/key-generator.js +0 -22
  247. package/dist/src/pnet/key-generator.js.map +0 -1
  248. package/dist/src/upnp-nat/index.d.ts +0 -71
  249. package/dist/src/upnp-nat/index.d.ts.map +0 -1
  250. package/dist/src/upnp-nat/index.js +0 -136
  251. package/dist/src/upnp-nat/index.js.map +0 -1
  252. package/dist/src/utils/peer-job-queue.d.ts +0 -33
  253. package/dist/src/utils/peer-job-queue.d.ts.map +0 -1
  254. package/dist/src/utils/peer-job-queue.js +0 -82
  255. package/dist/src/utils/peer-job-queue.js.map +0 -1
  256. package/dist/typedoc-urls.json +0 -71
  257. package/src/autonat/constants.ts +0 -19
  258. package/src/autonat/index.ts +0 -597
  259. package/src/autonat/pb/index.proto +0 -35
  260. package/src/autonat/pb/index.ts +0 -320
  261. package/src/circuit-relay/constants.ts +0 -72
  262. package/src/circuit-relay/index.ts +0 -59
  263. package/src/circuit-relay/pb/index.proto +0 -67
  264. package/src/circuit-relay/pb/index.ts +0 -539
  265. package/src/circuit-relay/server/advert-service.ts +0 -108
  266. package/src/circuit-relay/server/index.ts +0 -443
  267. package/src/circuit-relay/server/reservation-store.ts +0 -116
  268. package/src/circuit-relay/server/reservation-voucher.ts +0 -51
  269. package/src/circuit-relay/transport/discovery.ts +0 -136
  270. package/src/circuit-relay/transport/index.ts +0 -396
  271. package/src/circuit-relay/transport/listener.ts +0 -97
  272. package/src/circuit-relay/transport/reservation-store.ts +0 -312
  273. package/src/circuit-relay/utils.ts +0 -136
  274. package/src/dcutr/dcutr.ts +0 -378
  275. package/src/dcutr/index.ts +0 -102
  276. package/src/dcutr/pb/message.proto +0 -12
  277. package/src/dcutr/pb/message.ts +0 -96
  278. package/src/dcutr/utils.ts +0 -33
  279. package/src/fetch/README.md +0 -41
  280. package/src/fetch/constants.ts +0 -3
  281. package/src/fetch/index.ts +0 -315
  282. package/src/fetch/pb/proto.proto +0 -15
  283. package/src/fetch/pb/proto.ts +0 -153
  284. package/src/identify/README.md +0 -13
  285. package/src/identify/consts.ts +0 -12
  286. package/src/identify/identify.ts +0 -561
  287. package/src/identify/index.ts +0 -90
  288. package/src/identify/pb/message.proto +0 -30
  289. package/src/identify/pb/message.ts +0 -126
  290. package/src/insecure/index.ts +0 -138
  291. package/src/insecure/pb/proto.proto +0 -18
  292. package/src/insecure/pb/proto.ts +0 -161
  293. package/src/ping/constants.ts +0 -15
  294. package/src/ping/index.ts +0 -170
  295. package/src/pnet/README.md +0 -68
  296. package/src/pnet/crypto.ts +0 -67
  297. package/src/pnet/errors.ts +0 -5
  298. package/src/pnet/index.ts +0 -126
  299. package/src/pnet/key-generator.ts +0 -23
  300. package/src/upnp-nat/index.ts +0 -212
  301. package/src/utils/peer-job-queue.ts +0 -119
@@ -1,126 +0,0 @@
1
- /* eslint-disable import/export */
2
- /* eslint-disable complexity */
3
- /* eslint-disable @typescript-eslint/no-namespace */
4
- /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
5
- /* eslint-disable @typescript-eslint/no-empty-interface */
6
-
7
- import { encodeMessage, decodeMessage, message } from 'protons-runtime'
8
- import type { Codec } from 'protons-runtime'
9
- import type { Uint8ArrayList } from 'uint8arraylist'
10
-
11
- export interface Identify {
12
- protocolVersion?: string
13
- agentVersion?: string
14
- publicKey?: Uint8Array
15
- listenAddrs: Uint8Array[]
16
- observedAddr?: Uint8Array
17
- protocols: string[]
18
- signedPeerRecord?: Uint8Array
19
- }
20
-
21
- export namespace Identify {
22
- let _codec: Codec<Identify>
23
-
24
- export const codec = (): Codec<Identify> => {
25
- if (_codec == null) {
26
- _codec = message<Identify>((obj, w, opts = {}) => {
27
- if (opts.lengthDelimited !== false) {
28
- w.fork()
29
- }
30
-
31
- if (obj.protocolVersion != null) {
32
- w.uint32(42)
33
- w.string(obj.protocolVersion)
34
- }
35
-
36
- if (obj.agentVersion != null) {
37
- w.uint32(50)
38
- w.string(obj.agentVersion)
39
- }
40
-
41
- if (obj.publicKey != null) {
42
- w.uint32(10)
43
- w.bytes(obj.publicKey)
44
- }
45
-
46
- if (obj.listenAddrs != null) {
47
- for (const value of obj.listenAddrs) {
48
- w.uint32(18)
49
- w.bytes(value)
50
- }
51
- }
52
-
53
- if (obj.observedAddr != null) {
54
- w.uint32(34)
55
- w.bytes(obj.observedAddr)
56
- }
57
-
58
- if (obj.protocols != null) {
59
- for (const value of obj.protocols) {
60
- w.uint32(26)
61
- w.string(value)
62
- }
63
- }
64
-
65
- if (obj.signedPeerRecord != null) {
66
- w.uint32(66)
67
- w.bytes(obj.signedPeerRecord)
68
- }
69
-
70
- if (opts.lengthDelimited !== false) {
71
- w.ldelim()
72
- }
73
- }, (reader, length) => {
74
- const obj: any = {
75
- listenAddrs: [],
76
- protocols: []
77
- }
78
-
79
- const end = length == null ? reader.len : reader.pos + length
80
-
81
- while (reader.pos < end) {
82
- const tag = reader.uint32()
83
-
84
- switch (tag >>> 3) {
85
- case 5:
86
- obj.protocolVersion = reader.string()
87
- break
88
- case 6:
89
- obj.agentVersion = reader.string()
90
- break
91
- case 1:
92
- obj.publicKey = reader.bytes()
93
- break
94
- case 2:
95
- obj.listenAddrs.push(reader.bytes())
96
- break
97
- case 4:
98
- obj.observedAddr = reader.bytes()
99
- break
100
- case 3:
101
- obj.protocols.push(reader.string())
102
- break
103
- case 8:
104
- obj.signedPeerRecord = reader.bytes()
105
- break
106
- default:
107
- reader.skipType(tag & 7)
108
- break
109
- }
110
- }
111
-
112
- return obj
113
- })
114
- }
115
-
116
- return _codec
117
- }
118
-
119
- export const encode = (obj: Partial<Identify>): Uint8Array => {
120
- return encodeMessage(obj, Identify.codec())
121
- }
122
-
123
- export const decode = (buf: Uint8Array | Uint8ArrayList): Identify => {
124
- return decodeMessage(buf, Identify.codec())
125
- }
126
- }
@@ -1,138 +0,0 @@
1
- /**
2
- * @packageDocumentation
3
- *
4
- * A connection encrypter that does no connection encryption.
5
- *
6
- * This should not be used in production should be used for research purposes only.
7
- *
8
- * @example
9
- *
10
- * ```typescript
11
- * import { createLibp2p } from 'libp2p'
12
- * import { plaintext } from 'libp2p/insecure'
13
- *
14
- * // Create a Uint8Array and write the swarm key to it
15
- * const swarmKey = new Uint8Array(95)
16
- * generateKey(swarmKey)
17
- *
18
- * const node = await createLibp2p({
19
- * // ...other options
20
- * connectionEncryption: [plaintext()]
21
- * })
22
- * ```
23
- */
24
-
25
- import { UnexpectedPeerError, InvalidCryptoExchangeError } from '@libp2p/interface/errors'
26
- import { logger } from '@libp2p/logger'
27
- import { peerIdFromBytes, peerIdFromKeys } from '@libp2p/peer-id'
28
- import { handshake } from 'it-handshake'
29
- import * as lp from 'it-length-prefixed'
30
- import map from 'it-map'
31
- import { Exchange, KeyType } from './pb/proto.js'
32
- import type { ConnectionEncrypter, SecuredConnection } from '@libp2p/interface/connection-encrypter'
33
- import type { PeerId } from '@libp2p/interface/peer-id'
34
- import type { Duplex, Source } from 'it-stream-types'
35
- import type { Uint8ArrayList } from 'uint8arraylist'
36
-
37
- const log = logger('libp2p:plaintext')
38
- const PROTOCOL = '/plaintext/2.0.0'
39
-
40
- function lpEncodeExchange (exchange: Exchange): Uint8ArrayList {
41
- const pb = Exchange.encode(exchange)
42
-
43
- return lp.encode.single(pb)
44
- }
45
-
46
- /**
47
- * Encrypt connection
48
- */
49
- async function encrypt (localId: PeerId, conn: Duplex<AsyncGenerator<Uint8Array>, Source<Uint8Array>, Promise<void>>, remoteId?: PeerId): Promise<SecuredConnection> {
50
- const shake = handshake(conn)
51
-
52
- let type = KeyType.RSA
53
-
54
- if (localId.type === 'Ed25519') {
55
- type = KeyType.Ed25519
56
- } else if (localId.type === 'secp256k1') {
57
- type = KeyType.Secp256k1
58
- }
59
-
60
- // Encode the public key and write it to the remote peer
61
- shake.write(
62
- lpEncodeExchange({
63
- id: localId.toBytes(),
64
- pubkey: {
65
- Type: type,
66
- Data: localId.publicKey ?? new Uint8Array(0)
67
- }
68
- }).subarray()
69
- )
70
-
71
- log('write pubkey exchange to peer %p', remoteId)
72
-
73
- // Get the Exchange message
74
- const response = (await lp.decode.fromReader(shake.reader).next()).value
75
-
76
- if (response == null) {
77
- throw new Error('Did not read response')
78
- }
79
-
80
- const id = Exchange.decode(response)
81
- log('read pubkey exchange from peer %p', remoteId)
82
-
83
- let peerId
84
- try {
85
- if (id.pubkey == null) {
86
- throw new Error('Public key missing')
87
- }
88
-
89
- if (id.pubkey.Data.length === 0) {
90
- throw new Error('Public key data too short')
91
- }
92
-
93
- if (id.id == null) {
94
- throw new Error('Remote id missing')
95
- }
96
-
97
- peerId = await peerIdFromKeys(id.pubkey.Data)
98
-
99
- if (!peerId.equals(peerIdFromBytes(id.id))) {
100
- throw new Error('Public key did not match id')
101
- }
102
- } catch (err: any) {
103
- log.error(err)
104
- throw new InvalidCryptoExchangeError('Remote did not provide its public key')
105
- }
106
-
107
- if (remoteId != null && !peerId.equals(remoteId)) {
108
- throw new UnexpectedPeerError()
109
- }
110
-
111
- log('plaintext key exchange completed successfully with peer %p', peerId)
112
-
113
- shake.rest()
114
-
115
- return {
116
- conn: {
117
- sink: shake.stream.sink,
118
- source: map(shake.stream.source, (buf) => buf.subarray())
119
- },
120
- remotePeer: peerId
121
- }
122
- }
123
-
124
- class Plaintext implements ConnectionEncrypter {
125
- public protocol: string = PROTOCOL
126
-
127
- async secureInbound (localId: PeerId, conn: Duplex<AsyncGenerator<Uint8Array>, Source<Uint8Array>, Promise<void>>, remoteId?: PeerId): Promise<SecuredConnection> {
128
- return encrypt(localId, conn, remoteId)
129
- }
130
-
131
- async secureOutbound (localId: PeerId, conn: Duplex<AsyncGenerator<Uint8Array>, Source<Uint8Array>, Promise<void>>, remoteId?: PeerId): Promise<SecuredConnection> {
132
- return encrypt(localId, conn, remoteId)
133
- }
134
- }
135
-
136
- export function plaintext (): () => ConnectionEncrypter {
137
- return () => new Plaintext()
138
- }
@@ -1,18 +0,0 @@
1
- syntax = "proto3";
2
-
3
- message Exchange {
4
- optional bytes id = 1;
5
- optional PublicKey pubkey = 2;
6
- }
7
-
8
- enum KeyType {
9
- RSA = 0;
10
- Ed25519 = 1;
11
- Secp256k1 = 2;
12
- ECDSA = 3;
13
- }
14
-
15
- message PublicKey {
16
- KeyType Type = 1;
17
- bytes Data = 2;
18
- }
@@ -1,161 +0,0 @@
1
- /* eslint-disable import/export */
2
- /* eslint-disable complexity */
3
- /* eslint-disable @typescript-eslint/no-namespace */
4
- /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
5
- /* eslint-disable @typescript-eslint/no-empty-interface */
6
-
7
- import { encodeMessage, decodeMessage, message, enumeration } from 'protons-runtime'
8
- import type { Codec } from 'protons-runtime'
9
- import type { Uint8ArrayList } from 'uint8arraylist'
10
-
11
- export interface Exchange {
12
- id?: Uint8Array
13
- pubkey?: PublicKey
14
- }
15
-
16
- export namespace Exchange {
17
- let _codec: Codec<Exchange>
18
-
19
- export const codec = (): Codec<Exchange> => {
20
- if (_codec == null) {
21
- _codec = message<Exchange>((obj, w, opts = {}) => {
22
- if (opts.lengthDelimited !== false) {
23
- w.fork()
24
- }
25
-
26
- if (obj.id != null) {
27
- w.uint32(10)
28
- w.bytes(obj.id)
29
- }
30
-
31
- if (obj.pubkey != null) {
32
- w.uint32(18)
33
- PublicKey.codec().encode(obj.pubkey, w)
34
- }
35
-
36
- if (opts.lengthDelimited !== false) {
37
- w.ldelim()
38
- }
39
- }, (reader, length) => {
40
- const obj: any = {}
41
-
42
- const end = length == null ? reader.len : reader.pos + length
43
-
44
- while (reader.pos < end) {
45
- const tag = reader.uint32()
46
-
47
- switch (tag >>> 3) {
48
- case 1:
49
- obj.id = reader.bytes()
50
- break
51
- case 2:
52
- obj.pubkey = PublicKey.codec().decode(reader, reader.uint32())
53
- break
54
- default:
55
- reader.skipType(tag & 7)
56
- break
57
- }
58
- }
59
-
60
- return obj
61
- })
62
- }
63
-
64
- return _codec
65
- }
66
-
67
- export const encode = (obj: Partial<Exchange>): Uint8Array => {
68
- return encodeMessage(obj, Exchange.codec())
69
- }
70
-
71
- export const decode = (buf: Uint8Array | Uint8ArrayList): Exchange => {
72
- return decodeMessage(buf, Exchange.codec())
73
- }
74
- }
75
-
76
- export enum KeyType {
77
- RSA = 'RSA',
78
- Ed25519 = 'Ed25519',
79
- Secp256k1 = 'Secp256k1',
80
- ECDSA = 'ECDSA'
81
- }
82
-
83
- enum __KeyTypeValues {
84
- RSA = 0,
85
- Ed25519 = 1,
86
- Secp256k1 = 2,
87
- ECDSA = 3
88
- }
89
-
90
- export namespace KeyType {
91
- export const codec = (): Codec<KeyType> => {
92
- return enumeration<KeyType>(__KeyTypeValues)
93
- }
94
- }
95
- export interface PublicKey {
96
- Type: KeyType
97
- Data: Uint8Array
98
- }
99
-
100
- export namespace PublicKey {
101
- let _codec: Codec<PublicKey>
102
-
103
- export const codec = (): Codec<PublicKey> => {
104
- if (_codec == null) {
105
- _codec = message<PublicKey>((obj, w, opts = {}) => {
106
- if (opts.lengthDelimited !== false) {
107
- w.fork()
108
- }
109
-
110
- if (obj.Type != null && __KeyTypeValues[obj.Type] !== 0) {
111
- w.uint32(8)
112
- KeyType.codec().encode(obj.Type, w)
113
- }
114
-
115
- if ((obj.Data != null && obj.Data.byteLength > 0)) {
116
- w.uint32(18)
117
- w.bytes(obj.Data)
118
- }
119
-
120
- if (opts.lengthDelimited !== false) {
121
- w.ldelim()
122
- }
123
- }, (reader, length) => {
124
- const obj: any = {
125
- Type: KeyType.RSA,
126
- Data: new Uint8Array(0)
127
- }
128
-
129
- const end = length == null ? reader.len : reader.pos + length
130
-
131
- while (reader.pos < end) {
132
- const tag = reader.uint32()
133
-
134
- switch (tag >>> 3) {
135
- case 1:
136
- obj.Type = KeyType.codec().decode(reader)
137
- break
138
- case 2:
139
- obj.Data = reader.bytes()
140
- break
141
- default:
142
- reader.skipType(tag & 7)
143
- break
144
- }
145
- }
146
-
147
- return obj
148
- })
149
- }
150
-
151
- return _codec
152
- }
153
-
154
- export const encode = (obj: Partial<PublicKey>): Uint8Array => {
155
- return encodeMessage(obj, PublicKey.codec())
156
- }
157
-
158
- export const decode = (buf: Uint8Array | Uint8ArrayList): PublicKey => {
159
- return decodeMessage(buf, PublicKey.codec())
160
- }
161
- }
@@ -1,15 +0,0 @@
1
- export const PROTOCOL = '/ipfs/ping/1.0.0'
2
- export const PING_LENGTH = 32
3
- export const PROTOCOL_VERSION = '1.0.0'
4
- export const PROTOCOL_NAME = 'ping'
5
- export const PROTOCOL_PREFIX = 'ipfs'
6
- export const TIMEOUT = 10000
7
-
8
- // See https://github.com/libp2p/specs/blob/d4b5fb0152a6bb86cfd9ea/ping/ping.md?plain=1#L38-L43
9
- // The dialing peer MUST NOT keep more than one outbound stream for the ping protocol per peer.
10
- // The listening peer SHOULD accept at most two streams per peer since cross-stream behavior is
11
- // non-linear and stream writes occur asynchronously. The listening peer may perceive the
12
- // dialing peer closing and opening the wrong streams (for instance, closing stream B and
13
- // opening stream A even though the dialing peer is opening stream B and closing stream A).
14
- export const MAX_INBOUND_STREAMS = 2
15
- export const MAX_OUTBOUND_STREAMS = 1
package/src/ping/index.ts DELETED
@@ -1,170 +0,0 @@
1
- import { randomBytes } from '@libp2p/crypto'
2
- import { CodeError } from '@libp2p/interface/errors'
3
- import { logger } from '@libp2p/logger'
4
- import first from 'it-first'
5
- import { pipe } from 'it-pipe'
6
- import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
7
- import { codes } from '../errors.js'
8
- import { PROTOCOL_PREFIX, PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION, TIMEOUT, MAX_INBOUND_STREAMS, MAX_OUTBOUND_STREAMS } from './constants.js'
9
- import type { AbortOptions } from '@libp2p/interface'
10
- import type { Stream } from '@libp2p/interface/connection'
11
- import type { PeerId } from '@libp2p/interface/peer-id'
12
- import type { Startable } from '@libp2p/interface/startable'
13
- import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
14
- import type { IncomingStreamData, Registrar } from '@libp2p/interface-internal/registrar'
15
- import type { Multiaddr } from '@multiformats/multiaddr'
16
-
17
- const log = logger('libp2p:ping')
18
-
19
- export interface PingService {
20
- ping(peer: PeerId | Multiaddr | Multiaddr[], options?: AbortOptions): Promise<number>
21
- }
22
-
23
- export interface PingServiceInit {
24
- protocolPrefix?: string
25
- maxInboundStreams?: number
26
- maxOutboundStreams?: number
27
- runOnTransientConnection?: boolean
28
-
29
- /**
30
- * How long we should wait for a ping response
31
- */
32
- timeout?: number
33
- }
34
-
35
- export interface PingServiceComponents {
36
- registrar: Registrar
37
- connectionManager: ConnectionManager
38
- }
39
-
40
- class DefaultPingService implements Startable, PingService {
41
- public readonly protocol: string
42
- private readonly components: PingServiceComponents
43
- private started: boolean
44
- private readonly timeout: number
45
- private readonly maxInboundStreams: number
46
- private readonly maxOutboundStreams: number
47
- private readonly runOnTransientConnection: boolean
48
-
49
- constructor (components: PingServiceComponents, init: PingServiceInit) {
50
- this.components = components
51
- this.started = false
52
- this.protocol = `/${init.protocolPrefix ?? PROTOCOL_PREFIX}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
53
- this.timeout = init.timeout ?? TIMEOUT
54
- this.maxInboundStreams = init.maxInboundStreams ?? MAX_INBOUND_STREAMS
55
- this.maxOutboundStreams = init.maxOutboundStreams ?? MAX_OUTBOUND_STREAMS
56
- this.runOnTransientConnection = init.runOnTransientConnection ?? true
57
- }
58
-
59
- async start (): Promise<void> {
60
- await this.components.registrar.handle(this.protocol, this.handleMessage, {
61
- maxInboundStreams: this.maxInboundStreams,
62
- maxOutboundStreams: this.maxOutboundStreams,
63
- runOnTransientConnection: this.runOnTransientConnection
64
- })
65
- this.started = true
66
- }
67
-
68
- async stop (): Promise<void> {
69
- await this.components.registrar.unhandle(this.protocol)
70
- this.started = false
71
- }
72
-
73
- isStarted (): boolean {
74
- return this.started
75
- }
76
-
77
- /**
78
- * A handler to register with Libp2p to process ping messages
79
- */
80
- handleMessage (data: IncomingStreamData): void {
81
- log('incoming ping from %p', data.connection.remotePeer)
82
-
83
- const { stream } = data
84
- const start = Date.now()
85
-
86
- void pipe(stream, stream)
87
- .catch(err => {
88
- log.error('incoming ping from %p failed with error', data.connection.remotePeer, err)
89
- })
90
- .finally(() => {
91
- const ms = Date.now() - start
92
-
93
- log('incoming ping from %p complete in %dms', data.connection.remotePeer, ms)
94
- })
95
- }
96
-
97
- /**
98
- * Ping a given peer and wait for its response, getting the operation latency.
99
- *
100
- * @param {PeerId|Multiaddr} peer
101
- * @returns {Promise<number>}
102
- */
103
- async ping (peer: PeerId | Multiaddr | Multiaddr[], options: AbortOptions = {}): Promise<number> {
104
- log('pinging %p', peer)
105
-
106
- const start = Date.now()
107
- const data = randomBytes(PING_LENGTH)
108
- const connection = await this.components.connectionManager.openConnection(peer, options)
109
- let stream: Stream | undefined
110
- let onAbort = (): void => {}
111
-
112
- if (options.signal == null) {
113
- const signal = AbortSignal.timeout(this.timeout)
114
-
115
- options = {
116
- ...options,
117
- signal
118
- }
119
- }
120
-
121
- try {
122
- stream = await connection.newStream(this.protocol, {
123
- ...options,
124
- runOnTransientConnection: this.runOnTransientConnection
125
- })
126
-
127
- onAbort = () => {
128
- stream?.abort(new CodeError('ping timeout', codes.ERR_TIMEOUT))
129
- }
130
-
131
- // make stream abortable
132
- options.signal?.addEventListener('abort', onAbort, { once: true })
133
-
134
- const result = await pipe(
135
- [data],
136
- stream,
137
- async (source) => first(source)
138
- )
139
-
140
- const ms = Date.now() - start
141
-
142
- if (result == null) {
143
- throw new CodeError(`Did not receive a ping ack after ${ms}ms`, codes.ERR_WRONG_PING_ACK)
144
- }
145
-
146
- if (!uint8ArrayEquals(data, result.subarray())) {
147
- throw new CodeError(`Received wrong ping ack after ${ms}ms`, codes.ERR_WRONG_PING_ACK)
148
- }
149
-
150
- log('ping %p complete in %dms', connection.remotePeer, ms)
151
-
152
- return ms
153
- } catch (err: any) {
154
- log.error('error while pinging %p', connection.remotePeer, err)
155
-
156
- stream?.abort(err)
157
-
158
- throw err
159
- } finally {
160
- options.signal?.removeEventListener('abort', onAbort)
161
- if (stream != null) {
162
- await stream.close()
163
- }
164
- }
165
- }
166
- }
167
-
168
- export function pingService (init: PingServiceInit = {}): (components: PingServiceComponents) => PingService {
169
- return (components) => new DefaultPingService(components, init)
170
- }
@@ -1,68 +0,0 @@
1
- js-libp2p-pnet <!-- omit in toc -->
2
- ==================
3
-
4
- > Connection protection management for libp2p leveraging PSK encryption via XSalsa20.
5
-
6
- **Note**: git history prior to merging into js-libp2p can be found in the original repository, https://github.com/libp2p/js-libp2p-pnet.
7
-
8
- ## Table of Contents <!-- omit in toc -->
9
-
10
- - [Usage](#usage)
11
- - [Private Shared Keys](#private-shared-keys)
12
- - [PSK Generation](#psk-generation)
13
- - [From a module using libp2p](#from-a-module-using-libp2p)
14
- - [Programmatically](#programmatically)
15
-
16
- ## Usage
17
-
18
- ```js
19
- import { createLibp2p } from 'libp2p'
20
- import { preSharedKey, generateKey } from 'libp2p/pnet'
21
-
22
- // Create a Uint8Array and write the swarm key to it
23
- const swarmKey = new Uint8Array(95)
24
- generateKey(swarmKey)
25
-
26
- const node = await createLibp2p({
27
- // ...other options
28
- connectionProtector: preSharedKey({
29
- psk: swarmKey
30
- })
31
- })
32
- ```
33
-
34
- ## Private Shared Keys
35
-
36
- Private Shared Keys are expected to be in the following format:
37
-
38
- ```
39
- /key/swarm/psk/1.0.0/
40
- /base16/
41
- dffb7e3135399a8b1612b2aaca1c36a3a8ac2cd0cca51ceeb2ced87d308cac6d
42
- ```
43
-
44
- ## PSK Generation
45
-
46
- A utility method has been created to generate a key for your private network. You can
47
- use one of the methods below to generate your key.
48
-
49
- #### From a module using libp2p
50
-
51
- If you have a module locally that depends on libp2p, you can run the following from
52
- that project, assuming the node_modules are installed.
53
-
54
- ```console
55
- node -e "import('libp2p/pnet').then(({ generateKey }) => generateKey(process.stdout))" > swarm.key
56
- ```
57
-
58
- #### Programmatically
59
-
60
- ```js
61
- import fs from 'fs'
62
- import { generateKey } from 'libp2p/pnet'
63
-
64
- const swarmKey = new Uint8Array(95)
65
- generateKey(swarmKey)
66
-
67
- fs.writeFileSync('swarm.key', swarmKey)
68
- ```