208 lines
5.8 KiB
TypeScript
208 lines
5.8 KiB
TypeScript
import { txClient, queryClient, MissingWalletError , registry} from './module'
|
|
|
|
import { BaseAccount } from "./module/types/cosmos/auth/v1beta1/auth"
|
|
import { ModuleAccount } from "./module/types/cosmos/auth/v1beta1/auth"
|
|
import { Params } from "./module/types/cosmos/auth/v1beta1/auth"
|
|
|
|
|
|
export { BaseAccount, ModuleAccount, Params };
|
|
|
|
async function initTxClient(vuexGetters) {
|
|
return await txClient(vuexGetters['common/wallet/signer'], {
|
|
addr: vuexGetters['common/env/apiTendermint']
|
|
})
|
|
}
|
|
|
|
async function initQueryClient(vuexGetters) {
|
|
return await queryClient({
|
|
addr: vuexGetters['common/env/apiCosmos']
|
|
})
|
|
}
|
|
|
|
function mergeResults(value, next_values) {
|
|
for (let prop of Object.keys(next_values)) {
|
|
if (Array.isArray(next_values[prop])) {
|
|
value[prop]=[...value[prop], ...next_values[prop]]
|
|
}else{
|
|
value[prop]=next_values[prop]
|
|
}
|
|
}
|
|
return value
|
|
}
|
|
|
|
function getStructure(template) {
|
|
let structure = { fields: [] }
|
|
for (const [key, value] of Object.entries(template)) {
|
|
let field: any = {}
|
|
field.name = key
|
|
field.type = typeof value
|
|
structure.fields.push(field)
|
|
}
|
|
return structure
|
|
}
|
|
|
|
const getDefaultState = () => {
|
|
return {
|
|
Accounts: {},
|
|
Account: {},
|
|
Params: {},
|
|
|
|
_Structure: {
|
|
BaseAccount: getStructure(BaseAccount.fromPartial({})),
|
|
ModuleAccount: getStructure(ModuleAccount.fromPartial({})),
|
|
Params: getStructure(Params.fromPartial({})),
|
|
|
|
},
|
|
_Registry: registry,
|
|
_Subscriptions: new Set(),
|
|
}
|
|
}
|
|
|
|
// initial state
|
|
const state = getDefaultState()
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state,
|
|
mutations: {
|
|
RESET_STATE(state) {
|
|
Object.assign(state, getDefaultState())
|
|
},
|
|
QUERY(state, { query, key, value }) {
|
|
state[query][JSON.stringify(key)] = value
|
|
},
|
|
SUBSCRIBE(state, subscription) {
|
|
state._Subscriptions.add(JSON.stringify(subscription))
|
|
},
|
|
UNSUBSCRIBE(state, subscription) {
|
|
state._Subscriptions.delete(JSON.stringify(subscription))
|
|
}
|
|
},
|
|
getters: {
|
|
getAccounts: (state) => (params = { params: {}}) => {
|
|
if (!(<any> params).query) {
|
|
(<any> params).query=null
|
|
}
|
|
return state.Accounts[JSON.stringify(params)] ?? {}
|
|
},
|
|
getAccount: (state) => (params = { params: {}}) => {
|
|
if (!(<any> params).query) {
|
|
(<any> params).query=null
|
|
}
|
|
return state.Account[JSON.stringify(params)] ?? {}
|
|
},
|
|
getParams: (state) => (params = { params: {}}) => {
|
|
if (!(<any> params).query) {
|
|
(<any> params).query=null
|
|
}
|
|
return state.Params[JSON.stringify(params)] ?? {}
|
|
},
|
|
|
|
getTypeStructure: (state) => (type) => {
|
|
return state._Structure[type].fields
|
|
},
|
|
getRegistry: (state) => {
|
|
return state._Registry
|
|
}
|
|
},
|
|
actions: {
|
|
init({ dispatch, rootGetters }) {
|
|
console.log('Vuex module: cosmos.auth.v1beta1 initialized!')
|
|
if (rootGetters['common/env/client']) {
|
|
rootGetters['common/env/client'].on('newblock', () => {
|
|
dispatch('StoreUpdate')
|
|
})
|
|
}
|
|
},
|
|
resetState({ commit }) {
|
|
commit('RESET_STATE')
|
|
},
|
|
unsubscribe({ commit }, subscription) {
|
|
commit('UNSUBSCRIBE', subscription)
|
|
},
|
|
async StoreUpdate({ state, dispatch }) {
|
|
state._Subscriptions.forEach(async (subscription) => {
|
|
try {
|
|
const sub=JSON.parse(subscription)
|
|
await dispatch(sub.action, sub.payload)
|
|
}catch(e) {
|
|
throw new Error('Subscriptions: ' + e.message)
|
|
}
|
|
})
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async QueryAccounts({ commit, rootGetters, getters }, { options: { subscribe, all} = { subscribe:false, all:false}, params, query=null }) {
|
|
try {
|
|
const key = params ?? {};
|
|
const queryClient=await initQueryClient(rootGetters)
|
|
let value= (await queryClient.queryAccounts(query)).data
|
|
|
|
|
|
while (all && (<any> value).pagination && (<any> value).pagination.next_key!=null) {
|
|
let next_values=(await queryClient.queryAccounts({...query, 'pagination.key':(<any> value).pagination.next_key})).data
|
|
value = mergeResults(value, next_values);
|
|
}
|
|
commit('QUERY', { query: 'Accounts', key: { params: {...key}, query}, value })
|
|
if (subscribe) commit('SUBSCRIBE', { action: 'QueryAccounts', payload: { options: { all }, params: {...key},query }})
|
|
return getters['getAccounts']( { params: {...key}, query}) ?? {}
|
|
} catch (e) {
|
|
throw new Error('QueryClient:QueryAccounts API Node Unavailable. Could not perform query: ' + e.message)
|
|
|
|
}
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async QueryAccount({ commit, rootGetters, getters }, { options: { subscribe, all} = { subscribe:false, all:false}, params, query=null }) {
|
|
try {
|
|
const key = params ?? {};
|
|
const queryClient=await initQueryClient(rootGetters)
|
|
let value= (await queryClient.queryAccount( key.address)).data
|
|
|
|
|
|
commit('QUERY', { query: 'Account', key: { params: {...key}, query}, value })
|
|
if (subscribe) commit('SUBSCRIBE', { action: 'QueryAccount', payload: { options: { all }, params: {...key},query }})
|
|
return getters['getAccount']( { params: {...key}, query}) ?? {}
|
|
} catch (e) {
|
|
throw new Error('QueryClient:QueryAccount API Node Unavailable. Could not perform query: ' + e.message)
|
|
|
|
}
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async QueryParams({ commit, rootGetters, getters }, { options: { subscribe, all} = { subscribe:false, all:false}, params, query=null }) {
|
|
try {
|
|
const key = params ?? {};
|
|
const queryClient=await initQueryClient(rootGetters)
|
|
let value= (await queryClient.queryParams()).data
|
|
|
|
|
|
commit('QUERY', { query: 'Params', key: { params: {...key}, query}, value })
|
|
if (subscribe) commit('SUBSCRIBE', { action: 'QueryParams', payload: { options: { all }, params: {...key},query }})
|
|
return getters['getParams']( { params: {...key}, query}) ?? {}
|
|
} catch (e) {
|
|
throw new Error('QueryClient:QueryParams API Node Unavailable. Could not perform query: ' + e.message)
|
|
|
|
}
|
|
},
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|