@helia/utils 2.4.0 → 2.4.1-264e68d1

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.
@@ -25,6 +25,7 @@ export declare abstract class AbstractSession<Provider, RetrieveBlockProgressEve
25
25
  readonly providers: Provider[];
26
26
  private readonly evictionFilter;
27
27
  private readonly initialProviders;
28
+ private readonly cidPeerFilterSize;
28
29
  constructor(components: AbstractSessionComponents, init: AbstractCreateSessionOptions);
29
30
  retrieve(cid: CID, options?: BlockRetrievalOptions<RetrieveBlockProgressEvents>): Promise<Uint8Array>;
30
31
  evict(provider: Provider): void;
@@ -37,7 +38,7 @@ export declare abstract class AbstractSession<Provider, RetrieveBlockProgressEve
37
38
  * into the format required or return `undefined` if the provider is not
38
39
  * compatible with this session implementation
39
40
  */
40
- abstract convertToProvider(provider: PeerId | Multiaddr | Multiaddr[], options?: AbortOptions): Promise<Provider | undefined>;
41
+ abstract convertToProvider(provider: PeerId | Multiaddr | Multiaddr[], routing: string, options?: AbortOptions): Promise<Provider | undefined>;
41
42
  /**
42
43
  * This method should search for new providers and yield them.
43
44
  */
@@ -52,12 +53,16 @@ export declare abstract class AbstractSession<Provider, RetrieveBlockProgressEve
52
53
  abstract queryProvider(cid: CID, provider: Provider, options: AbortOptions): Promise<Uint8Array>;
53
54
  /**
54
55
  * Turn a provider into a concise Uint8Array representation for use in a Bloom
55
- * filter
56
+ * or Cuckoo filter
56
57
  */
57
- abstract toEvictionKey(provider: Provider): Uint8Array | string;
58
+ abstract toFilterKey(provider: Provider): Uint8Array | string;
58
59
  /**
59
60
  * Return `true` if we consider one provider to be the same as another
60
61
  */
61
62
  abstract equals(providerA: Provider, providerB: Provider): boolean;
63
+ /**
64
+ * Invoke the progress handler with the session-specific found provider event
65
+ */
66
+ abstract emitFoundProviderProgressEvent(cid: CID, provider: Provider, options: BlockRetrievalOptions<RetrieveBlockProgressEvents>): void;
62
67
  }
63
68
  //# sourceMappingURL=abstract-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-session.d.ts","sourceRoot":"","sources":["../../src/abstract-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,iBAAiB,EAAmB,MAAM,mBAAmB,CAAA;AAKlF,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAEtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,uBAAuB,CAAC,QAAQ;IAC/C,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;CAChC;AAOD,8BAAsB,eAAe,CAAC,QAAQ,EAAE,2BAA2B,SAAS,aAAa,CAAE,SAAQ,iBAAiB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAE,YAAW,WAAW,CAAC,2BAA2B,CAAC;IACjN,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,yBAAyB,CAAC,CAAe;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,MAAM,EAAE,eAAe,CAAA;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,SAAgB,SAAS,EAAE,QAAQ,EAAE,CAAA;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyC;gBAE7D,UAAU,EAAE,yBAAyB,EAAE,IAAI,EAAE,4BAA4B;IAehF,QAAQ,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,qBAAqB,CAAC,2BAA2B,CAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAoKhH,KAAK,CAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAWhC,SAAS,CAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAIvC,WAAW,CAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAcnC,OAAO,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAe/E,aAAa;IAwG3B;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAE9H;;OAEG;IACH,QAAQ,CAAC,gBAAgB,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC;IAErF;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAEjG;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAE,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM;IAEhE;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO;CACpE"}
1
+ {"version":3,"file":"abstract-session.d.ts","sourceRoot":"","sources":["../../src/abstract-session.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { DEFAULT_SESSION_MIN_PROVIDERS, DEFAULT_SESSION_MAX_PROVIDERS, InsufficientProvidersError } from '@helia/interface';
1
+ import { DEFAULT_SESSION_MIN_PROVIDERS, DEFAULT_SESSION_MAX_PROVIDERS, DEFAULT_CID_PEER_FILTER_SIZE, InsufficientProvidersError } from '@helia/interface';
2
2
  import { AbortError, TypedEventEmitter, setMaxListeners } from '@libp2p/interface';
3
3
  import { createScalableCuckooFilter, Queue } from '@libp2p/utils';
4
4
  import { base64 } from 'multiformats/bases/base64';
@@ -15,6 +15,7 @@ export class AbstractSession extends TypedEventEmitter {
15
15
  providers;
16
16
  evictionFilter;
17
17
  initialProviders;
18
+ cidPeerFilterSize;
18
19
  constructor(components, init) {
19
20
  super();
20
21
  setMaxListeners(Infinity, this);
@@ -24,9 +25,10 @@ export class AbstractSession extends TypedEventEmitter {
24
25
  this.requests = new Map();
25
26
  this.minProviders = init.minProviders ?? DEFAULT_SESSION_MIN_PROVIDERS;
26
27
  this.maxProviders = init.maxProviders ?? DEFAULT_SESSION_MAX_PROVIDERS;
28
+ this.cidPeerFilterSize = init.cidPeerFilterSize ?? DEFAULT_CID_PEER_FILTER_SIZE;
27
29
  this.providers = [];
28
30
  this.evictionFilter = createScalableCuckooFilter(this.maxProviders);
29
- this.initialProviders = init.providers ?? [];
31
+ this.initialProviders = [...(init.providers ?? [])];
30
32
  }
31
33
  async retrieve(cid, options = {}) {
32
34
  // see if we are already requesting this CID in this session
@@ -40,35 +42,16 @@ export class AbstractSession extends TypedEventEmitter {
40
42
  const deferred = pDefer();
41
43
  const request = {
42
44
  promise: deferred.promise,
43
- observers: 1
45
+ observers: 1,
46
+ queryFilter: createScalableCuckooFilter(this.cidPeerFilterSize)
44
47
  };
45
48
  this.requests.set(cidStr, request);
46
- if (this.providers.length === 0) {
47
- let first = false;
48
- if (this.initialPeerSearchComplete == null) {
49
- first = true;
50
- this.log = this.logger.forComponent(`${this.logName}:${cid}`);
51
- this.initialPeerSearchComplete = this.findProviders(cid, this.minProviders, options);
52
- }
53
- try {
54
- await raceSignal(this.initialPeerSearchComplete, options.signal);
55
- if (first) {
56
- this.log('found initial session peers for %c', cid);
57
- }
58
- }
59
- catch (err) {
60
- if (first) {
61
- this.log('failed to find initial session peers for %c - %e', cid, err);
62
- }
63
- this.requests.delete(cidStr);
64
- if (request.observers > 1) {
65
- // only need to reject request if another context is now also waiting
66
- // for the result - otherwise we can end up with an unhandled promise
67
- // rejection
68
- deferred.reject(err);
69
- }
70
- throw err;
71
- }
49
+ // if this is the first time this session has been used
50
+ let first = false;
51
+ if (this.initialPeerSearchComplete == null) {
52
+ first = true;
53
+ this.log = this.logger.forComponent(`${this.logName}:${cid}`);
54
+ this.initialPeerSearchComplete = this.findProviders(cid, this.minProviders, options);
72
55
  }
73
56
  let foundBlock = false;
74
57
  // this queue manages outgoing requests - as new peers are added to the
@@ -121,6 +104,13 @@ export class AbstractSession extends TypedEventEmitter {
121
104
  });
122
105
  });
123
106
  const peerAddedToSessionListener = (event) => {
107
+ const filterKey = this.toFilterKey(event.detail);
108
+ if (request.queryFilter.has(filterKey)) {
109
+ return;
110
+ }
111
+ request.queryFilter.add(filterKey);
112
+ // dispatch progress notification
113
+ this.emitFoundProviderProgressEvent(cid, event.detail, options);
124
114
  queue.add(async () => {
125
115
  return this.queryProvider(cid, event.detail, options);
126
116
  }, {
@@ -137,11 +127,39 @@ export class AbstractSession extends TypedEventEmitter {
137
127
  };
138
128
  // add new session peers to query as they are discovered
139
129
  this.addEventListener('provider', peerAddedToSessionListener);
130
+ if (first) {
131
+ try {
132
+ await raceSignal(this.initialPeerSearchComplete, options.signal);
133
+ if (first) {
134
+ this.log('found initial session peers for %c', cid);
135
+ }
136
+ }
137
+ catch (err) {
138
+ if (first) {
139
+ this.log('failed to find initial session peers for %c - %e', cid, err);
140
+ }
141
+ this.requests.delete(cidStr);
142
+ if (request.observers > 1) {
143
+ // only need to reject request if another context is now also waiting
144
+ // for the result - otherwise we can end up with an unhandled promise
145
+ // rejection
146
+ deferred.reject(err);
147
+ }
148
+ throw err;
149
+ }
150
+ }
140
151
  // query each session peer directly
141
- Promise.all([...this.providers].map(async (provider) => {
142
- return queue.add(async () => {
143
- return this.queryProvider(cid, provider, options);
144
- }, {
152
+ Promise.all([...this.providers]
153
+ .filter(provider => {
154
+ const filterKey = this.toFilterKey(provider);
155
+ const has = request.queryFilter.has(filterKey);
156
+ if (!has) {
157
+ request.queryFilter.add(this.toFilterKey(provider));
158
+ }
159
+ return !has;
160
+ })
161
+ .map(async (provider) => {
162
+ return queue.add(async () => this.queryProvider(cid, provider, options), {
145
163
  provider
146
164
  });
147
165
  }))
@@ -169,7 +187,7 @@ export class AbstractSession extends TypedEventEmitter {
169
187
  }
170
188
  }
171
189
  evict(provider) {
172
- this.evictionFilter.add(this.toEvictionKey(provider));
190
+ this.evictionFilter.add(this.toFilterKey(provider));
173
191
  const index = this.providers.findIndex(prov => this.equals(prov, provider));
174
192
  if (index === -1) {
175
193
  return;
@@ -177,7 +195,7 @@ export class AbstractSession extends TypedEventEmitter {
177
195
  this.providers.splice(index, 1);
178
196
  }
179
197
  isEvicted(provider) {
180
- return this.evictionFilter.has(this.toEvictionKey(provider));
198
+ return this.evictionFilter.has(this.toFilterKey(provider));
181
199
  }
182
200
  hasProvider(provider) {
183
201
  // dedupe existing gateways
@@ -191,7 +209,7 @@ export class AbstractSession extends TypedEventEmitter {
191
209
  return false;
192
210
  }
193
211
  async addPeer(peer, options) {
194
- const provider = await this.convertToProvider(peer, options);
212
+ const provider = await this.convertToProvider(peer, 'manually-added', options);
195
213
  if (provider == null || this.hasProvider(provider)) {
196
214
  return;
197
215
  }
@@ -208,7 +226,7 @@ export class AbstractSession extends TypedEventEmitter {
208
226
  // found but continue util this.providers reaches this.maxProviders
209
227
  void Promise.resolve()
210
228
  .then(async () => {
211
- this.log('finding %d-%d new provider(s) for %c', count, this.maxProviders, cid);
229
+ this.log('finding %d-%d new provider(s) for %c - %d initial providers', count, this.maxProviders, cid, this.initialProviders.length);
212
230
  // process any specific providers for this session
213
231
  if (this.initialProviders.length > 0) {
214
232
  while (found < count && this.initialProviders.length > 0) {
@@ -216,7 +234,7 @@ export class AbstractSession extends TypedEventEmitter {
216
234
  if (prov == null) {
217
235
  break;
218
236
  }
219
- const provider = await this.convertToProvider(prov, options);
237
+ const provider = await this.convertToProvider(prov, 'manual', options);
220
238
  if (options.signal?.aborted === true) {
221
239
  break;
222
240
  }
@@ -234,7 +252,7 @@ export class AbstractSession extends TypedEventEmitter {
234
252
  });
235
253
  found++;
236
254
  if (found === count) {
237
- this.log('session is ready');
255
+ this.log('session is ready with %d peer(s), only initial peers present', count);
238
256
  deferred.resolve();
239
257
  // continue finding peers until we reach this.maxProviders
240
258
  }
@@ -261,7 +279,7 @@ export class AbstractSession extends TypedEventEmitter {
261
279
  });
262
280
  found++;
263
281
  if (found === count) {
264
- this.log('session is ready');
282
+ this.log('session is ready with %d peer(s), new peers present', count);
265
283
  deferred.resolve();
266
284
  // continue finding peers until we reach this.maxProviders
267
285
  }
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-session.js","sourceRoot":"","sources":["../../src/abstract-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abstract-session.js","sourceRoot":"","sources":["../../src/abstract-session.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/utils",
3
- "version": "2.4.0",
3
+ "version": "2.4.1-264e68d1",
4
4
  "description": "Shared code that implements the Helia API",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/helia/tree/main/packages/utils#readme",
@@ -47,7 +47,7 @@
47
47
  "test:electron-main": "aegir test -t electron-main"
48
48
  },
49
49
  "dependencies": {
50
- "@helia/interface": "^6.1.0",
50
+ "@helia/interface": "6.1.0-264e68d1",
51
51
  "@ipld/dag-cbor": "^9.2.5",
52
52
  "@ipld/dag-json": "^10.2.5",
53
53
  "@ipld/dag-pb": "^4.1.5",
@@ -1,4 +1,4 @@
1
- import { DEFAULT_SESSION_MIN_PROVIDERS, DEFAULT_SESSION_MAX_PROVIDERS, InsufficientProvidersError } from '@helia/interface'
1
+ import { DEFAULT_SESSION_MIN_PROVIDERS, DEFAULT_SESSION_MAX_PROVIDERS, DEFAULT_CID_PEER_FILTER_SIZE, InsufficientProvidersError } from '@helia/interface'
2
2
  import { AbortError, TypedEventEmitter, setMaxListeners } from '@libp2p/interface'
3
3
  import { createScalableCuckooFilter, Queue } from '@libp2p/utils'
4
4
  import { base64 } from 'multiformats/bases/base64'
@@ -27,6 +27,7 @@ export interface BlockstoreSessionEvents<Provider> {
27
27
  interface Request {
28
28
  promise: Promise<Uint8Array>
29
29
  observers: number
30
+ queryFilter: Filter
30
31
  }
31
32
 
32
33
  export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents extends ProgressEvent> extends TypedEventEmitter<BlockstoreSessionEvents<Provider>> implements BlockBroker<RetrieveBlockProgressEvents> {
@@ -41,6 +42,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
41
42
  public readonly providers: Provider[]
42
43
  private readonly evictionFilter: Filter
43
44
  private readonly initialProviders: Array<PeerId | Multiaddr | Multiaddr[]>
45
+ private readonly cidPeerFilterSize: number
44
46
 
45
47
  constructor (components: AbstractSessionComponents, init: AbstractCreateSessionOptions) {
46
48
  super()
@@ -52,9 +54,10 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
52
54
  this.requests = new Map()
53
55
  this.minProviders = init.minProviders ?? DEFAULT_SESSION_MIN_PROVIDERS
54
56
  this.maxProviders = init.maxProviders ?? DEFAULT_SESSION_MAX_PROVIDERS
57
+ this.cidPeerFilterSize = init.cidPeerFilterSize ?? DEFAULT_CID_PEER_FILTER_SIZE
55
58
  this.providers = []
56
59
  this.evictionFilter = createScalableCuckooFilter(this.maxProviders)
57
- this.initialProviders = init.providers ?? []
60
+ this.initialProviders = [...(init.providers ?? [])]
58
61
  }
59
62
 
60
63
  async retrieve (cid: CID, options: BlockRetrievalOptions<RetrieveBlockProgressEvents> = {}): Promise<Uint8Array> {
@@ -71,41 +74,18 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
71
74
  const deferred: DeferredPromise<Uint8Array> = pDefer()
72
75
  const request = {
73
76
  promise: deferred.promise,
74
- observers: 1
77
+ observers: 1,
78
+ queryFilter: createScalableCuckooFilter(this.cidPeerFilterSize)
75
79
  }
76
80
  this.requests.set(cidStr, request)
77
81
 
78
- if (this.providers.length === 0) {
79
- let first = false
82
+ // if this is the first time this session has been used
83
+ let first = false
80
84
 
81
- if (this.initialPeerSearchComplete == null) {
82
- first = true
83
- this.log = this.logger.forComponent(`${this.logName}:${cid}`)
84
- this.initialPeerSearchComplete = this.findProviders(cid, this.minProviders, options)
85
- }
86
-
87
- try {
88
- await raceSignal(this.initialPeerSearchComplete, options.signal)
89
-
90
- if (first) {
91
- this.log('found initial session peers for %c', cid)
92
- }
93
- } catch (err) {
94
- if (first) {
95
- this.log('failed to find initial session peers for %c - %e', cid, err)
96
- }
97
-
98
- this.requests.delete(cidStr)
99
-
100
- if (request.observers > 1) {
101
- // only need to reject request if another context is now also waiting
102
- // for the result - otherwise we can end up with an unhandled promise
103
- // rejection
104
- deferred.reject(err)
105
- }
106
-
107
- throw err
108
- }
85
+ if (this.initialPeerSearchComplete == null) {
86
+ first = true
87
+ this.log = this.logger.forComponent(`${this.logName}:${cid}`)
88
+ this.initialPeerSearchComplete = this.findProviders(cid, this.minProviders, options)
109
89
  }
110
90
 
111
91
  let foundBlock = false
@@ -167,6 +147,17 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
167
147
  })
168
148
 
169
149
  const peerAddedToSessionListener = (event: CustomEvent<Provider>): void => {
150
+ const filterKey = this.toFilterKey(event.detail)
151
+
152
+ if (request.queryFilter.has(filterKey)) {
153
+ return
154
+ }
155
+
156
+ request.queryFilter.add(filterKey)
157
+
158
+ // dispatch progress notification
159
+ this.emitFoundProviderProgressEvent(cid, event.detail, options)
160
+
170
161
  queue.add(async () => {
171
162
  return this.queryProvider(cid, event.detail, options)
172
163
  }, {
@@ -186,14 +177,50 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
186
177
  // add new session peers to query as they are discovered
187
178
  this.addEventListener('provider', peerAddedToSessionListener)
188
179
 
180
+ if (first) {
181
+ try {
182
+ await raceSignal(this.initialPeerSearchComplete, options.signal)
183
+
184
+ if (first) {
185
+ this.log('found initial session peers for %c', cid)
186
+ }
187
+ } catch (err) {
188
+ if (first) {
189
+ this.log('failed to find initial session peers for %c - %e', cid, err)
190
+ }
191
+
192
+ this.requests.delete(cidStr)
193
+
194
+ if (request.observers > 1) {
195
+ // only need to reject request if another context is now also waiting
196
+ // for the result - otherwise we can end up with an unhandled promise
197
+ // rejection
198
+ deferred.reject(err)
199
+ }
200
+
201
+ throw err
202
+ }
203
+ }
204
+
189
205
  // query each session peer directly
190
- Promise.all([...this.providers].map(async (provider) => {
191
- return queue.add(async () => {
192
- return this.queryProvider(cid, provider, options)
193
- }, {
194
- provider
195
- })
196
- }))
206
+ Promise.all(
207
+ [...this.providers]
208
+ .filter(provider => {
209
+ const filterKey = this.toFilterKey(provider)
210
+ const has = request.queryFilter.has(filterKey)
211
+
212
+ if (!has) {
213
+ request.queryFilter.add(this.toFilterKey(provider))
214
+ }
215
+
216
+ return !has
217
+ })
218
+ .map(async (provider) => {
219
+ return queue.add(async () => this.queryProvider(cid, provider, options), {
220
+ provider
221
+ })
222
+ })
223
+ )
197
224
  .catch(err => {
198
225
  if (options.signal?.aborted === true) {
199
226
  // skip logging error if signal was aborted because abort can happen
@@ -222,7 +249,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
222
249
  }
223
250
 
224
251
  evict (provider: Provider): void {
225
- this.evictionFilter.add(this.toEvictionKey(provider))
252
+ this.evictionFilter.add(this.toFilterKey(provider))
226
253
  const index = this.providers.findIndex(prov => this.equals(prov, provider))
227
254
 
228
255
  if (index === -1) {
@@ -233,7 +260,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
233
260
  }
234
261
 
235
262
  isEvicted (provider: Provider): boolean {
236
- return this.evictionFilter.has(this.toEvictionKey(provider))
263
+ return this.evictionFilter.has(this.toFilterKey(provider))
237
264
  }
238
265
 
239
266
  hasProvider (provider: Provider): boolean {
@@ -251,7 +278,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
251
278
  }
252
279
 
253
280
  async addPeer (peer: PeerId | Multiaddr | Multiaddr[], options?: AbortOptions): Promise<void> {
254
- const provider = await this.convertToProvider(peer, options)
281
+ const provider = await this.convertToProvider(peer, 'manually-added', options)
255
282
 
256
283
  if (provider == null || this.hasProvider(provider)) {
257
284
  return
@@ -265,7 +292,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
265
292
  })
266
293
  }
267
294
 
268
- private async findProviders (cid: CID, count: number, options: AbortOptions): Promise<void> {
295
+ private async findProviders (cid: CID, count: number, options: BlockRetrievalOptions<RetrieveBlockProgressEvents>): Promise<void> {
269
296
  const deferred: DeferredPromise<void> = pDefer()
270
297
  let found = 0
271
298
 
@@ -273,7 +300,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
273
300
  // found but continue util this.providers reaches this.maxProviders
274
301
  void Promise.resolve()
275
302
  .then(async () => {
276
- this.log('finding %d-%d new provider(s) for %c', count, this.maxProviders, cid)
303
+ this.log('finding %d-%d new provider(s) for %c - %d initial providers', count, this.maxProviders, cid, this.initialProviders.length)
277
304
 
278
305
  // process any specific providers for this session
279
306
  if (this.initialProviders.length > 0) {
@@ -284,7 +311,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
284
311
  break
285
312
  }
286
313
 
287
- const provider = await this.convertToProvider(prov, options)
314
+ const provider = await this.convertToProvider(prov, 'manual', options)
288
315
 
289
316
  if (options.signal?.aborted === true) {
290
317
  break
@@ -309,7 +336,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
309
336
  found++
310
337
 
311
338
  if (found === count) {
312
- this.log('session is ready')
339
+ this.log('session is ready with %d peer(s), only initial peers present', count)
313
340
  deferred.resolve()
314
341
  // continue finding peers until we reach this.maxProviders
315
342
  }
@@ -343,7 +370,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
343
370
  found++
344
371
 
345
372
  if (found === count) {
346
- this.log('session is ready')
373
+ this.log('session is ready with %d peer(s), new peers present', count)
347
374
  deferred.resolve()
348
375
  // continue finding peers until we reach this.maxProviders
349
376
  }
@@ -374,7 +401,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
374
401
  * into the format required or return `undefined` if the provider is not
375
402
  * compatible with this session implementation
376
403
  */
377
- abstract convertToProvider (provider: PeerId | Multiaddr | Multiaddr[], options?: AbortOptions): Promise<Provider | undefined>
404
+ abstract convertToProvider (provider: PeerId | Multiaddr | Multiaddr[], routing: string, options?: AbortOptions): Promise<Provider | undefined>
378
405
 
379
406
  /**
380
407
  * This method should search for new providers and yield them.
@@ -392,12 +419,17 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
392
419
 
393
420
  /**
394
421
  * Turn a provider into a concise Uint8Array representation for use in a Bloom
395
- * filter
422
+ * or Cuckoo filter
396
423
  */
397
- abstract toEvictionKey (provider: Provider): Uint8Array | string
424
+ abstract toFilterKey (provider: Provider): Uint8Array | string
398
425
 
399
426
  /**
400
427
  * Return `true` if we consider one provider to be the same as another
401
428
  */
402
429
  abstract equals (providerA: Provider, providerB: Provider): boolean
430
+
431
+ /**
432
+ * Invoke the progress handler with the session-specific found provider event
433
+ */
434
+ abstract emitFoundProviderProgressEvent (cid: CID, provider: Provider, options: BlockRetrievalOptions<RetrieveBlockProgressEvents>): void
403
435
  }
@@ -1,19 +0,0 @@
1
- {
2
- "GraphWalker": "https://ipfs.github.io/helia/interfaces/_helia_car.GraphWalker.html",
3
- "breadthFirstWalker": "https://ipfs.github.io/helia/functions/_helia_car.breadthFirstWalker.html",
4
- "depthFirstWalker": "https://ipfs.github.io/helia/functions/_helia_car.depthFirstWalker.html",
5
- "naturalOrderWalker": "https://ipfs.github.io/helia/functions/_helia_car.naturalOrderWalker.html",
6
- "AbstractSession": "https://ipfs.github.io/helia/classes/_helia_utils.AbstractSession.html",
7
- "Helia": "https://ipfs.github.io/helia/classes/_helia_utils.Helia.html",
8
- ".:Helia": "https://ipfs.github.io/helia/classes/_helia_utils.Helia.html",
9
- "AbstractCreateSessionOptions": "https://ipfs.github.io/helia/interfaces/_helia_utils.AbstractCreateSessionOptions.html",
10
- "AbstractSessionComponents": "https://ipfs.github.io/helia/interfaces/_helia_utils.AbstractSessionComponents.html",
11
- "BlockStorage": "https://ipfs.github.io/helia/interfaces/_helia_utils.BlockStorage.html",
12
- "BlockStorageInit": "https://ipfs.github.io/helia/interfaces/_helia_utils.BlockStorageInit.html",
13
- "BlockstoreSessionEvents": "https://ipfs.github.io/helia/interfaces/_helia_utils.BlockstoreSessionEvents.html",
14
- "GraphNode": "https://ipfs.github.io/helia/interfaces/_helia_utils.GraphNode.html",
15
- "GraphWalkerComponents": "https://ipfs.github.io/helia/interfaces/_helia_utils.GraphWalkerComponents.html",
16
- "GraphWalkerInit": "https://ipfs.github.io/helia/interfaces/_helia_utils.GraphWalkerInit.html",
17
- "HeliaInit": "https://ipfs.github.io/helia/interfaces/_helia_utils.HeliaInit.html",
18
- ".:HeliaInit": "https://ipfs.github.io/helia/interfaces/helia.HeliaInit.html"
19
- }