thirdweb 5.32.2 → 5.33.0

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 (126) hide show
  1. package/dist/cjs/auth/constants.js +30 -0
  2. package/dist/cjs/auth/constants.js.map +1 -0
  3. package/dist/cjs/auth/core/verify-jwt.js +2 -2
  4. package/dist/cjs/auth/core/verify-jwt.js.map +1 -1
  5. package/dist/cjs/auth/core/verify-login-payload.js +2 -2
  6. package/dist/cjs/auth/core/verify-login-payload.js.map +1 -1
  7. package/dist/cjs/auth/is-erc6492-signature.js +25 -0
  8. package/dist/cjs/auth/is-erc6492-signature.js.map +1 -0
  9. package/dist/cjs/auth/parse-erc6492-signature.js +28 -0
  10. package/dist/cjs/auth/parse-erc6492-signature.js.map +1 -0
  11. package/dist/cjs/auth/serialize-erc6492-signature.js +36 -0
  12. package/dist/cjs/auth/serialize-erc6492-signature.js.map +1 -0
  13. package/dist/cjs/auth/types.js +3 -0
  14. package/dist/cjs/auth/types.js.map +1 -0
  15. package/dist/cjs/auth/verify-signature.js +196 -0
  16. package/dist/cjs/auth/verify-signature.js.map +1 -0
  17. package/dist/cjs/exports/auth.js +11 -5
  18. package/dist/cjs/exports/auth.js.map +1 -1
  19. package/dist/cjs/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js +3 -0
  20. package/dist/cjs/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js.map +1 -1
  21. package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js +0 -1
  22. package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js.map +1 -1
  23. package/dist/cjs/react/web/ui/ConnectWallet/WalletSelector.js +3 -0
  24. package/dist/cjs/react/web/ui/ConnectWallet/WalletSelector.js.map +1 -1
  25. package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js +19 -26
  26. package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
  27. package/dist/cjs/react/web/ui/MediaRenderer/ModelViewer.js +2 -2
  28. package/dist/cjs/react/web/ui/MediaRenderer/ModelViewer.js.map +1 -1
  29. package/dist/cjs/version.js +1 -1
  30. package/dist/cjs/wallets/coinbase/coinbaseWebSDK.js +2 -2
  31. package/dist/cjs/wallets/coinbase/coinbaseWebSDK.js.map +1 -1
  32. package/dist/cjs/wallets/injected/index.js +2 -2
  33. package/dist/cjs/wallets/injected/index.js.map +1 -1
  34. package/dist/cjs/wallets/smart/index.js +0 -1
  35. package/dist/cjs/wallets/smart/index.js.map +1 -1
  36. package/dist/esm/auth/constants.js +27 -0
  37. package/dist/esm/auth/constants.js.map +1 -0
  38. package/dist/esm/auth/core/verify-jwt.js +1 -1
  39. package/dist/esm/auth/core/verify-jwt.js.map +1 -1
  40. package/dist/esm/auth/core/verify-login-payload.js +1 -1
  41. package/dist/esm/auth/core/verify-login-payload.js.map +1 -1
  42. package/dist/esm/auth/is-erc6492-signature.js +22 -0
  43. package/dist/esm/auth/is-erc6492-signature.js.map +1 -0
  44. package/dist/esm/auth/parse-erc6492-signature.js +25 -0
  45. package/dist/esm/auth/parse-erc6492-signature.js.map +1 -0
  46. package/dist/esm/auth/serialize-erc6492-signature.js +33 -0
  47. package/dist/esm/auth/serialize-erc6492-signature.js.map +1 -0
  48. package/dist/esm/auth/types.js +2 -0
  49. package/dist/esm/auth/types.js.map +1 -0
  50. package/dist/esm/auth/verify-signature.js +191 -0
  51. package/dist/esm/auth/verify-signature.js.map +1 -0
  52. package/dist/esm/exports/auth.js +4 -1
  53. package/dist/esm/exports/auth.js.map +1 -1
  54. package/dist/esm/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js +3 -0
  55. package/dist/esm/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js.map +1 -1
  56. package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js +0 -1
  57. package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js.map +1 -1
  58. package/dist/esm/react/web/ui/ConnectWallet/WalletSelector.js +3 -0
  59. package/dist/esm/react/web/ui/ConnectWallet/WalletSelector.js.map +1 -1
  60. package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js +19 -26
  61. package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
  62. package/dist/esm/react/web/ui/MediaRenderer/ModelViewer.js +2 -2
  63. package/dist/esm/react/web/ui/MediaRenderer/ModelViewer.js.map +1 -1
  64. package/dist/esm/version.js +1 -1
  65. package/dist/esm/wallets/coinbase/coinbaseWebSDK.js +2 -2
  66. package/dist/esm/wallets/coinbase/coinbaseWebSDK.js.map +1 -1
  67. package/dist/esm/wallets/injected/index.js +2 -2
  68. package/dist/esm/wallets/injected/index.js.map +1 -1
  69. package/dist/esm/wallets/smart/index.js +0 -1
  70. package/dist/esm/wallets/smart/index.js.map +1 -1
  71. package/dist/types/auth/constants.d.ts +20 -0
  72. package/dist/types/auth/constants.d.ts.map +1 -0
  73. package/dist/types/auth/is-erc6492-signature.d.ts +19 -0
  74. package/dist/types/auth/is-erc6492-signature.d.ts.map +1 -0
  75. package/dist/types/auth/parse-erc6492-signature.d.ts +24 -0
  76. package/dist/types/auth/parse-erc6492-signature.d.ts.map +1 -0
  77. package/dist/types/auth/serialize-erc6492-signature.d.ts +27 -0
  78. package/dist/types/auth/serialize-erc6492-signature.d.ts.map +1 -0
  79. package/dist/types/auth/types.d.ts +7 -0
  80. package/dist/types/auth/types.d.ts.map +1 -0
  81. package/dist/types/auth/verify-signature.d.ts +70 -0
  82. package/dist/types/auth/verify-signature.d.ts.map +1 -0
  83. package/dist/types/exports/auth.d.ts +5 -1
  84. package/dist/types/exports/auth.d.ts.map +1 -1
  85. package/dist/types/react/web/ui/ConnectWallet/Modal/AllWalletsUI.d.ts.map +1 -1
  86. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalContent.d.ts.map +1 -1
  87. package/dist/types/react/web/ui/ConnectWallet/WalletSelector.d.ts.map +1 -1
  88. package/dist/types/react/web/ui/MediaRenderer/MediaRenderer.d.ts.map +1 -1
  89. package/dist/types/react/web/ui/MediaRenderer/ModelViewer.d.ts +1 -1
  90. package/dist/types/react/web/ui/MediaRenderer/ModelViewer.d.ts.map +1 -1
  91. package/dist/types/react/web/ui/MediaRenderer/types.d.ts +0 -2
  92. package/dist/types/react/web/ui/MediaRenderer/types.d.ts.map +1 -1
  93. package/dist/types/version.d.ts +1 -1
  94. package/package.json +1 -1
  95. package/src/auth/constants.ts +30 -0
  96. package/src/auth/core/verify-jwt.ts +1 -1
  97. package/src/auth/core/verify-login-payload.ts +1 -1
  98. package/src/auth/is-erc6492-signature.test.ts +26 -0
  99. package/src/auth/is-erc6492-signature.ts +23 -0
  100. package/src/auth/parse-erc6492-signature.test.ts +30 -0
  101. package/src/auth/parse-erc6492-signature.ts +38 -0
  102. package/src/auth/serialize-erc6492-signature.test.ts +23 -0
  103. package/src/auth/serialize-erc6492-signature.ts +42 -0
  104. package/src/auth/types.ts +7 -0
  105. package/src/auth/verify-signature.test.ts +97 -0
  106. package/src/auth/verify-signature.ts +245 -0
  107. package/src/exports/auth.ts +9 -1
  108. package/src/react/web/ui/ConnectWallet/Modal/AllWalletsUI.tsx +3 -0
  109. package/src/react/web/ui/ConnectWallet/Modal/ConnectModalContent.tsx +0 -1
  110. package/src/react/web/ui/ConnectWallet/WalletSelector.tsx +3 -1
  111. package/src/react/web/ui/MediaRenderer/MediaRenderer.tsx +151 -111
  112. package/src/react/web/ui/MediaRenderer/ModelViewer.tsx +5 -5
  113. package/src/react/web/ui/MediaRenderer/types.ts +0 -3
  114. package/src/version.ts +1 -1
  115. package/src/wallets/coinbase/coinbaseWebSDK.ts +2 -2
  116. package/src/wallets/injected/index.ts +2 -2
  117. package/src/wallets/smart/index.ts +0 -3
  118. package/src/wallets/smart/smart-wallet-integration.test.ts +1 -1
  119. package/dist/cjs/auth/verifySignature.js +0 -137
  120. package/dist/cjs/auth/verifySignature.js.map +0 -1
  121. package/dist/esm/auth/verifySignature.js +0 -132
  122. package/dist/esm/auth/verifySignature.js.map +0 -1
  123. package/dist/types/auth/verifySignature.d.ts +0 -53
  124. package/dist/types/auth/verifySignature.d.ts.map +0 -1
  125. package/src/auth/verifySignature.test.ts +0 -53
  126. package/src/auth/verifySignature.ts +0 -166
@@ -17,6 +17,7 @@ import {
17
17
  spacing,
18
18
  } from "../../../core/design-system/index.js";
19
19
  import { genericWalletIcon } from "../../../core/utils/socialIcons.js";
20
+ import { useSetSelectionData } from "../../providers/wallet-ui-states-provider.js";
20
21
  import { sortWallets } from "../../utils/sortWallets.js";
21
22
  import { LoadingScreen } from "../../wallets/shared/LoadingScreen.js";
22
23
  import { Img } from "../components/Img.js";
@@ -580,7 +581,7 @@ const WalletSelection: React.FC<{
580
581
  }> = (props) => {
581
582
  const wallets = sortWallets(props.wallets, props.recommendedWallets);
582
583
  const { screen } = useScreenContext();
583
-
584
+ const setSelectionData = useSetSelectionData();
584
585
  return (
585
586
  <WalletList
586
587
  style={{
@@ -614,6 +615,7 @@ const WalletSelection: React.FC<{
614
615
  <WalletEntryButton
615
616
  walletId={wallet.id}
616
617
  selectWallet={() => {
618
+ setSelectionData({});
617
619
  props.selectWallet(wallet);
618
620
  }}
619
621
  connectLocale={props.connectLocale}
@@ -60,16 +60,14 @@ export const MediaRenderer = /* @__PURE__ */ (() =>
60
60
  height = "300px",
61
61
  style,
62
62
  mimeType,
63
- ...restProps
63
+ client,
64
+ controls,
65
+ className,
64
66
  },
65
67
  ref,
66
68
  ) {
67
- const client = restProps.client;
68
-
69
69
  const mergedStyle: React.CSSProperties = {
70
70
  objectFit: "contain",
71
- width,
72
- height,
73
71
  ...style,
74
72
  };
75
73
 
@@ -99,8 +97,10 @@ export const MediaRenderer = /* @__PURE__ */ (() =>
99
97
  style={mergedStyle}
100
98
  src={mediaInfo.url}
101
99
  poster={possiblePosterSrc.url}
100
+ ref={ref as unknown as React.ForwardedRef<HTMLIFrameElement>}
102
101
  requireInteraction={requireInteraction}
103
- {...restProps}
102
+ className={className}
103
+ alt={alt}
104
104
  />
105
105
  );
106
106
  }
@@ -111,13 +111,12 @@ export const MediaRenderer = /* @__PURE__ */ (() =>
111
111
  <Suspense
112
112
  fallback={
113
113
  poster ? (
114
- // biome-ignore lint/a11y/useAltText: alt is there
115
114
  <img
116
115
  style={mergedStyle}
117
116
  src={poster}
118
117
  alt={alt}
119
118
  ref={ref as unknown as React.LegacyRef<HTMLImageElement>}
120
- {...restProps}
119
+ className={className}
121
120
  />
122
121
  ) : null
123
122
  }
@@ -127,7 +126,7 @@ export const MediaRenderer = /* @__PURE__ */ (() =>
127
126
  src={mediaInfo.url || ""}
128
127
  poster={poster}
129
128
  alt={alt}
130
- {...restProps}
129
+ className={className}
131
130
  />
132
131
  </Suspense>
133
132
  );
@@ -139,9 +138,11 @@ export const MediaRenderer = /* @__PURE__ */ (() =>
139
138
  <VideoPlayer
140
139
  style={mergedStyle}
141
140
  src={mediaInfo.url}
141
+ ref={ref as unknown as React.ForwardedRef<HTMLVideoElement>}
142
142
  poster={possiblePosterSrc.url}
143
143
  requireInteraction={requireInteraction}
144
- {...restProps}
144
+ className={className}
145
+ controls={controls}
145
146
  />
146
147
  );
147
148
  }
@@ -153,8 +154,12 @@ export const MediaRenderer = /* @__PURE__ */ (() =>
153
154
  style={mergedStyle}
154
155
  src={mediaInfo.url}
155
156
  poster={possiblePosterSrc.url}
156
- requireInteraction={requireInteraction}
157
- {...restProps}
157
+ alt={alt}
158
+ ref={ref as unknown as React.ForwardedRef<HTMLAudioElement>}
159
+ className={className}
160
+ height={height}
161
+ width={width}
162
+ controls={controls}
158
163
  />
159
164
  );
160
165
  }
@@ -167,7 +172,9 @@ export const MediaRenderer = /* @__PURE__ */ (() =>
167
172
  src={mediaInfo.url}
168
173
  alt={alt}
169
174
  ref={ref as unknown as React.ForwardedRef<HTMLImageElement>}
170
- {...restProps}
175
+ className={className}
176
+ height={height}
177
+ width={width}
171
178
  />
172
179
  );
173
180
  }
@@ -180,7 +187,7 @@ export const MediaRenderer = /* @__PURE__ */ (() =>
180
187
  src={mediaInfo.url}
181
188
  alt={alt}
182
189
  ref={ref as unknown as React.Ref<HTMLAnchorElement>}
183
- {...restProps}
190
+ className={className}
184
191
  />
185
192
  );
186
193
  },
@@ -242,41 +249,60 @@ const PlayButton: React.FC<PlayButtonProps> = ({ onClick, isPlaying }) => {
242
249
  };
243
250
 
244
251
  const ImageRenderer = /* @__PURE__ */ (() =>
245
- React.forwardRef<HTMLImageElement, MediaRendererProps>(
246
- function Image_Renderer(props, ref) {
247
- const { style, src, alt, ...restProps } = props;
248
- const [error, setError] = useState(false);
249
-
250
- if (error) {
251
- return (
252
- <LinkPlayer
253
- style={style}
254
- src={src}
255
- alt={alt}
256
- ref={ref as unknown as React.Ref<HTMLAnchorElement>}
257
- {...restProps}
258
- />
259
- );
260
- }
252
+ React.forwardRef<
253
+ HTMLImageElement,
254
+ Pick<
255
+ MediaRendererProps,
256
+ "src" | "style" | "alt" | "className" | "height" | "width"
257
+ >
258
+ >(function Image_Renderer(props, ref) {
259
+ const { style, src, alt, className, height, width } = props;
260
+ const [error, setError] = useState(false);
261
261
 
262
+ if (error) {
262
263
  return (
263
- // biome-ignore lint/a11y/useAltText: we do set the alt text
264
- <img
264
+ <LinkPlayer
265
265
  style={style}
266
- src={src ?? undefined}
266
+ src={src}
267
267
  alt={alt}
268
- ref={ref}
269
- {...restProps}
270
- onError={() => {
271
- setError(true);
272
- }}
268
+ ref={ref as unknown as React.Ref<HTMLAnchorElement>}
269
+ className={className}
273
270
  />
274
271
  );
275
- },
276
- ))();
272
+ }
273
+
274
+ return (
275
+ <img
276
+ style={style}
277
+ src={src ?? undefined}
278
+ alt={alt}
279
+ ref={ref}
280
+ className={className}
281
+ height={height}
282
+ width={width}
283
+ onError={() => {
284
+ setError(true);
285
+ }}
286
+ />
287
+ );
288
+ }))();
277
289
 
278
290
  const VideoPlayer = /* @__PURE__ */ (() =>
279
- React.forwardRef<HTMLVideoElement, MediaRendererProps>(function Video_Player(
291
+ React.forwardRef<
292
+ HTMLVideoElement,
293
+ Pick<
294
+ MediaRendererProps,
295
+ | "alt"
296
+ | "src"
297
+ | "poster"
298
+ | "requireInteraction"
299
+ | "style"
300
+ | "width"
301
+ | "height"
302
+ | "controls"
303
+ | "className"
304
+ >
305
+ >(function Video_Player(
280
306
  {
281
307
  src,
282
308
  alt,
@@ -286,7 +312,7 @@ const VideoPlayer = /* @__PURE__ */ (() =>
286
312
  width,
287
313
  height,
288
314
  controls,
289
- ...restProps
315
+ className,
290
316
  },
291
317
  ref,
292
318
  ) {
@@ -321,13 +347,13 @@ const VideoPlayer = /* @__PURE__ */ (() =>
321
347
  src={src}
322
348
  alt={alt}
323
349
  ref={ref as unknown as React.Ref<HTMLAnchorElement>}
324
- {...restProps}
350
+ className={className}
325
351
  />
326
352
  );
327
353
  }
328
354
 
329
355
  return (
330
- <div style={{ position: "relative", ...style }} {...restProps}>
356
+ <div style={{ position: "relative", ...style }} className={className}>
331
357
  <video
332
358
  ref={mergeRefs([videoRef, ref])}
333
359
  src={src ?? undefined}
@@ -389,18 +415,21 @@ const VideoPlayer = /* @__PURE__ */ (() =>
389
415
  }))();
390
416
 
391
417
  const AudioPlayer = /* @__PURE__ */ (() =>
392
- React.forwardRef<HTMLAudioElement, MediaRendererProps>(function Audio_Player(
393
- {
394
- src,
395
- alt,
396
- poster,
397
- style,
398
- height,
399
- width,
400
-
401
- requireInteraction,
402
- ...restProps
403
- },
418
+ React.forwardRef<
419
+ HTMLAudioElement,
420
+ Pick<
421
+ MediaRendererProps,
422
+ | "src"
423
+ | "alt"
424
+ | "poster"
425
+ | "style"
426
+ | "height"
427
+ | "width"
428
+ | "className"
429
+ | "controls"
430
+ >
431
+ >(function Audio_Player(
432
+ { src, alt, poster, style, height, width, className, controls },
404
433
  ref,
405
434
  ) {
406
435
  const audioRef = useRef<HTMLAudioElement>(null);
@@ -426,13 +455,13 @@ const AudioPlayer = /* @__PURE__ */ (() =>
426
455
  src={src}
427
456
  alt={alt}
428
457
  ref={ref as unknown as React.Ref<HTMLAnchorElement>}
429
- {...restProps}
458
+ className={className}
430
459
  />
431
460
  );
432
461
  }
433
462
 
434
463
  return (
435
- <div style={{ position: "relative", ...style }} {...restProps}>
464
+ <div style={{ position: "relative", ...style }} className={className}>
436
465
  {poster ? (
437
466
  <img
438
467
  height={height}
@@ -474,6 +503,7 @@ const AudioPlayer = /* @__PURE__ */ (() =>
474
503
  src={src ?? undefined}
475
504
  loop
476
505
  playsInline
506
+ controls={controls}
477
507
  muted={muted}
478
508
  preload="none"
479
509
  controlsList="nodownload"
@@ -493,69 +523,79 @@ const AudioPlayer = /* @__PURE__ */ (() =>
493
523
  }))();
494
524
 
495
525
  const IframePlayer = /* @__PURE__ */ (() =>
496
- React.forwardRef<HTMLIFrameElement, MediaRendererProps>(
497
- function Iframe_Player(
498
- { src, alt, poster, requireInteraction, style, ...restProps },
499
- ref,
500
- ) {
501
- const [playing, setPlaying] = useState(!requireInteraction);
526
+ React.forwardRef<
527
+ HTMLIFrameElement,
528
+ Omit<
529
+ MediaRendererProps,
530
+ | "client"
531
+ | "gatewayUrl"
532
+ | "mimeType"
533
+ | "controls"
534
+ | "height"
535
+ | "width"
536
+ | "children"
537
+ >
538
+ >(function Iframe_Player(
539
+ { src, alt, poster, requireInteraction, style, ...restProps },
540
+ ref,
541
+ ) {
542
+ const [playing, setPlaying] = useState(!requireInteraction);
502
543
 
503
- return (
504
- <div style={{ position: "relative", ...style }} {...restProps}>
505
- <iframe
506
- title={alt || "thirdweb iframe player"}
507
- src={playing ? src ?? undefined : undefined}
508
- ref={ref}
544
+ return (
545
+ <div style={{ position: "relative", ...style }} {...restProps}>
546
+ <iframe
547
+ title={alt || "thirdweb iframe player"}
548
+ src={playing ? src ?? undefined : undefined}
549
+ ref={ref}
550
+ style={{
551
+ objectFit: "contain",
552
+ zIndex: 1,
553
+ height: "100%",
554
+ width: "100%",
555
+ transition: "opacity .5s",
556
+ opacity: !poster ? 1 : playing ? 1 : 0,
557
+ border: "none",
558
+ }}
559
+ sandbox="allow-scripts"
560
+ allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
561
+ />
562
+ {poster && (
563
+ <img
564
+ src={poster}
509
565
  style={{
510
566
  objectFit: "contain",
511
- zIndex: 1,
512
- height: "100%",
567
+ pointerEvents: "none",
568
+ position: "absolute",
513
569
  width: "100%",
570
+ height: "100%",
571
+ zIndex: 2,
514
572
  transition: "opacity .5s",
515
- opacity: !poster ? 1 : playing ? 1 : 0,
516
- border: "none",
517
- }}
518
- sandbox="allow-scripts"
519
- allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
520
- />
521
- {poster && (
522
- <img
523
- src={poster}
524
- style={{
525
- objectFit: "contain",
526
- pointerEvents: "none",
527
- position: "absolute",
528
- width: "100%",
529
- height: "100%",
530
- zIndex: 2,
531
- transition: "opacity .5s",
532
- opacity: playing ? 0 : 1,
533
- top: 0,
534
- left: 0,
535
- right: 0,
536
- bottom: 0,
537
- }}
538
- alt={alt}
539
- />
540
- )}
541
- <PlayButton
542
- onClick={() => {
543
- setPlaying((prev) => !prev);
573
+ opacity: playing ? 0 : 1,
574
+ top: 0,
575
+ left: 0,
576
+ right: 0,
577
+ bottom: 0,
544
578
  }}
545
- isPlaying={playing}
579
+ alt={alt}
546
580
  />
547
- </div>
548
- );
549
- },
550
- ))();
581
+ )}
582
+ <PlayButton
583
+ onClick={() => {
584
+ setPlaying((prev) => !prev);
585
+ }}
586
+ isPlaying={playing}
587
+ />
588
+ </div>
589
+ );
590
+ }))();
551
591
 
552
592
  const LinkPlayer = /* @__PURE__ */ (() =>
553
- React.forwardRef<HTMLAnchorElement, MediaRendererProps>(function Link_Player(
554
- { src, alt, style, ...restProps },
555
- ref,
556
- ) {
593
+ React.forwardRef<
594
+ HTMLAnchorElement,
595
+ Pick<MediaRendererProps, "src" | "alt" | "style" | "className">
596
+ >(function Link_Player({ src, alt, style, className }, ref) {
557
597
  return (
558
- <div style={{ position: "relative", ...style }} {...restProps}>
598
+ <div style={{ position: "relative", ...style }} className={className}>
559
599
  <div
560
600
  style={{
561
601
  width: "100%",
@@ -12,12 +12,12 @@ declare global {
12
12
  }
13
13
 
14
14
  export const ModelViewer = /* @__PURE__ */ (() =>
15
- React.forwardRef<HTMLDivElement, MediaRendererProps>(function Model_Viewer(
16
- { src, alt, poster, style },
17
- ref,
18
- ) {
15
+ React.forwardRef<
16
+ HTMLDivElement,
17
+ Pick<MediaRendererProps, "src" | "alt" | "poster" | "style" | "className">
18
+ >(function Model_Viewer({ src, alt, poster, style, className }, ref) {
19
19
  return (
20
- <div style={{ ...style }} ref={ref}>
20
+ <div style={{ ...style }} className={className} ref={ref}>
21
21
  {src ? (
22
22
  <model-viewer
23
23
  src={src}
@@ -1,4 +1,3 @@
1
- import type { ReactNode } from "react";
2
1
  import type { ThirdwebClient } from "../../../../client/client.js";
3
2
 
4
3
  /**
@@ -88,8 +87,6 @@ export type MediaRendererProps = {
88
87
  */
89
88
  requireInteraction?: boolean;
90
89
 
91
- children?: ReactNode;
92
-
93
90
  /**
94
91
  * Provide the [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the media if it is known
95
92
  */
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.32.2";
1
+ export const version = "5.33.0";
@@ -373,7 +373,7 @@ function onConnect(
373
373
  await provider.disconnect();
374
374
  }
375
375
 
376
- function onDisconnect() {
376
+ async function onDisconnect() {
377
377
  disconnect();
378
378
  emitter.emit("disconnect", undefined);
379
379
  }
@@ -401,7 +401,7 @@ function onConnect(
401
401
  return [
402
402
  account,
403
403
  chain,
404
- disconnect,
404
+ onDisconnect,
405
405
  (newChain) => switchChainCoinbaseWalletSDK(provider, newChain),
406
406
  ];
407
407
  }
@@ -228,7 +228,7 @@ async function onConnect(
228
228
  provider.removeListener("disconnect", onDisconnect);
229
229
  }
230
230
 
231
- function onDisconnect() {
231
+ async function onDisconnect() {
232
232
  disconnect();
233
233
  emitter.emit("disconnect", undefined);
234
234
  }
@@ -258,7 +258,7 @@ async function onConnect(
258
258
  return [
259
259
  account,
260
260
  chain,
261
- disconnect,
261
+ onDisconnect,
262
262
  (newChain) => switchChain(provider, newChain),
263
263
  ] as const;
264
264
  }
@@ -203,9 +203,6 @@ async function createSmartAccount(
203
203
  ]);
204
204
  const isDeployed = await isContractDeployed(accountContract);
205
205
  if (!isDeployed) {
206
- console.log(
207
- "Account contract not deployed yet. Deploying account before signing message",
208
- );
209
206
  await _deployAccount({
210
207
  options,
211
208
  account,
@@ -1,7 +1,7 @@
1
1
  import { beforeAll, describe, expect, it } from "vitest";
2
2
  import { TEST_CLIENT } from "../../../test/src/test-clients.js";
3
3
  import { typedData } from "../../../test/src/typed-data.js";
4
- import { verifySignature } from "../../auth/verifySignature.js";
4
+ import { verifySignature } from "../../auth/verify-signature.js";
5
5
  import { arbitrumSepolia } from "../../chains/chain-definitions/arbitrum-sepolia.js";
6
6
  import { type ThirdwebContract, getContract } from "../../contract/contract.js";
7
7
  import { parseEventLogs } from "../../event/actions/parse-logs.js";
@@ -1,137 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.verifyEOASignature = verifyEOASignature;
4
- exports.verifyContractWalletSignature = verifyContractWalletSignature;
5
- exports.verifySignature = verifySignature;
6
- const viem_1 = require("viem");
7
- const contract_js_1 = require("../contract/contract.js");
8
- const isValidSignature_js_1 = require("../extensions/erc1271/__generated__/isValidSignature/read/isValidSignature.js");
9
- const hex_js_1 = require("../utils/encoding/hex.js");
10
- const hashMessage_js_1 = require("../utils/hashing/hashMessage.js");
11
- /**
12
- * Verifies the signature of a message using an Ethereum account's EOA (Externally Owned Account).
13
- * @param options - The options for verifying the signature.
14
- * @returns A boolean indicating whether the signature is valid.
15
- * @throws An error if the signature is invalid.
16
- * @example
17
- * ```ts
18
- * import { verifyEOASignature } from 'thirdweb/auth';
19
- *
20
- * const isValid = await verifyEOASignature({
21
- * message: '0x1234567890123456789012345678901234567890',
22
- * signature: '0x1234567890123456789012345678901234567890',
23
- * address: '0x1234567890123456789012345678901234567890',
24
- * });
25
- * ```
26
- * @auth
27
- */
28
- async function verifyEOASignature(options) {
29
- const messageHash = (0, hashMessage_js_1.hashMessage)(options.message);
30
- if (!(0, hex_js_1.isHex)(options.signature)) {
31
- return false;
32
- }
33
- const recoveredAddress = await (0, viem_1.recoverAddress)({
34
- hash: messageHash,
35
- signature: options.signature,
36
- });
37
- if (recoveredAddress.toLowerCase() === options.address.toLowerCase()) {
38
- return true;
39
- }
40
- return false;
41
- }
42
- const EIP1271_MAGICVALUE = "0x1626ba7e";
43
- /**
44
- * Verifies the signature of a contract wallet.
45
- * @param options - The parameters for verifying the signature.
46
- * @returns A boolean indicating whether the signature is valid.
47
- * @throws An error if the signature is invalid.
48
- * @example
49
- * ```ts
50
- * import { verifyContractWalletSignature } from 'thirdweb/auth';
51
- *
52
- * const isValid = await verifyContractWalletSignature({
53
- * message: '0x1234567890123456789012345678901234567890',
54
- * signature: '0x1234567890123456789012345678901234567890',
55
- * address: '0x1234567890123456789012345678901234567890',
56
- * chain: ...,
57
- * client: ...,
58
- * });
59
- * ```
60
- * @auth
61
- */
62
- async function verifyContractWalletSignature(options) {
63
- if (!(0, hex_js_1.isHex)(options.signature)) {
64
- throw new Error("Invalid signature");
65
- }
66
- const contract = (0, contract_js_1.getContract)({
67
- address: options.address,
68
- chain: options.chain,
69
- client: options.client,
70
- });
71
- const messageHash = (0, hashMessage_js_1.hashMessage)(options.message);
72
- const result = await (0, isValidSignature_js_1.isValidSignature)({
73
- contract,
74
- hash: messageHash,
75
- signature: options.signature,
76
- });
77
- return result === EIP1271_MAGICVALUE;
78
- }
79
- /**
80
- * Verifies the signature based on the provided options.
81
- * Handles smart contract wallet signatures and EOA signatures.
82
- * **IMPORTANT: in order to check smart contract signatures, a chain and client must be provided.**
83
- * @param options - The options for signature verification.
84
- * @returns A boolean indicating whether the signature is valid or not.
85
- * @example
86
- * ```ts
87
- * import { verifySignature } from 'thirdweb/auth';
88
- *
89
- * const isValid = await verifySignature({
90
- * message: 'Your message to sign',
91
- * signature: '0x91db0222ec371a8c18d3b187a6d2e77789bffca1b96826ef6b8708e0d4a66c80312fc3ae95b8fbc147265abf539bb6f360152be61a0e1411d7f5771a599e769a1c',
92
- * address: '0xda9C7A86AeE76701FC1c23ae548e8E93Ba3e42A5',
93
- * client: thirdwebClient,
94
- * chain: chain
95
- * });
96
- * ```
97
- * @auth
98
- */
99
- let warningTriggered = false;
100
- async function verifySignature(options) {
101
- try {
102
- const isValidEOASig = await verifyEOASignature(options);
103
- if (isValidEOASig) {
104
- return true;
105
- }
106
- }
107
- catch {
108
- // no-op, we skip to contract signature check
109
- }
110
- if (isVerifyContractWalletSignatureParams(options)) {
111
- try {
112
- return await verifyContractWalletSignature(options);
113
- }
114
- catch {
115
- // no-op we skip to return false
116
- }
117
- }
118
- else if (!warningTriggered) {
119
- // We only trigger this warning once
120
- warningTriggered = true;
121
- console.error(`
122
- Failed to verify EOA signature and no chain or client provided.
123
-
124
- If you mean to use a smart account, please provide a chain and client.
125
- For more information on how to setup a smart account with Auth, see https://portal.thirdweb.com/connect/auth
126
- `);
127
- }
128
- // if we reach here, we have no way to verify the signature
129
- return false;
130
- }
131
- function isVerifyContractWalletSignatureParams(options) {
132
- return ("chain" in options &&
133
- options.chain !== undefined &&
134
- "client" in options &&
135
- options.client !== undefined);
136
- }
137
- //# sourceMappingURL=verifySignature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verifySignature.js","sourceRoot":"","sources":["../../../src/auth/verifySignature.ts"],"names":[],"mappings":";;AAgCA,gDAgBC;AA8BD,sEAsBC;AA2BD,0CA2BC;AA1JD,+BAAsC;AAGtC,yDAAsD;AACtD,uHAAiH;AACjH,qDAAiD;AACjD,oEAA8D;AAS9D;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,UAAU,kBAAkB,CAAC,OAAiC;IACxE,MAAM,WAAW,GAAG,IAAA,4BAAW,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjD,IAAI,CAAC,IAAA,cAAK,EAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,IAAA,qBAAc,EAAC;QAC5C,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,IAAI,gBAAgB,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AASD,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,UAAU,6BAA6B,CACjD,OAA4C;IAE5C,IAAI,CAAC,IAAA,cAAK,EAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,yBAAW,EAAC;QAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAA,4BAAW,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,MAAM,IAAA,sCAAgB,EAAC;QACpC,QAAQ;QACR,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,OAAO,MAAM,KAAK,kBAAkB,CAAC;AACvC,CAAC;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,IAAI,gBAAgB,GAAG,KAAK,CAAC;AACtB,KAAK,UAAU,eAAe,CAAC,OAA8B;IAClE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IACD,IAAI,qCAAqC,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,OAAO,MAAM,6BAA6B,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7B,oCAAoC;QACpC,gBAAgB,GAAG,IAAI,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC;;;;;KAKb,CAAC,CAAC;IACL,CAAC;IACD,2DAA2D;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qCAAqC,CAC5C,OAA8B;IAE9B,OAAO,CACL,OAAO,IAAI,OAAO;QAClB,OAAO,CAAC,KAAK,KAAK,SAAS;QAC3B,QAAQ,IAAI,OAAO;QACnB,OAAO,CAAC,MAAM,KAAK,SAAS,CAC7B,CAAC;AACJ,CAAC"}