127 lines
3.9 KiB
JavaScript
127 lines
3.9 KiB
JavaScript
|
import { Lbry } from 'lbry-redux';
|
||
|
import { doToast } from 'redux/actions/notifications';
|
||
|
import { Lbryio } from 'lbryinc';
|
||
|
|
||
|
const rewards = {};
|
||
|
|
||
|
rewards.TYPE_NEW_DEVELOPER = 'new_developer';
|
||
|
rewards.TYPE_NEW_USER = 'new_user';
|
||
|
rewards.TYPE_CONFIRM_EMAIL = 'email_provided';
|
||
|
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_REFERRAL = 'referrer';
|
||
|
rewards.TYPE_REFEREE = 'referee';
|
||
|
rewards.TYPE_REWARD_CODE = 'reward_code';
|
||
|
rewards.TYPE_SUBSCRIPTION = 'subscription';
|
||
|
rewards.YOUTUBE_CREATOR = 'youtube_creator';
|
||
|
rewards.TYPE_DAILY_VIEW = 'daily_view';
|
||
|
rewards.TYPE_NEW_ANDROID = 'new_android';
|
||
|
|
||
|
rewards.claimReward = (type, rewardParams) => {
|
||
|
function requestReward(resolve, reject, params) {
|
||
|
if (!Lbryio.enabled) {
|
||
|
reject(new Error(__('Rewards are not enabled.')));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Lbryio.call('reward', 'claim', params, 'post').then(reward => {
|
||
|
const message = reward.reward_notification || `You have claimed a ${reward.reward_amount} LBC reward.`;
|
||
|
|
||
|
// Display global notice
|
||
|
const action = doToast({
|
||
|
message,
|
||
|
linkText: __('Show All'),
|
||
|
linkTarget: '/rewards',
|
||
|
});
|
||
|
window.store.dispatch(action);
|
||
|
|
||
|
if (rewards.callbacks.claimRewardSuccess) {
|
||
|
rewards.callbacks.claimRewardSuccess();
|
||
|
}
|
||
|
|
||
|
resolve(reward);
|
||
|
}, reject);
|
||
|
}
|
||
|
|
||
|
return new Promise((resolve, reject) => {
|
||
|
Lbry.address_unused().then(address => {
|
||
|
const params = {
|
||
|
reward_type: type,
|
||
|
wallet_address: address,
|
||
|
...rewardParams,
|
||
|
};
|
||
|
|
||
|
switch (type) {
|
||
|
case rewards.TYPE_FIRST_CHANNEL:
|
||
|
Lbry.channel_list({ page: 1, page_size: 10 })
|
||
|
.then(claims => {
|
||
|
const claim =
|
||
|
claims.items &&
|
||
|
claims.items.find(
|
||
|
foundClaim =>
|
||
|
foundClaim.name.length &&
|
||
|
foundClaim.name[0] === '@' &&
|
||
|
foundClaim.txid.length &&
|
||
|
foundClaim.type === '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.stream_list({ page: 1, page_size: 10 })
|
||
|
.then(claims => {
|
||
|
const claim =
|
||
|
claims.items &&
|
||
|
claims.items.find(
|
||
|
foundClaim =>
|
||
|
foundClaim.name.length &&
|
||
|
foundClaim.name[0] !== '@' &&
|
||
|
foundClaim.txid.length &&
|
||
|
foundClaim.type === '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);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
rewards.callbacks = {
|
||
|
// Set any callbacks that require code not found in this project
|
||
|
claimRewardSuccess: null,
|
||
|
claimFirstRewardSuccess: null,
|
||
|
rewardApprovalRequired: null,
|
||
|
};
|
||
|
|
||
|
rewards.setCallback = (name, method) => {
|
||
|
rewards.callbacks[name] = method;
|
||
|
};
|
||
|
|
||
|
export default rewards;
|