namillum
Version:
Bubble Protocol SDK
99 lines (87 loc) • 2.44 kB
text/typescript
// @ts-ignore
import Vue from 'vue'; // v^2.6.11
import LockConnector from '@snapshot-labs/lock/src/connector';
import Lock from '@snapshot-labs/lock/src/lock';
const name = 'lock';
let instance;
export const getInstance = () => instance;
export const useLock = ({ ...options }) => {
if (instance) return instance;
instance = new Vue({
data() {
return {
isAuthenticated: false,
lockClient: null,
provider: null,
web3: null
};
},
methods: {
async login(connector) {
// @ts-ignore
const lockConnector = this.lockClient.getConnector(connector);
const provider = await lockConnector.connect();
if (provider) {
localStorage.setItem(`_${name}.connector`, connector);
this.isAuthenticated = true;
this.provider = provider;
}
return provider;
},
async logout() {
const connector = await this.getConnector();
if (connector) {
// @ts-ignore
const lockConnector = this.lockClient.getConnector(connector);
await lockConnector.logout();
localStorage.removeItem(`_${name}.connector`);
this.isAuthenticated = false;
this.provider = null;
}
},
async getConnector() {
const connector: any = localStorage.getItem(`_${name}.connector`);
if (connector) {
// @ts-ignore
const lockConnector = this.lockClient.getConnector(connector);
const isLoggedIn = await lockConnector.isLoggedIn();
return isLoggedIn ? connector : false;
}
return false;
}
},
async created() {
const lock = new Lock();
options.connectors.forEach(connector => {
lock.addConnector(connector);
});
// @ts-ignore
this.lockClient = lock;
}
});
return instance;
};
export class ZilPay extends LockConnector {
async connect() {
let provider;
if (window['zilPay']) {
provider = window['zilPay'];
try {
await window['zilPay'].wallet.connect();
} catch (e) {
console.error(e);
}
} else if (window['zilliqa']) {
provider = window['zilliqa'];
}
return provider;
}
isLoggedIn(): boolean {
return Boolean(window['zilPay']);
}
}
export const LockPlugin = {
install(Vue, options) {
Vue.prototype.$auth = useLock(options);
}
};