thirdweb 5.80.0 → 5.80.1-nightly-ce3e850fdbf34911e20919ecc2674e4a63f08fa3-20241225000333

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.
Files changed (92) hide show
  1. package/dist/cjs/adapters/ethers6.js +1 -1
  2. package/dist/cjs/contract/deployment/utils/bootstrap.js +29 -11
  3. package/dist/cjs/contract/deployment/utils/bootstrap.js.map +1 -1
  4. package/dist/cjs/contract/deployment/zksync/implementations.js +27 -0
  5. package/dist/cjs/contract/deployment/zksync/implementations.js.map +1 -0
  6. package/dist/cjs/extensions/prebuilts/get-required-transactions.js +5 -2
  7. package/dist/cjs/extensions/prebuilts/get-required-transactions.js.map +1 -1
  8. package/dist/cjs/react/core/utils/walletIcon.js +3 -0
  9. package/dist/cjs/react/core/utils/walletIcon.js.map +1 -1
  10. package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js +18 -8
  11. package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
  12. package/dist/cjs/react/web/ui/MediaRenderer/useResolvedMediaType.js +25 -0
  13. package/dist/cjs/react/web/ui/MediaRenderer/useResolvedMediaType.js.map +1 -1
  14. package/dist/cjs/react/web/ui/prebuilt/NFT/media.js +24 -12
  15. package/dist/cjs/react/web/ui/prebuilt/NFT/media.js.map +1 -1
  16. package/dist/cjs/react/web/ui/prebuilt/NFT/name.js +24 -12
  17. package/dist/cjs/react/web/ui/prebuilt/NFT/name.js.map +1 -1
  18. package/dist/cjs/version.js +1 -1
  19. package/dist/cjs/version.js.map +1 -1
  20. package/dist/cjs/wallets/manager/index.js +2 -2
  21. package/dist/cjs/wallets/manager/index.js.map +1 -1
  22. package/dist/esm/adapters/ethers6.js +1 -1
  23. package/dist/esm/contract/deployment/utils/bootstrap.js +29 -11
  24. package/dist/esm/contract/deployment/utils/bootstrap.js.map +1 -1
  25. package/dist/esm/contract/deployment/zksync/implementations.js +24 -0
  26. package/dist/esm/contract/deployment/zksync/implementations.js.map +1 -0
  27. package/dist/esm/extensions/prebuilts/get-required-transactions.js +5 -2
  28. package/dist/esm/extensions/prebuilts/get-required-transactions.js.map +1 -1
  29. package/dist/esm/react/core/utils/walletIcon.js +3 -0
  30. package/dist/esm/react/core/utils/walletIcon.js.map +1 -1
  31. package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js +12 -3
  32. package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
  33. package/dist/esm/react/web/ui/MediaRenderer/useResolvedMediaType.js +24 -0
  34. package/dist/esm/react/web/ui/MediaRenderer/useResolvedMediaType.js.map +1 -1
  35. package/dist/esm/react/web/ui/prebuilt/NFT/media.js +23 -12
  36. package/dist/esm/react/web/ui/prebuilt/NFT/media.js.map +1 -1
  37. package/dist/esm/react/web/ui/prebuilt/NFT/name.js +23 -12
  38. package/dist/esm/react/web/ui/prebuilt/NFT/name.js.map +1 -1
  39. package/dist/esm/version.js +1 -1
  40. package/dist/esm/version.js.map +1 -1
  41. package/dist/esm/wallets/manager/index.js +2 -2
  42. package/dist/esm/wallets/manager/index.js.map +1 -1
  43. package/dist/types/adapters/ethers6.d.ts +1 -1
  44. package/dist/types/contract/deployment/utils/bootstrap.d.ts.map +1 -1
  45. package/dist/types/contract/deployment/zksync/implementations.d.ts +3 -0
  46. package/dist/types/contract/deployment/zksync/implementations.d.ts.map +1 -0
  47. package/dist/types/extensions/prebuilts/get-required-transactions.d.ts +1 -1
  48. package/dist/types/extensions/prebuilts/get-required-transactions.d.ts.map +1 -1
  49. package/dist/types/react/core/utils/walletIcon.d.ts +3 -0
  50. package/dist/types/react/core/utils/walletIcon.d.ts.map +1 -1
  51. package/dist/types/react/web/ui/MediaRenderer/MediaRenderer.d.ts +12 -0
  52. package/dist/types/react/web/ui/MediaRenderer/MediaRenderer.d.ts.map +1 -1
  53. package/dist/types/react/web/ui/MediaRenderer/useResolvedMediaType.d.ts +8 -0
  54. package/dist/types/react/web/ui/MediaRenderer/useResolvedMediaType.d.ts.map +1 -1
  55. package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts +10 -0
  56. package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts.map +1 -1
  57. package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts +10 -0
  58. package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts.map +1 -1
  59. package/dist/types/version.d.ts +1 -1
  60. package/dist/types/version.d.ts.map +1 -1
  61. package/package.json +2 -2
  62. package/src/adapters/ethers6.ts +1 -1
  63. package/src/contract/deployment/utils/bootstrap.test.ts +44 -1
  64. package/src/contract/deployment/utils/bootstrap.ts +38 -11
  65. package/src/contract/deployment/zksync/implementations.ts +24 -0
  66. package/src/extensions/prebuilts/get-required-transactions.test.ts +14 -1
  67. package/src/extensions/prebuilts/get-required-transactions.ts +6 -2
  68. package/src/react/core/hooks/wallets/useSwitchActiveWalletChain.test.tsx +51 -0
  69. package/src/react/core/providers/connection-manager.test.tsx +11 -0
  70. package/src/react/core/utils/isSmartWallet.test.ts +19 -0
  71. package/src/react/core/utils/storage.test.ts +57 -0
  72. package/src/react/core/utils/structuralSharing.test.ts +55 -0
  73. package/src/react/core/utils/walletIcon.test.ts +81 -0
  74. package/src/react/core/utils/walletIcon.ts +3 -0
  75. package/src/react/web/ui/MediaRenderer/MediaRenderer.test.tsx +193 -2
  76. package/src/react/web/ui/MediaRenderer/MediaRenderer.tsx +12 -3
  77. package/src/react/web/ui/MediaRenderer/icons.test.tsx +80 -0
  78. package/src/react/web/ui/MediaRenderer/mime/mime.test.ts +66 -0
  79. package/src/react/web/ui/MediaRenderer/useResolvedMediaType.test.tsx +27 -0
  80. package/src/react/web/ui/MediaRenderer/useResolvedMediaType.ts +28 -0
  81. package/src/react/web/ui/hooks/useCopyClipboard.test.tsx +41 -0
  82. package/src/react/web/ui/hooks/useDebouncedValue.test.tsx +107 -0
  83. package/src/react/web/ui/hooks/useShowMore.test.tsx +83 -0
  84. package/src/react/web/ui/prebuilt/Chain/name.test.tsx +36 -28
  85. package/src/react/web/ui/prebuilt/NFT/media.test.tsx +58 -1
  86. package/src/react/web/ui/prebuilt/NFT/media.tsx +32 -13
  87. package/src/react/web/ui/prebuilt/NFT/name.test.tsx +37 -1
  88. package/src/react/web/ui/prebuilt/NFT/name.tsx +29 -13
  89. package/src/react/web/utils/resolveMimeType.test.ts +63 -0
  90. package/src/version.ts +1 -1
  91. package/src/wallets/manager/index.ts +2 -2
  92. package/src/wallets/smart/smart.test.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"walletIcon.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/utils/walletIcon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA+B5D,eAAO,MAAM,gBAAgB,+2EACi1E,CAAC;AAG/2E,eAAO,MAAM,iBAAiB,+mDACglD,CAAC;AAI/mD,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAavB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAqC1E"}
1
+ {"version":3,"file":"walletIcon.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/utils/walletIcon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA+B5D,eAAO,MAAM,gBAAgB,+2EACi1E,CAAC;AAG/2E,eAAO,MAAM,iBAAiB,+mDACglD,CAAC;AAI/mD;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAavB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAqC1E"}
@@ -39,4 +39,16 @@ import type { MediaRendererProps } from "./types.js";
39
39
  * @param props - Refer to [`MediaRendererProps`](https://portal.thirdweb.com/references/typescript/v5/MediaRendererProps) to see the available props.
40
40
  */
41
41
  export declare const MediaRenderer: React.ForwardRefExoticComponent<MediaRendererProps & React.RefAttributes<HTMLMediaElement>>;
42
+ /**
43
+ * @internal Exported for tests
44
+ */
45
+ export declare const IframePlayer: React.ForwardRefExoticComponent<Omit<MediaRendererProps, "client" | "children" | "height" | "width" | "controls" | "gatewayUrl" | "mimeType"> & React.RefAttributes<HTMLIFrameElement>>;
46
+ /**
47
+ * @internal Exported for tests
48
+ */
49
+ export declare const LinkPlayer: React.ForwardRefExoticComponent<Pick<MediaRendererProps, "src" | "style" | "alt" | "className"> & React.RefAttributes<HTMLAnchorElement>>;
50
+ /**
51
+ * @internal
52
+ */
53
+ export declare function mergeRefs<T = any>(refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>): React.RefCallback<T>;
42
54
  //# sourceMappingURL=MediaRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediaRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/MediaRenderer/MediaRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAO3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,aAAa,6FAoJpB,CAAC"}
1
+ {"version":3,"file":"MediaRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/MediaRenderer/MediaRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAO3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,aAAa,6FAoJpB,CAAC;AAsUP;;GAEG;AACH,eAAO,MAAM,YAAY,yLAiElB,CAAC;AAER;;GAEG;AACH,eAAO,MAAM,UAAU,2IAkDhB,CAAC;AAER;;GAEG;AAEH,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAC/B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAC1D,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAUtB"}
@@ -9,4 +9,12 @@ export declare function useResolvedMediaType(client: ThirdwebClient, uri?: strin
9
9
  };
10
10
  isFetched: boolean;
11
11
  };
12
+ /**
13
+ * @internal Exported for tests
14
+ */
15
+ export declare function resolveMediaTypeFromUri(props: {
16
+ uri?: string;
17
+ client: ThirdwebClient;
18
+ gatewayUrl?: string;
19
+ }): string;
12
20
  //# sourceMappingURL=useResolvedMediaType.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useResolvedMediaType.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/MediaRenderer/useResolvedMediaType.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM;;;;;;EAiCpB"}
1
+ {"version":3,"file":"useResolvedMediaType.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/MediaRenderer/useResolvedMediaType.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM;;;;;;EAiCpB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,UAmBA"}
@@ -109,6 +109,16 @@ export type NFTMediaProps = Omit<MediaRendererProps, "src" | "poster" | "client"
109
109
  * @beta
110
110
  */
111
111
  export declare function NFTMedia({ loadingComponent, fallbackComponent, queryOptions, mediaResolver, ...mediaRendererProps }: NFTMediaProps): import("react/jsx-runtime.js").JSX.Element | null;
112
+ /**
113
+ * @internal
114
+ */
115
+ export declare function getQueryKey(props: {
116
+ chainId: number;
117
+ tokenId: bigint;
118
+ mediaResolver?: NFTMediaInfo | (() => NFTMediaInfo) | (() => Promise<NFTMediaInfo>);
119
+ }): readonly ["_internal_nft_media_", number, string, {
120
+ readonly resolver: string | NFTMediaInfo | undefined;
121
+ }];
112
122
  /**
113
123
  * @internal Exported for tests only
114
124
  */
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/prebuilt/NFT/media.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAIvE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,kBAAkB,EAClB,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAC5B,GAAG;IACF,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IAC3E;;;;OAIG;IACH,aAAa,CAAC,EACV,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,GAAG,kBAAkB,EACtB,EAAE,aAAa,qDAqCf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,aAAa,CAAC,EACV,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAClC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CA2BvD"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/prebuilt/NFT/media.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAIvE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,kBAAkB,EAClB,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAC5B,GAAG;IACF,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IAC3E;;;;OAIG;IACH,aAAa,CAAC,EACV,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,GAAG,kBAAkB,EACtB,EAAE,aAAa,qDA6Bf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EACV,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CACnC;;GAeA;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,aAAa,CAAC,EACV,YAAY,GACZ,CAAC,MAAM,YAAY,CAAC,GACpB,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAClC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CA2BvD"}
@@ -77,6 +77,16 @@ export interface NFTNameProps extends Omit<React.HTMLAttributes<HTMLSpanElement>
77
77
  * @beta
78
78
  */
79
79
  export declare function NFTName({ loadingComponent, fallbackComponent, queryOptions, nameResolver, ...restProps }: NFTNameProps): import("react/jsx-runtime.js").JSX.Element | null;
80
+ /**
81
+ * @internal
82
+ */
83
+ export declare function getQueryKey(props: {
84
+ chainId: number;
85
+ tokenId: bigint;
86
+ nameResolver?: string | (() => string) | (() => Promise<string>);
87
+ }): readonly ["_internal_nft_name_", number, string, {
88
+ readonly resolver: string | undefined;
89
+ }];
80
90
  /**
81
91
  * @internal Exported for tests
82
92
  */
@@ -1 +1 @@
1
- {"version":3,"file":"name.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/prebuilt/NFT/name.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAK5E,MAAM,WAAW,YACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC/D,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IACrE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;CAClE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAgB,OAAO,CAAC,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,GAAG,SAAS,EACb,EAAE,YAAY,qDA8Bd;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlB"}
1
+ {"version":3,"file":"name.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/prebuilt/NFT/name.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAK5E,MAAM,WAAW,YACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC/D,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IACrE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;CAClE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAgB,OAAO,CAAC,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,GAAG,SAAS,EACb,EAAE,YAAY,qDAsBd;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;CAClE;;GAeA;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlB"}
@@ -1,2 +1,2 @@
1
- export declare const version = "5.80.0";
1
+ export declare const version = "5.80.1-nightly-ce3e850fdbf34911e20919ecc2674e4a63f08fa3-20241225000333";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,2EAA2E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thirdweb",
3
- "version": "5.80.0",
3
+ "version": "5.80.1-nightly-ce3e850fdbf34911e20919ecc2674e4a63f08fa3-20241225000333",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/thirdweb-dev/js.git#main"
@@ -313,7 +313,7 @@
313
313
  "@testing-library/react": "^16.1.0",
314
314
  "@testing-library/user-event": "^14.5.2",
315
315
  "@types/cross-spawn": "^6.0.6",
316
- "@types/react": "19.0.1",
316
+ "@types/react": "19.0.2",
317
317
  "@viem/anvil": "0.0.10",
318
318
  "@vitejs/plugin-react": "^4.3.4",
319
319
  "@vitest/coverage-v8": "2.1.8",
@@ -166,7 +166,7 @@ export const ethers6Adapter = /* @__PURE__ */ (() => {
166
166
  },
167
167
  },
168
168
  /**
169
- * Converts an ethers6 Signer into an Wallet object or the other way around.
169
+ * Converts an ethers6 Signer into a Wallet object or the other way around.
170
170
  * @example
171
171
  *
172
172
  * ### fromEthersSigner
@@ -3,7 +3,12 @@ import { describe, expect, it } from "vitest";
3
3
  import { ANVIL_CHAIN } from "../../../../test/src/chains.js";
4
4
  import { TEST_CLIENT } from "../../../../test/src/test-clients.js";
5
5
  import { TEST_ACCOUNT_A } from "../../../../test/src/test-wallets.js";
6
- import { deployCloneFactory } from "./bootstrap.js";
6
+ import { defineChain } from "../../../chains/utils.js";
7
+ import {
8
+ deployCloneFactory,
9
+ getOrDeployInfraContract,
10
+ getOrDeployInfraForPublishedContract,
11
+ } from "./bootstrap.js";
7
12
  import { getDeployedCreate2Factory } from "./create-2-factory.js";
8
13
  import { getDeployedInfraContract } from "./infra.js";
9
14
 
@@ -42,4 +47,42 @@ describe.runIf(process.env.TW_SECRET_KEY)("bootstrap", () => {
42
47
  });
43
48
  expect(cloneFactory).not.toBeNull();
44
49
  });
50
+
51
+ it("should return saved implementations for zksync chains", async () => {
52
+ let infra = await getOrDeployInfraForPublishedContract({
53
+ client: TEST_CLIENT,
54
+ chain: defineChain(300),
55
+ account: TEST_ACCOUNT_A,
56
+ contractId: "MarketplaceV3",
57
+ });
58
+
59
+ expect(infra.cloneFactoryContract.address).to.eq(
60
+ "0xa51baf6a9c0ef5Db8C1898d5aDD92Bf3227d6088",
61
+ );
62
+ expect(infra.implementationContract.address).to.eq(
63
+ "0x58e0F289C7dD2025eBd0696d913ECC0fdc1CC8bc",
64
+ );
65
+
66
+ infra = await getOrDeployInfraForPublishedContract({
67
+ client: TEST_CLIENT,
68
+ chain: defineChain(300),
69
+ account: TEST_ACCOUNT_A,
70
+ contractId: "DropERC721",
71
+ version: "5.0.4",
72
+ });
73
+
74
+ expect(infra.cloneFactoryContract.address).to.eq(
75
+ "0xa51baf6a9c0ef5Db8C1898d5aDD92Bf3227d6088",
76
+ );
77
+ expect(infra.implementationContract.address).toBeDefined();
78
+
79
+ const weth = await getOrDeployInfraContract({
80
+ client: TEST_CLIENT,
81
+ chain: defineChain(300),
82
+ account: TEST_ACCOUNT_A,
83
+ contractId: "WETH9",
84
+ });
85
+
86
+ expect(weth.address).to.eq("0x0462C05457Fed440740Ff3696bDd2D0577411e34");
87
+ });
45
88
  });
@@ -7,6 +7,10 @@ import { isZkSyncChain } from "../../../utils/any-evm/zksync/isZkSyncChain.js";
7
7
  import type { ClientAndChainAndAccount } from "../../../utils/types.js";
8
8
  import { type ThirdwebContract, getContract } from "../../contract.js";
9
9
  import { fetchPublishedContractMetadata } from "../publisher.js";
10
+ import {
11
+ ZKSYNC_IMPLEMENTATIONS,
12
+ ZKSYNC_WETH,
13
+ } from "../zksync/implementations.js";
10
14
  import { zkDeployCreate2Factory } from "../zksync/zkDeployCreate2Factory.js";
11
15
  import { zkDeployContractDeterministic } from "../zksync/zkDeployDeterministic.js";
12
16
  import { getDeployedCloneFactoryContract } from "./clone-factory.js";
@@ -69,18 +73,29 @@ export async function getOrDeployInfraForPublishedContract(
69
73
  publisher,
70
74
  version,
71
75
  });
72
- const implementationContract = await zkDeployContractDeterministic({
73
- chain,
74
- client,
75
- account,
76
- abi: compilerMetadata.abi,
77
- bytecode: await fetchBytecodeFromCompilerMetadata({
78
- compilerMetadata,
79
- client,
76
+
77
+ const zksyncImplementations = ZKSYNC_IMPLEMENTATIONS[chain.id];
78
+ let implementationContract: string | undefined;
79
+
80
+ if (zksyncImplementations) {
81
+ implementationContract = zksyncImplementations[contractId];
82
+ }
83
+
84
+ if (!implementationContract) {
85
+ implementationContract = await zkDeployContractDeterministic({
80
86
  chain,
81
- }),
82
- params: constructorParams,
83
- });
87
+ client,
88
+ account,
89
+ abi: compilerMetadata.abi,
90
+ bytecode: await fetchBytecodeFromCompilerMetadata({
91
+ compilerMetadata,
92
+ client,
93
+ chain,
94
+ }),
95
+ params: constructorParams,
96
+ });
97
+ }
98
+
84
99
  return {
85
100
  cloneFactoryContract: getContract({
86
101
  address: cloneFactoryContract,
@@ -188,6 +203,18 @@ export async function getOrDeployInfraContract(
188
203
  version?: string;
189
204
  },
190
205
  ) {
206
+ if (options.contractId === "WETH9" && (await isZkSyncChain(options.chain))) {
207
+ const weth = ZKSYNC_WETH[options.chain.id];
208
+
209
+ if (weth) {
210
+ return getContract({
211
+ client: options.client,
212
+ chain: options.chain,
213
+ address: weth,
214
+ });
215
+ }
216
+ }
217
+
191
218
  const contractMetadata = await fetchPublishedContractMetadata({
192
219
  client: options.client,
193
220
  contractId: options.contractId,
@@ -0,0 +1,24 @@
1
+ export const ZKSYNC_IMPLEMENTATIONS: Record<number, Record<string, string>> = {
2
+ [300]: {
3
+ MarketplaceV3: "0x58e0F289C7dD2025eBd0696d913ECC0fdc1CC8bc",
4
+ },
5
+ [302]: {
6
+ MarketplaceV3: "0x8b0DBCf5b7D01eBB0F24525CE8AB72F16CE4F8C8",
7
+ },
8
+ [324]: {
9
+ MarketplaceV3: "0xBc02441a36Bb4029Cd191b20243c2e41B862F118",
10
+ },
11
+ [11124]: {
12
+ MarketplaceV3: "0x2dA4Dd326A6482679547071be21f74685d730504",
13
+ },
14
+ [37111]: {
15
+ MarketplaceV3: "0x56Abb6a3f25DCcdaDa106191053b1CC54C196DEE",
16
+ },
17
+ };
18
+
19
+ export const ZKSYNC_WETH: Record<number, string> = {
20
+ [300]: "0x0462C05457Fed440740Ff3696bDd2D0577411e34",
21
+ [324]: "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91",
22
+ [11124]: "0x9EDCde0257F2386Ce177C3a7FCdd97787F0D841d",
23
+ [37111]: "0xaA91D645D7a6C1aeaa5988e0547267B77d33fe16",
24
+ };
@@ -1,8 +1,12 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { CLEAN_ANVIL_CHAIN } from "../../../test/src/chains.js";
3
3
  import { TEST_CLIENT } from "../../../test/src/test-clients.js";
4
+ import { defineChain } from "../../chains/utils.js";
4
5
  import { fetchPublishedContractMetadata } from "../../contract/deployment/publisher.js";
5
- import { getRequiredTransactions } from "./get-required-transactions.js";
6
+ import {
7
+ getAllDefaultConstructorParamsForImplementation,
8
+ getRequiredTransactions,
9
+ } from "./get-required-transactions.js";
6
10
 
7
11
  describe.runIf(process.env.TW_SECRET_KEY)(
8
12
  "getRequiredTransactions",
@@ -59,5 +63,14 @@ describe.runIf(process.env.TW_SECRET_KEY)(
59
63
  });
60
64
  expect(results.length).toBe(7);
61
65
  });
66
+
67
+ it("should return default constructor params for zksync chains", async () => {
68
+ const params = await getAllDefaultConstructorParamsForImplementation({
69
+ chain: defineChain(300),
70
+ client: TEST_CLIENT,
71
+ });
72
+
73
+ expect(params.nativeTokenWrapper).toBeDefined();
74
+ });
62
75
  },
63
76
  );
@@ -3,6 +3,7 @@ import type { ThirdwebClient } from "../../client/client.js";
3
3
  import { getDeployedCreate2Factory } from "../../contract/deployment/utils/create-2-factory.js";
4
4
  import { getDeployedInfraContract } from "../../contract/deployment/utils/infra.js";
5
5
  import { getDeployedInfraContractFromMetadata } from "../../contract/deployment/utils/infra.js";
6
+ import { ZKSYNC_WETH } from "../../contract/deployment/zksync/implementations.js";
6
7
  import { computePublishedContractAddress } from "../../utils/any-evm/compute-published-contract-address.js";
7
8
  import type { FetchDeployMetadataResult } from "../../utils/any-evm/deploy-metadata.js";
8
9
  import { isZkSyncChain } from "../../utils/any-evm/zksync/isZkSyncChain.js";
@@ -227,8 +228,11 @@ export async function getAllDefaultConstructorParamsForImplementation(args: {
227
228
  const { chain, client } = args;
228
229
  const isZkSync = await isZkSyncChain(chain);
229
230
  if (isZkSync) {
230
- // zksync contracts dont need these implementation constructor params
231
- return {};
231
+ const weth = ZKSYNC_WETH[chain.id];
232
+
233
+ return {
234
+ nativeTokenWrapper: weth,
235
+ };
232
236
  }
233
237
  const [forwarder, weth] = await Promise.all([
234
238
  computePublishedContractAddress({
@@ -0,0 +1,51 @@
1
+ import { renderHook } from "@testing-library/react";
2
+ import type { ReactNode } from "react";
3
+ import { optimism } from "thirdweb/chains";
4
+ import { describe, expect, it, vi } from "vitest";
5
+ import { MockStorage } from "../../../../../test/src/mocks/storage.js";
6
+ import { TEST_CLIENT } from "../../../../../test/src/test-clients.js";
7
+ import { TEST_ACCOUNT_A } from "../../../../../test/src/test-wallets.js";
8
+ import { createWalletAdapter } from "../../../../adapters/wallet-adapter.js";
9
+ import { ethereum } from "../../../../chains/chain-definitions/ethereum.js";
10
+ import { createConnectionManager } from "../../../../wallets/manager/index.js";
11
+ import { ConnectionManagerCtx } from "../../providers/connection-manager.js";
12
+ import { useSetActiveWallet } from "./useSetActiveWallet.js";
13
+ import { useSwitchActiveWalletChain } from "./useSwitchActiveWalletChain.js";
14
+
15
+ const switchChain = vi.fn();
16
+ describe("useSwitchActiveWalletChain", () => {
17
+ // Mock the connection manager
18
+ const mockStorage = new MockStorage();
19
+ const manager = createConnectionManager(mockStorage);
20
+
21
+ // Create a wrapper component with the mocked context
22
+ const wrapper = ({ children }: { children: ReactNode }) => {
23
+ return (
24
+ <ConnectionManagerCtx.Provider value={manager}>
25
+ {children}
26
+ </ConnectionManagerCtx.Provider>
27
+ );
28
+ };
29
+
30
+ const wallet = createWalletAdapter({
31
+ adaptedAccount: TEST_ACCOUNT_A,
32
+ client: TEST_CLIENT,
33
+ chain: ethereum,
34
+ onDisconnect: () => {},
35
+ switchChain,
36
+ });
37
+
38
+ it("should switch the active wallet chain", async () => {
39
+ const { result } = renderHook(() => useSetActiveWallet(), { wrapper });
40
+ await result.current(wallet);
41
+ const { result: switchChainResult } = renderHook(
42
+ () => useSwitchActiveWalletChain(),
43
+ {
44
+ wrapper,
45
+ },
46
+ );
47
+ await switchChainResult.current(optimism);
48
+
49
+ expect(switchChain).toHaveBeenCalledWith(optimism);
50
+ });
51
+ });
@@ -0,0 +1,11 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { renderHook } from "~test/react-render.js";
3
+ import { useConnectionManager } from "./connection-manager.js";
4
+
5
+ describe("useConnectionManager", () => {
6
+ it("throws an error when used outside of ThirdwebProvider", () => {
7
+ expect(() => {
8
+ renderHook(() => useConnectionManager());
9
+ }).toThrow("useConnectionManager must be used within <ThirdwebProvider>");
10
+ });
11
+ });
@@ -0,0 +1,19 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { ANVIL_CHAIN } from "~test/chains.js";
3
+ import { createWallet } from "../../../wallets/create-wallet.js";
4
+ import { hasSmartAccount } from "./isSmartWallet.js";
5
+
6
+ describe("isSmartWallet", () => {
7
+ it("should work if id is inApp and has smartAccount in wallet config", () => {
8
+ const wallet = createWallet("inApp", {
9
+ smartAccount: {
10
+ chain: ANVIL_CHAIN,
11
+ sponsorGas: true,
12
+ overrides: {
13
+ bundlerUrl: "your-bundler-url",
14
+ },
15
+ },
16
+ });
17
+ expect(hasSmartAccount(wallet)).toBe(true);
18
+ });
19
+ });
@@ -0,0 +1,57 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import type { AsyncStorage } from "../../../utils/storage/AsyncStorage.js";
3
+ import type { AuthArgsType } from "../../../wallets/in-app/core/authentication/types.js";
4
+ import {
5
+ LAST_AUTH_PROVIDER_STORAGE_KEY,
6
+ getLastAuthProvider,
7
+ setLastAuthProvider,
8
+ } from "./storage.js";
9
+
10
+ describe("Auth Provider Storage", () => {
11
+ let mockStorage: AsyncStorage;
12
+
13
+ beforeEach(() => {
14
+ mockStorage = {
15
+ getItem: vi.fn(),
16
+ setItem: vi.fn(),
17
+ removeItem: vi.fn(),
18
+ };
19
+ });
20
+
21
+ describe("setLastAuthProvider", () => {
22
+ it("should store the auth provider in storage", async () => {
23
+ const authProvider: AuthArgsType["strategy"] = "email";
24
+ await setLastAuthProvider(authProvider, mockStorage);
25
+
26
+ expect(mockStorage.setItem).toHaveBeenCalledWith(
27
+ LAST_AUTH_PROVIDER_STORAGE_KEY,
28
+ authProvider,
29
+ );
30
+ });
31
+ });
32
+
33
+ describe("getLastAuthProvider", () => {
34
+ it("should retrieve the last auth provider from storage", async () => {
35
+ const mockAuthProvider: AuthArgsType["strategy"] = "google";
36
+ vi.mocked(mockStorage.getItem).mockResolvedValue(mockAuthProvider);
37
+
38
+ const result = await getLastAuthProvider(mockStorage);
39
+
40
+ expect(mockStorage.getItem).toHaveBeenCalledWith(
41
+ LAST_AUTH_PROVIDER_STORAGE_KEY,
42
+ );
43
+ expect(result).toBe(mockAuthProvider);
44
+ });
45
+
46
+ it("should return null if no auth provider is stored", async () => {
47
+ vi.mocked(mockStorage.getItem).mockResolvedValue(null);
48
+
49
+ const result = await getLastAuthProvider(mockStorage);
50
+
51
+ expect(mockStorage.getItem).toHaveBeenCalledWith(
52
+ LAST_AUTH_PROVIDER_STORAGE_KEY,
53
+ );
54
+ expect(result).toBeNull();
55
+ });
56
+ });
57
+ });
@@ -0,0 +1,55 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { structuralSharing } from "./structuralSharing.js";
3
+
4
+ describe("structuralSharing", () => {
5
+ it("should return the old data if it is deeply equal to the new data", () => {
6
+ const oldData = { a: 1, b: { c: 2 } };
7
+ const newData = { a: 1, b: { c: 2 } };
8
+ const result = structuralSharing(oldData, newData);
9
+ expect(result).toBe(oldData);
10
+ });
11
+
12
+ it("should return a new object with shared structure for equal parts", () => {
13
+ const oldData = { a: 1, b: { c: 2 }, d: 3 };
14
+ const newData = { a: 1, b: { c: 2 }, d: 4 };
15
+ const result = structuralSharing(oldData, newData);
16
+ expect(result).not.toBe(oldData);
17
+ expect(result).not.toBe(newData);
18
+ expect(result.a).toBe(oldData.a);
19
+ expect(result.b).toBe(oldData.b);
20
+ expect(result.d).toBe(newData.d);
21
+ });
22
+
23
+ it("should handle arrays correctly", () => {
24
+ const oldData = [1, 2, [3, 4]];
25
+ const newData = [1, 2, [3, 5]];
26
+ const result = structuralSharing(oldData, newData);
27
+ expect(result).not.toBe(oldData);
28
+ expect(result).not.toBe(newData);
29
+ expect(result[0]).toBe(oldData[0]);
30
+ expect(result[1]).toBe(oldData[1]);
31
+ expect(result[2]).not.toBe(oldData[2]);
32
+ });
33
+
34
+ it("should handle undefined oldData", () => {
35
+ const oldData = undefined;
36
+ const newData = { a: 1 };
37
+ const result = structuralSharing(oldData, newData);
38
+ expect(result).toBe(newData);
39
+ });
40
+
41
+ it("should handle NaN values correctly", () => {
42
+ const oldData = { a: Number.NaN };
43
+ const newData = { a: Number.NaN };
44
+ const result = structuralSharing(oldData, newData);
45
+ expect(result).toBe(oldData);
46
+ });
47
+
48
+ it("should handle objects with different constructors", () => {
49
+ class CustomClass {}
50
+ const oldData = new CustomClass();
51
+ const newData = { a: 1 };
52
+ const result = structuralSharing(oldData, newData);
53
+ expect(result).toBe(newData);
54
+ });
55
+ });
@@ -0,0 +1,81 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { genericWalletIcon, getSocialIcon, socialIcons } from "./walletIcon.js";
3
+
4
+ const emailIcon =
5
+ "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjMzMzUgMi42NjY1SDIuNjY2ODNDMS45MzA0NSAyLjY2NjUgMS4zMzM1IDMuMjYzNDYgMS4zMzM1IDMuOTk5ODRWMTEuOTk5OEMxLjMzMzUgMTIuNzM2MiAxLjkzMDQ1IDEzLjMzMzIgMi42NjY4MyAxMy4zMzMySDEzLjMzMzVDMTQuMDY5OSAxMy4zMzMyIDE0LjY2NjggMTIuNzM2MiAxNC42NjY4IDExLjk5OThWMy45OTk4NEMxNC42NjY4IDMuMjYzNDYgMTQuMDY5OSAyLjY2NjUgMTMuMzMzNSAyLjY2NjVaIiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQuNjY2OCA0LjY2NjVMOC42ODY4MyA4LjQ2NjVDOC40ODEwMSA4LjU5NTQ1IDguMjQzMDQgOC42NjM4NCA4LjAwMDE2IDguNjYzODRDNy43NTcyOCA4LjY2Mzg0IDcuNTE5MzEgOC41OTU0NSA3LjMxMzUgOC40NjY1TDEuMzMzNSA0LjY2NjUiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=";
6
+ const phoneIcon =
7
+ "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzU2MzlfNjMyKSI+CjxwYXRoIGQ9Ik0xNC42NjY5IDExLjI4MDJWMTMuMjgwMkMxNC42Njc3IDEzLjQ2NTkgMTQuNjI5NyAxMy42NDk3IDE0LjU1NTMgMTMuODE5OEMxNC40ODA5IDEzLjk4OTkgMTQuMzcxOCAxNC4xNDI2IDE0LjIzNSAxNC4yNjgxQzE0LjA5ODIgMTQuMzkzNyAxMy45MzY3IDE0LjQ4OTIgMTMuNzYwOCAxNC41NDg3QzEzLjU4NDkgMTQuNjA4MiAxMy4zOTg1IDE0LjYzMDMgMTMuMjEzNiAxNC42MTM2QzExLjE2MjIgMTQuMzkwNyA5LjE5MTYxIDEzLjY4OTcgNy40NjAyOCAxMi41NjY5QzUuODQ5NSAxMS41NDMzIDQuNDgzODQgMTAuMTc3NyAzLjQ2MDI4IDguNTY2ODlDMi4zMzM2IDYuODI3NyAxLjYzMjQ0IDQuODQ3NTYgMS40MTM2MSAyLjc4Njg5QzEuMzk2OTUgMi42MDI1NCAxLjQxODg2IDIuNDE2NzMgMS40Nzc5NSAyLjI0MTMxQzEuNTM3MDMgMi4wNjU4OSAxLjYzMTk5IDEuOTA0NjkgMS43NTY3OSAxLjc2Nzk3QzEuODgxNTkgMS42MzEyNiAyLjAzMzQ4IDEuNTIyMDMgMi4yMDI4MSAxLjQ0NzI0QzIuMzcyMTMgMS4zNzI0NSAyLjU1NTE3IDEuMzMzNzQgMi43NDAyOCAxLjMzMzU2SDQuNzQwMjhDNS4wNjM4MiAxLjMzMDM4IDUuMzc3NDggMS40NDQ5NSA1LjYyMjc5IDEuNjU1OTJDNS44NjgxIDEuODY2ODkgNi4wMjgzMyAyLjE1OTg2IDYuMDczNjEgMi40ODAyM0M2LjE1ODAzIDMuMTIwMjcgNi4zMTQ1OCAzLjc0ODcxIDYuNTQwMjggNC4zNTM1NkM2LjYyOTk4IDQuNTkyMTggNi42NDkzOSA0Ljg1MTUgNi41OTYyMiA1LjEwMDgxQzYuNTQzMDUgNS4zNTAxMiA2LjQxOTUyIDUuNTc4OTcgNi4yNDAyOCA1Ljc2MDIzTDUuMzkzNjEgNi42MDY4OUM2LjM0MjY1IDguMjc1OTIgNy43MjQ1OCA5LjY1Nzg2IDkuMzkzNjEgMTAuNjA2OUwxMC4yNDAzIDkuNzYwMjNDMTAuNDIxNSA5LjU4MDk5IDEwLjY1MDQgOS40NTc0NiAxMC44OTk3IDkuNDA0MjlDMTEuMTQ5IDkuMzUxMTIgMTEuNDA4MyA5LjM3MDUzIDExLjY0NjkgOS40NjAyM0MxMi4yNTE4IDkuNjg1OTMgMTIuODgwMiA5Ljg0MjQ4IDEzLjUyMDMgOS45MjY4OUMxMy44NDQxIDkuOTcyNTggMTQuMTM5OSAxMC4xMzU3IDE0LjM1MTMgMTAuMzg1MkMxNC41NjI3IDEwLjYzNDggMTQuNjc1MSAxMC45NTMzIDE0LjY2NjkgMTEuMjgwMloiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF81NjM5XzYzMiI+CjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K";
8
+ const guestIcon =
9
+ "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE5IDIxVjE5QzE5IDE3LjkzOTEgMTguNTc4NiAxNi45MjE3IDE3LjgyODQgMTYuMTcxNkMxNy4wNzgzIDE1LjQyMTQgMTYuMDYwOSAxNSAxNSAxNUg5QzcuOTM5MTMgMTUgNi45MjE3MiAxNS40MjE0IDYuMTcxNTcgMTYuMTcxNkM1LjQyMTQzIDE2LjkyMTcgNSAxNy45MzkxIDUgMTlWMjEiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEyIDExQzE0LjIwOTEgMTEgMTYgOS4yMDkxNCAxNiA3QzE2IDQuNzkwODYgMTQuMjA5MSAzIDEyIDNDOS43OTA4NiAzIDggNC43OTA4NiA4IDdDOCA5LjIwOTE0IDkuNzkwODYgMTEgMTIgMTFaIiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=";
10
+ const passkeyIcon =
11
+ "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzU2MzlfMzIpIj4KPHBhdGggZD0iTTcuOTk5NTkgNi42NjY1QzcuNjQ1OTYgNi42NjY1IDcuMzA2ODMgNi44MDY5OCA3LjA1Njc4IDcuMDU3MDNDNi44MDY3MyA3LjMwNzA4IDYuNjY2MjUgNy42NDYyMiA2LjY2NjI1IDcuOTk5ODRDNi42NjYyNSA4LjY3OTg0IDYuNTk5NTkgOS42NzMxNyA2LjQ5MjkyIDEwLjY2NjUiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjI1NDkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOS4zMzI5MyA4Ljc0NjU4QzkuMzMyOTMgMTAuMzMzMiA5LjMzMjkzIDEyLjk5OTkgOC42NjYyNiAxNC42NjY2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExLjUyNzMgMTQuMDEzM0MxMS42MDczIDEzLjYxMzMgMTEuODE0IDEyLjQ4IDExLjg2MDcgMTIiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLXdpZHRoPSIxLjI1NDkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMS4zMzM5OCA4LjAwMDE2QzEuMzMzOTggNi42MDA5NSAxLjc3NDIzIDUuMjM3MiAyLjU5MjM3IDQuMTAyMDlDMy40MTA1MSAyLjk2Njk5IDQuNTY1MDUgMi4xMTgwOCA1Ljg5MjQ3IDEuNjc1NjFDNy4yMTk4OCAxLjIzMzE0IDguNjUyODYgMS4yMTk1NCA5Ljk4ODQ0IDEuNjM2NzRDMTEuMzI0IDIuMDUzOTQgMTIuNDk0NSAyLjg4MDc5IDEzLjMzNCA0LjAwMDE2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEuMzMzOTggMTAuNjY2NUgxLjMzOTE0IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE0LjUzMjcgMTAuNjY2NUMxNC42NjYgOS4zMzMxNyAxNC42MiA3LjA5NzE3IDE0LjUzMjcgNi42NjY1IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMuMzMzOTggMTIuOTk5OEMzLjY2NzMyIDExLjk5OTggNC4wMDA2NSA5Ljk5OTg0IDQuMDAwNjUgNy45OTk4NEMzLjk5OTk4IDcuNTQ1NzUgNC4wNzY2MyA3LjA5NDg2IDQuMjI3MzIgNi42NjY1IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTUuNzY3MDkgMTQuNjY2OEM1LjkwNzA5IDE0LjIyNjggNi4wNjcwOSAxMy43ODY4IDYuMTQ3MDkgMTMuMzMzNSIgc3Ryb2tlPSIjMzM4NUZGIiBzdHJva2Utd2lkdGg9IjEuMjU0OSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik02IDQuNTMzNDZDNi42MDgyNyA0LjE4MjI4IDcuMjk4MjggMy45OTc0NSA4LjAwMDY0IDMuOTk3NTZDOC43MDMwMSAzLjk5NzY3IDkuMzkyOTYgNC4xODI3MiAxMC4wMDExIDQuNTM0MUMxMC42MDkzIDQuODg1NDggMTEuMTE0MiA1LjM5MDc5IDExLjQ2NTEgNS45OTkyM0MxMS44MTYgNi42MDc2NiAxMi4wMDA1IDcuMjk3NzYgMTIgOC4wMDAxMlY5LjMzMzQ2IiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS13aWR0aD0iMS4yNTQ5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF81NjM5XzMyIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=";
12
+
13
+ describe("walletIcon", () => {
14
+ it("should return google icon", () => {
15
+ expect(getSocialIcon("google")).toBe(socialIcons.google);
16
+ });
17
+
18
+ it("should return coinbase icon", () => {
19
+ expect(getSocialIcon("coinbase")).toBe(socialIcons.coinbase);
20
+ });
21
+
22
+ it("should return apple icon", () => {
23
+ expect(getSocialIcon("apple")).toBe(socialIcons.apple);
24
+ });
25
+
26
+ it("should return facebook icon", () => {
27
+ expect(getSocialIcon("facebook")).toBe(socialIcons.facebook);
28
+ });
29
+
30
+ it("should return phone icon", () => {
31
+ expect(getSocialIcon("phone")).toBe(phoneIcon);
32
+ });
33
+
34
+ it("should return email icon", () => {
35
+ expect(getSocialIcon("email")).toBe(emailIcon);
36
+ });
37
+
38
+ it("should return passkey icon", () => {
39
+ expect(getSocialIcon("passkey")).toBe(passkeyIcon);
40
+ });
41
+
42
+ it("should return discord icon", () => {
43
+ expect(getSocialIcon("discord")).toBe(socialIcons.discord);
44
+ });
45
+
46
+ it("should return line icon", () => {
47
+ expect(getSocialIcon("line")).toBe(socialIcons.line);
48
+ });
49
+
50
+ it("should return x icon", () => {
51
+ expect(getSocialIcon("x")).toBe(socialIcons.x);
52
+ });
53
+
54
+ it("should return farcaster icon", () => {
55
+ expect(getSocialIcon("farcaster")).toBe(socialIcons.farcaster);
56
+ });
57
+
58
+ it("should return telegram icon", () => {
59
+ expect(getSocialIcon("telegram")).toBe(socialIcons.telegram);
60
+ });
61
+
62
+ it("should return twitch icon", () => {
63
+ expect(getSocialIcon("twitch")).toBe(socialIcons.twitch);
64
+ });
65
+
66
+ it("should return github icon", () => {
67
+ expect(getSocialIcon("github")).toBe(socialIcons.github);
68
+ });
69
+
70
+ it("should return steam icon", () => {
71
+ expect(getSocialIcon("steam")).toBe(socialIcons.steam);
72
+ });
73
+
74
+ it("should return guest icon", () => {
75
+ expect(getSocialIcon("guest")).toBe(guestIcon);
76
+ });
77
+
78
+ it("should return generic wallet icon for unknown provider", () => {
79
+ expect(getSocialIcon("unknown")).toBe(genericWalletIcon);
80
+ });
81
+ });