cc289089cf
* not-custodial zap scaffolding * invoice forward state machine * small refinements to state machine * make wrap invoice work * get state machine working end to end * untested logic layout for paidAction invoice wraps * perform pessimisitic actions before outgoing payment * working end to end * remove unneeded params from wallets/server/createInvoice * fix cltv relative/absolute confusion + cancelling forwards * small refinements * add p2p wrap info to paidAction docs * fallback to SN invoice when wrap fails * fix paidAction retry description * consistent naming scheme for state machine * refinements * have sn pay bounded outbound fee * remove debug logging * reenable lnc permissions checks * don't p2p zap on item forward splits * make createInvoice params json encodeable * direct -> p2p badge on notifications * allow no tls in dev for core lightning * fix autowithdraw to create invoice with msats * fix autowithdraw msats/sats inconsitency * label p2p zaps properly in satistics * add fees to autowithdrawal notifications * add RETRYING as terminal paid action state * Update api/paidAction/README.md Co-authored-by: ekzyis <ek@stacker.news> * Update api/paidAction/README.md Co-authored-by: ekzyis <ek@stacker.news> * Update api/lnd/index.js Co-authored-by: ekzyis <ek@stacker.news> * ek suggestions * add bugetable to nwc card * get paranoid with numbers * better finalize retries and better max timeout height * refine forward failure transitions * more accurate satistics p2p status * make sure paidaction cancel in state machine only * dont drop bolt11s unless status is not null * only allow PENDING_HELD to transition to FORWARDING * add mermaid state machine diagrams to paid action doc * fix cancel transition name * cleanup readme * move forwarding outside of transition * refine testServerConnect and make sure ensureB64 transforms * remove unused params from testServerConnect --------- Co-authored-by: ekzyis <ek@stacker.news> Co-authored-by: k00b <k00b@stacker.news>
70 lines
1.7 KiB
JavaScript
70 lines
1.7 KiB
JavaScript
import { retryPaidAction } from '../paidAction'
|
|
import { USER_ID } from '@/lib/constants'
|
|
|
|
function paidActionType (actionType) {
|
|
switch (actionType) {
|
|
case 'ITEM_CREATE':
|
|
case 'ITEM_UPDATE':
|
|
return 'ItemPaidAction'
|
|
case 'ZAP':
|
|
case 'DOWN_ZAP':
|
|
return 'ItemActPaidAction'
|
|
case 'TERRITORY_CREATE':
|
|
case 'TERRITORY_UPDATE':
|
|
case 'TERRITORY_BILLING':
|
|
case 'TERRITORY_UNARCHIVE':
|
|
return 'SubPaidAction'
|
|
case 'DONATE':
|
|
return 'DonatePaidAction'
|
|
case 'POLL_VOTE':
|
|
return 'PollVotePaidAction'
|
|
default:
|
|
throw new Error('Unknown action type')
|
|
}
|
|
}
|
|
|
|
export default {
|
|
Query: {
|
|
paidAction: async (parent, { invoiceId }, { models, me }) => {
|
|
const invoice = await models.invoice.findUnique({
|
|
where: {
|
|
id: invoiceId,
|
|
userId: me?.id ?? USER_ID.anon
|
|
}
|
|
})
|
|
if (!invoice) {
|
|
throw new Error('Invoice not found')
|
|
}
|
|
|
|
return {
|
|
type: paidActionType(invoice.actionType),
|
|
invoice,
|
|
result: invoice.actionResult,
|
|
paymentMethod: invoice.actionOptimistic ? 'OPTIMISTIC' : 'PESSIMISTIC'
|
|
}
|
|
}
|
|
},
|
|
Mutation: {
|
|
retryPaidAction: async (parent, { invoiceId }, { models, me, lnd }) => {
|
|
if (!me) {
|
|
throw new Error('You must be logged in')
|
|
}
|
|
|
|
const invoice = await models.invoice.findUnique({ where: { id: invoiceId, userId: me.id } })
|
|
if (!invoice) {
|
|
throw new Error('Invoice not found')
|
|
}
|
|
|
|
const result = await retryPaidAction(invoice.actionType, { invoiceId }, { models, me, lnd })
|
|
|
|
return {
|
|
...result,
|
|
type: paidActionType(invoice.actionType)
|
|
}
|
|
}
|
|
},
|
|
PaidAction: {
|
|
__resolveType: obj => obj.type
|
|
}
|
|
}
|