@helia/interface 0.0.0-ab0a451 → 0.0.0-cff3aa3

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.
@@ -0,0 +1,19 @@
1
+ import type { ProgressEvent, ProgressOptions } from 'progress-events';
2
+ import type { CID } from 'multiformats/cid';
3
+ import type { BitswapNotifyProgressEvents, BitswapWantProgressEvents } from 'ipfs-bitswap';
4
+ import type { Blockstore } from 'interface-blockstore';
5
+ export interface Pair {
6
+ cid: CID;
7
+ block: Uint8Array;
8
+ }
9
+ export type HasBlockProgressEvents = ProgressEvent<'blocks:put:duplicate', CID> | ProgressEvent<'blocks:put:bitswap:notify', CID> | ProgressEvent<'blocks:put:blockstore:put', CID> | BitswapNotifyProgressEvents;
10
+ export type PutBlockProgressEvents = ProgressEvent<'blocks:put:duplicate', CID> | ProgressEvent<'blocks:put:bitswap:notify', CID> | ProgressEvent<'blocks:put:blockstore:put', CID> | BitswapNotifyProgressEvents;
11
+ export type PutManyBlocksProgressEvents = ProgressEvent<'blocks:put-many:duplicate', CID> | ProgressEvent<'blocks:put-many:bitswap:notify', CID> | ProgressEvent<'blocks:put-many:blockstore:put-many'> | BitswapNotifyProgressEvents;
12
+ export type GetBlockProgressEvents = ProgressEvent<'blocks:get:bitswap:want', CID> | ProgressEvent<'blocks:get:blockstore:get', CID> | ProgressEvent<'blocks:get:blockstore:put', CID> | BitswapWantProgressEvents;
13
+ export type GetManyBlocksProgressEvents = ProgressEvent<'blocks:get-many:blockstore:get-many'> | ProgressEvent<'blocks:get-many:bitswap:want', CID> | ProgressEvent<'blocks:get-many:blockstore:put', CID> | BitswapWantProgressEvents;
14
+ export type GetAllBlocksProgressEvents = ProgressEvent<'blocks:get-all:blockstore:get-many'>;
15
+ export type DeleteBlockProgressEvents = ProgressEvent<'blocks:delete:blockstore:delete', CID>;
16
+ export type DeleteManyBlocksProgressEvents = ProgressEvent<'blocks:delete-many:blockstore:delete-many'>;
17
+ export interface Blocks extends Blockstore<ProgressOptions<HasBlockProgressEvents>, ProgressOptions<PutBlockProgressEvents>, ProgressOptions<PutManyBlocksProgressEvents>, ProgressOptions<GetBlockProgressEvents>, ProgressOptions<GetManyBlocksProgressEvents>, ProgressOptions<GetAllBlocksProgressEvents>, ProgressOptions<DeleteBlockProgressEvents>, ProgressOptions<DeleteManyBlocksProgressEvents>> {
18
+ }
19
+ //# sourceMappingURL=blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAC1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,GAChC,aAAa,CAAC,sBAAsB,EAAE,GAAG,CAAC,GAC1C,aAAa,CAAC,2BAA2B,EAAE,GAAG,CAAC,GAC/C,aAAa,CAAC,2BAA2B,EAAE,GAAG,CAAC,GAC/C,2BAA2B,CAAA;AAE7B,MAAM,MAAM,sBAAsB,GAChC,aAAa,CAAC,sBAAsB,EAAE,GAAG,CAAC,GAC1C,aAAa,CAAC,2BAA2B,EAAE,GAAG,CAAC,GAC/C,aAAa,CAAC,2BAA2B,EAAE,GAAG,CAAC,GAC/C,2BAA2B,CAAA;AAE7B,MAAM,MAAM,2BAA2B,GACrC,aAAa,CAAC,2BAA2B,EAAE,GAAG,CAAC,GAC/C,aAAa,CAAC,gCAAgC,EAAE,GAAG,CAAC,GACpD,aAAa,CAAC,qCAAqC,CAAC,GACpD,2BAA2B,CAAA;AAE7B,MAAM,MAAM,sBAAsB,GAChC,aAAa,CAAC,yBAAyB,EAAE,GAAG,CAAC,GAC7C,aAAa,CAAC,2BAA2B,EAAE,GAAG,CAAC,GAC/C,aAAa,CAAC,2BAA2B,EAAE,GAAG,CAAC,GAC/C,yBAAyB,CAAA;AAE3B,MAAM,MAAM,2BAA2B,GACrC,aAAa,CAAC,qCAAqC,CAAC,GACpD,aAAa,CAAC,8BAA8B,EAAE,GAAG,CAAC,GAClD,aAAa,CAAC,gCAAgC,EAAE,GAAG,CAAC,GACpD,yBAAyB,CAAA;AAE3B,MAAM,MAAM,0BAA0B,GACpC,aAAa,CAAC,oCAAoC,CAAC,CAAA;AAErD,MAAM,MAAM,yBAAyB,GACnC,aAAa,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAA;AAEvD,MAAM,MAAM,8BAA8B,GACxC,aAAa,CAAC,2CAA2C,CAAC,CAAA;AAE5D,MAAM,WAAW,MAAO,SAAQ,UAAU,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAClF,eAAe,CAAC,sBAAsB,CAAC,EAAE,eAAe,CAAC,2BAA2B,CAAC,EACrF,eAAe,CAAC,sBAAsB,CAAC,EAAE,eAAe,CAAC,2BAA2B,CAAC,EAAE,eAAe,CAAC,0BAA0B,CAAC,EAClI,eAAe,CAAC,yBAAyB,CAAC,EAAE,eAAe,CAAC,8BAA8B,CAAC,CAC1F;CAEA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/blocks.ts"],"names":[],"mappings":""}
@@ -14,11 +14,14 @@
14
14
  * ```
15
15
  */
16
16
  import type { Libp2p } from '@libp2p/interface-libp2p';
17
- import type { Blockstore } from 'interface-blockstore';
18
17
  import type { AbortOptions } from '@libp2p/interfaces';
19
18
  import type { PeerId } from '@libp2p/interface-peer-id';
20
- import type { Multiaddr } from '@multiformats/multiaddr';
21
19
  import type { Datastore } from 'interface-datastore';
20
+ import type { Pins } from './pins.js';
21
+ import type { ProgressEvent, ProgressOptions } from 'progress-events';
22
+ import type { CID } from 'multiformats/cid';
23
+ import type { Blocks } from './blocks.js';
24
+ export type { Await, AwaitIterable } from 'interface-store';
22
25
  /**
23
26
  * The API presented by a Helia node.
24
27
  */
@@ -30,26 +33,15 @@ export interface Helia {
30
33
  /**
31
34
  * Where the blocks are stored
32
35
  */
33
- blockstore: Blockstore;
36
+ blockstore: Blocks;
34
37
  /**
35
38
  * A key/value store
36
39
  */
37
40
  datastore: Datastore;
38
41
  /**
39
- * Returns information about this node
40
- *
41
- * @example
42
- *
43
- * ```typescript
44
- * import { createHelia } from 'helia'
45
- *
46
- * const node = await createHelia()
47
- * const id = await node.info()
48
- * console.info(id)
49
- * // { peerId: PeerId(12D3Foo), ... }
50
- * ```
42
+ * Pinning operations for blocks in the blockstore
51
43
  */
52
- info: (options?: InfoOptions) => Promise<InfoResponse>;
44
+ pins: Pins;
53
45
  /**
54
46
  * Starts the Helia node
55
47
  */
@@ -58,6 +50,13 @@ export interface Helia {
58
50
  * Stops the Helia node
59
51
  */
60
52
  stop: () => Promise<void>;
53
+ /**
54
+ * Remove any unpinned blocks from the blockstore
55
+ */
56
+ gc: (options?: GCOptions) => Promise<void>;
57
+ }
58
+ export type GcEvents = ProgressEvent<'helia:gc:deleted', CID> | ProgressEvent<'helia:gc:error', Error>;
59
+ export interface GCOptions extends AbortOptions, ProgressOptions<GcEvents> {
61
60
  }
62
61
  export interface InfoOptions extends AbortOptions {
63
62
  /**
@@ -66,30 +65,4 @@ export interface InfoOptions extends AbortOptions {
66
65
  */
67
66
  peerId?: PeerId;
68
67
  }
69
- export interface InfoResponse {
70
- /**
71
- * The ID of the peer this info is about
72
- */
73
- peerId: PeerId;
74
- /**
75
- * The multiaddrs the peer is listening on
76
- */
77
- multiaddrs: Multiaddr[];
78
- /**
79
- * The peer's reported agent version
80
- */
81
- agentVersion: string;
82
- /**
83
- * The peer's reported protocol version
84
- */
85
- protocolVersion: string;
86
- /**
87
- * The protocols the peer supports
88
- */
89
- protocols: string[];
90
- /**
91
- * The status of the node
92
- */
93
- status: 'running' | 'stopped';
94
- }
95
68
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;IAEtB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAA;IAEpB;;;;;;;;;;;;;OAaG;IACH,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAEtD;;OAEG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,UAAU,EAAE,SAAS,EAAE,CAAA;IAEvB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAA;IAEvB;;OAEG;IACH,SAAS,EAAE,MAAM,EAAE,CAAA;IAEnB;;OAEG;IACH,MAAM,EAAE,SAAS,GAAG,SAAS,CAAA;CAC9B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE3D;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAA;IAEpB;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IAEV;;OAEG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzB;;OAEG;IACH,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C;AAED,MAAM,MAAM,QAAQ,GAClB,aAAa,CAAC,kBAAkB,EAAE,GAAG,CAAC,GACtC,aAAa,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AAExC,MAAM,WAAW,SAAU,SAAQ,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC;CAEzE;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB"}
@@ -0,0 +1,48 @@
1
+ import type { AbortOptions } from '@libp2p/interfaces';
2
+ import type { CID } from 'multiformats/cid';
3
+ import type { ProgressEvent, ProgressOptions } from 'progress-events';
4
+ export type PinType = 'recursive' | 'direct' | 'indirect';
5
+ export interface Pin {
6
+ cid: CID;
7
+ depth: number;
8
+ metadata: Record<string, any>;
9
+ }
10
+ export type AddPinEvents = ProgressEvent<'helia:pin:add', unknown>;
11
+ export interface AddOptions extends AbortOptions, ProgressOptions<AddPinEvents> {
12
+ /**
13
+ * How deeply to pin the DAG, defaults to Infinity
14
+ */
15
+ depth?: number;
16
+ /**
17
+ * Optional user-defined metadata to store with the pin
18
+ */
19
+ metadata?: Record<string, string | number | boolean>;
20
+ }
21
+ export interface RmOptions extends AbortOptions {
22
+ }
23
+ export interface LsOptions extends AbortOptions {
24
+ cid?: CID;
25
+ }
26
+ export interface IsPinnedOptions extends AbortOptions {
27
+ }
28
+ export interface Pins {
29
+ /**
30
+ * Pin a block in the blockstore. It will not be deleted
31
+ * when garbage collection is run.
32
+ */
33
+ add: (cid: CID, options?: AddOptions) => Promise<Pin>;
34
+ /**
35
+ * Unpin the block that corresponds to the passed CID. The block will
36
+ * be deleted when garbage collection is run.
37
+ */
38
+ rm: (cid: CID, options?: RmOptions) => Promise<Pin>;
39
+ /**
40
+ * List all blocks that have been pinned.
41
+ */
42
+ ls: (options?: LsOptions) => AsyncGenerator<Pin, void, undefined>;
43
+ /**
44
+ * Return true if the passed CID is pinned
45
+ */
46
+ isPinned: (cid: CID, options?: IsPinnedOptions) => Promise<boolean>;
47
+ }
48
+ //# sourceMappingURL=pins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pins.d.ts","sourceRoot":"","sources":["../../src/pins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAErE,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEzD,MAAM,WAAW,GAAG;IAClB,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC9B;AAED,MAAM,MAAM,YAAY,GACtB,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;AAEzC,MAAM,WAAW,UAAW,SAAQ,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC;IAC7E;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;CAE9C;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,GAAG,CAAC,EAAE,GAAG,CAAA;CACV;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;CAEpD;AAED,MAAM,WAAW,IAAI;IACnB;;;OAGG;IACH,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAErD;;;OAGG;IACH,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEnD;;OAEG;IACH,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,KAAK,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;IAEjE;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACpE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pins.js","sourceRoot":"","sources":["../../src/pins.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/interface",
3
- "version": "0.0.0-ab0a451",
3
+ "version": "0.0.0-cff3aa3",
4
4
  "description": "The Helia API",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/helia/tree/master/packages/interface#readme",
@@ -47,9 +47,13 @@
47
47
  "types": "./dist/src/index.d.ts",
48
48
  "import": "./dist/src/index.js"
49
49
  },
50
- "./errors": {
51
- "types": "./dist/src/errors.d.ts",
52
- "import": "./dist/src/errors.js"
50
+ "./blocks": {
51
+ "types": "./dist/src/blocks.d.ts",
52
+ "import": "./dist/src/blocks.js"
53
+ },
54
+ "./pins": {
55
+ "types": "./dist/src/pins.d.ts",
56
+ "import": "./dist/src/pins.js"
53
57
  }
54
58
  },
55
59
  "eslintConfig": {
@@ -58,105 +62,22 @@
58
62
  "sourceType": "module"
59
63
  }
60
64
  },
61
- "release": {
62
- "branches": [
63
- "main"
64
- ],
65
- "plugins": [
66
- [
67
- "@semantic-release/commit-analyzer",
68
- {
69
- "preset": "conventionalcommits",
70
- "releaseRules": [
71
- {
72
- "breaking": true,
73
- "release": "major"
74
- },
75
- {
76
- "revert": true,
77
- "release": "patch"
78
- },
79
- {
80
- "type": "feat",
81
- "release": "minor"
82
- },
83
- {
84
- "type": "fix",
85
- "release": "patch"
86
- },
87
- {
88
- "type": "docs",
89
- "release": "patch"
90
- },
91
- {
92
- "type": "test",
93
- "release": "patch"
94
- },
95
- {
96
- "type": "deps",
97
- "release": "patch"
98
- },
99
- {
100
- "scope": "no-release",
101
- "release": false
102
- }
103
- ]
104
- }
105
- ],
106
- [
107
- "@semantic-release/release-notes-generator",
108
- {
109
- "preset": "conventionalcommits",
110
- "presetConfig": {
111
- "types": [
112
- {
113
- "type": "feat",
114
- "section": "Features"
115
- },
116
- {
117
- "type": "fix",
118
- "section": "Bug Fixes"
119
- },
120
- {
121
- "type": "chore",
122
- "section": "Trivial Changes"
123
- },
124
- {
125
- "type": "docs",
126
- "section": "Documentation"
127
- },
128
- {
129
- "type": "deps",
130
- "section": "Dependencies"
131
- },
132
- {
133
- "type": "test",
134
- "section": "Tests"
135
- }
136
- ]
137
- }
138
- }
139
- ],
140
- "@semantic-release/changelog",
141
- "@semantic-release/npm",
142
- "@semantic-release/github",
143
- "@semantic-release/git"
144
- ]
145
- },
146
65
  "scripts": {
147
66
  "clean": "aegir clean",
148
67
  "lint": "aegir lint",
149
68
  "dep-check": "aegir dep-check",
150
- "build": "aegir build",
151
- "release": "aegir release"
69
+ "build": "aegir build"
152
70
  },
153
71
  "dependencies": {
154
72
  "@libp2p/interface-libp2p": "^1.1.0",
155
73
  "@libp2p/interface-peer-id": "^2.0.1",
156
74
  "@libp2p/interfaces": "^3.3.1",
157
- "@multiformats/multiaddr": "^11.1.5",
158
- "interface-blockstore": "^4.0.1",
159
- "interface-datastore": "^7.0.3"
75
+ "interface-blockstore": "^5.0.0",
76
+ "interface-datastore": "^8.0.0",
77
+ "interface-store": "^4.0.0",
78
+ "ipfs-bitswap": "^17.0.0",
79
+ "multiformats": "^11.0.1",
80
+ "progress-events": "^1.0.0"
160
81
  },
161
82
  "devDependencies": {
162
83
  "aegir": "^38.1.0"
package/src/blocks.ts ADDED
@@ -0,0 +1,56 @@
1
+ import type { ProgressEvent, ProgressOptions } from 'progress-events'
2
+ import type { CID } from 'multiformats/cid'
3
+ import type { BitswapNotifyProgressEvents, BitswapWantProgressEvents } from 'ipfs-bitswap'
4
+ import type { Blockstore } from 'interface-blockstore'
5
+
6
+ export interface Pair {
7
+ cid: CID
8
+ block: Uint8Array
9
+ }
10
+
11
+ export type HasBlockProgressEvents =
12
+ ProgressEvent<'blocks:put:duplicate', CID> |
13
+ ProgressEvent<'blocks:put:bitswap:notify', CID> |
14
+ ProgressEvent<'blocks:put:blockstore:put', CID> |
15
+ BitswapNotifyProgressEvents
16
+
17
+ export type PutBlockProgressEvents =
18
+ ProgressEvent<'blocks:put:duplicate', CID> |
19
+ ProgressEvent<'blocks:put:bitswap:notify', CID> |
20
+ ProgressEvent<'blocks:put:blockstore:put', CID> |
21
+ BitswapNotifyProgressEvents
22
+
23
+ export type PutManyBlocksProgressEvents =
24
+ ProgressEvent<'blocks:put-many:duplicate', CID> |
25
+ ProgressEvent<'blocks:put-many:bitswap:notify', CID> |
26
+ ProgressEvent<'blocks:put-many:blockstore:put-many'> |
27
+ BitswapNotifyProgressEvents
28
+
29
+ export type GetBlockProgressEvents =
30
+ ProgressEvent<'blocks:get:bitswap:want', CID> |
31
+ ProgressEvent<'blocks:get:blockstore:get', CID> |
32
+ ProgressEvent<'blocks:get:blockstore:put', CID> |
33
+ BitswapWantProgressEvents
34
+
35
+ export type GetManyBlocksProgressEvents =
36
+ ProgressEvent<'blocks:get-many:blockstore:get-many'> |
37
+ ProgressEvent<'blocks:get-many:bitswap:want', CID> |
38
+ ProgressEvent<'blocks:get-many:blockstore:put', CID> |
39
+ BitswapWantProgressEvents
40
+
41
+ export type GetAllBlocksProgressEvents =
42
+ ProgressEvent<'blocks:get-all:blockstore:get-many'>
43
+
44
+ export type DeleteBlockProgressEvents =
45
+ ProgressEvent<'blocks:delete:blockstore:delete', CID>
46
+
47
+ export type DeleteManyBlocksProgressEvents =
48
+ ProgressEvent<'blocks:delete-many:blockstore:delete-many'>
49
+
50
+ export interface Blocks extends Blockstore<ProgressOptions<HasBlockProgressEvents>,
51
+ ProgressOptions<PutBlockProgressEvents>, ProgressOptions<PutManyBlocksProgressEvents>,
52
+ ProgressOptions<GetBlockProgressEvents>, ProgressOptions<GetManyBlocksProgressEvents>, ProgressOptions<GetAllBlocksProgressEvents>,
53
+ ProgressOptions<DeleteBlockProgressEvents>, ProgressOptions<DeleteManyBlocksProgressEvents>
54
+ > {
55
+
56
+ }
package/src/index.ts CHANGED
@@ -15,11 +15,15 @@
15
15
  */
16
16
 
17
17
  import type { Libp2p } from '@libp2p/interface-libp2p'
18
- import type { Blockstore } from 'interface-blockstore'
19
18
  import type { AbortOptions } from '@libp2p/interfaces'
20
19
  import type { PeerId } from '@libp2p/interface-peer-id'
21
- import type { Multiaddr } from '@multiformats/multiaddr'
22
20
  import type { Datastore } from 'interface-datastore'
21
+ import type { Pins } from './pins.js'
22
+ import type { ProgressEvent, ProgressOptions } from 'progress-events'
23
+ import type { CID } from 'multiformats/cid'
24
+ import type { Blocks } from './blocks.js'
25
+
26
+ export type { Await, AwaitIterable } from 'interface-store'
23
27
 
24
28
  /**
25
29
  * The API presented by a Helia node.
@@ -33,7 +37,7 @@ export interface Helia {
33
37
  /**
34
38
  * Where the blocks are stored
35
39
  */
36
- blockstore: Blockstore
40
+ blockstore: Blocks
37
41
 
38
42
  /**
39
43
  * A key/value store
@@ -41,20 +45,9 @@ export interface Helia {
41
45
  datastore: Datastore
42
46
 
43
47
  /**
44
- * Returns information about this node
45
- *
46
- * @example
47
- *
48
- * ```typescript
49
- * import { createHelia } from 'helia'
50
- *
51
- * const node = await createHelia()
52
- * const id = await node.info()
53
- * console.info(id)
54
- * // { peerId: PeerId(12D3Foo), ... }
55
- * ```
48
+ * Pinning operations for blocks in the blockstore
56
49
  */
57
- info: (options?: InfoOptions) => Promise<InfoResponse>
50
+ pins: Pins
58
51
 
59
52
  /**
60
53
  * Starts the Helia node
@@ -65,44 +58,25 @@ export interface Helia {
65
58
  * Stops the Helia node
66
59
  */
67
60
  stop: () => Promise<void>
68
- }
69
61
 
70
- export interface InfoOptions extends AbortOptions {
71
62
  /**
72
- * If passed, return information about this PeerId, defaults
73
- * to the ID of the current node.
63
+ * Remove any unpinned blocks from the blockstore
74
64
  */
75
- peerId?: PeerId
65
+ gc: (options?: GCOptions) => Promise<void>
76
66
  }
77
67
 
78
- export interface InfoResponse {
79
- /**
80
- * The ID of the peer this info is about
81
- */
82
- peerId: PeerId
68
+ export type GcEvents =
69
+ ProgressEvent<'helia:gc:deleted', CID> |
70
+ ProgressEvent<'helia:gc:error', Error>
83
71
 
84
- /**
85
- * The multiaddrs the peer is listening on
86
- */
87
- multiaddrs: Multiaddr[]
72
+ export interface GCOptions extends AbortOptions, ProgressOptions<GcEvents> {
88
73
 
89
- /**
90
- * The peer's reported agent version
91
- */
92
- agentVersion: string
93
-
94
- /**
95
- * The peer's reported protocol version
96
- */
97
- protocolVersion: string
98
-
99
- /**
100
- * The protocols the peer supports
101
- */
102
- protocols: string[]
74
+ }
103
75
 
76
+ export interface InfoOptions extends AbortOptions {
104
77
  /**
105
- * The status of the node
78
+ * If passed, return information about this PeerId, defaults
79
+ * to the ID of the current node.
106
80
  */
107
- status: 'running' | 'stopped'
81
+ peerId?: PeerId
108
82
  }
package/src/pins.ts ADDED
@@ -0,0 +1,62 @@
1
+ import type { AbortOptions } from '@libp2p/interfaces'
2
+ import type { CID } from 'multiformats/cid'
3
+ import type { ProgressEvent, ProgressOptions } from 'progress-events'
4
+
5
+ export type PinType = 'recursive' | 'direct' | 'indirect'
6
+
7
+ export interface Pin {
8
+ cid: CID
9
+ depth: number
10
+ metadata: Record<string, any>
11
+ }
12
+
13
+ export type AddPinEvents =
14
+ ProgressEvent<'helia:pin:add', unknown>
15
+
16
+ export interface AddOptions extends AbortOptions, ProgressOptions<AddPinEvents> {
17
+ /**
18
+ * How deeply to pin the DAG, defaults to Infinity
19
+ */
20
+ depth?: number
21
+
22
+ /**
23
+ * Optional user-defined metadata to store with the pin
24
+ */
25
+ metadata?: Record<string, string | number | boolean>
26
+ }
27
+
28
+ export interface RmOptions extends AbortOptions {
29
+
30
+ }
31
+
32
+ export interface LsOptions extends AbortOptions {
33
+ cid?: CID
34
+ }
35
+
36
+ export interface IsPinnedOptions extends AbortOptions {
37
+
38
+ }
39
+
40
+ export interface Pins {
41
+ /**
42
+ * Pin a block in the blockstore. It will not be deleted
43
+ * when garbage collection is run.
44
+ */
45
+ add: (cid: CID, options?: AddOptions) => Promise<Pin>
46
+
47
+ /**
48
+ * Unpin the block that corresponds to the passed CID. The block will
49
+ * be deleted when garbage collection is run.
50
+ */
51
+ rm: (cid: CID, options?: RmOptions) => Promise<Pin>
52
+
53
+ /**
54
+ * List all blocks that have been pinned.
55
+ */
56
+ ls: (options?: LsOptions) => AsyncGenerator<Pin, void, undefined>
57
+
58
+ /**
59
+ * Return true if the passed CID is pinned
60
+ */
61
+ isPinned: (cid: CID, options?: IsPinnedOptions) => Promise<boolean>
62
+ }