@helia/interop 10.2.5-6f8165b5 → 10.2.5-73a28eda
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/.aegir.js +1 -1
- package/dist/src/fixtures/create-helia.browser.d.ts.map +1 -1
- package/dist/src/fixtures/create-helia.browser.js +4 -11
- package/dist/src/fixtures/create-helia.browser.js.map +1 -1
- package/dist/src/fixtures/create-helia.d.ts.map +1 -1
- package/dist/src/fixtures/create-helia.js +4 -9
- package/dist/src/fixtures/create-helia.js.map +1 -1
- package/dist/src/fixtures/key-types.d.ts.map +1 -1
- package/dist/src/fixtures/key-types.js +0 -1
- package/dist/src/fixtures/key-types.js.map +1 -1
- package/dist/src/helia-blockstore.spec.js +2 -3
- package/dist/src/helia-blockstore.spec.js.map +1 -1
- package/dist/src/helia-progress-events.spec.js +2 -3
- package/dist/src/helia-progress-events.spec.js.map +1 -1
- package/dist/src/ipns-http.spec.js +6 -3
- package/dist/src/ipns-http.spec.js.map +1 -1
- package/dist/src/ipns-pubsub.spec.js +5 -8
- package/dist/src/ipns-pubsub.spec.js.map +1 -1
- package/dist/src/ipns.spec.js +29 -23
- package/dist/src/ipns.spec.js.map +1 -1
- package/package.json +18 -20
- package/src/fixtures/create-helia.browser.ts +4 -12
- package/src/fixtures/create-helia.ts +4 -9
- package/src/fixtures/key-types.ts +0 -1
- package/src/helia-blockstore.spec.ts +2 -3
- package/src/helia-progress-events.spec.ts +2 -3
- package/src/ipns-http.spec.ts +8 -3
- package/src/ipns-pubsub.spec.ts +5 -8
- package/src/ipns.spec.ts +36 -22
package/.aegir.js
CHANGED
|
@@ -6,7 +6,7 @@ import { path } from 'kubo'
|
|
|
6
6
|
/** @type {import('aegir').PartialOptions} */
|
|
7
7
|
export default {
|
|
8
8
|
test: {
|
|
9
|
-
files: './
|
|
9
|
+
files: './src/*.spec.ts',
|
|
10
10
|
before: async (options) => {
|
|
11
11
|
if (options.runner !== 'node') {
|
|
12
12
|
const ipfsdPort = await getPort()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-helia.browser.d.ts","sourceRoot":"","sources":["../../../src/fixtures/create-helia.browser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-helia.browser.d.ts","sourceRoot":"","sources":["../../../src/fixtures/create-helia.browser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAE3C,wBAAsB,eAAe,IAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;AACvF,wBAAsB,eAAe,CAAE,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAG,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { bitswap } from '@helia/block-brokers';
|
|
2
|
-
import { ipnsValidator, ipnsSelector } from '@helia/ipns';
|
|
3
2
|
import { kadDHT, removePublicAddressesMapper } from '@libp2p/kad-dht';
|
|
4
3
|
import { webSockets } from '@libp2p/websockets';
|
|
5
4
|
import { sha3512 } from '@multiformats/sha3';
|
|
@@ -21,14 +20,6 @@ export async function createHeliaNode(libp2pOptions) {
|
|
|
21
20
|
...(defaults.services ?? {}),
|
|
22
21
|
...(libp2pOptions?.services ?? {}),
|
|
23
22
|
dht: kadDHT({
|
|
24
|
-
validators: {
|
|
25
|
-
ipns: ipnsValidator
|
|
26
|
-
},
|
|
27
|
-
selectors: {
|
|
28
|
-
ipns: ipnsSelector
|
|
29
|
-
},
|
|
30
|
-
// skips waiting for the initial self-query to find peers
|
|
31
|
-
allowQueryWithZeroPeers: true,
|
|
32
23
|
protocol: '/ipfs/lan/kad/1.0.0',
|
|
33
24
|
peerInfoMapper: removePublicAddressesMapper,
|
|
34
25
|
clientMode: false
|
|
@@ -41,8 +32,10 @@ export async function createHeliaNode(libp2pOptions) {
|
|
|
41
32
|
delete defaults.services.autoNAT;
|
|
42
33
|
// @ts-expect-error services.dcutr is not optional
|
|
43
34
|
delete defaults.services.dcutr;
|
|
44
|
-
// @ts-expect-error services.
|
|
45
|
-
delete defaults.services.
|
|
35
|
+
// @ts-expect-error services.delegatedContentRouting is not optional
|
|
36
|
+
delete defaults.services.delegatedContentRouting;
|
|
37
|
+
// @ts-expect-error services.delegatedPeerRouting is not optional
|
|
38
|
+
delete defaults.services.delegatedPeerRouting;
|
|
46
39
|
return createHelia({
|
|
47
40
|
blockBrokers: [
|
|
48
41
|
bitswap()
|
|
@@ -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,
|
|
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,MAAM,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,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,EAAE;KACb,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,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,oEAAoE;IACpE,OAAO,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAA;IAChD,iEAAiE;IACjE,OAAO,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAA;IAE7C,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-helia.d.ts","sourceRoot":"","sources":["../../../src/fixtures/create-helia.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-helia.d.ts","sourceRoot":"","sources":["../../../src/fixtures/create-helia.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAE3C,wBAAsB,eAAe,IAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;AACvF,wBAAsB,eAAe,CAAE,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAG,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { bitswap } from '@helia/block-brokers';
|
|
2
|
-
import { ipnsValidator, ipnsSelector } from '@helia/ipns';
|
|
3
2
|
import { kadDHT, removePublicAddressesMapper } from '@libp2p/kad-dht';
|
|
4
3
|
import { sha3512 } from '@multiformats/sha3';
|
|
5
4
|
import { createHelia, libp2pDefaults } from 'helia';
|
|
@@ -14,12 +13,6 @@ export async function createHeliaNode(libp2pOptions) {
|
|
|
14
13
|
...(defaults.services ?? {}),
|
|
15
14
|
...(libp2pOptions?.services ?? {}),
|
|
16
15
|
dht: kadDHT({
|
|
17
|
-
validators: {
|
|
18
|
-
ipns: ipnsValidator
|
|
19
|
-
},
|
|
20
|
-
selectors: {
|
|
21
|
-
ipns: ipnsSelector
|
|
22
|
-
},
|
|
23
16
|
protocol: '/ipfs/lan/kad/1.0.0',
|
|
24
17
|
peerInfoMapper: removePublicAddressesMapper,
|
|
25
18
|
clientMode: false
|
|
@@ -34,8 +27,10 @@ export async function createHeliaNode(libp2pOptions) {
|
|
|
34
27
|
delete defaults.services.upnp;
|
|
35
28
|
// @ts-expect-error services.dcutr is not optional
|
|
36
29
|
delete defaults.services.dcutr;
|
|
37
|
-
// @ts-expect-error services.
|
|
38
|
-
delete defaults.services.
|
|
30
|
+
// @ts-expect-error services.delegatedContentRouting is not optional
|
|
31
|
+
delete defaults.services.delegatedContentRouting;
|
|
32
|
+
// @ts-expect-error services.delegatedPeerRouting is not optional
|
|
33
|
+
delete defaults.services.delegatedPeerRouting;
|
|
39
34
|
// @ts-expect-error services.autoTLS is not optional
|
|
40
35
|
delete defaults.services.autoTLS;
|
|
41
36
|
return createHelia({
|
|
@@ -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,
|
|
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,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,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,oEAAoE;IACpE,OAAO,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAA;IAChD,iEAAiE;IACjE,OAAO,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAA;IAC7C,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-types.d.ts","sourceRoot":"","sources":["../../../src/fixtures/key-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,eAAO,MAAM,QAAQ,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"key-types.d.ts","sourceRoot":"","sources":["../../../src/fixtures/key-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,eAAO,MAAM,QAAQ,EAAE,OAAO,EAG7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-types.js","sourceRoot":"","sources":["../../../src/fixtures/key-types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,SAAS;IACT,
|
|
1
|
+
{"version":3,"file":"key-types.js","sourceRoot":"","sources":["../../../src/fixtures/key-types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,SAAS;IACT,KAAK;CACN,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { randomBytes } from '@libp2p/crypto';
|
|
2
1
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
3
2
|
import { expect } from 'aegir/chai';
|
|
4
3
|
import toBuffer from 'it-to-buffer';
|
|
@@ -27,7 +26,7 @@ describe('helia - blockstore', () => {
|
|
|
27
26
|
}
|
|
28
27
|
});
|
|
29
28
|
it('should be able to send a block', async () => {
|
|
30
|
-
const input =
|
|
29
|
+
const input = crypto.getRandomValues(new Uint8Array(10));
|
|
31
30
|
const digest = await sha256.digest(input);
|
|
32
31
|
const cid = CID.createV1(raw.code, digest);
|
|
33
32
|
await helia.blockstore.put(cid, input);
|
|
@@ -35,7 +34,7 @@ describe('helia - blockstore', () => {
|
|
|
35
34
|
expect(output).to.equalBytes(input);
|
|
36
35
|
});
|
|
37
36
|
it('should be able to receive a block', async () => {
|
|
38
|
-
const input =
|
|
37
|
+
const input = crypto.getRandomValues(new Uint8Array(10));
|
|
39
38
|
const { cid } = await kubo.api.add({ content: input }, {
|
|
40
39
|
cidVersion: 1,
|
|
41
40
|
rawLeaves: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helia-blockstore.spec.js","sourceRoot":"","sources":["../../src/helia-blockstore.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"helia-blockstore.spec.js","sourceRoot":"","sources":["../../src/helia-blockstore.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,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,KAAK,GAAG,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAI1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,KAAY,CAAA;IAChB,IAAI,IAAc,CAAA;IAClB,IAAI,QAAkB,CAAA;IAEtB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,IAAI,GAAG,MAAM,cAAc,EAAE,CAAA;QAC7B,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC5B,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;QAE/B,wBAAwB;QACxB,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACzE,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,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;QACxD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC1C,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACtC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;QACxD,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACrD,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;QAE9E,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { randomBytes } from '@libp2p/crypto';
|
|
2
1
|
import { contentRoutingSymbol } from '@libp2p/interface';
|
|
3
2
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
4
3
|
import { CODE_P2P, multiaddr } from '@multiformats/multiaddr';
|
|
@@ -53,7 +52,7 @@ describe('helia - progress events', () => {
|
|
|
53
52
|
}
|
|
54
53
|
});
|
|
55
54
|
it('should yield routing events', async () => {
|
|
56
|
-
const input =
|
|
55
|
+
const input = crypto.getRandomValues(new Uint8Array(10));
|
|
57
56
|
const { cid } = await kubo.api.add({ content: input }, {
|
|
58
57
|
cidVersion: 1,
|
|
59
58
|
rawLeaves: true
|
|
@@ -71,7 +70,7 @@ describe('helia - progress events', () => {
|
|
|
71
70
|
expect(events.get('helia:routing:find-providers:end')).to.be.greaterThan(0);
|
|
72
71
|
});
|
|
73
72
|
it('should yield block broker events', async () => {
|
|
74
|
-
const input =
|
|
73
|
+
const input = crypto.getRandomValues(new Uint8Array(10));
|
|
75
74
|
const { cid } = await kubo.api.add({ content: input }, {
|
|
76
75
|
cidVersion: 1,
|
|
77
76
|
rawLeaves: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helia-progress-events.spec.js","sourceRoot":"","sources":["../../src/helia-progress-events.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"helia-progress-events.spec.js","sourceRoot":"","sources":["../../src/helia-progress-events.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { ipns } from '@helia/ipns';
|
|
|
3
3
|
import { delegatedHTTPRouting } from '@helia/routers';
|
|
4
4
|
import { peerIdFromCID } from '@libp2p/peer-id';
|
|
5
5
|
import { expect } from 'aegir/chai';
|
|
6
|
+
import last from 'it-last';
|
|
6
7
|
import { CID } from 'multiformats/cid';
|
|
7
8
|
import { isNode } from 'wherearewe';
|
|
8
9
|
import { createKuboNode } from "./fixtures/create-kubo.js";
|
|
@@ -49,9 +50,11 @@ describe('@helia/ipns - http', () => {
|
|
|
49
50
|
key: keyName
|
|
50
51
|
});
|
|
51
52
|
const key = peerIdFromCID(CID.parse(res.name));
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
const result = await last(name.resolve(key.toMultihash()));
|
|
54
|
+
if (result == null) {
|
|
55
|
+
throw new Error('No results found');
|
|
56
|
+
}
|
|
57
|
+
expect(result.record.value).to.equal(`/ipfs/${cid}`);
|
|
55
58
|
});
|
|
56
59
|
});
|
|
57
60
|
//# sourceMappingURL=ipns-http.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipns-http.spec.js","sourceRoot":"","sources":["../../src/ipns-http.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAM1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,KAAyB,CAAA;IAC7B,IAAI,IAAc,CAAA;IAClB,IAAI,IAAU,CAAA;IAEd;;;;OAIG;IACH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,IAAI,GAAG,MAAM,cAAc,EAAE,CAAA;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAClC,KAAK,GAAG,MAAM,eAAe,CAAC;YAC5B,OAAO,EAAE;gBACP,oBAAoB,CAAC;oBACnB,GAAG,EAAE,QAAQ,CAAC,OAAO;iBACtB,CAAC;aACH;SACF,CAAC,CAAA;QACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACpB,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,6CAA6C,EAAE,KAAK;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,iFAAiF;YACjF,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;QACpB,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAA;QAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAEpE,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;YAC9B,IAAI,EAAE,SAAS;SAChB,CAAC,CAAA;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAC3C,GAAG,EAAE,OAAO;SACb,CAAC,CAAA;QAEF,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9C,
|
|
1
|
+
{"version":3,"file":"ipns-http.spec.js","sourceRoot":"","sources":["../../src/ipns-http.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAM1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,KAAyB,CAAA;IAC7B,IAAI,IAAc,CAAA;IAClB,IAAI,IAAU,CAAA;IAEd;;;;OAIG;IACH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,IAAI,GAAG,MAAM,cAAc,EAAE,CAAA;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAClC,KAAK,GAAG,MAAM,eAAe,CAAC;YAC5B,OAAO,EAAE;gBACP,oBAAoB,CAAC;oBACnB,GAAG,EAAE,QAAQ,CAAC,OAAO;iBACtB,CAAC;aACH;SACF,CAAC,CAAA;QACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACpB,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,6CAA6C,EAAE,KAAK;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,iFAAiF;YACjF,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;QACpB,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAA;QAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAEpE,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;YAC9B,IAAI,EAAE,SAAS;SAChB,CAAC,CAAA;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAC3C,GAAG,EAAE,OAAO;SACb,CAAC,CAAA;QAEF,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAE1D,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACrC,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/* eslint max-nested-callbacks: ["error", 5] */
|
|
2
2
|
import { ipns } from '@helia/ipns';
|
|
3
3
|
import { pubsub } from '@helia/ipns/routing';
|
|
4
|
-
import { generateKeyPair } from '@libp2p/crypto/keys';
|
|
5
4
|
import { floodsub } from '@libp2p/floodsub';
|
|
6
5
|
import { peerIdFromCID } from '@libp2p/peer-id';
|
|
7
6
|
import { expect } from 'aegir/chai';
|
|
@@ -55,12 +54,11 @@ keyTypes.filter(keyType => keyType !== 'RSA').forEach(keyType => {
|
|
|
55
54
|
const input = Uint8Array.from([0, 1, 2, 3, 4]);
|
|
56
55
|
const digest = await sha256.digest(input);
|
|
57
56
|
const cid = CID.createV1(raw.code, digest);
|
|
58
|
-
const privateKey = await generateKeyPair('Ed25519');
|
|
59
57
|
const keyName = 'my-ipns-key';
|
|
60
|
-
await helia.
|
|
58
|
+
const privateKey = await helia.keychain.generateKey(keyName);
|
|
61
59
|
// first call to pubsub resolver will fail but we should trigger
|
|
62
60
|
// subscribing pubsub for updates
|
|
63
|
-
await expect(last(kubo.api.name.resolve(privateKey.publicKey
|
|
61
|
+
await expect(last(kubo.api.name.resolve(`${privateKey.publicKey}`, {
|
|
64
62
|
timeout: 100
|
|
65
63
|
}))).to.eventually.be.undefined();
|
|
66
64
|
// wait for kubo to be subscribed to updates
|
|
@@ -111,7 +109,7 @@ keyTypes.filter(keyType => keyType !== 'RSA').forEach(keyType => {
|
|
|
111
109
|
throw new Error('Incorrect hash type');
|
|
112
110
|
}
|
|
113
111
|
// first call to pubsub resolver should fail but we should now be subscribed for updates
|
|
114
|
-
await expect(name.resolve(peerCid.multihash)).to.eventually.be.rejected();
|
|
112
|
+
await expect(last(name.resolve(peerCid.multihash))).to.eventually.be.rejected();
|
|
115
113
|
// actual pubsub subscription name
|
|
116
114
|
const subscriptionName = `/record/${uint8ArrayToString(uint8ArrayConcat([
|
|
117
115
|
uint8ArrayFromString('/ipns/'),
|
|
@@ -140,8 +138,7 @@ keyTypes.filter(keyType => keyType !== 'RSA').forEach(keyType => {
|
|
|
140
138
|
// we should get an update eventually
|
|
141
139
|
await waitFor(async () => {
|
|
142
140
|
try {
|
|
143
|
-
|
|
144
|
-
resolveResult = await name.resolve(peerId.toMultihash());
|
|
141
|
+
resolveResult = await last(name.resolve(peerId.toMultihash()));
|
|
145
142
|
return true;
|
|
146
143
|
}
|
|
147
144
|
catch {
|
|
@@ -154,7 +151,7 @@ keyTypes.filter(keyType => keyType !== 'RSA').forEach(keyType => {
|
|
|
154
151
|
if (resolveResult == null) {
|
|
155
152
|
throw new Error('Failed to resolve CID');
|
|
156
153
|
}
|
|
157
|
-
expect(resolveResult.
|
|
154
|
+
expect(resolveResult.record.value).to.equal(`/ipfs/${cid}`);
|
|
158
155
|
});
|
|
159
156
|
});
|
|
160
157
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipns-pubsub.spec.js","sourceRoot":"","sources":["../../src/ipns-pubsub.spec.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ipns-pubsub.spec.js","sourceRoot":"","sources":["../../src/ipns-pubsub.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/src/ipns.spec.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ipns } from '@helia/ipns';
|
|
2
|
-
import { generateKeyPair, privateKeyToProtobuf } from '@libp2p/crypto/keys';
|
|
3
2
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
4
3
|
import { expect } from 'aegir/chai';
|
|
5
|
-
import { multihashToIPNSRoutingKey } from 'ipns';
|
|
6
4
|
import last from 'it-last';
|
|
5
|
+
import { base36 } from 'multiformats/bases/base36';
|
|
7
6
|
import { CID } from 'multiformats/cid';
|
|
8
7
|
import * as raw from 'multiformats/codecs/raw';
|
|
9
8
|
import { sha256 } from 'multiformats/hashes/sha2';
|
|
9
|
+
import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
|
|
10
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
10
11
|
import { isElectronMain } from 'wherearewe';
|
|
11
12
|
import { connect } from "./fixtures/connect.js";
|
|
12
13
|
import { createHeliaNode } from "./fixtures/create-helia.js";
|
|
@@ -14,6 +15,12 @@ import { createKuboNode } from "./fixtures/create-kubo.js";
|
|
|
14
15
|
import { sortClosestPeers } from "./fixtures/create-peer-ids.js";
|
|
15
16
|
import { keyTypes } from "./fixtures/key-types.js";
|
|
16
17
|
import { waitFor } from "./fixtures/wait-for.js";
|
|
18
|
+
function multihashToIPNSRoutingKey(digest) {
|
|
19
|
+
return uint8ArrayConcat([
|
|
20
|
+
uint8ArrayFromString('/ipns/'),
|
|
21
|
+
digest.bytes
|
|
22
|
+
]);
|
|
23
|
+
}
|
|
17
24
|
keyTypes.forEach(type => {
|
|
18
25
|
describe(`@helia/ipns - default routing with ${type} keys`, () => {
|
|
19
26
|
let helia;
|
|
@@ -21,7 +28,7 @@ keyTypes.forEach(type => {
|
|
|
21
28
|
let name;
|
|
22
29
|
// the CID we are going to publish
|
|
23
30
|
let value;
|
|
24
|
-
// the
|
|
31
|
+
// the key we will use to publish the value
|
|
25
32
|
let key;
|
|
26
33
|
/**
|
|
27
34
|
* Ensure that for the CID we are going to publish, the resolver has a peer ID that
|
|
@@ -34,19 +41,15 @@ keyTypes.forEach(type => {
|
|
|
34
41
|
value = CID.createV1(raw.code, digest);
|
|
35
42
|
helia = await createHeliaNode();
|
|
36
43
|
kubo = await createKuboNode();
|
|
37
|
-
// find a
|
|
44
|
+
// find a key that is KAD-closer to the resolver than the publisher when
|
|
45
|
+
// used as an IPNS key
|
|
38
46
|
while (true) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
else {
|
|
46
|
-
key = await generateKeyPair('RSA', 2048);
|
|
47
|
-
}
|
|
48
|
-
// @ts-expect-error @libp2p/crypto needs dep updates
|
|
49
|
-
const routingKey = multihashToIPNSRoutingKey(key.publicKey?.toMultihash());
|
|
47
|
+
await helia.keychain.removeKey('test-key');
|
|
48
|
+
key = await helia.keychain.generateKey('test-key', {
|
|
49
|
+
type
|
|
50
|
+
});
|
|
51
|
+
await helia.keychain.removeKey('test-key');
|
|
52
|
+
const routingKey = multihashToIPNSRoutingKey(key.publicKey.toMultihash());
|
|
50
53
|
const [closest] = await sortClosestPeers(routingKey, [
|
|
51
54
|
helia.libp2p.peerId,
|
|
52
55
|
peerIdFromString((await kubo.api.id()).id.toString())
|
|
@@ -97,11 +100,10 @@ keyTypes.forEach(type => {
|
|
|
97
100
|
await kubo.stop();
|
|
98
101
|
}
|
|
99
102
|
});
|
|
100
|
-
it(
|
|
103
|
+
it('should publish on helia and resolve on kubo', async () => {
|
|
101
104
|
await createNodes('kubo');
|
|
102
|
-
const privateKey = await generateKeyPair('Ed25519');
|
|
103
105
|
const keyName = 'my-ipns-key';
|
|
104
|
-
await helia.
|
|
106
|
+
const privateKey = await helia.keychain.generateKey(keyName);
|
|
105
107
|
await name.publish(keyName, value);
|
|
106
108
|
const resolved = await last(kubo.api.name.resolve(privateKey.publicKey.toString()));
|
|
107
109
|
if (resolved == null) {
|
|
@@ -124,8 +126,7 @@ keyTypes.forEach(type => {
|
|
|
124
126
|
const { cid } = await kubo.api.add(Uint8Array.from([0, 1, 2, 3, 4]));
|
|
125
127
|
// ensure the key is in the kubo keychain so we can use it to publish the IPNS record
|
|
126
128
|
const body = new FormData();
|
|
127
|
-
|
|
128
|
-
body.append('key', new Blob([privateKeyToProtobuf(key)]));
|
|
129
|
+
body.append('key', new Blob([key.toProtobuf()]));
|
|
129
130
|
// can't use the kubo-rpc-api for this call yet
|
|
130
131
|
const config = kubo.api.getEndpointConfig();
|
|
131
132
|
const response = await fetch(`http://${config.host}:${config.port}${config.pathname}/key/import?arg=${keyName}`, {
|
|
@@ -133,14 +134,19 @@ keyTypes.forEach(type => {
|
|
|
133
134
|
body
|
|
134
135
|
});
|
|
135
136
|
expect(response).to.have.property('status', 200);
|
|
137
|
+
const json = await response.json();
|
|
138
|
+
expect(json.Id).to.equal(key.publicKey.toCID().toString(base36), 'did not import key correctly');
|
|
136
139
|
const oneHourNS = BigInt(60 * 60 * 1e+9);
|
|
137
140
|
await kubo.api.name.publish(cid, {
|
|
138
141
|
key: keyName,
|
|
139
142
|
ttl: '1h'
|
|
140
143
|
});
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
+
const result = await last(name.resolve(key.publicKey));
|
|
145
|
+
if (result == null) {
|
|
146
|
+
throw new Error('No result found');
|
|
147
|
+
}
|
|
148
|
+
expect(result.record.value).to.equal(`/ipfs/${cid}`);
|
|
149
|
+
expect(result.record.ttl).to.equal(oneHourNS);
|
|
144
150
|
});
|
|
145
151
|
});
|
|
146
152
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipns.spec.js","sourceRoot":"","sources":["../../src/ipns.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ipns.spec.js","sourceRoot":"","sources":["../../src/ipns.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": "10.2.5-
|
|
3
|
+
"version": "10.2.5-73a28eda",
|
|
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",
|
|
@@ -52,37 +52,35 @@
|
|
|
52
52
|
"test:electron-main": "aegir test -t electron-main"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@helia/block-brokers": "5.2.4-
|
|
56
|
-
"@helia/car": "5.4.2-
|
|
57
|
-
"@helia/dag-cbor": "5.1.1-
|
|
58
|
-
"@helia/dag-json": "5.1.1-
|
|
59
|
-
"@helia/dnslink": "1.2.1-
|
|
60
|
-
"@helia/http": "3.1.4-
|
|
61
|
-
"@helia/interface": "6.2.1-
|
|
62
|
-
"@helia/ipns": "9.2.1-
|
|
63
|
-
"@helia/json": "5.1.1-
|
|
64
|
-
"@helia/mfs": "7.1.1-
|
|
65
|
-
"@helia/routers": "5.1.1-
|
|
66
|
-
"@helia/strings": "5.1.1-
|
|
67
|
-
"@helia/unixfs": "7.2.1-
|
|
55
|
+
"@helia/block-brokers": "5.2.4-73a28eda",
|
|
56
|
+
"@helia/car": "5.4.2-73a28eda",
|
|
57
|
+
"@helia/dag-cbor": "5.1.1-73a28eda",
|
|
58
|
+
"@helia/dag-json": "5.1.1-73a28eda",
|
|
59
|
+
"@helia/dnslink": "1.2.1-73a28eda",
|
|
60
|
+
"@helia/http": "3.1.4-73a28eda",
|
|
61
|
+
"@helia/interface": "6.2.1-73a28eda",
|
|
62
|
+
"@helia/ipns": "9.2.1-73a28eda",
|
|
63
|
+
"@helia/json": "5.1.1-73a28eda",
|
|
64
|
+
"@helia/mfs": "7.1.1-73a28eda",
|
|
65
|
+
"@helia/routers": "5.1.1-73a28eda",
|
|
66
|
+
"@helia/strings": "5.1.1-73a28eda",
|
|
67
|
+
"@helia/unixfs": "7.2.1-73a28eda",
|
|
68
68
|
"@ipld/car": "^5.4.3",
|
|
69
69
|
"@ipld/dag-cbor": "^10.0.0",
|
|
70
70
|
"@ipld/dag-pb": "^4.1.5",
|
|
71
|
-
"@libp2p/crypto": "^5.1.15",
|
|
72
71
|
"@libp2p/floodsub": "^11.0.16",
|
|
73
72
|
"@libp2p/interface": "^3.2.0",
|
|
74
73
|
"@libp2p/kad-dht": "^16.2.0",
|
|
75
|
-
"@libp2p/keychain": "^6.
|
|
74
|
+
"@libp2p/keychain": "^6.1.1",
|
|
76
75
|
"@libp2p/peer-id": "^6.0.6",
|
|
77
76
|
"@libp2p/utils": "^7.0.15",
|
|
78
77
|
"@libp2p/websockets": "^10.1.8",
|
|
79
78
|
"@multiformats/multiaddr": "^13.0.1",
|
|
80
79
|
"@multiformats/sha3": "^4.0.0",
|
|
81
80
|
"aegir": "^48.0.4",
|
|
82
|
-
"helia": "6.1.4-
|
|
81
|
+
"helia": "6.1.4-73a28eda",
|
|
83
82
|
"ipfs-unixfs-importer": "^17.0.0",
|
|
84
83
|
"ipfsd-ctl": "^17.0.0",
|
|
85
|
-
"ipns": "^11.0.0",
|
|
86
84
|
"it-all": "^3.0.11",
|
|
87
85
|
"it-drain": "^3.0.12",
|
|
88
86
|
"it-last": "^3.0.11",
|
|
@@ -96,8 +94,8 @@
|
|
|
96
94
|
"wherearewe": "^2.0.1"
|
|
97
95
|
},
|
|
98
96
|
"browser": {
|
|
99
|
-
"./
|
|
100
|
-
"./
|
|
97
|
+
"./src/fixtures/create-helia.ts": "./src/fixtures/create-helia.browser.ts",
|
|
98
|
+
"./src/fixtures/create-kubo.ts": "./src/fixtures/create-kubo.browser.ts",
|
|
101
99
|
"./dist/src/bin.js": "./dist/src/index.js",
|
|
102
100
|
"kubo": false
|
|
103
101
|
},
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { bitswap } from '@helia/block-brokers'
|
|
2
|
-
import { ipnsValidator, ipnsSelector } from '@helia/ipns'
|
|
3
2
|
import { kadDHT, removePublicAddressesMapper } from '@libp2p/kad-dht'
|
|
4
3
|
import { webSockets } from '@libp2p/websockets'
|
|
5
4
|
import { sha3512 } from '@multiformats/sha3'
|
|
@@ -30,15 +29,6 @@ export async function createHeliaNode (libp2pOptions?: Libp2pOptions): Promise<H
|
|
|
30
29
|
...(defaults.services ?? {}),
|
|
31
30
|
...(libp2pOptions?.services ?? {}),
|
|
32
31
|
dht: kadDHT({
|
|
33
|
-
validators: {
|
|
34
|
-
ipns: ipnsValidator
|
|
35
|
-
},
|
|
36
|
-
selectors: {
|
|
37
|
-
ipns: ipnsSelector
|
|
38
|
-
},
|
|
39
|
-
// skips waiting for the initial self-query to find peers
|
|
40
|
-
allowQueryWithZeroPeers: true,
|
|
41
|
-
|
|
42
32
|
protocol: '/ipfs/lan/kad/1.0.0',
|
|
43
33
|
peerInfoMapper: removePublicAddressesMapper,
|
|
44
34
|
clientMode: false
|
|
@@ -53,8 +43,10 @@ export async function createHeliaNode (libp2pOptions?: Libp2pOptions): Promise<H
|
|
|
53
43
|
delete defaults.services.autoNAT
|
|
54
44
|
// @ts-expect-error services.dcutr is not optional
|
|
55
45
|
delete defaults.services.dcutr
|
|
56
|
-
// @ts-expect-error services.
|
|
57
|
-
delete defaults.services.
|
|
46
|
+
// @ts-expect-error services.delegatedContentRouting is not optional
|
|
47
|
+
delete defaults.services.delegatedContentRouting
|
|
48
|
+
// @ts-expect-error services.delegatedPeerRouting is not optional
|
|
49
|
+
delete defaults.services.delegatedPeerRouting
|
|
58
50
|
|
|
59
51
|
return createHelia<Libp2p<DefaultLibp2pServices>>({
|
|
60
52
|
blockBrokers: [
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { bitswap } from '@helia/block-brokers'
|
|
2
|
-
import { ipnsValidator, ipnsSelector } from '@helia/ipns'
|
|
3
2
|
import { kadDHT, removePublicAddressesMapper } from '@libp2p/kad-dht'
|
|
4
3
|
import { sha3512 } from '@multiformats/sha3'
|
|
5
4
|
import { createHelia, libp2pDefaults } from 'helia'
|
|
@@ -20,12 +19,6 @@ export async function createHeliaNode (libp2pOptions?: Libp2pOptions): Promise<H
|
|
|
20
19
|
...(defaults.services ?? {}),
|
|
21
20
|
...(libp2pOptions?.services ?? {}),
|
|
22
21
|
dht: kadDHT({
|
|
23
|
-
validators: {
|
|
24
|
-
ipns: ipnsValidator
|
|
25
|
-
},
|
|
26
|
-
selectors: {
|
|
27
|
-
ipns: ipnsSelector
|
|
28
|
-
},
|
|
29
22
|
protocol: '/ipfs/lan/kad/1.0.0',
|
|
30
23
|
peerInfoMapper: removePublicAddressesMapper,
|
|
31
24
|
clientMode: false
|
|
@@ -42,8 +35,10 @@ export async function createHeliaNode (libp2pOptions?: Libp2pOptions): Promise<H
|
|
|
42
35
|
delete defaults.services.upnp
|
|
43
36
|
// @ts-expect-error services.dcutr is not optional
|
|
44
37
|
delete defaults.services.dcutr
|
|
45
|
-
// @ts-expect-error services.
|
|
46
|
-
delete defaults.services.
|
|
38
|
+
// @ts-expect-error services.delegatedContentRouting is not optional
|
|
39
|
+
delete defaults.services.delegatedContentRouting
|
|
40
|
+
// @ts-expect-error services.delegatedPeerRouting is not optional
|
|
41
|
+
delete defaults.services.delegatedPeerRouting
|
|
47
42
|
// @ts-expect-error services.autoTLS is not optional
|
|
48
43
|
delete defaults.services.autoTLS
|
|
49
44
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { randomBytes } from '@libp2p/crypto'
|
|
2
1
|
import { multiaddr } from '@multiformats/multiaddr'
|
|
3
2
|
import { expect } from 'aegir/chai'
|
|
4
3
|
import toBuffer from 'it-to-buffer'
|
|
@@ -35,7 +34,7 @@ describe('helia - blockstore', () => {
|
|
|
35
34
|
})
|
|
36
35
|
|
|
37
36
|
it('should be able to send a block', async () => {
|
|
38
|
-
const input =
|
|
37
|
+
const input = crypto.getRandomValues(new Uint8Array(10))
|
|
39
38
|
const digest = await sha256.digest(input)
|
|
40
39
|
const cid = CID.createV1(raw.code, digest)
|
|
41
40
|
await helia.blockstore.put(cid, input)
|
|
@@ -45,7 +44,7 @@ describe('helia - blockstore', () => {
|
|
|
45
44
|
})
|
|
46
45
|
|
|
47
46
|
it('should be able to receive a block', async () => {
|
|
48
|
-
const input =
|
|
47
|
+
const input = crypto.getRandomValues(new Uint8Array(10))
|
|
49
48
|
const { cid } = await kubo.api.add({ content: input }, {
|
|
50
49
|
cidVersion: 1,
|
|
51
50
|
rawLeaves: true
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { randomBytes } from '@libp2p/crypto'
|
|
2
1
|
import { contentRoutingSymbol } from '@libp2p/interface'
|
|
3
2
|
import { peerIdFromString } from '@libp2p/peer-id'
|
|
4
3
|
import { CODE_P2P, multiaddr } from '@multiformats/multiaddr'
|
|
@@ -62,7 +61,7 @@ describe('helia - progress events', () => {
|
|
|
62
61
|
})
|
|
63
62
|
|
|
64
63
|
it('should yield routing events', async () => {
|
|
65
|
-
const input =
|
|
64
|
+
const input = crypto.getRandomValues(new Uint8Array(10))
|
|
66
65
|
const { cid } = await kubo.api.add({ content: input }, {
|
|
67
66
|
cidVersion: 1,
|
|
68
67
|
rawLeaves: true
|
|
@@ -82,7 +81,7 @@ describe('helia - progress events', () => {
|
|
|
82
81
|
})
|
|
83
82
|
|
|
84
83
|
it('should yield block broker events', async () => {
|
|
85
|
-
const input =
|
|
84
|
+
const input = crypto.getRandomValues(new Uint8Array(10))
|
|
86
85
|
const { cid } = await kubo.api.add({ content: input }, {
|
|
87
86
|
cidVersion: 1,
|
|
88
87
|
rawLeaves: true
|
package/src/ipns-http.spec.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { ipns } from '@helia/ipns'
|
|
|
3
3
|
import { delegatedHTTPRouting } from '@helia/routers'
|
|
4
4
|
import { peerIdFromCID } from '@libp2p/peer-id'
|
|
5
5
|
import { expect } from 'aegir/chai'
|
|
6
|
+
import last from 'it-last'
|
|
6
7
|
import { CID } from 'multiformats/cid'
|
|
7
8
|
import { isNode } from 'wherearewe'
|
|
8
9
|
import { createKuboNode } from './fixtures/create-kubo.ts'
|
|
@@ -62,8 +63,12 @@ describe('@helia/ipns - http', () => {
|
|
|
62
63
|
})
|
|
63
64
|
|
|
64
65
|
const key = peerIdFromCID(CID.parse(res.name))
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
const result = await last(name.resolve(key.toMultihash()))
|
|
67
|
+
|
|
68
|
+
if (result == null) {
|
|
69
|
+
throw new Error('No results found')
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
expect(result.record.value).to.equal(`/ipfs/${cid}`)
|
|
68
73
|
})
|
|
69
74
|
})
|
package/src/ipns-pubsub.spec.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import { ipns } from '@helia/ipns'
|
|
4
4
|
import { pubsub } from '@helia/ipns/routing'
|
|
5
|
-
import { generateKeyPair } from '@libp2p/crypto/keys'
|
|
6
5
|
import { floodsub } from '@libp2p/floodsub'
|
|
7
6
|
import { peerIdFromCID } from '@libp2p/peer-id'
|
|
8
7
|
import { expect } from 'aegir/chai'
|
|
@@ -70,13 +69,12 @@ keyTypes.filter(keyType => keyType !== 'RSA').forEach(keyType => {
|
|
|
70
69
|
const digest = await sha256.digest(input)
|
|
71
70
|
const cid = CID.createV1(raw.code, digest)
|
|
72
71
|
|
|
73
|
-
const privateKey = await generateKeyPair('Ed25519')
|
|
74
72
|
const keyName = 'my-ipns-key'
|
|
75
|
-
await helia.
|
|
73
|
+
const privateKey = await helia.keychain.generateKey(keyName)
|
|
76
74
|
|
|
77
75
|
// first call to pubsub resolver will fail but we should trigger
|
|
78
76
|
// subscribing pubsub for updates
|
|
79
|
-
await expect(last(kubo.api.name.resolve(privateKey.publicKey
|
|
77
|
+
await expect(last(kubo.api.name.resolve(`${privateKey.publicKey}`, {
|
|
80
78
|
timeout: 100
|
|
81
79
|
}))).to.eventually.be.undefined()
|
|
82
80
|
|
|
@@ -137,7 +135,7 @@ keyTypes.filter(keyType => keyType !== 'RSA').forEach(keyType => {
|
|
|
137
135
|
}
|
|
138
136
|
|
|
139
137
|
// first call to pubsub resolver should fail but we should now be subscribed for updates
|
|
140
|
-
await expect(name.resolve(peerCid.multihash)).to.eventually.be.rejected()
|
|
138
|
+
await expect(last(name.resolve(peerCid.multihash))).to.eventually.be.rejected()
|
|
141
139
|
|
|
142
140
|
// actual pubsub subscription name
|
|
143
141
|
const subscriptionName = `/record/${uint8ArrayToString(uint8ArrayConcat([
|
|
@@ -173,8 +171,7 @@ keyTypes.filter(keyType => keyType !== 'RSA').forEach(keyType => {
|
|
|
173
171
|
// we should get an update eventually
|
|
174
172
|
await waitFor(async () => {
|
|
175
173
|
try {
|
|
176
|
-
|
|
177
|
-
resolveResult = await name.resolve(peerId.toMultihash())
|
|
174
|
+
resolveResult = await last(name.resolve(peerId.toMultihash()))
|
|
178
175
|
|
|
179
176
|
return true
|
|
180
177
|
} catch {
|
|
@@ -189,7 +186,7 @@ keyTypes.filter(keyType => keyType !== 'RSA').forEach(keyType => {
|
|
|
189
186
|
throw new Error('Failed to resolve CID')
|
|
190
187
|
}
|
|
191
188
|
|
|
192
|
-
expect(resolveResult.
|
|
189
|
+
expect(resolveResult.record.value).to.equal(`/ipfs/${cid}`)
|
|
193
190
|
})
|
|
194
191
|
})
|
|
195
192
|
})
|
package/src/ipns.spec.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ipns } from '@helia/ipns'
|
|
2
|
-
import { generateKeyPair, privateKeyToProtobuf } from '@libp2p/crypto/keys'
|
|
3
2
|
import { peerIdFromString } from '@libp2p/peer-id'
|
|
4
3
|
import { expect } from 'aegir/chai'
|
|
5
|
-
import { multihashToIPNSRoutingKey } from 'ipns'
|
|
6
4
|
import last from 'it-last'
|
|
5
|
+
import { base36 } from 'multiformats/bases/base36'
|
|
7
6
|
import { CID } from 'multiformats/cid'
|
|
8
7
|
import * as raw from 'multiformats/codecs/raw'
|
|
9
8
|
import { sha256 } from 'multiformats/hashes/sha2'
|
|
9
|
+
import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
|
|
10
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
10
11
|
import { isElectronMain } from 'wherearewe'
|
|
11
12
|
import { connect } from './fixtures/connect.ts'
|
|
12
13
|
import { createHeliaNode } from './fixtures/create-helia.ts'
|
|
@@ -14,10 +15,19 @@ import { createKuboNode } from './fixtures/create-kubo.ts'
|
|
|
14
15
|
import { sortClosestPeers } from './fixtures/create-peer-ids.ts'
|
|
15
16
|
import { keyTypes } from './fixtures/key-types.ts'
|
|
16
17
|
import { waitFor } from './fixtures/wait-for.ts'
|
|
18
|
+
import type { PrivateKey } from '@helia/interface'
|
|
17
19
|
import type { IPNS } from '@helia/ipns'
|
|
18
|
-
import type { Libp2p
|
|
20
|
+
import type { Libp2p } from '@libp2p/interface'
|
|
19
21
|
import type { DefaultLibp2pServices, Helia } from 'helia'
|
|
20
22
|
import type { KuboNode } from 'ipfsd-ctl'
|
|
23
|
+
import type { MultihashDigest } from 'multiformats/cid'
|
|
24
|
+
|
|
25
|
+
function multihashToIPNSRoutingKey (digest: MultihashDigest): Uint8Array<ArrayBuffer> {
|
|
26
|
+
return uint8ArrayConcat([
|
|
27
|
+
uint8ArrayFromString('/ipns/'),
|
|
28
|
+
digest.bytes
|
|
29
|
+
])
|
|
30
|
+
}
|
|
21
31
|
|
|
22
32
|
keyTypes.forEach(type => {
|
|
23
33
|
describe(`@helia/ipns - default routing with ${type} keys`, () => {
|
|
@@ -28,7 +38,7 @@ keyTypes.forEach(type => {
|
|
|
28
38
|
// the CID we are going to publish
|
|
29
39
|
let value: CID
|
|
30
40
|
|
|
31
|
-
// the
|
|
41
|
+
// the key we will use to publish the value
|
|
32
42
|
let key: PrivateKey
|
|
33
43
|
|
|
34
44
|
/**
|
|
@@ -44,18 +54,16 @@ keyTypes.forEach(type => {
|
|
|
44
54
|
helia = await createHeliaNode()
|
|
45
55
|
kubo = await createKuboNode()
|
|
46
56
|
|
|
47
|
-
// find a
|
|
57
|
+
// find a key that is KAD-closer to the resolver than the publisher when
|
|
58
|
+
// used as an IPNS key
|
|
48
59
|
while (true) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
key = await generateKeyPair('RSA', 2048)
|
|
55
|
-
}
|
|
60
|
+
await helia.keychain.removeKey('test-key')
|
|
61
|
+
key = await helia.keychain.generateKey('test-key', {
|
|
62
|
+
type
|
|
63
|
+
})
|
|
64
|
+
await helia.keychain.removeKey('test-key')
|
|
56
65
|
|
|
57
|
-
|
|
58
|
-
const routingKey = multihashToIPNSRoutingKey(key.publicKey?.toMultihash())
|
|
66
|
+
const routingKey = multihashToIPNSRoutingKey(key.publicKey.toMultihash())
|
|
59
67
|
|
|
60
68
|
const [closest] = await sortClosestPeers(routingKey, [
|
|
61
69
|
helia.libp2p.peerId,
|
|
@@ -120,12 +128,11 @@ keyTypes.forEach(type => {
|
|
|
120
128
|
}
|
|
121
129
|
})
|
|
122
130
|
|
|
123
|
-
it(
|
|
131
|
+
it('should publish on helia and resolve on kubo', async () => {
|
|
124
132
|
await createNodes('kubo')
|
|
125
133
|
|
|
126
|
-
const privateKey = await generateKeyPair('Ed25519')
|
|
127
134
|
const keyName = 'my-ipns-key'
|
|
128
|
-
await helia.
|
|
135
|
+
const privateKey = await helia.keychain.generateKey(keyName)
|
|
129
136
|
await name.publish(keyName, value)
|
|
130
137
|
|
|
131
138
|
const resolved = await last(kubo.api.name.resolve(privateKey.publicKey.toString()))
|
|
@@ -156,8 +163,7 @@ keyTypes.forEach(type => {
|
|
|
156
163
|
|
|
157
164
|
// ensure the key is in the kubo keychain so we can use it to publish the IPNS record
|
|
158
165
|
const body = new FormData()
|
|
159
|
-
|
|
160
|
-
body.append('key', new Blob([privateKeyToProtobuf(key)]))
|
|
166
|
+
body.append('key', new Blob([key.toProtobuf()]))
|
|
161
167
|
|
|
162
168
|
// can't use the kubo-rpc-api for this call yet
|
|
163
169
|
const config = kubo.api.getEndpointConfig()
|
|
@@ -168,6 +174,9 @@ keyTypes.forEach(type => {
|
|
|
168
174
|
|
|
169
175
|
expect(response).to.have.property('status', 200)
|
|
170
176
|
|
|
177
|
+
const json = await response.json()
|
|
178
|
+
expect(json.Id).to.equal(key.publicKey.toCID().toString(base36), 'did not import key correctly')
|
|
179
|
+
|
|
171
180
|
const oneHourNS = BigInt(60 * 60 * 1e+9)
|
|
172
181
|
|
|
173
182
|
await kubo.api.name.publish(cid, {
|
|
@@ -175,9 +184,14 @@ keyTypes.forEach(type => {
|
|
|
175
184
|
ttl: '1h'
|
|
176
185
|
})
|
|
177
186
|
|
|
178
|
-
const
|
|
179
|
-
|
|
180
|
-
|
|
187
|
+
const result = await last(name.resolve(key.publicKey))
|
|
188
|
+
|
|
189
|
+
if (result == null) {
|
|
190
|
+
throw new Error('No result found')
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
expect(result.record.value).to.equal(`/ipfs/${cid}`)
|
|
194
|
+
expect(result.record.ttl).to.equal(oneHourNS)
|
|
181
195
|
})
|
|
182
196
|
})
|
|
183
197
|
})
|