Background
Right now the Routing class, which wraps the different router implementations (of which are 3) treats all routers as equal, and calls them in parallel (by using the merge from it-merge):
|
for await (const peer of merge( |
|
queue.toGenerator(), |
|
...supports(this.routers, 'findProviders') |
|
.map(router => router.findProviders(key, options)) |
This means that if you have both:
delegatedHttpRouter (with delegated routing endpoint)
HTTPGatewayRouter (for recursive gasteways),
There is no programmatic way for your to prioritise direct retrieval over a recursive gateway.
Suggestion
In the following discussion, the idea of using
recursive gateways as a "last resort" fallback came up. This means that if direct retrieval fails (because there are no providers or because helia fails to retrieve directly from a provider), it falls back on the recursive gateway to fetch data.
Background
Right now the Routing class, which wraps the different router implementations (of which are 3) treats all routers as equal, and calls them in parallel (by using the merge from
it-merge):helia/packages/utils/src/routing.ts
Lines 57 to 60 in b723a1d
This means that if you have both:
delegatedHttpRouter(with delegated routing endpoint)HTTPGatewayRouter(for recursive gasteways),There is no programmatic way for your to prioritise direct retrieval over a recursive gateway.
Suggestion
In the following discussion, the idea of using
recursive gateways as a "last resort" fallback came up. This means that if direct retrieval fails (because there are no providers or because helia fails to retrieve directly from a provider), it falls back on the recursive gateway to fetch data.