namillum
Version:
Bubble Protocol SDK
109 lines (101 loc) • 2.7 kB
text/typescript
import Vue from 'vue';
import { getInstance } from '@/helpers/plugins/LockPlugin';
import store from '@/store';
import config from '@/helpers/config';
let wsProvider;
let auth;
if (wsProvider) {
wsProvider.on('block', blockNumber => {
store.commit('GET_BLOCK_SUCCESS', blockNumber);
});
}
const state = {
account: {
base16: '',
bech32: ''
},
name: null,
network: config.networks['mainnet']
};
const mutations = {
LOGOUT(_state) {
Vue.set(_state, 'account', null);
Vue.set(_state, 'name', null);
console.debug('LOGOUT');
},
LOAD_PROVIDER_REQUEST() {
console.debug('LOAD_PROVIDER_REQUEST');
},
LOAD_PROVIDER_SUCCESS(_state, payload) {
console.log('LOAD_PROVIDER_SUCCESS', payload);
Vue.set(_state, 'account', payload.account);
Vue.set(_state, 'name', payload.name);
console.debug('LOAD_PROVIDER_SUCCESS');
},
LOAD_PROVIDER_FAILURE(_state, payload) {
Vue.set(_state, 'account', null);
console.debug('LOAD_PROVIDER_FAILURE', payload);
},
HANDLE_CHAIN_CHANGED(_state, net) {
if (net) {
config.networks[net] = {
...config.networks[net],
net,
chainId: 0,
name: net,
network: net
};
}
Vue.set(_state, 'network', config.networks[net]);
console.debug('HANDLE_CHAIN_CHANGED', net);
},
HANDLE_ACCOUNTS_CHANGED(_state, payload) {
Vue.set(_state, 'account', payload);
console.debug('HANDLE_ACCOUNTS_CHANGED', payload);
}
};
const actions = {
login: async ({ dispatch }, connector = 'injected') => {
auth = getInstance();
await auth.login(connector);
if (auth.provider) {
auth.web3 = auth.provider;
await dispatch('loadProvider');
}
},
logout: async ({ commit }) => {
Vue.prototype.$auth.logout();
commit('LOGOUT');
},
loadProvider: async ({ commit }) => {
commit('LOAD_PROVIDER_REQUEST');
try {
if (auth.provider) {
auth.provider.wallet
.observableAccount()
.subscribe(async (account: any) => {
commit('HANDLE_ACCOUNTS_CHANGED', account);
});
auth.provider.wallet.observableNetwork().subscribe((net: string) => {
commit('HANDLE_CHAIN_CHANGED', net);
});
}
const net = auth.provider.wallet.net;
commit('HANDLE_CHAIN_CHANGED', net);
const account = auth.provider.wallet.defaultAccount;
const name = auth.provider.wallet.defaultAccount.bech32;
commit('LOAD_PROVIDER_SUCCESS', {
account,
name
});
} catch (e) {
commit('LOAD_PROVIDER_FAILURE', e);
return Promise.reject();
}
}
};
export default {
state,
mutations,
actions
};