-import {createKey, resetKeyPassword} from '../wasm/func';
+import {createKey, resetKeyPassword, createPubkey, signMessage, signTransaction} from '../wasm/func';
import {getDB} from '../db/db';
+
function keysSDK() {
}
* @param {String} newPassword
*/
keysSDK.prototype.resetKeyPassword = function(rootXPub, oldPassword, newPassword) {
- let returnPromise = new Promise((resolve, reject) => {
+ let retPromise = new Promise((resolve, reject) => {
let data = {rootXPub: rootXPub, oldPassword:oldPassword, newPassword:newPassword};
resetKeyPassword(data).then(res => {
getDB().then(db => {
reject(error);
});
});
- return returnPromise;
+ return retPromise;
};
/**
* @param {String} xpub
*/
keysSDK.prototype.getKeyByXPub = function(xpub) {
- let returnPromise = new Promise((resolve, reject) => {
+ let retPromise = new Promise((resolve, reject) => {
getDB().then(db => {
let getRequest = db.transaction(['keys'], 'readonly')
.objectStore('keys')
reject(error);
});
});
- return returnPromise;
+ return retPromise;
+};
+
+/**
+ * List key
+ *
+ * @returns {Promise}
+ */
+keysSDK.prototype.list = function() {
+ let retPromise = new Promise((resolve, reject) => {
+ getDB().then(db => {
+ let transaction = db.transaction(['keys'], 'readonly');
+ let objectStore = transaction.objectStore('keys');
+ let oc = objectStore.openCursor();
+ let ret = [];
+ oc.onsuccess = function (event) {
+ var cursor = event.target.result;
+ if (cursor) {
+ ret.push({alias: cursor.value.alias, xpub: cursor.value.xpub});
+ cursor.continue();
+ } else {
+ resolve(ret);
+ }
+ };
+ oc.onerror = function(e){
+ reject(e);
+ };
+ }).catch(err => {
+ reject(err);
+ });
+ });
+ return retPromise;
+};
+
+/**
+ * Create a new key.
+ *
+ * @param {String} alias - User specified, unique identifier.
+ * @param {String} password - User specified, key password.
+ */
+keysSDK.prototype.createKey = function(alias, password) {
+ var normalizedAlias = alias.toLowerCase().trim();
+
+ let data = {};
+ data.alias = normalizedAlias;
+ data.auth = password;
+ return createKey(data).then((res) => {
+ let jsonData = JSON.parse(res.data);
+ let dbData = {
+ key:res.data,
+ xpub:jsonData.xpub,
+ alias:alias,
+ };
+ return dbData;
+ }).catch(error => {
+ throw(error);
+ });
};
/**
*/
keysSDK.prototype.create = function(alias, password) {
var normalizedAlias = alias.toLowerCase().trim();
- let returnPromise = new Promise((resolve, reject) => {
+ let retPromise = new Promise((resolve, reject) => {
getDB().then(db => {
let getRequest = db.transaction(['keys'], 'readonly')
.objectStore('keys')
.get(normalizedAlias);
getRequest.onsuccess = function (e) {
if (e.target.result) {
- reject(new Error('alias already exists'));
+ reject(new Error('key alias already exists'));
return;
}
let data = {};
reject(error);
});
});
- return returnPromise;
+ return retPromise;
+};
+
+
+/**
+ * Create a new key.
+ *
+ * @param {String} xpub - xpub.
+ */
+keysSDK.prototype.createPubkey = function(xpub) {
+ let retPromise = new Promise((resolve, reject) => {
+ let data = {};
+ data.xpub = xpub;
+ data.seed = 1;
+ createPubkey(data).then((res) => {
+ let jsonData = JSON.parse(res.data);
+ resolve(jsonData);
+ }).catch(error => {
+ reject(error);
+ });
+ });
+ return retPromise;
+};
+
+/**
+ * Sign Message.
+ *
+ * @param {String} message - message.
+ * @param {String} password - password.
+ * @param {Object} address - address.
+ */
+keysSDK.prototype.signMessage = function(message, password, address) {
+ let retPromise = new Promise((resolve, reject) => {
+ getDB().then(db => {
+ let getRequest = db.transaction(['accounts-server'], 'readonly')
+ .objectStore('accounts-server')
+ .getAll();
+
+ getRequest.onsuccess = function (e) {
+ const result = getRequest.result.filter(obj => (obj.address === address || obj.vpAddress === address));
+ if (result.length === 0) {
+ reject(new Error('not found address'));
+ return;
+ }
+
+ const rootXpub = result[0].rootXPub;
+ let keyObject = db.transaction(['keys'], 'readonly')
+ .objectStore('keys')
+ .index('xpub')
+ .get(rootXpub);
+
+ keyObject.onsuccess = function (e) {
+ if (!e.target.result) {
+ reject(new Error('not found xpub'));
+ return;
+ }
+
+ let data = {};
+ data.message = message;
+ data.password = password;
+ data.key = e.target.result.key;
+ signMessage(data).then((res) => {
+ let jsonData = JSON.parse(res.data);
+ resolve(jsonData);
+ }).catch(error => {
+ reject(error);
+ });
+ };
+ keyObject.onerror = function () {
+ reject(getRequest.error);
+ };
+ };
+ getRequest.onerror = function () {
+ reject(getRequest.error);
+ };
+ }).catch(error => {
+ reject(error);
+ });
+ });
+ return retPromise;
};
export default keysSDK;
\ No newline at end of file