Add InstadappConnector

This commit is contained in:
Georges KABBOUCHI 2021-10-01 21:55:42 +03:00
parent ca4e3b19db
commit d6c70fcd40
4 changed files with 111 additions and 2 deletions

View File

@ -1,15 +1,25 @@
import { useWeb3 } from "@instadapp/vue-web3";
import { injected, gnosisSafe } from "../connectors";
import { injected, gnosisSafe, instadapp } from "../connectors";
import { onMounted, ref, watch, watchEffect } from "@nuxtjs/composition-api";
import { useSafeAppConnection } from "./useSafeAppConnection";
import { useInstadappConnection } from "./useInstadappConnection";
export function useEagerConnect() {
const { activate, active } = useWeb3();
const { tried: triedToConnectToSafe } = useSafeAppConnection(gnosisSafe);
const { tried: triedToConnectToInstadapp } = useInstadappConnection(
instadapp
);
const tried = ref(false);
watchEffect(() => {
if (triedToConnectToSafe.value && !active.value && !tried.value) {
if (
triedToConnectToSafe.value &&
triedToConnectToInstadapp.value &&
!active.value &&
!tried.value
) {
injected.isAuthorized().then((isAuthorized: boolean) => {
if (isAuthorized) {
activate(injected, undefined, true).catch(() => {

View File

@ -0,0 +1,36 @@
import { useWeb3 } from "@instadapp/vue-web3";
import { onMounted, ref, watch } from "@nuxtjs/composition-api";
import { Network, useNetwork } from "./useNetwork";
import { InstadappConnector } from "~/connectors/instadapp";
export function useInstadappConnection(connector?: InstadappConnector) {
const { activate, active } = useWeb3();
const { activeNetworkId} = useNetwork();
const tried = ref(false);
onMounted(() => {
connector?.isInstadapp().then(async (loaded: boolean) => {
if (loaded) {
await activate(connector, undefined, true).catch(() => {
tried.value = true;
});
activeNetworkId.value = (await connector.getChainId() === 1) ? Network.Mainnet : Network.Polygon;
} else {
tried.value = true;
}
});
});
// if the connection worked, wait until we get confirmation of that to flip the flag
watch([tried, active], () => {
if (!tried.value && active.value) {
tried.value = true;
}
});
return {
tried
};
}

View File

@ -10,6 +10,7 @@ import INSTADAPP_LOGO_URL from "~/assets/logo/instadapp-logo-icon.svg?inline";
import Web3 from "web3";
import { SafeAppConnector } from "@gnosis.pm/safe-apps-web3-react/dist/connector";
import { InstadappConnector } from "./instadapp";
setWeb3LibraryCallback(provider => new Web3(provider));
@ -47,6 +48,15 @@ if (process.client) {
export { gnosisSafe };
let instadapp = null;
if (process.client) {
instadapp = new InstadappConnector();
}
export { instadapp };
const POLLING_INTERVAL = 12000;
export enum LedgerDerivationPath {

53
connectors/instadapp.ts Normal file
View File

@ -0,0 +1,53 @@
import { AbstractConnector } from "@web3-react/abstract-connector";
import { ConnectorUpdate } from "@web3-react/types";
class InstadappConnector extends AbstractConnector {
private provider: AbstractConnector | undefined;
public async activate(): Promise<ConnectorUpdate> {
//@ts-ignore
const provider = await window.parent.$nuxt.$web3Modal.connect();
return {
provider,
chainId: 1,
account: window.parent.$nuxt.$store.state.auth.dsaAddress
};
}
public async getProvider(): Promise<AbstractConnector> {
if (!this.provider) {
//@ts-ignore
this.provider = await window.parent.$nuxt.$web3Modal.connect();
}
return this.provider;
}
public async getChainId(): Promise<string | number> {
const provider = await this.getProvider();
//@ts-ignore
return provider.chainId;
}
public async getAccount(): Promise<string> {
return window.parent.$nuxt.$store.state.auth.dsaAddress;
}
public async deactivate(): Promise<void> {
//@ts-ignore
await window.parent.$nuxt.$disconnectProviderWeb3();
}
public async isInstadapp(): Promise<boolean> {
return (
window.parent &&
window.parent.$nuxt &&
//@ts-ignore
typeof window.parent.$nuxt.$web3 != "undefined" &&
//@ts-ignore
typeof window.parent.$nuxt.$dsa != "undefined"
);
}
}
export { InstadappConnector };