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.
- package/dist/cjs/auth/constants.js +30 -0
- package/dist/cjs/auth/constants.js.map +1 -0
- package/dist/cjs/auth/core/verify-jwt.js +2 -2
- package/dist/cjs/auth/core/verify-jwt.js.map +1 -1
- package/dist/cjs/auth/core/verify-login-payload.js +2 -2
- package/dist/cjs/auth/core/verify-login-payload.js.map +1 -1
- package/dist/cjs/auth/is-erc6492-signature.js +25 -0
- package/dist/cjs/auth/is-erc6492-signature.js.map +1 -0
- package/dist/cjs/auth/parse-erc6492-signature.js +28 -0
- package/dist/cjs/auth/parse-erc6492-signature.js.map +1 -0
- package/dist/cjs/auth/serialize-erc6492-signature.js +36 -0
- package/dist/cjs/auth/serialize-erc6492-signature.js.map +1 -0
- package/dist/cjs/auth/types.js +3 -0
- package/dist/cjs/auth/types.js.map +1 -0
- package/dist/cjs/auth/verify-signature.js +196 -0
- package/dist/cjs/auth/verify-signature.js.map +1 -0
- package/dist/cjs/exports/auth.js +11 -5
- package/dist/cjs/exports/auth.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js +3 -0
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js +0 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/WalletSelector.js +3 -0
- package/dist/cjs/react/web/ui/ConnectWallet/WalletSelector.js.map +1 -1
- package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js +19 -26
- package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
- package/dist/cjs/react/web/ui/MediaRenderer/ModelViewer.js +2 -2
- package/dist/cjs/react/web/ui/MediaRenderer/ModelViewer.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wallets/coinbase/coinbaseWebSDK.js +2 -2
- package/dist/cjs/wallets/coinbase/coinbaseWebSDK.js.map +1 -1
- package/dist/cjs/wallets/injected/index.js +2 -2
- package/dist/cjs/wallets/injected/index.js.map +1 -1
- package/dist/cjs/wallets/smart/index.js +0 -1
- package/dist/cjs/wallets/smart/index.js.map +1 -1
- package/dist/esm/auth/constants.js +27 -0
- package/dist/esm/auth/constants.js.map +1 -0
- package/dist/esm/auth/core/verify-jwt.js +1 -1
- package/dist/esm/auth/core/verify-jwt.js.map +1 -1
- package/dist/esm/auth/core/verify-login-payload.js +1 -1
- package/dist/esm/auth/core/verify-login-payload.js.map +1 -1
- package/dist/esm/auth/is-erc6492-signature.js +22 -0
- package/dist/esm/auth/is-erc6492-signature.js.map +1 -0
- package/dist/esm/auth/parse-erc6492-signature.js +25 -0
- package/dist/esm/auth/parse-erc6492-signature.js.map +1 -0
- package/dist/esm/auth/serialize-erc6492-signature.js +33 -0
- package/dist/esm/auth/serialize-erc6492-signature.js.map +1 -0
- package/dist/esm/auth/types.js +2 -0
- package/dist/esm/auth/types.js.map +1 -0
- package/dist/esm/auth/verify-signature.js +191 -0
- package/dist/esm/auth/verify-signature.js.map +1 -0
- package/dist/esm/exports/auth.js +4 -1
- package/dist/esm/exports/auth.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js +3 -0
- package/dist/esm/react/web/ui/ConnectWallet/Modal/AllWalletsUI.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js +0 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectModalContent.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/WalletSelector.js +3 -0
- package/dist/esm/react/web/ui/ConnectWallet/WalletSelector.js.map +1 -1
- package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js +19 -26
- package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
- package/dist/esm/react/web/ui/MediaRenderer/ModelViewer.js +2 -2
- package/dist/esm/react/web/ui/MediaRenderer/ModelViewer.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/wallets/coinbase/coinbaseWebSDK.js +2 -2
- package/dist/esm/wallets/coinbase/coinbaseWebSDK.js.map +1 -1
- package/dist/esm/wallets/injected/index.js +2 -2
- package/dist/esm/wallets/injected/index.js.map +1 -1
- package/dist/esm/wallets/smart/index.js +0 -1
- package/dist/esm/wallets/smart/index.js.map +1 -1
- package/dist/types/auth/constants.d.ts +20 -0
- package/dist/types/auth/constants.d.ts.map +1 -0
- package/dist/types/auth/is-erc6492-signature.d.ts +19 -0
- package/dist/types/auth/is-erc6492-signature.d.ts.map +1 -0
- package/dist/types/auth/parse-erc6492-signature.d.ts +24 -0
- package/dist/types/auth/parse-erc6492-signature.d.ts.map +1 -0
- package/dist/types/auth/serialize-erc6492-signature.d.ts +27 -0
- package/dist/types/auth/serialize-erc6492-signature.d.ts.map +1 -0
- package/dist/types/auth/types.d.ts +7 -0
- package/dist/types/auth/types.d.ts.map +1 -0
- package/dist/types/auth/verify-signature.d.ts +70 -0
- package/dist/types/auth/verify-signature.d.ts.map +1 -0
- package/dist/types/exports/auth.d.ts +5 -1
- package/dist/types/exports/auth.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/AllWalletsUI.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalContent.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/WalletSelector.d.ts.map +1 -1
- package/dist/types/react/web/ui/MediaRenderer/MediaRenderer.d.ts.map +1 -1
- package/dist/types/react/web/ui/MediaRenderer/ModelViewer.d.ts +1 -1
- package/dist/types/react/web/ui/MediaRenderer/ModelViewer.d.ts.map +1 -1
- package/dist/types/react/web/ui/MediaRenderer/types.d.ts +0 -2
- package/dist/types/react/web/ui/MediaRenderer/types.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/auth/constants.ts +30 -0
- package/src/auth/core/verify-jwt.ts +1 -1
- package/src/auth/core/verify-login-payload.ts +1 -1
- package/src/auth/is-erc6492-signature.test.ts +26 -0
- package/src/auth/is-erc6492-signature.ts +23 -0
- package/src/auth/parse-erc6492-signature.test.ts +30 -0
- package/src/auth/parse-erc6492-signature.ts +38 -0
- package/src/auth/serialize-erc6492-signature.test.ts +23 -0
- package/src/auth/serialize-erc6492-signature.ts +42 -0
- package/src/auth/types.ts +7 -0
- package/src/auth/verify-signature.test.ts +97 -0
- package/src/auth/verify-signature.ts +245 -0
- package/src/exports/auth.ts +9 -1
- package/src/react/web/ui/ConnectWallet/Modal/AllWalletsUI.tsx +3 -0
- package/src/react/web/ui/ConnectWallet/Modal/ConnectModalContent.tsx +0 -1
- package/src/react/web/ui/ConnectWallet/WalletSelector.tsx +3 -1
- package/src/react/web/ui/MediaRenderer/MediaRenderer.tsx +151 -111
- package/src/react/web/ui/MediaRenderer/ModelViewer.tsx +5 -5
- package/src/react/web/ui/MediaRenderer/types.ts +0 -3
- package/src/version.ts +1 -1
- package/src/wallets/coinbase/coinbaseWebSDK.ts +2 -2
- package/src/wallets/injected/index.ts +2 -2
- package/src/wallets/smart/index.ts +0 -3
- package/src/wallets/smart/smart-wallet-integration.test.ts +1 -1
- package/dist/cjs/auth/verifySignature.js +0 -137
- package/dist/cjs/auth/verifySignature.js.map +0 -1
- package/dist/esm/auth/verifySignature.js +0 -132
- package/dist/esm/auth/verifySignature.js.map +0 -1
- package/dist/types/auth/verifySignature.d.ts +0 -53
- package/dist/types/auth/verifySignature.d.ts.map +0 -1
- package/src/auth/verifySignature.test.ts +0 -53
- 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
|
-
|
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
|
-
{
|
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
|
-
{
|
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
|
-
{
|
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
|
-
{
|
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
|
-
|
157
|
-
{
|
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
|
-
{
|
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
|
-
{
|
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<
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
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
|
-
|
264
|
-
<img
|
264
|
+
<LinkPlayer
|
265
265
|
style={style}
|
266
|
-
src={src
|
266
|
+
src={src}
|
267
267
|
alt={alt}
|
268
|
-
ref={ref}
|
269
|
-
{
|
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<
|
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
|
-
|
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
|
-
{
|
350
|
+
className={className}
|
325
351
|
/>
|
326
352
|
);
|
327
353
|
}
|
328
354
|
|
329
355
|
return (
|
330
|
-
<div style={{ position: "relative", ...style }} {
|
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<
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
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
|
-
{
|
458
|
+
className={className}
|
430
459
|
/>
|
431
460
|
);
|
432
461
|
}
|
433
462
|
|
434
463
|
return (
|
435
|
-
<div style={{ position: "relative", ...style }} {
|
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<
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
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
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
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
|
-
|
512
|
-
|
567
|
+
pointerEvents: "none",
|
568
|
+
position: "absolute",
|
513
569
|
width: "100%",
|
570
|
+
height: "100%",
|
571
|
+
zIndex: 2,
|
514
572
|
transition: "opacity .5s",
|
515
|
-
opacity:
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
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
|
-
|
579
|
+
alt={alt}
|
546
580
|
/>
|
547
|
-
|
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<
|
554
|
-
|
555
|
-
|
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 }} {
|
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<
|
16
|
-
|
17
|
-
|
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.
|
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
|
-
|
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
|
-
|
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/
|
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"}
|