@0xfutbol/id
Version:
React component library with shared providers for 0xFutbol ID
79 lines (78 loc) • 3.31 kB
JavaScript
;var index=require('./index-gEYw6hWC.js');require('react'),require('react/jsx-runtime'),require('@0xfutbol/id-sign'),require('react-use'),require('@0xfutbol/constants'),require('thirdweb'),require('@matchain/matchid-sdk-react'),require('@tanstack/react-query'),require('@matchain/matchid-sdk-react/index.css'),require('react-dom');/**
* @internal
*/
async function onSessionProposal(options) {
const { wallet, walletConnectClient, event, chains, onConnect } = options;
const account = wallet.getAccount();
if (!account) {
throw new Error("No account connected to provided wallet");
}
const origin = event.verifyContext?.verified?.origin;
if (origin) {
await disconnectExistingSessions({ origin, walletConnectClient });
}
const session = await acceptSessionProposal({
account,
walletConnectClient,
sessionProposal: event,
chains,
});
await index.cE(session);
wallet.subscribe("disconnect", () => {
index.cF({ session, walletConnectClient });
});
onConnect?.(session);
}
/**
* @internal
*/
async function disconnectExistingSessions({ walletConnectClient, origin, }) {
const sessions = await index.cG();
for (const session of sessions) {
if (session.origin === origin) {
await index.cF({ session, walletConnectClient });
}
}
}
/**
* @internal
*/
async function acceptSessionProposal({ account, walletConnectClient, sessionProposal, chains, }) {
if (!sessionProposal.params.requiredNamespaces?.eip155 &&
!sessionProposal.params.optionalNamespaces?.eip155) {
throw new Error("No EIP155 namespace found in Wallet Connect session proposal");
}
const namespaces = {
chains: [
...Array.from(new Set([
...(sessionProposal.params.requiredNamespaces?.eip155?.chains?.map((chain) => `${chain}:${account.address}`) ?? []),
...(sessionProposal.params.optionalNamespaces?.eip155?.chains?.map((chain) => `${chain}:${account.address}`) ?? []),
...(chains?.map((chain) => `eip155:${chain.id}:${account.address}`) ??
[]),
])),
],
methods: [
...(sessionProposal.params.requiredNamespaces?.eip155?.methods ?? []),
...(sessionProposal.params.optionalNamespaces?.eip155?.methods ?? []),
],
events: [
...(sessionProposal.params.requiredNamespaces?.eip155?.events ?? []),
...(sessionProposal.params.optionalNamespaces?.eip155?.events ?? []),
],
};
const approval = await walletConnectClient.approve({
id: sessionProposal.id,
namespaces: {
eip155: {
accounts: namespaces.chains,
methods: namespaces.methods,
events: namespaces.events,
},
},
});
const session = await approval.acknowledged();
return {
topic: session.topic,
origin: sessionProposal.verifyContext?.verified?.origin || "Unknown origin",
};
}exports.acceptSessionProposal=acceptSessionProposal;exports.disconnectExistingSessions=disconnectExistingSessions;exports.onSessionProposal=onSessionProposal;//# sourceMappingURL=session-proposal-Coi5f5IM.js.map