thirdweb 5.76.0-nightly-e702490f2ff5e2b7d6b28c06731af880583cf8bc-20241210010916 → 5.76.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 (49) hide show
  1. package/dist/cjs/extensions/erc721/__generated__/ISignatureMintERC721_v2/events/TokensMintedWithSignature.js +33 -0
  2. package/dist/cjs/extensions/erc721/__generated__/ISignatureMintERC721_v2/events/TokensMintedWithSignature.js.map +1 -0
  3. package/dist/cjs/extensions/erc721/__generated__/ISignatureMintERC721_v2/read/verify.js +172 -0
  4. package/dist/cjs/extensions/erc721/__generated__/ISignatureMintERC721_v2/read/verify.js.map +1 -0
  5. package/dist/cjs/extensions/erc721/__generated__/ISignatureMintERC721_v2/write/mintWithSignature.js +175 -0
  6. package/dist/cjs/extensions/erc721/__generated__/ISignatureMintERC721_v2/write/mintWithSignature.js.map +1 -0
  7. package/dist/cjs/extensions/erc721/write/sigMint.js +99 -4
  8. package/dist/cjs/extensions/erc721/write/sigMint.js.map +1 -1
  9. package/dist/cjs/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.js +2 -0
  10. package/dist/cjs/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.js.map +1 -1
  11. package/dist/cjs/version.js +1 -1
  12. package/dist/cjs/version.js.map +1 -1
  13. package/dist/cjs/wallets/in-app/core/wallet/enclave-wallet.js +1 -1
  14. package/dist/cjs/wallets/in-app/core/wallet/enclave-wallet.js.map +1 -1
  15. package/dist/esm/extensions/erc721/__generated__/ISignatureMintERC721_v2/events/TokensMintedWithSignature.js +30 -0
  16. package/dist/esm/extensions/erc721/__generated__/ISignatureMintERC721_v2/events/TokensMintedWithSignature.js.map +1 -0
  17. package/dist/esm/extensions/erc721/__generated__/ISignatureMintERC721_v2/read/verify.js +164 -0
  18. package/dist/esm/extensions/erc721/__generated__/ISignatureMintERC721_v2/read/verify.js.map +1 -0
  19. package/dist/esm/extensions/erc721/__generated__/ISignatureMintERC721_v2/write/mintWithSignature.js +168 -0
  20. package/dist/esm/extensions/erc721/__generated__/ISignatureMintERC721_v2/write/mintWithSignature.js.map +1 -0
  21. package/dist/esm/extensions/erc721/write/sigMint.js +99 -4
  22. package/dist/esm/extensions/erc721/write/sigMint.js.map +1 -1
  23. package/dist/esm/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.js +2 -0
  24. package/dist/esm/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.js.map +1 -1
  25. package/dist/esm/version.js +1 -1
  26. package/dist/esm/version.js.map +1 -1
  27. package/dist/esm/wallets/in-app/core/wallet/enclave-wallet.js +1 -1
  28. package/dist/esm/wallets/in-app/core/wallet/enclave-wallet.js.map +1 -1
  29. package/dist/types/extensions/erc721/__generated__/ISignatureMintERC721_v2/events/TokensMintedWithSignature.d.ts +98 -0
  30. package/dist/types/extensions/erc721/__generated__/ISignatureMintERC721_v2/events/TokensMintedWithSignature.d.ts.map +1 -0
  31. package/dist/types/extensions/erc721/__generated__/ISignatureMintERC721_v2/read/verify.d.ts +136 -0
  32. package/dist/types/extensions/erc721/__generated__/ISignatureMintERC721_v2/read/verify.d.ts.map +1 -0
  33. package/dist/types/extensions/erc721/__generated__/ISignatureMintERC721_v2/write/mintWithSignature.d.ts +132 -0
  34. package/dist/types/extensions/erc721/__generated__/ISignatureMintERC721_v2/write/mintWithSignature.d.ts.map +1 -0
  35. package/dist/types/extensions/erc721/write/sigMint.d.ts +119 -18
  36. package/dist/types/extensions/erc721/write/sigMint.d.ts.map +1 -1
  37. package/dist/types/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.d.ts.map +1 -1
  38. package/dist/types/version.d.ts +1 -1
  39. package/dist/types/version.d.ts.map +1 -1
  40. package/package.json +1 -1
  41. package/src/extensions/erc721/__generated__/ISignatureMintERC721_v2/events/TokensMintedWithSignature.ts +55 -0
  42. package/src/extensions/erc721/__generated__/ISignatureMintERC721_v2/read/verify.ts +196 -0
  43. package/src/extensions/erc721/__generated__/ISignatureMintERC721_v2/write/mintWithSignature.ts +214 -0
  44. package/src/extensions/erc721/write/sigMint.ts +184 -8
  45. package/src/extensions/erc721/write/sigMint721.test.ts +42 -0
  46. package/src/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.test.tsx +135 -0
  47. package/src/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.tsx +2 -0
  48. package/src/version.ts +1 -1
  49. package/src/wallets/in-app/core/wallet/enclave-wallet.ts +1 -1
@@ -60,6 +60,48 @@ describe.runIf(process.env.TW_SECRET_KEY)(
60
60
  });
61
61
  }, 60000);
62
62
 
63
+ it("should generate a mint signature and mint an NFT for LoyaltyContract", async () => {
64
+ const loyaltyContract = getContract({
65
+ address: await deployERC721Contract({
66
+ account: TEST_ACCOUNT_A,
67
+ chain: ANVIL_CHAIN,
68
+ client: TEST_CLIENT,
69
+ params: {
70
+ name: "Test",
71
+ symbol: "TST",
72
+ royaltyRecipient: TEST_ACCOUNT_C.address,
73
+ saleRecipient: TEST_ACCOUNT_B.address,
74
+ },
75
+ type: "LoyaltyCard",
76
+ }),
77
+ chain: ANVIL_CHAIN,
78
+ client: TEST_CLIENT,
79
+ });
80
+ const { payload, signature } = await generateMintSignature({
81
+ mintRequest: {
82
+ to: TEST_ACCOUNT_B.address,
83
+ metadata: {
84
+ name: "My NFT",
85
+ description: "This is my NFT",
86
+ image: "https://example.com/image.png",
87
+ },
88
+ },
89
+ account: TEST_ACCOUNT_A,
90
+ contract: loyaltyContract,
91
+ contractType: "LoyaltyCard",
92
+ });
93
+ const transaction = mintWithSignature({
94
+ contract: loyaltyContract,
95
+ payload,
96
+ signature,
97
+ });
98
+ const { transactionHash } = await sendTransaction({
99
+ transaction,
100
+ account: TEST_ACCOUNT_A,
101
+ });
102
+ expect(transactionHash.length).toBe(66);
103
+ });
104
+
63
105
  it("should generate a mint signature and mint an NFT", async () => {
64
106
  const { payload, signature } = await generateMintSignature({
65
107
  mintRequest: {
@@ -0,0 +1,135 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { render, screen } from "../../../../../../test/src/react-render.js";
3
+ import { useSocialProfiles } from "../../../../core/social/useSocialProfiles.js";
4
+ import { useProfiles } from "../../../hooks/wallets/useProfiles.js";
5
+ import { LinkedProfilesScreen } from "./LinkedProfilesScreen.jsx";
6
+
7
+ // Mock the hooks
8
+ vi.mock("../../../hooks/wallets/useProfiles");
9
+ vi.mock("../../../../core/social/useSocialProfiles");
10
+ vi.mock("../../components/Img", () => ({
11
+ Img: () => <div data-testid="mock-img">Mock Image</div>,
12
+ }));
13
+
14
+ describe("LinkedProfilesScreen", () => {
15
+ const mockClient = {
16
+ clientId: "test-client-id",
17
+ secretKey: undefined,
18
+ };
19
+
20
+ const mockProps = {
21
+ onBack: vi.fn(),
22
+ setScreen: vi.fn(),
23
+ locale: {
24
+ manageWallet: {
25
+ linkedProfiles: "Linked Profiles",
26
+ linkProfile: "Link Profile",
27
+ },
28
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
29
+ } as any,
30
+ client: mockClient,
31
+ };
32
+
33
+ beforeEach(() => {
34
+ vi.mocked(useSocialProfiles).mockReturnValue({
35
+ data: undefined,
36
+ isLoading: false,
37
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
38
+ } as any);
39
+ });
40
+
41
+ describe("getProfileDisplayName", () => {
42
+ it("should display email for email profile type", () => {
43
+ vi.mocked(useProfiles).mockReturnValue({
44
+ data: [{ type: "email", details: { email: "test@example.com" } }],
45
+ isLoading: false,
46
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
47
+ } as any);
48
+
49
+ render(<LinkedProfilesScreen {...mockProps} />);
50
+ expect(screen.getByText("test@example.com")).toBeInTheDocument();
51
+ });
52
+
53
+ it("should display email for google profile type", () => {
54
+ vi.mocked(useProfiles).mockReturnValue({
55
+ data: [{ type: "google", details: { email: "google@example.com" } }],
56
+ isLoading: false,
57
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
58
+ } as any);
59
+
60
+ render(<LinkedProfilesScreen {...mockProps} />);
61
+ expect(screen.getByText("google@example.com")).toBeInTheDocument();
62
+ });
63
+
64
+ it("should display phone number for phone profile type", () => {
65
+ vi.mocked(useProfiles).mockReturnValue({
66
+ data: [{ type: "phone", details: { phone: "+1234567890" } }],
67
+ isLoading: false,
68
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
69
+ } as any);
70
+
71
+ render(<LinkedProfilesScreen {...mockProps} />);
72
+ expect(screen.getByText("+1234567890")).toBeInTheDocument();
73
+ });
74
+
75
+ it("should display shortened address when address is present", () => {
76
+ vi.mocked(useProfiles).mockReturnValue({
77
+ data: [
78
+ {
79
+ type: "wallet",
80
+ details: { address: "0x1234567890abcdef1234567890abcdef12345678" },
81
+ },
82
+ ],
83
+ isLoading: false,
84
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
85
+ } as any);
86
+
87
+ render(<LinkedProfilesScreen {...mockProps} />);
88
+ expect(screen.getByText("0x123456...345678")).toBeInTheDocument();
89
+ });
90
+
91
+ it("should display email for cognito profile type", () => {
92
+ vi.mocked(useProfiles).mockReturnValue({
93
+ data: [{ type: "cognito", details: { email: "cognito@example.com" } }],
94
+ isLoading: false,
95
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
96
+ } as any);
97
+
98
+ render(<LinkedProfilesScreen {...mockProps} />);
99
+ expect(screen.getByText("cognito@example.com")).toBeInTheDocument();
100
+ });
101
+
102
+ it("should display Custom Profile for custom_auth_endpoint", () => {
103
+ vi.mocked(useProfiles).mockReturnValue({
104
+ data: [{ type: "Custom_auth_endpoint", details: {} }],
105
+ isLoading: false,
106
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
107
+ } as any);
108
+
109
+ render(<LinkedProfilesScreen {...mockProps} />);
110
+ expect(screen.getByText("Custom Profile")).toBeInTheDocument();
111
+ });
112
+
113
+ it("should capitalize unknown profile types", () => {
114
+ vi.mocked(useProfiles).mockReturnValue({
115
+ data: [{ type: "unknown", details: {} }],
116
+ isLoading: false,
117
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
118
+ } as any);
119
+
120
+ render(<LinkedProfilesScreen {...mockProps} />);
121
+ expect(screen.getByText("Unknown")).toBeInTheDocument();
122
+ });
123
+
124
+ it("should not display guest profiles", () => {
125
+ vi.mocked(useProfiles).mockReturnValue({
126
+ data: [{ type: "guest", details: {} }],
127
+ isLoading: false,
128
+ // biome-ignore lint/suspicious/noExplicitAny: Mocking data
129
+ } as any);
130
+
131
+ render(<LinkedProfilesScreen {...mockProps} />);
132
+ expect(screen.queryByText("Guest")).not.toBeInTheDocument();
133
+ });
134
+ });
135
+ });
@@ -33,6 +33,8 @@ function getProfileDisplayName(profile: Profile) {
33
33
  case (profile.type as string) === "cognito" &&
34
34
  profile.details.email !== undefined:
35
35
  return profile.details.email;
36
+ case (profile.type as string).toLowerCase() === "custom_auth_endpoint":
37
+ return "Custom Profile";
36
38
  default:
37
39
  return profile.type.slice(0, 1).toUpperCase() + profile.type.slice(1);
38
40
  }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.76.0-nightly-e702490f2ff5e2b7d6b28c06731af880583cf8bc-20241210010916";
1
+ export const version = "5.76.0";
@@ -162,7 +162,7 @@ export class EnclaveWallet implements IWebWallet {
162
162
  chainId: toHex(tx.chainId),
163
163
  };
164
164
 
165
- if (tx.maxFeePerGas) {
165
+ if (typeof tx.maxFeePerGas === "bigint") {
166
166
  transaction.maxFeePerGas = toHex(tx.maxFeePerGas);
167
167
  transaction.maxPriorityFeePerGas =
168
168
  typeof tx.maxPriorityFeePerGas === "bigint"