libp2p 0.42.2 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/README.md +4 -4
  2. package/dist/index.min.js +29 -29
  3. package/dist/src/address-manager/index.d.ts +1 -10
  4. package/dist/src/address-manager/index.d.ts.map +1 -1
  5. package/dist/src/address-manager/index.js +46 -29
  6. package/dist/src/address-manager/index.js.map +1 -1
  7. package/dist/src/autonat/constants.d.ts +4 -0
  8. package/dist/src/autonat/constants.d.ts.map +1 -0
  9. package/dist/src/autonat/constants.js +4 -0
  10. package/dist/src/autonat/constants.js.map +1 -0
  11. package/dist/src/autonat/index.d.ts +64 -0
  12. package/dist/src/autonat/index.d.ts.map +1 -0
  13. package/dist/src/autonat/index.js +417 -0
  14. package/dist/src/autonat/index.js.map +1 -0
  15. package/dist/src/autonat/pb/index.d.ts +57 -0
  16. package/dist/src/autonat/pb/index.d.ts.map +1 -0
  17. package/dist/src/autonat/pb/index.js +250 -0
  18. package/dist/src/autonat/pb/index.js.map +1 -0
  19. package/dist/src/circuit/constants.d.ts +31 -6
  20. package/dist/src/circuit/constants.d.ts.map +1 -1
  21. package/dist/src/circuit/constants.js +37 -7
  22. package/dist/src/circuit/constants.js.map +1 -1
  23. package/dist/src/circuit/index.d.ts +16 -61
  24. package/dist/src/circuit/index.d.ts.map +1 -1
  25. package/dist/src/circuit/index.js +2 -68
  26. package/dist/src/circuit/index.js.map +1 -1
  27. package/dist/src/circuit/pb/index.d.ts +83 -43
  28. package/dist/src/circuit/pb/index.d.ts.map +1 -1
  29. package/dist/src/circuit/pb/index.js +363 -127
  30. package/dist/src/circuit/pb/index.js.map +1 -1
  31. package/dist/src/circuit/server/advert-service.d.ts +43 -0
  32. package/dist/src/circuit/server/advert-service.d.ts.map +1 -0
  33. package/dist/src/circuit/server/advert-service.js +69 -0
  34. package/dist/src/circuit/server/advert-service.js.map +1 -0
  35. package/dist/src/circuit/server/index.d.ts +60 -0
  36. package/dist/src/circuit/server/index.d.ts.map +1 -0
  37. package/dist/src/circuit/server/index.js +287 -0
  38. package/dist/src/circuit/server/index.js.map +1 -0
  39. package/dist/src/circuit/server/reservation-store.d.ts +49 -0
  40. package/dist/src/circuit/server/reservation-store.d.ts.map +1 -0
  41. package/dist/src/circuit/server/reservation-store.js +57 -0
  42. package/dist/src/circuit/server/reservation-store.js.map +1 -0
  43. package/dist/src/circuit/server/reservation-voucher.d.ts +18 -0
  44. package/dist/src/circuit/server/reservation-voucher.d.ts.map +1 -0
  45. package/dist/src/circuit/server/reservation-voucher.js +33 -0
  46. package/dist/src/circuit/server/reservation-voucher.js.map +1 -0
  47. package/dist/src/circuit/transport/discovery.d.ts +45 -0
  48. package/dist/src/circuit/transport/discovery.d.ts.map +1 -0
  49. package/dist/src/circuit/transport/discovery.js +82 -0
  50. package/dist/src/circuit/transport/discovery.js.map +1 -0
  51. package/dist/src/circuit/transport/index.d.ts +33 -0
  52. package/dist/src/circuit/transport/index.d.ts.map +1 -0
  53. package/dist/src/circuit/transport/index.js +225 -0
  54. package/dist/src/circuit/transport/index.js.map +1 -0
  55. package/dist/src/circuit/transport/listener.d.ts +9 -0
  56. package/dist/src/circuit/transport/listener.d.ts.map +1 -0
  57. package/dist/src/circuit/transport/listener.js +76 -0
  58. package/dist/src/circuit/transport/listener.js.map +1 -0
  59. package/dist/src/circuit/transport/reservation-store.d.ts +60 -0
  60. package/dist/src/circuit/transport/reservation-store.d.ts.map +1 -0
  61. package/dist/src/circuit/transport/reservation-store.js +165 -0
  62. package/dist/src/circuit/transport/reservation-store.js.map +1 -0
  63. package/dist/src/circuit/utils.d.ts +7 -0
  64. package/dist/src/circuit/utils.d.ts.map +1 -1
  65. package/dist/src/circuit/utils.js +87 -0
  66. package/dist/src/circuit/utils.js.map +1 -1
  67. package/dist/src/components.d.ts +2 -1
  68. package/dist/src/components.d.ts.map +1 -1
  69. package/dist/src/components.js +13 -13
  70. package/dist/src/components.js.map +1 -1
  71. package/dist/src/config.d.ts.map +1 -1
  72. package/dist/src/config.js +21 -25
  73. package/dist/src/config.js.map +1 -1
  74. package/dist/src/connection/index.d.ts +2 -2
  75. package/dist/src/connection/index.d.ts.map +1 -1
  76. package/dist/src/connection/index.js +4 -4
  77. package/dist/src/connection/index.js.map +1 -1
  78. package/dist/src/connection-manager/auto-dialler.d.ts +0 -4
  79. package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
  80. package/dist/src/connection-manager/auto-dialler.js +18 -18
  81. package/dist/src/connection-manager/auto-dialler.js.map +1 -1
  82. package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -1
  83. package/dist/src/connection-manager/dialer/dial-request.js +13 -6
  84. package/dist/src/connection-manager/dialer/dial-request.js.map +1 -1
  85. package/dist/src/connection-manager/dialer/index.d.ts +10 -1
  86. package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
  87. package/dist/src/connection-manager/dialer/index.js +24 -9
  88. package/dist/src/connection-manager/dialer/index.js.map +1 -1
  89. package/dist/src/connection-manager/index.d.ts +1 -4
  90. package/dist/src/connection-manager/index.d.ts.map +1 -1
  91. package/dist/src/connection-manager/index.js +8 -5
  92. package/dist/src/connection-manager/index.js.map +1 -1
  93. package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
  94. package/dist/src/connection-manager/latency-monitor.js +1 -1
  95. package/dist/src/connection-manager/latency-monitor.js.map +1 -1
  96. package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
  97. package/dist/src/content-routing/index.d.ts +6 -4
  98. package/dist/src/content-routing/index.d.ts.map +1 -1
  99. package/dist/src/content-routing/index.js +9 -9
  100. package/dist/src/content-routing/index.js.map +1 -1
  101. package/dist/src/content-routing/utils.d.ts +3 -3
  102. package/dist/src/content-routing/utils.d.ts.map +1 -1
  103. package/dist/src/content-routing/utils.js +2 -2
  104. package/dist/src/content-routing/utils.js.map +1 -1
  105. package/dist/src/dht/dht-content-routing.d.ts +2 -1
  106. package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
  107. package/dist/src/dht/dht-content-routing.js +2 -2
  108. package/dist/src/dht/dht-content-routing.js.map +1 -1
  109. package/dist/src/dht/dht-peer-routing.d.ts +3 -2
  110. package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
  111. package/dist/src/dht/dht-peer-routing.js +2 -2
  112. package/dist/src/dht/dht-peer-routing.js.map +1 -1
  113. package/dist/src/dht/dummy-dht.d.ts +1 -1
  114. package/dist/src/dht/dummy-dht.d.ts.map +1 -1
  115. package/dist/src/dht/dummy-dht.js +12 -12
  116. package/dist/src/dht/dummy-dht.js.map +1 -1
  117. package/dist/src/errors.d.ts +2 -1
  118. package/dist/src/errors.d.ts.map +1 -1
  119. package/dist/src/errors.js +1 -0
  120. package/dist/src/errors.js.map +1 -1
  121. package/dist/src/fetch/index.d.ts.map +1 -1
  122. package/dist/src/fetch/index.js +6 -6
  123. package/dist/src/fetch/index.js.map +1 -1
  124. package/dist/src/fetch/pb/proto.d.ts +3 -3
  125. package/dist/src/fetch/pb/proto.d.ts.map +1 -1
  126. package/dist/src/fetch/pb/proto.js +4 -3
  127. package/dist/src/fetch/pb/proto.js.map +1 -1
  128. package/dist/src/get-peer.js +2 -2
  129. package/dist/src/get-peer.js.map +1 -1
  130. package/dist/src/identify/index.d.ts +3 -1
  131. package/dist/src/identify/index.d.ts.map +1 -1
  132. package/dist/src/identify/index.js +19 -14
  133. package/dist/src/identify/index.js.map +1 -1
  134. package/dist/src/identify/pb/message.d.ts +2 -2
  135. package/dist/src/identify/pb/message.d.ts.map +1 -1
  136. package/dist/src/identify/pb/message.js +1 -0
  137. package/dist/src/identify/pb/message.js.map +1 -1
  138. package/dist/src/index.d.ts +14 -8
  139. package/dist/src/index.d.ts.map +1 -1
  140. package/dist/src/index.js.map +1 -1
  141. package/dist/src/insecure/index.d.ts.map +1 -1
  142. package/dist/src/insecure/index.js.map +1 -1
  143. package/dist/src/insecure/pb/proto.d.ts +3 -3
  144. package/dist/src/insecure/pb/proto.d.ts.map +1 -1
  145. package/dist/src/insecure/pb/proto.js +4 -5
  146. package/dist/src/insecure/pb/proto.js.map +1 -1
  147. package/dist/src/libp2p.d.ts +7 -3
  148. package/dist/src/libp2p.d.ts.map +1 -1
  149. package/dist/src/libp2p.js +35 -35
  150. package/dist/src/libp2p.js.map +1 -1
  151. package/dist/src/nat-manager.d.ts.map +1 -1
  152. package/dist/src/nat-manager.js +5 -3
  153. package/dist/src/nat-manager.js.map +1 -1
  154. package/dist/src/peer-record-updater.d.ts.map +1 -1
  155. package/dist/src/peer-routing.d.ts.map +1 -1
  156. package/dist/src/peer-routing.js +5 -5
  157. package/dist/src/peer-routing.js.map +1 -1
  158. package/dist/src/ping/index.d.ts.map +1 -1
  159. package/dist/src/ping/index.js +2 -2
  160. package/dist/src/ping/index.js.map +1 -1
  161. package/dist/src/pnet/crypto.d.ts +1 -1
  162. package/dist/src/pnet/crypto.d.ts.map +1 -1
  163. package/dist/src/pnet/crypto.js +1 -1
  164. package/dist/src/pnet/crypto.js.map +1 -1
  165. package/dist/src/pnet/index.js +3 -3
  166. package/dist/src/pnet/index.js.map +1 -1
  167. package/dist/src/pnet/key-generator.d.ts.map +1 -1
  168. package/dist/src/pubsub/dummy-pubsub.js +9 -9
  169. package/dist/src/pubsub/dummy-pubsub.js.map +1 -1
  170. package/dist/src/registrar.d.ts.map +1 -1
  171. package/dist/src/registrar.js +4 -4
  172. package/dist/src/registrar.js.map +1 -1
  173. package/dist/src/transport-manager.d.ts.map +1 -1
  174. package/dist/src/transport-manager.js +8 -9
  175. package/dist/src/transport-manager.js.map +1 -1
  176. package/dist/src/upgrader.d.ts +2 -1
  177. package/dist/src/upgrader.d.ts.map +1 -1
  178. package/dist/src/upgrader.js +38 -33
  179. package/dist/src/upgrader.js.map +1 -1
  180. package/dist/typedoc-urls.json +19 -6
  181. package/package.json +36 -33
  182. package/src/address-manager/index.ts +62 -35
  183. package/src/autonat/constants.ts +4 -0
  184. package/src/autonat/index.ts +567 -0
  185. package/src/autonat/pb/index.proto +35 -0
  186. package/src/autonat/pb/index.ts +320 -0
  187. package/src/circuit/constants.ts +48 -7
  188. package/src/circuit/index.ts +17 -129
  189. package/src/circuit/pb/index.proto +57 -32
  190. package/src/circuit/pb/index.ts +448 -138
  191. package/src/circuit/server/advert-service.ts +108 -0
  192. package/src/circuit/server/index.ts +421 -0
  193. package/src/circuit/server/reservation-store.ts +111 -0
  194. package/src/circuit/server/reservation-voucher.ts +51 -0
  195. package/src/circuit/transport/discovery.ts +127 -0
  196. package/src/circuit/transport/index.ts +325 -0
  197. package/src/circuit/transport/listener.ts +99 -0
  198. package/src/circuit/transport/reservation-store.ts +249 -0
  199. package/src/circuit/utils.ts +108 -0
  200. package/src/components.ts +22 -21
  201. package/src/config.ts +21 -25
  202. package/src/connection/index.ts +10 -10
  203. package/src/connection-manager/auto-dialler.ts +36 -40
  204. package/src/connection-manager/dialer/dial-request.ts +13 -6
  205. package/src/connection-manager/dialer/index.ts +34 -15
  206. package/src/connection-manager/index.ts +22 -23
  207. package/src/connection-manager/latency-monitor.ts +9 -9
  208. package/src/connection-manager/visibility-change-emitter.ts +4 -4
  209. package/src/content-routing/index.ts +18 -16
  210. package/src/content-routing/utils.ts +5 -5
  211. package/src/dht/dht-content-routing.ts +5 -4
  212. package/src/dht/dht-peer-routing.ts +5 -4
  213. package/src/dht/dummy-dht.ts +13 -13
  214. package/src/errors.ts +2 -1
  215. package/src/fetch/index.ts +13 -13
  216. package/src/fetch/pb/proto.ts +8 -7
  217. package/src/get-peer.ts +3 -3
  218. package/src/identify/index.ts +29 -24
  219. package/src/identify/pb/message.ts +3 -2
  220. package/src/index.ts +15 -8
  221. package/src/insecure/index.ts +2 -1
  222. package/src/insecure/pb/proto.ts +8 -9
  223. package/src/libp2p.ts +52 -46
  224. package/src/nat-manager.ts +11 -9
  225. package/src/peer-record-updater.ts +4 -4
  226. package/src/peer-routing.ts +9 -9
  227. package/src/ping/index.ts +6 -6
  228. package/src/pnet/crypto.ts +3 -3
  229. package/src/pnet/index.ts +3 -3
  230. package/src/pnet/key-generator.ts +1 -1
  231. package/src/pubsub/dummy-pubsub.ts +9 -9
  232. package/src/registrar.ts +12 -12
  233. package/src/transport-manager.ts +17 -18
  234. package/src/upgrader.ts +43 -42
  235. package/src/version.ts +1 -1
  236. package/dist/src/circuit/auto-relay.d.ts +0 -46
  237. package/dist/src/circuit/auto-relay.d.ts.map +0 -1
  238. package/dist/src/circuit/auto-relay.js +0 -220
  239. package/dist/src/circuit/auto-relay.js.map +0 -1
  240. package/dist/src/circuit/circuit/hop.d.ts +0 -42
  241. package/dist/src/circuit/circuit/hop.d.ts.map +0 -1
  242. package/dist/src/circuit/circuit/hop.js +0 -142
  243. package/dist/src/circuit/circuit/hop.js.map +0 -1
  244. package/dist/src/circuit/circuit/stop.d.ts +0 -24
  245. package/dist/src/circuit/circuit/stop.d.ts.map +0 -1
  246. package/dist/src/circuit/circuit/stop.js +0 -51
  247. package/dist/src/circuit/circuit/stop.js.map +0 -1
  248. package/dist/src/circuit/circuit/stream-handler.d.ts +0 -40
  249. package/dist/src/circuit/circuit/stream-handler.d.ts.map +0 -1
  250. package/dist/src/circuit/circuit/stream-handler.js +0 -59
  251. package/dist/src/circuit/circuit/stream-handler.js.map +0 -1
  252. package/dist/src/circuit/circuit/utils.d.ts +0 -7
  253. package/dist/src/circuit/circuit/utils.d.ts.map +0 -1
  254. package/dist/src/circuit/circuit/utils.js +0 -43
  255. package/dist/src/circuit/circuit/utils.js.map +0 -1
  256. package/dist/src/circuit/listener.d.ts +0 -9
  257. package/dist/src/circuit/listener.d.ts.map +0 -1
  258. package/dist/src/circuit/listener.js +0 -62
  259. package/dist/src/circuit/listener.js.map +0 -1
  260. package/dist/src/circuit/multicodec.d.ts +0 -2
  261. package/dist/src/circuit/multicodec.d.ts.map +0 -1
  262. package/dist/src/circuit/multicodec.js +0 -2
  263. package/dist/src/circuit/multicodec.js.map +0 -1
  264. package/dist/src/circuit/transport.d.ts +0 -51
  265. package/dist/src/circuit/transport.d.ts.map +0 -1
  266. package/dist/src/circuit/transport.js +0 -223
  267. package/dist/src/circuit/transport.js.map +0 -1
  268. package/dist/src/keychain/cms.d.ts +0 -33
  269. package/dist/src/keychain/cms.d.ts.map +0 -1
  270. package/dist/src/keychain/cms.js +0 -129
  271. package/dist/src/keychain/cms.js.map +0 -1
  272. package/dist/src/keychain/index.d.ts +0 -151
  273. package/dist/src/keychain/index.d.ts.map +0 -1
  274. package/dist/src/keychain/index.js +0 -519
  275. package/dist/src/keychain/index.js.map +0 -1
  276. package/dist/src/keychain/util.d.ts +0 -21
  277. package/dist/src/keychain/util.d.ts.map +0 -1
  278. package/dist/src/keychain/util.js +0 -79
  279. package/dist/src/keychain/util.js.map +0 -1
  280. package/src/circuit/IMPLEMENTATION_NOTES.md +0 -128
  281. package/src/circuit/README.md +0 -111
  282. package/src/circuit/auto-relay.ts +0 -292
  283. package/src/circuit/circuit/hop.ts +0 -220
  284. package/src/circuit/circuit/stop.ts +0 -83
  285. package/src/circuit/circuit/stream-handler.ts +0 -87
  286. package/src/circuit/circuit/utils.ts +0 -44
  287. package/src/circuit/listener.ts +0 -83
  288. package/src/circuit/multicodec.ts +0 -2
  289. package/src/circuit/transport.ts +0 -278
  290. package/src/keychain/README.md +0 -55
  291. package/src/keychain/cms.ts +0 -150
  292. package/src/keychain/doc/private-key.png +0 -0
  293. package/src/keychain/doc/private-key.xml +0 -1
  294. package/src/keychain/index.ts +0 -629
  295. package/src/keychain/util.ts +0 -82
@@ -1,223 +0,0 @@
1
- import { logger } from '@libp2p/logger';
2
- import errCode from 'err-code';
3
- import * as mafmt from '@multiformats/mafmt';
4
- import { multiaddr } from '@multiformats/multiaddr';
5
- import { CircuitRelay as CircuitPB } from './pb/index.js';
6
- import { codes } from '../errors.js';
7
- import { streamToMaConnection } from '@libp2p/utils/stream-to-ma-conn';
8
- import { RELAY_CODEC } from './multicodec.js';
9
- import { createListener } from './listener.js';
10
- import { handleCanHop, handleHop, hop } from './circuit/hop.js';
11
- import { handleStop } from './circuit/stop.js';
12
- import { StreamHandler } from './circuit/stream-handler.js';
13
- import { symbol } from '@libp2p/interface-transport';
14
- import { peerIdFromString } from '@libp2p/peer-id';
15
- import { abortableDuplex } from 'abortable-iterator';
16
- import { TimeoutController } from 'timeout-abort-controller';
17
- import { setMaxListeners } from 'events';
18
- const log = logger('libp2p:circuit');
19
- export class Circuit {
20
- constructor(components, init) {
21
- this._init = init;
22
- this.components = components;
23
- this._started = false;
24
- }
25
- isStarted() {
26
- return this._started;
27
- }
28
- async start() {
29
- if (this._started) {
30
- return;
31
- }
32
- this._started = true;
33
- await this.components.registrar.handle(RELAY_CODEC, (data) => {
34
- void this._onProtocol(data).catch(err => {
35
- log.error(err);
36
- });
37
- }, { ...this._init })
38
- .catch(err => {
39
- log.error(err);
40
- });
41
- }
42
- async stop() {
43
- await this.components.registrar.unhandle(RELAY_CODEC);
44
- }
45
- hopEnabled() {
46
- return true;
47
- }
48
- hopActive() {
49
- return true;
50
- }
51
- get [symbol]() {
52
- return true;
53
- }
54
- get [Symbol.toStringTag]() {
55
- return 'libp2p/circuit-relay-v1';
56
- }
57
- async _onProtocol(data) {
58
- const { connection, stream } = data;
59
- const controller = new TimeoutController(this._init.hop.timeout);
60
- try {
61
- // fails on node < 15.4
62
- setMaxListeners?.(Infinity, controller.signal);
63
- }
64
- catch { }
65
- try {
66
- const source = abortableDuplex(stream, controller.signal);
67
- const streamHandler = new StreamHandler({
68
- stream: {
69
- ...stream,
70
- ...source
71
- }
72
- });
73
- const request = await streamHandler.read();
74
- if (request == null) {
75
- log('request was invalid, could not read from stream');
76
- streamHandler.write({
77
- type: CircuitPB.Type.STATUS,
78
- code: CircuitPB.Status.MALFORMED_MESSAGE
79
- });
80
- streamHandler.close();
81
- return;
82
- }
83
- let virtualConnection;
84
- switch (request.type) {
85
- case CircuitPB.Type.CAN_HOP: {
86
- log('received CAN_HOP request from %p', connection.remotePeer);
87
- await handleCanHop({ circuit: this, connection, streamHandler });
88
- break;
89
- }
90
- case CircuitPB.Type.HOP: {
91
- log('received HOP request from %p', connection.remotePeer);
92
- await handleHop({
93
- connection,
94
- request,
95
- streamHandler,
96
- circuit: this,
97
- connectionManager: this.components.connectionManager
98
- });
99
- break;
100
- }
101
- case CircuitPB.Type.STOP: {
102
- log('received STOP request from %p', connection.remotePeer);
103
- virtualConnection = await handleStop({
104
- connection,
105
- request,
106
- streamHandler
107
- });
108
- break;
109
- }
110
- default: {
111
- log('Request of type %s not supported', request.type);
112
- streamHandler.write({
113
- type: CircuitPB.Type.STATUS,
114
- code: CircuitPB.Status.MALFORMED_MESSAGE
115
- });
116
- streamHandler.close();
117
- return;
118
- }
119
- }
120
- if (virtualConnection != null) {
121
- const remoteAddr = connection.remoteAddr
122
- .encapsulate('/p2p-circuit')
123
- .encapsulate(multiaddr(request.dstPeer?.addrs[0]));
124
- const localAddr = multiaddr(request.srcPeer?.addrs[0]);
125
- const maConn = streamToMaConnection({
126
- stream: virtualConnection,
127
- remoteAddr,
128
- localAddr
129
- });
130
- const type = request.type === CircuitPB.Type.HOP ? 'relay' : 'inbound';
131
- log('new %s connection %s', type, maConn.remoteAddr);
132
- const conn = await this.components.upgrader.upgradeInbound(maConn);
133
- log('%s connection %s upgraded', type, maConn.remoteAddr);
134
- if (this.handler != null) {
135
- this.handler(conn);
136
- }
137
- }
138
- }
139
- finally {
140
- controller.clear();
141
- }
142
- }
143
- /**
144
- * Dial a peer over a relay
145
- */
146
- async dial(ma, options = {}) {
147
- // Check the multiaddr to see if it contains a relay and a destination peer
148
- const addrs = ma.toString().split('/p2p-circuit');
149
- const relayAddr = multiaddr(addrs[0]);
150
- const destinationAddr = multiaddr(addrs[addrs.length - 1]);
151
- const relayId = relayAddr.getPeerId();
152
- const destinationId = destinationAddr.getPeerId();
153
- if (relayId == null || destinationId == null) {
154
- const errMsg = 'Circuit relay dial failed as addresses did not have peer id';
155
- log.error(errMsg);
156
- throw errCode(new Error(errMsg), codes.ERR_RELAYED_DIAL);
157
- }
158
- const relayPeer = peerIdFromString(relayId);
159
- const destinationPeer = peerIdFromString(destinationId);
160
- let disconnectOnFailure = false;
161
- const relayConnections = this.components.connectionManager.getConnections(relayPeer);
162
- let relayConnection = relayConnections[0];
163
- if (relayConnection == null) {
164
- await this.components.peerStore.addressBook.add(relayPeer, [relayAddr]);
165
- relayConnection = await this.components.connectionManager.openConnection(relayPeer, options);
166
- disconnectOnFailure = true;
167
- }
168
- try {
169
- const virtualConnection = await hop({
170
- ...options,
171
- connection: relayConnection,
172
- request: {
173
- type: CircuitPB.Type.HOP,
174
- srcPeer: {
175
- id: this.components.peerId.toBytes(),
176
- addrs: this.components.addressManager.getAddresses().map(addr => addr.bytes)
177
- },
178
- dstPeer: {
179
- id: destinationPeer.toBytes(),
180
- addrs: [multiaddr(destinationAddr).bytes]
181
- }
182
- }
183
- });
184
- const localAddr = relayAddr.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`);
185
- const maConn = streamToMaConnection({
186
- stream: virtualConnection,
187
- remoteAddr: ma,
188
- localAddr
189
- });
190
- log('new outbound connection %s', maConn.remoteAddr);
191
- return await this.components.upgrader.upgradeOutbound(maConn);
192
- }
193
- catch (err) {
194
- log.error('Circuit relay dial failed', err);
195
- disconnectOnFailure && await relayConnection.close();
196
- throw err;
197
- }
198
- }
199
- /**
200
- * Create a listener
201
- */
202
- createListener(options) {
203
- // Called on successful HOP and STOP requests
204
- this.handler = options.handler;
205
- return createListener({
206
- connectionManager: this.components.connectionManager,
207
- peerStore: this.components.peerStore
208
- });
209
- }
210
- /**
211
- * Filter check for all Multiaddrs that this transport can dial on
212
- *
213
- * @param {Multiaddr[]} multiaddrs
214
- * @returns {Multiaddr[]}
215
- */
216
- filter(multiaddrs) {
217
- multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs];
218
- return multiaddrs.filter((ma) => {
219
- return mafmt.Circuit.matches(ma);
220
- });
221
- }
222
- }
223
- //# sourceMappingURL=transport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/circuit/transport.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import 'node-forge/lib/pkcs7.js';
2
- import 'node-forge/lib/pbe.js';
3
- import type { KeyChain } from './index.js';
4
- /**
5
- * Cryptographic Message Syntax (aka PKCS #7)
6
- *
7
- * CMS describes an encapsulation syntax for data protection. It
8
- * is used to digitally sign, digest, authenticate, or encrypt
9
- * arbitrary message content.
10
- *
11
- * See RFC 5652 for all the details.
12
- */
13
- export declare class CMS {
14
- private readonly keychain;
15
- /**
16
- * Creates a new instance with a keychain
17
- */
18
- constructor(keychain: KeyChain, dek: string);
19
- /**
20
- * Creates some protected data.
21
- *
22
- * The output Uint8Array contains the PKCS #7 message in DER.
23
- */
24
- encrypt(name: string, plain: Uint8Array): Promise<Uint8Array>;
25
- /**
26
- * Reads some protected data.
27
- *
28
- * The keychain must contain one of the keys used to encrypt the data. If none of the keys
29
- * exists, an Error is returned with the property 'missingKeys'. It is array of key ids.
30
- */
31
- decrypt(cmsData: Uint8Array): Promise<Uint8Array>;
32
- }
33
- //# sourceMappingURL=cms.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms.d.ts","sourceRoot":"","sources":["../../../src/keychain/cms.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA;AAChC,OAAO,uBAAuB,CAAA;AAS9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAM1C;;;;;;;;GAQG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IAEnC;;OAEG;gBACU,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;IAS5C;;;;OAIG;IACG,OAAO,CAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA4BpE;;;;;OAKG;IACG,OAAO,CAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAsEzD"}
@@ -1,129 +0,0 @@
1
- import 'node-forge/lib/pkcs7.js';
2
- import 'node-forge/lib/pbe.js';
3
- // @ts-expect-error types are missing
4
- import forge from 'node-forge/lib/forge.js';
5
- import { certificateForKey, findAsync } from './util.js';
6
- import errCode from 'err-code';
7
- import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
8
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
9
- import { codes } from '../errors.js';
10
- import { logger } from '@libp2p/logger';
11
- const log = logger('libp2p:keychain:cms');
12
- const privates = new WeakMap();
13
- /**
14
- * Cryptographic Message Syntax (aka PKCS #7)
15
- *
16
- * CMS describes an encapsulation syntax for data protection. It
17
- * is used to digitally sign, digest, authenticate, or encrypt
18
- * arbitrary message content.
19
- *
20
- * See RFC 5652 for all the details.
21
- */
22
- export class CMS {
23
- /**
24
- * Creates a new instance with a keychain
25
- */
26
- constructor(keychain, dek) {
27
- if (keychain == null) {
28
- throw errCode(new Error('keychain is required'), codes.ERR_KEYCHAIN_REQUIRED);
29
- }
30
- this.keychain = keychain;
31
- privates.set(this, { dek });
32
- }
33
- /**
34
- * Creates some protected data.
35
- *
36
- * The output Uint8Array contains the PKCS #7 message in DER.
37
- */
38
- async encrypt(name, plain) {
39
- if (!(plain instanceof Uint8Array)) {
40
- throw errCode(new Error('Plain data must be a Uint8Array'), codes.ERR_INVALID_PARAMETERS);
41
- }
42
- const key = await this.keychain.findKeyByName(name);
43
- const pem = await this.keychain.getPrivateKey(name);
44
- const cached = privates.get(this);
45
- if (cached == null) {
46
- throw errCode(new Error('dek missing'), codes.ERR_INVALID_PARAMETERS);
47
- }
48
- const dek = cached.dek;
49
- const privateKey = forge.pki.decryptRsaPrivateKey(pem, dek);
50
- const certificate = await certificateForKey(key, privateKey);
51
- // create a p7 enveloped message
52
- const p7 = forge.pkcs7.createEnvelopedData();
53
- p7.addRecipient(certificate);
54
- p7.content = forge.util.createBuffer(plain);
55
- p7.encrypt();
56
- // convert message to DER
57
- const der = forge.asn1.toDer(p7.toAsn1()).getBytes();
58
- return uint8ArrayFromString(der, 'ascii');
59
- }
60
- /**
61
- * Reads some protected data.
62
- *
63
- * The keychain must contain one of the keys used to encrypt the data. If none of the keys
64
- * exists, an Error is returned with the property 'missingKeys'. It is array of key ids.
65
- */
66
- async decrypt(cmsData) {
67
- if (!(cmsData instanceof Uint8Array)) {
68
- throw errCode(new Error('CMS data is required'), codes.ERR_INVALID_PARAMETERS);
69
- }
70
- let cms;
71
- try {
72
- const buf = forge.util.createBuffer(uint8ArrayToString(cmsData, 'ascii'));
73
- const obj = forge.asn1.fromDer(buf);
74
- cms = forge.pkcs7.messageFromAsn1(obj);
75
- }
76
- catch (err) {
77
- log.error(err);
78
- throw errCode(new Error('Invalid CMS'), codes.ERR_INVALID_CMS);
79
- }
80
- // Find a recipient whose key we hold. We only deal with recipient certs
81
- // issued by ipfs (O=ipfs).
82
- const recipients = cms.recipients
83
- // @ts-expect-error cms types not defined
84
- .filter(r => r.issuer.find(a => a.shortName === 'O' && a.value === 'ipfs'))
85
- // @ts-expect-error cms types not defined
86
- .filter(r => r.issuer.find(a => a.shortName === 'CN'))
87
- // @ts-expect-error cms types not defined
88
- .map(r => {
89
- return {
90
- recipient: r,
91
- // @ts-expect-error cms types not defined
92
- keyId: r.issuer.find(a => a.shortName === 'CN').value
93
- };
94
- });
95
- const r = await findAsync(recipients, async (recipient) => {
96
- try {
97
- const key = await this.keychain.findKeyById(recipient.keyId);
98
- if (key != null) {
99
- return true;
100
- }
101
- }
102
- catch (err) {
103
- return false;
104
- }
105
- return false;
106
- });
107
- if (r == null) {
108
- // @ts-expect-error cms types not defined
109
- const missingKeys = recipients.map(r => r.keyId);
110
- throw errCode(new Error(`Decryption needs one of the key(s): ${missingKeys.join(', ')}`), codes.ERR_MISSING_KEYS, {
111
- missingKeys
112
- });
113
- }
114
- const key = await this.keychain.findKeyById(r.keyId);
115
- if (key == null) {
116
- throw errCode(new Error('No key available to decrypto'), codes.ERR_NO_KEY);
117
- }
118
- const pem = await this.keychain.getPrivateKey(key.name);
119
- const cached = privates.get(this);
120
- if (cached == null) {
121
- throw errCode(new Error('dek missing'), codes.ERR_INVALID_PARAMETERS);
122
- }
123
- const dek = cached.dek;
124
- const privateKey = forge.pki.decryptRsaPrivateKey(pem, dek);
125
- cms.decrypt(r.recipient, privateKey);
126
- return uint8ArrayFromString(cms.content.getBytes(), 'ascii');
127
- }
128
- }
129
- //# sourceMappingURL=cms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms.js","sourceRoot":"","sources":["../../../src/keychain/cms.ts"],"names":[],"mappings":"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"}
@@ -1,151 +0,0 @@
1
- import { CMS } from './cms.js';
2
- import type { PeerId } from '@libp2p/interface-peer-id';
3
- import type { Startable } from '@libp2p/interfaces/dist/src/startable';
4
- import type { Datastore } from 'interface-datastore';
5
- import type { KeyTypes } from '@libp2p/crypto/keys';
6
- export interface DEKConfig {
7
- hash: string;
8
- salt: string;
9
- iterationCount: number;
10
- keyLength: number;
11
- }
12
- export interface KeyChainInit {
13
- pass?: string;
14
- dek?: DEKConfig;
15
- }
16
- /**
17
- * Information about a key.
18
- */
19
- export interface KeyInfo {
20
- /**
21
- * The universally unique key id
22
- */
23
- id: string;
24
- /**
25
- * The local key name.
26
- */
27
- name: string;
28
- }
29
- export interface KeyChainComponents {
30
- peerId: PeerId;
31
- datastore: Datastore;
32
- }
33
- /**
34
- * Manages the lifecycle of a key. Keys are encrypted at rest using PKCS #8.
35
- *
36
- * A key in the store has two entries
37
- * - '/info/*key-name*', contains the KeyInfo for the key
38
- * - '/pkcs8/*key-name*', contains the PKCS #8 for the key
39
- *
40
- */
41
- export declare class KeyChain implements Startable {
42
- private readonly components;
43
- private readonly init;
44
- private started;
45
- /**
46
- * Creates a new instance of a key chain
47
- */
48
- constructor(components: KeyChainComponents, init: KeyChainInit);
49
- isStarted(): boolean;
50
- start(): Promise<void>;
51
- stop(): void;
52
- /**
53
- * Gets an object that can encrypt/decrypt protected data
54
- * using the Cryptographic Message Syntax (CMS).
55
- *
56
- * CMS describes an encapsulation syntax for data protection. It
57
- * is used to digitally sign, digest, authenticate, or encrypt
58
- * arbitrary message content
59
- */
60
- get cms(): CMS;
61
- /**
62
- * Generates the options for a keychain. A random salt is produced.
63
- *
64
- * @returns {object}
65
- */
66
- static generateOptions(): KeyChainInit;
67
- /**
68
- * Gets an object that can encrypt/decrypt protected data.
69
- * The default options for a keychain.
70
- *
71
- * @returns {object}
72
- */
73
- static get options(): {
74
- dek: {
75
- keyLength: number;
76
- iterationCount: number;
77
- salt: string;
78
- hash: string;
79
- };
80
- };
81
- /**
82
- * Create a new key.
83
- *
84
- * @param {string} name - The local key name; cannot already exist.
85
- * @param {string} type - One of the key types; 'rsa'.
86
- * @param {number} [size = 2048] - The key size in bits. Used for rsa keys only
87
- */
88
- createKey(name: string, type: KeyTypes, size?: number): Promise<KeyInfo>;
89
- /**
90
- * List all the keys.
91
- *
92
- * @returns {Promise<KeyInfo[]>}
93
- */
94
- listKeys(): Promise<any[]>;
95
- /**
96
- * Find a key by it's id
97
- */
98
- findKeyById(id: string): Promise<KeyInfo>;
99
- /**
100
- * Find a key by it's name.
101
- *
102
- * @param {string} name - The local key name.
103
- * @returns {Promise<KeyInfo>}
104
- */
105
- findKeyByName(name: string): Promise<KeyInfo>;
106
- /**
107
- * Remove an existing key.
108
- *
109
- * @param {string} name - The local key name; must already exist.
110
- * @returns {Promise<KeyInfo>}
111
- */
112
- removeKey(name: string): Promise<KeyInfo>;
113
- /**
114
- * Rename a key
115
- *
116
- * @param {string} oldName - The old local key name; must already exist.
117
- * @param {string} newName - The new local key name; must not already exist.
118
- * @returns {Promise<KeyInfo>}
119
- */
120
- renameKey(oldName: string, newName: string): Promise<KeyInfo>;
121
- /**
122
- * Export an existing key as a PEM encrypted PKCS #8 string
123
- */
124
- exportKey(name: string, password: string): Promise<string>;
125
- /**
126
- * Export an existing key as a PeerId
127
- */
128
- exportPeerId(name: string): Promise<PeerId>;
129
- /**
130
- * Import a new key from a PEM encoded PKCS #8 string
131
- *
132
- * @param {string} name - The local key name; must not already exist.
133
- * @param {string} pem - The PEM encoded PKCS #8 string
134
- * @param {string} password - The password.
135
- * @returns {Promise<KeyInfo>}
136
- */
137
- importKey(name: string, pem: string, password: string): Promise<KeyInfo>;
138
- /**
139
- * Import a peer key
140
- */
141
- importPeer(name: string, peer: PeerId): Promise<KeyInfo>;
142
- /**
143
- * Gets the private key as PEM encoded PKCS #8 string
144
- */
145
- getPrivateKey(name: string): Promise<string>;
146
- /**
147
- * Rotate keychain password and re-encrypt all associated keys
148
- */
149
- rotateKeychainPass(oldPass: string, newPass: string): Promise<void>;
150
- }
151
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/keychain/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAM9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAInD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,SAAS,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;CACb;AA6DD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,qBAAa,QAAS,YAAW,SAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,OAAO,CAAS;IAExB;;OAEG;gBACU,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY;IA+B/D,SAAS;IAIH,KAAK;IAUX,IAAI;IAIJ;;;;;;;OAOG;IACH,IAAI,GAAG,QAUN;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,IAAK,YAAY;IAOvC;;;;;OAKG;IACH,MAAM,KAAK,OAAO;;;;;;;MAEjB;IAED;;;;;;OAMG;IACG,SAAS,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA0D7E;;;;OAIG;IACG,QAAQ;IAad;;OAEG;IACG,WAAW,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhD;;;;;OAKG;IACG,aAAa,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpD;;;;;OAKG;IACG,SAAS,CAAE,IAAI,EAAE,MAAM;IAc7B;;;;;;OAMG;IACG,SAAS,CAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuCpE;;OAEG;IACG,SAAS,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IA6B/C;;OAEG;IACG,YAAY,CAAE,IAAI,EAAE,MAAM;IAQhC;;;;;;;OAOG;IACG,SAAS,CAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoD/E;;OAEG;IACG,UAAU,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4C/D;;OAEG;IACG,aAAa,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBnD;;OAEG;IACG,kBAAkB,CAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAmD3D"}