@libp2p/peer-store 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +44 -0
  3. package/dist/src/address-book.d.ts +31 -0
  4. package/dist/src/address-book.d.ts.map +1 -0
  5. package/dist/src/address-book.js +265 -0
  6. package/dist/src/address-book.js.map +1 -0
  7. package/dist/src/errors.d.ts +5 -0
  8. package/dist/src/errors.d.ts.map +1 -0
  9. package/dist/src/errors.js +5 -0
  10. package/dist/src/errors.js.map +1 -0
  11. package/dist/src/index.d.ts +43 -0
  12. package/dist/src/index.d.ts.map +1 -0
  13. package/dist/src/index.js +88 -0
  14. package/dist/src/index.js.map +1 -0
  15. package/dist/src/key-book.d.ts +21 -0
  16. package/dist/src/key-book.d.ts.map +1 -0
  17. package/dist/src/key-book.js +98 -0
  18. package/dist/src/key-book.js.map +1 -0
  19. package/dist/src/metadata-book.d.ts +28 -0
  20. package/dist/src/metadata-book.d.ts.map +1 -0
  21. package/dist/src/metadata-book.js +168 -0
  22. package/dist/src/metadata-book.js.map +1 -0
  23. package/dist/src/pb/peer.d.ts +222 -0
  24. package/dist/src/pb/peer.js +641 -0
  25. package/dist/src/proto-book.d.ts +18 -0
  26. package/dist/src/proto-book.d.ts.map +1 -0
  27. package/dist/src/proto-book.js +170 -0
  28. package/dist/src/proto-book.js.map +1 -0
  29. package/dist/src/store.d.ts +37 -0
  30. package/dist/src/store.d.ts.map +1 -0
  31. package/dist/src/store.js +169 -0
  32. package/dist/src/store.js.map +1 -0
  33. package/package.json +162 -0
  34. package/src/README.md +145 -0
  35. package/src/address-book.ts +330 -0
  36. package/src/errors.ts +5 -0
  37. package/src/index.ts +123 -0
  38. package/src/key-book.ts +117 -0
  39. package/src/metadata-book.ts +200 -0
  40. package/src/pb/peer.d.ts +222 -0
  41. package/src/pb/peer.js +641 -0
  42. package/src/pb/peer.proto +31 -0
  43. package/src/proto-book.ts +204 -0
  44. package/src/store.ts +224 -0
@@ -0,0 +1,170 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import errcode from 'err-code';
3
+ import { codes } from './errors.js';
4
+ import { PeerId } from '@libp2p/peer-id';
5
+ import { base58btc } from 'multiformats/bases/base58';
6
+ const log = logger('libp2p:peer-store:proto-book');
7
+ const EVENT_NAME = 'change:protocols';
8
+ export class PeerStoreProtoBook {
9
+ /**
10
+ * The ProtoBook is responsible for keeping the known supported
11
+ * protocols of a peer
12
+ */
13
+ constructor(emit, store) {
14
+ this.emit = emit;
15
+ this.store = store;
16
+ }
17
+ async get(peerId) {
18
+ log('get wait for read lock');
19
+ const release = await this.store.lock.readLock();
20
+ log('get got read lock');
21
+ try {
22
+ const peer = await this.store.load(peerId);
23
+ return peer.protocols;
24
+ }
25
+ catch (err) {
26
+ if (err.code !== codes.ERR_NOT_FOUND) {
27
+ throw err;
28
+ }
29
+ }
30
+ finally {
31
+ log('get release read lock');
32
+ release();
33
+ }
34
+ return [];
35
+ }
36
+ async set(peerId, protocols) {
37
+ peerId = PeerId.fromPeerId(peerId);
38
+ if (!Array.isArray(protocols)) {
39
+ log.error('protocols must be provided to store data');
40
+ throw errcode(new Error('protocols must be provided'), codes.ERR_INVALID_PARAMETERS);
41
+ }
42
+ log('set await write lock');
43
+ const release = await this.store.lock.writeLock();
44
+ log('set got write lock');
45
+ let updatedPeer;
46
+ try {
47
+ try {
48
+ const peer = await this.store.load(peerId);
49
+ if (new Set([
50
+ ...protocols
51
+ ]).size === peer.protocols.length) {
52
+ return;
53
+ }
54
+ }
55
+ catch (err) {
56
+ if (err.code !== codes.ERR_NOT_FOUND) {
57
+ throw err;
58
+ }
59
+ }
60
+ updatedPeer = await this.store.patchOrCreate(peerId, {
61
+ protocols
62
+ });
63
+ log(`stored provided protocols for ${peerId.toString(base58btc)}`);
64
+ }
65
+ finally {
66
+ log('set release write lock');
67
+ release();
68
+ }
69
+ this.emit(EVENT_NAME, { peerId, protocols: updatedPeer.protocols });
70
+ }
71
+ async add(peerId, protocols) {
72
+ peerId = PeerId.fromPeerId(peerId);
73
+ if (!Array.isArray(protocols)) {
74
+ log.error('protocols must be provided to store data');
75
+ throw errcode(new Error('protocols must be provided'), codes.ERR_INVALID_PARAMETERS);
76
+ }
77
+ log('add await write lock');
78
+ const release = await this.store.lock.writeLock();
79
+ log('add got write lock');
80
+ let updatedPeer;
81
+ try {
82
+ try {
83
+ const peer = await this.store.load(peerId);
84
+ if (new Set([
85
+ ...peer.protocols,
86
+ ...protocols
87
+ ]).size === peer.protocols.length) {
88
+ return;
89
+ }
90
+ }
91
+ catch (err) {
92
+ if (err.code !== codes.ERR_NOT_FOUND) {
93
+ throw err;
94
+ }
95
+ }
96
+ updatedPeer = await this.store.mergeOrCreate(peerId, {
97
+ protocols
98
+ });
99
+ log(`added provided protocols for ${peerId.toString(base58btc)}`);
100
+ }
101
+ finally {
102
+ log('add release write lock');
103
+ release();
104
+ }
105
+ this.emit(EVENT_NAME, { peerId, protocols: updatedPeer.protocols });
106
+ }
107
+ async remove(peerId, protocols) {
108
+ peerId = PeerId.fromPeerId(peerId);
109
+ if (!Array.isArray(protocols)) {
110
+ log.error('protocols must be provided to store data');
111
+ throw errcode(new Error('protocols must be provided'), codes.ERR_INVALID_PARAMETERS);
112
+ }
113
+ log('remove await write lock');
114
+ const release = await this.store.lock.writeLock();
115
+ log('remove got write lock');
116
+ let updatedPeer;
117
+ try {
118
+ try {
119
+ const peer = await this.store.load(peerId);
120
+ const protocolSet = new Set(peer.protocols);
121
+ for (const protocol of protocols) {
122
+ protocolSet.delete(protocol);
123
+ }
124
+ if (peer.protocols.length === protocolSet.size) {
125
+ return;
126
+ }
127
+ protocols = Array.from(protocolSet);
128
+ }
129
+ catch (err) {
130
+ if (err.code !== codes.ERR_NOT_FOUND) {
131
+ throw err;
132
+ }
133
+ }
134
+ updatedPeer = await this.store.patchOrCreate(peerId, {
135
+ protocols
136
+ });
137
+ }
138
+ finally {
139
+ log('remove release write lock');
140
+ release();
141
+ }
142
+ this.emit(EVENT_NAME, { peerId, protocols: updatedPeer.protocols });
143
+ }
144
+ async delete(peerId) {
145
+ peerId = PeerId.fromPeerId(peerId);
146
+ log('delete await write lock');
147
+ const release = await this.store.lock.writeLock();
148
+ log('delete got write lock');
149
+ let has;
150
+ try {
151
+ has = await this.store.has(peerId);
152
+ await this.store.patchOrCreate(peerId, {
153
+ protocols: []
154
+ });
155
+ }
156
+ catch (err) {
157
+ if (err.code !== codes.ERR_NOT_FOUND) {
158
+ throw err;
159
+ }
160
+ }
161
+ finally {
162
+ log('delete release write lock');
163
+ release();
164
+ }
165
+ if (has) {
166
+ this.emit(EVENT_NAME, { peerId, protocols: [] });
167
+ }
168
+ }
169
+ }
170
+ //# sourceMappingURL=proto-book.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proto-book.js","sourceRoot":"","sources":["../../src/proto-book.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { PeerId } from '@libp2p/peer-id';
2
+ import { Key } from 'interface-datastore/key';
3
+ import type { Peer } from '@libp2p/interfaces/peer-store';
4
+ import type { Datastore } from 'interface-datastore';
5
+ export interface Store {
6
+ has: (peerId: PeerId) => Promise<boolean>;
7
+ save: (peer: Peer) => Promise<Peer>;
8
+ load: (peerId: PeerId) => Promise<Peer>;
9
+ delete(peerId: PeerId): Promise<void>;
10
+ merge: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>;
11
+ mergeOrCreate: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>;
12
+ patch: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>;
13
+ patchOrCreate: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>;
14
+ all: () => AsyncIterable<Peer>;
15
+ lock: {
16
+ readLock: () => Promise<() => void>;
17
+ writeLock: () => Promise<() => void>;
18
+ };
19
+ }
20
+ export declare class PersistentStore {
21
+ private datastore;
22
+ lock: any;
23
+ constructor(datastore: Datastore);
24
+ _peerIdToDatastoreKey(peerId: PeerId): Key;
25
+ has(peerId: PeerId): Promise<boolean>;
26
+ delete(peerId: PeerId): Promise<void>;
27
+ load(peerId: PeerId): Promise<Peer>;
28
+ save(peer: Peer): Promise<Peer>;
29
+ patch(peerId: PeerId, data: Partial<Peer>): Promise<Peer>;
30
+ patchOrCreate(peerId: PeerId, data: Partial<Peer>): Promise<Peer>;
31
+ _patch(peerId: PeerId, data: Partial<Peer>, peer: Peer): Promise<Peer>;
32
+ merge(peerId: PeerId, data: Partial<Peer>): Promise<Peer>;
33
+ mergeOrCreate(peerId: PeerId, data: Partial<Peer>): Promise<Peer>;
34
+ _merge(peerId: PeerId, data: Partial<Peer>, peer: Peer): Promise<Peer>;
35
+ all(): AsyncGenerator<Peer, void, unknown>;
36
+ }
37
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAGxC,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAM7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAMpD,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,GAAG,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;IAE9B,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;QACnC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;KACrC,CAAA;CACF;AAGD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAW;IACrB,IAAI,EAAE,GAAG,CAAA;gBAEH,SAAS,EAAE,SAAS;IAQjC,qBAAqB,CAAE,MAAM,EAAE,MAAM;IAU/B,GAAG,CAAE,MAAM,EAAE,MAAM;IAInB,MAAM,CAAE,MAAM,EAAE,MAAM;IAItB,IAAI,CAAE,MAAM,EAAE,MAAM;IAqBpB,IAAI,CAAE,IAAI,EAAE,IAAI;IAqChB,KAAK,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IAM1C,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IAgBlD,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI;IAQvD,KAAK,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IAM1C,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IAiBlD,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI;IAoCrD,GAAG;CAWZ"}
@@ -0,0 +1,169 @@
1
+ import { logger } from '@libp2p/logger';
2
+ import { PeerId } from '@libp2p/peer-id';
3
+ import errcode from 'err-code';
4
+ import { codes } from './errors.js';
5
+ import { Key } from 'interface-datastore/key';
6
+ import { base32 } from 'multiformats/bases/base32';
7
+ import { Multiaddr } from '@multiformats/multiaddr';
8
+ import { Peer as PeerPB } from './pb/peer.js';
9
+ import mortice from 'mortice';
10
+ import { equals as uint8arrayEquals } from 'uint8arrays/equals';
11
+ const log = logger('libp2p:peer-store:store');
12
+ const NAMESPACE_COMMON = '/peers/';
13
+ export class PersistentStore {
14
+ constructor(datastore) {
15
+ this.datastore = datastore;
16
+ this.lock = mortice({
17
+ name: 'peer-store',
18
+ singleProcess: true
19
+ });
20
+ }
21
+ _peerIdToDatastoreKey(peerId) {
22
+ if (peerId.type == null) {
23
+ log.error('peerId must be an instance of peer-id to store data');
24
+ throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS);
25
+ }
26
+ const b32key = peerId.toString(base32);
27
+ return new Key(`${NAMESPACE_COMMON}b${b32key}`);
28
+ }
29
+ async has(peerId) {
30
+ return this.datastore.has(this._peerIdToDatastoreKey(peerId));
31
+ }
32
+ async delete(peerId) {
33
+ await this.datastore.delete(this._peerIdToDatastoreKey(peerId));
34
+ }
35
+ async load(peerId) {
36
+ const buf = await this.datastore.get(this._peerIdToDatastoreKey(peerId));
37
+ const peer = PeerPB.decode(buf);
38
+ const metadata = new Map();
39
+ for (const meta of peer.metadata) {
40
+ metadata.set(meta.key, meta.value);
41
+ }
42
+ return {
43
+ ...peer,
44
+ id: peerId,
45
+ addresses: peer.addresses.map(({ multiaddr, isCertified }) => ({
46
+ multiaddr: new Multiaddr(multiaddr),
47
+ isCertified: isCertified || false
48
+ })),
49
+ metadata,
50
+ peerRecordEnvelope: peer.peerRecordEnvelope || undefined
51
+ };
52
+ }
53
+ async save(peer) {
54
+ if (peer.pubKey != null && peer.id.publicKey != null && !uint8arrayEquals(peer.pubKey, peer.id.publicKey)) {
55
+ log.error('peer publicKey bytes do not match peer id publicKey bytes');
56
+ throw errcode(new Error('publicKey bytes do not match peer id publicKey bytes'), codes.ERR_INVALID_PARAMETERS);
57
+ }
58
+ // dedupe addresses
59
+ const addressSet = new Set();
60
+ const buf = PeerPB.encode({
61
+ addresses: peer.addresses
62
+ .filter(address => {
63
+ if (addressSet.has(address.multiaddr.toString())) {
64
+ return false;
65
+ }
66
+ addressSet.add(address.multiaddr.toString());
67
+ return true;
68
+ })
69
+ .sort((a, b) => {
70
+ return a.multiaddr.toString().localeCompare(b.multiaddr.toString());
71
+ })
72
+ .map(({ multiaddr, isCertified }) => ({
73
+ multiaddr: multiaddr.bytes,
74
+ isCertified
75
+ })),
76
+ protocols: peer.protocols.sort(),
77
+ pubKey: peer.pubKey,
78
+ metadata: [...peer.metadata.keys()].sort().map(key => ({ key, value: peer.metadata.get(key) })),
79
+ peerRecordEnvelope: peer.peerRecordEnvelope
80
+ }).finish();
81
+ await this.datastore.put(this._peerIdToDatastoreKey(peer.id), buf);
82
+ return this.load(peer.id);
83
+ }
84
+ async patch(peerId, data) {
85
+ const peer = await this.load(peerId);
86
+ return await this._patch(peerId, data, peer);
87
+ }
88
+ async patchOrCreate(peerId, data) {
89
+ let peer;
90
+ try {
91
+ peer = await this.load(peerId);
92
+ }
93
+ catch (err) {
94
+ if (err.code !== codes.ERR_NOT_FOUND) {
95
+ throw err;
96
+ }
97
+ peer = { id: peerId, addresses: [], protocols: [], metadata: new Map() };
98
+ }
99
+ return await this._patch(peerId, data, peer);
100
+ }
101
+ async _patch(peerId, data, peer) {
102
+ return await this.save({
103
+ ...peer,
104
+ ...data,
105
+ id: peerId
106
+ });
107
+ }
108
+ async merge(peerId, data) {
109
+ const peer = await this.load(peerId);
110
+ return this._merge(peerId, data, peer);
111
+ }
112
+ async mergeOrCreate(peerId, data) {
113
+ /** @type {Peer} */
114
+ let peer;
115
+ try {
116
+ peer = await this.load(peerId);
117
+ }
118
+ catch (err) {
119
+ if (err.code !== codes.ERR_NOT_FOUND) {
120
+ throw err;
121
+ }
122
+ peer = { id: peerId, addresses: [], protocols: [], metadata: new Map() };
123
+ }
124
+ return await this._merge(peerId, data, peer);
125
+ }
126
+ async _merge(peerId, data, peer) {
127
+ // if the peer has certified addresses, use those in
128
+ // favour of the supplied versions
129
+ /** @type {Map<string, boolean>} */
130
+ const addresses = new Map();
131
+ (data.addresses || []).forEach(addr => {
132
+ addresses.set(addr.multiaddr.toString(), addr.isCertified);
133
+ });
134
+ peer.addresses.forEach(({ multiaddr, isCertified }) => {
135
+ const addrStr = multiaddr.toString();
136
+ addresses.set(addrStr, Boolean(addresses.get(addrStr) || isCertified));
137
+ });
138
+ return await this.save({
139
+ id: peerId,
140
+ addresses: Array.from(addresses.entries()).map(([addrStr, isCertified]) => {
141
+ return {
142
+ multiaddr: new Multiaddr(addrStr),
143
+ isCertified
144
+ };
145
+ }),
146
+ protocols: Array.from(new Set([
147
+ ...(peer.protocols || []),
148
+ ...(data.protocols || [])
149
+ ])),
150
+ metadata: new Map([
151
+ ...(peer.metadata ? peer.metadata.entries() : []),
152
+ ...(data.metadata ? data.metadata.entries() : [])
153
+ ]),
154
+ pubKey: data.pubKey || (peer != null ? peer.pubKey : undefined),
155
+ peerRecordEnvelope: data.peerRecordEnvelope || (peer != null ? peer.peerRecordEnvelope : undefined)
156
+ });
157
+ }
158
+ async *all() {
159
+ for await (const key of this.datastore.queryKeys({
160
+ prefix: NAMESPACE_COMMON
161
+ })) {
162
+ // /peers/${peer-id-as-libp2p-key-cid-string-in-base-32}
163
+ const base32Str = key.toString().split('/')[2];
164
+ const buf = base32.decode(base32Str);
165
+ yield this.load(PeerId.fromBytes(buf));
166
+ }
167
+ }
168
+ }
169
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,162 @@
1
+ {
2
+ "name": "@libp2p/peer-store",
3
+ "version": "0.0.0",
4
+ "description": "Stores information about peers libp2p knows on the network",
5
+ "license": "Apache-2.0 OR MIT",
6
+ "homepage": "https://github.com/libp2p/js-libp2p-interfaces/tree/master/packages/libp2p-peer-store#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/libp2p/js-libp2p-interfaces.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/libp2p/js-libp2p-interfaces/issues"
13
+ },
14
+ "keywords": [
15
+ "IPFS"
16
+ ],
17
+ "engines": {
18
+ "node": ">=16.0.0",
19
+ "npm": ">=7.0.0"
20
+ },
21
+ "type": "module",
22
+ "types": "./dist/src/index.d.ts",
23
+ "files": [
24
+ "src",
25
+ "dist/src",
26
+ "!dist/test",
27
+ "!**/*.tsbuildinfo"
28
+ ],
29
+ "exports": {
30
+ ".": {
31
+ "import": "./dist/src/index.js"
32
+ }
33
+ },
34
+ "eslintConfig": {
35
+ "extends": "ipfs",
36
+ "parserOptions": {
37
+ "sourceType": "module"
38
+ },
39
+ "ignorePatterns": [
40
+ "*.d.ts"
41
+ ]
42
+ },
43
+ "release": {
44
+ "branches": [
45
+ "master"
46
+ ],
47
+ "plugins": [
48
+ [
49
+ "@semantic-release/commit-analyzer",
50
+ {
51
+ "preset": "conventionalcommits",
52
+ "releaseRules": [
53
+ {
54
+ "breaking": true,
55
+ "release": "major"
56
+ },
57
+ {
58
+ "revert": true,
59
+ "release": "patch"
60
+ },
61
+ {
62
+ "type": "feat",
63
+ "release": "minor"
64
+ },
65
+ {
66
+ "type": "fix",
67
+ "release": "patch"
68
+ },
69
+ {
70
+ "type": "chore",
71
+ "release": "patch"
72
+ },
73
+ {
74
+ "type": "docs",
75
+ "release": "patch"
76
+ },
77
+ {
78
+ "type": "test",
79
+ "release": "patch"
80
+ },
81
+ {
82
+ "scope": "no-release",
83
+ "release": false
84
+ }
85
+ ]
86
+ }
87
+ ],
88
+ [
89
+ "@semantic-release/release-notes-generator",
90
+ {
91
+ "preset": "conventionalcommits",
92
+ "presetConfig": {
93
+ "types": [
94
+ {
95
+ "type": "feat",
96
+ "section": "Features"
97
+ },
98
+ {
99
+ "type": "fix",
100
+ "section": "Bug Fixes"
101
+ },
102
+ {
103
+ "type": "chore",
104
+ "section": "Trivial Changes"
105
+ },
106
+ {
107
+ "type": "docs",
108
+ "section": "Trivial Changes"
109
+ },
110
+ {
111
+ "type": "test",
112
+ "section": "Tests"
113
+ }
114
+ ]
115
+ }
116
+ }
117
+ ],
118
+ "@semantic-release/changelog",
119
+ "@semantic-release/npm",
120
+ "@semantic-release/github",
121
+ "@semantic-release/git"
122
+ ]
123
+ },
124
+ "scripts": {
125
+ "lint": "aegir lint",
126
+ "dep-check": "aegir dep-check dist/src/**/*.js",
127
+ "build": "tsc",
128
+ "postbuild": "npm run build:copy-proto-files",
129
+ "generate": "npm run generate:proto && npm run generate:proto-types && tsc",
130
+ "generate:proto": "pbjs -t static-module -w es6 -r libp2p-peer-store --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/pb/peer.js ./src/pb/peer.proto",
131
+ "generate:proto-types": "pbts -o src/pb/peer.d.ts src/pb/peer.js",
132
+ "build:copy-proto-files": "mkdir -p dist/src/pb && cp src/pb/*.js dist/src/pb && cp src/pb/*.d.ts dist/src/pb",
133
+ "pretest": "npm run build",
134
+ "test": "aegir test -f ./dist/test",
135
+ "test:chrome": "npm run test -- -t browser",
136
+ "test:chrome-webworker": "npm run test -- -t webworker",
137
+ "test:firefox": "npm run test -- -t browser -- --browser firefox",
138
+ "test:firefox-webworker": "npm run test -- -t webworker -- --browser firefox",
139
+ "test:node": "npm run test -- -t node --cov",
140
+ "test:electron-main": "npm run test -- -t electron-main"
141
+ },
142
+ "dependencies": {
143
+ "@libp2p/interfaces": "^1.0.0",
144
+ "protobufjs": "^6.10.2",
145
+ "@libp2p/logger": "^1.0.1",
146
+ "interface-datastore": "^6.1.0",
147
+ "@multiformats/multiaddr": "^10.1.5",
148
+ "it-all": "^1.0.6",
149
+ "it-filter": "^1.0.3",
150
+ "it-pipe": "^2.0.3",
151
+ "it-map": "^1.0.6",
152
+ "it-foreach": "^0.1.1",
153
+ "mortice": "^3.0.0",
154
+ "multiformats": "^9.6.3",
155
+ "@libp2p/peer-record": "^0.0.0"
156
+ },
157
+ "devDependencies": {
158
+ "aegir": "^36.1.3",
159
+ "sinon": "^13.0.1",
160
+ "datastore-core": "^7.0.1"
161
+ }
162
+ }