generated from fission-codes/project-template
-
Notifications
You must be signed in to change notification settings - Fork 1
/
utils.js
101 lines (80 loc) · 2.18 KB
/
utils.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
'use strict';
const Fission = require("@fission-suite/client");
const fs = require("fs");
const { DEFAULT_IPFS_GATEWAY_URL } = require("./constants");
const normalizeURL = (rawURL) => {
let normalized = rawURL.trim();
// Ensure protocol
if(!normalized.includes("://")) {
normalized = "https://" + normalized;
}
// Remove queries
normalized = normalized.split("?")[0];
// Remove hashes
normalized = normalized.split("#")[0];
// Remove trailing slash
if(normalized.endsWith("/")) {
normalized = normalized.slice(0,-1);
}
return normalized;
}
const normalizeGatewayURL = (rawURL) => {
let normalized = normalizeURL(rawURL);
// Strip ipfs path
if(normalized.endsWith("/ipfs")) {
normalized = normalized.slice(0,-5);
}
return normalized;
}
const configGatewayURL = (rawURL) => {
if(typeof rawURL === "string") {
return normalizeGatewayURL(rawURL);
} else {
return DEFAULT_IPFS_GATEWAY_URL;
}
}
const readFile = (filePath) => {
return new Promise((resolve, reject) => {
fs.readFile(filePath, (err, bytes) => {
if(err) {
reject(err);
} else {
resolve(bytes);
}
});
});
}
const connectionSuccessMessage = (username, numFiles) => {
console.log(`
Fission Storage Adapter: Successfully Connected
* Logged in as ${username}
* Currently hosting ${numFiles} files
`);
}
const ensureUserAuth = (fissionUser, username) => {
(async () => {
try {
const cids = await fissionUser.cids();
connectionSuccessMessage(username, cids.length);
} catch (err) {
throw new Error("Authentication Error\n" + JSON.stringify(err,null," "));
}
})();
}
const configFissionUser = (username, password, apiURL) => {
let fissionUser;
if(!username) {
throw new Error("Missing option: 'username'");
}
if(!password) {
throw new Error("Missing option: 'password'");
}
if(!apiURL) {
fissionUser = new Fission.FissionUser(username, password);
} else {
fissionUser = new Fission.FissionUser(username, password, normalizeURL(apiURL));
}
ensureUserAuth(fissionUser, username);
return fissionUser;
}
module.exports = { readFile, configFissionUser, configGatewayURL }