@helia/block-brokers 5.1.4 → 5.2.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.
- package/dist/index.min.js +30 -5
- package/dist/index.min.js.map +4 -4
- package/dist/src/bitswap.d.ts.map +1 -1
- package/dist/src/bitswap.js +50 -10
- package/dist/src/bitswap.js.map +1 -1
- package/dist/src/trustless-gateway/index.d.ts +2 -2
- package/dist/src/trustless-gateway/index.d.ts.map +1 -1
- package/dist/src/trustless-gateway/index.js.map +1 -1
- package/dist/src/trustless-gateway/session.d.ts.map +1 -1
- package/dist/src/trustless-gateway/session.js +19 -2
- package/dist/src/trustless-gateway/session.js.map +1 -1
- package/dist/src/trustless-gateway/trustless-gateway.d.ts +6 -3
- package/dist/src/trustless-gateway/trustless-gateway.d.ts.map +1 -1
- package/dist/src/trustless-gateway/trustless-gateway.js +39 -4
- package/dist/src/trustless-gateway/trustless-gateway.js.map +1 -1
- package/package.json +10 -10
- package/src/bitswap.ts +51 -13
- package/src/trustless-gateway/index.ts +4 -2
- package/src/trustless-gateway/session.ts +20 -2
- package/src/trustless-gateway/trustless-gateway.ts +51 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitswap.d.ts","sourceRoot":"","sources":["../../src/bitswap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bitswap.d.ts","sourceRoot":"","sources":["../../src/bitswap.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAwE,MAAM,gBAAgB,CAAA;AAC1H,OAAO,KAAK,EAAwB,WAAW,EAA+C,OAAO,EAAE,YAAY,EAAsK,MAAM,kBAAkB,CAAA;AACjT,OAAO,KAAK,EAAE,MAAM,EAAa,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,eAAe,CAAA;IACvB,SAAS,EAAE,YAAY,CAAA;CACxB;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;CAE7D;AAqGD;;;GAGG;AACH,wBAAgB,OAAO,CAAE,IAAI,GAAE,sBAA2B,GAAG,CAAC,UAAU,EAAE,4BAA4B,KAAK,WAAW,CAErH"}
|
package/dist/src/bitswap.js
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { createBitswap } from '@helia/bitswap';
|
|
2
|
+
import { isPeerId } from '@libp2p/interface';
|
|
3
|
+
import { CustomProgressEvent } from 'progress-events';
|
|
2
4
|
class BitswapBlockBroker {
|
|
3
5
|
name = 'bitswap';
|
|
4
6
|
bitswap;
|
|
5
7
|
started;
|
|
6
8
|
constructor(components, init = {}) {
|
|
7
|
-
|
|
8
|
-
this.bitswap = createBitswap(components, {
|
|
9
|
-
hashLoader: {
|
|
10
|
-
getHasher: async (codecOrName) => {
|
|
11
|
-
return getHasher(codecOrName);
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
...init
|
|
15
|
-
});
|
|
9
|
+
this.bitswap = createBitswap(components, init);
|
|
16
10
|
this.started = false;
|
|
17
11
|
}
|
|
18
12
|
isStarted() {
|
|
@@ -30,7 +24,53 @@ class BitswapBlockBroker {
|
|
|
30
24
|
await this.bitswap.notify(cid, options);
|
|
31
25
|
}
|
|
32
26
|
async retrieve(cid, options = {}) {
|
|
33
|
-
return this.bitswap.want(cid,
|
|
27
|
+
return this.bitswap.want(cid, {
|
|
28
|
+
...options,
|
|
29
|
+
onProgress: function bitswapBlockBrokerRetrieveCallback(evt) {
|
|
30
|
+
if (options?.onProgress == null) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
options.onProgress(evt);
|
|
34
|
+
if (evt.type === 'connection:open') {
|
|
35
|
+
if (!isPeerId(evt.detail)) {
|
|
36
|
+
// should not happen as bitswap impl only sends wantlist to
|
|
37
|
+
// connected peers so we always have a peer id
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
options.onProgress(new CustomProgressEvent('helia:block-broker:connect', {
|
|
41
|
+
broker: 'bitswap',
|
|
42
|
+
type: 'connect',
|
|
43
|
+
provider: evt.detail,
|
|
44
|
+
cid
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
else if (evt.type === 'connection:opened') {
|
|
48
|
+
options.onProgress(new CustomProgressEvent('helia:block-broker:connected', {
|
|
49
|
+
broker: 'bitswap',
|
|
50
|
+
type: 'connected',
|
|
51
|
+
provider: evt.detail.remotePeer,
|
|
52
|
+
address: evt.detail.remoteAddr,
|
|
53
|
+
cid
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
else if (evt.type === 'bitswap:send-wantlist') {
|
|
57
|
+
options.onProgress(new CustomProgressEvent('helia:block-broker:request-block', {
|
|
58
|
+
broker: 'bitswap',
|
|
59
|
+
type: 'request-block',
|
|
60
|
+
provider: evt.detail,
|
|
61
|
+
cid
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
else if (evt.type === 'bitswap:block') {
|
|
65
|
+
options.onProgress(new CustomProgressEvent('helia:block-broker:receive-block', {
|
|
66
|
+
broker: 'bitswap',
|
|
67
|
+
type: 'receive-block',
|
|
68
|
+
provider: evt.detail.sender,
|
|
69
|
+
cid
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
34
74
|
}
|
|
35
75
|
createSession(options) {
|
|
36
76
|
const session = this.bitswap.createSession(options);
|
package/dist/src/bitswap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitswap.js","sourceRoot":"","sources":["../../src/bitswap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"bitswap.js","sourceRoot":"","sources":["../../src/bitswap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TransformRequestInit } from './trustless-gateway.ts';
|
|
2
|
-
import type { Routing, BlockBroker } from '@helia/interface';
|
|
2
|
+
import type { Routing, BlockBroker, RoutingFindProvidersProgressEvents, BlockBrokerGetBlockProgressEvents } from '@helia/interface';
|
|
3
3
|
import type { ComponentLogger } from '@libp2p/interface';
|
|
4
4
|
import type { CID } from 'multiformats';
|
|
5
5
|
import type { ProgressEvent } from 'progress-events';
|
|
@@ -29,7 +29,7 @@ export interface TrustlessGatewayProvider {
|
|
|
29
29
|
*/
|
|
30
30
|
routing: string;
|
|
31
31
|
}
|
|
32
|
-
export type TrustlessGatewayGetBlockProgressEvents = ProgressEvent<'trustless-gateway:get-block:fetch', URL> | ProgressEvent<'trustless-gateway:found-provider', TrustlessGatewayProvider
|
|
32
|
+
export type TrustlessGatewayGetBlockProgressEvents = ProgressEvent<'trustless-gateway:get-block:fetch', URL> | ProgressEvent<'trustless-gateway:found-provider', TrustlessGatewayProvider> | RoutingFindProvidersProgressEvents | BlockBrokerGetBlockProgressEvents;
|
|
33
33
|
export interface TrustlessGatewayBlockBrokerInit {
|
|
34
34
|
/**
|
|
35
35
|
* By default we will only connect to peers with HTTPS addresses, pass true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/trustless-gateway/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/trustless-gateway/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,kCAAkC,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAA;AACnI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD,eAAO,MAAM,sBAAsB,QAAQ,CAAA;AAC3C,eAAO,MAAM,mBAAmB,QAAQ,CAAA;AACxC;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,UAAY,CAAA;AAEzC,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,IAAI,EAAE,mBAAmB,CAAA;IAEzB;;OAEG;IACH,GAAG,EAAE,GAAG,CAAA;IAER;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,sCAAsC,GAChD,aAAa,CAAC,mCAAmC,EAAE,GAAG,CAAC,GACvD,aAAa,CAAC,kCAAkC,EAAE,wBAAwB,CAAC,GAC3E,kCAAkC,GAClC,iCAAiC,CAAA;AAEnC,MAAM,WAAW,+BAA+B;IAC9C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C;AAED,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,wBAAgB,gBAAgB,CAAE,IAAI,GAAE,+BAAoC,GAAG,CAAC,UAAU,EAAE,qCAAqC,KAAK,WAAW,CAAC,sCAAsC,CAAC,CAExL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/trustless-gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAOzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAA;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAA;AACxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/trustless-gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAOzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAA;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAA;AACxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAA;AAyDzC,MAAM,UAAU,gBAAgB,CAAE,OAAwC,EAAE;IAC1E,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,2BAA2B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAC1E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/trustless-gateway/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAK9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,KAAK,EAAE,sCAAsC,EAA4B,MAAM,YAAY,CAAA;AAElG,OAAO,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,cAAM,uBAAwB,SAAQ,eAAe,CAAC,gBAAgB,EAAE,sCAAsC,CAAC;IAC7G,SAAgB,IAAI,+BAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAsB;gBAE/C,UAAU,EAAE,iCAAiC,EAAE,IAAI,EAAE,oCAAoC;IAYhG,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/trustless-gateway/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAK9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,KAAK,EAAE,sCAAsC,EAA4B,MAAM,YAAY,CAAA;AAElG,OAAO,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,cAAM,uBAAwB,SAAQ,eAAe,CAAC,gBAAgB,EAAE,sCAAsC,CAAC;IAC7G,SAAgB,IAAI,+BAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAsB;gBAE/C,UAAU,EAAE,iCAAiC,EAAE,IAAI,EAAE,oCAAoC;IAYhG,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;IA6BvG,gBAAgB,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,YAAiB,GAAG,cAAc,CAAC,gBAAgB,CAAC;IAIjG,WAAW,CAAE,QAAQ,EAAE,gBAAgB,GAAG,UAAU,GAAG,MAAM;IAI7D,MAAM,CAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,GAAG,OAAO;IAIpE,iBAAiB,CAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAwBpJ,8BAA8B,CAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,CAAC,sCAAsC,CAAC,GAAG,IAAI;CAQpJ;AAED,wBAAgB,6BAA6B,CAAE,UAAU,EAAE,iCAAiC,EAAE,IAAI,EAAE,oCAAoC,GAAG,uBAAuB,CAEjK"}
|
|
@@ -23,8 +23,25 @@ class TrustlessGatewaySession extends AbstractSession {
|
|
|
23
23
|
}
|
|
24
24
|
async queryProvider(cid, provider, options) {
|
|
25
25
|
this.log('fetching BLOCK for %c from %s', cid, provider.url);
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
options?.onProgress?.(new CustomProgressEvent('helia:block-brokers:query-provider:start', {
|
|
27
|
+
blockBroker: 'trustless-gateway',
|
|
28
|
+
provider: provider.url,
|
|
29
|
+
transport: 'http',
|
|
30
|
+
cid
|
|
31
|
+
}));
|
|
32
|
+
let block;
|
|
33
|
+
try {
|
|
34
|
+
block = await provider.getRawBlock(cid, options);
|
|
35
|
+
this.log.trace('got block for %c from %s', cid, provider.url);
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
options?.onProgress?.(new CustomProgressEvent('helia:block-brokers:query-provider:end', {
|
|
39
|
+
blockBroker: 'trustless-gateway',
|
|
40
|
+
provider: provider.url,
|
|
41
|
+
transport: 'http',
|
|
42
|
+
cid
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
28
45
|
await options.validateFn?.(block);
|
|
29
46
|
return block;
|
|
30
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/trustless-gateway/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAe9E,MAAM,uBAAwB,SAAQ,eAAyE;IAC7F,IAAI,GAAG,2BAA2B,CAAA;IACjC,OAAO,CAAS;IAChB,aAAa,CAAS;IACtB,UAAU,CAAS;IACnB,oBAAoB,CAAuB;IAE5D,YAAa,UAA6C,EAAE,IAA0C;QACpG,KAAK,CAAC,UAAU,EAAE;YAChB,GAAG,IAAI;YACP,IAAI,EAAE,iCAAiC;SACxC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,sBAAsB,CAAA;QACjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAA;QACxD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,GAAQ,EAAE,QAA0B,EAAE,OAA8B;QACvF,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;QAE5D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/trustless-gateway/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
2
|
+
import type { BlockBrokerGetBlockProgressEvents } from '@helia/interface';
|
|
1
3
|
import type { ComponentLogger } from '@libp2p/interface';
|
|
2
|
-
import type {
|
|
4
|
+
import type { ProgressOptions } from 'progress-events';
|
|
3
5
|
export interface TrustlessGatewayStats {
|
|
4
6
|
attempts: number;
|
|
5
7
|
errors: number;
|
|
@@ -15,7 +17,7 @@ export interface TrustlessGatewayComponents {
|
|
|
15
17
|
transformRequestInit?: TransformRequestInit;
|
|
16
18
|
routing: string;
|
|
17
19
|
}
|
|
18
|
-
export interface GetRawBlockOptions {
|
|
20
|
+
export interface GetRawBlockOptions extends ProgressOptions<BlockBrokerGetBlockProgressEvents> {
|
|
19
21
|
signal?: AbortSignal;
|
|
20
22
|
/**
|
|
21
23
|
* The maximum number of bytes to allow when fetching a raw block.
|
|
@@ -33,6 +35,7 @@ export interface GetRawBlockOptions {
|
|
|
33
35
|
export declare class TrustlessGateway {
|
|
34
36
|
#private;
|
|
35
37
|
readonly url: URL;
|
|
38
|
+
private readonly peer;
|
|
36
39
|
private readonly log;
|
|
37
40
|
private readonly transformRequestInit?;
|
|
38
41
|
readonly routing: string;
|
|
@@ -41,7 +44,7 @@ export declare class TrustlessGateway {
|
|
|
41
44
|
* Fetch a raw block from `this.url` following the specification defined at
|
|
42
45
|
* https://specs.ipfs.tech/http-gateways/trustless-gateway/
|
|
43
46
|
*/
|
|
44
|
-
getRawBlock(cid: CID,
|
|
47
|
+
getRawBlock(cid: CID, options?: GetRawBlockOptions): Promise<Uint8Array>;
|
|
45
48
|
/**
|
|
46
49
|
* Encapsulate the logic for determining whether a gateway is considered
|
|
47
50
|
* reliable, for prioritization. This is based on the number of successful attempts made
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trustless-gateway.d.ts","sourceRoot":"","sources":["../../../src/trustless-gateway/trustless-gateway.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"trustless-gateway.d.ts","sourceRoot":"","sources":["../../../src/trustless-gateway/trustless-gateway.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAMtC,OAAO,KAAK,EAAsE,iCAAiC,EAA8E,MAAM,kBAAkB,CAAA;AACzN,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAItD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,CAAC,cAAc,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAA;CAClE;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,eAAe,CAAA;IACvB,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe,CAAC,iCAAiC,CAAC;IAC5F,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;;IAC3B,SAAgB,GAAG,EAAE,GAAG,CAAA;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAqC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAsB;IAE5D,SAAgB,OAAO,EAAE,MAAM,CAAA;gBAElB,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,EAAE,0BAA0B;IAsBrG;;;OAGG;IACG,WAAW,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;IA0GnF;;;;;;;OAOG;IACH,WAAW,IAAK,MAAM;IAyBtB;;OAEG;IACH,sBAAsB,IAAK,IAAI;IAI/B,QAAQ,IAAK,qBAAqB;IAUlC,QAAQ,IAAK,MAAM;CAGpB"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
import { peerIdFromCID } from '@libp2p/peer-id';
|
|
2
|
+
import { uriToMultiaddr } from '@multiformats/uri-to-multiaddr';
|
|
1
3
|
import { base64 } from 'multiformats/bases/base64';
|
|
4
|
+
import { CID } from 'multiformats/cid';
|
|
5
|
+
import { identity } from 'multiformats/hashes/identity';
|
|
6
|
+
import { CustomProgressEvent } from 'progress-events';
|
|
7
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
2
8
|
import { DEFAULT_MAX_SIZE } from "./index.js";
|
|
3
9
|
import { limitedResponse } from "./utils.js";
|
|
10
|
+
const TRANSPORT_IPFS_GATEWAY_HTTP_CODE = 0x0920;
|
|
4
11
|
/**
|
|
5
12
|
* A `TrustlessGateway` keeps track of the number of attempts, errors, and
|
|
6
13
|
* successes for a given gateway url so that we can prioritize gateways that
|
|
@@ -9,6 +16,7 @@ import { limitedResponse } from "./utils.js";
|
|
|
9
16
|
*/
|
|
10
17
|
export class TrustlessGateway {
|
|
11
18
|
url;
|
|
19
|
+
peer;
|
|
12
20
|
/**
|
|
13
21
|
* The number of times this gateway has been attempted to be used to fetch a
|
|
14
22
|
* block. This includes successful, errored, and aborted attempts. By counting
|
|
@@ -47,6 +55,7 @@ export class TrustlessGateway {
|
|
|
47
55
|
this.transformRequestInit = transformRequestInit;
|
|
48
56
|
this.log = logger.forComponent(`helia:trustless-gateway-block-broker:${this.url.host}`);
|
|
49
57
|
this.routing = routing;
|
|
58
|
+
this.peer = peerIdFromCID(CID.createV1(TRANSPORT_IPFS_GATEWAY_HTTP_CODE, identity.digest(uint8ArrayFromString(this.url.toString()))));
|
|
50
59
|
}
|
|
51
60
|
/**
|
|
52
61
|
* This function returns a unique string for the multihash.bytes of the CID.
|
|
@@ -65,13 +74,14 @@ export class TrustlessGateway {
|
|
|
65
74
|
* Fetch a raw block from `this.url` following the specification defined at
|
|
66
75
|
* https://specs.ipfs.tech/http-gateways/trustless-gateway/
|
|
67
76
|
*/
|
|
68
|
-
async getRawBlock(cid,
|
|
77
|
+
async getRawBlock(cid, options = {}) {
|
|
69
78
|
const gwUrl = new URL(this.url.toString());
|
|
70
79
|
gwUrl.pathname = `/ipfs/${cid.toString()}`;
|
|
80
|
+
const maxSize = options.maxSize ?? DEFAULT_MAX_SIZE;
|
|
71
81
|
// necessary as not every gateway supports dag-cbor, but every should support
|
|
72
82
|
// sending raw block as-is
|
|
73
83
|
gwUrl.search = '?format=raw';
|
|
74
|
-
if (signal?.aborted === true) {
|
|
84
|
+
if (options.signal?.aborted === true) {
|
|
75
85
|
throw new Error(`Signal to fetch raw block for CID ${cid} from gateway ${this.url} was aborted prior to fetch`);
|
|
76
86
|
}
|
|
77
87
|
const blockId = this.#uniqueBlockId(cid);
|
|
@@ -80,7 +90,7 @@ export class TrustlessGateway {
|
|
|
80
90
|
const abortInnerSignal = () => {
|
|
81
91
|
innerController.abort();
|
|
82
92
|
};
|
|
83
|
-
signal?.addEventListener('abort', abortInnerSignal);
|
|
93
|
+
options.signal?.addEventListener('abort', abortInnerSignal);
|
|
84
94
|
try {
|
|
85
95
|
let pendingResponse = this.#pendingResponses.get(blockId);
|
|
86
96
|
if (pendingResponse == null) {
|
|
@@ -98,6 +108,12 @@ export class TrustlessGateway {
|
|
|
98
108
|
%s %s HTTP/1.1
|
|
99
109
|
%s
|
|
100
110
|
`, reqInit.method ?? 'GET', gwUrl, [...headers.entries()].map(([key, value]) => `${key}: ${value}`).join('\n'));
|
|
111
|
+
options.onProgress?.(new CustomProgressEvent('helia:block-broker:connect', {
|
|
112
|
+
broker: 'trustless-gateway',
|
|
113
|
+
type: 'connect',
|
|
114
|
+
provider: this.peer,
|
|
115
|
+
cid
|
|
116
|
+
}));
|
|
101
117
|
pendingResponse = fetch(gwUrl.toString(), reqInit).then(async (res) => {
|
|
102
118
|
this.log(`received response
|
|
103
119
|
HTTP/1.1 %d %s
|
|
@@ -107,9 +123,28 @@ HTTP/1.1 %d %s
|
|
|
107
123
|
this.#errors++;
|
|
108
124
|
throw new Error(`Unable to fetch raw block for CID ${cid} from gateway ${this.url}, received ${res.status} ${res.statusText}`);
|
|
109
125
|
}
|
|
126
|
+
options.onProgress?.(new CustomProgressEvent('helia:block-broker:connected', {
|
|
127
|
+
broker: 'trustless-gateway',
|
|
128
|
+
type: 'connected',
|
|
129
|
+
provider: this.peer,
|
|
130
|
+
address: uriToMultiaddr(gwUrl.toString()),
|
|
131
|
+
cid
|
|
132
|
+
}));
|
|
133
|
+
options.onProgress?.(new CustomProgressEvent('helia:block-broker:request-block', {
|
|
134
|
+
broker: 'trustless-gateway',
|
|
135
|
+
type: 'request-block',
|
|
136
|
+
provider: this.peer,
|
|
137
|
+
cid
|
|
138
|
+
}));
|
|
110
139
|
// limited Response ensures the body is less than 2MiB (or configurable maxSize)
|
|
111
140
|
// see https://github.com/ipfs/helia/issues/790
|
|
112
141
|
const body = await limitedResponse(res, maxSize, { signal: innerController.signal, log: this.log });
|
|
142
|
+
options.onProgress?.(new CustomProgressEvent('helia:block-broker:receive-block', {
|
|
143
|
+
broker: 'trustless-gateway',
|
|
144
|
+
type: 'receive-block',
|
|
145
|
+
provider: this.peer,
|
|
146
|
+
cid
|
|
147
|
+
}));
|
|
113
148
|
this.#successes++;
|
|
114
149
|
return body;
|
|
115
150
|
});
|
|
@@ -127,7 +162,7 @@ HTTP/1.1 %d %s
|
|
|
127
162
|
throw new Error(`Unable to fetch raw block for CID ${cid} - ${cause.message}`);
|
|
128
163
|
}
|
|
129
164
|
finally {
|
|
130
|
-
signal?.removeEventListener('abort', abortInnerSignal);
|
|
165
|
+
options.signal?.removeEventListener('abort', abortInnerSignal);
|
|
131
166
|
this.#pendingResponses.delete(blockId);
|
|
132
167
|
}
|
|
133
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trustless-gateway.js","sourceRoot":"","sources":["../../../src/trustless-gateway/trustless-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"trustless-gateway.js","sourceRoot":"","sources":["../../../src/trustless-gateway/trustless-gateway.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/block-brokers",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.0",
|
|
4
4
|
"description": "Block brokers for Helia",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/ipfs/helia/tree/main/packages/block-brokers#readme",
|
|
@@ -47,25 +47,26 @@
|
|
|
47
47
|
"test:electron-main": "aegir test -t electron-main"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@helia/bitswap": "^3.
|
|
51
|
-
"@helia/interface": "^6.
|
|
52
|
-
"@helia/utils": "^2.
|
|
53
|
-
"@libp2p/interface": "^3.
|
|
50
|
+
"@helia/bitswap": "^3.2.0",
|
|
51
|
+
"@helia/interface": "^6.2.0",
|
|
52
|
+
"@helia/utils": "^2.5.0",
|
|
53
|
+
"@libp2p/interface": "^3.2.0",
|
|
54
|
+
"@libp2p/peer-id": "^6.0.6",
|
|
54
55
|
"@libp2p/utils": "^7.0.5",
|
|
55
56
|
"@multiformats/multiaddr": "^13.0.1",
|
|
56
57
|
"@multiformats/multiaddr-matcher": "^3.0.1",
|
|
57
58
|
"@multiformats/multiaddr-to-uri": "^12.0.0",
|
|
59
|
+
"@multiformats/uri-to-multiaddr": "^10.0.0",
|
|
58
60
|
"interface-blockstore": "^6.0.1",
|
|
59
61
|
"interface-store": "^7.0.0",
|
|
60
62
|
"multiformats": "^13.4.1",
|
|
61
63
|
"progress-events": "^1.0.1",
|
|
62
|
-
"uint8arraylist": "^2.4.8"
|
|
64
|
+
"uint8arraylist": "^2.4.8",
|
|
65
|
+
"uint8arrays": "^5.1.0"
|
|
63
66
|
},
|
|
64
67
|
"devDependencies": {
|
|
65
68
|
"@libp2p/crypto": "^5.1.12",
|
|
66
69
|
"@libp2p/logger": "^6.0.5",
|
|
67
|
-
"@libp2p/peer-id": "^6.0.3",
|
|
68
|
-
"@multiformats/uri-to-multiaddr": "^10.0.0",
|
|
69
70
|
"@types/polka": "^0.5.7",
|
|
70
71
|
"@types/sinon": "^21.0.0",
|
|
71
72
|
"aegir": "^47.0.22",
|
|
@@ -73,7 +74,6 @@
|
|
|
73
74
|
"polka": "^0.5.2",
|
|
74
75
|
"race-signal": "^2.0.0",
|
|
75
76
|
"sinon": "^21.0.0",
|
|
76
|
-
"sinon-ts": "^2.0.0"
|
|
77
|
-
"uint8arrays": "^5.1.0"
|
|
77
|
+
"sinon-ts": "^2.0.0"
|
|
78
78
|
}
|
|
79
79
|
}
|
package/src/bitswap.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createBitswap } from '@helia/bitswap'
|
|
2
|
+
import { isPeerId } from '@libp2p/interface'
|
|
3
|
+
import { CustomProgressEvent } from 'progress-events'
|
|
2
4
|
import type { BitswapOptions, Bitswap, BitswapWantBlockProgressEvents, BitswapNotifyProgressEvents } from '@helia/bitswap'
|
|
3
|
-
import type { BlockAnnounceOptions, BlockBroker, BlockRetrievalOptions, CreateSessionOptions, Routing, HasherLoader, SessionBlockBroker } from '@helia/interface'
|
|
5
|
+
import type { BlockAnnounceOptions, BlockBroker, BlockRetrievalOptions, CreateSessionOptions, Routing, HasherLoader, SessionBlockBroker, BlockBrokerConnectProgressEvent, BlockBrokerConnectedProgressEvent, BlockBrokerRequestBlockProgressEvent, BlockBrokerReceiveBlockProgressEvent } from '@helia/interface'
|
|
4
6
|
import type { Libp2p, Startable, ComponentLogger } from '@libp2p/interface'
|
|
5
7
|
import type { Blockstore } from 'interface-blockstore'
|
|
6
8
|
import type { CID } from 'multiformats/cid'
|
|
7
|
-
import type { MultihashHasher } from 'multiformats/hashes/interface'
|
|
8
9
|
|
|
9
10
|
export interface BitswapBlockBrokerComponents {
|
|
10
11
|
libp2p: Libp2p
|
|
@@ -24,16 +25,7 @@ class BitswapBlockBroker implements BlockBroker<BitswapWantBlockProgressEvents,
|
|
|
24
25
|
private started: boolean
|
|
25
26
|
|
|
26
27
|
constructor (components: BitswapBlockBrokerComponents, init: BitswapBlockBrokerInit = {}) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.bitswap = createBitswap(components, {
|
|
30
|
-
hashLoader: {
|
|
31
|
-
getHasher: async (codecOrName: number): Promise<MultihashHasher<number>> => {
|
|
32
|
-
return getHasher(codecOrName)
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
...init
|
|
36
|
-
})
|
|
28
|
+
this.bitswap = createBitswap(components, init)
|
|
37
29
|
this.started = false
|
|
38
30
|
}
|
|
39
31
|
|
|
@@ -56,7 +48,53 @@ class BitswapBlockBroker implements BlockBroker<BitswapWantBlockProgressEvents,
|
|
|
56
48
|
}
|
|
57
49
|
|
|
58
50
|
async retrieve (cid: CID, options: BlockRetrievalOptions<BitswapWantBlockProgressEvents> = {}): Promise<Uint8Array> {
|
|
59
|
-
return this.bitswap.want(cid,
|
|
51
|
+
return this.bitswap.want(cid, {
|
|
52
|
+
...options,
|
|
53
|
+
onProgress: function bitswapBlockBrokerRetrieveCallback (evt) {
|
|
54
|
+
if (options?.onProgress == null) {
|
|
55
|
+
return
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
options.onProgress(evt)
|
|
59
|
+
|
|
60
|
+
if (evt.type === 'connection:open') {
|
|
61
|
+
if (!isPeerId(evt.detail)) {
|
|
62
|
+
// should not happen as bitswap impl only sends wantlist to
|
|
63
|
+
// connected peers so we always have a peer id
|
|
64
|
+
return
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
options.onProgress(new CustomProgressEvent<BlockBrokerConnectProgressEvent>('helia:block-broker:connect', {
|
|
68
|
+
broker: 'bitswap',
|
|
69
|
+
type: 'connect',
|
|
70
|
+
provider: evt.detail,
|
|
71
|
+
cid
|
|
72
|
+
}))
|
|
73
|
+
} else if (evt.type === 'connection:opened') {
|
|
74
|
+
options.onProgress(new CustomProgressEvent<BlockBrokerConnectedProgressEvent>('helia:block-broker:connected', {
|
|
75
|
+
broker: 'bitswap',
|
|
76
|
+
type: 'connected',
|
|
77
|
+
provider: evt.detail.remotePeer,
|
|
78
|
+
address: evt.detail.remoteAddr,
|
|
79
|
+
cid
|
|
80
|
+
}))
|
|
81
|
+
} else if (evt.type === 'bitswap:send-wantlist') {
|
|
82
|
+
options.onProgress(new CustomProgressEvent<BlockBrokerRequestBlockProgressEvent>('helia:block-broker:request-block', {
|
|
83
|
+
broker: 'bitswap',
|
|
84
|
+
type: 'request-block',
|
|
85
|
+
provider: evt.detail,
|
|
86
|
+
cid
|
|
87
|
+
}))
|
|
88
|
+
} else if (evt.type === 'bitswap:block') {
|
|
89
|
+
options.onProgress(new CustomProgressEvent<BlockBrokerReceiveBlockProgressEvent>('helia:block-broker:receive-block', {
|
|
90
|
+
broker: 'bitswap',
|
|
91
|
+
type: 'receive-block',
|
|
92
|
+
provider: evt.detail.sender,
|
|
93
|
+
cid
|
|
94
|
+
}))
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
})
|
|
60
98
|
}
|
|
61
99
|
|
|
62
100
|
createSession (options?: CreateSessionOptions<BitswapWantBlockProgressEvents>): SessionBlockBroker<BitswapWantBlockProgressEvents, BitswapNotifyProgressEvents> {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TrustlessGatewayBlockBroker } from './broker.ts'
|
|
2
2
|
import type { TransformRequestInit } from './trustless-gateway.ts'
|
|
3
|
-
import type { Routing, BlockBroker } from '@helia/interface'
|
|
3
|
+
import type { Routing, BlockBroker, RoutingFindProvidersProgressEvents, BlockBrokerGetBlockProgressEvents } from '@helia/interface'
|
|
4
4
|
import type { ComponentLogger } from '@libp2p/interface'
|
|
5
5
|
import type { CID } from 'multiformats'
|
|
6
6
|
import type { ProgressEvent } from 'progress-events'
|
|
@@ -38,7 +38,9 @@ export interface TrustlessGatewayProvider {
|
|
|
38
38
|
|
|
39
39
|
export type TrustlessGatewayGetBlockProgressEvents =
|
|
40
40
|
ProgressEvent<'trustless-gateway:get-block:fetch', URL> |
|
|
41
|
-
ProgressEvent<'trustless-gateway:found-provider', TrustlessGatewayProvider>
|
|
41
|
+
ProgressEvent<'trustless-gateway:found-provider', TrustlessGatewayProvider> |
|
|
42
|
+
RoutingFindProvidersProgressEvents |
|
|
43
|
+
BlockBrokerGetBlockProgressEvents
|
|
42
44
|
|
|
43
45
|
export interface TrustlessGatewayBlockBrokerInit {
|
|
44
46
|
/**
|
|
@@ -41,8 +41,26 @@ class TrustlessGatewaySession extends AbstractSession<TrustlessGateway, Trustles
|
|
|
41
41
|
async queryProvider (cid: CID, provider: TrustlessGateway, options: BlockRetrievalOptions): Promise<Uint8Array> {
|
|
42
42
|
this.log('fetching BLOCK for %c from %s', cid, provider.url)
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
options?.onProgress?.(new CustomProgressEvent('helia:block-brokers:query-provider:start', {
|
|
45
|
+
blockBroker: 'trustless-gateway',
|
|
46
|
+
provider: provider.url,
|
|
47
|
+
transport: 'http',
|
|
48
|
+
cid
|
|
49
|
+
}))
|
|
50
|
+
|
|
51
|
+
let block: Uint8Array
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
block = await provider.getRawBlock(cid, options)
|
|
55
|
+
this.log.trace('got block for %c from %s', cid, provider.url)
|
|
56
|
+
} finally {
|
|
57
|
+
options?.onProgress?.(new CustomProgressEvent('helia:block-brokers:query-provider:end', {
|
|
58
|
+
blockBroker: 'trustless-gateway',
|
|
59
|
+
provider: provider.url,
|
|
60
|
+
transport: 'http',
|
|
61
|
+
cid
|
|
62
|
+
}))
|
|
63
|
+
}
|
|
46
64
|
|
|
47
65
|
await options.validateFn?.(block)
|
|
48
66
|
|