@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.
@@ -1 +1 @@
1
- {"version":3,"file":"bitswap.d.ts","sourceRoot":"","sources":["../../src/bitswap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAwE,MAAM,gBAAgB,CAAA;AAC1H,OAAO,KAAK,EAAwB,WAAW,EAA+C,OAAO,EAAE,YAAY,EAAsB,MAAM,kBAAkB,CAAA;AACjK,OAAO,KAAK,EAAE,MAAM,EAAa,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAItD,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;AAgED;;;GAGG;AACH,wBAAgB,OAAO,CAAE,IAAI,GAAE,sBAA2B,GAAG,CAAC,UAAU,EAAE,4BAA4B,KAAK,WAAW,CAErH"}
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"}
@@ -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
- const { getHasher } = components;
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, options);
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);
@@ -1 +1 @@
1
- {"version":3,"file":"bitswap.js","sourceRoot":"","sources":["../../src/bitswap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAoB9C,MAAM,kBAAkB;IACN,IAAI,GAAG,SAAS,CAAA;IACf,OAAO,CAAS;IACzB,OAAO,CAAS;IAExB,YAAa,UAAwC,EAAE,OAA+B,EAAE;QACtF,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAA;QAEhC,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,UAAU,EAAE;YACvC,UAAU,EAAE;gBACV,SAAS,EAAE,KAAK,EAAE,WAAmB,EAAoC,EAAE;oBACzE,OAAO,SAAS,CAAC,WAAW,CAAC,CAAA;gBAC/B,CAAC;aACF;YACD,GAAG,IAAI;SACR,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,GAAQ,EAAE,OAA2D;QACnF,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,GAAQ,EAAE,UAAiE,EAAE;QAC3F,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC;IAED,aAAa,CAAE,OAA8D;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAEnD,OAAO;YACL,IAAI,EAAE,iBAAiB;YAEvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;gBAC/B,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACtC,CAAC;YAED,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;gBAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACzC,CAAC;YAED,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;gBAC/B,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACvC,CAAC;SACF,CAAA;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAE,OAA+B,EAAE;IACxD,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACjE,CAAC"}
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;AAC5D,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,CAAA;AAE7E,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
+ {"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;AAuDzC,MAAM,UAAU,gBAAgB,CAAE,OAAwC,EAAE;IAC1E,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,2BAA2B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAC1E,CAAC"}
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;IAWvG,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"}
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
- const block = await provider.getRawBlock(cid, options);
27
- this.log.trace('got block for %c from %s', cid, provider.url);
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":"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"}
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,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,0CAA0C,EAAE;YACxF,WAAW,EAAE,mBAAmB;YAChC,QAAQ,EAAE,QAAQ,CAAC,GAAG;YACtB,SAAS,EAAE,MAAM;YACjB,GAAG;SACJ,CAAC,CAAC,CAAA;QAEH,IAAI,KAAiB,CAAA;QAErB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC/D,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,wCAAwC,EAAE;gBACtF,WAAW,EAAE,mBAAmB;gBAChC,QAAQ,EAAE,QAAQ,CAAC,GAAG;gBACtB,SAAS,EAAE,MAAM;gBACjB,GAAG;aACJ,CAAC,CAAC,CAAA;QACL,CAAC;QAED,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAA;QAEjC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,CAAE,gBAAgB,CAAE,GAAQ,EAAE,UAAwB,EAAE;QAC5D,KAAM,CAAC,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAA;IACxK,CAAC;IAED,WAAW,CAAE,QAA0B;QACrC,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,CAAE,SAA2B,EAAE,SAA2B;QAC9D,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAE,QAA0C,EAAE,OAAe,EAAE,OAAsB;QAC1G,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvB,OAAM;QACR,CAAC;QAED,MAAM,aAAa,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAEnI,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAM;QACR,CAAC;QAED,sBAAsB;QACtB,8BAA8B;QAC9B,+BAA+B;QAC/B,MAAM;QACN,MAAM,GAAG,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QAE5C,OAAO,IAAI,gBAAgB,CAAC,GAAG,EAAE;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,8BAA8B,CAAE,GAAQ,EAAE,QAA0B,EAAE,OAAsE;QAC1I,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAA2B,kCAAkC,EAAE;YAC1G,IAAI,EAAE,mBAAmB;YACzB,GAAG;YACH,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE;YAC1B,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC,CAAC,CAAA;IACL,CAAC;CACF;AAED,MAAM,UAAU,6BAA6B,CAAE,UAA6C,EAAE,IAA0C;IACtI,OAAO,IAAI,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC"}
@@ -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 { CID } from 'multiformats/cid';
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, { signal, maxSize }?: GetRawBlockOptions): Promise<Uint8Array>;
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,EAAU,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,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,kBAAkB;IACjC,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;IAoCxB,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;IAqBrG;;;OAGG;IACG,WAAW,CAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,OAA0B,EAAE,GAAE,kBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;IA0ElH;;;;;;;OAOG;IACH,WAAW,IAAK,MAAM;IAyBtB;;OAEG;IACH,sBAAsB,IAAK,IAAI;IAI/B,QAAQ,IAAK,qBAAqB;IAUlC,QAAQ,IAAK,MAAM;CAGpB"}
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, { signal, maxSize = DEFAULT_MAX_SIZE } = {}) {
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":"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"}
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.1.4",
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.1.4",
51
- "@helia/interface": "^6.1.1",
52
- "@helia/utils": "^2.4.2",
53
- "@libp2p/interface": "^3.1.0",
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
- const { getHasher } = components
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, options)
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
- const block = await provider.getRawBlock(cid, options)
45
- this.log.trace('got block for %c from %s', cid, provider.url)
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