fix removing server config on unsynced client vault
This commit is contained in:
parent
25facad5d9
commit
fb65ea3ace
@ -33,7 +33,22 @@ function injectResolvers (resolvers) {
|
|||||||
console.log(resolverName)
|
console.log(resolverName)
|
||||||
resolvers.Mutation[resolverName] = async (parent, { settings, validateLightning, vaultEntries, ...data }, { me, models }) => {
|
resolvers.Mutation[resolverName] = async (parent, { settings, validateLightning, vaultEntries, ...data }, { me, models }) => {
|
||||||
console.log('resolving', resolverName, { settings, validateLightning, vaultEntries, ...data })
|
console.log('resolving', resolverName, { settings, validateLightning, vaultEntries, ...data })
|
||||||
const validData = await validateWallet(walletDef, { ...data, ...settings, vaultEntries }, { serverSide: true })
|
|
||||||
|
let existingVaultEntries
|
||||||
|
if (typeof vaultEntries === 'undefined' && data.id) {
|
||||||
|
// this mutation was sent from an unsynced client
|
||||||
|
// to pass validation, we need to add the existing vault entries for validation
|
||||||
|
// in case the client is removing the receiving config
|
||||||
|
existingVaultEntries = await models.vaultEntry.findMany({
|
||||||
|
where: {
|
||||||
|
walletId: Number(data.id)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const validData = await validateWallet(walletDef,
|
||||||
|
{ ...data, ...settings, vaultEntries: vaultEntries ?? existingVaultEntries },
|
||||||
|
{ serverSide: true })
|
||||||
if (validData) {
|
if (validData) {
|
||||||
data && Object.keys(validData).filter(key => key in data).forEach(key => { data[key] = validData[key] })
|
data && Object.keys(validData).filter(key => key in data).forEach(key => { data[key] = validData[key] })
|
||||||
settings && Object.keys(validData).filter(key => key in settings).forEach(key => { settings[key] = validData[key] })
|
settings && Object.keys(validData).filter(key => key in settings).forEach(key => { settings[key] = validData[key] })
|
||||||
|
@ -87,10 +87,16 @@ export function useWalletConfigurator (wallet) {
|
|||||||
if (canReceive({ def: wallet.def, config: serverConfig })) {
|
if (canReceive({ def: wallet.def, config: serverConfig })) {
|
||||||
await _saveToServer(serverConfig, clientConfig, validateLightning)
|
await _saveToServer(serverConfig, clientConfig, validateLightning)
|
||||||
} else if (wallet.config.id) {
|
} else if (wallet.config.id) {
|
||||||
// if it previously had a server config, remove it
|
// we previously had a server config
|
||||||
|
if (wallet.vaultEntries.length > 0) {
|
||||||
|
// we previously had a server config with vault entries, save it
|
||||||
|
await _saveToServer(serverConfig, clientConfig, validateLightning)
|
||||||
|
} else {
|
||||||
|
// we previously had a server config without vault entries, remove it
|
||||||
await _detachFromServer()
|
await _detachFromServer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}, [isActive, wallet.def, _saveToServer, _saveToLocal, _validate,
|
}, [isActive, wallet.def, _saveToServer, _saveToLocal, _validate,
|
||||||
_detachFromLocal, _detachFromServer])
|
_detachFromLocal, _detachFromServer])
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ export function WalletsProvider ({ children }) {
|
|||||||
|
|
||||||
// the specific wallet config on the server is stored in wallet.wallet
|
// the specific wallet config on the server is stored in wallet.wallet
|
||||||
// on the client, it's stored unnested
|
// on the client, it's stored unnested
|
||||||
wallets.push({ config: { ...config, ...w.wallet }, def })
|
wallets.push({ config: { ...config, ...w.wallet }, def, vaultEntries })
|
||||||
}
|
}
|
||||||
|
|
||||||
setServerWallets(wallets)
|
setServerWallets(wallets)
|
||||||
@ -109,7 +109,8 @@ export function WalletsProvider ({ children }) {
|
|||||||
value ?? merged[wallet.def.name]?.config?.[key]
|
value ?? merged[wallet.def.name]?.config?.[key]
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
}
|
},
|
||||||
|
vaultEntries: wallet.vaultEntries
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user