@helia/bitswap 1.0.1-fa9bd4b → 1.1.0-55b9650

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":"want-list.js","sourceRoot":"","sources":["../../src/want-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAmF1C,MAAM,OAAO,QAAS,SAAQ,iBAAiC;IAC7D;;OAEG;IACa,KAAK,CAAsB;IAC3B,KAAK,CAA4B;IAChC,OAAO,CAAS;IAChB,GAAG,CAAQ;IACX,iBAAiB,CAAQ;IAClC,mBAAmB,CAAgC;IAC1C,UAAU,CAAwB;IAC3C,eAAe,CAAwB;IAE/C,YAAa,UAA8B,EAAE,OAAqB,EAAE;QAClE,KAAK,EAAE,CAAA;QAEP,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;YAC1B,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;SAC5B,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;YACtB,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,UAAU,CAAC,OAAO;SAC5B,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,0BAA0B,CAAA;QAC7E,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAA;QACnE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAEjC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE;YACvD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;iBACrD,KAAK,CAAC,GAAG,CAAC,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YACjF,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE;YACpD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;iBAC3B,KAAK,CAAC,GAAG,CAAC,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;YACrF,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE;YACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC;IAIO,KAAK,CAAC,QAAQ,CAAE,GAAQ,EAAE,OAA6C;QAC7E,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAChE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAElC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,KAAK,GAAG;gBACN,GAAG;gBACH,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;gBAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS;gBAChD,MAAM,EAAE,KAAK;gBACb,YAAY,EAAE,IAAI;aACnB,CAAA;YAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC/B,CAAC;QAED,yEAAyE;QACzE,+BAA+B;QAC/B,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;YACpF,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAA;QACrC,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAElC,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,MAAM,SAAS,CAA+B,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;oBAC1F,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;wBAChB,OAAO,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;oBAClF,CAAC;oBACD,YAAY,EAAE,kBAAkB;iBACjC,CAAC,CAAA;gBAEF,OAAO,KAAK,CAAC,MAAM,CAAA;YACrB,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,SAAS,CAAkC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE;gBAChG,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,OAAO,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;gBAClF,CAAC;gBACD,YAAY,EAAE,kBAAkB;aACjC,CAAC,CAAA;YAEF,OAAO,KAAK,CAAC,MAAM,CAAA;QACrB,CAAC;gBAAS,CAAC;YACT,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAA;gBACzD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;gBACnB,oBAAoB;gBACpB,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,MAAM,IAAI,CAAC,eAAe,EAAE,OAAO,CAAA;QAEnC,oBAAoB;QACpB,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QACtC,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,GAAG,EAAE;YACzC,KAAK,IAAI,CAAC,YAAY,EAAE;iBACrB,KAAK,CAAC,GAAG,CAAC,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAA;YAClD,CAAC,CAAC,CAAA;QACN,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC5B,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,eAAe,GAAG,MAAM,EAAE,CAAA;QAE/B,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE;YAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;YAC9B,MAAM,OAAO,GAA4B;gBACvC,QAAQ,EAAE;oBACR,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE,IAAI,CACX,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EACpB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBAC1C,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;wBAEzC,mDAAmD;wBACnD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;4BACjB,OAAO,cAAc,CAAA;wBACvB,CAAC;wBAED,gDAAgD;wBAChD,OAAO,CAAC,cAAc,CAAA;oBACxB,CAAC,CAAC,EACF,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;wBAEb,OAAO;4BACL,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK;4BACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;4BACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;4BACxB,MAAM,EAAE,KAAK,CAAC,MAAM;4BACpB,YAAY,EAAE,KAAK,CAAC,YAAY;yBACjC,CAAA;oBACH,CAAC,CAAC,EACF,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CACxB;iBACF;aACF,CAAA;YAED,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAM;YACR,CAAC;YAED,4BAA4B;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAE/C,yCAAyC;gBACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAA;YAChE,CAAC;QACH,CAAC,CAAC,CACH,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;QAEF,0EAA0E;QAC1E,QAAQ;QACR,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAEtB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC5C,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAA;IAChC,CAAC;IAED,GAAG,CAAE,GAAQ;QACX,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAE,GAAQ,EAAE,MAAc,EAAE,UAAuB,EAAE;QAC5E,oCAAoC;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE;YACrC,QAAQ,EAAE;gBACR,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,CAAC;wBACR,GAAG,EAAE,GAAG,CAAC,KAAK;wBACd,YAAY,EAAE,IAAI;wBAClB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,QAAQ,EAAE,CAAC;qBACZ,CAAC;aACH;SACF,CAAC,CAAA;QAEF,yBAAyB;QACzB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAmD,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE;YAChH,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACxH,CAAC;SACF,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,MAAM,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAE,GAAQ,EAAE,UAAuB,EAAE;QAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxB,GAAG,OAAO;YACV,QAAQ,EAAE,QAAQ,CAAC,SAAS;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAE,GAAQ,EAAE,MAAc,EAAE,UAAuB,EAAE;QACzE,2CAA2C;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE;YACrC,QAAQ,EAAE;gBACR,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,CAAC;wBACR,GAAG,EAAE,GAAG,CAAC,KAAK;wBACd,YAAY,EAAE,IAAI;wBAClB,QAAQ,EAAE,QAAQ,CAAC,SAAS;wBAC5B,QAAQ,EAAE,CAAC;qBACZ,CAAC;aACH;SACF,CAAC,CAAA;QAEF,yBAAyB;QACzB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAkC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE;YAC/F,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACxH,CAAC;SACF,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,MAAM,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAE,GAAQ,EAAE,OAAoE;QACjG,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAEhE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEpC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAM;QACR,CAAC;QAED,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;QAEnB,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;IACpC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAE,MAAc,EAAE,OAAuB;QACnE,IAAI,CAAC,GAAG,CAAC,4CAA4C,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACrF,IAAI,eAAe,GAAG,KAAK,CAAA;QAE3B,iBAAiB;QACjB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC/C,SAAQ;YACV,CAAC;YAED,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACzB,kEAAkE;YAElE,MAAM,MAAM,GAAG,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;YAE3F,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAA;gBACjD,SAAQ;YACV,CAAC;YAED,IAAI,IAAI,GAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAEzC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBACtB,IAAI,GAAG,MAAM,IAAI,CAAA;YACnB,CAAC;YAED,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;YAElE,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YAEtD,IAAI,CAAC,iBAAiB,CAAkB,OAAO,EAAE;gBAC/C,MAAM,EAAE;oBACN,MAAM;oBACN,GAAG;oBACH,KAAK,EAAE,KAAK,CAAC,IAAI;iBAClB;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,iBAAiB,CAAsC,UAAU,EAAE;gBACtE,MAAM,EAAE;oBACN,MAAM;oBACN,GAAG;oBACH,GAAG,EAAE,IAAI;oBACT,KAAK,EAAE,KAAK,CAAC,IAAI;iBAClB;aACF,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAEpC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,SAAQ;YACV,CAAC;YAED,uEAAuE;YACvE,uEAAuE;YACvE,8BAA8B;YAC9B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;YACnB,eAAe,GAAG,IAAI,CAAA;QACxB,CAAC;QAED,0BAA0B;QAC1B,KAAK,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAEhC,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YAEzD,IAAI,CAAC,iBAAiB,CAAsC,UAAU,EAAE;gBACtE,MAAM,EAAE;oBACN,MAAM;oBACN,GAAG;oBACH,GAAG,EAAE,IAAI,KAAK,iBAAiB,CAAC,SAAS;iBAC1C;aACF,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAE,MAAc;QACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;QAEnC,wCAAwC;QACxC,MAAM,OAAO,GAA4B;YACvC,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI,CACX,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EACpB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAC3D,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBACvC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBAElB,OAAO;wBACL,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK;wBACpB,QAAQ,EAAE,CAAC;wBACX,QAAQ,EAAE,QAAQ,CAAC,SAAS;wBAC5B,MAAM,EAAE,KAAK;wBACb,YAAY,EAAE,KAAK;qBACpB,CAAA;gBACH,CAAC,CAAC,EACF,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CACxB;aACF;SACF,CAAA;QAED,sDAAsD;QACtD,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAEjC,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAE/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4CAA4C,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAE,MAAc;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK;IAEL,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAClB,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"want-list.js","sourceRoot":"","sources":["../../src/want-list.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/bitswap",
3
- "version": "1.0.1-fa9bd4b",
3
+ "version": "1.1.0-55b9650",
4
4
  "description": "JavaScript implementation of the Bitswap data exchange protocol used by Helia",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/helia/tree/main/packages/bitswap#readme",
@@ -148,8 +148,8 @@
148
148
  "docs": "aegir docs"
149
149
  },
150
150
  "dependencies": {
151
- "@helia/interface": "4.2.0-fa9bd4b",
152
- "@helia/utils": "0.2.0-fa9bd4b",
151
+ "@helia/interface": "4.3.0-55b9650",
152
+ "@helia/utils": "0.3.0-55b9650",
153
153
  "@libp2p/interface": "^1.1.2",
154
154
  "@libp2p/logger": "^4.0.5",
155
155
  "@libp2p/peer-collections": "^5.1.6",
@@ -158,9 +158,7 @@
158
158
  "any-signal": "^4.1.1",
159
159
  "interface-blockstore": "^5.2.9",
160
160
  "interface-store": "^5.1.7",
161
- "it-all": "^3.0.4",
162
161
  "it-drain": "^3.0.5",
163
- "it-filter": "^3.0.4",
164
162
  "it-length-prefixed": "^9.0.0",
165
163
  "it-length-prefixed-stream": "^1.1.6",
166
164
  "it-map": "^3.0.5",
@@ -183,6 +181,7 @@
183
181
  "aegir": "^42.2.2",
184
182
  "blockstore-core": "^4.3.10",
185
183
  "delay": "^6.0.0",
184
+ "it-all": "^3.0.4",
186
185
  "it-pair": "^2.0.6",
187
186
  "it-protobuf-stream": "^1.1.2",
188
187
  "p-event": "^6.0.0",
package/src/network.ts CHANGED
@@ -14,6 +14,7 @@ import { splitMessage } from './utils/split-message.js'
14
14
  import type { WantOptions } from './bitswap.js'
15
15
  import type { MultihashHasherLoader } from './index.js'
16
16
  import type { Block } from './pb/message.js'
17
+ import type { QueuedBitswapMessage } from './utils/bitswap-message.js'
17
18
  import type { Provider, Routing } from '@helia/interface/routing'
18
19
  import type { Libp2p, AbortOptions, Connection, PeerId, IncomingStreamData, Topology, ComponentLogger, IdentifyResult, Counter, Metrics } from '@libp2p/interface'
19
20
  import type { Logger } from '@libp2p/logger'
@@ -64,7 +65,7 @@ export interface NetworkEvents {
64
65
  }
65
66
 
66
67
  interface SendMessageJobOptions extends AbortOptions, ProgressOptions, PeerQueueJobOptions {
67
- message: BitswapMessage
68
+ message: QueuedBitswapMessage
68
69
  }
69
70
 
70
71
  export class Network extends TypedEventEmitter<NetworkEvents> {
@@ -187,9 +188,9 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
187
188
  this.log('incoming new bitswap %s stream from %p', stream.protocol, connection.remotePeer)
188
189
  const abortListener = (): void => {
189
190
  if (stream.status === 'open') {
190
- stream.abort(new CodeError('Incoming Bitswap stream timed out', 'ERR_TIMEOUT'))
191
+ stream.abort(new CodeError(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`, 'ERR_TIMEOUT'))
191
192
  } else {
192
- this.log('stream aborted with status', stream.status)
193
+ this.log('stream aborted with status %s', stream.status)
193
194
  }
194
195
  }
195
196
 
@@ -276,27 +277,16 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
276
277
  * Connect to the given peer
277
278
  * Send the given msg (instance of Message) to the given peer
278
279
  */
279
- async sendMessage (peerId: PeerId, msg: Partial<BitswapMessage>, options?: AbortOptions & ProgressOptions<BitswapNetworkWantProgressEvents>): Promise<void> {
280
+ async sendMessage (peerId: PeerId, message: QueuedBitswapMessage, options?: AbortOptions & ProgressOptions<BitswapNetworkWantProgressEvents>): Promise<void> {
280
281
  if (!this.running) {
281
282
  throw new Error('network isn\'t running')
282
283
  }
283
284
 
284
- const message: BitswapMessage = {
285
- wantlist: {
286
- full: msg.wantlist?.full ?? false,
287
- entries: msg.wantlist?.entries ?? []
288
- },
289
- blocks: msg.blocks ?? [],
290
- blockPresences: msg.blockPresences ?? [],
291
- pendingBytes: msg.pendingBytes ?? 0
292
- }
293
-
294
285
  const existingJob = this.sendQueue.queue.find(job => {
295
286
  return peerId.equals(job.options.peerId) && job.status === 'queued'
296
287
  })
297
288
 
298
289
  if (existingJob != null) {
299
- // merge messages instead of adding new job
300
290
  existingJob.options.message = mergeMessages(existingJob.options.message, message)
301
291
 
302
292
  await existingJob.join({
@@ -377,7 +367,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
377
367
  return connection
378
368
  }
379
369
 
380
- _updateSentStats (blocks: Block[] = []): void {
370
+ _updateSentStats (blocks: Map<string, Block>): void {
381
371
  let bytes = 0
382
372
 
383
373
  for (const block of blocks.values()) {
@@ -385,6 +375,6 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
385
375
  }
386
376
 
387
377
  this.metrics.dataSent?.increment(bytes)
388
- this.metrics.blocksSent?.increment(blocks.length)
378
+ this.metrics.blocksSent?.increment(blocks.size)
389
379
  }
390
380
  }
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable max-depth */
2
2
  import { DEFAULT_MAX_SIZE_REPLACE_HAS_WITH_BLOCK } from '../constants.js'
3
- import { BlockPresenceType, type BitswapMessage, WantType } from '../pb/message.js'
3
+ import { BlockPresenceType, WantType } from '../pb/message.js'
4
+ import { QueuedBitswapMessage } from '../utils/bitswap-message.js'
4
5
  import { cidToPrefix } from '../utils/cid-prefix.js'
5
6
  import type { Network } from '../network.js'
6
7
  import type { ComponentLogger, Logger, PeerId } from '@libp2p/interface'
@@ -89,16 +90,45 @@ export class Ledger {
89
90
  }
90
91
 
91
92
  public async sendBlocksToPeer (options?: AbortOptions): Promise<void> {
92
- const message: Pick<BitswapMessage, 'blockPresences' | 'blocks'> = {
93
- blockPresences: [],
94
- blocks: []
95
- }
93
+ const message = new QueuedBitswapMessage()
96
94
  const sentBlocks = new Set<string>()
97
95
 
98
96
  for (const [key, entry] of this.wants.entries()) {
99
- const has = await this.blockstore.has(entry.cid, options)
97
+ try {
98
+ const block = await this.blockstore.get(entry.cid, options)
99
+
100
+ // do they want the block or just us to tell them we have the block
101
+ if (entry.wantType === WantType.WantHave) {
102
+ if (block.byteLength < this.maxSizeReplaceHasWithBlock) {
103
+ this.log('sending have and block for %c', entry.cid)
104
+ // if the block is small we just send it to them
105
+ sentBlocks.add(key)
106
+ message.addBlock(entry.cid, {
107
+ data: block,
108
+ prefix: cidToPrefix(entry.cid)
109
+ })
110
+ } else {
111
+ this.log('sending have for %c', entry.cid)
112
+ // otherwise tell them we have the block
113
+ message.addBlockPresence(entry.cid, {
114
+ cid: entry.cid.bytes,
115
+ type: BlockPresenceType.HaveBlock
116
+ })
117
+ }
118
+ } else {
119
+ this.log('sending block for %c', entry.cid)
120
+ // they want the block, send it to them
121
+ sentBlocks.add(key)
122
+ message.addBlock(entry.cid, {
123
+ data: block,
124
+ prefix: cidToPrefix(entry.cid)
125
+ })
126
+ }
127
+ } catch (err: any) {
128
+ if (err.code !== 'ERR_NOT_FOUND') {
129
+ throw err
130
+ }
100
131
 
101
- if (!has) {
102
132
  this.log('do not have block for %c', entry.cid)
103
133
 
104
134
  // we don't have the requested block and the remote is not interested
@@ -113,53 +143,21 @@ export class Ledger {
113
143
  }
114
144
 
115
145
  entry.sentDontHave = true
116
- message.blockPresences.push({
146
+ message.addBlockPresence(entry.cid, {
117
147
  cid: entry.cid.bytes,
118
148
  type: BlockPresenceType.DontHaveBlock
119
149
  })
120
-
121
- continue
122
- }
123
-
124
- const block = await this.blockstore.get(entry.cid, options)
125
-
126
- // do they want the block or just us to tell them we have the block
127
- if (entry.wantType === WantType.WantHave) {
128
- if (block.byteLength < this.maxSizeReplaceHasWithBlock) {
129
- this.log('sending have and block for %c', entry.cid)
130
- // if the block is small we just send it to them
131
- sentBlocks.add(key)
132
- message.blocks.push({
133
- data: block,
134
- prefix: cidToPrefix(entry.cid)
135
- })
136
- } else {
137
- this.log('sending have for %c', entry.cid)
138
- // otherwise tell them we have the block
139
- message.blockPresences.push({
140
- cid: entry.cid.bytes,
141
- type: BlockPresenceType.HaveBlock
142
- })
143
- }
144
- } else {
145
- this.log('sending block for %c', entry.cid)
146
- // they want the block, send it to them
147
- sentBlocks.add(key)
148
- message.blocks.push({
149
- data: block,
150
- prefix: cidToPrefix(entry.cid)
151
- })
152
150
  }
153
151
  }
154
152
 
155
153
  // only send the message if we actually have something to send
156
- if (message.blocks.length > 0 || message.blockPresences.length > 0) {
154
+ if (message.blocks.size > 0 || message.blockPresences.size > 0) {
157
155
  this.log('sending message')
158
156
  await this.network.sendMessage(this.peerId, message, options)
159
157
  this.log('sent message')
160
158
 
161
159
  // update accounting
162
- this.sentBytes(message.blocks.reduce((acc, curr) => acc + curr.data.byteLength, 0))
160
+ this.sentBytes([...message.blocks.values()].reduce((acc, curr) => acc + curr.data.byteLength, 0))
163
161
 
164
162
  // remove sent blocks from local copy of their want list - they can still
165
163
  // re-request if required
@@ -0,0 +1,39 @@
1
+ import { base64 } from 'multiformats/bases/base64'
2
+ import type { Block, BlockPresence, WantlistEntry } from '../pb/message.js'
3
+ import type { CID } from 'multiformats'
4
+
5
+ /**
6
+ * A bitswap message that is in the send queue. So implemented to be
7
+ * cheap to merge multiple messages when we repeatedly send messages
8
+ * to the same peer.
9
+ */
10
+ export class QueuedBitswapMessage {
11
+ public full: boolean
12
+ public pendingBytes: number
13
+ public wantlist: Map<string, WantlistEntry>
14
+ public blocks: Map<string, Block>
15
+ public blockPresences: Map<string, BlockPresence>
16
+
17
+ constructor (full: boolean = false, pendingBytes: number = 0) {
18
+ this.full = full
19
+ this.wantlist = new Map()
20
+ this.blocks = new Map()
21
+ this.blockPresences = new Map()
22
+ this.pendingBytes = 0
23
+ }
24
+
25
+ addWantlistEntry (cid: CID, entry: WantlistEntry): void {
26
+ const key = base64.encode(cid.multihash.bytes)
27
+ this.wantlist.set(key, entry)
28
+ }
29
+
30
+ addBlockPresence (cid: CID, blockPresence: BlockPresence): void {
31
+ const key = base64.encode(cid.multihash.bytes)
32
+ this.blockPresences.set(key, blockPresence)
33
+ }
34
+
35
+ addBlock (cid: CID, block: Block): void {
36
+ const key = base64.encode(cid.multihash.bytes)
37
+ this.blocks.set(key, block)
38
+ }
39
+ }
@@ -1,17 +1,8 @@
1
- import { base64 } from 'multiformats/bases/base64'
2
- import type { BitswapMessage, Block, BlockPresence, WantlistEntry } from '../pb/message.js'
1
+ import type { QueuedBitswapMessage } from './bitswap-message.js'
3
2
 
4
- export function mergeMessages (messageA: BitswapMessage, messageB: BitswapMessage): BitswapMessage {
5
- const wantListEntries = new Map<string, WantlistEntry>(
6
- (messageA.wantlist?.entries ?? []).map(entry => ([
7
- base64.encode(entry.cid),
8
- entry
9
- ]))
10
- )
11
-
12
- for (const entry of messageB.wantlist?.entries ?? []) {
13
- const key = base64.encode(entry.cid)
14
- const existingEntry = wantListEntries.get(key)
3
+ export function mergeMessages (existingMessage: QueuedBitswapMessage, newMessage: QueuedBitswapMessage): QueuedBitswapMessage {
4
+ for (const [key, entry] of newMessage.wantlist.entries()) {
5
+ const existingEntry = existingMessage.wantlist.get(key)
15
6
 
16
7
  if (existingEntry != null) {
17
8
  // take highest priority
@@ -25,46 +16,22 @@ export function mergeMessages (messageA: BitswapMessage, messageB: BitswapMessag
25
16
  entry.sendDontHave = entry.sendDontHave ?? existingEntry.sendDontHave
26
17
  }
27
18
 
28
- wantListEntries.set(key, entry)
19
+ existingMessage.wantlist.set(key, entry)
29
20
  }
30
21
 
31
- const blockPresences = new Map<string, BlockPresence>(
32
- messageA.blockPresences.map(presence => ([
33
- base64.encode(presence.cid),
34
- presence
35
- ]))
36
- )
37
-
38
- for (const blockPresence of messageB.blockPresences) {
39
- const key = base64.encode(blockPresence.cid)
40
-
22
+ for (const [key, blockPresence] of newMessage.blockPresences.entries()) {
41
23
  // override earlier block presence with later one as if duplicated it is
42
24
  // likely to be more accurate since it is more recent
43
- blockPresences.set(key, blockPresence)
25
+ existingMessage.blockPresences.set(key, blockPresence)
44
26
  }
45
27
 
46
- const blocks = new Map<string, Block>(
47
- messageA.blocks.map(block => ([
48
- base64.encode(block.data),
49
- block
50
- ]))
51
- )
52
-
53
- for (const block of messageB.blocks) {
54
- const key = base64.encode(block.data)
55
-
56
- blocks.set(key, block)
28
+ for (const [key, block] of newMessage.blocks.entries()) {
29
+ existingMessage.blocks.set(key, block)
57
30
  }
58
31
 
59
- const output: BitswapMessage = {
60
- wantlist: {
61
- full: messageA.wantlist?.full ?? messageB.wantlist?.full ?? false,
62
- entries: [...wantListEntries.values()]
63
- },
64
- blockPresences: [...blockPresences.values()],
65
- blocks: [...blocks.values()],
66
- pendingBytes: messageA.pendingBytes + messageB.pendingBytes
32
+ if (newMessage.full && !existingMessage.full) {
33
+ existingMessage.full = true
67
34
  }
68
35
 
69
- return output
36
+ return existingMessage
70
37
  }
@@ -2,6 +2,7 @@
2
2
  import { CodeError } from '@libp2p/interface'
3
3
  import { encodingLength } from 'uint8-varint'
4
4
  import { BitswapMessage, Block, BlockPresence, WantlistEntry } from '../pb/message.js'
5
+ import type { QueuedBitswapMessage } from './bitswap-message.js'
5
6
 
6
7
  /**
7
8
  * https://github.com/ipfs/kubo/issues/4473#issuecomment-350390693
@@ -20,10 +21,10 @@ const MAX_ENCODED_BLOCK_SIZE = MAX_BLOCK_SIZE + 16
20
21
  * If a block is encountered that is larger than the max message size an error
21
22
  * will be thrown.
22
23
  */
23
- export async function * splitMessage (message: BitswapMessage, maxSize: number): AsyncGenerator<Uint8Array> {
24
- const wantListEntries = message.wantlist?.entries ?? []
25
- const blockPresences = message.blockPresences
26
- const blocks = message.blocks
24
+ export function * splitMessage (message: QueuedBitswapMessage, maxSize: number): Generator<Uint8Array> {
25
+ const wantListEntries = [...message.wantlist.values()]
26
+ const blockPresences = [...message.blockPresences.values()]
27
+ const blocks = [...message.blocks.values()]
27
28
 
28
29
  let wantListIndex = 0
29
30
  let blockPresencesIndex = 0
@@ -33,7 +34,7 @@ export async function * splitMessage (message: BitswapMessage, maxSize: number):
33
34
  while (true) {
34
35
  const subMessage: Required<BitswapMessage> = {
35
36
  wantlist: {
36
- full: message.wantlist?.full ?? false,
37
+ full: message.full ?? false,
37
38
  entries: []
38
39
  },
39
40
  blockPresences: [],
package/src/want-list.ts CHANGED
@@ -1,10 +1,6 @@
1
1
  import { TypedEventEmitter, setMaxListeners } from '@libp2p/interface'
2
2
  import { trackedPeerMap } from '@libp2p/peer-collections'
3
3
  import { trackedMap } from '@libp2p/utils/tracked-map'
4
- import all from 'it-all'
5
- import filter from 'it-filter'
6
- import map from 'it-map'
7
- import { pipe } from 'it-pipe'
8
4
  import { CID } from 'multiformats/cid'
9
5
  import { sha256 } from 'multiformats/hashes/sha2'
10
6
  import pDefer from 'p-defer'
@@ -13,6 +9,7 @@ import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
13
9
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
14
10
  import { DEFAULT_MESSAGE_SEND_DELAY } from './constants.js'
15
11
  import { BlockPresenceType, WantType } from './pb/message.js'
12
+ import { QueuedBitswapMessage } from './utils/bitswap-message.js'
16
13
  import vd from './utils/varint-decoder.js'
17
14
  import type { BitswapNotifyProgressEvents, MultihashHasherLoader } from './index.js'
18
15
  import type { BitswapNetworkWantProgressEvents, Network } from './network.js'
@@ -219,39 +216,29 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
219
216
  await Promise.all(
220
217
  [...this.peers.entries()].map(async ([peerId, sentWants]) => {
221
218
  const sent = new Set<string>()
222
- const message: Partial<BitswapMessage> = {
223
- wantlist: {
224
- full: false,
225
- entries: pipe(
226
- this.wants.entries(),
227
- (source) => filter(source, ([key, entry]) => {
228
- const sentPreviously = sentWants.has(key)
229
-
230
- // don't cancel if we've not sent it to them before
231
- if (entry.cancel) {
232
- return sentPreviously
233
- }
234
-
235
- // only send if we've not sent it to them before
236
- return !sentPreviously
237
- }),
238
- (source) => map(source, ([key, entry]) => {
239
- sent.add(key)
240
-
241
- return {
242
- cid: entry.cid.bytes,
243
- priority: entry.priority,
244
- wantType: entry.wantType,
245
- cancel: entry.cancel,
246
- sendDontHave: entry.sendDontHave
247
- }
248
- }),
249
- (source) => all(source)
250
- )
219
+ const message = new QueuedBitswapMessage()
220
+
221
+ for (const [key, entry] of this.wants.entries()) {
222
+ const sentPreviously = sentWants.has(key)
223
+
224
+ // only send if either we've not sent it before, or we haven't sent it
225
+ // but we're also cancelling the want.
226
+ if (sentPreviously || entry.cancel) {
227
+ continue
251
228
  }
229
+
230
+ sent.add(key)
231
+
232
+ message.addWantlistEntry(entry.cid, {
233
+ cid: entry.cid.bytes,
234
+ priority: entry.priority,
235
+ wantType: entry.wantType,
236
+ cancel: entry.cancel,
237
+ sendDontHave: entry.sendDontHave
238
+ })
252
239
  }
253
240
 
254
- if (message.wantlist?.entries.length === 0) {
241
+ if (message.wantlist.size === 0) {
255
242
  return
256
243
  }
257
244
 
@@ -295,19 +282,17 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
295
282
  * Add a CID to the wantlist
296
283
  */
297
284
  async wantSessionPresence (cid: CID, peerId: PeerId, options: WantOptions = {}): Promise<WantPresenceResult> {
298
- // sending WantHave directly to peer
299
- await this.network.sendMessage(peerId, {
300
- wantlist: {
301
- full: false,
302
- entries: [{
303
- cid: cid.bytes,
304
- sendDontHave: true,
305
- wantType: WantType.WantHave,
306
- priority: 1
307
- }]
308
- }
285
+ const message = new QueuedBitswapMessage()
286
+ message.addWantlistEntry(cid, {
287
+ cid: cid.bytes,
288
+ sendDontHave: true,
289
+ wantType: WantType.WantHave,
290
+ priority: 1
309
291
  })
310
292
 
293
+ // sending WantHave directly to peer
294
+ await this.network.sendMessage(peerId, message)
295
+
311
296
  // wait for peer response
312
297
  const event = await raceEvent<CustomEvent<WantHaveResult | WantDontHaveResult>>(this, 'presence', options.signal, {
313
298
  filter: (event) => {
@@ -332,19 +317,17 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
332
317
  * Add a CID to the wantlist
333
318
  */
334
319
  async wantSessionBlock (cid: CID, peerId: PeerId, options: WantOptions = {}): Promise<WantPresenceResult> {
335
- // sending WantBlockResult directly to peer
336
- await this.network.sendMessage(peerId, {
337
- wantlist: {
338
- full: false,
339
- entries: [{
340
- cid: cid.bytes,
341
- sendDontHave: true,
342
- wantType: WantType.WantBlock,
343
- priority: 1
344
- }]
345
- }
320
+ const message = new QueuedBitswapMessage()
321
+ message.addWantlistEntry(cid, {
322
+ cid: cid.bytes,
323
+ sendDontHave: true,
324
+ wantType: WantType.WantBlock,
325
+ priority: 1
346
326
  })
347
327
 
328
+ // sending WantBlockResult directly to peer
329
+ await this.network.sendMessage(peerId, message)
330
+
348
331
  // wait for peer response
349
332
  const event = await raceEvent<CustomEvent<WantPresenceResult>>(this, 'presence', options.signal, {
350
333
  filter: (event) => {
@@ -376,7 +359,7 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
376
359
  * Invoked when a message is received from a bitswap peer
377
360
  */
378
361
  private async receiveMessage (sender: PeerId, message: BitswapMessage): Promise<void> {
379
- this.log('received message %d from %p with %d blocks', sender, message.blocks.length)
362
+ this.log('received message from %p with %d blocks', sender, message.blocks.length)
380
363
  let blocksCancelled = false
381
364
 
382
365
  // process blocks
@@ -464,32 +447,27 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
464
447
  */
465
448
  async peerConnected (peerId: PeerId): Promise<void> {
466
449
  const sentWants = new Set<string>()
450
+ const message = new QueuedBitswapMessage(true)
467
451
 
468
452
  // new peer, give them the full wantlist
469
- const message: Partial<BitswapMessage> = {
470
- wantlist: {
471
- full: true,
472
- entries: pipe(
473
- this.wants.entries(),
474
- (source) => filter(source, ([key, entry]) => !entry.cancel),
475
- (source) => map(source, ([key, entry]) => {
476
- sentWants.add(key)
477
-
478
- return {
479
- cid: entry.cid.bytes,
480
- priority: 1,
481
- wantType: WantType.WantBlock,
482
- cancel: false,
483
- sendDontHave: false
484
- }
485
- }),
486
- (source) => all(source)
487
- )
453
+ for (const [key, entry] of this.wants.entries()) {
454
+ if (entry.cancel) {
455
+ continue
488
456
  }
457
+
458
+ sentWants.add(key)
459
+
460
+ message.addWantlistEntry(entry.cid, {
461
+ cid: entry.cid.bytes,
462
+ priority: 1,
463
+ wantType: WantType.WantBlock,
464
+ cancel: false,
465
+ sendDontHave: false
466
+ })
489
467
  }
490
468
 
491
469
  // only send the wantlist if we have something to send
492
- if (message.wantlist?.entries.length === 0) {
470
+ if (message.wantlist.size === 0) {
493
471
  this.peers.set(peerId, sentWants)
494
472
 
495
473
  return