@helia/interop 7.1.2 → 7.1.3-325b36f

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.
@@ -34,16 +34,14 @@ describe('@helia/car', () => {
34
34
  const chunkSize = 1024 * 1024;
35
35
  const size = chunkSize * 10;
36
36
  const input = [];
37
- const candidate = {
38
- content: (async function* () {
39
- for (let i = 0; i < size; i += chunkSize) {
40
- const buf = new Uint8Array(chunkSize);
41
- input.push(buf);
42
- yield buf;
43
- }
44
- }())
45
- };
46
- const cid = await u.addFile(candidate);
37
+ const bytes = (async function* () {
38
+ for (let i = 0; i < size; i += chunkSize) {
39
+ const buf = new Uint8Array(chunkSize);
40
+ input.push(buf);
41
+ yield buf;
42
+ }
43
+ }());
44
+ const cid = await u.addByteStream(bytes);
47
45
  const writer = memoryCarWriter(cid);
48
46
  await c.export(cid, writer);
49
47
  const buf = await writer.bytes();
@@ -1 +1 @@
1
- {"version":3,"file":"car.spec.js","sourceRoot":"","sources":["../../src/car.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"car.spec.js","sourceRoot":"","sources":["../../src/car.spec.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,EAAe,MAAM,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,QAAQ,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAM1D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,KAAkB,CAAA;IACtB,IAAI,CAAM,CAAA;IACV,IAAI,CAAS,CAAA;IACb,IAAI,IAAc,CAAA;IAElB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;QAC/B,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;QACd,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACjB,IAAI,GAAG,MAAM,cAAc,EAAE,CAAA;QAE7B,wBAAwB;QACxB,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QACpB,CAAC;QAED,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QACnB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;QAC7B,MAAM,IAAI,GAAG,SAAS,GAAG,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAiB,EAAE,CAAA;QAE9B,MAAM,KAAK,GAAe,CAAC,KAAK,SAAU,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;gBACzC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;gBACrC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAEf,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC,EAAE,CAAC,CAAA;QAEJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAE3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QAEhC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAEvC,MAAM,MAAM,GAAiB,EAAE,CAAA;QAE/B,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAChB,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;QAC7B,MAAM,IAAI,GAAG,SAAS,GAAG,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAiB,EAAE,CAAA;QAE9B,MAAM,SAAS,GAAkB;YAC/B,OAAO,EAAE,CAAC,KAAK,SAAU,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;oBACzC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;oBACrC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBAEf,MAAM,GAAG,CAAA;gBACX,CAAC;YACH,CAAC,EAAE,CAAC;SACL,CAAA;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAEtD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAE/C,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEtB,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -37,7 +37,7 @@ export async function createHeliaNode(libp2pOptions) {
37
37
  clientMode: false
38
38
  })
39
39
  };
40
- // remove bootstrappers
40
+ // remove bootstrapper(s)
41
41
  defaults.peerDiscovery = [];
42
42
  // remove services that are not used in tests
43
43
  // @ts-expect-error services.autoNAT is not optional
@@ -1 +1 @@
1
- {"version":3,"file":"create-helia.browser.js","sourceRoot":"","sources":["../../../src/fixtures/create-helia.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAOnD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAE,aAA6B;IAClE,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IAEjC,oCAAoC;IACpC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAA;IAC1B,QAAQ,CAAC,UAAU,GAAG;QACpB,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;QAC9B,UAAU,CAAC;YACT,MAAM,EAAE,GAAG;SACZ,CAAC;KACH,CAAA;IAED,yBAAyB;IACzB,QAAQ,CAAC,eAAe,GAAG;QACzB,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK;KAC/B,CAAA;IAED,cAAc;IACd,QAAQ,CAAC,QAAQ,GAAG;QAClB,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC5B,GAAG,CAAC,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAC;QAClC,GAAG,EAAE,MAAM,CAAC;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,aAAa;aACpB;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,YAAY;aACnB;YACD,yDAAyD;YACzD,uBAAuB,EAAE,IAAI;YAE7B,QAAQ,EAAE,qBAAqB;YAC/B,cAAc,EAAE,2BAA2B;YAC3C,UAAU,EAAE,KAAK;SAClB,CAAC;KACH,CAAA;IAED,uBAAuB;IACvB,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAA;IAE3B,6CAA6C;IAC7C,oDAAoD;IACpD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAA;IAChC,kDAAkD;IAClD,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAA;IAC9B,6DAA6D;IAC7D,OAAO,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAA;IAEzC,OAAO,WAAW,CAAgC;QAChD,YAAY,EAAE;YACZ,OAAO,EAAE;SACV;QACD,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,OAAO;SACR;KACF,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"create-helia.browser.js","sourceRoot":"","sources":["../../../src/fixtures/create-helia.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAOnD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAE,aAA6B;IAClE,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IAEjC,oCAAoC;IACpC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAA;IAC1B,QAAQ,CAAC,UAAU,GAAG;QACpB,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;QAC9B,UAAU,CAAC;YACT,MAAM,EAAE,GAAG;SACZ,CAAC;KACH,CAAA;IAED,yBAAyB;IACzB,QAAQ,CAAC,eAAe,GAAG;QACzB,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK;KAC/B,CAAA;IAED,cAAc;IACd,QAAQ,CAAC,QAAQ,GAAG;QAClB,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC5B,GAAG,CAAC,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAC;QAClC,GAAG,EAAE,MAAM,CAAC;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,aAAa;aACpB;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,YAAY;aACnB;YACD,yDAAyD;YACzD,uBAAuB,EAAE,IAAI;YAE7B,QAAQ,EAAE,qBAAqB;YAC/B,cAAc,EAAE,2BAA2B;YAC3C,UAAU,EAAE,KAAK;SAClB,CAAC;KACH,CAAA;IAED,yBAAyB;IACzB,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAA;IAE3B,6CAA6C;IAC7C,oDAAoD;IACpD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAA;IAChC,kDAAkD;IAClD,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAA;IAC9B,6DAA6D;IAC7D,OAAO,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAA;IAEzC,OAAO,WAAW,CAAgC;QAChD,YAAY,EAAE;YACZ,OAAO,EAAE;SACV;QACD,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,OAAO;SACR;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -25,7 +25,7 @@ export async function createHeliaNode(libp2pOptions) {
25
25
  clientMode: false
26
26
  })
27
27
  };
28
- // remove bootstrappers, mdns, etc
28
+ // remove bootstrapper(s), mdns, etc
29
29
  defaults.peerDiscovery = [];
30
30
  // remove services that are not used in tests
31
31
  // @ts-expect-error services.autoNAT is not optional
@@ -1 +1 @@
1
- {"version":3,"file":"create-helia.js","sourceRoot":"","sources":["../../../src/fixtures/create-helia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAOnD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAE,aAA6B;IAClE,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IACjC,QAAQ,CAAC,SAAS,GAAG;QACnB,MAAM,EAAE;YACN,oBAAoB;SACrB;KACF,CAAA;IACD,QAAQ,CAAC,QAAQ,GAAG;QAClB,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC5B,GAAG,CAAC,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAC;QAClC,GAAG,EAAE,MAAM,CAAC;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,aAAa;aACpB;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,YAAY;aACnB;YACD,QAAQ,EAAE,qBAAqB;YAC/B,cAAc,EAAE,2BAA2B;YAC3C,UAAU,EAAE,KAAK;SAClB,CAAC;KACH,CAAA;IAED,kCAAkC;IAClC,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAA;IAE3B,6CAA6C;IAC7C,oDAAoD;IACpD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAA;IAChC,iDAAiD;IACjD,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA;IAC7B,kDAAkD;IAClD,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAA;IAC9B,6DAA6D;IAC7D,OAAO,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAA;IACzC,oDAAoD;IACpD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAA;IAEhC,OAAO,WAAW,CAAgC;QAChD,YAAY,EAAE;YACZ,OAAO,EAAE;SACV;QACD,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,OAAO;SACR;KACF,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"create-helia.js","sourceRoot":"","sources":["../../../src/fixtures/create-helia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAOnD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAE,aAA6B;IAClE,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IACjC,QAAQ,CAAC,SAAS,GAAG;QACnB,MAAM,EAAE;YACN,oBAAoB;SACrB;KACF,CAAA;IACD,QAAQ,CAAC,QAAQ,GAAG;QAClB,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC5B,GAAG,CAAC,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAC;QAClC,GAAG,EAAE,MAAM,CAAC;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,aAAa;aACpB;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,YAAY;aACnB;YACD,QAAQ,EAAE,qBAAqB;YAC/B,cAAc,EAAE,2BAA2B;YAC3C,UAAU,EAAE,KAAK;SAClB,CAAC;KACH,CAAA;IAED,oCAAoC;IACpC,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAA;IAE3B,6CAA6C;IAC7C,oDAAoD;IACpD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAA;IAChC,iDAAiD;IACjD,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA;IAC7B,kDAAkD;IAClD,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAA;IAC9B,6DAA6D;IAC7D,OAAO,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAA;IACzC,oDAAoD;IACpD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAA;IAEhC,OAAO,WAAW,CAAgC;QAChD,YAAY,EAAE;YACZ,OAAO,EAAE;SACV;QACD,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,OAAO;SACR;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -28,18 +28,16 @@ describe('@helia/unixfs - bitswap', () => {
28
28
  const chunkSize = 1024 * 1024;
29
29
  const size = chunkSize * 10;
30
30
  const input = [];
31
- const candidate = {
32
- content: (async function* () {
33
- for (let i = 0; i < size; i += chunkSize) {
34
- const buf = new Uint8Array(chunkSize);
35
- input.push(buf);
36
- yield buf;
37
- }
38
- }())
39
- };
40
- const cid = await unixFs.addFile(candidate);
41
- const bytes = await toBuffer(kubo.api.cat(CID.parse(cid.toString())));
42
- expect(bytes).to.equalBytes(toBuffer(input));
31
+ const bytes = (async function* () {
32
+ for (let i = 0; i < size; i += chunkSize) {
33
+ const buf = new Uint8Array(chunkSize);
34
+ input.push(buf);
35
+ yield buf;
36
+ }
37
+ }());
38
+ const cid = await unixFs.addByteStream(bytes);
39
+ const output = await toBuffer(kubo.api.cat(CID.parse(cid.toString())));
40
+ expect(output).to.equalBytes(toBuffer(input));
43
41
  });
44
42
  it('should add a large file to kubo and fetch it from helia', async () => {
45
43
  const chunkSize = 1024 * 1024;
@@ -1 +1 @@
1
- {"version":3,"file":"unixfs-bitswap.spec.js","sourceRoot":"","sources":["../../src/unixfs-bitswap.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unixfs-bitswap.spec.js","sourceRoot":"","sources":["../../src/unixfs-bitswap.spec.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
1
  /* eslint-env mocha */
2
2
  import { unixfs } from '@helia/unixfs';
3
+ import * as dagPb from '@ipld/dag-pb';
4
+ import { multiaddr } from '@multiformats/multiaddr';
3
5
  import { expect } from 'aegir/chai';
4
6
  import { fixedSize } from 'ipfs-unixfs-importer/chunker';
5
7
  import { balanced } from 'ipfs-unixfs-importer/layout';
8
+ import drain from 'it-drain';
9
+ import last from 'it-last';
6
10
  import { CID } from 'multiformats/cid';
11
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
7
12
  import { createHeliaNode } from './fixtures/create-helia.js';
8
13
  import { createKuboNode } from './fixtures/create-kubo.js';
9
14
  describe('@helia/unixfs - files', () => {
@@ -11,11 +16,25 @@ describe('@helia/unixfs - files', () => {
11
16
  let unixFs;
12
17
  let kubo;
13
18
  async function importToHelia(data, opts) {
14
- const cid = await unixFs.addFile(data, opts);
19
+ const cid = await unixFs.addByteStream(data, opts);
15
20
  return cid;
16
21
  }
22
+ async function importDirectoryToHelia(data, opts) {
23
+ const result = await last(unixFs.addAll(data, opts));
24
+ if (result == null) {
25
+ throw new Error('Nothing imported');
26
+ }
27
+ return CID.parse(result.cid.toString());
28
+ }
17
29
  async function importToKubo(data, opts) {
18
- const result = await kubo.api.add(data.content, opts);
30
+ const result = await kubo.api.add(data, opts);
31
+ return CID.parse(result.cid.toString());
32
+ }
33
+ async function importDirectoryToKubo(data, opts) {
34
+ const result = await last(kubo.api.addAll(data, opts));
35
+ if (result == null) {
36
+ throw new Error('Nothing imported');
37
+ }
19
38
  return CID.parse(result.cid.toString());
20
39
  }
21
40
  async function expectSameCid(data, heliaOpts = {}, kuboOpts = {}) {
@@ -48,22 +67,98 @@ describe('@helia/unixfs - files', () => {
48
67
  }
49
68
  });
50
69
  it('should create the same CID for a small file', async () => {
51
- const candidate = () => ({
52
- content: Uint8Array.from([0, 1, 2, 3, 4])
53
- });
70
+ const candidate = () => (async function* () {
71
+ yield Uint8Array.from([0, 1, 2, 3, 4]);
72
+ }());
54
73
  await expectSameCid(candidate);
55
74
  });
56
75
  it('should create the same CID for a large file', async () => {
57
76
  const chunkSize = 1024 * 1024;
58
77
  const size = chunkSize * 10;
59
- const candidate = () => ({
60
- content: (async function* () {
61
- for (let i = 0; i < size; i += chunkSize) {
62
- yield new Uint8Array(chunkSize);
63
- }
64
- }())
65
- });
78
+ const candidate = () => (async function* () {
79
+ for (let i = 0; i < size; i += chunkSize) {
80
+ yield new Uint8Array(chunkSize);
81
+ }
82
+ }());
66
83
  await expectSameCid(candidate);
67
84
  });
85
+ it('should return the same directory stats', async () => {
86
+ const candidates = [{
87
+ path: '/foo1.txt',
88
+ content: uint8ArrayFromString('Hello World!')
89
+ }, {
90
+ path: '/foo2.txt',
91
+ content: uint8ArrayFromString('Hello World!')
92
+ }];
93
+ const heliaCid = await importDirectoryToHelia(candidates, {
94
+ wrapWithDirectory: true
95
+ });
96
+ const kuboCid = await importDirectoryToKubo(candidates, {
97
+ cidVersion: 1,
98
+ chunker: `size-${1024 * 1024}`,
99
+ rawLeaves: true,
100
+ wrapWithDirectory: true
101
+ });
102
+ expect(heliaCid.toString()).to.equal(kuboCid.toString());
103
+ const heliaStat = await unixFs.stat(heliaCid, {
104
+ extended: true
105
+ });
106
+ const kuboStat = await kubo.api.files.stat(`/ipfs/${kuboCid}`, {
107
+ withLocal: true
108
+ });
109
+ expect(heliaStat.dagSize.toString()).to.equal(kuboStat.cumulativeSize.toString());
110
+ expect(heliaStat.dagSize.toString()).to.equal(kuboStat.sizeLocal?.toString());
111
+ // +1 because kubo doesn't count the root directory block
112
+ expect(heliaStat.blocks.toString()).to.equal((kuboStat.blocks + 1).toString());
113
+ });
114
+ it('fetches missing blocks during stat', async () => {
115
+ const chunkSize = 1024 * 1024;
116
+ const size = chunkSize * 10;
117
+ const candidate = () => (async function* () {
118
+ for (let i = 0; i < size; i += chunkSize) {
119
+ yield new Uint8Array(new Array(chunkSize).fill(0).map((val, index) => {
120
+ return Math.floor(Math.random() * 256);
121
+ }));
122
+ }
123
+ }());
124
+ const largeFileCid = await importToKubo(candidate());
125
+ const info = await kubo.info();
126
+ await helia.libp2p.dial(info.multiaddrs.map(ma => multiaddr(ma)));
127
+ // pull all blocks from kubo
128
+ await drain(unixFs.cat(largeFileCid));
129
+ // check the root block
130
+ const block = await helia.blockstore.get(largeFileCid);
131
+ const node = dagPb.decode(block);
132
+ expect(node.Links).to.have.lengthOf(40);
133
+ const stats = await unixFs.stat(largeFileCid, {
134
+ extended: true
135
+ });
136
+ expect(stats.unixfs?.fileSize()).to.equal(10485760n);
137
+ expect(stats.blocks).to.equal(41n);
138
+ expect(stats.dagSize).to.equal(10488250n);
139
+ expect(stats.localSize).to.equal(10485760n);
140
+ // remove one of the blocks so we now have an incomplete DAG
141
+ await helia.blockstore.delete(node.Links[0].Hash);
142
+ // block count and local file/dag sizes should be smaller
143
+ const updatedStats = await unixFs.stat(largeFileCid, {
144
+ extended: true,
145
+ offline: true
146
+ });
147
+ expect(updatedStats.unixfs?.fileSize()).to.equal(10485760n);
148
+ expect(updatedStats.blocks).to.equal(40n);
149
+ expect(updatedStats.dagSize).to.equal(10226092n);
150
+ expect(updatedStats.localSize).to.equal(10223616n);
151
+ await new Promise((resolve) => {
152
+ setTimeout(() => {
153
+ resolve();
154
+ }, 1_000);
155
+ });
156
+ // block count and local file/dag sizes should be smaller
157
+ const finalStats = await unixFs.stat(largeFileCid, {
158
+ extended: true
159
+ });
160
+ // should have fetched missing block from Kubo
161
+ expect(finalStats).to.deep.equal(stats, 'did not fetch missing block');
162
+ });
68
163
  });
69
164
  //# sourceMappingURL=unixfs-files.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unixfs-files.spec.js","sourceRoot":"","sources":["../../src/unixfs-files.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unixfs-files.spec.js","sourceRoot":"","sources":["../../src/unixfs-files.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/interop",
3
- "version": "7.1.2",
3
+ "version": "7.1.3-325b36f",
4
4
  "description": "Interop tests for Helia",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/helia/tree/main/packages/interop#readme",
@@ -59,29 +59,31 @@
59
59
  },
60
60
  "dependencies": {
61
61
  "@chainsafe/libp2p-gossipsub": "^14.1.0",
62
- "@helia/block-brokers": "^4.0.4",
63
- "@helia/car": "^4.0.2",
64
- "@helia/dag-cbor": "^4.0.2",
65
- "@helia/dag-json": "^4.0.2",
66
- "@helia/http": "^2.0.4",
67
- "@helia/interface": "^5.2.0",
68
- "@helia/ipns": "^8.1.0",
69
- "@helia/json": "^4.0.2",
70
- "@helia/mfs": "^4.0.2",
71
- "@helia/routers": "^3.0.0",
72
- "@helia/strings": "^4.0.2",
73
- "@helia/unixfs": "^4.0.2",
62
+ "@helia/block-brokers": "4.1.0-325b36f",
63
+ "@helia/car": "4.0.3-325b36f",
64
+ "@helia/dag-cbor": "4.0.3-325b36f",
65
+ "@helia/dag-json": "4.0.3-325b36f",
66
+ "@helia/http": "2.0.5-325b36f",
67
+ "@helia/interface": "5.2.1-325b36f",
68
+ "@helia/ipns": "8.2.0-325b36f",
69
+ "@helia/json": "4.0.3-325b36f",
70
+ "@helia/mfs": "4.0.3-325b36f",
71
+ "@helia/routers": "3.0.1-325b36f",
72
+ "@helia/strings": "4.0.3-325b36f",
73
+ "@helia/unixfs": "4.0.3-325b36f",
74
74
  "@ipld/car": "^5.3.3",
75
75
  "@ipld/dag-cbor": "^9.2.2",
76
+ "@ipld/dag-pb": "^4.1.3",
76
77
  "@libp2p/crypto": "^5.0.7",
77
78
  "@libp2p/interface": "^2.2.1",
78
79
  "@libp2p/kad-dht": "^14.1.3",
79
80
  "@libp2p/keychain": "^5.0.10",
80
81
  "@libp2p/peer-id": "^5.0.8",
81
82
  "@libp2p/websockets": "^9.0.13",
83
+ "@multiformats/multiaddr": "^12.4.0",
82
84
  "@multiformats/sha3": "^3.0.2",
83
- "aegir": "^45.0.6",
84
- "helia": "^5.2.1",
85
+ "aegir": "^45.1.1",
86
+ "helia": "5.3.0-325b36f",
85
87
  "ipfs-unixfs-importer": "^15.3.1",
86
88
  "ipfsd-ctl": "^15.0.2",
87
89
  "ipns": "^10.0.0",
package/src/car.spec.ts CHANGED
@@ -12,7 +12,7 @@ import { createKuboNode } from './fixtures/create-kubo.js'
12
12
  import { memoryCarWriter } from './fixtures/memory-car.js'
13
13
  import type { Car } from '@helia/car'
14
14
  import type { HeliaLibp2p } from 'helia'
15
- import type { FileCandidate } from 'ipfs-unixfs-importer'
15
+ import type { ByteStream, FileCandidate } from 'ipfs-unixfs-importer'
16
16
  import type { KuboNode } from 'ipfsd-ctl'
17
17
 
18
18
  describe('@helia/car', () => {
@@ -46,18 +46,16 @@ describe('@helia/car', () => {
46
46
  const size = chunkSize * 10
47
47
  const input: Uint8Array[] = []
48
48
 
49
- const candidate: FileCandidate = {
50
- content: (async function * () {
51
- for (let i = 0; i < size; i += chunkSize) {
52
- const buf = new Uint8Array(chunkSize)
53
- input.push(buf)
49
+ const bytes: ByteStream = (async function * () {
50
+ for (let i = 0; i < size; i += chunkSize) {
51
+ const buf = new Uint8Array(chunkSize)
52
+ input.push(buf)
54
53
 
55
- yield buf
56
- }
57
- }())
58
- }
54
+ yield buf
55
+ }
56
+ }())
59
57
 
60
- const cid = await u.addFile(candidate)
58
+ const cid = await u.addByteStream(bytes)
61
59
  const writer = memoryCarWriter(cid)
62
60
  await c.export(cid, writer)
63
61
 
@@ -48,7 +48,7 @@ export async function createHeliaNode (libp2pOptions?: Libp2pOptions): Promise<H
48
48
  })
49
49
  }
50
50
 
51
- // remove bootstrappers
51
+ // remove bootstrapper(s)
52
52
  defaults.peerDiscovery = []
53
53
 
54
54
  // remove services that are not used in tests
@@ -32,7 +32,7 @@ export async function createHeliaNode (libp2pOptions?: Libp2pOptions): Promise<H
32
32
  })
33
33
  }
34
34
 
35
- // remove bootstrappers, mdns, etc
35
+ // remove bootstrapper(s), mdns, etc
36
36
  defaults.peerDiscovery = []
37
37
 
38
38
  // remove services that are not used in tests
@@ -7,7 +7,7 @@ import { CID } from 'multiformats/cid'
7
7
  import { createHeliaNode } from './fixtures/create-helia.js'
8
8
  import { createKuboNode } from './fixtures/create-kubo.js'
9
9
  import type { HeliaLibp2p } from 'helia'
10
- import type { FileCandidate } from 'ipfs-unixfs-importer'
10
+ import type { ByteStream, FileCandidate } from 'ipfs-unixfs-importer'
11
11
  import type { KuboNode } from 'ipfsd-ctl'
12
12
 
13
13
  describe('@helia/unixfs - bitswap', () => {
@@ -39,22 +39,20 @@ describe('@helia/unixfs - bitswap', () => {
39
39
  const size = chunkSize * 10
40
40
  const input: Uint8Array[] = []
41
41
 
42
- const candidate: FileCandidate = {
43
- content: (async function * () {
44
- for (let i = 0; i < size; i += chunkSize) {
45
- const buf = new Uint8Array(chunkSize)
46
- input.push(buf)
42
+ const bytes: ByteStream = (async function * () {
43
+ for (let i = 0; i < size; i += chunkSize) {
44
+ const buf = new Uint8Array(chunkSize)
45
+ input.push(buf)
47
46
 
48
- yield buf
49
- }
50
- }())
51
- }
47
+ yield buf
48
+ }
49
+ }())
52
50
 
53
- const cid = await unixFs.addFile(candidate)
51
+ const cid = await unixFs.addByteStream(bytes)
54
52
 
55
- const bytes = await toBuffer(kubo.api.cat(CID.parse(cid.toString())))
53
+ const output = await toBuffer(kubo.api.cat(CID.parse(cid.toString())))
56
54
 
57
- expect(bytes).to.equalBytes(toBuffer(input))
55
+ expect(output).to.equalBytes(toBuffer(input))
58
56
  })
59
57
 
60
58
  it('should add a large file to kubo and fetch it from helia', async () => {
@@ -1,14 +1,20 @@
1
1
  /* eslint-env mocha */
2
2
 
3
- import { type AddOptions, type UnixFS, unixfs } from '@helia/unixfs'
3
+ import { unixfs } from '@helia/unixfs'
4
+ import * as dagPb from '@ipld/dag-pb'
5
+ import { multiaddr } from '@multiformats/multiaddr'
4
6
  import { expect } from 'aegir/chai'
5
7
  import { fixedSize } from 'ipfs-unixfs-importer/chunker'
6
8
  import { balanced } from 'ipfs-unixfs-importer/layout'
9
+ import drain from 'it-drain'
10
+ import last from 'it-last'
7
11
  import { CID } from 'multiformats/cid'
12
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
8
13
  import { createHeliaNode } from './fixtures/create-helia.js'
9
14
  import { createKuboNode } from './fixtures/create-kubo.js'
15
+ import type { AddOptions, UnixFS } from '@helia/unixfs'
10
16
  import type { HeliaLibp2p } from 'helia'
11
- import type { FileCandidate } from 'ipfs-unixfs-importer'
17
+ import type { ByteStream, ImportCandidateStream } from 'ipfs-unixfs-importer'
12
18
  import type { KuboNode } from 'ipfsd-ctl'
13
19
  import type { AddOptions as KuboAddOptions } from 'kubo-rpc-client'
14
20
 
@@ -17,19 +23,39 @@ describe('@helia/unixfs - files', () => {
17
23
  let unixFs: UnixFS
18
24
  let kubo: KuboNode
19
25
 
20
- async function importToHelia (data: FileCandidate, opts?: Partial<AddOptions>): Promise<CID> {
21
- const cid = await unixFs.addFile(data, opts)
26
+ async function importToHelia (data: ByteStream, opts?: Partial<AddOptions>): Promise<CID> {
27
+ const cid = await unixFs.addByteStream(data, opts)
22
28
 
23
29
  return cid
24
30
  }
25
31
 
26
- async function importToKubo (data: FileCandidate, opts?: KuboAddOptions): Promise<CID> {
27
- const result = await kubo.api.add(data.content, opts)
32
+ async function importDirectoryToHelia (data: ImportCandidateStream, opts?: Partial<AddOptions>): Promise<CID> {
33
+ const result = await last(unixFs.addAll(data, opts))
34
+
35
+ if (result == null) {
36
+ throw new Error('Nothing imported')
37
+ }
38
+
39
+ return CID.parse(result.cid.toString())
40
+ }
41
+
42
+ async function importToKubo (data: ByteStream, opts?: KuboAddOptions): Promise<CID> {
43
+ const result = await kubo.api.add(data, opts)
44
+
45
+ return CID.parse(result.cid.toString())
46
+ }
47
+
48
+ async function importDirectoryToKubo (data: ImportCandidateStream, opts?: KuboAddOptions): Promise<CID> {
49
+ const result = await last(kubo.api.addAll(data, opts))
50
+
51
+ if (result == null) {
52
+ throw new Error('Nothing imported')
53
+ }
28
54
 
29
55
  return CID.parse(result.cid.toString())
30
56
  }
31
57
 
32
- async function expectSameCid (data: () => FileCandidate, heliaOpts: Partial<AddOptions> = {}, kuboOpts: KuboAddOptions = {}): Promise<void> {
58
+ async function expectSameCid (data: () => ByteStream, heliaOpts: Partial<AddOptions> = {}, kuboOpts: KuboAddOptions = {}): Promise<void> {
33
59
  const heliaCid = await importToHelia(data(), {
34
60
  // these are the default kubo options
35
61
  cidVersion: 0,
@@ -65,9 +91,9 @@ describe('@helia/unixfs - files', () => {
65
91
  })
66
92
 
67
93
  it('should create the same CID for a small file', async () => {
68
- const candidate = (): FileCandidate => ({
69
- content: Uint8Array.from([0, 1, 2, 3, 4])
70
- })
94
+ const candidate = (): ByteStream => (async function * () {
95
+ yield Uint8Array.from([0, 1, 2, 3, 4])
96
+ }())
71
97
 
72
98
  await expectSameCid(candidate)
73
99
  })
@@ -76,14 +102,111 @@ describe('@helia/unixfs - files', () => {
76
102
  const chunkSize = 1024 * 1024
77
103
  const size = chunkSize * 10
78
104
 
79
- const candidate = (): FileCandidate => ({
80
- content: (async function * () {
81
- for (let i = 0; i < size; i += chunkSize) {
82
- yield new Uint8Array(chunkSize)
83
- }
84
- }())
85
- })
105
+ const candidate = (): ByteStream => (async function * () {
106
+ for (let i = 0; i < size; i += chunkSize) {
107
+ yield new Uint8Array(chunkSize)
108
+ }
109
+ }())
86
110
 
87
111
  await expectSameCid(candidate)
88
112
  })
113
+
114
+ it('should return the same directory stats', async () => {
115
+ const candidates = [{
116
+ path: '/foo1.txt',
117
+ content: uint8ArrayFromString('Hello World!')
118
+ }, {
119
+ path: '/foo2.txt',
120
+ content: uint8ArrayFromString('Hello World!')
121
+ }]
122
+
123
+ const heliaCid = await importDirectoryToHelia(candidates, {
124
+ wrapWithDirectory: true
125
+ })
126
+ const kuboCid = await importDirectoryToKubo(candidates, {
127
+ cidVersion: 1,
128
+ chunker: `size-${1024 * 1024}`,
129
+ rawLeaves: true,
130
+ wrapWithDirectory: true
131
+ })
132
+
133
+ expect(heliaCid.toString()).to.equal(kuboCid.toString())
134
+
135
+ const heliaStat = await unixFs.stat(heliaCid, {
136
+ extended: true
137
+ })
138
+ const kuboStat = await kubo.api.files.stat(`/ipfs/${kuboCid}`, {
139
+ withLocal: true
140
+ })
141
+
142
+ expect(heliaStat.dagSize.toString()).to.equal(kuboStat.cumulativeSize.toString())
143
+ expect(heliaStat.dagSize.toString()).to.equal(kuboStat.sizeLocal?.toString())
144
+
145
+ // +1 because kubo doesn't count the root directory block
146
+ expect(heliaStat.blocks.toString()).to.equal((kuboStat.blocks + 1).toString())
147
+ })
148
+
149
+ it('fetches missing blocks during stat', async () => {
150
+ const chunkSize = 1024 * 1024
151
+ const size = chunkSize * 10
152
+
153
+ const candidate = (): ByteStream => (async function * () {
154
+ for (let i = 0; i < size; i += chunkSize) {
155
+ yield new Uint8Array(new Array(chunkSize).fill(0).map((val, index) => {
156
+ return Math.floor(Math.random() * 256)
157
+ }))
158
+ }
159
+ }())
160
+
161
+ const largeFileCid = await importToKubo(candidate())
162
+ const info = await kubo.info()
163
+
164
+ await helia.libp2p.dial(info.multiaddrs.map(ma => multiaddr(ma)))
165
+
166
+ // pull all blocks from kubo
167
+ await drain(unixFs.cat(largeFileCid))
168
+
169
+ // check the root block
170
+ const block = await helia.blockstore.get(largeFileCid)
171
+ const node = dagPb.decode(block)
172
+
173
+ expect(node.Links).to.have.lengthOf(40)
174
+
175
+ const stats = await unixFs.stat(largeFileCid, {
176
+ extended: true
177
+ })
178
+
179
+ expect(stats.unixfs?.fileSize()).to.equal(10485760n)
180
+ expect(stats.blocks).to.equal(41n)
181
+ expect(stats.dagSize).to.equal(10488250n)
182
+ expect(stats.localSize).to.equal(10485760n)
183
+
184
+ // remove one of the blocks so we now have an incomplete DAG
185
+ await helia.blockstore.delete(node.Links[0].Hash)
186
+
187
+ // block count and local file/dag sizes should be smaller
188
+ const updatedStats = await unixFs.stat(largeFileCid, {
189
+ extended: true,
190
+ offline: true
191
+ })
192
+
193
+ expect(updatedStats.unixfs?.fileSize()).to.equal(10485760n)
194
+ expect(updatedStats.blocks).to.equal(40n)
195
+ expect(updatedStats.dagSize).to.equal(10226092n)
196
+ expect(updatedStats.localSize).to.equal(10223616n)
197
+
198
+ await new Promise<void>((resolve) => {
199
+ setTimeout(() => {
200
+ resolve()
201
+ }, 1_000)
202
+ })
203
+
204
+ // block count and local file/dag sizes should be smaller
205
+ const finalStats = await unixFs.stat(largeFileCid, {
206
+ extended: true
207
+ })
208
+
209
+ // should have fetched missing block from Kubo
210
+ expect(finalStats).to.deep.equal(stats, 'did not fetch missing block')
211
+ })
89
212
  })