forked from ipfs/js-ipfs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
119 lines (104 loc) · 3.81 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
'use strict'
/* eslint-env browser */
const { CID } = require('multiformats/cid')
const { multiaddr } = require('multiaddr')
const globSource = require('ipfs-utils/src/files/glob-source')
const urlSource = require('ipfs-utils/src/files/url-source')
const Multicodecs = require('ipfs-core-utils/src/multicodecs')
const Multihashes = require('ipfs-core-utils/src/multihashes')
const Multibases = require('ipfs-core-utils/src/multibases')
const dagPb = require('@ipld/dag-pb')
const dagCbor = require('@ipld/dag-cbor')
const { identity } = require('multiformats/hashes/identity')
const { bases, hashes, codecs } = require('multiformats/basics')
/**
* @typedef {import('./types').EndpointConfig} EndpointConfig
* @typedef {import('./types').Options} Options
* @typedef {import('multiformats/codecs/interface').BlockCodec<any, any>} BlockCodec
* @typedef {import('multiformats/hashes/interface').MultihashHasher} MultihashHasher
* @typedef {import('multiformats/bases/interface').MultibaseCodec<any>} MultibaseCodec
* @typedef {import('./types').IPFSHTTPClient} IPFSHTTPClient
*/
/**
* @param {Options} options
*/
function create (options = {}) {
/**
* @type {BlockCodec}
*/
const id = {
name: identity.name,
code: identity.code,
encode: (id) => id,
decode: (id) => id
}
/** @type {MultibaseCodec[]} */
const multibaseCodecs = Object.values(bases);
(options.ipld && options.ipld.bases ? options.ipld.bases : []).forEach(base => multibaseCodecs.push(base))
const multibases = new Multibases({
bases: multibaseCodecs,
loadBase: options.ipld && options.ipld.loadBase
})
/** @type {BlockCodec[]} */
const blockCodecs = Object.values(codecs);
[dagPb, dagCbor, id].concat((options.ipld && options.ipld.codecs) || []).forEach(codec => blockCodecs.push(codec))
const multicodecs = new Multicodecs({
codecs: blockCodecs,
loadCodec: options.ipld && options.ipld.loadCodec
})
/** @type {MultihashHasher[]} */
const multihashHashers = Object.values(hashes);
(options.ipld && options.ipld.hashers ? options.ipld.hashers : []).forEach(hasher => multihashHashers.push(hasher))
const multihashes = new Multihashes({
hashers: multihashHashers,
loadHasher: options.ipld && options.ipld.loadHasher
})
/** @type {IPFSHTTPClient} */
const client = {
add: require('./add')(options),
addAll: require('./add-all')(options),
bitswap: require('./bitswap')(options),
block: require('./block')(options),
bootstrap: require('./bootstrap')(options),
cat: require('./cat')(options),
commands: require('./commands')(options),
config: require('./config')(options),
dag: require('./dag')(multicodecs, options),
dht: require('./dht')(options),
diag: require('./diag')(options),
dns: require('./dns')(options),
files: require('./files')(options),
get: require('./get')(options),
getEndpointConfig: require('./get-endpoint-config')(options),
id: require('./id')(options),
isOnline: require('./is-online')(options),
key: require('./key')(options),
log: require('./log')(options),
ls: require('./ls')(options),
mount: require('./mount')(options),
name: require('./name')(options),
object: require('./object')(multicodecs, options),
pin: require('./pin')(options),
ping: require('./ping')(options),
pubsub: require('./pubsub')(options),
refs: require('./refs')(options),
repo: require('./repo')(options),
resolve: require('./resolve')(options),
start: require('./start')(options),
stats: require('./stats')(options),
stop: require('./stop')(options),
swarm: require('./swarm')(options),
version: require('./version')(options),
bases: multibases,
codecs: multicodecs,
hashers: multihashes
}
return client
}
module.exports = {
create,
CID,
multiaddr,
globSource,
urlSource
}