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>
162 lines
3.5 KiB
JavaScript
162 lines
3.5 KiB
JavaScript
import { gql } from 'graphql-tag'
|
|
import { generateResolverName } from '@/lib/wallet'
|
|
|
|
import walletDefs from 'wallets/server'
|
|
import { isServerField } from 'wallets'
|
|
|
|
function injectTypeDefs (typeDefs) {
|
|
console.group('injected GraphQL type defs:')
|
|
const injected = walletDefs.map(
|
|
(w) => {
|
|
let args = 'id: ID, '
|
|
args += w.fields
|
|
.filter(isServerField)
|
|
.map(f => {
|
|
let arg = `${f.name}: String`
|
|
if (!f.optional) {
|
|
arg += '!'
|
|
}
|
|
return arg
|
|
}).join(', ')
|
|
args += ', settings: AutowithdrawSettings!'
|
|
const resolverName = generateResolverName(w.walletField)
|
|
const typeDef = `${resolverName}(${args}): Boolean`
|
|
console.log(typeDef)
|
|
return typeDef
|
|
})
|
|
console.groupEnd()
|
|
|
|
return `${typeDefs}\n\nextend type Mutation {\n${injected.join('\n')}\n}`
|
|
}
|
|
|
|
const typeDefs = `
|
|
extend type Query {
|
|
invoice(id: ID!): Invoice!
|
|
withdrawl(id: ID!): Withdrawl!
|
|
numBolt11s: Int!
|
|
connectAddress: String!
|
|
walletHistory(cursor: String, inc: String): History
|
|
wallets: [Wallet!]!
|
|
wallet(id: ID!): Wallet
|
|
walletByType(type: String!): Wallet
|
|
walletLogs: [WalletLog]!
|
|
}
|
|
|
|
extend type Mutation {
|
|
createInvoice(amount: Int!, expireSecs: Int, hodlInvoice: Boolean): Invoice!
|
|
createWithdrawl(invoice: String!, maxFee: Int!): Withdrawl!
|
|
sendToLnAddr(addr: String!, amount: Int!, maxFee: Int!, comment: String, identifier: Boolean, name: String, email: String): Withdrawl!
|
|
cancelInvoice(hash: String!, hmac: String!): Invoice!
|
|
dropBolt11(id: ID): Withdrawl
|
|
removeWallet(id: ID!): Boolean
|
|
deleteWalletLogs(wallet: String): Boolean
|
|
}
|
|
|
|
type Wallet {
|
|
id: ID!
|
|
createdAt: Date!
|
|
type: String!
|
|
enabled: Boolean!
|
|
priority: Int!
|
|
wallet: WalletDetails!
|
|
}
|
|
|
|
type WalletLNAddr {
|
|
address: String!
|
|
}
|
|
|
|
type WalletLND {
|
|
socket: String!
|
|
macaroon: String!
|
|
cert: String
|
|
}
|
|
|
|
type WalletCLN {
|
|
socket: String!
|
|
rune: String!
|
|
cert: String
|
|
}
|
|
|
|
type WalletLNbits {
|
|
url: String!
|
|
invoiceKey: String!
|
|
}
|
|
|
|
union WalletDetails = WalletLNAddr | WalletLND | WalletCLN | WalletLNbits
|
|
|
|
input AutowithdrawSettings {
|
|
autoWithdrawThreshold: Int!
|
|
autoWithdrawMaxFeePercent: Float!
|
|
priority: Int
|
|
enabled: Boolean
|
|
}
|
|
|
|
type Invoice {
|
|
id: ID!
|
|
createdAt: Date!
|
|
hash: String!
|
|
bolt11: String!
|
|
expiresAt: Date!
|
|
cancelled: Boolean!
|
|
confirmedAt: Date
|
|
satsReceived: Int
|
|
satsRequested: Int!
|
|
nostr: JSONObject
|
|
comment: String
|
|
lud18Data: JSONObject
|
|
hmac: String
|
|
isHeld: Boolean
|
|
confirmedPreimage: String
|
|
actionState: String
|
|
actionType: String
|
|
actionError: String
|
|
item: Item
|
|
itemAct: ItemAct
|
|
}
|
|
|
|
type Withdrawl {
|
|
id: ID!
|
|
createdAt: Date!
|
|
hash: String
|
|
bolt11: String
|
|
satsPaying: Int!
|
|
satsPaid: Int
|
|
satsFeePaying: Int!
|
|
satsFeePaid: Int
|
|
status: String
|
|
autoWithdraw: Boolean!
|
|
p2p: Boolean!
|
|
preimage: String
|
|
}
|
|
|
|
type Fact {
|
|
id: ID!
|
|
createdAt: Date!
|
|
sats: Float!
|
|
type: String!
|
|
bolt11: String
|
|
status: String
|
|
description: String
|
|
autoWithdraw: Boolean
|
|
item: Item
|
|
invoiceComment: String
|
|
invoicePayerData: JSONObject
|
|
subName: String
|
|
}
|
|
|
|
type History {
|
|
facts: [Fact!]!
|
|
cursor: String
|
|
}
|
|
|
|
type WalletLog {
|
|
id: ID!
|
|
createdAt: Date!
|
|
wallet: ID!
|
|
level: String!
|
|
message: String!
|
|
}
|
|
`
|
|
|
|
export default gql`${injectTypeDefs(typeDefs)}`
|