ekzyis 7c6a65c332
Wallet tests as separate mutations (#2385)
* Rename mutation to UPSERT_WALLET_RECEIVE_LND_GRPC

* Move wallet typedefs into individual sections

* Split wallet tests into separate mutation

---------

Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
2025-08-03 12:23:56 -05:00

122 lines
3.5 KiB
JavaScript

import * as yup from 'yup'
import wallets from '@/wallets/lib/wallets.json'
import protocols from '@/wallets/lib/protocols'
function walletJson (name) {
return wallets.find(wallet => wallet.name === name)
}
export function walletDisplayName (name) {
return walletJson(name)?.displayName || titleCase(name)
}
export function walletImage (name) {
return walletJson(name)?.image
}
export function walletLud16Domain (name) {
const url = walletJson(name)?.url
if (!url) return undefined
return typeof url === 'string' ? new URL(url).hostname : url.lud16Domain
}
function protocol ({ name, send }) {
return protocols.find(protocol => protocol.name === name && protocol.send === send)
}
export function protocolDisplayName ({ name, send }) {
return protocol({ name, send })?.displayName || titleCase(name)
}
export function protocolRelationName ({ name, send }) {
return protocol({ name, send })?.relationName
}
export function reverseProtocolRelationName (relationName) {
return protocols.find(protocol => protocol.relationName.toLowerCase() === relationName.toLowerCase())
}
export function protocolClientSchema ({ name, send }) {
const fields = protocolFields({ name, send })
const schema = yup.object(fields.reduce((acc, field) =>
({
...acc,
[field.name]: field.required ? field.validate.required('required') : field.validate
}), {}))
return schema
}
export function protocolServerSchema ({ name, send }, { keyHash, ignoreKeyHash }) {
const fields = protocolFields({ name, send })
const schema = yup.object(fields.reduce((acc, field) => {
if (field.encrypt) {
const ivSchema = yup.string().hex().length(24)
const valueSchema = yup.string().hex()
return {
...acc,
[field.name]: yup.object({
iv: field.required ? ivSchema.required('required') : ivSchema,
value: field.required ? valueSchema.required('required') : valueSchema,
...(!ignoreKeyHash ? { keyHash: yup.string().required('required').equals([keyHash], `must be ${keyHash}`) } : {})
})
}
}
return {
...acc,
[field.name]: field.required ? field.validate.required('required') : field.validate
}
}, {}))
return schema
}
export function protocolMutationName ({ name, send }) {
const relationName = protocolRelationName({ name, send })
return `upsert${relationName.charAt(0).toUpperCase() + relationName.slice(1)}`
}
export function protocolTestMutationName ({ name, send }) {
const relationName = protocolRelationName({ name, send })
return `test${relationName.charAt(0).toUpperCase() + relationName.slice(1)}`
}
export function protocolFields ({ name, send }) {
return protocol({ name, send })?.fields || []
}
export function protocolAvailable ({ name, send }) {
const { isAvailable } = protocol({ name, send })
if (typeof isAvailable === 'function') {
return isAvailable()
}
return true
}
export function isEncryptedField (protocol, key) {
const fields = protocolFields(protocol)
return fields.find(field => field.name === key && field.encrypt)
}
export function urlify (name) {
return name.toLowerCase().replace(/_/g, '-')
}
export function unurlify (urlName) {
return urlName.toUpperCase().replace(/-/g, '_')
}
function titleCase (name) {
return name.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ')
}
export function isWallet (wallet) {
return !isTemplate(wallet)
}
export function isTemplate (obj) {
return obj.__typename.endsWith('Template')
}