@peerbit/server 2.0.0 → 3.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.
- package/lib/esm/cli.js +67 -20
- package/lib/esm/cli.js.map +1 -1
- package/lib/esm/client.d.ts +7 -1
- package/lib/esm/client.js +48 -31
- package/lib/esm/client.js.map +1 -1
- package/lib/esm/config.d.ts +3 -3
- package/lib/esm/config.js +18 -16
- package/lib/esm/config.js.map +1 -1
- package/lib/esm/peerbit.d.ts +2 -0
- package/lib/esm/peerbit.js +1 -0
- package/lib/esm/peerbit.js.map +1 -1
- package/lib/esm/remotes.d.ts +1 -2
- package/lib/esm/remotes.js +1 -2
- package/lib/esm/remotes.js.map +1 -1
- package/lib/esm/routes.d.ts +1 -0
- package/lib/esm/routes.js +1 -0
- package/lib/esm/routes.js.map +1 -1
- package/lib/esm/server.d.ts +2 -6
- package/lib/esm/server.js +161 -176
- package/lib/esm/server.js.map +1 -1
- package/lib/esm/signes-request.d.ts +5 -0
- package/lib/esm/signes-request.js +54 -0
- package/lib/esm/signes-request.js.map +1 -0
- package/lib/esm/trust.browser.d.ts +0 -0
- package/lib/esm/trust.browser.js +3 -0
- package/lib/esm/trust.browser.js.map +1 -0
- package/lib/esm/trust.d.ts +9 -0
- package/lib/esm/trust.js +36 -0
- package/lib/esm/trust.js.map +1 -0
- package/lib/ui/assets/index-cac7195d.js +77 -0
- package/lib/ui/index.html +1 -1
- package/package.json +4 -4
- package/src/cli.ts +81 -25
- package/src/client.ts +77 -35
- package/src/config.ts +21 -23
- package/src/peerbit.ts +3 -0
- package/src/remotes.ts +1 -3
- package/src/routes.ts +1 -1
- package/src/server.ts +205 -241
- package/src/signes-request.ts +84 -0
- package/src/trust.browser.ts +1 -0
- package/src/trust.ts +39 -0
- package/lib/ui/assets/index-73eaa3bc.js +0 -53
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { SignatureWithKey, fromBase64, toBase64, verify, } from "@peerbit/crypto";
|
|
2
|
+
import { deserialize, serialize, BinaryWriter } from "@dao-xyz/borsh";
|
|
3
|
+
const SIGNATURE_KEY = "X-Peerbit-Signature";
|
|
4
|
+
const SIGNATURE_TIME_KEY = "X-Peerbit-Signature-Time";
|
|
5
|
+
export const signRequest = async (headers, method, path, data, keypair) => {
|
|
6
|
+
const sigTimestamp = Math.round(new Date().getTime() / 1000).toString();
|
|
7
|
+
const write = new BinaryWriter();
|
|
8
|
+
if (!method) {
|
|
9
|
+
throw new Error("Expecting method");
|
|
10
|
+
}
|
|
11
|
+
if (!path) {
|
|
12
|
+
throw new Error("Expecting path");
|
|
13
|
+
}
|
|
14
|
+
write.string(method.toLowerCase() + path.toLowerCase() + sigTimestamp + (data || ""));
|
|
15
|
+
const signature = await keypair.sign(write.finalize());
|
|
16
|
+
headers[SIGNATURE_TIME_KEY] = sigTimestamp;
|
|
17
|
+
headers[SIGNATURE_KEY] = toBase64(serialize(signature));
|
|
18
|
+
};
|
|
19
|
+
export const getBody = (req) => {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
let body = "";
|
|
22
|
+
req.on("data", (d) => {
|
|
23
|
+
body += d;
|
|
24
|
+
});
|
|
25
|
+
req.on("end", () => {
|
|
26
|
+
resolve(body);
|
|
27
|
+
});
|
|
28
|
+
req.on("error", (e) => reject(e));
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
export const verifyRequest = async (headers, method, path, body = "") => {
|
|
32
|
+
const timestamp = headers[SIGNATURE_TIME_KEY] || headers[SIGNATURE_TIME_KEY.toLowerCase()];
|
|
33
|
+
if (typeof timestamp !== "string") {
|
|
34
|
+
throw new Error("Unexpected timestamp type: " + typeof timestamp);
|
|
35
|
+
}
|
|
36
|
+
const write = new BinaryWriter();
|
|
37
|
+
if (!method) {
|
|
38
|
+
throw new Error("Expecting method");
|
|
39
|
+
}
|
|
40
|
+
if (!path) {
|
|
41
|
+
throw new Error("Expecting path");
|
|
42
|
+
}
|
|
43
|
+
write.string(method.toLowerCase() + path.toLowerCase() + timestamp + body);
|
|
44
|
+
const signature = headers[SIGNATURE_KEY] || headers[SIGNATURE_KEY.toLowerCase()];
|
|
45
|
+
if (typeof signature !== "string") {
|
|
46
|
+
throw new Error("Unexpected signature type: " + typeof signature);
|
|
47
|
+
}
|
|
48
|
+
const signatureWithKey = deserialize(fromBase64(signature), SignatureWithKey);
|
|
49
|
+
if (await verify(signatureWithKey, write.finalize())) {
|
|
50
|
+
return signatureWithKey.publicKey;
|
|
51
|
+
}
|
|
52
|
+
throw new Error("Invalid signature");
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=signes-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signes-request.js","sourceRoot":"","sources":["../../src/signes-request.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.browser.js","sourceRoot":"","sources":["../../src/trust.browser.ts"],"names":[],"mappings":";AAAA,gBAAgB"}
|
package/lib/esm/trust.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
export class Trust {
|
|
3
|
+
path;
|
|
4
|
+
trusted;
|
|
5
|
+
constructor(path) {
|
|
6
|
+
this.path = path;
|
|
7
|
+
if (fs.existsSync(path)) {
|
|
8
|
+
this.trusted = JSON.parse(fs.readFileSync(path).toString("utf-8"));
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
this.trusted = [];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
save() {
|
|
15
|
+
fs.writeFileSync(this.path, JSON.stringify(this.trusted));
|
|
16
|
+
}
|
|
17
|
+
isTrusted(hashcode) {
|
|
18
|
+
return this.trusted.includes(hashcode);
|
|
19
|
+
}
|
|
20
|
+
add(key) {
|
|
21
|
+
if (this.isTrusted(key)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this.trusted.push(key);
|
|
25
|
+
this.save();
|
|
26
|
+
}
|
|
27
|
+
remove(hashcode) {
|
|
28
|
+
const existing = this.trusted.findIndex((x) => (x = hashcode));
|
|
29
|
+
if (existing >= 0) {
|
|
30
|
+
this.trusted.splice(existing, 1);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/trust.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,OAAO,KAAK;IAEI;IADb,OAAO,CAAW;IAC1B,YAAqB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QAChC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC3B,CAAC;SACd;aAAM;YACN,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;SAClB;IACF,CAAC;IAED,IAAI;QACH,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,GAAW;QACd,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACxB,OAAO;SACP;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,MAAM,CAAC,QAAgB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC/D,IAAI,QAAQ,IAAI,CAAC,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;SACZ;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}
|