1 import {createKey, resetKeyPassword, createPubkey, signMessage, signTransaction} from '../wasm/func';
2 import {getDB} from '../db/db';
11 * @param {String}} rootXPub
12 * @param {String} oldPassword
13 * @param {String} newPassword
15 keysSDK.prototype.resetKeyPassword = function(rootXPub, oldPassword, newPassword) {
16 let retPromise = new Promise((resolve, reject) => {
17 let data = {rootXPub: rootXPub, oldPassword:oldPassword, newPassword:newPassword};
18 resetKeyPassword(data).then(res => {
20 let objectStore = db.transaction(['keys'], 'readwrite').objectStore('keys');
21 let index = objectStore.index('xpub');
22 let keyRange = IDBKeyRange.only(rootXPub);
23 let getRequest = index.openCursor(keyRange);
24 getRequest.onsuccess = function (event) {
25 const cursor = event.target.result;
26 if(cursor && cursor.value.xpub === rootXPub) {
27 const updateData = cursor.value;
28 updateData.key = res.data;
29 const request = cursor.update(updateData);
30 request.onsuccess = function() {
33 request.onerror = function() {
34 reject(new Error('db update error'));
37 reject(new Error('db update error: not found by rootXPub'));
40 getRequest.onerror = function () {
41 reject(new Error('db get error'));
56 * @param {String} xpub
58 keysSDK.prototype.getKeyByXPub = function(xpub) {
59 let retPromise = new Promise((resolve, reject) => {
61 let getRequest = db.transaction(['keys'], 'readonly')
65 getRequest.onsuccess = function(e) {
67 resolve(e.target.result.key);
69 reject(new Error('not found by XPub'));
72 getRequest.onerror = function() {
73 reject(new Error('db get error'));
87 keysSDK.prototype.list = function() {
88 let retPromise = new Promise((resolve, reject) => {
90 let transaction = db.transaction(['keys'], 'readonly');
91 let objectStore = transaction.objectStore('keys');
92 let oc = objectStore.openCursor();
94 oc.onsuccess = function (event) {
95 var cursor = event.target.result;
97 ret.push({alias: cursor.value.alias, xpub: cursor.value.xpub});
103 oc.onerror = function(e){
116 * @param {String} alias - User specified, unique identifier.
117 * @param {String} password - User specified, key password.
119 keysSDK.prototype.createKey = function(alias, password) {
120 var normalizedAlias = alias.toLowerCase().trim();
123 data.alias = normalizedAlias;
124 data.auth = password;
125 return createKey(data).then((res) => {
126 let jsonData = JSON.parse(res.data);
141 * @param {String} alias - User specified, unique identifier.
142 * @param {String} password - User specified, key password.
144 keysSDK.prototype.create = function(alias, password) {
145 var normalizedAlias = alias.toLowerCase().trim();
146 let retPromise = new Promise((resolve, reject) => {
148 let getRequest = db.transaction(['keys'], 'readonly')
151 .get(normalizedAlias);
152 getRequest.onsuccess = function (e) {
153 if (e.target.result) {
154 reject(new Error('key alias already exists'));
158 data.alias = normalizedAlias;
159 data.auth = password;
160 createKey(data).then((res) => {
161 let jsonData = JSON.parse(res.data);
167 let request = db.transaction(['keys'], 'readwrite')
170 request.onsuccess = function () {
171 resolve({xpub:jsonData.xpub, alias: alias});
173 request.onerror = function () {
174 reject(new Error('db insert error'));
180 getRequest.onerror = function () {
181 reject(new Error('db get error'));
194 * @param {String} xpub - xpub.
196 keysSDK.prototype.createPubkey = function(xpub) {
197 let retPromise = new Promise((resolve, reject) => {
201 createPubkey(data).then((res) => {
202 let jsonData = JSON.parse(res.data);
214 * @param {String} message - message.
215 * @param {String} password - password.
216 * @param {Object} address - address.
218 keysSDK.prototype.signMessage = function(message, password, address) {
219 let retPromise = new Promise((resolve, reject) => {
221 let getRequest = db.transaction(['accounts-server'], 'readonly')
222 .objectStore('accounts-server')
225 getRequest.onsuccess = function (e) {
226 const result = getRequest.result.filter(obj => (obj.address === address || obj.vpAddress === address));
227 if (result.length === 0) {
228 reject(new Error('not found address'));
232 const rootXpub = result[0].rootXPub;
233 let keyObject = db.transaction(['keys'], 'readonly')
238 keyObject.onsuccess = function (e) {
239 if (!e.target.result) {
240 reject(new Error('not found xpub'));
245 data.message = message;
246 data.password = password;
247 data.key = e.target.result.key;
248 signMessage(data).then((res) => {
249 let jsonData = JSON.parse(res.data);
255 keyObject.onerror = function () {
256 reject(getRequest.error);
259 getRequest.onerror = function () {
260 reject(getRequest.error);
269 export default keysSDK;