mirror of
https://github.com/Instadapp/assembly.git
synced 2024-07-29 22:37:06 +00:00
Add InstadappConnector
This commit is contained in:
parent
ca4e3b19db
commit
d6c70fcd40
|
@ -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(() => {
|
||||
|
|
36
composables/useInstadappConnection.ts
Normal file
36
composables/useInstadappConnection.ts
Normal 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
|
||||
};
|
||||
}
|
|
@ -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
53
connectors/instadapp.ts
Normal 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 };
|
Loading…
Reference in New Issue
Block a user