Skip to content

Commit

Permalink
Fix Metamask detection
Browse files Browse the repository at this point in the history
  • Loading branch information
kewbish committed Jan 19, 2023
1 parent c7acf13 commit 4166ba8
Show file tree
Hide file tree
Showing 16 changed files with 154 additions and 99 deletions.
Binary file modified build.crx
Binary file not shown.
2 changes: 1 addition & 1 deletion landing/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ <h2 class="display mx-auto text-center mb-3">get started</h2>
<a href="https://chrome.google.com/webstore/detail/cobweb/agdomcadfhkpkcjceenogkiglbhgpclg" class="btn glassy-cw-btn mt-1" role="button">download</a>
</div>
<div class="col">
<p>Cobweb is MIT-licensed and fully open source - the source is <a href="https://github.com/kewbish/cobweb">available on GitHub</a> should you wish to build from source. The checksum of the current version is <code style="word-break:break-all;">ff78065ceff9a9334d78b5ad106df5950e9a8141ed88dd112ec1cec28993b8f9</code>.
<p>Cobweb is MIT-licensed and fully open source - the source is <a href="https://github.com/kewbish/cobweb">available on GitHub</a> should you wish to build from source. The checksum of the current version is <code style="word-break:break-all;">3f794b4c56c4fbd2a3d635ba3e7cbbebe1de6428085022cb930e66f9984f9a06</code>.
</p>
<a href="https://github.com/kewbish/cobweb" class="btn glassy-cw-btn mt-1" role="button">view source</a>
</div>
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Cobweb",
"version": "0.0.6",
"version": "0.0.7",
"description": "A Web3-based tool enabling creative teens to learn and earn on the blockchain.",
"license": "MIT",
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion src/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "Cobweb",
"description": "A Web3-based tool enabling creative teens to learn and earn on the blockchain.",
"version": "0.0.6",
"version": "0.0.7",
"background": { "service_worker": "background.bundle.js" },
"action": {
"default_popup": "popup.html",
Expand Down
166 changes: 115 additions & 51 deletions src/pages/Background/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ import fetchAndUpdateBalance from "./lib/fetchAndUpdateBalance";
import setNewAddress from "./lib/updateAddress";
import { downgradeTokens, upgradeTokens } from "./lib/wrapTokens";
import setNewToast, { deleteToast } from "./lib/setNewToast";
import errorToast, { toast } from "../shared/toast";
import generateSignature from "./lib/generateSignature";
import verifySignature from "../shared/verifySignature";
import cleanUpStreams from "./lib/cleanUpStreams";
Expand All @@ -50,49 +49,59 @@ chrome.runtime.onInstalled.addListener((details) => {
}
});

storage.local.set({ mmNotFound: false });

let metamaskProvider: MetaMaskInpageProvider | null = null;
metamaskProvider = createMetaMaskProvider();
const mmProvider = new ethers.providers.Web3Provider(metamaskProvider as any);
await mmProvider.send("eth_requestAccounts", []);

storage.local.set({ mmNotFound: false });
let mmProvider = new ethers.providers.Web3Provider(metamaskProvider as any);

metamaskProvider?.on("error", (error) => {
storage.local.set({ mmNotFound: true });
});
const resetHandlers = () => {
metamaskProvider?.on("error", (error) => {
storage.local.set({ mmNotFound: true });
});

metamaskProvider.on("disconnect", () => {
storage.local.set({ mmNotFound: true });
});
metamaskProvider?.on("disconnect", () => {
storage.local.set({ mmNotFound: true });
});

metamaskProvider.on("connect", async () => {
const accounts = await mmProvider.listAccounts();
try {
storage.local.set({
mmNotFound: accounts.length === 0,
});
if (!infuraProvider) {
return;
metamaskProvider?.on("connect", async () => {
await mmProvider?.send("eth_requestAccounts", []);
const accounts = await mmProvider.listAccounts();
try {
if (accounts.length === 0) {
storage.local.set({
mmNotFound: true,
});
} else {
storage.local.set({
mmNotFound: false,
});
if (!infuraProvider) {
return;
}
setNewAddress({ address: accounts[0], provider: infuraProvider });
}
} catch {
storage.local.set({ mmNotFound: true });
}
setNewAddress({ address: accounts[0], provider: infuraProvider });
} catch {
storage.local.set({ mmNotFound: true });
}
});
});

metamaskProvider.on("accountsChanged", (accounts) => {
if ((accounts as Array<String>).length === 0) {
storage.local.set({ mmNotFound: true });
} else {
if (!infuraProvider) {
return;
metamaskProvider?.on("accountsChanged", (accounts) => {
if ((accounts as Array<String>).length === 0) {
storage.local.set({ mmNotFound: true });
} else {
if (!infuraProvider) {
return;
}
setNewAddress({
address: (accounts as Array<string>)[0],
provider: infuraProvider,
});
}
setNewAddress({
address: (accounts as Array<string>)[0],
provider: infuraProvider,
});
}
});
});
};

resetHandlers();

storage.local.set({ toasts: [] });

Expand All @@ -117,18 +126,14 @@ try {
projectSecret: INFURA_PROJECT_SECRET,
}
);
} catch (e) {
toast("Error - failed to initialize provider");
throw new Error("Error - failed to initialize provider");
}
} catch (e) {}
let sf: Framework | null = null;
try {
sf = await Framework.create({
chainId: isDev() ? 5 : 1,
provider: infuraProvider,
});
} catch (e) {
errorToast(e as Error);
throw e;
}

Expand All @@ -140,7 +145,6 @@ try {
);
}
} catch (e) {
errorToast(e as Error);
throw e;
}

Expand All @@ -153,7 +157,14 @@ const montagFound = async ({
sender: chrome.runtime.MessageSender;
sendResponse?: Function;
}) => {
if (!sf || !sfToken || !infuraProvider || !sender.tab) {
if (
!sf ||
!sfToken ||
!infuraProvider ||
!sender.tab ||
(metamaskProvider?.chainId === null &&
metamaskProvider?.selectedAddress == null)
) {
return;
}
let address = verifySignature(request.options.address);
Expand Down Expand Up @@ -184,7 +195,12 @@ const montagFound = async ({
};

const deleteStream = async ({ request }: { request: any }) => {
if (!sf || !sfToken) {
if (
!sf ||
!sfToken ||
(metamaskProvider?.chainId === null &&
metamaskProvider?.selectedAddress == null)
) {
return;
}
if (request.options.tabId) {
Expand Down Expand Up @@ -213,7 +229,12 @@ const updateSetting = async ({ request }: { request: any }) => {
};

const editCurrentStream = async ({ request }: { request: any }) => {
if (!sf || !sfToken) {
if (
!sf ||
!sfToken ||
(metamaskProvider?.chainId === null &&
metamaskProvider?.selectedAddress == null)
) {
return;
}
updateStream({
Expand All @@ -228,13 +249,26 @@ const editCurrentStream = async ({ request }: { request: any }) => {
};

const fetchBalance = async () => {
if (!sfToken || !mmProvider || !sf || !infuraProvider) {
if (
!sfToken ||
!mmProvider ||
!sf ||
!infuraProvider ||
(metamaskProvider?.chainId === null &&
metamaskProvider?.selectedAddress == null)
) {
return;
}
fetchAndUpdateBalance({ sfToken, mmProvider, sf, infuraProvider });
};

const downgradeTokenAmount = async ({ request }: { request: any }) => {
if (
metamaskProvider?.chainId === null &&
metamaskProvider?.selectedAddress == null
) {
return;
}
const sfSigner = mmProvider.getSigner();
if (!sf || !sfToken || !sfSigner) {
return;
Expand All @@ -247,6 +281,12 @@ const downgradeTokenAmount = async ({ request }: { request: any }) => {
};

const upgradeTokenAmount = async ({ request }: { request: any }) => {
if (
metamaskProvider?.chainId === null &&
metamaskProvider?.selectedAddress == null
) {
return;
}
const sfSigner = mmProvider.getSigner();
if (!sf || !sfToken || !sfSigner) {
return;
Expand All @@ -270,6 +310,12 @@ const fetchSignature = async ({
}: {
request: any;
}): Promise<String> => {
if (
metamaskProvider?.chainId === null &&
metamaskProvider?.selectedAddress == null
) {
return "";
}
const signature = await generateSignature(mmProvider);
return signature;
};
Expand Down Expand Up @@ -334,8 +380,15 @@ const handleMessaging = async (
sendResponse(signature);
return;
case CHECK_METAMASK:
metamaskProvider = createMetaMaskProvider();
storage.local.set({ mmNotFound: false }); // optimistically reset
if (metamaskProvider?.selectedAddress === null) {
metamaskProvider = createMetaMaskProvider();
resetHandlers();
storage.local.set({
mmNotFound:
metamaskProvider.chainId === null &&
metamaskProvider.selectedAddress === null,
}); // optimistically reset
}
sendResponse();
return;
default:
Expand All @@ -346,7 +399,7 @@ const handleMessaging = async (
chrome.runtime.onMessage.addListener(handleMessaging);

chrome.tabs.onRemoved.addListener(async (tabId, _) => {
if (sf && sfToken) {
if (sf && sfToken && metamaskProvider?.chainId !== null) {
deleteStreamByTabId({
tabId,
sf,
Expand All @@ -357,7 +410,7 @@ chrome.tabs.onRemoved.addListener(async (tabId, _) => {
});

chrome.tabs.onUpdated.addListener(async (tabId, changeInfo, _) => {
if (changeInfo.status !== "complete") {
if (changeInfo.status !== "complete" || metamaskProvider?.chainId === null) {
return;
}
if (changeInfo.url && sf && sfToken) {
Expand All @@ -378,6 +431,11 @@ chrome.runtime.onStartup.addListener(() => {
chrome.alarms.create("cobwebStreamCleanup" + alarmSuffix, {
delayInMinutes: 5,
});
if (metamaskProvider.chainId === null) {
chrome.alarms.create("metamaskRefresh" + alarmSuffix, {
delayInMinutes: 1,
});
}
chrome.alarms.onAlarm.addListener(async (alarm) => {
try {
var parsedName = alarm.name.match(/^([\S\s]*?)(\d+)$/);
Expand All @@ -393,12 +451,18 @@ chrome.alarms.onAlarm.addListener(async (alarm) => {
if (!sf || !sfToken) {
return;
}
if (name === "cobwebStreamCleanup") {
if (name === "cobwebStreamCleanup" && metamaskProvider?.chainId !== null) {
cleanUpStreams({
sfToken,
sf,
mmSigner: mmProvider.getSigner(),
});
} else if (
name === "metamaskRefresh" &&
metamaskProvider?.chainId === null
) {
metamaskProvider = createMetaMaskProvider();
mmProvider = new ethers.providers.Web3Provider(metamaskProvider as any);
}
} catch {}
});
9 changes: 1 addition & 8 deletions src/pages/Background/lib/createStream.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { Stream } from "../../shared/types";
import { storage } from "@extend-chrome/storage";
import { Framework, SuperToken } from "@superfluid-finance/sdk-core";
import { InfuraProvider } from "@ethersproject/providers";
import errorToast, { toast } from "../../shared/toast";
import {
pendingMonetization,
startMonetization,
Expand Down Expand Up @@ -135,10 +134,6 @@ const createStream = async ({
func: stopMonetization,
world: "MAIN",
});
errorToast(e as Error);
toast(
"Check that you've approved enough spending tokens in your account page."
);
}
};

Expand Down Expand Up @@ -180,9 +175,7 @@ export const updateStream = async ({
userData: `${to} ${new Date()}`,
});
updateStream = await updateStreamOperation.exec(mmSigner);
} catch (e) {
errorToast(e as Error);
}
} catch (e) {}

const { streams } = await storage.local.get("streams");
storage.local.set({
Expand Down
3 changes: 1 addition & 2 deletions src/pages/Background/lib/deleteStreamByTabId.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { PayRates, Stream } from "../../shared/types";
import { storage } from "@extend-chrome/storage";
import { Framework, SuperToken } from "@superfluid-finance/sdk-core";
import { Signer } from "ethers";
import errorToast from "../../shared/toast";

const deleteStreamByTabId = async ({
tabId,
Expand Down Expand Up @@ -32,7 +31,7 @@ const deleteStreamByTabId = async ({
});
await deleteStreamOperation.exec(mmSigner);
} catch (e) {
errorToast(e as Error);
// errorToast(e as Error);
return;
}
};
Expand Down
Loading

0 comments on commit 4166ba8

Please sign in to comment.