* Wallet flow * Prepopulate fields of complementary protocol * Remove TODO about one mutation for save We need to save protocols in separate mutations so we can use the wallet id returned by the first protocol save for the following protocol saves and save them all to the same wallet. * Fix badges not updated on wallet delete * Fix useProtocol call * Fix lightning address save via prompt * Don't pass share as attribute to DOM * Fix useCallback dependency * Progress numbers as SVGs * Fix progress line margins * Remove unused saveWallet arguments * Update cache with settings response * Fix line does not connect with number 1 * Don't reuse page nav arrows in form nav * Fix missing SVG hover style * Fix missing space in wallet save log message * Reuse CSS from nav.module.css * align buttons and their icons/text * center form progress line * increase top padding of form on smaller screens * provide margin above button bar on settings form --------- Co-authored-by: k00b <k00b@stacker.news>
444 lines
8.6 KiB
JavaScript
444 lines
8.6 KiB
JavaScript
import { gql } from 'graphql-tag'
|
|
|
|
const shared = 'walletId: ID, templateName: ID, enabled: Boolean!'
|
|
|
|
const typeDefs = gql`
|
|
extend type Query {
|
|
invoice(id: ID!): Invoice!
|
|
withdrawl(id: ID!): Withdrawl!
|
|
direct(id: ID!): Direct!
|
|
numBolt11s: Int!
|
|
connectAddress: String!
|
|
walletHistory(cursor: String, inc: String): History
|
|
wallets: [WalletOrTemplate!]!
|
|
wallet(id: ID, name: String): WalletOrTemplate
|
|
walletSettings: WalletSettings!
|
|
walletLogs(protocolId: Int, cursor: String, debug: Boolean): WalletLogs!
|
|
failedInvoices: [Invoice!]!
|
|
}
|
|
|
|
extend type Mutation {
|
|
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, userCancel: Boolean): Invoice!
|
|
dropBolt11(hash: String!): Boolean
|
|
buyCredits(credits: Int!): BuyCreditsPaidAction!
|
|
|
|
# upserts
|
|
upsertWalletSendLNbits(
|
|
${shared},
|
|
url: String!,
|
|
apiKey: VaultEntryInput!
|
|
): WalletSendLNbits!
|
|
|
|
upsertWalletRecvLNbits(
|
|
${shared},
|
|
url: String!,
|
|
apiKey: String!
|
|
): WalletRecvLNbits!
|
|
|
|
upsertWalletSendPhoenixd(
|
|
${shared},
|
|
url: String!,
|
|
apiKey: VaultEntryInput!
|
|
): WalletSendPhoenixd!
|
|
|
|
upsertWalletRecvPhoenixd(
|
|
${shared},
|
|
url: String!,
|
|
apiKey: String!
|
|
): WalletRecvPhoenixd!
|
|
|
|
upsertWalletSendBlink(
|
|
${shared},
|
|
currency: VaultEntryInput!,
|
|
apiKey: VaultEntryInput!
|
|
): WalletSendBlink!
|
|
|
|
upsertWalletRecvBlink(
|
|
${shared},
|
|
currency: String!,
|
|
apiKey: String!
|
|
): WalletRecvBlink!
|
|
|
|
upsertWalletRecvLightningAddress(
|
|
${shared},
|
|
address: String!
|
|
): WalletRecvLightningAddress!
|
|
|
|
upsertWalletSendNWC(
|
|
${shared},
|
|
url: VaultEntryInput!
|
|
): WalletSendNWC!
|
|
|
|
upsertWalletRecvNWC(
|
|
${shared},
|
|
url: String!
|
|
): WalletRecvNWC!
|
|
|
|
upsertWalletRecvCLNRest(
|
|
${shared},
|
|
socket: String!,
|
|
rune: String!,
|
|
cert: String
|
|
): WalletRecvCLNRest!
|
|
|
|
upsertWalletRecvLNDGRPC(
|
|
${shared},
|
|
socket: String!,
|
|
macaroon: String!,
|
|
cert: String
|
|
): WalletRecvLNDGRPC!
|
|
|
|
upsertWalletSendLNC(
|
|
${shared},
|
|
pairingPhrase: VaultEntryInput!,
|
|
localKey: VaultEntryInput!,
|
|
remoteKey: VaultEntryInput!,
|
|
serverHost: VaultEntryInput!
|
|
): WalletSendLNC!
|
|
|
|
upsertWalletSendWebLN(
|
|
${shared}
|
|
): WalletSendWebLN!
|
|
|
|
# tests
|
|
testWalletRecvNWC(
|
|
url: String!
|
|
): Boolean!
|
|
|
|
testWalletRecvLightningAddress(
|
|
address: String!
|
|
): Boolean!
|
|
|
|
testWalletRecvCLNRest(
|
|
socket: String!,
|
|
rune: String!,
|
|
cert: String
|
|
): Boolean!
|
|
|
|
testWalletRecvLNDGRPC(
|
|
socket: String!,
|
|
macaroon: String!,
|
|
cert: String
|
|
): Boolean!
|
|
|
|
testWalletRecvPhoenixd(
|
|
url: String!
|
|
apiKey: String!
|
|
): Boolean!
|
|
|
|
testWalletRecvLNbits(
|
|
url: String!
|
|
apiKey: String!
|
|
): Boolean!
|
|
|
|
testWalletRecvBlink(
|
|
currency: String!
|
|
apiKey: String!
|
|
): Boolean!
|
|
|
|
# delete
|
|
deleteWallet(id: ID!): Boolean
|
|
|
|
# crypto
|
|
updateWalletEncryption(keyHash: String!, wallets: [WalletEncryptionUpdate!]!): Boolean
|
|
updateKeyHash(keyHash: String!): Boolean
|
|
resetWallets(newKeyHash: String!): Boolean
|
|
disablePassphraseExport: Boolean
|
|
|
|
# settings
|
|
setWalletSettings(settings: WalletSettingsInput!): WalletSettings!
|
|
setWalletPriorities(priorities: [WalletPriorityUpdate!]!): Boolean
|
|
|
|
# logs
|
|
addWalletLog(protocolId: Int, level: String!, message: String!, timestamp: Date!, invoiceId: Int): Boolean
|
|
deleteWalletLogs(protocolId: Int, debug: Boolean): Boolean
|
|
}
|
|
|
|
type BuyCreditsResult {
|
|
credits: Int!
|
|
}
|
|
|
|
interface InvoiceOrDirect {
|
|
id: ID!
|
|
}
|
|
|
|
union WalletOrTemplate = Wallet | WalletTemplate
|
|
|
|
enum WalletStatus {
|
|
OK
|
|
WARNING
|
|
ERROR
|
|
DISABLED
|
|
}
|
|
|
|
type Wallet {
|
|
id: ID!
|
|
name: String!
|
|
priority: Int!
|
|
template: WalletTemplate!
|
|
protocols: [WalletProtocol!]!
|
|
send: WalletStatus!
|
|
receive: WalletStatus!
|
|
}
|
|
|
|
type WalletTemplate {
|
|
name: ID!
|
|
protocols: [WalletProtocolTemplate!]!
|
|
send: WalletStatus!
|
|
receive: WalletStatus!
|
|
}
|
|
|
|
type WalletProtocol {
|
|
id: ID!
|
|
name: String!
|
|
send: Boolean!
|
|
enabled: Boolean!
|
|
config: WalletProtocolConfig!
|
|
status: WalletStatus!
|
|
}
|
|
|
|
type WalletProtocolTemplate {
|
|
id: ID!
|
|
name: String!
|
|
send: Boolean!
|
|
}
|
|
|
|
union WalletProtocolConfig =
|
|
| WalletSendNWC
|
|
| WalletSendLNbits
|
|
| WalletSendPhoenixd
|
|
| WalletSendBlink
|
|
| WalletSendWebLN
|
|
| WalletSendLNC
|
|
| WalletRecvNWC
|
|
| WalletRecvLNbits
|
|
| WalletRecvPhoenixd
|
|
| WalletRecvBlink
|
|
| WalletRecvLightningAddress
|
|
| WalletRecvCLNRest
|
|
| WalletRecvLNDGRPC
|
|
|
|
type WalletSettings {
|
|
receiveCreditsBelowSats: Int!
|
|
sendCreditsBelowSats: Int!
|
|
autoWithdrawThreshold: Int
|
|
autoWithdrawMaxFeePercent: Float
|
|
autoWithdrawMaxFeeTotal: Int
|
|
proxyReceive: Boolean!
|
|
}
|
|
|
|
input WalletSettingsInput {
|
|
receiveCreditsBelowSats: Int!
|
|
sendCreditsBelowSats: Int!
|
|
autoWithdrawThreshold: Int!
|
|
autoWithdrawMaxFeePercent: Float!
|
|
autoWithdrawMaxFeeTotal: Int!
|
|
proxyReceive: Boolean!
|
|
}
|
|
|
|
type WalletSendNWC {
|
|
id: ID!
|
|
url: VaultEntry!
|
|
}
|
|
|
|
type WalletSendLNbits {
|
|
id: ID!
|
|
url: String!
|
|
apiKey: VaultEntry!
|
|
}
|
|
|
|
type WalletSendPhoenixd {
|
|
id: ID!
|
|
url: String!
|
|
apiKey: VaultEntry!
|
|
}
|
|
|
|
type WalletSendBlink {
|
|
id: ID!
|
|
currency: VaultEntry!
|
|
apiKey: VaultEntry!
|
|
}
|
|
|
|
type WalletSendWebLN {
|
|
id: ID!
|
|
}
|
|
|
|
type WalletSendLNC {
|
|
id: ID!
|
|
pairingPhrase: VaultEntry!
|
|
localKey: VaultEntry!
|
|
remoteKey: VaultEntry!
|
|
serverHost: VaultEntry!
|
|
}
|
|
|
|
type WalletRecvNWC {
|
|
id: ID!
|
|
url: String!
|
|
}
|
|
|
|
type WalletRecvLNbits {
|
|
id: ID!
|
|
url: String!
|
|
apiKey: String!
|
|
}
|
|
|
|
type WalletRecvPhoenixd {
|
|
id: ID!
|
|
url: String!
|
|
apiKey: String!
|
|
}
|
|
|
|
type WalletRecvBlink {
|
|
id: ID!
|
|
currency: String!
|
|
apiKey: String!
|
|
}
|
|
|
|
type WalletRecvLightningAddress {
|
|
id: ID!
|
|
address: String!
|
|
}
|
|
|
|
type WalletRecvCLNRest {
|
|
id: ID!
|
|
socket: String!
|
|
rune: String!
|
|
cert: String
|
|
}
|
|
|
|
type WalletRecvLNDGRPC {
|
|
id: ID!
|
|
socket: String!
|
|
macaroon: String!
|
|
cert: String
|
|
}
|
|
|
|
input AutowithdrawSettings {
|
|
autoWithdrawThreshold: Int!
|
|
autoWithdrawMaxFeePercent: Float!
|
|
autoWithdrawMaxFeeTotal: Int!
|
|
}
|
|
|
|
input WalletEncryptionUpdate {
|
|
id: ID!
|
|
protocols: [WalletEncryptionUpdateProtocol!]!
|
|
}
|
|
|
|
input WalletEncryptionUpdateProtocol {
|
|
name: String!
|
|
send: Boolean!
|
|
config: JSONObject!
|
|
}
|
|
|
|
input WalletPriorityUpdate {
|
|
id: ID!
|
|
priority: Int!
|
|
}
|
|
|
|
type Invoice implements InvoiceOrDirect {
|
|
id: ID!
|
|
createdAt: Date!
|
|
hash: String!
|
|
bolt11: String!
|
|
expiresAt: Date!
|
|
cancelled: Boolean!
|
|
cancelledAt: Date
|
|
confirmedAt: Date
|
|
satsReceived: Int
|
|
satsRequested: Int!
|
|
nostr: JSONObject
|
|
comment: String
|
|
lud18Data: JSONObject
|
|
hmac: String
|
|
isHeld: Boolean
|
|
confirmedPreimage: String
|
|
actionState: String
|
|
actionType: String
|
|
actionError: String
|
|
invoiceForward: Boolean
|
|
item: Item
|
|
itemAct: ItemAct
|
|
forwardedSats: Int
|
|
forwardStatus: String
|
|
}
|
|
|
|
type Withdrawl {
|
|
id: ID!
|
|
createdAt: Date!
|
|
hash: String
|
|
bolt11: String
|
|
satsPaying: Int!
|
|
satsPaid: Int
|
|
satsFeePaying: Int!
|
|
satsFeePaid: Int
|
|
status: String
|
|
autoWithdraw: Boolean!
|
|
preimage: String
|
|
forwardedActionType: String
|
|
}
|
|
|
|
type Direct implements InvoiceOrDirect {
|
|
id: ID!
|
|
createdAt: Date!
|
|
bolt11: String
|
|
hash: String
|
|
sats: Int
|
|
preimage: String
|
|
nostr: JSONObject
|
|
comment: String
|
|
lud18Data: JSONObject
|
|
}
|
|
|
|
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 WalletLogs {
|
|
entries: [WalletLogEntry!]!
|
|
cursor: String
|
|
}
|
|
|
|
type WalletLogEntry {
|
|
id: ID!
|
|
createdAt: Date!
|
|
wallet: Wallet
|
|
protocol: WalletProtocol
|
|
level: String!
|
|
message: String!
|
|
context: JSONObject
|
|
}
|
|
|
|
type VaultEntry {
|
|
id: ID!
|
|
iv: String!
|
|
value: String!
|
|
createdAt: Date!
|
|
updatedAt: Date!
|
|
}
|
|
|
|
input VaultEntryInput {
|
|
iv: String!
|
|
value: String!
|
|
keyHash: String!
|
|
}
|
|
`
|
|
export default typeDefs
|