@latticexyz/entrykit 2.2.21-911f7294272eb27ea2d79558911cbfa2f769dad4 → 2.2.21-98fc29ddfa9b5db0492165acd2c49a9862569878

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { Address } from 'viem/accounts';
2
- import { Chain, Client, Transport, Account, Address as Address$1 } from 'viem';
2
+ import { Chain, Client, Transport, Account, Address as Address$1, LocalAccount } from 'viem';
3
3
  import { SmartAccount } from 'viem/account-abstraction';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { ReactNode } from 'react';
@@ -68,6 +68,12 @@ declare function defineConfig(input: EntryKitConfigInput): EntryKitConfig;
68
68
  type ConnectedClient<chain extends Chain = Chain> = Client<Transport, chain, Account>;
69
69
  type SessionClient<chain extends Chain = Chain> = Client<Transport, chain, SmartAccount> & {
70
70
  readonly userAddress: Address$1;
71
+ /**
72
+ * World address used for delegated calls. Assumes a delegation has been set up between the user account and session account.
73
+ */
74
+ readonly worldAddress: Address$1;
75
+ /** @internal */
76
+ readonly internal_signer: LocalAccount;
71
77
  };
72
78
 
73
79
  type Props = {
@@ -8,7 +8,14 @@ function defineConfig(input) {
8
8
  }
9
9
 
10
10
  // src/ui/Modal.tsx
11
- import { Root as DialogRoot, DialogPortal, DialogContent } from "@radix-ui/react-dialog";
11
+ import { useEffect as useEffect2 } from "react";
12
+ import {
13
+ Root as DialogRoot,
14
+ DialogPortal,
15
+ DialogContent,
16
+ DialogTitle,
17
+ DialogDescription
18
+ } from "@radix-ui/react-dialog";
12
19
 
13
20
  // src/ui/Shadow.tsx
14
21
  import { forwardRef, useEffect, useRef, useState } from "react";
@@ -165,7 +172,7 @@ function userOpExecutor({ executor }) {
165
172
  if (method === "eth_estimateUserOperationGas") {
166
173
  return await estimateUserOperationGas(params);
167
174
  }
168
- throw new Error("Method not implemented.");
175
+ throw new Error(`userOpExecutor: method "${method}" not supported`);
169
176
  };
170
177
  return createTransport({
171
178
  key: "userOpExecutor",
@@ -300,6 +307,19 @@ var Shadow = forwardRef(function Shadow2({ mode, children }, forwardedRef) {
300
307
  import { twMerge } from "tailwind-merge";
301
308
  import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
302
309
  function Modal({ open, onOpenChange, children }) {
310
+ useEffect2(() => {
311
+ function onKeyDown(event) {
312
+ if (event.defaultPrevented) return;
313
+ if (event.key === "Escape" && open) {
314
+ event.preventDefault();
315
+ onOpenChange?.(false);
316
+ }
317
+ }
318
+ window.addEventListener("keydown", onKeyDown);
319
+ return () => {
320
+ window.removeEventListener("keydown", onKeyDown);
321
+ };
322
+ }, [onOpenChange, open]);
303
323
  return /* @__PURE__ */ jsx4(DialogRoot, { open, onOpenChange, children: /* @__PURE__ */ jsx4(DialogPortal, { children: /* @__PURE__ */ jsxs2(Shadow, { mode: "modal", children: [
304
324
  /* @__PURE__ */ jsx4("div", { className: twMerge("fixed inset-0", "bg-neutral-800/85", "animate-in animate-duration-300 fade-in") }),
305
325
  /* @__PURE__ */ jsx4(
@@ -310,17 +330,11 @@ function Modal({ open, onOpenChange, children }) {
310
330
  "grid items-end sm:items-center",
311
331
  "animate-in animate-duration-300 fade-in slide-in-from-bottom-16"
312
332
  ),
313
- children: /* @__PURE__ */ jsx4("div", { children: /* @__PURE__ */ jsx4(
314
- DialogContent,
315
- {
316
- className: "outline-none w-full max-w-[26rem] mx-auto",
317
- "aria-describedby": void 0,
318
- onOpenAutoFocus: (event) => {
319
- event.preventDefault();
320
- },
321
- children
322
- }
323
- ) })
333
+ children: /* @__PURE__ */ jsx4("div", { children: /* @__PURE__ */ jsxs2(DialogContent, { className: "outline-none w-full max-w-[26rem] mx-auto", children: [
334
+ /* @__PURE__ */ jsx4(DialogTitle, { className: "sr-only", children: "EntryKit" }),
335
+ /* @__PURE__ */ jsx4(DialogDescription, { className: "sr-only", children: "Sign in to this app" }),
336
+ children
337
+ ] }) })
324
338
  }
325
339
  )
326
340
  ] }) }) });
@@ -495,13 +509,13 @@ function AppInfo() {
495
509
 
496
510
  // src/ConnectWallet.tsx
497
511
  import { twMerge as twMerge5 } from "tailwind-merge";
498
- import { useEffect as useEffect2, useState as useState2 } from "react";
512
+ import { useEffect as useEffect3, useState as useState2 } from "react";
499
513
  import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
500
514
  function ConnectWallet() {
501
515
  const userAccount = useAccount();
502
516
  const { openConnectModal, connectModalOpen } = useConnectModal();
503
517
  const [hasAutoOpened, setHasAutoOpened] = useState2(false);
504
- useEffect2(() => {
518
+ useEffect3(() => {
505
519
  if (!connectModalOpen && !hasAutoOpened) {
506
520
  openConnectModal?.();
507
521
  setHasAutoOpened(true);
@@ -531,7 +545,7 @@ function ConnectWallet() {
531
545
  }
532
546
 
533
547
  // src/onboarding/ConnectedSteps.tsx
534
- import { useEffect as useEffect7, useMemo as useMemo2, useRef as useRef2, useState as useState3 } from "react";
548
+ import { useEffect as useEffect8, useMemo as useMemo2, useRef as useRef2, useState as useState3 } from "react";
535
549
  import { twMerge as twMerge7 } from "tailwind-merge";
536
550
 
537
551
  // src/onboarding/common.ts
@@ -826,7 +840,7 @@ async function getSessionAccount({
826
840
  }) {
827
841
  const signer = getSessionSigner(userAddress);
828
842
  const account = await toSimpleSmartAccount({ client, owner: signer });
829
- return account;
843
+ return { account, signer };
830
844
  }
831
845
 
832
846
  // src/useSessionAccount.ts
@@ -861,9 +875,9 @@ function getPrequisitesQueryOptions({
861
875
  queryKey,
862
876
  async queryFn() {
863
877
  const paymaster = getPaymaster(client.chain);
864
- const { address: sessionAddress } = await queryClient.fetchQuery(
865
- getSessionAccountQueryOptions({ client, userAddress })
866
- );
878
+ const {
879
+ account: { address: sessionAddress }
880
+ } = await queryClient.fetchQuery(getSessionAccountQueryOptions({ client, userAddress }));
867
881
  const [sessionBalance, allowance, spender, hasDelegation] = await Promise.all([
868
882
  !paymaster ? queryClient.fetchQuery(
869
883
  getBalanceQueryOptions(config, { chainId: client.chain.id, address: sessionAddress })
@@ -992,10 +1006,10 @@ function removeError(error2) {
992
1006
  }
993
1007
 
994
1008
  // src/errors/useShowMutationError.ts
995
- import { useEffect as useEffect3 } from "react";
1009
+ import { useEffect as useEffect4 } from "react";
996
1010
  function useShowMutationError(result) {
997
1011
  const { error: error2, reset } = result;
998
- useEffect3(() => {
1012
+ useEffect4(() => {
999
1013
  if (!error2) return;
1000
1014
  return addError({ error: error2, dismiss: reset });
1001
1015
  }, [error2, reset]);
@@ -1130,13 +1144,13 @@ function Balance({ wei }) {
1130
1144
  }
1131
1145
 
1132
1146
  // src/onboarding/quarry/Allowance.tsx
1133
- import { useEffect as useEffect5 } from "react";
1147
+ import { useEffect as useEffect6 } from "react";
1134
1148
 
1135
1149
  // src/errors/useShowQueryError.ts
1136
- import { useEffect as useEffect4 } from "react";
1150
+ import { useEffect as useEffect5 } from "react";
1137
1151
  function useShowQueryError(result) {
1138
1152
  const { error: error2, refetch } = result;
1139
- useEffect4(() => {
1153
+ useEffect5(() => {
1140
1154
  if (!error2) return;
1141
1155
  return addError({ error: error2, retry: refetch, dismiss: () => {
1142
1156
  } });
@@ -1149,7 +1163,7 @@ import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
1149
1163
  function Allowance({ isActive, isExpanded, userAddress }) {
1150
1164
  const allowance = useShowQueryError(useAllowance(userAddress));
1151
1165
  const claimGasPass2 = useShowMutationError(useClaimGasPass());
1152
- useEffect5(() => {
1166
+ useEffect6(() => {
1153
1167
  const timer = setTimeout(() => {
1154
1168
  if (isActive && claimGasPass2.status === "idle" && allowance.isSuccess && allowance.data != null && allowance.data < minGasBalance) {
1155
1169
  claimGasPass2.mutate(userAddress);
@@ -1376,7 +1390,7 @@ function useSetupSession({ userClient }) {
1376
1390
  }
1377
1391
 
1378
1392
  // src/onboarding/Session.tsx
1379
- import { useEffect as useEffect6 } from "react";
1393
+ import { useEffect as useEffect7 } from "react";
1380
1394
 
1381
1395
  // src/useSessionClient.ts
1382
1396
  import { useClient as useClient8 } from "wagmi";
@@ -1429,6 +1443,7 @@ function createFeeEstimator(client) {
1429
1443
  async function getSessionClient({
1430
1444
  userAddress,
1431
1445
  sessionAccount,
1446
+ sessionSigner,
1432
1447
  worldAddress
1433
1448
  }) {
1434
1449
  const client = sessionAccount.client;
@@ -1446,7 +1461,7 @@ async function getSessionClient({
1446
1461
  delegatorAddress: userAddress,
1447
1462
  publicClient: client
1448
1463
  })
1449
- ).extend(() => ({ userAddress }));
1464
+ ).extend(() => ({ userAddress, worldAddress, internal_signer: sessionSigner }));
1450
1465
  return sessionClient;
1451
1466
  }
1452
1467
  function clientHasChain(client) {
@@ -1465,9 +1480,12 @@ function getSessionClientQueryOptions({
1465
1480
  userAddress ? {
1466
1481
  queryKey,
1467
1482
  async queryFn() {
1468
- const sessionAccount = await queryClient.fetchQuery(getSessionAccountQueryOptions({ client, userAddress }));
1483
+ const { account: sessionAccount, signer: sessionSigner } = await queryClient.fetchQuery(
1484
+ getSessionAccountQueryOptions({ client, userAddress })
1485
+ );
1469
1486
  return await getSessionClient({
1470
1487
  sessionAccount,
1488
+ sessionSigner,
1471
1489
  userAddress,
1472
1490
  worldAddress
1473
1491
  });
@@ -1498,7 +1516,7 @@ function Session({ isActive, isExpanded, userClient, registerSpender, registerDe
1498
1516
  const sessionClient = useShowQueryError(useSessionClient(userClient.account.address));
1499
1517
  const setup = useShowMutationError(useSetupSession({ userClient }));
1500
1518
  const hasSession = !registerDelegation && !registerDelegation;
1501
- useEffect6(() => {
1519
+ useEffect7(() => {
1502
1520
  const timer = setTimeout(() => {
1503
1521
  if (isActive && setup.status === "idle" && sessionClient.data && !hasSession) {
1504
1522
  setup.mutate({
@@ -1556,9 +1574,15 @@ var relayChains_default = {
1556
1574
  "111": {
1557
1575
  bridgeUrl: "https://testnets.relay.link/bridge/bob"
1558
1576
  },
1577
+ "130": {
1578
+ bridgeUrl: "https://relay.link/bridge/unichain"
1579
+ },
1559
1580
  "137": {
1560
1581
  bridgeUrl: "https://relay.link/bridge/polygon"
1561
1582
  },
1583
+ "146": {
1584
+ bridgeUrl: "https://relay.link/bridge/sonic"
1585
+ },
1562
1586
  "185": {
1563
1587
  bridgeUrl: "https://relay.link/bridge/mint"
1564
1588
  },
@@ -1577,6 +1601,9 @@ var relayChains_default = {
1577
1601
  "690": {
1578
1602
  bridgeUrl: "https://relay.link/bridge/redstone"
1579
1603
  },
1604
+ "747": {
1605
+ bridgeUrl: "https://relay.link/bridge/flow-evm"
1606
+ },
1580
1607
  "919": {
1581
1608
  bridgeUrl: "https://testnets.relay.link/bridge/mode-testnet"
1582
1609
  },
@@ -1592,18 +1619,30 @@ var relayChains_default = {
1592
1619
  "1329": {
1593
1620
  bridgeUrl: "https://relay.link/bridge/sei"
1594
1621
  },
1622
+ "1424": {
1623
+ bridgeUrl: "https://relay.link/bridge/perennial"
1624
+ },
1625
+ "1514": {
1626
+ bridgeUrl: "https://relay.link/bridge/story"
1627
+ },
1595
1628
  "1625": {
1596
1629
  bridgeUrl: "https://relay.link/bridge/gravity"
1597
1630
  },
1598
1631
  "1868": {
1599
1632
  bridgeUrl: "https://relay.link/bridge/soneium"
1600
1633
  },
1634
+ "1923": {
1635
+ bridgeUrl: "https://relay.link/bridge/swellchain"
1636
+ },
1601
1637
  "1993": {
1602
1638
  bridgeUrl: "https://testnets.relay.link/bridge/b3"
1603
1639
  },
1604
1640
  "1996": {
1605
1641
  bridgeUrl: "https://relay.link/bridge/sanko"
1606
1642
  },
1643
+ "2187": {
1644
+ bridgeUrl: "https://relay.link/bridge/game7"
1645
+ },
1607
1646
  "2741": {
1608
1647
  bridgeUrl: "https://relay.link/bridge/abstract"
1609
1648
  },
@@ -1673,6 +1712,9 @@ var relayChains_default = {
1673
1712
  "42170": {
1674
1713
  bridgeUrl: "https://relay.link/bridge/arbitrum-nova"
1675
1714
  },
1715
+ "42220": {
1716
+ bridgeUrl: "https://relay.link/bridge/celo"
1717
+ },
1676
1718
  "43114": {
1677
1719
  bridgeUrl: "https://relay.link/bridge/avalanche"
1678
1720
  },
@@ -1703,12 +1745,18 @@ var relayChains_default = {
1703
1745
  "80002": {
1704
1746
  bridgeUrl: "https://testnets.relay.link/bridge/amoy"
1705
1747
  },
1748
+ "80094": {
1749
+ bridgeUrl: "https://relay.link/bridge/berachain"
1750
+ },
1706
1751
  "81457": {
1707
1752
  bridgeUrl: "https://relay.link/bridge/blast"
1708
1753
  },
1709
1754
  "84532": {
1710
1755
  bridgeUrl: "https://testnets.relay.link/bridge/base-sepolia"
1711
1756
  },
1757
+ "167000": {
1758
+ bridgeUrl: "https://relay.link/bridge/taiko"
1759
+ },
1712
1760
  "167009": {
1713
1761
  bridgeUrl: "https://testnets.relay.link/bridge/hekla"
1714
1762
  },
@@ -1724,6 +1772,9 @@ var relayChains_default = {
1724
1772
  "660279": {
1725
1773
  bridgeUrl: "https://relay.link/bridge/xai"
1726
1774
  },
1775
+ "695569": {
1776
+ bridgeUrl: "https://testnets.relay.link/bridge/pyrope"
1777
+ },
1727
1778
  "911867": {
1728
1779
  bridgeUrl: "https://testnets.relay.link/bridge/odyssey"
1729
1780
  },
@@ -1736,6 +1787,9 @@ var relayChains_default = {
1736
1787
  "3397901": {
1737
1788
  bridgeUrl: "https://testnets.relay.link/bridge/funki-testnet"
1738
1789
  },
1790
+ "3441006": {
1791
+ bridgeUrl: "https://testnets.relay.link/bridge/manta-pacific-testnet"
1792
+ },
1739
1793
  "4457845": {
1740
1794
  bridgeUrl: "https://testnets.relay.link/bridge/zero-sepolia"
1741
1795
  },
@@ -1763,6 +1817,9 @@ var relayChains_default = {
1763
1817
  "792703809": {
1764
1818
  bridgeUrl: "https://relay.link/bridge/solana"
1765
1819
  },
1820
+ "845320008": {
1821
+ bridgeUrl: "https://testnets.relay.link/bridge/lordchain-testnet"
1822
+ },
1766
1823
  "888888888": {
1767
1824
  bridgeUrl: "https://relay.link/bridge/ancient8"
1768
1825
  },
@@ -1874,7 +1931,7 @@ function ConnectedSteps({ userClient, initialUserAddress }) {
1874
1931
  const paymaster = getPaymaster(chain);
1875
1932
  const userAddress = userClient.account.address;
1876
1933
  const { data: prerequisites, error: prerequisitesError } = usePrerequisites(userAddress);
1877
- useEffect7(() => {
1934
+ useEffect8(() => {
1878
1935
  if (prerequisitesError) {
1879
1936
  console.error("Could not get prerequisites", prerequisitesError);
1880
1937
  }
@@ -1882,7 +1939,7 @@ function ConnectedSteps({ userClient, initialUserAddress }) {
1882
1939
  const { closeAccountModal } = useAccountModal();
1883
1940
  const isNewConnection = userAddress !== initialUserAddress;
1884
1941
  const initialPrerequisites = useRef2(prerequisites);
1885
- useEffect7(() => {
1942
+ useEffect8(() => {
1886
1943
  if (prerequisites == null) return;
1887
1944
  if (initialPrerequisites.current == null) {
1888
1945
  initialPrerequisites.current = prerequisites;
@@ -1971,7 +2028,7 @@ function AccountModalContent() {
1971
2028
  }
1972
2029
 
1973
2030
  // src/AccountModal.tsx
1974
- import { DialogClose, DialogTitle } from "@radix-ui/react-dialog";
2031
+ import { DialogClose } from "@radix-ui/react-dialog";
1975
2032
 
1976
2033
  // src/icons/IconSVG.tsx
1977
2034
  import { twMerge as twMerge8 } from "tailwind-merge";
@@ -2011,11 +2068,11 @@ import { ErrorBoundary } from "react-error-boundary";
2011
2068
 
2012
2069
  // src/errors/ErrorOverlay.tsx
2013
2070
  import { wait } from "@latticexyz/common/utils";
2014
- import { useEffect as useEffect8 } from "react";
2071
+ import { useEffect as useEffect9 } from "react";
2015
2072
  import { twMerge as twMerge9 } from "tailwind-merge";
2016
2073
  import { Fragment as Fragment2, jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
2017
2074
  function ErrorOverlay({ error: error2, retry, dismiss }) {
2018
- useEffect8(() => {
2075
+ useEffect9(() => {
2019
2076
  if (error2) {
2020
2077
  console.error(error2);
2021
2078
  }
@@ -2109,51 +2166,48 @@ function ErrorsOverlay() {
2109
2166
  import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
2110
2167
  function AccountModal() {
2111
2168
  const { accountModalOpen, toggleAccountModal } = useAccountModal();
2112
- return /* @__PURE__ */ jsxs16(Modal, { open: accountModalOpen, onOpenChange: toggleAccountModal, children: [
2113
- /* @__PURE__ */ jsx24(DialogTitle, { className: "sr-only", children: "Connect with EntryKit" }),
2114
- accountModalOpen ? /* @__PURE__ */ jsxs16(
2115
- "div",
2116
- {
2117
- className: twMerge10(
2118
- "relative py-2 ring-1",
2119
- "bg-neutral-900 text-neutral-400 ring-neutral-700/50",
2120
- "links:font-medium links:underline links:underline-offset-4",
2121
- "links:text-white",
2122
- "links:decoration-neutral-500 hover:links:decoration-orange-500"
2169
+ return /* @__PURE__ */ jsx24(Modal, { open: accountModalOpen, onOpenChange: toggleAccountModal, children: accountModalOpen ? /* @__PURE__ */ jsxs16(
2170
+ "div",
2171
+ {
2172
+ className: twMerge10(
2173
+ "relative py-2 ring-1",
2174
+ "bg-neutral-900 text-neutral-400 ring-neutral-700/50",
2175
+ "links:font-medium links:underline links:underline-offset-4",
2176
+ "links:text-white",
2177
+ "links:decoration-neutral-500 hover:links:decoration-orange-500"
2178
+ ),
2179
+ children: [
2180
+ /* @__PURE__ */ jsxs16(ErrorBoundary, { FallbackComponent: ErrorFallback, children: [
2181
+ /* @__PURE__ */ jsx24(AccountModalContent, {}),
2182
+ /* @__PURE__ */ jsx24(ErrorsOverlay, {})
2183
+ ] }),
2184
+ /* @__PURE__ */ jsxs16(
2185
+ "a",
2186
+ {
2187
+ href: "https://mud.dev",
2188
+ target: "_blank",
2189
+ rel: "noreferrer noopener",
2190
+ className: "group self-center p-3 flex items-center justify-center gap-2 links-unset text-sm font-mono transition text-neutral-400 hover:text-white",
2191
+ children: [
2192
+ /* @__PURE__ */ jsx24("span", { className: "block w-4 h-4", children: /* @__PURE__ */ jsx24(Logo, { className: "w-full h-full text-orange-500 group-hover:rotate-90 transition duration-300" }) }),
2193
+ /* @__PURE__ */ jsx24("span", { children: "Powered by MUD" })
2194
+ ]
2195
+ }
2123
2196
  ),
2124
- children: [
2125
- /* @__PURE__ */ jsx24("div", { className: "absolute top-0 right-0", children: /* @__PURE__ */ jsx24(
2126
- DialogClose,
2127
- {
2128
- className: twMerge10(
2129
- "pointer-events-auto leading-none p-2 transition",
2130
- "text-white/20 hover:text-white/40"
2131
- ),
2132
- title: "Close",
2133
- children: /* @__PURE__ */ jsx24(CloseIcon, { className: "m-0" })
2134
- }
2135
- ) }),
2136
- /* @__PURE__ */ jsxs16(ErrorBoundary, { FallbackComponent: ErrorFallback, children: [
2137
- /* @__PURE__ */ jsx24(AccountModalContent, {}),
2138
- /* @__PURE__ */ jsx24(ErrorsOverlay, {})
2139
- ] }),
2140
- /* @__PURE__ */ jsxs16(
2141
- "a",
2142
- {
2143
- href: "https://mud.dev",
2144
- target: "_blank",
2145
- rel: "noreferrer noopener",
2146
- className: "group self-center p-3 flex items-center justify-center gap-2 links-unset text-sm font-mono transition text-neutral-400 hover:text-white",
2147
- children: [
2148
- /* @__PURE__ */ jsx24("span", { className: "block w-4 h-4", children: /* @__PURE__ */ jsx24(Logo, { className: "w-full h-full text-orange-500 group-hover:rotate-90 transition duration-300" }) }),
2149
- /* @__PURE__ */ jsx24("span", { children: "Powered by MUD" })
2150
- ]
2151
- }
2152
- )
2153
- ]
2154
- }
2155
- ) : null
2156
- ] });
2197
+ /* @__PURE__ */ jsx24("div", { className: "absolute top-0 right-0", children: /* @__PURE__ */ jsx24(
2198
+ DialogClose,
2199
+ {
2200
+ className: twMerge10(
2201
+ "pointer-events-auto leading-none p-2 transition",
2202
+ "text-white/20 hover:text-white/40"
2203
+ ),
2204
+ title: "Close",
2205
+ children: /* @__PURE__ */ jsx24(CloseIcon, { className: "m-0" })
2206
+ }
2207
+ ) })
2208
+ ]
2209
+ }
2210
+ ) : null });
2157
2211
  }
2158
2212
 
2159
2213
  // src/EntryKitProvider.tsx