mirror of
https://github.com/LBRYFoundation/curate.git
synced 2025-08-23 17:37:25 +00:00
Add LBRY Module
This commit is contained in:
parent
8f506f9e76
commit
b399e344c8
1 changed files with 186 additions and 0 deletions
186
src/structures/LBRY.js
Normal file
186
src/structures/LBRY.js
Normal file
|
@ -0,0 +1,186 @@
|
|||
const fetch = require('node-fetch');
|
||||
const AbortController = require('abort-controller');
|
||||
const config = require('config');
|
||||
|
||||
class LBRY {
|
||||
static _request(options = {}) {
|
||||
if (!options.url)
|
||||
throw new Error('No URL was provided!');
|
||||
|
||||
if (!options.method)
|
||||
options.method = 'get';
|
||||
|
||||
const url = new URL(options.noBase ? options.url : config.sdkURL + options.url);
|
||||
let body = options.body;
|
||||
|
||||
// Query params
|
||||
if (options.query && Object.keys(options.query).length)
|
||||
Object.keys(options.query).map(key =>
|
||||
url.searchParams.append(key, options.query[key]));
|
||||
|
||||
// Body Format
|
||||
if (body && options.bodyType === 'json')
|
||||
body = JSON.stringify(body);
|
||||
else if (body && options.bodyType === 'form') {
|
||||
body = new URLSearchParams();
|
||||
Object.keys(options.body).forEach(key =>
|
||||
body.append(key, options.body[key]));
|
||||
}
|
||||
|
||||
// Hash
|
||||
if (options.hash)
|
||||
url.hash = options.hash;
|
||||
|
||||
// User Agent
|
||||
const userAgent = `LBRYCurate (https://github.com/LBRYFoundation/curate ${this.client.pkg.version}) Node.js/${process.version}`;
|
||||
if (!options.headers)
|
||||
options.headers = {
|
||||
'User-Agent': userAgent
|
||||
};
|
||||
else
|
||||
options.headers['User-Agent'] = userAgent;
|
||||
|
||||
// Abort Controller
|
||||
const controller = new AbortController();
|
||||
const controllerTimeout = setTimeout(controller.abort.bind(controller), 5000);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
fetch(url.href, {
|
||||
body,
|
||||
headers: options.headers,
|
||||
method: options.method,
|
||||
signal: controller.signal
|
||||
}).then(r => {
|
||||
clearTimeout(controllerTimeout);
|
||||
resolve(r);
|
||||
}).catch(e => {
|
||||
clearTimeout(controllerTimeout);
|
||||
if (e && e.type === 'aborted')
|
||||
resolve(e); else reject(e);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
static _sdkRequest(method, params = {}) {
|
||||
const payload = { method };
|
||||
if (params && Object.keys(params).length)
|
||||
payload.params = params;
|
||||
|
||||
return this._request({
|
||||
url: '',
|
||||
method: 'post',
|
||||
bodyType: 'json',
|
||||
body: payload
|
||||
});
|
||||
}
|
||||
|
||||
// #region Account Methods
|
||||
/**
|
||||
* List details of all of the accounts or a specific account.
|
||||
*/
|
||||
static listAccounts(params) {
|
||||
return this._sdkRequest('account_list', params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new account.
|
||||
* @param {string} accountName The account's name
|
||||
*/
|
||||
static createAccount(accountName) {
|
||||
return this._sdkRequest('account_create', { account_name: accountName, single_key: true });
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the balance of an account
|
||||
* @param {string} accountID The account's ID
|
||||
*/
|
||||
static accountBalance(accountID) {
|
||||
return this._sdkRequest('account_balance', { account_id: accountID });
|
||||
}
|
||||
|
||||
/**
|
||||
* Transfer some amount (or --everything) to an account from another account (can be the same account).
|
||||
* @param {object} options
|
||||
* @param {string} options.to The account ID to fund
|
||||
* @param {string} options.from The account ID to fund from
|
||||
* @param {boolean} options.everything Transfer everything
|
||||
* @param {string} options.amount The amount to fund (integer/float string)
|
||||
*/
|
||||
static fundAccount({ to, from, everything, amount }) {
|
||||
return this._sdkRequest('account_fund', { to_account: to, from_account: from, everything, amount });
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an existing account.
|
||||
* @param {string} accountID The account's ID
|
||||
*/
|
||||
static removeAccount(accountID) {
|
||||
return this._sdkRequest('account_remove', { account_id: accountID });
|
||||
}
|
||||
// #endregion
|
||||
|
||||
// #region Support Methods
|
||||
/**
|
||||
* List supports and tips in my control.
|
||||
* @param {object} options
|
||||
* @param {string} options.accountID The account ID to list
|
||||
* @param {string|Array<string>} options.claimID The clain ID to list
|
||||
*/
|
||||
static listSupports({ accountID, claimID }) {
|
||||
return this._sdkRequest('support_list', { account_id: accountID, claim_id: claimID });
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a support or a tip for name claim.
|
||||
* @param {object} options
|
||||
* @param {string} options.accountID The account ID to use
|
||||
* @param {string} options.claimID The claim ID to use
|
||||
* @param {number} options.amount The amount of support
|
||||
*/
|
||||
static createSupport({ accountID, claimID, amount }) {
|
||||
return this._sdkRequest('support_create', {
|
||||
account_id: accountID, claim_id: claimID,
|
||||
amount, funding_account_ids: accountID });
|
||||
}
|
||||
|
||||
/**
|
||||
* Abandon supports, including tips, of a specific claim, optionally keeping some amount as supports.
|
||||
* @param {object} options
|
||||
* @param {string} options.accountID The account ID to use
|
||||
* @param {string} options.claimID The claim ID to use
|
||||
*/
|
||||
static abandonSupport({ accountID, claimID }) {
|
||||
return this._sdkRequest('support_abandon', { account_id: accountID, claim_id: claimID });
|
||||
}
|
||||
// #endregion
|
||||
|
||||
// #region Wallet & Address Methods
|
||||
/**
|
||||
* Return the balance of a wallet
|
||||
*/
|
||||
static walletBalance() {
|
||||
return this._sdkRequest('wallet_balance');
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the same number of credits to multiple
|
||||
* addresses using all accounts in wallet to fund the
|
||||
* transaction and the default account to receive any change.
|
||||
* @param {object} options
|
||||
* @param {string} options.to The wallet address to fund
|
||||
* @param {string} options.amount The amount to send
|
||||
*/
|
||||
static sendToWallet({ amount, to }) {
|
||||
return this._sdkRequest('wallet_send', { amount, addresses: to });
|
||||
}
|
||||
|
||||
/**
|
||||
* List account addresses or details of single address.
|
||||
*/
|
||||
static listAddresses() {
|
||||
return this._sdkRequest('address_list', { page_size: 1 });
|
||||
}
|
||||
// #endregion
|
||||
}
|
||||
|
||||
module.exports = LBRY;
|
Loading…
Add table
Reference in a new issue