|
@@ -7,47 +7,129 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
-var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
|
|
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
|
|
|
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
|
|
|
- function verb(n) { return function (v) { return step([n, v]); }; }
|
|
|
|
|
- function step(op) {
|
|
|
|
|
- if (f) throw new TypeError("Generator is already executing.");
|
|
|
|
|
- while (_) try {
|
|
|
|
|
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
|
|
|
- if (y = 0, t) op = [op[0] & 2, t.value];
|
|
|
|
|
- switch (op[0]) {
|
|
|
|
|
- case 0: case 1: t = op; break;
|
|
|
|
|
- case 4: _.label++; return { value: op[1], done: false };
|
|
|
|
|
- case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
|
|
|
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
|
|
|
- default:
|
|
|
|
|
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
|
|
|
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
|
|
|
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
|
|
|
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
|
|
|
- if (t[2]) _.ops.pop();
|
|
|
|
|
- _.trys.pop(); continue;
|
|
|
|
|
- }
|
|
|
|
|
- op = body.call(thisArg, _);
|
|
|
|
|
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
|
|
|
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
|
|
|
- }
|
|
|
|
|
-};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
-var BankClient = /** @class */ (function () {
|
|
|
|
|
- function BankClient(urlBase) {
|
|
|
|
|
|
|
+const crypto = require("libp2p-crypto");
|
|
|
|
|
+const util = require("util");
|
|
|
|
|
+const TextEncoder = util.TextEncoder;
|
|
|
|
|
+const util_1 = require("./util");
|
|
|
|
|
+class BankClient {
|
|
|
|
|
+ constructor(urlBase, storage, webClient) {
|
|
|
this.urlBase = urlBase;
|
|
this.urlBase = urlBase;
|
|
|
|
|
+ this.storage = storage;
|
|
|
|
|
+ this.webClient = webClient;
|
|
|
|
|
+ }
|
|
|
|
|
+ getPub() {
|
|
|
|
|
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
+ yield this.bootstrap();
|
|
|
|
|
+ this.getPriv().id((idErr, pubHash) => {
|
|
|
|
|
+ if (idErr) {
|
|
|
|
|
+ return reject(idErr);
|
|
|
|
|
+ }
|
|
|
|
|
+ resolve(pubHash);
|
|
|
|
|
+ });
|
|
|
|
|
+ }));
|
|
|
|
|
+ }
|
|
|
|
|
+ bootstrap() {
|
|
|
|
|
+ if (this.bootstrapResult) {
|
|
|
|
|
+ return Promise.resolve(this.bootstrapResult);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (this.bootstrapPromise) {
|
|
|
|
|
+ return this.bootstrapPromise;
|
|
|
|
|
+ }
|
|
|
|
|
+ return this.bootstrapPromise = new Promise((resolve, reject) => {
|
|
|
|
|
+ this.storage.get('notaprivatekey').then(privateKeyFromStorage => {
|
|
|
|
|
+ if (privateKeyFromStorage == null) {
|
|
|
|
|
+ console.log('no private key in storage. generating new');
|
|
|
|
|
+ crypto.keys.generateKeyPair('RSA', 2048, (generateErr, privateKey) => {
|
|
|
|
|
+ if (generateErr) {
|
|
|
|
|
+ return reject(generateErr);
|
|
|
|
|
+ }
|
|
|
|
|
+ privateKey.export('password', (exportErr, exportResult) => {
|
|
|
|
|
+ if (exportErr) {
|
|
|
|
|
+ return reject(exportErr);
|
|
|
|
|
+ }
|
|
|
|
|
+ this.storage.set('notaprivatekey', exportResult).then(err => {
|
|
|
|
|
+ // whatever
|
|
|
|
|
+ }).catch(reject);
|
|
|
|
|
+ this.privateKey = privateKey;
|
|
|
|
|
+ resolve(true);
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ // console.log('importing privatekey');
|
|
|
|
|
+ crypto.keys.import(privateKeyFromStorage, 'password', (err, importedPrivateKey) => {
|
|
|
|
|
+ if (err) {
|
|
|
|
|
+ return reject(err);
|
|
|
|
|
+ }
|
|
|
|
|
+ this.privateKey = importedPrivateKey;
|
|
|
|
|
+ // console.log(this.getPublicKeyString());
|
|
|
|
|
+ // console.log(privateKeyFromStorage);
|
|
|
|
|
+ resolve(true);
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(reject);
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
- BankClient.prototype.upload = function () {
|
|
|
|
|
- return __awaiter(this, void 0, void 0, function () {
|
|
|
|
|
- return __generator(this, function (_a) {
|
|
|
|
|
- // tslint:disable-next-line: no-console
|
|
|
|
|
- console.log('hey');
|
|
|
|
|
- return [2 /*return*/];
|
|
|
|
|
|
|
+ getNonce() {
|
|
|
|
|
+ return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
+ const nonce = yield this.webClient.request({
|
|
|
|
|
+ method: 'GET',
|
|
|
|
|
+ url: this.urlBase + '/bank/nonce'
|
|
|
});
|
|
});
|
|
|
|
|
+ return Number(nonce);
|
|
|
});
|
|
});
|
|
|
- };
|
|
|
|
|
- return BankClient;
|
|
|
|
|
-}());
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ getBalance() {
|
|
|
|
|
+ return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
+ const nonce = yield this.getNonce();
|
|
|
|
|
+ const retrieveRequest = yield this.makePlaintextPayload(JSON.stringify({
|
|
|
|
|
+ _date: new Date().toISOString(),
|
|
|
|
|
+ _nonce: nonce
|
|
|
|
|
+ }));
|
|
|
|
|
+ const topicURL = this.urlBase + '/bank/getbalance';
|
|
|
|
|
+ const postResponse = this.webClient.requestJSON({
|
|
|
|
|
+ body: retrieveRequest,
|
|
|
|
|
+ method: 'POST',
|
|
|
|
|
+ url: topicURL
|
|
|
|
|
+ });
|
|
|
|
|
+ return postResponse;
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ getPriv() {
|
|
|
|
|
+ if (!this.privateKey) {
|
|
|
|
|
+ throw new Error('missing private key');
|
|
|
|
|
+ }
|
|
|
|
|
+ return this.privateKey;
|
|
|
|
|
+ }
|
|
|
|
|
+ makePlaintextPayload(message) {
|
|
|
|
|
+ const messageBytes = new TextEncoder().encode(message);
|
|
|
|
|
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
+ yield this.bootstrap();
|
|
|
|
|
+ this.privateKey.sign(messageBytes, (signErr, signatureBytes) => __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
+ if (signErr) {
|
|
|
|
|
+ reject(signErr);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ const publicDERBytes = this.privateKey.public.bytes;
|
|
|
|
|
+ this.privateKey.id((idErr, pubHash) => {
|
|
|
|
|
+ if (idErr) {
|
|
|
|
|
+ reject(idErr);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ const result = {
|
|
|
|
|
+ date: new Date().toISOString(),
|
|
|
|
|
+ msg: util_1.encodeHex(messageBytes),
|
|
|
|
|
+ pub: util_1.encodeHex(publicDERBytes),
|
|
|
|
|
+ pubHash,
|
|
|
|
|
+ sig: util_1.encodeHex(signatureBytes),
|
|
|
|
|
+ };
|
|
|
|
|
+ // console.log('result', result, signatureBytes);
|
|
|
|
|
+ resolve(result);
|
|
|
|
|
+ });
|
|
|
|
|
+ }));
|
|
|
|
|
+ }));
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
exports.BankClient = BankClient;
|
|
exports.BankClient = BankClient;
|
|
|
|
|
+//# sourceMappingURL=index.js.map
|