@embarkai/ui-kit 0.1.1 → 0.1.3

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.
package/dist/index.d.ts CHANGED
@@ -4,7 +4,6 @@ import React__default, { ReactNode, MutableRefObject, FC, HTMLAttributes, PropsW
4
4
  import * as viem from 'viem';
5
5
  import { Address as Address$1, Hex, PublicClient, Chain, Hash as Hash$1, TransactionReceipt } from 'viem';
6
6
  import * as _tanstack_react_query from '@tanstack/react-query';
7
- import { QueryClient } from '@tanstack/react-query';
8
7
  import * as zustand_middleware from 'zustand/middleware';
9
8
  import * as zustand from 'zustand';
10
9
  import { ChainConfig, createPublicClientForChain, createBundlerClientForChain, getChainConfig, getViemChain, lumiaTestnetChain, lumiaMainnetChain } from '@embarkai/core/read';
@@ -132,10 +131,7 @@ declare function useTokenBalance(tokenAddress: `0x${string}`, userAddress?: `0x$
132
131
  refetch: (options?: _tanstack_react_query.RefetchOptions) => Promise<_tanstack_react_query.QueryObserverResult<bigint, viem.ReadContractErrorType>>;
133
132
  };
134
133
 
135
- /**
136
- * LumiaPassport Configuration (library copy)
137
- * Default config can be overridden via Provider initialConfig
138
- */
134
+ /** Default config can be overridden via Provider initialConfig */
139
135
 
140
136
  declare global {
141
137
  interface Window {
@@ -188,7 +184,7 @@ interface WatchToken {
188
184
  /** Logo URL (optional) */
189
185
  logo?: string;
190
186
  }
191
- interface LumiaPassportConfig {
187
+ interface ProviderConfig {
192
188
  projectId: string;
193
189
  passkey: {
194
190
  enabled: boolean;
@@ -211,10 +207,6 @@ interface LumiaPassportConfig {
211
207
  requireSignature: boolean;
212
208
  walletConnectProjectId?: string;
213
209
  };
214
- development: {
215
- enabled: boolean;
216
- showOnProduction: boolean;
217
- };
218
210
  preferedColorMode?: 'light' | 'dark';
219
211
  projectAssets?: {
220
212
  assets: ProjectAsset[];
@@ -297,53 +289,53 @@ interface WalletReadyStatus$1 {
297
289
  hasSession: boolean;
298
290
  timestamp: number;
299
291
  }
300
- interface LumiaPassportCallbacks {
301
- onLumiaPassportConnecting?: (payload: {
292
+ interface CallbacksConfig {
293
+ onConnecting?: (payload: {
302
294
  method: 'passkey' | 'email' | 'social' | 'wallet';
303
295
  provider?: string;
304
296
  }) => void;
305
- onLumiaPassportConnect?: (payload: {
297
+ onConnect?: (payload: {
306
298
  address: `0x${string}`;
307
299
  session: any;
308
300
  }) => void;
309
- onLumiaPassportAccount?: (payload: {
301
+ onAccount?: (payload: {
310
302
  userId?: string | null;
311
303
  address?: `0x${string}` | null;
312
304
  session?: any;
313
305
  hasKeyshare?: boolean;
314
306
  }) => void;
315
- onLumiaPassportUpdate?: (payload: {
307
+ onAccountUpdate?: (payload: {
316
308
  providers?: Array<any>;
317
309
  }) => void;
318
- onLumiaPassportDisconnect?: (payload: {
310
+ onDisconnect?: (payload: {
319
311
  address?: `0x${string}` | null;
320
312
  userId?: string | null;
321
313
  }) => void;
322
- onLumiaPassportError?: (payload: {
314
+ onError?: (payload: {
323
315
  error: Error;
324
316
  code?: string;
325
317
  message: string;
326
318
  }) => void;
327
- onLumiaPassportChainChange?: (payload: {
319
+ onChainChange?: (payload: {
328
320
  chainId: number;
329
321
  previousChainId: number;
330
322
  }) => void;
331
323
  onWalletReady?: (status: WalletReadyStatus$1) => void;
332
324
  }
333
- interface LumiaPassportContextType {
334
- config: MutableRefObject<LumiaPassportConfig>;
335
- updateConfig: (updates: Partial<LumiaPassportConfig>) => void;
336
- callbacks?: LumiaPassportCallbacks;
325
+ interface UIContextType {
326
+ config: MutableRefObject<ProviderConfig>;
327
+ updateConfig: (updates: Partial<ProviderConfig>) => void;
328
+ callbacks?: CallbacksConfig;
337
329
  }
338
- interface LumiaPassportProviderProps {
330
+ interface ProviderProps {
339
331
  children: ReactNode;
340
332
  projectId?: string;
341
- initialConfig?: Partial<LumiaPassportConfig>;
342
- callbacks?: LumiaPassportCallbacks;
333
+ initialConfig?: Partial<ProviderConfig>;
334
+ callbacks?: CallbacksConfig;
343
335
  }
344
336
  /** NEVER EVER declare here any state (useState or whatever). This Provider should NEVER trigger self of child-app re-renders */
345
- declare function LumiaPassportProvider(props: LumiaPassportProviderProps): react_jsx_runtime.JSX.Element;
346
- declare const useLumiaPassportConfig: () => LumiaPassportContextType;
337
+ declare function Provider(props: ProviderProps): react_jsx_runtime.JSX.Element;
338
+ declare const useProviderConfig: () => UIContextType;
347
339
 
348
340
  interface ConnectWalletButtonProps {
349
341
  /** Button Component to render as unsigned button instance */
@@ -354,6 +346,8 @@ interface ConnectWalletButtonProps {
354
346
  }
355
347
  declare function ConnectWalletButton(props: ConnectWalletButtonProps): react_jsx_runtime.JSX.Element;
356
348
 
349
+ declare function RainbowKitProvider({ children }: PropsWithChildren): react_jsx_runtime.JSX.Element;
350
+
357
351
  /**
358
352
  * Account session containing wallet and smart account information.
359
353
  * Shared across multiple modules (session, user-operations, signing, deployment).
@@ -919,11 +913,11 @@ interface SessionState {
919
913
  setActiveChain: (chainParams: ChainParams) => void;
920
914
  }
921
915
  /**
922
- * @function useLumiaPassportSession is UNLIKELY to use outside Lumia Passport, as it is INTERNAL zustand session store!
923
- * Use it with caution, using zustand callback extraction. EX: const address = useLumiaPassportSession((st) => st.address)
924
- * @description refactor your app to NOT use this directly in your application, use set of new dedicated session hooks: useLumiaPassportAccountSession, useLumiaPassportAddress, etc.
916
+ * @function useSession is UNLIKELY to use outside EmbarkAI, as it is INTERNAL zustand session store!
917
+ * Use it with caution, using zustand callback extraction. EX: const address = useSession((st) => st.address)
918
+ * @description refactor your app to NOT use this directly in your application, use set of new dedicated session hooks: useAccountSession, useAddress, etc.
925
919
  */
926
- declare const useLumiaPassportSession: zustand.UseBoundStore<Omit<zustand.StoreApi<SessionState>, "setState" | "persist"> & {
920
+ declare const useSession: zustand.UseBoundStore<Omit<zustand.StoreApi<SessionState>, "setState" | "persist"> & {
927
921
  setState(partial: SessionState | Partial<SessionState> | ((state: SessionState) => SessionState | Partial<SessionState>), replace?: false): unknown;
928
922
  setState(state: SessionState | ((state: SessionState) => SessionState), replace: true): unknown;
929
923
  persist: {
@@ -957,10 +951,10 @@ declare const useLumiaPassportSession: zustand.UseBoundStore<Omit<zustand.StoreA
957
951
  * ```
958
952
  */
959
953
  declare const requireActiveChainId: () => number;
960
- declare function LumiaPassportSessionProvider({ children }: PropsWithChildren): react_jsx_runtime.JSX.Element;
954
+ declare function SessionProvider({ children }: PropsWithChildren): react_jsx_runtime.JSX.Element;
961
955
 
962
- declare const useLumiaPassportIsMobileView: () => boolean;
963
- declare const useLumiaPassportBalance: () => {
956
+ declare const useIsMobileView: () => boolean;
957
+ declare const useBalance: () => {
964
958
  walletBalance: {
965
959
  decimals: number;
966
960
  formatted: string;
@@ -972,17 +966,17 @@ declare const useLumiaPassportBalance: () => {
972
966
  fiatSymbol: string;
973
967
  cryptoSymbol: string;
974
968
  };
975
- declare const useLumiaPassportIFrameReady: () => boolean;
976
- declare const useLumiaPassportAccountSession: () => AccountSession;
977
- declare const useLumiaPassportAddress: () => `0x${string}`;
978
- declare const useLumiaPassportError: () => string;
979
- declare const useLumiaPassportLoadingStatus: () => {
969
+ declare const useIFrameReady: () => boolean;
970
+ declare const useAccountSession: () => AccountSession;
971
+ declare const useAddress: () => `0x${string}`;
972
+ declare const useError: () => string;
973
+ declare const useLoadingStatus: () => {
980
974
  isSessionLoading: boolean;
981
975
  sessionStatus: string;
982
976
  };
983
- declare const useLumiaPassportRecoveryUserId: () => string;
984
- declare const useLumiaPassportHasServerVault: () => boolean;
985
- declare const useLumiaPassportActiveChainId: () => number;
977
+ declare const useRecoveryUserId: () => string;
978
+ declare const useHasServerVault: () => boolean;
979
+ declare const useActiveChainId: () => number;
986
980
 
987
981
  declare enum PageKey {
988
982
  AUTH = "auth",
@@ -1016,7 +1010,7 @@ interface PageOpenParams {
1016
1010
  * @example
1017
1011
  * ```tsx
1018
1012
  * function MyComponent() {
1019
- * const { isOpen, open, close } = useLumiaPassportOpen();
1013
+ * const { isOpen, open, close } = useOpenPage();
1020
1014
  *
1021
1015
  * return (
1022
1016
  * <button onClick={() => open(PageKey.BUY, { amount: 10 })}>
@@ -1026,7 +1020,7 @@ interface PageOpenParams {
1026
1020
  * }
1027
1021
  * ```
1028
1022
  */
1029
- declare function useLumiaPassportOpen(): {
1023
+ declare function useOpenPage(): {
1030
1024
  readonly open: (passportPage: PageKey, params?: PageOpenParams) => void;
1031
1025
  readonly close: () => void;
1032
1026
  readonly isOpen: boolean;
@@ -1034,7 +1028,7 @@ declare function useLumiaPassportOpen(): {
1034
1028
 
1035
1029
  type ColorMode = 'light' | 'dark';
1036
1030
 
1037
- declare function useLumiaPassportColorMode(): {
1031
+ declare function useColorMode(): {
1038
1032
  colorMode: ColorMode;
1039
1033
  setColorMode: (mode: ColorMode) => void;
1040
1034
  };
@@ -1053,19 +1047,6 @@ declare function ThemeToggle(props: ButtonProps): react_jsx_runtime.JSX.Element;
1053
1047
  /** LumiaPassport Language Switcher */
1054
1048
  declare function LangToggle(props: ButtonProps): react_jsx_runtime.JSX.Element;
1055
1049
 
1056
- interface LumiaWagmiProviderProps {
1057
- children: React__default.ReactNode;
1058
- }
1059
- declare const LumiaWagmiProvider: React__default.FC<LumiaWagmiProviderProps>;
1060
-
1061
- declare function LumiaRainbowKitProvider({ children }: PropsWithChildren): react_jsx_runtime.JSX.Element;
1062
-
1063
- interface LumiaLogoProps {
1064
- size?: number;
1065
- className?: string;
1066
- }
1067
- declare const LumiaLogo: React$1.ForwardRefExoticComponent<LumiaLogoProps & React$1.RefAttributes<SVGSVGElement>>;
1068
-
1069
1050
  type ChainLike$2 = {
1070
1051
  id: number;
1071
1052
  blockExplorers?: {
@@ -1229,7 +1210,7 @@ interface UseLogoutReturn {
1229
1210
  logout: () => Promise<void>;
1230
1211
  }
1231
1212
  /**
1232
- * Hook for logging out and disconnecting from Lumia Passport
1213
+ * Hook for logging out and disconnecting from EmbarkAI
1233
1214
  * Clears session, tokens, and notifies callbacks
1234
1215
  *
1235
1216
  * @example
@@ -1420,9 +1401,6 @@ interface UseNicknameResolveOptions {
1420
1401
  */
1421
1402
  declare function useNicknameResolve(input: string, options: UseNicknameResolveOptions): UseNicknameResolveResult;
1422
1403
 
1423
- declare const lumiaBeamTestnet: Chain;
1424
- declare const lumiaPrisma: Chain;
1425
-
1426
1404
  /**
1427
1405
  * Get UserOperation data by hash
1428
1406
  */
@@ -1657,14 +1635,29 @@ declare function getUserProfile(): Promise<UserProfile>;
1657
1635
  */
1658
1636
  declare function updateUserProfile(updates: UpdateProfileRequest): Promise<UserProfile>;
1659
1637
 
1638
+ interface LinkedProfileDisplay extends AuthProvider {
1639
+ displayName: string;
1640
+ icon?: React.ComponentType<{
1641
+ className?: string;
1642
+ }>;
1643
+ color?: string;
1644
+ }
1645
+ declare function useLinkedProfiles(): {
1646
+ profiles: LinkedProfileDisplay[];
1647
+ avatar: string;
1648
+ isLoading: boolean;
1649
+ error: Error;
1650
+ refresh: () => Promise<void>;
1651
+ };
1652
+
1660
1653
  /**
1661
- * Custom error types for Lumia Passport operations
1654
+ * Custom error types for EmbarkAI operations
1662
1655
  */
1663
1656
  /**
1664
- * Base error class for all Lumia Passport errors
1657
+ * Base error class for all EmbarkAI errors
1665
1658
  * Local copy to avoid @embarkai/core dependency in iframe bundle
1666
1659
  */
1667
- declare class LumiaPassportError extends Error {
1660
+ declare class AccountAbstractionError extends Error {
1668
1661
  /** Machine-readable error code for programmatic handling */
1669
1662
  readonly code: string;
1670
1663
  constructor(message: string, code: string);
@@ -1672,12 +1665,12 @@ declare class LumiaPassportError extends Error {
1672
1665
  /**
1673
1666
  * Error thrown when user rejects a transaction or signature request
1674
1667
  */
1675
- declare class UserRejectedError extends LumiaPassportError {
1668
+ declare class UserRejectedError extends AccountAbstractionError {
1676
1669
  static readonly CODE: "USER_REJECTED";
1677
1670
  constructor(message?: string);
1678
1671
  }
1679
1672
  /**
1680
- * Error codes for Lumia Passport operations
1673
+ * Error codes for EmbarkAI operations
1681
1674
  */
1682
1675
  declare const ErrorCodes: {
1683
1676
  readonly MPC_SIGNING_ERROR: "MPC_SIGNING_ERROR";
@@ -1687,13 +1680,11 @@ declare const ErrorCodes: {
1687
1680
  * Create appropriate error from error code
1688
1681
  * Used to reconstruct errors from iframe postMessage
1689
1682
  */
1690
- declare function createLumiaPassportError(params: {
1683
+ declare function createAccountAbstractionError(params: {
1691
1684
  message: string;
1692
1685
  code?: string;
1693
1686
  }): Error;
1694
1687
 
1695
- declare const queryClient: QueryClient;
1696
-
1697
1688
  /**
1698
1689
  * Wagmi config for RainbowKit and wallet connections.
1699
1690
  * Note: Balance fetching uses dynamic publicClient from session store,
@@ -2002,21 +1993,6 @@ declare function useSmartAccountTransactions(): {
2002
1993
  }>;
2003
1994
  };
2004
1995
 
2005
- interface LinkedProfileDisplay extends AuthProvider {
2006
- displayName: string;
2007
- icon?: React.ComponentType<{
2008
- className?: string;
2009
- }>;
2010
- color?: string;
2011
- }
2012
- declare function useLumiaPassportLinkedProfiles(): {
2013
- profiles: LinkedProfileDisplay[];
2014
- avatar: string;
2015
- isLoading: boolean;
2016
- error: Error;
2017
- refresh: () => Promise<void>;
2018
- };
2019
-
2020
1996
  /**
2021
1997
  * Passport translations object.
2022
1998
  * Note: For use in combineI18NResources, translations are imported directly
@@ -2250,9 +2226,9 @@ declare const PASSPORT_TRANSLATIONS: {
2250
2226
  add: string;
2251
2227
  added: string;
2252
2228
  edit: string;
2253
- confirm: string;
2254
- save: string;
2255
- saved: string;
2229
+ confirm: any;
2230
+ save: any;
2231
+ saved: any;
2256
2232
  delete: string;
2257
2233
  download: string;
2258
2234
  cancel: string;
@@ -2335,13 +2311,13 @@ declare const PASSPORT_TRANSLATIONS: {
2335
2311
  share: string;
2336
2312
  };
2337
2313
  buyMenu: {
2338
- title: string;
2339
- provider: string;
2340
- selectProvider: string;
2341
- selectCrypto: string;
2342
- selectFiat: string;
2343
- selectPaymentMode: string;
2344
- enterAmount: string;
2314
+ title: any;
2315
+ provider: any;
2316
+ selectProvider: any;
2317
+ selectCrypto: any;
2318
+ selectFiat: any;
2319
+ selectPaymentMode: any;
2320
+ enterAmount: any;
2345
2321
  };
2346
2322
  portfolioMenu: {
2347
2323
  title: string;
@@ -2351,7 +2327,7 @@ declare const PASSPORT_TRANSLATIONS: {
2351
2327
  title: string;
2352
2328
  noTransactions: string;
2353
2329
  internalTransactions: string;
2354
- comingSoon: string;
2330
+ comingSoon: any;
2355
2331
  };
2356
2332
  kycMenu: {
2357
2333
  title: string;
@@ -2455,10 +2431,10 @@ declare const PASSPORT_TRANSLATIONS: {
2455
2431
  chainMenu: {
2456
2432
  title: string;
2457
2433
  chainSwitchRequest: {
2458
- title: string;
2459
- description: string;
2460
- confirmButton: string;
2461
- cancelButton: string;
2434
+ title: any;
2435
+ description: any;
2436
+ confirmButton: any;
2437
+ cancelButton: any;
2462
2438
  };
2463
2439
  };
2464
2440
  };
@@ -2684,7 +2660,7 @@ declare const PASSPORT_TRANSLATIONS: {
2684
2660
  };
2685
2661
  };
2686
2662
  };
2687
- declare const LOCAL_STORAGE_I18N_KEY = "lumia-passport-language";
2663
+ declare const LOCAL_STORAGE_I18N_KEY = "passport-language";
2688
2664
 
2689
2665
  type TranslationResources = Record<string, Record<string, unknown>>;
2690
2666
  /**
@@ -2716,4 +2692,4 @@ declare function combineI18NResources(...resourses: TranslationResources[]): Tra
2716
2692
  declare function getAvailableLanguages(resourses: TranslationResources): string[];
2717
2693
  declare function getLanguageIcon(languageKey: string): string | null;
2718
2694
 
2719
- export { type AccountSession, Address, type AddressProps, type Asset, ConnectWalletButton, type ConnectWalletButtonProps, ErrorCodes, type FingerprintVerificationResult, Hash, type HashProps, KeyshareBackupMenu as KeyshareBackup, LOCAL_STORAGE_I18N_KEY, LangToggle, LumiaLogo, type LumiaPassportCallbacks, type LumiaPassportConfig, LumiaPassportError, LumiaPassportProvider, type LumiaPassportProviderProps, LumiaPassportSessionProvider, LumiaRainbowKitProvider, LumiaWagmiProvider, type NicknameAvailability, type NicknameAvatar, type NicknameChangeResult, type NicknameInfo, type NicknameResolution, type NicknameResolveRequest, type NicknameResolvedTarget, type NicknameValidationResult, PASSPORT_TRANSLATIONS, PageKey, type PageOpenParams, type ProviderDetail, type RegisterSmartAccountResult, type SendTransactionParams, type SendTransactionResult, type SignTypedDataParams, type SmartAccountEntry, ThemeToggle, type TokenBalance, type Transaction, TransactionsList, type TypedDataDomain, type TypedDataField, type UpdateProfileRequest, type UseErc3643ComplianceOptions, type UseErc3643ComplianceResult, type UseLogoutReturn, type UseNicknameResolveOptions, type UseNicknameResolveResult, type UseSendTransactionReturn, type UseUserOpStatusOptions, type UseUserOpStatusReturn, type UserOpMempool, type SendTransactionParams$1 as UserOpSendTransactionParams, type UserOpState, UserOpStatus, type UserOpStatusProps, type UserOperation, type UserOperationByHash, type UserOperationReceipt, UserOperationTimeoutError, type UserProfile, UserRejectedError, type WaitForReceiptOptions, type WalletReadyStatus, type WatchToken, combineI18NResources, createLumiaPassportError, deployAccount, destroyIframeManager, generateFingerprint, getAllSmartAccounts, getAvailableLanguages, getIframeManager, getLanguageIcon, getSmartAccountForChain, getUserOperationByHash, getUserOperationReceipt, getUserProfile, looksLikeNickname, lumiaBeamTestnet, lumiaPrisma, prepareUserOperation, queryClient, requireActiveChainId, sendUserOperation, signTypedData, updateUserProfile, useAssets, useErc3643Compliance, useLogout, useLumiaPassportAccountSession, useLumiaPassportActiveChainId, useLumiaPassportAddress, useLumiaPassportBalance, useLumiaPassportColorMode, useLumiaPassportConfig, useLumiaPassportError, useLumiaPassportHasServerVault, useLumiaPassportIFrameReady, useLumiaPassportIsMobileView, useLumiaPassportLinkedProfiles, useLumiaPassportLoadingStatus, useLumiaPassportOpen, useLumiaPassportRecoveryUserId, useLumiaPassportSession, useNicknameResolve, useSendTransaction, useSmartAccountTransactions, useTokenBalance, useTokenInfo, useTransactions, useUserOpStatus, verifyFingerprint, verifyFingerprintDetailed, wagmiConfig, waitForUserOperationReceipt };
2695
+ export { AccountAbstractionError, type AccountSession, Address, type AddressProps, type Asset, type CallbacksConfig, ConnectWalletButton, type ConnectWalletButtonProps, ErrorCodes, type FingerprintVerificationResult, Hash, type HashProps, KeyshareBackupMenu as KeyshareBackup, LOCAL_STORAGE_I18N_KEY, LangToggle, type NicknameAvailability, type NicknameAvatar, type NicknameChangeResult, type NicknameInfo, type NicknameResolution, type NicknameResolveRequest, type NicknameResolvedTarget, type NicknameValidationResult, PASSPORT_TRANSLATIONS, PageKey, type PageOpenParams, Provider, type ProviderConfig, type ProviderDetail, type ProviderProps, RainbowKitProvider, type RegisterSmartAccountResult, type SendTransactionParams, type SendTransactionResult, SessionProvider, type SignTypedDataParams, type SmartAccountEntry, ThemeToggle, type TokenBalance, type Transaction, TransactionsList, type TypedDataDomain, type TypedDataField, type UpdateProfileRequest, type UseErc3643ComplianceOptions, type UseErc3643ComplianceResult, type UseLogoutReturn, type UseNicknameResolveOptions, type UseNicknameResolveResult, type UseSendTransactionReturn, type UseUserOpStatusOptions, type UseUserOpStatusReturn, type UserOpMempool, type SendTransactionParams$1 as UserOpSendTransactionParams, type UserOpState, UserOpStatus, type UserOpStatusProps, type UserOperation, type UserOperationByHash, type UserOperationReceipt, UserOperationTimeoutError, type UserProfile, UserRejectedError, type WaitForReceiptOptions, type WalletReadyStatus, type WatchToken, combineI18NResources, createAccountAbstractionError, deployAccount, destroyIframeManager, generateFingerprint, getAllSmartAccounts, getAvailableLanguages, getIframeManager, getLanguageIcon, getSmartAccountForChain, getUserOperationByHash, getUserOperationReceipt, getUserProfile, looksLikeNickname, prepareUserOperation, requireActiveChainId, sendUserOperation, signTypedData, updateUserProfile, useAccountSession, useActiveChainId, useAddress, useAssets, useBalance, useColorMode, useErc3643Compliance, useError, useHasServerVault, useIFrameReady, useIsMobileView, useLinkedProfiles, useLoadingStatus, useLogout, useNicknameResolve, useOpenPage, useProviderConfig, useRecoveryUserId, useSendTransaction, useSession, useSmartAccountTransactions, useTokenBalance, useTokenInfo, useTransactions, useUserOpStatus, verifyFingerprint, verifyFingerprintDetailed, wagmiConfig, waitForUserOperationReceipt };