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
|
Schema
|
||||||
} = Common
|
} = Common
|
||||||
const { assertNever } = require('assert-never')
|
const { assertNever } = require('assert-never')
|
||||||
|
const crypto = require('crypto')
|
||||||
|
const fetch = require('node-fetch')
|
||||||
|
|
||||||
const LightningServices = require('../../../../utils/lightningServices')
|
const LightningServices = require('../../../../utils/lightningServices')
|
||||||
const {
|
const {
|
||||||
|
|
@ -321,7 +323,72 @@ const listenerForAddr = (addr, SEA) => async (order, orderID) => {
|
||||||
} else if (order.targetType === 'spontaneousPayment') {
|
} else if (order.targetType === 'spontaneousPayment') {
|
||||||
// no action required
|
// no action required
|
||||||
} else if (order.targetType === 'torrentSeed') {
|
} 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') {
|
} else if (order.targetType === 'other') {
|
||||||
// TODO
|
// TODO
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue