mirror of
https://github.com/bigchaindb/js-bigchaindb-driver.git
synced 2024-11-22 09:46:58 +01:00
restructuring
This commit is contained in:
parent
1c5ec81ed2
commit
1d950855e9
13
constants/api_urls.js
Normal file
13
constants/api_urls.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/* eslint-disable prefer-template */
|
||||||
|
import { API_PATH } from './application_constants';
|
||||||
|
|
||||||
|
|
||||||
|
const ApiUrls = {
|
||||||
|
'transactions': API_PATH + 'transactions',
|
||||||
|
'transactions_detail': API_PATH + 'transactions/%(txId)s',
|
||||||
|
'outputs': API_PATH + 'outputs',
|
||||||
|
'statuses': API_PATH + 'statuses'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export default ApiUrls;
|
8
constants/application_constants.js
Normal file
8
constants/application_constants.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
export const FLASK_BASE_URL = process.env.FLASK_BASE_URL;
|
||||||
|
export const BDB_SERVER_URL = process.env.BDB_SERVER_URL;
|
||||||
|
export const API_PATH = `${BDB_SERVER_URL}/api/v1/`;
|
||||||
|
|
||||||
|
export default {
|
||||||
|
API_PATH,
|
||||||
|
FLASK_BASE_URL,
|
||||||
|
};
|
689
dist/bundle/bundle.js
vendored
689
dist/bundle/bundle.js
vendored
File diff suppressed because one or more lines are too long
52
dist/bundle/bundle.min.js
vendored
52
dist/bundle/bundle.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/bundle/bundle.min.js.map
vendored
2
dist/bundle/bundle.min.js.map
vendored
File diff suppressed because one or more lines are too long
134
dist/node/index.js
vendored
134
dist/node/index.js
vendored
@ -3,6 +3,7 @@
|
|||||||
Object.defineProperty(exports, "__esModule", {
|
Object.defineProperty(exports, "__esModule", {
|
||||||
value: true
|
value: true
|
||||||
});
|
});
|
||||||
|
exports.BDB_SERVER_URL = undefined;
|
||||||
|
|
||||||
var _extends2 = require('babel-runtime/helpers/extends');
|
var _extends2 = require('babel-runtime/helpers/extends');
|
||||||
|
|
||||||
@ -14,6 +15,7 @@ exports.makeOutput = makeOutput;
|
|||||||
exports.makeCreateTransaction = makeCreateTransaction;
|
exports.makeCreateTransaction = makeCreateTransaction;
|
||||||
exports.makeTransferTransaction = makeTransferTransaction;
|
exports.makeTransferTransaction = makeTransferTransaction;
|
||||||
exports.signTransaction = signTransaction;
|
exports.signTransaction = signTransaction;
|
||||||
|
exports.testMe = testMe;
|
||||||
|
|
||||||
var _buffer = require('buffer');
|
var _buffer = require('buffer');
|
||||||
|
|
||||||
@ -193,8 +195,7 @@ function signTransaction(transaction) {
|
|||||||
signedTx.inputs.forEach(function (input, index) {
|
signedTx.inputs.forEach(function (input, index) {
|
||||||
var privateKey = privateKeys[index];
|
var privateKey = privateKeys[index];
|
||||||
var privateKeyBuffer = new _buffer.Buffer(_bs2.default.decode(privateKey));
|
var privateKeyBuffer = new _buffer.Buffer(_bs2.default.decode(privateKey));
|
||||||
var serializedTransaction = serializeTransactionIntoCanonicalString(transaction);
|
var serializedTransaction = serializeTransactionIntoCanonicalString(transaction, input);
|
||||||
|
|
||||||
var ed25519Fulfillment = new _fiveBellsCondition2.default.Ed25519();
|
var ed25519Fulfillment = new _fiveBellsCondition2.default.Ed25519();
|
||||||
ed25519Fulfillment.sign(new _buffer.Buffer(serializedTransaction), privateKeyBuffer);
|
ed25519Fulfillment.sign(new _buffer.Buffer(serializedTransaction), privateKeyBuffer);
|
||||||
var fulfillmentUri = ed25519Fulfillment.serializeUri();
|
var fulfillmentUri = ed25519Fulfillment.serializeUri();
|
||||||
@ -266,16 +267,137 @@ function sha256Hash(data) {
|
|||||||
return _jsSha2.default.sha3_256.create().update(data).hex();
|
return _jsSha2.default.sha3_256.create().update(data).hex();
|
||||||
}
|
}
|
||||||
|
|
||||||
function serializeTransactionIntoCanonicalString(transaction) {
|
function serializeTransactionIntoCanonicalString(transaction, input) {
|
||||||
// BigchainDB signs fulfillments by serializing transactions into a "canonical" format where
|
// BigchainDB signs fulfillments by serializing transactions into a "canonical" format where
|
||||||
// each fulfillment URI is removed before sorting the remaining keys
|
// each fulfillment URI is removed before sorting the remaining keys
|
||||||
var tx = (0, _clone2.default)(transaction);
|
var tx = (0, _clone2.default)(transaction);
|
||||||
tx.inputs.forEach(function (input) {
|
var match = void 0;
|
||||||
input.fulfillment = null;
|
tx.inputs.forEach(function (_input) {
|
||||||
});
|
|
||||||
|
|
||||||
|
if (!(_input && input && _input['fulfills'] && input['fulfills'] && !(_input['fulfills']['txid'] === input['fulfills']['txid'] && _input['fulfills']['output'] === input['fulfills']['output']))) {
|
||||||
|
match = tx.inputs.indexOf(_input);
|
||||||
|
}
|
||||||
|
_input.fulfillment = null;
|
||||||
|
});
|
||||||
|
if (input && match >= 0 && tx.inputs) {
|
||||||
|
tx.inputs = [tx.inputs[match]];
|
||||||
|
}
|
||||||
// Sort the keys
|
// Sort the keys
|
||||||
return (0, _jsonStableStringify2.default)(tx, function (a, b) {
|
return (0, _jsonStableStringify2.default)(tx, function (a, b) {
|
||||||
return a.key > b.key ? 1 : -1;
|
return a.key > b.key ? 1 : -1;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var BDB_SERVER_URL = exports.BDB_SERVER_URL = process.env.BDB_SERVER_URL;
|
||||||
|
function testMe() {
|
||||||
|
return 'test';
|
||||||
|
}
|
||||||
|
|
||||||
|
// import { request as baseRequest, sanitize } from 'js-utility-belt/es6';
|
||||||
|
//
|
||||||
|
// const FLASK_BASE_URL = process.env.FLASK_BASE_URL;
|
||||||
|
// export const BDB_SERVER_URL = process.env.BDB_SERVER_URL;
|
||||||
|
// const API_PATH = `${BDB_SERVER_URL}/api/v1/`;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// const DEFAULT_REQUEST_CONFIG = {
|
||||||
|
// credentials: 'include',
|
||||||
|
// headers: {
|
||||||
|
// 'Accept': 'application/json'
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Small wrapper around js-utility-belt's request that provides url resolving, default settings, and
|
||||||
|
// * response handling.
|
||||||
|
// */
|
||||||
|
// function request(url, config = {}) {
|
||||||
|
// // Load default fetch configuration and remove any falsy query parameters
|
||||||
|
// const requestConfig = Object.assign({}, DEFAULT_REQUEST_CONFIG, config, {
|
||||||
|
// query: config.query && sanitize(config.query)
|
||||||
|
// });
|
||||||
|
// let apiUrl = url;
|
||||||
|
//
|
||||||
|
// if (requestConfig.jsonBody) {
|
||||||
|
// requestConfig.headers = Object.assign({}, requestConfig.headers, {
|
||||||
|
// 'Content-Type': 'application/json'
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// if (!url) {
|
||||||
|
// return Promise.reject(new Error('Request was not given a url.'));
|
||||||
|
// } else if (!url.match(/^http/)) {
|
||||||
|
// apiUrl = ApiUrls[url];
|
||||||
|
// if (!apiUrl) {
|
||||||
|
// return Promise.reject(new Error(`Request could not find a url mapping for "${url}"`));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return baseRequest(apiUrl, requestConfig)
|
||||||
|
// .then((res) => res.json())
|
||||||
|
// .catch((err) => {
|
||||||
|
// console.error(err);
|
||||||
|
// throw err;
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// export function requestTransaction(txId) {
|
||||||
|
// return request(ApiUrls['transactions_detail'], {
|
||||||
|
// urlTemplateSpec: {
|
||||||
|
// txId
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// export function postTransaction(transaction) {
|
||||||
|
// return request(ApiUrls['transactions'], {
|
||||||
|
// method: 'POST',
|
||||||
|
// jsonBody: transaction
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// export function listTransactions({ asset_id, operation }) {
|
||||||
|
// return request(ApiUrls['transactions'], {
|
||||||
|
// query: {
|
||||||
|
// asset_id,
|
||||||
|
// operation
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// export function pollStatusAndFetchTransaction(transaction) {
|
||||||
|
// return new Promise((resolve, reject) => {
|
||||||
|
// const timer = setInterval(() => {
|
||||||
|
// requestStatus(transaction.id)
|
||||||
|
// .then((res) => {
|
||||||
|
// console.log('Fetched transaction status:', res);
|
||||||
|
// if (res.status === 'valid') {
|
||||||
|
// clearInterval(timer);
|
||||||
|
// requestTransaction(transaction.id)
|
||||||
|
// .then((res) => {
|
||||||
|
// console.log('Fetched transaction:', res);
|
||||||
|
// resolve();
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }, 500)
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// export function listOutputs({ public_key, unspent }) {
|
||||||
|
// return request(ApiUrls['outputs'], {
|
||||||
|
// query: {
|
||||||
|
// public_key,
|
||||||
|
// unspent
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// export function requestStatus(tx_id) {
|
||||||
|
// return request(ApiUrls['statuses'], {
|
||||||
|
// query: {
|
||||||
|
// tx_id
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
117
index.js
117
index.js
@ -228,3 +228,120 @@ function serializeTransactionIntoCanonicalString(transaction, input) {
|
|||||||
// Sort the keys
|
// Sort the keys
|
||||||
return stableStringify(tx, (a, b) => (a.key > b.key ? 1 : -1));
|
return stableStringify(tx, (a, b) => (a.key > b.key ? 1 : -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
import { request as baseRequest, sanitize } from 'js-utility-belt/es6';
|
||||||
|
|
||||||
|
// import { request } from 'utils/request';
|
||||||
|
//
|
||||||
|
// const FLASK_BASE_URL = process.env.FLASK_BASE_URL;
|
||||||
|
// export const BDB_SERVER_URL = process.env.BDB_SERVER_URL;
|
||||||
|
// const API_PATH = `${BDB_SERVER_URL}/api/v1/`;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
const DEFAULT_REQUEST_CONFIG = {
|
||||||
|
credentials: 'include',
|
||||||
|
headers: {
|
||||||
|
'Accept': 'application/json'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Small wrapper around js-utility-belt's request that provides url resolving, default settings, and
|
||||||
|
* response handling.
|
||||||
|
*/
|
||||||
|
function request(url, config = {}) {
|
||||||
|
// Load default fetch configuration and remove any falsy query parameters
|
||||||
|
const requestConfig = Object.assign({}, DEFAULT_REQUEST_CONFIG, config, {
|
||||||
|
query: config.query && sanitize(config.query)
|
||||||
|
});
|
||||||
|
let apiUrl = url;
|
||||||
|
|
||||||
|
if (requestConfig.jsonBody) {
|
||||||
|
requestConfig.headers = Object.assign({}, requestConfig.headers, {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!url) {
|
||||||
|
return Promise.reject(new Error('Request was not given a url.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return baseRequest(apiUrl, requestConfig)
|
||||||
|
.then((res) => res.json())
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function getApiUrls(API_PATH) {
|
||||||
|
return {
|
||||||
|
'transactions': API_PATH + 'transactions',
|
||||||
|
'transactions_detail': API_PATH + 'transactions/%(txId)s',
|
||||||
|
'outputs': API_PATH + 'outputs',
|
||||||
|
'statuses': API_PATH + 'statuses'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function getTransaction(txId, API_PATH) {
|
||||||
|
return request(getApiUrls(API_PATH)['transactions_detail'], {
|
||||||
|
urlTemplateSpec: {
|
||||||
|
txId
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function postTransaction(transaction, API_PATH) {
|
||||||
|
return request(getApiUrls(API_PATH)['transactions'], {
|
||||||
|
method: 'POST',
|
||||||
|
jsonBody: transaction
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function listTransactions({ asset_id, operation }, API_PATH) {
|
||||||
|
return request(getApiUrls(API_PATH)['transactions'], {
|
||||||
|
query: {
|
||||||
|
asset_id,
|
||||||
|
operation
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function pollStatusAndFetchTransaction(transaction, API_PATH) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const timer = setInterval(() => {
|
||||||
|
getStatus(transaction.id, API_PATH)
|
||||||
|
.then((res) => {
|
||||||
|
console.log('Fetched transaction status:', res);
|
||||||
|
if (res.status === 'valid') {
|
||||||
|
clearInterval(timer);
|
||||||
|
getTransaction(transaction.id, API_PATH)
|
||||||
|
.then((res) => {
|
||||||
|
console.log('Fetched transaction:', res);
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 500)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function listOutputs({ public_key, unspent }, API_PATH) {
|
||||||
|
return request(getApiUrls(API_PATH)['outputs'], {
|
||||||
|
query: {
|
||||||
|
public_key,
|
||||||
|
unspent
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getStatus(tx_id, API_PATH) {
|
||||||
|
return request(getApiUrls(API_PATH)['statuses'], {
|
||||||
|
query: {
|
||||||
|
tx_id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,8 +39,11 @@
|
|||||||
"buffer": "^5.0.2",
|
"buffer": "^5.0.2",
|
||||||
"clone": "^2.1.0",
|
"clone": "^2.1.0",
|
||||||
"core-js": "^2.4.1",
|
"core-js": "^2.4.1",
|
||||||
|
"es6-promise": "^4.0.5",
|
||||||
"five-bells-condition": "=3.3.1",
|
"five-bells-condition": "=3.3.1",
|
||||||
|
"isomorphic-fetch": "^2.2.1",
|
||||||
"js-sha3": "^0.5.7",
|
"js-sha3": "^0.5.7",
|
||||||
|
"js-utility-belt": "^1.5.0",
|
||||||
"json-stable-stringify": "^1.0.1",
|
"json-stable-stringify": "^1.0.1",
|
||||||
"tweetnacl": "^0.14.5"
|
"tweetnacl": "^0.14.5"
|
||||||
},
|
},
|
||||||
|
63
utils/bigchaindb_utils.js
Normal file
63
utils/bigchaindb_utils.js
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from './request';
|
||||||
|
import ApiUrls from '../constants/api_urls';
|
||||||
|
|
||||||
|
|
||||||
|
export function requestTransaction(txId) {
|
||||||
|
return request(ApiUrls['transactions_detail'], {
|
||||||
|
urlTemplateSpec: {
|
||||||
|
txId
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function postTransaction(transaction) {
|
||||||
|
return request(ApiUrls['transactions'], {
|
||||||
|
method: 'POST',
|
||||||
|
jsonBody: transaction
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function listTransactions({ asset_id, operation }) {
|
||||||
|
return request(ApiUrls['transactions'], {
|
||||||
|
query: {
|
||||||
|
asset_id,
|
||||||
|
operation
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function pollStatusAndFetchTransaction(transaction) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const timer = setInterval(() => {
|
||||||
|
requestStatus(transaction.id)
|
||||||
|
.then((res) => {
|
||||||
|
console.log('Fetched transaction status:', res);
|
||||||
|
if (res.status === 'valid') {
|
||||||
|
clearInterval(timer);
|
||||||
|
requestTransaction(transaction.id)
|
||||||
|
.then((res) => {
|
||||||
|
console.log('Fetched transaction:', res);
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 500)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function listOutputs({ public_key, unspent }) {
|
||||||
|
return request(ApiUrls['outputs'], {
|
||||||
|
query: {
|
||||||
|
public_key,
|
||||||
|
unspent
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function requestStatus(tx_id) {
|
||||||
|
return request(ApiUrls['statuses'], {
|
||||||
|
query: {
|
||||||
|
tx_id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
44
utils/request.js
Normal file
44
utils/request.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import { request as baseRequest, sanitize } from 'js-utility-belt/es6';
|
||||||
|
|
||||||
|
import ApiUrls from '../constants/api_urls';
|
||||||
|
|
||||||
|
|
||||||
|
const DEFAULT_REQUEST_CONFIG = {
|
||||||
|
credentials: 'include',
|
||||||
|
headers: {
|
||||||
|
'Accept': 'application/json'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Small wrapper around js-utility-belt's request that provides url resolving, default settings, and
|
||||||
|
* response handling.
|
||||||
|
*/
|
||||||
|
export default function request(url, config = {}) {
|
||||||
|
// Load default fetch configuration and remove any falsy query parameters
|
||||||
|
const requestConfig = Object.assign({}, DEFAULT_REQUEST_CONFIG, config, {
|
||||||
|
query: config.query && sanitize(config.query)
|
||||||
|
});
|
||||||
|
let apiUrl = url;
|
||||||
|
|
||||||
|
if (requestConfig.jsonBody) {
|
||||||
|
requestConfig.headers = Object.assign({}, requestConfig.headers, {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!url) {
|
||||||
|
return Promise.reject(new Error('Request was not given a url.'));
|
||||||
|
} else if (!url.match(/^http/)) {
|
||||||
|
apiUrl = ApiUrls[url];
|
||||||
|
if (!apiUrl) {
|
||||||
|
return Promise.reject(new Error(`Request could not find a url mapping for "${url}"`));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return baseRequest(apiUrl, requestConfig)
|
||||||
|
.then((res) => res.json())
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user