import React from "react";
import { createRoot } from "react-dom/client";
import { StrictMode } from "react";
import { createConfig, type CreateConnectorFn } from "wagmi";
import { coinbaseWallet, injected, walletConnect } from "wagmi/connectors";
import { SharedEntrypoint } from "./shared-entrypoint";
import {
IPFS_GATEWAY_URL,
SUPPORTED_CHAIN_TRANSPORT,
SUPPORTED_CHAINS,
} from "./constants";
import { HostStateProvider } from "./state";
import {
Environment,
ReactSharedStateProvider,
} from "@carrot-kpi/shared-state";
import {
useSetEnvironment,
useSetIPFSGatewayURL,
useSetTemplatePreviewMode,
} from "@carrot-kpi/react";
import { readonly } from "./connectors";
console.log(`Carrot host frontend running in ${__ENVIRONMENT__} environment`);
const connectors: CreateConnectorFn[] = [
readonly(),
coinbaseWallet({
appName: "Carrot",
darkMode: true,
}),
];
if (window.ethereum?.isFrame) {
connectors.push(
injected({
target: {
id: "frame",
name: "Frame",
provider() {
return window.ethereum;
},
},
}),
);
}
if (window.ethereum?.isMetaMask)
connectors.push(injected({ target: "metaMask" }));
if (!!__WALLETCONNECT_PROJECT_ID__)
connectors.push(walletConnect({ projectId: __WALLETCONNECT_PROJECT_ID__ }));
export const config = createConfig({
chains: SUPPORTED_CHAINS,
transports: SUPPORTED_CHAIN_TRANSPORT,
connectors,
batch: {
multicall: {
wait: 100,
},
},
});
export const Root = () => {
const setEnvironment = useSetEnvironment();
const setTemplatePreviewMode = useSetTemplatePreviewMode();
const setIPFSGatewayURL = useSetIPFSGatewayURL();
setEnvironment(__ENVIRONMENT__);
setTemplatePreviewMode(__ENVIRONMENT__ !== Environment.Production);
setIPFSGatewayURL(IPFS_GATEWAY_URL);
return (
);
};
const container = document.getElementById("root");
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const root = createRoot(container!);
root.render(
,
);
if (
__ENVIRONMENT__ !== Environment.Development &&
"serviceWorker" in navigator
) {
navigator.serviceWorker
.register("./sw.js")
.then(() => {
console.log("Carrot service worker registered successfully");
})
.catch((error) => {
console.error("Could not register Carrot service worker", error);
});
}