torrent seed order type
This commit is contained in:
parent
f43982d541
commit
6b86ab34a3
1 changed files with 68 additions and 1 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue