stacker.news/wallets/blink/common.js

67 lines
1.5 KiB
JavaScript

import { fetchWithTimeout } from '@/lib/fetch'
import { assertContentTypeJson, assertResponseOk } from '@/lib/url'
export const galoyBlinkUrl = 'https://api.blink.sv/graphql'
export const galoyBlinkDashboardUrl = 'https://dashboard.blink.sv/'
export const SCOPE_READ = 'READ'
export const SCOPE_WRITE = 'WRITE'
export const SCOPE_RECEIVE = 'RECEIVE'
export async function getWallet ({ apiKey, currency }, { signal }) {
const out = await request({
apiKey,
query: `
query me {
me {
defaultAccount {
wallets {
id
walletCurrency
}
}
}
}`
}, { signal })
const wallets = out.data.me.defaultAccount.wallets
for (const wallet of wallets) {
if (wallet.walletCurrency === currency) {
return wallet
}
}
throw new Error(`wallet ${currency} not found`)
}
export async function request ({ apiKey, query, variables = {} }, { signal }) {
const res = await fetchWithTimeout(galoyBlinkUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-KEY': apiKey
},
body: JSON.stringify({ query, variables }),
signal
})
assertResponseOk(res)
assertContentTypeJson(res)
return res.json()
}
export async function getScopes ({ apiKey }, { signal }) {
const out = await request({
apiKey,
query: `
query scopes {
authorization {
scopes
}
}`
}, { signal })
const scopes = out?.data?.authorization?.scopes
return scopes || []
}