torrent seed order type

This commit is contained in:
Daniel Lugo 2021-02-22 15:59:38 -04:00
parent f43982d541
commit 6b86ab34a3

View file

@ -12,6 +12,8 @@ const {
Schema
} = Common
const { assertNever } = require('assert-never')
const crypto = require('crypto')
const fetch = require('node-fetch')
const LightningServices = require('../../../../utils/lightningServices')
const {
@ -321,7 +323,72 @@ const listenerForAddr = (addr, SEA) => async (order, orderID) => {
} else if (order.targetType === 'spontaneousPayment') {
// no action required
} else if (order.targetType === 'torrentSeed') {
// TODO
logger.debug('TORRENT')
const numberOfTokens = Number(order.ackInfo)
if (isNaN(numberOfTokens)) {
logger.error('ackInfo provided is not a valid number')
return
}
const seedUrl = process.env.TORRENT_SEED_URL
const seedToken = process.env.TORRENT_SEED_TOKEN
if (!seedUrl || !seedToken) {
logger.error('torrentSeed service not available')
return
}
logger.debug('SEED URL OK')
const tokens = Array(numberOfTokens)
for (let i = 0; i < numberOfTokens; i++) {
tokens[i] = crypto.randomBytes(32).toString('hex')
}
/**@param {string} token */
const enrollToken = async token => {
const reqData = {
seed_token: seedToken,
wallet_token: token
}
// @ts-expect-error TODO
const res = await fetch(`${seedUrl}/api/enroll_token`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(reqData)
})
if (res.status !== 200) {
throw new Error('torrentSeed service currently not available')
}
}
await Promise.all(tokens.map(enrollToken))
logger.debug('RES SEED OK')
const ackData = { seedUrl, tokens }
const toSend = JSON.stringify(ackData)
const encrypted = await SEA.encrypt(toSend, secret)
const serviceResponse = {
type: 'orderAck',
response: encrypted
}
console.log('RES SEED SENT')
const uuid = gunUUID()
orderResponse.ackNode = uuid
await /** @type {Promise<void>} */ (new Promise((res, rej) => {
getUser()
.get(Key.ORDER_TO_RESPONSE)
.get(uuid)
.put(serviceResponse, ack => {
if (ack.err && typeof ack.err !== 'number') {
rej(
new Error(
`Error saving encrypted orderAck to order to response usergraph: ${ack}`
)
)
} else {
res()
}
})
}))
logger.debug('RES SENT SEED')
} else if (order.targetType === 'other') {
// TODO
} else {