helia 6.1.4 → 7.0.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 (92) hide show
  1. package/dist/index.min.js +65 -55
  2. package/dist/index.min.js.map +4 -4
  3. package/dist/src/block-storage.d.ts +62 -0
  4. package/dist/src/block-storage.d.ts.map +1 -0
  5. package/dist/src/block-storage.js +159 -0
  6. package/dist/src/block-storage.js.map +1 -0
  7. package/dist/src/datastore-version.d.ts +3 -0
  8. package/dist/src/datastore-version.d.ts.map +1 -0
  9. package/dist/src/datastore-version.js +20 -0
  10. package/dist/src/datastore-version.js.map +1 -0
  11. package/dist/src/get-codec.d.ts +4 -0
  12. package/dist/src/get-codec.d.ts.map +1 -0
  13. package/dist/src/get-codec.js +31 -0
  14. package/dist/src/get-codec.js.map +1 -0
  15. package/dist/src/get-crypto.d.ts +4 -0
  16. package/dist/src/get-crypto.d.ts.map +1 -0
  17. package/dist/src/get-crypto.js +35 -0
  18. package/dist/src/get-crypto.js.map +1 -0
  19. package/dist/src/get-hasher.d.ts +4 -0
  20. package/dist/src/get-hasher.d.ts.map +1 -0
  21. package/dist/src/get-hasher.js +31 -0
  22. package/dist/src/get-hasher.js.map +1 -0
  23. package/dist/src/helia.d.ts +165 -0
  24. package/dist/src/helia.d.ts.map +1 -0
  25. package/dist/src/helia.js +165 -0
  26. package/dist/src/helia.js.map +1 -0
  27. package/dist/src/index.d.ts +30 -19
  28. package/dist/src/index.d.ts.map +1 -1
  29. package/dist/src/index.js +78 -12
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/networked-storage.d.ts +28 -0
  32. package/dist/src/networked-storage.d.ts.map +1 -0
  33. package/dist/src/networked-storage.js +52 -0
  34. package/dist/src/networked-storage.js.map +1 -0
  35. package/dist/src/pins.d.ts +21 -0
  36. package/dist/src/pins.d.ts.map +1 -0
  37. package/dist/src/pins.js +140 -0
  38. package/dist/src/pins.js.map +1 -0
  39. package/dist/src/routing.d.ts +51 -0
  40. package/dist/src/routing.d.ts.map +1 -0
  41. package/dist/src/routing.js +311 -0
  42. package/dist/src/routing.js.map +1 -0
  43. package/dist/src/session-storage.d.ts +47 -0
  44. package/dist/src/session-storage.d.ts.map +1 -0
  45. package/dist/src/session-storage.js +148 -0
  46. package/dist/src/session-storage.js.map +1 -0
  47. package/dist/src/storage.d.ts +55 -0
  48. package/dist/src/storage.d.ts.map +1 -0
  49. package/dist/src/storage.js +225 -0
  50. package/dist/src/storage.js.map +1 -0
  51. package/dist/src/version.d.ts +1 -1
  52. package/dist/src/version.js +1 -1
  53. package/dist/typedoc-urls.json +3 -6
  54. package/package.json +38 -41
  55. package/src/block-storage.ts +194 -0
  56. package/src/datastore-version.ts +25 -0
  57. package/src/get-codec.ts +39 -0
  58. package/src/get-crypto.ts +44 -0
  59. package/src/get-hasher.ts +39 -0
  60. package/src/helia.ts +364 -0
  61. package/src/index.ts +58 -30
  62. package/src/networked-storage.ts +74 -0
  63. package/src/pins.ts +208 -0
  64. package/src/routing.ts +389 -0
  65. package/src/session-storage.ts +174 -0
  66. package/src/storage.ts +294 -0
  67. package/src/version.ts +1 -1
  68. package/dist/src/utils/bootstrappers.d.ts +0 -4
  69. package/dist/src/utils/bootstrappers.d.ts.map +0 -1
  70. package/dist/src/utils/bootstrappers.js +0 -13
  71. package/dist/src/utils/bootstrappers.js.map +0 -1
  72. package/dist/src/utils/helia-defaults.d.ts +0 -48
  73. package/dist/src/utils/helia-defaults.d.ts.map +0 -1
  74. package/dist/src/utils/helia-defaults.js +0 -85
  75. package/dist/src/utils/helia-defaults.js.map +0 -1
  76. package/dist/src/utils/libp2p-defaults.browser.d.ts +0 -19
  77. package/dist/src/utils/libp2p-defaults.browser.d.ts.map +0 -1
  78. package/dist/src/utils/libp2p-defaults.browser.js +0 -73
  79. package/dist/src/utils/libp2p-defaults.browser.js.map +0 -1
  80. package/dist/src/utils/libp2p-defaults.d.ts +0 -49
  81. package/dist/src/utils/libp2p-defaults.d.ts.map +0 -1
  82. package/dist/src/utils/libp2p-defaults.js +0 -113
  83. package/dist/src/utils/libp2p-defaults.js.map +0 -1
  84. package/dist/src/utils/libp2p.d.ts +0 -19
  85. package/dist/src/utils/libp2p.d.ts.map +0 -1
  86. package/dist/src/utils/libp2p.js +0 -19
  87. package/dist/src/utils/libp2p.js.map +0 -1
  88. package/src/utils/bootstrappers.ts +0 -12
  89. package/src/utils/helia-defaults.ts +0 -92
  90. package/src/utils/libp2p-defaults.browser.ts +0 -92
  91. package/src/utils/libp2p-defaults.ts +0 -137
  92. package/src/utils/libp2p.ts +0 -42
@@ -0,0 +1,51 @@
1
+ import type { Routing as RoutingInterface, Provider, RoutingOptions, RoutingFindProvidersProgressEvents, RoutingProvideProgressEvents, RoutingPutProgressEvents, RoutingGetProgressEvents, RoutingFindPeerProgressEvents, RoutingGetClosestPeersProgressEvents, RoutingCancelReprovideProgressEvents, Router, Peer } from '@helia/interface';
2
+ import type { ComponentLogger, Metrics, Startable } from '@libp2p/interface';
3
+ import type { CID } from 'multiformats/cid';
4
+ export interface RoutingInit {
5
+ routers: Router[];
6
+ providerLookupConcurrency?: number;
7
+ }
8
+ export interface RoutingComponents {
9
+ logger: ComponentLogger;
10
+ metrics?: Metrics;
11
+ }
12
+ export declare class Routing implements RoutingInterface, Startable {
13
+ name: string;
14
+ private readonly log;
15
+ private readonly routers;
16
+ private readonly providerLookupConcurrency;
17
+ constructor(components: RoutingComponents, init: RoutingInit);
18
+ start(): Promise<void>;
19
+ stop(): Promise<void>;
20
+ hasRouter(name: string): boolean;
21
+ addRouter(router: Router): void;
22
+ /**
23
+ * Iterates over all content routers in parallel to find providers of the
24
+ * given key
25
+ */
26
+ findProviders(key: CID, options?: RoutingOptions<RoutingFindProvidersProgressEvents>): AsyncIterable<Provider>;
27
+ /**
28
+ * Iterates over all content routers in parallel to notify it is
29
+ * a provider of the given key
30
+ */
31
+ provide(key: CID, options?: RoutingOptions<RoutingProvideProgressEvents>): Promise<void>;
32
+ cancelReprovide(key: CID, options?: RoutingOptions<RoutingCancelReprovideProgressEvents>): Promise<void>;
33
+ /**
34
+ * Store the given key/value pair in the available content routings
35
+ */
36
+ put(key: Uint8Array, value: Uint8Array, options?: RoutingOptions<RoutingPutProgressEvents>): Promise<void>;
37
+ /**
38
+ * Get the value to the given key. The first value offered by any configured
39
+ * router will be returned.
40
+ */
41
+ get(key: Uint8Array, options?: RoutingOptions<RoutingGetProgressEvents>): Promise<Uint8Array>;
42
+ /**
43
+ * Iterates over all peer routers in parallel to find the given peer
44
+ */
45
+ findPeer(id: CID, options?: RoutingOptions<RoutingFindPeerProgressEvents>): Promise<Peer>;
46
+ /**
47
+ * Attempt to find the closest peers on the network to the given key
48
+ */
49
+ getClosestPeers(key: Uint8Array, options?: RoutingOptions<RoutingGetClosestPeersProgressEvents>): AsyncIterable<Peer>;
50
+ }
51
+ //# sourceMappingURL=routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/routing.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,IAAI,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,oCAAoC,EAAE,oCAAoC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5U,OAAO,KAAK,EAAE,eAAe,EAAU,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEpF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAI3C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,yBAAyB,CAAC,EAAE,MAAM,CAAA;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAMD,qBAAa,OAAQ,YAAW,gBAAgB,EAAE,SAAS;IAClD,IAAI,EAAE,MAAM,CAAA;IAEnB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAQ;gBAErC,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW;IA6BvD,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAIvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAI5B,SAAS,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,SAAS,CAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhC;;;OAGG;IACK,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,cAAc,CAAC,kCAAkC,CAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAmH3H;;;OAGG;IACG,OAAO,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,cAAc,CAAC,4BAA4B,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB7F,eAAe,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,cAAc,CAAC,oCAAoC,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBnH;;OAEG;IACG,GAAG,CAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBjH;;;OAGG;IACG,GAAG,CAAE,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAqCpG;;OAEG;IACG,QAAQ,CAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,6BAA6B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsChG;;OAEG;IACK,eAAe,CAAE,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,cAAc,CAAC,oCAAoC,CAAM,GAAG,aAAa,CAAC,IAAI,CAAC;CA8BnI"}
@@ -0,0 +1,311 @@
1
+ import { NoRoutersAvailableError } from '@helia/interface';
2
+ import { GetFailedError } from '@helia/utils';
3
+ import { NotFoundError, start, stop } from '@libp2p/interface';
4
+ import { Queue } from '@libp2p/utils';
5
+ import merge from 'it-merge';
6
+ import { CustomProgressEvent } from 'progress-events';
7
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
8
+ const DEFAULT_PROVIDER_LOOKUP_CONCURRENCY = 5;
9
+ export class Routing {
10
+ name;
11
+ log;
12
+ routers;
13
+ providerLookupConcurrency;
14
+ constructor(components, init) {
15
+ this.name = 'helia';
16
+ this.log = components.logger.forComponent('helia:routing');
17
+ this.routers = init.routers ?? [];
18
+ this.providerLookupConcurrency = init.providerLookupConcurrency ?? DEFAULT_PROVIDER_LOOKUP_CONCURRENCY;
19
+ this.findProviders = components.metrics?.traceFunction('helia.routing.findProviders', this.findProviders.bind(this), {
20
+ optionsIndex: 1
21
+ }) ?? this.findProviders;
22
+ this.provide = components.metrics?.traceFunction('helia.routing.provide', this.provide.bind(this), {
23
+ optionsIndex: 1
24
+ }) ?? this.provide;
25
+ this.cancelReprovide = components.metrics?.traceFunction('helia.routing.cancelReprovide', this.cancelReprovide.bind(this), {
26
+ optionsIndex: 1
27
+ }) ?? this.cancelReprovide;
28
+ this.put = components.metrics?.traceFunction('helia.routing.put', this.put.bind(this), {
29
+ optionsIndex: 2
30
+ }) ?? this.put;
31
+ this.get = components.metrics?.traceFunction('helia.routing.get', this.get.bind(this), {
32
+ optionsIndex: 1
33
+ }) ?? this.get;
34
+ this.findPeer = components.metrics?.traceFunction('helia.routing.findPeer', this.findPeer.bind(this), {
35
+ optionsIndex: 1
36
+ }) ?? this.findPeer;
37
+ this.getClosestPeers = components.metrics?.traceFunction('helia.routing.getClosestPeers', this.getClosestPeers.bind(this), {
38
+ optionsIndex: 1
39
+ }) ?? this.getClosestPeers;
40
+ }
41
+ async start() {
42
+ await start(...this.routers);
43
+ }
44
+ async stop() {
45
+ await stop(...this.routers);
46
+ }
47
+ hasRouter(name) {
48
+ return this.routers.findIndex(r => r.name === name) !== -1;
49
+ }
50
+ addRouter(router) {
51
+ this.routers.push(router);
52
+ }
53
+ /**
54
+ * Iterates over all content routers in parallel to find providers of the
55
+ * given key
56
+ */
57
+ async *findProviders(key, options = {}) {
58
+ if (this.routers.length === 0) {
59
+ throw new NoRoutersAvailableError('No content routers available');
60
+ }
61
+ // provider multiaddrs are only cached for a limited time, so they can come
62
+ // back as an empty array - when this happens we have to do a FIND_PEER
63
+ // query to get updated addresses, but we shouldn't block on this so use a
64
+ // separate bounded queue to perform this lookup
65
+ const queue = new Queue({
66
+ concurrency: this.providerLookupConcurrency
67
+ });
68
+ let foundProviders = 0;
69
+ const errors = [];
70
+ const self = this;
71
+ let routersFinished = 0;
72
+ this.log('findProviders for %c start using routers %s', key, this.routers.map(r => r.toString()).join(', '));
73
+ const routers = supports(this.routers, 'findProviders')
74
+ .map(async function* (router) {
75
+ let foundProviders = 0;
76
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:find-providers:start', {
77
+ routing: router.name,
78
+ cid: key
79
+ }));
80
+ try {
81
+ for await (const prov of router.findProviders(key, options)) {
82
+ foundProviders++;
83
+ // @ts-expect-error router.name is a string, needs to be specific
84
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:find-providers:provider', {
85
+ routing: router.name,
86
+ cid: key,
87
+ provider: prov
88
+ }));
89
+ yield prov;
90
+ }
91
+ }
92
+ catch (err) {
93
+ errors.push(err);
94
+ }
95
+ finally {
96
+ self.log('router %s found %d providers for %c', router, foundProviders, key);
97
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:find-providers:end', {
98
+ routing: router.name,
99
+ cid: key,
100
+ found: foundProviders
101
+ }));
102
+ routersFinished++;
103
+ // if all routers have finished and there are no jobs to find updated
104
+ // peer multiaddres running or queued, cause the generator to exit
105
+ if (routersFinished === routers.length && queue.size === 0) {
106
+ queue.emitIdle();
107
+ }
108
+ }
109
+ });
110
+ for await (const peer of merge(queue.toGenerator(), ...routers)) {
111
+ // the peer was yielded by a content router without multiaddrs and we
112
+ // failed to load them
113
+ if (peer == null) {
114
+ continue;
115
+ }
116
+ // have to refresh peer info for this peer to get updated multiaddrs
117
+ if (peer.multiaddrs.length === 0) {
118
+ // already looking this peer up
119
+ if (queue.queue.find(job => job.options.peer.equals(peer.id)) != null) {
120
+ continue;
121
+ }
122
+ queue.add(async () => {
123
+ try {
124
+ const provider = await this.findPeer(peer.id, options);
125
+ if (provider.multiaddrs.length === 0) {
126
+ return null;
127
+ }
128
+ return {
129
+ ...provider,
130
+ protocols: peer.protocols,
131
+ routing: peer.routing
132
+ };
133
+ }
134
+ catch (err) {
135
+ this.log.error('could not load multiaddrs for peer %p - %e', peer.id, err);
136
+ return null;
137
+ }
138
+ }, {
139
+ peer: peer.id,
140
+ signal: options.signal
141
+ })
142
+ .catch(err => {
143
+ this.log.error('could not load multiaddrs for peer %p - %e', peer.id, err);
144
+ });
145
+ continue;
146
+ }
147
+ foundProviders++;
148
+ yield peer;
149
+ }
150
+ this.log('findProviders finished, found %d providers for %c', foundProviders, key);
151
+ }
152
+ /**
153
+ * Iterates over all content routers in parallel to notify it is
154
+ * a provider of the given key
155
+ */
156
+ async provide(key, options = {}) {
157
+ if (this.routers.length === 0) {
158
+ throw new NoRoutersAvailableError('No content routers available');
159
+ }
160
+ await Promise.all(supports(this.routers, 'provide')
161
+ .map(async (router) => {
162
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:provide:start', {
163
+ routing: router.name,
164
+ cid: key
165
+ }));
166
+ await router.provide(key, options);
167
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:provide:end', {
168
+ routing: router.name,
169
+ cid: key
170
+ }));
171
+ }));
172
+ }
173
+ async cancelReprovide(key, options = {}) {
174
+ await Promise.all(supports(this.routers, 'cancelReprovide')
175
+ .map(async (router) => {
176
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:cancel-reprovide:start', {
177
+ routing: router.name,
178
+ cid: key
179
+ }));
180
+ await router.cancelReprovide(key, options);
181
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:cancel-reprovide:end', {
182
+ routing: router.name,
183
+ cid: key
184
+ }));
185
+ }));
186
+ }
187
+ /**
188
+ * Store the given key/value pair in the available content routings
189
+ */
190
+ async put(key, value, options) {
191
+ await Promise.all(supports(this.routers, 'put')
192
+ .map(async (router) => {
193
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:put:start', {
194
+ routing: router.name,
195
+ key,
196
+ value
197
+ }));
198
+ await router.put(key, value, options);
199
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:put:end', {
200
+ routing: router.name,
201
+ key,
202
+ value
203
+ }));
204
+ }));
205
+ }
206
+ /**
207
+ * Get the value to the given key. The first value offered by any configured
208
+ * router will be returned.
209
+ */
210
+ async get(key, options) {
211
+ const errors = [];
212
+ let result;
213
+ try {
214
+ result = await Promise.any(supports(this.routers, 'get')
215
+ .map(async (router) => {
216
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:get:start', {
217
+ routing: router.name,
218
+ key
219
+ }));
220
+ try {
221
+ return await router.get(key, options);
222
+ }
223
+ catch (err) {
224
+ this.log('router %s failed with %e', router, err);
225
+ errors.push(err);
226
+ }
227
+ finally {
228
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:get:end', {
229
+ routing: router.name,
230
+ key
231
+ }));
232
+ }
233
+ }));
234
+ }
235
+ catch {
236
+ // ignore AggregateError as we will throw a better-named one
237
+ }
238
+ if (result == null) {
239
+ throw new GetFailedError(errors, `Failed to get value key ${uint8ArrayToString(key, 'base58btc')}`);
240
+ }
241
+ return result;
242
+ }
243
+ /**
244
+ * Iterates over all peer routers in parallel to find the given peer
245
+ */
246
+ async findPeer(id, options) {
247
+ if (this.routers.length === 0) {
248
+ throw new NoRoutersAvailableError('No peer routers available');
249
+ }
250
+ const self = this;
251
+ const source = merge(...supports(this.routers, 'findPeer')
252
+ .map(router => (async function* () {
253
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:find-peer:start', {
254
+ routing: router.name,
255
+ peerId: id
256
+ }));
257
+ try {
258
+ yield await router.findPeer(id, options);
259
+ }
260
+ catch (err) {
261
+ self.log.error(err);
262
+ }
263
+ finally {
264
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:find-peer:end', {
265
+ routing: router.name,
266
+ peerId: id
267
+ }));
268
+ }
269
+ })()));
270
+ for await (const peer of source) {
271
+ if (peer == null) {
272
+ continue;
273
+ }
274
+ return peer;
275
+ }
276
+ throw new NotFoundError('Could not find peer in routing');
277
+ }
278
+ /**
279
+ * Attempt to find the closest peers on the network to the given key
280
+ */
281
+ async *getClosestPeers(key, options = {}) {
282
+ if (this.routers.length === 0) {
283
+ throw new NoRoutersAvailableError('No peer routers available');
284
+ }
285
+ for await (const peer of merge(...supports(this.routers, 'getClosestPeers')
286
+ .map(async function* (router) {
287
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:get-closest-peers:start', {
288
+ routing: router.name,
289
+ key
290
+ }));
291
+ try {
292
+ yield* router.getClosestPeers(key, options);
293
+ }
294
+ finally {
295
+ options?.onProgress?.(new CustomProgressEvent('helia:routing:get-closest-peers:end', {
296
+ routing: router.name,
297
+ key
298
+ }));
299
+ }
300
+ }))) {
301
+ if (peer == null) {
302
+ continue;
303
+ }
304
+ yield peer;
305
+ }
306
+ }
307
+ }
308
+ function supports(routers, key) {
309
+ return routers.filter(router => router[key] != null);
310
+ }
311
+ //# sourceMappingURL=routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/routing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { Storage } from './storage.ts';
2
+ import type { StorageComponents } from './storage.ts';
3
+ import type { Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, SessionBlockstore, SessionBlockBroker } from '@helia/interface';
4
+ import type { AbortOptions } from '@libp2p/interface';
5
+ import type { Multiaddr } from '@multiformats/multiaddr';
6
+ import type { InputPair } from 'interface-blockstore';
7
+ import type { CID } from 'multiformats/cid';
8
+ import type { ProgressOptions } from 'progress-events';
9
+ export interface SessionStorageInit {
10
+ root: CID;
11
+ }
12
+ /**
13
+ * Storage subclass that can cancel any ongoing operation at any point.
14
+ */
15
+ export declare class SessionStorage extends Storage<SessionBlockBroker> implements SessionBlockstore {
16
+ private readonly closeController;
17
+ constructor(components: StorageComponents<SessionBlockBroker>, init: SessionStorageInit);
18
+ close(): void;
19
+ addPeer(peer: CID | Multiaddr | Multiaddr[], options?: AbortOptions): Promise<void>;
20
+ /**
21
+ * Put a block to the underlying datastore
22
+ */
23
+ put(cid: CID, block: Uint8Array, options?: AbortOptions & ProgressOptions<PutBlockProgressEvents>): Promise<CID>;
24
+ /**
25
+ * Put a multiple blocks to the underlying datastore
26
+ */
27
+ putMany(blocks: Iterable<InputPair> | AsyncIterable<InputPair>, options?: AbortOptions & ProgressOptions<PutManyBlocksProgressEvents>): AsyncGenerator<CID>;
28
+ /**
29
+ * Get a block by cid
30
+ */
31
+ get(cid: CID, options?: GetOfflineOptions & AbortOptions & ProgressOptions<GetBlockProgressEvents>): AsyncGenerator<Uint8Array>;
32
+ /**
33
+ * Get multiple blocks back from an (async) iterable of cids
34
+ */
35
+ getMany(cids: Iterable<CID> | AsyncIterable<CID>, options?: GetOfflineOptions & AbortOptions & ProgressOptions<GetManyBlocksProgressEvents>): AsyncGenerator<Pair>;
36
+ /**
37
+ * Delete a block from the blockstore
38
+ */
39
+ delete(cid: CID, options?: AbortOptions & ProgressOptions<DeleteBlockProgressEvents>): Promise<void>;
40
+ /**
41
+ * Delete multiple blocks from the blockstore
42
+ */
43
+ deleteMany(cids: Iterable<CID> | AsyncIterable<CID>, options?: AbortOptions & ProgressOptions<DeleteManyBlocksProgressEvents>): AsyncGenerator<CID>;
44
+ has(cid: CID, options?: AbortOptions): Promise<boolean>;
45
+ getAll(options?: AbortOptions & ProgressOptions<GetAllBlocksProgressEvents>): AsyncGenerator<Pair>;
46
+ }
47
+ //# sourceMappingURL=session-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../src/session-storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACvS,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,GAAG,CAAA;CACV;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,OAAO,CAAC,kBAAkB,CAAE,YAAW,iBAAiB;IAC1F,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;gBAEpC,UAAU,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,kBAAkB;IAYxF,KAAK,IAAK,IAAI;IAIR,OAAO,CAAE,IAAI,EAAE,GAAG,GAAG,SAAS,GAAG,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1F;;OAEG;IACG,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,sBAAsB,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAc3H;;OAEG;IACK,OAAO,CAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,2BAA2B,CAAM,GAAG,cAAc,CAAC,GAAG,CAAC;IAcxK;;OAEG;IACK,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,iBAAiB,GAAG,YAAY,GAAG,eAAe,CAAC,sBAAsB,CAAM,GAAG,cAAc,CAAC,UAAU,CAAC;IAc5I;;OAEG;IACK,OAAO,CAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,GAAE,iBAAiB,GAAG,YAAY,GAAG,eAAe,CAAC,2BAA2B,CAAM,GAAG,cAAc,CAAC,IAAI,CAAC;IAc/K;;OAEG;IACG,MAAM,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,yBAAyB,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/G;;OAEG;IACK,UAAU,CAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,8BAA8B,CAAM,GAAG,cAAc,CAAC,GAAG,CAAC;IAc1J,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1D,MAAM,CAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,0BAA0B,CAAM,GAAG,cAAc,CAAC,IAAI,CAAC;CAahH"}
@@ -0,0 +1,148 @@
1
+ import { setMaxListeners } from '@libp2p/interface';
2
+ import { anySignal } from 'any-signal';
3
+ import { Storage } from "./storage.js";
4
+ /**
5
+ * Storage subclass that can cancel any ongoing operation at any point.
6
+ */
7
+ export class SessionStorage extends Storage {
8
+ closeController;
9
+ constructor(components, init) {
10
+ super(components);
11
+ // because brokers are allowed to continue searching for providers after the
12
+ // session has been created, we need a way to tell them that the user has
13
+ // finished using the session any in-flight requests should be cancelled
14
+ this.closeController = new AbortController();
15
+ setMaxListeners(Infinity, this.closeController.signal);
16
+ this.log = components.logger.forComponent(`helia:session-storage:${init.root}`);
17
+ }
18
+ close() {
19
+ this.closeController.abort();
20
+ }
21
+ async addPeer(peer, options) {
22
+ await Promise.all(this.blockBrokers
23
+ .map(broker => broker.addPeer(peer, options)));
24
+ }
25
+ /**
26
+ * Put a block to the underlying datastore
27
+ */
28
+ async put(cid, block, options = {}) {
29
+ const signal = anySignal([this.closeController.signal, options.signal]);
30
+ setMaxListeners(Infinity, signal);
31
+ try {
32
+ return await super.put(cid, block, {
33
+ ...options,
34
+ signal
35
+ });
36
+ }
37
+ finally {
38
+ signal.clear();
39
+ }
40
+ }
41
+ /**
42
+ * Put a multiple blocks to the underlying datastore
43
+ */
44
+ async *putMany(blocks, options = {}) {
45
+ const signal = anySignal([this.closeController.signal, options.signal]);
46
+ setMaxListeners(Infinity, signal);
47
+ try {
48
+ yield* super.putMany(blocks, {
49
+ ...options,
50
+ signal
51
+ });
52
+ }
53
+ finally {
54
+ signal.clear();
55
+ }
56
+ }
57
+ /**
58
+ * Get a block by cid
59
+ */
60
+ async *get(cid, options = {}) {
61
+ const signal = anySignal([this.closeController.signal, options.signal]);
62
+ setMaxListeners(Infinity, signal);
63
+ try {
64
+ yield* super.get(cid, {
65
+ ...options,
66
+ signal
67
+ });
68
+ }
69
+ finally {
70
+ signal.clear();
71
+ }
72
+ }
73
+ /**
74
+ * Get multiple blocks back from an (async) iterable of cids
75
+ */
76
+ async *getMany(cids, options = {}) {
77
+ const signal = anySignal([this.closeController.signal, options.signal]);
78
+ setMaxListeners(Infinity, signal);
79
+ try {
80
+ yield* super.getMany(cids, {
81
+ ...options,
82
+ signal
83
+ });
84
+ }
85
+ finally {
86
+ signal.clear();
87
+ }
88
+ }
89
+ /**
90
+ * Delete a block from the blockstore
91
+ */
92
+ async delete(cid, options = {}) {
93
+ const signal = anySignal([this.closeController.signal, options.signal]);
94
+ setMaxListeners(Infinity, signal);
95
+ try {
96
+ await super.delete(cid, {
97
+ ...options,
98
+ signal
99
+ });
100
+ }
101
+ finally {
102
+ signal.clear();
103
+ }
104
+ }
105
+ /**
106
+ * Delete multiple blocks from the blockstore
107
+ */
108
+ async *deleteMany(cids, options = {}) {
109
+ const signal = anySignal([this.closeController.signal, options.signal]);
110
+ setMaxListeners(Infinity, signal);
111
+ try {
112
+ yield* super.deleteMany(cids, {
113
+ ...options,
114
+ signal
115
+ });
116
+ }
117
+ finally {
118
+ signal.clear();
119
+ }
120
+ }
121
+ async has(cid, options = {}) {
122
+ const signal = anySignal([this.closeController.signal, options.signal]);
123
+ setMaxListeners(Infinity, signal);
124
+ try {
125
+ return await super.has(cid, {
126
+ ...options,
127
+ signal
128
+ });
129
+ }
130
+ finally {
131
+ signal.clear();
132
+ }
133
+ }
134
+ async *getAll(options = {}) {
135
+ const signal = anySignal([this.closeController.signal, options.signal]);
136
+ setMaxListeners(Infinity, signal);
137
+ try {
138
+ yield* super.getAll({
139
+ ...options,
140
+ signal
141
+ });
142
+ }
143
+ finally {
144
+ signal.clear();
145
+ }
146
+ }
147
+ }
148
+ //# sourceMappingURL=session-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../src/session-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { HasherLoader } from '@helia/interface';
2
+ import type { BlockBroker, Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, BlockRetrievalOptions } from '@helia/interface';
3
+ import type { AbortOptions, ComponentLogger, Logger } from '@libp2p/interface';
4
+ import type { Blockstore, InputPair } from 'interface-blockstore';
5
+ import type { CID } from 'multiformats/cid';
6
+ import type { MultihashHasher } from 'multiformats/hashes/interface';
7
+ import type { ProgressEvent, ProgressOptions } from 'progress-events';
8
+ export interface StorageComponents<Broker extends BlockBroker<ProgressEvent<any, any>, ProgressEvent<any, any>>> {
9
+ blockstore: Blockstore;
10
+ logger: ComponentLogger;
11
+ blockBrokers: Broker[];
12
+ getHasher: HasherLoader;
13
+ }
14
+ export interface StorageInit {
15
+ maxIdentityHashDigestLength?: number;
16
+ }
17
+ export declare class Storage<Broker extends BlockBroker<ProgressEvent<any, any>, ProgressEvent<any, any>>> implements Blockstore {
18
+ protected readonly child: Blockstore;
19
+ protected readonly getHasher: HasherLoader;
20
+ protected log: Logger;
21
+ protected readonly logger: ComponentLogger;
22
+ protected readonly blockBrokers: Broker[];
23
+ /**
24
+ * Create a new BlockStorage
25
+ */
26
+ constructor(components: StorageComponents<Broker>, init?: StorageInit);
27
+ /**
28
+ * Put a block to the underlying datastore
29
+ */
30
+ put(cid: CID, block: Uint8Array, options?: AbortOptions & ProgressOptions<PutBlockProgressEvents>): Promise<CID>;
31
+ /**
32
+ * Put a multiple blocks to the underlying datastore
33
+ */
34
+ putMany(blocks: Iterable<InputPair> | AsyncIterable<InputPair>, options?: AbortOptions & ProgressOptions<PutManyBlocksProgressEvents>): AsyncGenerator<CID>;
35
+ /**
36
+ * Get a block by cid
37
+ */
38
+ get(cid: CID, options?: GetOfflineOptions & AbortOptions & ProgressOptions<GetBlockProgressEvents>): AsyncGenerator<Uint8Array>;
39
+ /**
40
+ * Get multiple blocks back from an (async) iterable of cids
41
+ */
42
+ getMany(cids: Iterable<CID> | AsyncIterable<CID>, options?: GetOfflineOptions & AbortOptions & ProgressOptions<GetManyBlocksProgressEvents>): AsyncGenerator<Pair>;
43
+ /**
44
+ * Delete a block from the blockstore
45
+ */
46
+ delete(cid: CID, options?: AbortOptions & ProgressOptions<DeleteBlockProgressEvents>): Promise<void>;
47
+ /**
48
+ * Delete multiple blocks from the blockstore
49
+ */
50
+ deleteMany(cids: Iterable<CID> | AsyncIterable<CID>, options?: AbortOptions & ProgressOptions<DeleteManyBlocksProgressEvents>): AsyncGenerator<CID>;
51
+ has(cid: CID, options?: AbortOptions): Promise<boolean>;
52
+ getAll(options?: AbortOptions & ProgressOptions<GetAllBlocksProgressEvents>): AsyncGenerator<Pair>;
53
+ }
54
+ export declare const getCidBlockVerifierFunction: (cid: CID, hasher: MultihashHasher) => Required<BlockRetrievalOptions>["validateFn"];
55
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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"}