@libp2p/interface 0.1.6-effcfaa8e → 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.
- package/README.md +1 -1
- package/dist/index.min.js +1 -1
- package/dist/src/connection/index.d.ts +15 -3
- package/dist/src/connection/index.d.ts.map +1 -1
- package/dist/src/connection/index.js +2 -2
- package/dist/src/connection/index.js.map +1 -1
- package/dist/src/connection-encrypter/index.d.ts +7 -5
- package/dist/src/connection-encrypter/index.d.ts.map +1 -1
- package/dist/src/content-routing/index.d.ts +3 -3
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/content-routing/index.js +3 -3
- package/dist/src/content-routing/index.js.map +1 -1
- package/dist/src/errors.d.ts +4 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +5 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/events.d.ts +0 -1
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +0 -2
- package/dist/src/events.js.map +1 -1
- package/dist/src/index.d.ts +34 -14
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +21 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/keys/index.d.ts +5 -4
- package/dist/src/keys/index.d.ts.map +1 -1
- package/dist/src/keys/index.js.map +1 -1
- package/dist/src/peer-discovery/index.d.ts +1 -1
- package/dist/src/peer-discovery/index.d.ts.map +1 -1
- package/dist/src/peer-discovery/index.js +1 -1
- package/dist/src/peer-discovery/index.js.map +1 -1
- package/dist/src/peer-id/index.d.ts +1 -1
- package/dist/src/peer-id/index.d.ts.map +1 -1
- package/dist/src/peer-id/index.js +2 -2
- package/dist/src/peer-id/index.js.map +1 -1
- package/dist/src/peer-info/index.d.ts +12 -1
- package/dist/src/peer-info/index.d.ts.map +1 -1
- package/dist/src/peer-routing/index.d.ts +1 -1
- package/dist/src/peer-routing/index.d.ts.map +1 -1
- package/dist/src/peer-routing/index.js +1 -1
- package/dist/src/peer-routing/index.js.map +1 -1
- package/dist/src/startable.d.ts +0 -1
- package/dist/src/startable.d.ts.map +1 -1
- package/dist/src/startable.js.map +1 -1
- package/dist/src/stream-muxer/index.d.ts +2 -2
- package/dist/src/stream-muxer/index.d.ts.map +1 -1
- package/dist/src/topology/index.d.ts +0 -2
- package/dist/src/topology/index.d.ts.map +1 -1
- package/dist/src/transport/index.d.ts +2 -2
- package/dist/src/transport/index.d.ts.map +1 -1
- package/dist/src/transport/index.js +2 -2
- package/dist/src/transport/index.js.map +1 -1
- package/package.json +15 -119
- package/src/connection/index.ts +19 -4
- package/src/connection-encrypter/index.ts +7 -5
- package/src/content-routing/index.ts +3 -3
- package/src/errors.ts +7 -0
- package/src/events.ts +0 -3
- package/src/index.ts +37 -15
- package/src/keys/index.ts +6 -4
- package/src/peer-discovery/index.ts +1 -1
- package/src/peer-id/index.ts +2 -2
- package/src/peer-info/index.ts +13 -1
- package/src/peer-routing/index.ts +1 -1
- package/src/startable.ts +0 -2
- package/src/stream-muxer/index.ts +2 -2
- package/src/topology/index.ts +0 -3
- package/src/transport/index.ts +3 -3
- package/dist/src/keychain/index.d.ts +0 -154
- package/dist/src/keychain/index.d.ts.map +0 -1
- package/dist/src/keychain/index.js +0 -23
- package/dist/src/keychain/index.js.map +0 -1
- package/dist/src/metrics/tracked-map.d.ts +0 -17
- package/dist/src/metrics/tracked-map.d.ts.map +0 -1
- package/dist/src/metrics/tracked-map.js +0 -38
- package/dist/src/metrics/tracked-map.js.map +0 -1
- package/dist/src/stream-muxer/stream.d.ts +0 -150
- package/dist/src/stream-muxer/stream.d.ts.map +0 -1
- package/dist/src/stream-muxer/stream.js +0 -323
- package/dist/src/stream-muxer/stream.js.map +0 -1
- package/src/keychain/index.ts +0 -167
- package/src/metrics/tracked-map.ts +0 -65
- package/src/stream-muxer/stream.ts +0 -496
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
import { abortableSource } from 'abortable-iterator';
|
|
2
|
-
import { pushable } from 'it-pushable';
|
|
3
|
-
import defer, {} from 'p-defer';
|
|
4
|
-
import { raceSignal } from 'race-signal';
|
|
5
|
-
import { Uint8ArrayList } from 'uint8arraylist';
|
|
6
|
-
import { CodeError } from '../errors.js';
|
|
7
|
-
const ERR_STREAM_RESET = 'ERR_STREAM_RESET';
|
|
8
|
-
const ERR_SINK_INVALID_STATE = 'ERR_SINK_INVALID_STATE';
|
|
9
|
-
const DEFAULT_SEND_CLOSE_WRITE_TIMEOUT = 5000;
|
|
10
|
-
function isPromise(res) {
|
|
11
|
-
return res != null && typeof res.then === 'function';
|
|
12
|
-
}
|
|
13
|
-
export class AbstractStream {
|
|
14
|
-
id;
|
|
15
|
-
direction;
|
|
16
|
-
timeline;
|
|
17
|
-
protocol;
|
|
18
|
-
metadata;
|
|
19
|
-
source;
|
|
20
|
-
status;
|
|
21
|
-
readStatus;
|
|
22
|
-
writeStatus;
|
|
23
|
-
sinkController;
|
|
24
|
-
sinkEnd;
|
|
25
|
-
endErr;
|
|
26
|
-
streamSource;
|
|
27
|
-
onEnd;
|
|
28
|
-
onCloseRead;
|
|
29
|
-
onCloseWrite;
|
|
30
|
-
onReset;
|
|
31
|
-
onAbort;
|
|
32
|
-
sendCloseWriteTimeout;
|
|
33
|
-
log;
|
|
34
|
-
constructor(init) {
|
|
35
|
-
this.sinkController = new AbortController();
|
|
36
|
-
this.sinkEnd = defer();
|
|
37
|
-
this.log = init.log;
|
|
38
|
-
// stream status
|
|
39
|
-
this.status = 'open';
|
|
40
|
-
this.readStatus = 'ready';
|
|
41
|
-
this.writeStatus = 'ready';
|
|
42
|
-
this.id = init.id;
|
|
43
|
-
this.metadata = init.metadata ?? {};
|
|
44
|
-
this.direction = init.direction;
|
|
45
|
-
this.timeline = {
|
|
46
|
-
open: Date.now()
|
|
47
|
-
};
|
|
48
|
-
this.sendCloseWriteTimeout = init.sendCloseWriteTimeout ?? DEFAULT_SEND_CLOSE_WRITE_TIMEOUT;
|
|
49
|
-
this.onEnd = init.onEnd;
|
|
50
|
-
this.onCloseRead = init?.onCloseRead;
|
|
51
|
-
this.onCloseWrite = init?.onCloseWrite;
|
|
52
|
-
this.onReset = init?.onReset;
|
|
53
|
-
this.onAbort = init?.onAbort;
|
|
54
|
-
this.source = this.streamSource = pushable({
|
|
55
|
-
onEnd: (err) => {
|
|
56
|
-
if (err != null) {
|
|
57
|
-
this.log.trace('source ended with error', err);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
this.log.trace('source ended');
|
|
61
|
-
}
|
|
62
|
-
this.onSourceEnd(err);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
// necessary because the libp2p upgrader wraps the sink function
|
|
66
|
-
this.sink = this.sink.bind(this);
|
|
67
|
-
}
|
|
68
|
-
async sink(source) {
|
|
69
|
-
if (this.writeStatus !== 'ready') {
|
|
70
|
-
throw new CodeError(`writable end state is "${this.writeStatus}" not "ready"`, ERR_SINK_INVALID_STATE);
|
|
71
|
-
}
|
|
72
|
-
try {
|
|
73
|
-
this.writeStatus = 'writing';
|
|
74
|
-
const options = {
|
|
75
|
-
signal: this.sinkController.signal
|
|
76
|
-
};
|
|
77
|
-
if (this.direction === 'outbound') { // If initiator, open a new stream
|
|
78
|
-
const res = this.sendNewStream(options);
|
|
79
|
-
if (isPromise(res)) {
|
|
80
|
-
await res;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
source = abortableSource(source, this.sinkController.signal, {
|
|
84
|
-
returnOnAbort: true
|
|
85
|
-
});
|
|
86
|
-
this.log.trace('sink reading from source');
|
|
87
|
-
for await (let data of source) {
|
|
88
|
-
data = data instanceof Uint8Array ? new Uint8ArrayList(data) : data;
|
|
89
|
-
const res = this.sendData(data, options);
|
|
90
|
-
if (isPromise(res)) { // eslint-disable-line max-depth
|
|
91
|
-
await res;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
this.log.trace('sink finished reading from source, write status is "%s"', this.writeStatus);
|
|
95
|
-
if (this.writeStatus === 'writing') {
|
|
96
|
-
this.writeStatus = 'closing';
|
|
97
|
-
this.log.trace('send close write to remote');
|
|
98
|
-
await this.sendCloseWrite({
|
|
99
|
-
signal: AbortSignal.timeout(this.sendCloseWriteTimeout)
|
|
100
|
-
});
|
|
101
|
-
this.writeStatus = 'closed';
|
|
102
|
-
}
|
|
103
|
-
this.onSinkEnd();
|
|
104
|
-
}
|
|
105
|
-
catch (err) {
|
|
106
|
-
this.log.trace('sink ended with error, calling abort with error', err);
|
|
107
|
-
this.abort(err);
|
|
108
|
-
throw err;
|
|
109
|
-
}
|
|
110
|
-
finally {
|
|
111
|
-
this.log.trace('resolve sink end');
|
|
112
|
-
this.sinkEnd.resolve();
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
onSourceEnd(err) {
|
|
116
|
-
if (this.timeline.closeRead != null) {
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
this.timeline.closeRead = Date.now();
|
|
120
|
-
this.readStatus = 'closed';
|
|
121
|
-
if (err != null && this.endErr == null) {
|
|
122
|
-
this.endErr = err;
|
|
123
|
-
}
|
|
124
|
-
this.onCloseRead?.();
|
|
125
|
-
if (this.timeline.closeWrite != null) {
|
|
126
|
-
this.log.trace('source and sink ended');
|
|
127
|
-
this.timeline.close = Date.now();
|
|
128
|
-
if (this.status !== 'aborted' && this.status !== 'reset') {
|
|
129
|
-
this.status = 'closed';
|
|
130
|
-
}
|
|
131
|
-
if (this.onEnd != null) {
|
|
132
|
-
this.onEnd(this.endErr);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
this.log.trace('source ended, waiting for sink to end');
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
onSinkEnd(err) {
|
|
140
|
-
if (this.timeline.closeWrite != null) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
this.timeline.closeWrite = Date.now();
|
|
144
|
-
this.writeStatus = 'closed';
|
|
145
|
-
if (err != null && this.endErr == null) {
|
|
146
|
-
this.endErr = err;
|
|
147
|
-
}
|
|
148
|
-
this.onCloseWrite?.();
|
|
149
|
-
if (this.timeline.closeRead != null) {
|
|
150
|
-
this.log.trace('sink and source ended');
|
|
151
|
-
this.timeline.close = Date.now();
|
|
152
|
-
if (this.status !== 'aborted' && this.status !== 'reset') {
|
|
153
|
-
this.status = 'closed';
|
|
154
|
-
}
|
|
155
|
-
if (this.onEnd != null) {
|
|
156
|
-
this.onEnd(this.endErr);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
this.log.trace('sink ended, waiting for source to end');
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
// Close for both Reading and Writing
|
|
164
|
-
async close(options) {
|
|
165
|
-
this.log.trace('closing gracefully');
|
|
166
|
-
this.status = 'closing';
|
|
167
|
-
await Promise.all([
|
|
168
|
-
this.closeRead(options),
|
|
169
|
-
this.closeWrite(options)
|
|
170
|
-
]);
|
|
171
|
-
this.status = 'closed';
|
|
172
|
-
this.log.trace('closed gracefully');
|
|
173
|
-
}
|
|
174
|
-
async closeRead(options = {}) {
|
|
175
|
-
if (this.readStatus === 'closing' || this.readStatus === 'closed') {
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
this.log.trace('closing readable end of stream with starting read status "%s"', this.readStatus);
|
|
179
|
-
const readStatus = this.readStatus;
|
|
180
|
-
this.readStatus = 'closing';
|
|
181
|
-
if (this.status !== 'reset' && this.status !== 'aborted' && this.timeline.closeRead == null) {
|
|
182
|
-
this.log.trace('send close read to remote');
|
|
183
|
-
await this.sendCloseRead(options);
|
|
184
|
-
}
|
|
185
|
-
if (readStatus === 'ready') {
|
|
186
|
-
this.log.trace('ending internal source queue');
|
|
187
|
-
this.streamSource.end();
|
|
188
|
-
}
|
|
189
|
-
this.log.trace('closed readable end of stream');
|
|
190
|
-
}
|
|
191
|
-
async closeWrite(options = {}) {
|
|
192
|
-
if (this.writeStatus === 'closing' || this.writeStatus === 'closed') {
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
this.log.trace('closing writable end of stream with starting write status "%s"', this.writeStatus);
|
|
196
|
-
if (this.writeStatus === 'ready') {
|
|
197
|
-
this.log.trace('sink was never sunk, sink an empty array');
|
|
198
|
-
await raceSignal(this.sink([]), options.signal);
|
|
199
|
-
}
|
|
200
|
-
if (this.writeStatus === 'writing') {
|
|
201
|
-
// stop reading from the source passed to `.sink` in the microtask queue
|
|
202
|
-
// - this lets any data queued by the user in the current tick get read
|
|
203
|
-
// before we exit
|
|
204
|
-
await new Promise((resolve, reject) => {
|
|
205
|
-
queueMicrotask(() => {
|
|
206
|
-
this.log.trace('aborting source passed to .sink');
|
|
207
|
-
this.sinkController.abort();
|
|
208
|
-
raceSignal(this.sinkEnd.promise, options.signal)
|
|
209
|
-
.then(resolve, reject);
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
this.writeStatus = 'closed';
|
|
214
|
-
this.log.trace('closed writable end of stream');
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Close immediately for reading and writing and send a reset message (local
|
|
218
|
-
* error)
|
|
219
|
-
*/
|
|
220
|
-
abort(err) {
|
|
221
|
-
if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
this.log('abort with error', err);
|
|
225
|
-
// try to send a reset message
|
|
226
|
-
this.log('try to send reset to remote');
|
|
227
|
-
const res = this.sendReset();
|
|
228
|
-
if (isPromise(res)) {
|
|
229
|
-
res.catch((err) => {
|
|
230
|
-
this.log.error('error sending reset message', err);
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
this.status = 'aborted';
|
|
234
|
-
this.timeline.abort = Date.now();
|
|
235
|
-
this._closeSinkAndSource(err);
|
|
236
|
-
this.onAbort?.(err);
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Receive a reset message - close immediately for reading and writing (remote
|
|
240
|
-
* error)
|
|
241
|
-
*/
|
|
242
|
-
reset() {
|
|
243
|
-
if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
const err = new CodeError('stream reset', ERR_STREAM_RESET);
|
|
247
|
-
this.status = 'reset';
|
|
248
|
-
this.timeline.reset = Date.now();
|
|
249
|
-
this._closeSinkAndSource(err);
|
|
250
|
-
this.onReset?.();
|
|
251
|
-
}
|
|
252
|
-
_closeSinkAndSource(err) {
|
|
253
|
-
this._closeSink(err);
|
|
254
|
-
this._closeSource(err);
|
|
255
|
-
}
|
|
256
|
-
_closeSink(err) {
|
|
257
|
-
// if the sink function is running, cause it to end
|
|
258
|
-
if (this.writeStatus === 'writing') {
|
|
259
|
-
this.log.trace('end sink source');
|
|
260
|
-
this.sinkController.abort();
|
|
261
|
-
}
|
|
262
|
-
this.onSinkEnd(err);
|
|
263
|
-
}
|
|
264
|
-
_closeSource(err) {
|
|
265
|
-
// if the source is not ending, end it
|
|
266
|
-
if (this.readStatus !== 'closing' && this.readStatus !== 'closed') {
|
|
267
|
-
this.log.trace('ending source with %d bytes to be read by consumer', this.streamSource.readableLength);
|
|
268
|
-
this.readStatus = 'closing';
|
|
269
|
-
this.streamSource.end(err);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* The remote closed for writing so we should expect to receive no more
|
|
274
|
-
* messages
|
|
275
|
-
*/
|
|
276
|
-
remoteCloseWrite() {
|
|
277
|
-
if (this.readStatus === 'closing' || this.readStatus === 'closed') {
|
|
278
|
-
this.log('received remote close write but local source is already closed');
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
this.log.trace('remote close write');
|
|
282
|
-
this._closeSource();
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* The remote closed for reading so we should not send any more
|
|
286
|
-
* messages
|
|
287
|
-
*/
|
|
288
|
-
remoteCloseRead() {
|
|
289
|
-
if (this.writeStatus === 'closing' || this.writeStatus === 'closed') {
|
|
290
|
-
this.log('received remote close read but local sink is already closed');
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
this.log.trace('remote close read');
|
|
294
|
-
this._closeSink();
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* The underlying muxer has closed, no more messages can be sent or will
|
|
298
|
-
* be received, close immediately to free up resources
|
|
299
|
-
*/
|
|
300
|
-
destroy() {
|
|
301
|
-
if (this.status === 'closed' || this.status === 'aborted' || this.status === 'reset') {
|
|
302
|
-
this.log('received destroy but we are already closed');
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
this.log.trace('stream destroyed');
|
|
306
|
-
this._closeSinkAndSource();
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* When an extending class reads data from it's implementation-specific source,
|
|
310
|
-
* call this method to allow the stream consumer to read the data.
|
|
311
|
-
*/
|
|
312
|
-
sourcePush(data) {
|
|
313
|
-
this.streamSource.push(data);
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Returns the amount of unread data - can be used to prevent large amounts of
|
|
317
|
-
* data building up when the stream consumer is too slow.
|
|
318
|
-
*/
|
|
319
|
-
sourceReadableLength() {
|
|
320
|
-
return this.streamSource.readableLength;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
//# sourceMappingURL=stream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/stream-muxer/stream.ts"],"names":[],"mappings":"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"}
|
package/src/keychain/index.ts
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @packageDocumentation
|
|
3
|
-
*
|
|
4
|
-
* The libp2p keychain provides an API to store keys in a datastore in
|
|
5
|
-
* an encrypted format.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
*
|
|
9
|
-
* ```typescript
|
|
10
|
-
* import { createLibp2p } from 'libp2p'
|
|
11
|
-
* import { FsDatastore } from 'datastore-fs'
|
|
12
|
-
*
|
|
13
|
-
* const node = await createLibp2p({
|
|
14
|
-
* datastore: new FsDatastore('/path/to/dir')
|
|
15
|
-
* })
|
|
16
|
-
*
|
|
17
|
-
* const info = await node.keychain.createKey('my-new-key', 'Ed25519')
|
|
18
|
-
*
|
|
19
|
-
* console.info(info) // { id: '...', name: 'my-new-key' }
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
import type { KeyType } from '../keys/index.js'
|
|
24
|
-
import type { PeerId } from '../peer-id/index.js'
|
|
25
|
-
import type { Multibase } from 'multiformats/bases/interface'
|
|
26
|
-
|
|
27
|
-
export interface KeyInfo {
|
|
28
|
-
/**
|
|
29
|
-
* The universally unique key id
|
|
30
|
-
*/
|
|
31
|
-
id: string
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* The local key name
|
|
35
|
-
*/
|
|
36
|
-
name: string
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface KeyChain {
|
|
40
|
-
/**
|
|
41
|
-
* Export an existing key as a PEM encrypted PKCS #8 string.
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
*
|
|
45
|
-
* ```js
|
|
46
|
-
* await libp2p.keychain.createKey('keyTest', 'RSA', 4096)
|
|
47
|
-
* const pemKey = await libp2p.keychain.exportKey('keyTest', 'password123')
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
exportKey(name: string, password: string): Promise<Multibase<'m'>>
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Import a new key from a PEM encoded PKCS #8 string.
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
*
|
|
57
|
-
* ```js
|
|
58
|
-
* await libp2p.keychain.createKey('keyTest', 'RSA', 4096)
|
|
59
|
-
* const pemKey = await libp2p.keychain.exportKey('keyTest', 'password123')
|
|
60
|
-
* const keyInfo = await libp2p.keychain.importKey('keyTestImport', pemKey, 'password123')
|
|
61
|
-
* ```
|
|
62
|
-
*/
|
|
63
|
-
importKey(name: string, pem: string, password: string): Promise<KeyInfo>
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Import a new key from a PeerId with a private key component
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
*
|
|
70
|
-
* ```js
|
|
71
|
-
* const keyInfo = await libp2p.keychain.importPeer('keyTestImport', peerIdFromString('12D3Foo...'))
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
|
-
importPeer(name: string, peerId: PeerId): Promise<KeyInfo>
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Export an existing key as a PeerId
|
|
78
|
-
*
|
|
79
|
-
* @example
|
|
80
|
-
*
|
|
81
|
-
* ```js
|
|
82
|
-
* const peerId = await libp2p.keychain.exportPeerId('key-name')
|
|
83
|
-
* ```
|
|
84
|
-
*/
|
|
85
|
-
exportPeerId(name: string): Promise<PeerId>
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Create a key in the keychain.
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
*
|
|
92
|
-
* ```js
|
|
93
|
-
* const keyInfo = await libp2p.keychain.createKey('keyTest', 'RSA', 4096)
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
createKey(name: string, type: KeyType, size?: number): Promise<KeyInfo>
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* List all the keys.
|
|
100
|
-
*
|
|
101
|
-
* @example
|
|
102
|
-
*
|
|
103
|
-
* ```js
|
|
104
|
-
* const keyInfos = await libp2p.keychain.listKeys()
|
|
105
|
-
* ```
|
|
106
|
-
*/
|
|
107
|
-
listKeys(): Promise<KeyInfo[]>
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Removes a key from the keychain.
|
|
111
|
-
*
|
|
112
|
-
* @example
|
|
113
|
-
*
|
|
114
|
-
* ```js
|
|
115
|
-
* await libp2p.keychain.createKey('keyTest', 'RSA', 4096)
|
|
116
|
-
* const keyInfo = await libp2p.keychain.removeKey('keyTest')
|
|
117
|
-
* ```
|
|
118
|
-
*/
|
|
119
|
-
removeKey(name: string): Promise<KeyInfo>
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Rename a key in the keychain.
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
*
|
|
126
|
-
* ```js
|
|
127
|
-
* await libp2p.keychain.createKey('keyTest', 'RSA', 4096)
|
|
128
|
-
* const keyInfo = await libp2p.keychain.renameKey('keyTest', 'keyNewNtest')
|
|
129
|
-
* ```
|
|
130
|
-
*/
|
|
131
|
-
renameKey(oldName: string, newName: string): Promise<KeyInfo>
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Find a key by it's id.
|
|
135
|
-
*
|
|
136
|
-
* @example
|
|
137
|
-
*
|
|
138
|
-
* ```js
|
|
139
|
-
* const keyInfo = await libp2p.keychain.createKey('keyTest', 'RSA', 4096)
|
|
140
|
-
* const keyInfo2 = await libp2p.keychain.findKeyById(keyInfo.id)
|
|
141
|
-
* ```
|
|
142
|
-
*/
|
|
143
|
-
findKeyById(id: string): Promise<KeyInfo>
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Find a key by it's name.
|
|
147
|
-
*
|
|
148
|
-
* @example
|
|
149
|
-
*
|
|
150
|
-
* ```js
|
|
151
|
-
* const keyInfo = await libp2p.keychain.createKey('keyTest', 'RSA', 4096)
|
|
152
|
-
* const keyInfo2 = await libp2p.keychain.findKeyByName('keyTest')
|
|
153
|
-
* ```
|
|
154
|
-
*/
|
|
155
|
-
findKeyByName(name: string): Promise<KeyInfo>
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Rotate keychain password and re-encrypt all associated keys
|
|
159
|
-
*
|
|
160
|
-
* @example
|
|
161
|
-
*
|
|
162
|
-
* ```js
|
|
163
|
-
* await libp2p.keychain.rotateKeychainPass('oldPassword', 'newPassword')
|
|
164
|
-
* ```
|
|
165
|
-
*/
|
|
166
|
-
rotateKeychainPass(oldPass: string, newPass: string): Promise<void>
|
|
167
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import type { Metric, Metrics } from './index.js'
|
|
2
|
-
|
|
3
|
-
export interface TrackedMapInit {
|
|
4
|
-
name: string
|
|
5
|
-
metrics: Metrics
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
class TrackedMap<K, V> extends Map<K, V> {
|
|
9
|
-
private readonly metric: Metric
|
|
10
|
-
|
|
11
|
-
constructor (init: TrackedMapInit) {
|
|
12
|
-
super()
|
|
13
|
-
|
|
14
|
-
const { name, metrics } = init
|
|
15
|
-
|
|
16
|
-
this.metric = metrics.registerMetric(name)
|
|
17
|
-
this.updateComponentMetric()
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
set (key: K, value: V): this {
|
|
21
|
-
super.set(key, value)
|
|
22
|
-
this.updateComponentMetric()
|
|
23
|
-
return this
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
delete (key: K): boolean {
|
|
27
|
-
const deleted = super.delete(key)
|
|
28
|
-
this.updateComponentMetric()
|
|
29
|
-
return deleted
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
clear (): void {
|
|
33
|
-
super.clear()
|
|
34
|
-
this.updateComponentMetric()
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
private updateComponentMetric (): void {
|
|
38
|
-
this.metric.update(this.size)
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface CreateTrackedMapInit {
|
|
43
|
-
/**
|
|
44
|
-
* The metric name to use
|
|
45
|
-
*/
|
|
46
|
-
name: string
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* A metrics implementation
|
|
50
|
-
*/
|
|
51
|
-
metrics?: Metrics
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function trackedMap <K, V> (config: CreateTrackedMapInit): Map<K, V> {
|
|
55
|
-
const { name, metrics } = config
|
|
56
|
-
let map: Map<K, V>
|
|
57
|
-
|
|
58
|
-
if (metrics != null) {
|
|
59
|
-
map = new TrackedMap<K, V>({ name, metrics })
|
|
60
|
-
} else {
|
|
61
|
-
map = new Map<K, V>()
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return map
|
|
65
|
-
}
|