thirdweb 5.121.3 → 5.121.5
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/insight/get-nfts.js +2 -2
- package/dist/cjs/insight/get-nfts.js.map +1 -1
- package/dist/cjs/utils/web/isMobile.js +0 -4
- package/dist/cjs/utils/web/isMobile.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wallets/__generated__/wallet/io.rabby/index.js +12 -12
- package/dist/cjs/wallets/__generated__/wallet/io.rabby/index.js.map +1 -1
- package/dist/cjs/wallets/__generated__/wallet-infos.js +1 -1
- package/dist/cjs/wallets/__generated__/wallet-infos.js.map +1 -1
- package/dist/cjs/wallets/wallet-connect/qr-overlay.js +18 -0
- package/dist/cjs/wallets/wallet-connect/qr-overlay.js.map +1 -1
- package/dist/esm/insight/get-nfts.js +2 -2
- package/dist/esm/insight/get-nfts.js.map +1 -1
- package/dist/esm/utils/web/isMobile.js +0 -4
- package/dist/esm/utils/web/isMobile.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/wallets/__generated__/wallet/io.rabby/index.js +12 -12
- package/dist/esm/wallets/__generated__/wallet/io.rabby/index.js.map +1 -1
- package/dist/esm/wallets/__generated__/wallet-infos.js +1 -1
- package/dist/esm/wallets/__generated__/wallet-infos.js.map +1 -1
- package/dist/esm/wallets/wallet-connect/qr-overlay.js +18 -0
- package/dist/esm/wallets/wallet-connect/qr-overlay.js.map +1 -1
- package/dist/scripts/bridge-widget.js +91 -90
- package/dist/types/utils/web/isMobile.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/wallets/__generated__/wallet/io.rabby/index.d.ts +12 -12
- package/dist/types/wallets/__generated__/wallet/io.rabby/index.d.ts.map +1 -1
- package/dist/types/wallets/__generated__/wallet-ids.d.ts +1 -1
- package/dist/types/wallets/__generated__/wallet-ids.d.ts.map +1 -1
- package/dist/types/wallets/__generated__/wallet-infos.d.ts +1 -1
- package/dist/types/wallets/getAllWalletsList.d.ts +1 -1
- package/dist/types/wallets/wallet-connect/qr-overlay.d.ts.map +1 -1
- package/package.json +18 -17
- package/src/insight/get-nfts.ts +2 -2
- package/src/react/core/account/provider.test.tsx +1 -0
- package/src/react/core/hooks/others/useWalletBalance.test.tsx +1 -0
- package/src/react/core/hooks/pay/useBuyWithFiatQuotesForProviders.test.tsx +1 -0
- package/src/react/core/hooks/useStepExecutor.test.tsx +1 -0
- package/src/react/core/hooks/wallets/useAddConnectedWallet.test.tsx +1 -0
- package/src/react/core/hooks/wallets/useAutoConnectCore.test.tsx +1 -0
- package/src/react/core/hooks/wallets/useConnect.test.tsx +1 -0
- package/src/react/core/hooks/wallets/useSetActiveWallet.test.tsx +1 -0
- package/src/react/core/hooks/wallets/useSwitchActiveWalletChain.test.tsx +1 -0
- package/src/react/core/providers/connection-manager.test.tsx +1 -0
- package/src/react/core/wallet/provider.test.tsx +1 -0
- package/src/react/native/hooks/wallets/useUnlinkProfile.test.tsx +1 -0
- package/src/react/web/hooks/wallets/useUnlinkProfile.test.tsx +1 -0
- package/src/react/web/ui/AutoConnect/AutoConnect.test.tsx +1 -0
- package/src/react/web/ui/Bridge/StepRunner.test.tsx +1 -0
- package/src/react/web/ui/Bridge/common/token-query.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/ConnectButton.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/Details.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/NetworkSelector.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/screens/ManageWalletScreen.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/screens/PrivateKey.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/screens/ReceiveFunds.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/screens/SendFunds.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/screens/SignatureScreen.test.tsx +1 -0
- package/src/react/web/ui/ConnectWallet/screens/StartScreen.test.tsx +1 -0
- package/src/react/web/ui/MediaRenderer/MediaRenderer.test.tsx +1 -0
- package/src/react/web/ui/MediaRenderer/icons.test.tsx +1 -0
- package/src/react/web/ui/MediaRenderer/useResolvedMediaType.test.tsx +1 -0
- package/src/react/web/ui/SiteEmbed.test.tsx +1 -0
- package/src/react/web/ui/SiteLink.test.tsx +1 -0
- package/src/react/web/ui/TransactionButton/TransactionButton.test.tsx +1 -0
- package/src/react/web/ui/components/ChainIcon.test.tsx +1 -0
- package/src/react/web/ui/hooks/useCopyClipboard.test.tsx +1 -0
- package/src/react/web/ui/hooks/useDebouncedValue.test.tsx +1 -0
- package/src/react/web/ui/hooks/useShowMore.test.tsx +28 -12
- package/src/react/web/ui/prebuilt/Account/address.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Account/avatar.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Account/balance.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Account/name.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Chain/icon.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Chain/name.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Chain/provider.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/NFT/description.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/NFT/media.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/NFT/name.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/NFT/provider.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Token/name.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Token/provider.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Token/symbol.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Wallet/icon.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/Wallet/name.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/BuyDirectListingButton.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/thirdweb/ClaimButton/ClaimButton.test.tsx +1 -0
- package/src/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/CreateDirectListingButton.test.tsx +1 -0
- package/src/react/web/utils/canFitWideModal.test.tsx +1 -0
- package/src/react/web/wallets/in-app/CountrySelector.test.tsx +1 -0
- package/src/react/web/wallets/in-app/InputSelectionUI.test.tsx +1 -0
- package/src/react/web/wallets/shared/ConnectWalletSocialOptions.test.tsx +1 -0
- package/src/utils/web/isMobile.test.ts +43 -0
- package/src/utils/web/isMobile.ts +0 -7
- package/src/version.ts +1 -1
- package/src/wallets/__generated__/wallet/io.rabby/index.ts +13 -12
- package/src/wallets/__generated__/wallet-ids.ts +2 -1
- package/src/wallets/__generated__/wallet-infos.ts +1 -1
- package/src/wallets/in-app/web/lib/auth/redirect-state.test.tsx +1 -0
- package/src/wallets/in-app/web/lib/get-url-token.test.tsx +1 -0
- package/src/wallets/in-app/web/utils/iFrameCommunication/IframeCommunicator.test.tsx +1 -0
- package/src/wallets/wallet-connect/qr-overlay.test.ts +61 -0
- package/src/wallets/wallet-connect/qr-overlay.ts +21 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
1
2
|
/** biome-ignore-all lint/nursery/useUniqueElementIds: "id" is not a html attribute here - TODO: stop using 'id' as a prop on JSX elements */
|
|
2
3
|
import { describe, expect, it } from "vitest";
|
|
3
4
|
import { render, waitFor } from "~test/react-render.js";
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { isMobile } from "./isMobile.js";
|
|
4
|
+
|
|
5
|
+
const DESKTOP_UA =
|
|
6
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36";
|
|
7
|
+
const IPHONE_UA =
|
|
8
|
+
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1";
|
|
9
|
+
const ANDROID_UA =
|
|
10
|
+
"Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Mobile Safari/537.36";
|
|
11
|
+
|
|
12
|
+
function setUserAgent(userAgent: string) {
|
|
13
|
+
vi.spyOn(navigator, "userAgent", "get").mockReturnValue(userAgent);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function setViewportWidth(width: number) {
|
|
17
|
+
vi.spyOn(window, "innerWidth", "get").mockReturnValue(width);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
describe("isMobile", () => {
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
vi.restoreAllMocks();
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("returns false for a desktop browser with a narrow viewport", () => {
|
|
26
|
+
setUserAgent(DESKTOP_UA);
|
|
27
|
+
setViewportWidth(500);
|
|
28
|
+
|
|
29
|
+
expect(isMobile()).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("returns true for iOS", () => {
|
|
33
|
+
setUserAgent(IPHONE_UA);
|
|
34
|
+
|
|
35
|
+
expect(isMobile()).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("returns true for Android", () => {
|
|
39
|
+
setUserAgent(ANDROID_UA);
|
|
40
|
+
|
|
41
|
+
expect(isMobile()).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
});
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = "5.121.
|
|
1
|
+
export const version = "5.121.5";
|
|
@@ -9,25 +9,26 @@ export const wallet = {
|
|
|
9
9
|
app: {
|
|
10
10
|
browser:
|
|
11
11
|
"https://chrome.google.com/webstore/detail/rabby/acmacodkjbdgmoleebolmdjonilkdbch",
|
|
12
|
-
ios:
|
|
13
|
-
android:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
ios: "https://apps.apple.com/us/app/rabby-wallet-crypto-evm/id6474381673",
|
|
13
|
+
android:
|
|
14
|
+
"https://play.google.com/store/apps/details?id=com.debank.rabbymobile",
|
|
15
|
+
mac: "",
|
|
16
|
+
windows: "",
|
|
17
|
+
linux: "",
|
|
17
18
|
chrome:
|
|
18
19
|
"https://chrome.google.com/webstore/detail/rabby-wallet/acmacodkjbdgmoleebolmdjonilkdbch",
|
|
19
|
-
firefox:
|
|
20
|
-
safari:
|
|
21
|
-
edge:
|
|
22
|
-
opera:
|
|
20
|
+
firefox: "",
|
|
21
|
+
safari: "",
|
|
22
|
+
edge: "",
|
|
23
|
+
opera: "",
|
|
23
24
|
},
|
|
24
25
|
rdns: "io.rabby",
|
|
25
26
|
mobile: {
|
|
26
|
-
native:
|
|
27
|
-
universal:
|
|
27
|
+
native: "rabby://",
|
|
28
|
+
universal: "",
|
|
28
29
|
},
|
|
29
30
|
desktop: {
|
|
30
|
-
native:
|
|
31
|
+
native: "",
|
|
31
32
|
universal:
|
|
32
33
|
"https://chrome.google.com/webstore/detail/rabby/acmacodkjbdgmoleebolmdjonilkdbch",
|
|
33
34
|
},
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// This file is auto-generated by the `scripts/wallets/generate.ts` script.
|
|
3
3
|
// Do not modify this file manually.
|
|
4
4
|
|
|
5
|
-
//
|
|
5
|
+
// 477 wallets
|
|
6
6
|
export type WCSupportedWalletIds =
|
|
7
7
|
| "io.1inch.wallet"
|
|
8
8
|
| "com.binance.wallet"
|
|
@@ -32,6 +32,7 @@ export type WCSupportedWalletIds =
|
|
|
32
32
|
| "com.roninchain.wallet"
|
|
33
33
|
| "com.okex.wallet"
|
|
34
34
|
| "com.wemixplay"
|
|
35
|
+
| "io.rabby"
|
|
35
36
|
| "com.tangem"
|
|
36
37
|
| "com.exodus"
|
|
37
38
|
| "com.hashpack.wallet"
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { createQROverlay } from "./qr-overlay.js";
|
|
4
|
+
|
|
5
|
+
const URI = "wc:1234@2?relay-protocol=irn&symKey=abcd";
|
|
6
|
+
|
|
7
|
+
function overlayElements(): HTMLElement[] {
|
|
8
|
+
return Array.from(document.body.children).filter(
|
|
9
|
+
(el): el is HTMLElement =>
|
|
10
|
+
el instanceof HTMLElement && el.style.zIndex === "9999",
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function pressEscape() {
|
|
15
|
+
document.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape" }));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
describe("createQROverlay", () => {
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
document.body.innerHTML = "";
|
|
21
|
+
document.body.style.pointerEvents = "";
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("stays interactive when pointer events are disabled on body", () => {
|
|
25
|
+
document.body.style.pointerEvents = "none";
|
|
26
|
+
|
|
27
|
+
const overlay = createQROverlay(URI);
|
|
28
|
+
|
|
29
|
+
expect(overlayElements()[0]?.style.pointerEvents).toBe("auto");
|
|
30
|
+
overlay.destroy();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("replaces the previous overlay instead of stacking", () => {
|
|
34
|
+
createQROverlay(URI);
|
|
35
|
+
const overlay = createQROverlay(URI);
|
|
36
|
+
|
|
37
|
+
expect(overlayElements()).toHaveLength(1);
|
|
38
|
+
overlay.destroy();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("detaches the replaced overlay's listeners", () => {
|
|
42
|
+
const firstCancel = vi.fn();
|
|
43
|
+
const secondCancel = vi.fn();
|
|
44
|
+
createQROverlay(URI, { onCancel: firstCancel });
|
|
45
|
+
createQROverlay(URI, { onCancel: secondCancel });
|
|
46
|
+
|
|
47
|
+
pressEscape();
|
|
48
|
+
|
|
49
|
+
expect(firstCancel).not.toHaveBeenCalled();
|
|
50
|
+
expect(secondCancel).toHaveBeenCalledTimes(1);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("does not remove a newer overlay when an older one is destroyed", () => {
|
|
54
|
+
const first = createQROverlay(URI);
|
|
55
|
+
createQROverlay(URI);
|
|
56
|
+
|
|
57
|
+
first.destroy();
|
|
58
|
+
|
|
59
|
+
expect(overlayElements()).toHaveLength(1);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
@@ -53,6 +53,9 @@ export interface QROverlay {
|
|
|
53
53
|
show: () => void;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
// Only one overlay is shown at a time; creating a new one replaces the previous one.
|
|
57
|
+
let removeActiveOverlay: (() => void) | undefined;
|
|
58
|
+
|
|
56
59
|
/**
|
|
57
60
|
* Creates a QR code overlay for the given WalletConnect URI
|
|
58
61
|
*/
|
|
@@ -69,7 +72,10 @@ export function createQROverlay(
|
|
|
69
72
|
onCancel,
|
|
70
73
|
} = options;
|
|
71
74
|
|
|
75
|
+
removeActiveOverlay?.();
|
|
76
|
+
|
|
72
77
|
// Create overlay backdrop
|
|
78
|
+
// pointer-events is explicit so the overlay stays interactive when the host page disables it on body
|
|
73
79
|
const overlay = document.createElement("div");
|
|
74
80
|
overlay.style.cssText = `
|
|
75
81
|
position: fixed;
|
|
@@ -77,6 +83,7 @@ export function createQROverlay(
|
|
|
77
83
|
background-color: ${theme === "dark" ? "rgba(0, 0, 0, 0.8)" : "rgba(0, 0, 0, 0.5)"};
|
|
78
84
|
backdrop-filter: blur(10px);
|
|
79
85
|
z-index: 9999;
|
|
86
|
+
pointer-events: auto;
|
|
80
87
|
display: flex;
|
|
81
88
|
align-items: center;
|
|
82
89
|
justify-content: center;
|
|
@@ -252,9 +259,23 @@ export function createQROverlay(
|
|
|
252
259
|
// Append to container
|
|
253
260
|
container.appendChild(overlay);
|
|
254
261
|
|
|
262
|
+
function removeNow() {
|
|
263
|
+
document.removeEventListener("keydown", handleEscapeKey);
|
|
264
|
+
overlay.removeEventListener("click", handleOverlayClick);
|
|
265
|
+
overlay.remove();
|
|
266
|
+
style.remove();
|
|
267
|
+
if (removeActiveOverlay === removeNow) {
|
|
268
|
+
removeActiveOverlay = undefined;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
removeActiveOverlay = removeNow;
|
|
272
|
+
|
|
255
273
|
function destroyOverlay(userInitiated = false) {
|
|
256
274
|
document.removeEventListener("keydown", handleEscapeKey);
|
|
257
275
|
overlay.removeEventListener("click", handleOverlayClick);
|
|
276
|
+
if (removeActiveOverlay === removeNow) {
|
|
277
|
+
removeActiveOverlay = undefined;
|
|
278
|
+
}
|
|
258
279
|
|
|
259
280
|
// Call onCancel callback only if user initiated the close action
|
|
260
281
|
if (userInitiated && onCancel) {
|