reactions.js
1 import chalk from 'chalk' 2 import cryptoUtils from '../crypto.js' 3 //import { getResource } from './utils.js' 4 import events from './events.js' 5 import state from './state.js' 6 import lightning from './lightning.js' 7 8 const { serverState } = state 9 //const ChromecastAPI = require('chromecast-api') 10 //const cast = new ChromecastAPI() 11 12 // I disabled Chromecast because I don't think I'll use it. 13 14 let castDeviceIds = [] 15 let castDeviceMap = {} 16 17 //cast.on('device', d => { 18 // let taskId = cryptoUtils.createCardHash(d.friendlyName) 19 // castDeviceIds.push(taskId) 20 // castDeviceMap[taskId] = d.friendlyName 21 // console.log(chalk.bold.red(d.friendlyName), 'castable') 22 //}) 23 24 function checkForChargedEvent( resourceId ){ 25 let charged 26 serverState.bookings.forEach( b => { 27 if (resourceId === b.resourceId) { 28 let dnow = new Date() 29 let now = dnow.getTime() 30 let tsUntilStart = parseInt(b.startTs) - now 31 let tsUntilEnd = parseInt(b.endTs) - now 32 let current = (tsUntilStart < 0 && tsUntilEnd > 0) 33 if (current && b.charge > 0){ 34 charged = b.charge 35 } 36 } 37 }) 38 return charged 39 } 40 41 let channelSatTotalTracker = 0 42 let outputSatTotalTracker = 0 43 let mostRecentAccount = null 44 let i = 0 45 46 function reactions(ev){ 47 process.nextTick( err => { 48 switch (ev.type) { 49 case 'task-boosted': 50 case 'task-boosted-lightning': 51 let optionList = [] 52 let defaultPrice 53 let resourceId 54 let resourceList = serverState.resources.map(r => r.resourceId) 55 let amount = parseFloat(ev.amount) 56 57 serverState.tasks.some(t => { 58 if (resourceList.indexOf(t.taskId) > -1 && t.priorities.indexOf(ev.taskId) > -1){ 59 resourceId = t.taskId 60 return true 61 } 62 }) 63 if (resourceId){ 64 console.log("got resourceId, attempting trigger", resourceId) 65 serverState.resources.some(r => { 66 if (r.resourceId === resourceId){ 67 defaultPrice = r.charge 68 return true 69 } 70 }) 71 serverState.tasks.some(t => { 72 if (ev.taskId === t.taskId){ 73 let str = t.name 74 let cashTagLocation = str.search(/\$/) 75 let customPrice = parseFloat( str.slice(cashTagLocation + 1, cashTagLocation + 5) ) 76 if (customPrice > 0){ 77 console.log("using custom price, ", customPrice) 78 defaultPrice = customPrice 79 } 80 let hopper = t.name.split(':')[0] 81 events.resourceUsed(resourceId, 'lightning', defaultPrice, hopper, console.log) 82 return true 83 } 84 }) 85 } 86 break 87 case 'task-claimed': 88 // let fName = castDeviceMap[ev.inId] 89 // let d = cast.devices.filter(d => d.friendlyName === fName)[0] 90 // if (fName && d){ 91 // let mediaUrl = serverState.tasks[serverState.hashMap[ev.taskId]].name 92 // try { 93 // d.play(mediaUrl) 94 // } catch(err) { 95 // cast.update() 96 // } 97 // }else { 98 // cast.update() 99 // } 100 break 101 case 'member-field-updated': 102 break 103 case 'member-paid': 104 break 105 case 'resource-stocked': 106 events.memberActivated(ev.memberId) 107 break 108 case 'member-created': 109 break 110 case 'resource-created': 111 break 112 case 'task-created': 113 break 114 case 'resource-created': 115 break 116 case 'get-node-info': 117 if (ev.info.lightningblocks === 0) return 118 let channelReducer = (accumulator,current) => accumulator + current.channel_sat 119 let outputReducer = (accumulator,current) => { 120 if (current.status !== "confirmed"){ 121 return accumulator 122 } 123 return accumulator + current.value 124 } 125 let totalInChannels = ev.info.channels.reduce(channelReducer, 0) 126 let totalInOutputs = ev.info.outputs.reduce(outputReducer, 0) 127 let changeLightning = totalInChannels - channelSatTotalTracker 128 let changeChain = totalInOutputs - outputSatTotalTracker 129 if (i === 0){ 130 console.log('wallet balance:', chalk.bold.yellow('(sats)')) 131 } 132 i ++ 133 if (changeLightning === totalInChannels && i === 1){ 134 console.log('', chalk.bold.yellow(totalInChannels.toLocaleString()), "in channels") 135 } else if (changeLightning > 0){ 136 console.log('', chalk.bold.yellow(totalInChannels.toLocaleString()), "in channels", chalk.bold.green('+', changeLightning )) 137 } else if (changeLightning < 0){ 138 console.log('', chalk.bold.yellow(totalInChannels.toLocaleString()), "in channels", chalk.bold.red('-', - changeLightning )) 139 } 140 if (changeChain === totalInOutputs && i === 1){ 141 console.log('', chalk.bold.yellow(totalInOutputs.toLocaleString()), "on chain") 142 } else if (changeChain > 0){ 143 console.log('', chalk.bold.yellow(totalInOutputs.toLocaleString()), "on chain", chalk.bold.green('+', changeChain)) 144 } else if (changeChain < 0){ 145 console.log('', chalk.bold.yellow(totalInOutputs.toLocaleString()), "on chain", chalk.bold.red('-', - changeChain)) 146 } 147 outputSatTotalTracker = totalInOutputs 148 channelSatTotalTracker = totalInChannels 149 break 150 default: 151 let name = '~' 152 serverState.members.some(m => { 153 if (ev.blame === m.memberId || ev.memberId === m.memberId){ 154 name = m.name 155 return true 156 } 157 }) 158 if (mostRecentAccount !== name){ 159 mostRecentAccount = name 160 } 161 break 162 } 163 }) 164 } 165 166 export default reactions