@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.
- package/dist/src/car.spec.js +8 -10
- package/dist/src/car.spec.js.map +1 -1
- package/dist/src/fixtures/create-helia.browser.js +1 -1
- package/dist/src/fixtures/create-helia.browser.js.map +1 -1
- package/dist/src/fixtures/create-helia.js +1 -1
- package/dist/src/fixtures/create-helia.js.map +1 -1
- package/dist/src/unixfs-bitswap.spec.js +10 -12
- package/dist/src/unixfs-bitswap.spec.js.map +1 -1
- package/dist/src/unixfs-files.spec.js +107 -12
- package/dist/src/unixfs-files.spec.js.map +1 -1
- package/package.json +17 -15
- package/src/car.spec.ts +9 -11
- package/src/fixtures/create-helia.browser.ts +1 -1
- package/src/fixtures/create-helia.ts +1 -1
- package/src/unixfs-bitswap.spec.ts +11 -13
- package/src/unixfs-files.spec.ts +140 -17
package/dist/src/car.spec.js
CHANGED
|
@@ -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
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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();
|
package/dist/src/car.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"car.spec.js","sourceRoot":"","sources":["../../src/car.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ export async function createHeliaNode(libp2pOptions) {
|
|
|
37
37
|
clientMode: false
|
|
38
38
|
})
|
|
39
39
|
};
|
|
40
|
-
// remove
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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":"AAAA,sBAAsB;AAEtB,OAAO,EAAe,MAAM,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,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;AAK1D,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,KAAkB,CAAA;IACtB,IAAI,MAAc,CAAA;IAClB,IAAI,IAAc,CAAA;IAElB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;QAC/B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACtB,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,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;QAC7B,MAAM,IAAI,GAAG,SAAS,GAAG,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAiB,EAAE,CAAA;QAE9B,MAAM,
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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":"AAAA,sBAAsB;AAEtB,OAAO,
|
|
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.
|
|
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": "
|
|
63
|
-
"@helia/car": "
|
|
64
|
-
"@helia/dag-cbor": "
|
|
65
|
-
"@helia/dag-json": "
|
|
66
|
-
"@helia/http": "
|
|
67
|
-
"@helia/interface": "
|
|
68
|
-
"@helia/ipns": "
|
|
69
|
-
"@helia/json": "
|
|
70
|
-
"@helia/mfs": "
|
|
71
|
-
"@helia/routers": "
|
|
72
|
-
"@helia/strings": "
|
|
73
|
-
"@helia/unixfs": "
|
|
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.
|
|
84
|
-
"helia": "
|
|
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
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
54
|
+
yield buf
|
|
55
|
+
}
|
|
56
|
+
}())
|
|
59
57
|
|
|
60
|
-
const cid = await u.
|
|
58
|
+
const cid = await u.addByteStream(bytes)
|
|
61
59
|
const writer = memoryCarWriter(cid)
|
|
62
60
|
await c.export(cid, writer)
|
|
63
61
|
|
|
@@ -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
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
47
|
+
yield buf
|
|
48
|
+
}
|
|
49
|
+
}())
|
|
52
50
|
|
|
53
|
-
const cid = await unixFs.
|
|
51
|
+
const cid = await unixFs.addByteStream(bytes)
|
|
54
52
|
|
|
55
|
-
const
|
|
53
|
+
const output = await toBuffer(kubo.api.cat(CID.parse(cid.toString())))
|
|
56
54
|
|
|
57
|
-
expect(
|
|
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 () => {
|
package/src/unixfs-files.spec.ts
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
/* eslint-env mocha */
|
|
2
2
|
|
|
3
|
-
import {
|
|
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 {
|
|
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:
|
|
21
|
-
const cid = await unixFs.
|
|
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
|
|
27
|
-
const result = await
|
|
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: () =>
|
|
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 = ():
|
|
69
|
-
|
|
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 = ():
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
})
|