53 lines
1.9 KiB
JavaScript
53 lines
1.9 KiB
JavaScript
import { createInvoice } from 'ln-service'
|
|
import { UserInputError, AuthenticationError } from 'apollo-server-micro'
|
|
|
|
export default {
|
|
Query: {
|
|
invoice: async (parent, { id }, { me, models, lnd }) => {
|
|
return await models.invoice.findUnique({ where: { id: Number(id) } })
|
|
}
|
|
},
|
|
|
|
Mutation: {
|
|
createInvoice: async (parent, { amount }, { me, models, lnd }) => {
|
|
if (!me) {
|
|
throw new AuthenticationError('You must be logged in')
|
|
}
|
|
|
|
if (!amount || amount <= 0) {
|
|
throw new UserInputError('Amount must be positive', { argumentName: 'amount' })
|
|
}
|
|
|
|
/*
|
|
chain_address: undefined,
|
|
created_at: '2021-05-06T22:16:28.000Z',
|
|
description: 'hi there',
|
|
id: '30946d6ff432933e30f6c180cce982c92b509a80bf6c2e896e6579cbda4c1677',
|
|
mtokens: '1000',
|
|
payment: 'e3deb7a0471bf050aa5dd0ef9b546887ab1fdf0306a7cb67d9dda8473f9542f2',
|
|
request: 'lnbcrt10n1psfg64upp5xz2x6ml5x2fnuv8kcxqve6vzey44px5qhakzaztwv4uuhkjvzemsdqddp5jqargv4ex2cqzpgxqr23ssp5u00t0gz8r0c9p2ja6rhek4rgs743lhcrq6nuke7emk5yw0u4gteq9q8zqqyssq92epsvsap3pyfcj4kex5vysew4tqg6c8vxux5nfmc7yqx36l6dk49pafs62dlr92lm5ekzftl7nq6r4wvjhwydtekg6lpj0xgjm5auqpwflxyk',
|
|
secret: '82abf620f82dc9a61cf3921f77432e31d4a11e1dc066ccc177d31937c473eb30',
|
|
tokens: 1
|
|
*/
|
|
// set expires at to 3 hours into future
|
|
const expiresAt = new Date(new Date().setHours(new Date().getHours() + 3))
|
|
const description = `${amount} sats for @${me.name} on stacker.news`
|
|
const invoice = await createInvoice({ description, lnd, tokens: amount, expires_at: expiresAt })
|
|
|
|
const data = {
|
|
hash: invoice.id,
|
|
bolt11: invoice.request,
|
|
expiresAt: expiresAt,
|
|
msatsRequested: amount * 1000,
|
|
user: {
|
|
connect: {
|
|
name: me.name
|
|
}
|
|
}
|
|
}
|
|
|
|
return await models.invoice.create({ data })
|
|
}
|
|
}
|
|
}
|