thirdweb 5.82.1-nightly-5e2eec3b178bcad0988ba7086e31514a3fb7b5d5-20250108000440 → 5.83.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 (70) hide show
  1. package/dist/cjs/version.js +1 -1
  2. package/dist/cjs/version.js.map +1 -1
  3. package/dist/cjs/wallets/in-app/core/authentication/backend.js +31 -0
  4. package/dist/cjs/wallets/in-app/core/authentication/backend.js.map +1 -0
  5. package/dist/cjs/wallets/in-app/core/wallet/in-app-core.js +5 -1
  6. package/dist/cjs/wallets/in-app/core/wallet/in-app-core.js.map +1 -1
  7. package/dist/cjs/wallets/in-app/native/auth/index.js +11 -0
  8. package/dist/cjs/wallets/in-app/native/auth/index.js.map +1 -1
  9. package/dist/cjs/wallets/in-app/native/native-connector.js +13 -0
  10. package/dist/cjs/wallets/in-app/native/native-connector.js.map +1 -1
  11. package/dist/cjs/wallets/in-app/web/in-app.js +14 -0
  12. package/dist/cjs/wallets/in-app/web/in-app.js.map +1 -1
  13. package/dist/cjs/wallets/in-app/web/lib/auth/index.js +11 -0
  14. package/dist/cjs/wallets/in-app/web/lib/auth/index.js.map +1 -1
  15. package/dist/cjs/wallets/in-app/web/lib/web-connector.js +9 -0
  16. package/dist/cjs/wallets/in-app/web/lib/web-connector.js.map +1 -1
  17. package/dist/cjs/wallets/types.js +1 -0
  18. package/dist/cjs/wallets/types.js.map +1 -1
  19. package/dist/esm/version.js +1 -1
  20. package/dist/esm/version.js.map +1 -1
  21. package/dist/esm/wallets/in-app/core/authentication/backend.js +28 -0
  22. package/dist/esm/wallets/in-app/core/authentication/backend.js.map +1 -0
  23. package/dist/esm/wallets/in-app/core/wallet/in-app-core.js +5 -1
  24. package/dist/esm/wallets/in-app/core/wallet/in-app-core.js.map +1 -1
  25. package/dist/esm/wallets/in-app/native/auth/index.js +11 -0
  26. package/dist/esm/wallets/in-app/native/auth/index.js.map +1 -1
  27. package/dist/esm/wallets/in-app/native/native-connector.js +13 -0
  28. package/dist/esm/wallets/in-app/native/native-connector.js.map +1 -1
  29. package/dist/esm/wallets/in-app/web/in-app.js +14 -0
  30. package/dist/esm/wallets/in-app/web/in-app.js.map +1 -1
  31. package/dist/esm/wallets/in-app/web/lib/auth/index.js +11 -0
  32. package/dist/esm/wallets/in-app/web/lib/auth/index.js.map +1 -1
  33. package/dist/esm/wallets/in-app/web/lib/web-connector.js +9 -0
  34. package/dist/esm/wallets/in-app/web/lib/web-connector.js.map +1 -1
  35. package/dist/esm/wallets/types.js +1 -0
  36. package/dist/esm/wallets/types.js.map +1 -1
  37. package/dist/types/react/core/utils/storage.d.ts +1 -1
  38. package/dist/types/react/core/utils/storage.d.ts.map +1 -1
  39. package/dist/types/react/web/utils/storage.d.ts +1 -1
  40. package/dist/types/react/web/utils/storage.d.ts.map +1 -1
  41. package/dist/types/version.d.ts +1 -1
  42. package/dist/types/version.d.ts.map +1 -1
  43. package/dist/types/wallets/in-app/core/authentication/backend.d.ts +13 -0
  44. package/dist/types/wallets/in-app/core/authentication/backend.d.ts.map +1 -0
  45. package/dist/types/wallets/in-app/core/authentication/types.d.ts +4 -2
  46. package/dist/types/wallets/in-app/core/authentication/types.d.ts.map +1 -1
  47. package/dist/types/wallets/in-app/core/wallet/in-app-core.d.ts.map +1 -1
  48. package/dist/types/wallets/in-app/native/auth/index.d.ts +11 -0
  49. package/dist/types/wallets/in-app/native/auth/index.d.ts.map +1 -1
  50. package/dist/types/wallets/in-app/native/native-connector.d.ts.map +1 -1
  51. package/dist/types/wallets/in-app/web/in-app.d.ts +14 -0
  52. package/dist/types/wallets/in-app/web/in-app.d.ts.map +1 -1
  53. package/dist/types/wallets/in-app/web/lib/auth/index.d.ts +11 -0
  54. package/dist/types/wallets/in-app/web/lib/auth/index.d.ts.map +1 -1
  55. package/dist/types/wallets/in-app/web/lib/web-connector.d.ts.map +1 -1
  56. package/dist/types/wallets/types.d.ts +1 -1
  57. package/dist/types/wallets/types.d.ts.map +1 -1
  58. package/package.json +2 -2
  59. package/src/version.ts +1 -1
  60. package/src/wallets/in-app/core/authentication/backend.test.ts +69 -0
  61. package/src/wallets/in-app/core/authentication/backend.ts +36 -0
  62. package/src/wallets/in-app/core/authentication/types.ts +5 -1
  63. package/src/wallets/in-app/core/wallet/in-app-core.ts +5 -1
  64. package/src/wallets/in-app/native/auth/index.ts +11 -0
  65. package/src/wallets/in-app/native/native-connector.ts +13 -0
  66. package/src/wallets/in-app/web/in-app.ts +14 -0
  67. package/src/wallets/in-app/web/lib/auth/index.ts +11 -0
  68. package/src/wallets/in-app/web/lib/web-connector.test.ts +163 -0
  69. package/src/wallets/in-app/web/lib/web-connector.ts +9 -0
  70. package/src/wallets/types.ts +1 -0
@@ -0,0 +1,163 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { TEST_CLIENT } from "~test/test-clients.js";
3
+ import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
4
+ import { createWalletAdapter } from "../../../../adapters/wallet-adapter.js";
5
+ import { ethereum } from "../../../../chains/chain-definitions/ethereum.js";
6
+ import { backendAuthenticate } from "../../core/authentication/backend.js";
7
+ import { guestAuthenticate } from "../../core/authentication/guest.js";
8
+ import { siweAuthenticate } from "../../core/authentication/siwe.js";
9
+ import { loginWithOauth } from "./auth/oauth.js";
10
+ import { verifyOtp } from "./auth/otp.js";
11
+ import { InAppWebConnector } from "./web-connector.js";
12
+
13
+ vi.mock("./auth/oauth");
14
+ vi.mock("./auth/iframe-auth.ts", () => {
15
+ const Auth = vi.fn();
16
+ Auth.prototype.loginWithAuthToken = vi.fn(() => {
17
+ return Promise.resolve({
18
+ user: {
19
+ authDetails: {
20
+ recoveryShareManagement: "ENCLAVE",
21
+ userWalletId: "123",
22
+ },
23
+ status: "Logged In, Wallet Initialized",
24
+ walletAddress: "0x123",
25
+ },
26
+ });
27
+ });
28
+ return { Auth };
29
+ });
30
+ vi.mock("../../core/authentication/siwe");
31
+ vi.mock("../../core/authentication/guest");
32
+ vi.mock("../../core/authentication/backend");
33
+ vi.mock("./auth/otp");
34
+ vi.mock("../../core/authentication/authEndpoint");
35
+ vi.mock("../../core/authentication/jwt");
36
+ vi.mock("../../web/utils/iFrameCommunication/InAppWalletIframeCommunicator");
37
+
38
+ describe("InAppWebConnector.connect", () => {
39
+ const mockAuthToken = {
40
+ storedToken: {
41
+ authDetails: {
42
+ userWalletId: "123",
43
+ recoveryShareManagement: "ENCLAVE" as const,
44
+ },
45
+ authProvider: "EmailOtp" as const,
46
+ cookieString: "mock-cookie",
47
+ developerClientId: TEST_CLIENT.clientId,
48
+ isNewUser: false,
49
+ jwtToken: "mock-jwt-token",
50
+ shouldStoreCookieString: true,
51
+ },
52
+ };
53
+
54
+ const connector = new InAppWebConnector({
55
+ client: TEST_CLIENT,
56
+ });
57
+ const mockWallet = createWalletAdapter({
58
+ adaptedAccount: TEST_ACCOUNT_A,
59
+ client: TEST_CLIENT,
60
+ chain: ethereum,
61
+ onDisconnect: () => {},
62
+ switchChain: () => {},
63
+ });
64
+ const mockAccount = mockWallet.getAccount();
65
+ if (!mockAccount) {
66
+ throw new Error("mockAccount is undefined");
67
+ }
68
+
69
+ it("should handle email authentication", async () => {
70
+ vi.mocked(verifyOtp).mockResolvedValueOnce(mockAuthToken);
71
+
72
+ const result = await connector.connect({
73
+ strategy: "email",
74
+ email: "test@example.com",
75
+ verificationCode: "123456",
76
+ });
77
+
78
+ expect(verifyOtp).toHaveBeenCalledWith({
79
+ strategy: "email",
80
+ email: "test@example.com",
81
+ verificationCode: "123456",
82
+ client: TEST_CLIENT,
83
+ ecosystem: undefined,
84
+ });
85
+
86
+ expect(result).toBeDefined();
87
+ });
88
+
89
+ it("should handle wallet authentication", async () => {
90
+ vi.mocked(siweAuthenticate).mockResolvedValueOnce(mockAuthToken);
91
+
92
+ const mockWallet = createWalletAdapter({
93
+ adaptedAccount: TEST_ACCOUNT_A,
94
+ client: TEST_CLIENT,
95
+ chain: ethereum,
96
+ onDisconnect: () => {},
97
+ switchChain: () => {},
98
+ });
99
+
100
+ await connector.connect({
101
+ strategy: "wallet",
102
+ chain: ethereum,
103
+ wallet: mockWallet,
104
+ });
105
+
106
+ expect(siweAuthenticate).toHaveBeenCalledWith({
107
+ wallet: mockWallet,
108
+ chain: ethereum,
109
+ client: TEST_CLIENT,
110
+ ecosystem: undefined,
111
+ });
112
+ });
113
+
114
+ it("should handle guest authentication", async () => {
115
+ vi.mocked(guestAuthenticate).mockResolvedValueOnce(mockAuthToken);
116
+
117
+ await connector.connect({
118
+ strategy: "guest",
119
+ });
120
+
121
+ expect(guestAuthenticate).toHaveBeenCalled();
122
+ });
123
+
124
+ it("should handle backend authentication", async () => {
125
+ vi.mocked(backendAuthenticate).mockResolvedValueOnce(mockAuthToken);
126
+
127
+ await connector.connect({
128
+ strategy: "backend",
129
+ walletSecret: "secret123",
130
+ });
131
+
132
+ expect(backendAuthenticate).toHaveBeenCalledWith({
133
+ walletSecret: "secret123",
134
+ client: TEST_CLIENT,
135
+ ecosystem: undefined,
136
+ });
137
+ });
138
+
139
+ it("should handle oauth authentication", async () => {
140
+ vi.mocked(loginWithOauth).mockResolvedValueOnce(mockAuthToken);
141
+
142
+ await connector.connect({
143
+ strategy: "google",
144
+ });
145
+
146
+ expect(loginWithOauth).toHaveBeenCalledWith({
147
+ authOption: "google",
148
+ client: TEST_CLIENT,
149
+ ecosystem: undefined,
150
+ closeOpenedWindow: undefined,
151
+ openedWindow: undefined,
152
+ });
153
+ });
154
+
155
+ it("should throw error for invalid strategy", async () => {
156
+ await expect(
157
+ connector.connect({
158
+ // @ts-expect-error invalid strategy
159
+ strategy: "invalid",
160
+ }),
161
+ ).rejects.toThrow("Invalid param: invalid");
162
+ });
163
+ });
@@ -5,6 +5,7 @@ import type { SocialAuthOption } from "../../../../wallets/types.js";
5
5
  import type { Account } from "../../../interfaces/wallet.js";
6
6
  import { getUserStatus } from "../../core/actions/get-enclave-user-status.js";
7
7
  import { authEndpoint } from "../../core/authentication/authEndpoint.js";
8
+ import { backendAuthenticate } from "../../core/authentication/backend.js";
8
9
  import { ClientScopedStorage } from "../../core/authentication/client-scoped-storage.js";
9
10
  import { guestAuthenticate } from "../../core/authentication/guest.js";
10
11
  import { customJwt } from "../../core/authentication/jwt.js";
@@ -351,6 +352,13 @@ export class InAppWebConnector implements InAppConnector {
351
352
  storage: webLocalStorage,
352
353
  });
353
354
  }
355
+ case "backend": {
356
+ return backendAuthenticate({
357
+ client: this.client,
358
+ walletSecret: args.walletSecret,
359
+ ecosystem: this.ecosystem,
360
+ });
361
+ }
354
362
  case "wallet": {
355
363
  return siweAuthenticate({
356
364
  ecosystem: this.ecosystem,
@@ -387,6 +395,7 @@ export class InAppWebConnector implements InAppConnector {
387
395
  const authToken = await this.passkeyAuth(args);
388
396
  return this.loginWithAuthToken(authToken);
389
397
  }
398
+ case "backend":
390
399
  case "phone":
391
400
  case "email":
392
401
  case "wallet":
@@ -39,6 +39,7 @@ export type OAuthOption = SocialAuthOption | "guest";
39
39
  export const authOptions = [
40
40
  ...socialAuthOptions,
41
41
  "guest",
42
+ "backend",
42
43
  "email",
43
44
  "phone",
44
45
  "passkey",