112 lines
3.4 KiB
JavaScript
112 lines
3.4 KiB
JavaScript
import { Lbry, doNotify } from 'lbry-redux';
|
|
import Lbryio from 'lbryio';
|
|
|
|
const rewards = {};
|
|
|
|
rewards.TYPE_NEW_DEVELOPER = 'new_developer';
|
|
rewards.TYPE_NEW_USER = 'new_user';
|
|
rewards.TYPE_CONFIRM_EMAIL = 'verified_email';
|
|
rewards.TYPE_FIRST_CHANNEL = 'new_channel';
|
|
rewards.TYPE_FIRST_STREAM = 'first_stream';
|
|
rewards.TYPE_MANY_DOWNLOADS = 'many_downloads';
|
|
rewards.TYPE_FIRST_PUBLISH = 'first_publish';
|
|
rewards.TYPE_FEATURED_DOWNLOAD = 'featured_download';
|
|
rewards.TYPE_REFERRAL = 'referral';
|
|
rewards.YOUTUBE_CREATOR = 'youtube_creator';
|
|
|
|
rewards.claimReward = type => {
|
|
function requestReward(resolve, reject, params) {
|
|
if (!Lbryio.enabled) {
|
|
reject(new Error(__('Rewards are not enabled.')));
|
|
return;
|
|
}
|
|
Lbryio.call('reward', 'new', params, 'post').then(reward => {
|
|
const message =
|
|
reward.reward_notification || `You have claimed a ${reward.reward_amount} LBC reward.`;
|
|
|
|
// Display global notice
|
|
const action = doNotify({
|
|
message,
|
|
linkText: __('Show All'),
|
|
linkTarget: '/rewards',
|
|
isError: false,
|
|
displayType: ['snackbar'],
|
|
});
|
|
window.app.store.dispatch(action);
|
|
|
|
// Add more events here to display other places
|
|
|
|
resolve(reward);
|
|
}, reject);
|
|
}
|
|
|
|
return new Promise((resolve, reject) => {
|
|
Lbry.wallet_unused_address().then(address => {
|
|
const params = {
|
|
reward_type: type,
|
|
wallet_address: address,
|
|
};
|
|
|
|
switch (type) {
|
|
case rewards.TYPE_FIRST_CHANNEL:
|
|
Lbry.claim_list_mine()
|
|
.then(claims => {
|
|
const claim = claims
|
|
.reverse()
|
|
.find(
|
|
foundClaim =>
|
|
foundClaim.name.length &&
|
|
foundClaim.name[0] === '@' &&
|
|
foundClaim.txid.length &&
|
|
foundClaim.category === 'claim'
|
|
);
|
|
if (claim) {
|
|
params.transaction_id = claim.txid;
|
|
requestReward(resolve, reject, params);
|
|
} else {
|
|
reject(new Error(__('Please create a channel identity first.')));
|
|
}
|
|
})
|
|
.catch(reject);
|
|
break;
|
|
|
|
case rewards.TYPE_FIRST_PUBLISH:
|
|
Lbry.claim_list_mine()
|
|
.then(claims => {
|
|
const claim = claims
|
|
.reverse()
|
|
.find(
|
|
foundClaim =>
|
|
foundClaim.name.length &&
|
|
foundClaim.name[0] !== '@' &&
|
|
foundClaim.txid.length &&
|
|
foundClaim.category === 'claim'
|
|
);
|
|
if (claim) {
|
|
params.transaction_id = claim.txid;
|
|
requestReward(resolve, reject, params);
|
|
} else {
|
|
reject(
|
|
claims.length
|
|
? new Error(
|
|
__(
|
|
'Please publish something and wait for confirmation by the network to claim this reward.'
|
|
)
|
|
)
|
|
: new Error(__('Please publish something to claim this reward.'))
|
|
);
|
|
}
|
|
})
|
|
.catch(reject);
|
|
break;
|
|
|
|
case rewards.TYPE_FIRST_STREAM:
|
|
case rewards.TYPE_NEW_USER:
|
|
default:
|
|
requestReward(resolve, reject, params);
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
export default rewards;
|