Compare commits

...
Author SHA1 Message Date
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
04c607ccde Version Packages (#1556)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-29 10:23:47 -07:00
Mariano FuentesandGitHub 926dd7b03f [CLI] - Descriptions improvements, deprecate Release (#1558) 2023-08-29 17:01:20 +00:00
Manan TankandGitHub e00dd12357 [sdk] Use default import for EventEmitter (#1557) 2023-08-29 15:49:09 +00:00
iketwandGitHub cdc08c5528 [RN] Use regular import for coinbase connector (#1546) 2023-08-29 13:23:43 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
4df0c2ee10 Version Packages (#1542)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-28 17:36:13 -07:00
Mariano FuentesandGitHub 48a8f9385e [CLI] - Update cors restrictions on login (#1552) 2023-08-29 00:20:07 +00:00
Joaquim VergesandGitHub a91776e121 [all] fix changesets (#1553) 2023-08-28 17:12:24 -07:00
Joaquim VergesandGitHub f5aed34d3c update chains + fix opbnb-testnet (#1551) 2023-08-29 00:02:20 +00:00
0f02706906 Use auth token for CLI (#1422)
Co-authored-by: Adam Majmudar <[email protected]>
2023-08-28 16:42:07 +00:00
iketwandGitHub eb463735e2 [React/Wallets] Adds a new RainbowWallet that supports Rainbow browser extension (#1544) 2023-08-28 13:00:31 +00:00
Joaquim VergesandGitHub adec589ead [SDK] Expose joinAbis() utility function (#1545) 2023-08-28 03:30:51 +00:00
saminaandGitHub e5246f2667 Update README.md (#1531) 2023-08-26 00:53:32 +00:00
b29ec675f9 [react] export ConnectModalInline component for ConnectWallet playground (#1532)
Co-authored-by: Joaquim Verges <[email protected]>
2023-08-26 00:27:56 +00:00
Joaquim VergesandGitHub b30566c684 [Chains] updated chains (#1540) 2023-08-26 00:15:47 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
182a4e7e8f Version Packages (#1528)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-25 09:03:36 -07:00
iketwandGitHub 8b82f3c59c [CLI] Adds support for PWA Vite template (#1538) 2023-08-25 15:38:21 +00:00
YashandGitHub f59b729f8b [SDK] Fix auto-factory deployment: correct bytecode format (#1537) 2023-08-25 14:19:39 +00:00
iketwandGitHub 387dddbd87 [RN] Adds switchToActiveChain to the ConnectWallet button (#1536) 2023-08-25 13:10:17 +00:00
YashandGitHub 911e14fcac [Chains] Add Chiliz Spicy testnet (#1530) 2023-08-24 18:35:05 +00:00
cd6b07b591 feat(sdk): centralize contract reads (#1520)
Co-authored-by: Joaquim Verges <[email protected]>
2023-08-24 04:29:26 +00:00
YashandGitHub 154c55add5 Contracts version 3.9.3-0 (#1527) 2023-08-24 03:33:49 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
f202f597ca Version Packages (#1517)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-23 20:25:07 -07:00
YashandGitHub 91f0245be7 [SDK] Fix getChainProvider (#1526) 2023-08-24 00:00:03 +00:00
Joaquim VergesandGitHub ae74b8ef62 [SDK] separate ERC1155Supply extension from ERC1155 (#1523) 2023-08-23 22:23:17 +00:00
YashandGitHub 5a373a7509 [SDK] Correct polygon rpc for fetching published contract (#1525) 2023-08-23 19:22:16 +00:00
Manan TankandGitHub 088547f763 [react] various ConnectWallet improvements (#1522) 2023-08-23 17:48:04 +00:00
586e91dbe6 [SDK] Publish dynamic contract (#1488)
Co-authored-by: Nacho Iacovino <[email protected]>
2023-08-23 14:27:40 +00:00
Joaquim VergesandGitHub f65578d637 [SDK] Optimize contract resolution + Fallback to bytecode extension detection for un-imported contracts (#1498) 2023-08-23 00:03:52 +00:00
447d984653 [SDK] Airdrops (#1288)
Co-authored-by: Atharva Deosthale <[email protected]>
2023-08-22 13:26:31 +00:00
nkrishangandGitHub 34a3bb8ae3 [SDK][REACT] Update contracts release (#1518) 2023-08-22 04:31:36 +00:00
Joaquim VergesandGitHub bc003c2fef [SDK] Return early for claim checks when possible (#1516) 2023-08-22 00:01:06 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
c88fa57591 Version Packages (#1509)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-21 12:17:36 -07:00
Jonas DanielsandGitHub c12f0874b4 feat(chains): add new chains (#1513) 2023-08-21 18:20:53 +00:00
Jonas DanielsandGitHub 184c325ab2 fix(chains): Update icon URL for chains 37 and 47 (#1508) 2023-08-19 02:19:31 +00:00
046c9ad604 moved res.json() to avoid getting JSON error in console (#1501)
Co-authored-by: Jonas Daniels <[email protected]>
2023-08-19 02:09:58 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
2a7bbf8665 Version Packages (#1507)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-18 18:18:39 -07:00
Jonas DanielsandGitHub f97ddf4c7f [chains] - add xpla chains & update chains (#1506) 2023-08-19 01:01:08 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
66c53360cd Version Packages (#1504)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-18 16:04:05 -07:00
Joaquim VergesandGitHub bd1fcbae32 [SDK] Expose Transaction.populateTransaction() (#1505) 2023-08-18 19:05:05 +00:00
Joaquim VergesandGitHub e196264172 [SDK] Pass custom storage to internal SDK instances (#1503) 2023-08-18 16:21:20 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
c9deda6f4b Version Packages (#1487)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-16 07:44:08 -07:00
b91d3e9901 Small fix for Promise.all() (#1490)
Co-authored-by: Joaquim Verges <[email protected]>
2023-08-15 22:06:07 -07:00
Joaquim VergesandGitHub d248aa2c5a [SDK] Let users pass their own IPFS download timeout and fix gateway fallback logic (#1500) 2023-08-15 19:20:36 -07:00
Mariano FuentesandGitHub 8f3b685ad2 [CLI] Deploy to show public gateway url after upload (#1499) 2023-08-15 22:28:56 +00:00
iketwandGitHub 26349f311d [RN] Improves loading states when disconnecting and loading balances (#1496) 2023-08-14 22:56:26 +00:00
YashandGitHub 2897576513 [SDK] Custom base fee for cronos testnet (#1495) 2023-08-14 22:39:23 +00:00
iketwandGitHub 07fb1b5ffa [RN] Adds support for raw WalletConnect (#1489) 2023-08-13 16:24:11 +00:00
iketwandGitHub 300a3c6f04 [ReactCore] Add better error messages when using hooks outside the <ThirdwebProvider /> (#1486) 2023-08-12 14:21:31 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
26367c04f3 Version Packages (#1483)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-11 16:07:25 -07:00
Joaquim VergesandGitHub 39e2af6f2f [Wallets] correct gas estimation for polygon/mumbai (#1484) 2023-08-11 22:16:29 +00:00
Joaquim VergesandGitHub a5ba9e4fbf [SDK] Separate Account and AccountPermissions extensions (#1480) 2023-08-11 20:31:54 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
c9b0131acd Version Packages (#1478)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-10 15:51:09 -07:00
Joaquim VergesandGitHub 34b315993c [Wallets] use RPCs with no client id when adding to external wallets (#1477) 2023-08-10 22:33:47 +00:00
iketwandGitHub 14d9a71c92 [RN] Deprecates magicWallet in favor of magicLink for consistency (#1479) 2023-08-10 21:22:49 +00:00
YashandGitHub 7f5311222b [SDK] Enable dynamic contract deployment with any evm (#1468) 2023-08-10 19:32:51 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
b4847dd134 Version Packages (#1464)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-09 16:00:33 -07:00
Danny FridayandGitHub cf82c3b58c Improve error logging when authentication fails (#1475) 2023-08-09 21:37:09 +00:00
Adam MajmudarandGitHub a17326634e [Chains] Add back scroll-alpha-testnet (#1474) 2023-08-09 19:24:04 +00:00
70c4a119d6 Add sdk information in headers for various services (#1472)
Co-authored-by: Manan Tank <[email protected]>
2023-08-09 19:22:46 +00:00
Joaquim VergesandGitHub f0443bd989 [SDK] Expose erc721.claimConditions.getSupplyClaimedByWallet() (#1471) 2023-08-09 19:05:11 +00:00
Jonas DanielsandGitHub 73462ef108 [multi] only evaluate auth token if it is a valid string (#1473) 2023-08-09 18:07:26 +00:00
Jonas DanielsandGitHub 27c225a512 feat(urls): add clientId parameter to getGatewayUrlForCid (#1470) 2023-08-09 03:20:53 +00:00
Jonas DanielsandGitHub cb1c9937fa refactor(urls): Simplify authentication strategy handling (#1469) 2023-08-08 21:07:27 +00:00
Kien NgoandGitHub 588b210601 [react, react-native]Add option to hide the "Request Testnet Funds" button (#1458) 2023-08-08 08:38:37 -07:00
Phillip HoandGitHub 7e483ec97f [service-utils] Silence publishUsageEvents() output (#1466) 2023-08-08 00:20:09 +00:00
Joaquim VergesandGitHub c902901cff [All] Added PR template (#1465) 2023-08-07 23:57:31 +00:00
Phillip HoandGitHub 205018f6e1 [service-utils] Add userOpHash field (#1463) 2023-08-07 23:41:43 +00:00
FirekeeperandGitHub 269e68c0a1 Firekeeper/xai and large chainids (#1461) 2023-08-07 23:14:23 +00:00
Jonas DanielsandGitHub 2888efc065 build: Add TW_SECRET_KEY to test and e2e environments (#1462) 2023-08-07 21:14:00 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
c753641570 Version Packages (#1457)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-07 13:21:25 -07:00
Manan TankandGitHub 4b0e63dcc0 [wallets] Save oAuthRedirectResult when auto connecting Magic Link with social login (#1460) 2023-08-07 16:48:02 +00:00
6979810de5 Fix typo in auth error message (#1454)
Co-authored-by: Jonas Daniels <[email protected]>
2023-08-06 04:10:05 +00:00
Jonas DanielsandGitHub 4c37af49aa feat: allow overriding the upload server url for IpfsUploader (#1455) 2023-08-05 21:12:33 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
7858632429 Version Packages (#1451)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-04 18:15:57 -07:00
Phillip HoandGitHub 0647f12498 [service-utils] Remove optional fields in logging (#1453) 2023-08-05 00:24:56 +00:00
3e1c4045e7 chore: Add logHttpRequest helper func (#1448)
Co-authored-by: Danny Friday <[email protected]>
2023-08-04 23:18:54 +00:00
iketwandGitHub 3ba8ba4288 [RN] Upgrade coinbase wallet sdk (#1452) 2023-08-04 22:28:37 +00:00
Adam MajmudarandGitHub dfd120a3a9 [Auth] Split into functions & expose all auth functions on client (#1392) 2023-08-04 22:09:11 +00:00
Joaquim VergesandGitHub 262edc6a46 [SDK] Sanitize shared metadata descriptions strings (#1450) 2023-08-04 19:35:03 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
4f79053ec3 Version Packages (#1446)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-04 10:41:06 -07:00
Joaquim VergesandGitHub 2a91113a76 [SDK] Revert sanitizing inputs (#1449) 2023-08-04 10:31:04 -07:00
Danny FridayandGitHub b103872daf Export extractAuthorizationData for CF Workers (#1447) 2023-08-03 23:54:08 +00:00
Mariano FuentesandGitHub 7f54012ec6 CLI warnings (#1442) 2023-08-03 22:48:25 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
df36e27f32 Version Packages (#1431)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-03 15:30:22 -07:00
Danny FridayandGitHub 8c0dc9c880 Switch to domain with good reputation (#1443) 2023-08-03 22:16:04 +00:00
Joaquim VergesandGitHub 074a3eb01c [SDK] add jsdoc for deployOpenEdition (#1445) 2023-08-03 21:58:23 +00:00
Joaquim VergesandGitHub a5d0be939a [SDK] Optimize claimConditions.getAll() (#1444) 2023-08-03 21:50:02 +00:00
Phillip HoandGitHub 5ec0f064d2 [service-utils] Use aws4fetch for AWS calls from CF workers (#1440) 2023-08-03 20:40:46 +00:00
Joaquim VergesandGitHub becbb63736 [SDK] Sanitize NFT description strings (#1441) 2023-08-03 20:33:39 +00:00
farhanW3andGitHub 5ee700e804 updated error messages for API Keys (#1437) 2023-08-03 00:49:15 +00:00
Joaquim VergesandGitHub 67b145b94d [SDK] Expose deployPublishedContract alias (#1439) 2023-08-03 00:35:07 +00:00
Joaquim VergesandGitHub c0a6d2f182 [SDK] Expose sdk.deployer.deployOpenEdition() convenience function (#1438) 2023-08-03 00:11:05 +00:00
Joaquim VergesandGitHub fd9816556f [Wallets] better gas estimation for bundler calls (#1436) 2023-08-02 23:13:47 +00:00
Phillip HoandGitHub 2a3cd62dc9 Fix: Use string type for gasPricePerUnit (#1435) 2023-08-02 21:59:39 +00:00
iketwandGitHub c9bf4f05c1 [SDK] pass empty string if clientId is undefined (#1433) 2023-08-02 20:16:05 +00:00
Jonas DanielsandGitHub 9f5adc5c5c feat: Upgrade contracts package (#1432) 2023-08-02 19:39:50 +00:00
Phillip HoandGitHub d01e6396d1 [service-utils] Add a usage tracking helper fn to publish events (#1424) 2023-08-02 19:05:03 +00:00
nkrishangandGitHub 2283d21027 [SDK][REACT] Create useAccountAdmins and useAccountAdminsAndSigners (#1423) 2023-08-02 16:39:03 +00:00
iketwandGitHub ab36d84f1c [React] Allow passing secretKey for server-side rendering (#1429) 2023-08-02 16:17:24 +00:00
Manan TankandGitHub a9f2ff73c9 [wallets, react-core, react] minor fixes (#1430) 2023-08-02 15:47:18 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
9a7b2098ee Version Packages (#1426)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-08-02 08:45:39 -07:00
Mariano FuentesandGitHub 2b96f71e19 see if this fixes bug with creating directory (#1419) 2023-08-02 05:24:22 +00:00
3b6b0746b3 [service-utils] - allow account level auth via jwt (#1411)
Co-authored-by: Tair Asim <[email protected]>
2023-08-02 05:23:15 +00:00
iketwandGitHub b0ec1d8083 [Wallets] Add plugin to transform flow types to fix RN FlatList bug (#1425) 2023-08-01 23:09:45 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
0af916e42e Version Packages (#1418)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-31 19:21:41 -07:00
iketwandGitHub fbde927a0c [Wallets] Add transform private methods plugin for RN (#1421) 2023-08-01 02:04:50 +00:00
Joaquim VergesandGitHub 952009cd73 [service-utils] authorize calls if domains are set to * (#1420) 2023-07-31 18:14:20 -07:00
Joaquim VergesandGitHub 580e77b170 [AuthService] return accountId from authorize call (#1417) 2023-07-31 20:48:02 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
d275493c59 Version Packages (#1416)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-29 00:35:56 -07:00
Joaquim VergesandGitHub 256ee0d5ec [All] downgrade preconstruct to 2.7.0 (#1415) 2023-07-29 00:24:54 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
b4e295d885 Version Packages (#1377)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-28 13:12:02 -07:00
Jarrod WattsandGitHub fa48ab6942 fix: postinstall check keeps adding to itself (#1412) 2023-07-28 18:52:53 +00:00
YashandGitHub cbf486c210 [SDK] Queryable feature (#1408) 2023-07-28 16:34:48 +00:00
Jonas DanielsandGitHub 247cf57d37 [auth] - expose getToken() helper (#1410) 2023-07-28 02:48:59 +00:00
Jonas DanielsandGitHub b1e8c8e231 [many] - update dependencies & fix test cases (#1409) 2023-07-27 21:22:37 +00:00
06b4f29831 [WALLET + REACT] Add Blocto Wallet (#1361)
Co-authored-by: Manan Tank <[email protected]>
2023-07-27 07:12:22 -07:00
Jonas DanielsandGitHub 0a5eb19d67 [chains] - fix FTD-1952 (#1407) 2023-07-27 05:39:30 +00:00
Jonas DanielsandGitHub 4ed662e841 chore(sdk) use secret key env var in tests (#1406) 2023-07-27 05:29:05 +00:00
Jonas DanielsandGitHub 75587c8b38 refactor: sort explorers in generated packages (#1405) 2023-07-27 04:51:34 +00:00
iketwandGitHub 51b3604021 [Storage/RN] Read custom upload url from env (#1404) 2023-07-27 01:36:09 +00:00
5340085823 [CLI] Update base contract constructors (#1389)
Co-authored-by: Jonas Daniels <[email protected]>
2023-07-26 19:53:06 +00:00
iketwandGitHub aface46d74 [SDK] Check process exists before accessing it (#1398) 2023-07-26 19:17:22 +00:00
Junya KonoandGitHub 5835b62496 add packages/chains/utils test (#1401) 2023-07-26 11:23:59 -07:00
Manan TankandGitHub 7ae9f4cda1 [wallets] Fix LocalWallet's loadOrCreate method (#1390) 2023-07-26 18:05:58 +00:00
Jonas DanielsandGitHub 3152d4e9b4 [chains] - update chains (#1399) 2023-07-26 17:45:41 +00:00
Manan TankandGitHub 277cfd5ce1 [wallets] Fix rainbowWallet, trustWallet, zerionWallet connection on mobile (#1295) 2023-07-26 17:42:00 +00:00
Manan TankandGitHub 72fa3d2225 [react-core] Fix Chain override (#1397) 2023-07-26 16:45:41 +00:00
Manan TankandGitHub 9a329178ef [react] Auto select localWallet if only option in Safe/Smart wallet (#1396) 2023-07-26 13:01:49 +00:00
YashandGitHub 01cc54087b [SDK] ZKSync: Marketplace addresses (#1395) 2023-07-26 12:35:07 +00:00
YashandGitHub 09b3b339e6 Remove incorrect Royalty Engine addresses (#1394) 2023-07-26 12:34:01 +00:00
aa6bdd0809 [SDK][REACT-CORE] Simplify Account Permissions (#1387)
Co-authored-by: Joaquim Verges <[email protected]>
2023-07-26 05:24:28 +00:00
iketwandGitHub ff4fb7d360 [RN] Extend thirdweb SDK and pass the correct RN storage (#1391) 2023-07-25 19:34:07 +00:00
Manan TankandGitHub 9acf6854df [wallets, react] Add social login in Magic (#1334) 2023-07-25 16:16:01 +00:00
YashandGitHub a9f9a40345 [SDK] Royalty registry and royalty engine support (#1303) 2023-07-25 12:39:16 +00:00
YashandGitHub 8e6e55b154 [SDK] Any EVM deploys: Add chains with custom gas (#1053) 2023-07-25 08:48:07 +00:00
Joaquim VergesandGitHub 37b88e3bc3 [SDK] fix ambiguous cast (#1388) 2023-07-25 00:05:51 +00:00
385895ca92 Expose account contract in SmartWallet (#1307)
Co-authored-by: Joaquim Verges <[email protected]>
2023-07-25 00:04:27 +00:00
farhanW3andGitHub 5e58c79926 Service Utils Response Updates (#1386) 2023-07-24 23:54:16 +00:00
2025b8cb8d [Wallets] Add transfer & balance (#1369)
Co-authored-by: Joaquim Verges <[email protected]>
2023-07-24 23:43:42 +00:00
iketwandGitHub cc5e2ec51f [RN] Adds the ability to switch between the supported chains defined in the ThirdwebProvider (#1385) 2023-07-24 23:29:00 +00:00
Mariano FuentesandGitHub 0402b8bb37 CLI mask secret (#1384) 2023-07-24 19:19:32 +00:00
YashandGitHub 5fe3cec894 [SDK] Update airdrop addresses ZKSync (#1383) 2023-07-24 15:17:33 +00:00
YashandGitHub 98009cb3ca Airdrop contract addresses on ZKSync (#1380) 2023-07-23 15:59:06 +00:00
Manan TankandGitHub 60fbb767c1 [wallets, react] Match Coinbase Native modal theme to <ConnectWallet/> (#1379) 2023-07-21 22:21:49 +00:00
Manan TankandGitHub 5a02c5ec02 Add icon in MinimalChain (#1378) 2023-07-21 18:12:21 +00:00
iketwandGitHub 48ca58b7aa [Chains/SDK] Add bundleId when adding clientId (#1376) 2023-07-21 14:58:35 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
046cd0bb5d Version Packages (#1375)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-20 14:27:05 -07:00
Jonas DanielsandGitHub 7cb55e7051 add empty changeset to bump version (#1374) 2023-07-20 14:22:45 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
4939a3d0ba Version Packages (#1373)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-20 14:13:25 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
550c80fdfa Version Packages (#1372)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-20 13:57:59 -07:00
Mariano FuentesandGitHub 79ebbbcad9 CLI --ci bug fix (#1370) 2023-07-20 19:01:19 +00:00
Jonas DanielsandGitHub d665954fee refactor: Update chain configuration for 742, 7332, 167005, 167006, and 9223 (#1371) 2023-07-20 18:22:43 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
a8258b5c15 Version Packages (#1367)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-18 21:58:35 -07:00
Jonas DanielsandGitHub b8086435a4 refactor: Update icon properties in IoTeX Network chains (#1368) 2023-07-19 04:39:34 +00:00
6cc4b8d28b feat(chain): add iotex chain icon (#1358)
Co-authored-by: Jonas Daniels <[email protected]>
2023-07-18 21:26:06 -07:00
Jonas DanielsandGitHub 02ab92cc5c feat(chains): add additional chains (#1366) 2023-07-19 04:01:24 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
b6b52ea56b Version Packages (#1360)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-18 18:36:39 -07:00
Tair AsimandGitHub da95dce580 [service-utils] handle port in the origin check (#1365) 2023-07-18 21:43:35 +00:00
iketwandGitHub 44dbf283c9 [RN/Storage] Use storage.downloader in RN and pass the clientId (#1362) 2023-07-18 21:04:00 +00:00
+1 d844714609 [All Packages] Pass keys in all packages (#1316)
Co-authored-by: Jonas Daniels <[email protected]>
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
Co-authored-by: Mariano Fuentes <[email protected]>
Co-authored-by: Mariano Fuentes <[email protected]>
Co-authored-by: Adam Majmudar <[email protected]>
Co-authored-by: Farhan Khwaja <[email protected]>
Co-authored-by: Nacho Iacovino <[email protected]>
Co-authored-by: 0xFirekeeper <[email protected]>
2023-07-17 23:54:41 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
5cea8436c1 Version Packages (#1341)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-17 15:10:05 +02:00
Joaquim VergesandGitHub dac8fa7d98 [SDK] Fix getOwned missing last owner for OpenEdition contracts (#1357) 2023-07-15 22:13:58 +00:00
Joaquim VergesandGitHub 7a6534d1a9 [React] Fix wrong enabled logic in useOwnedNFTs (#1356) 2023-07-15 05:02:06 +00:00
Tair AsimandGitHub d5aee62bf4 [service-utils] remove unused type (#1355) 2023-07-14 23:33:28 +00:00
Tair AsimandGitHub 0bfdedd4ba [service-utils] fix enforce auth param (#1354) 2023-07-14 23:18:10 +00:00
Joaquim VergesandGitHub c5761b99e9 [Wallets] Switch local wallet to seed based wallets (#1352) 2023-07-14 23:07:59 +00:00
Tair AsimandGitHub 42d9ab68d9 [service-utils] allow to skip auth for backwards compat (#1353) 2023-07-14 22:27:14 +00:00
farhanW3andGitHub fd0650dcac Farhan/service utils fix (#1351) 2023-07-14 20:52:30 +00:00
Tair AsimandGitHub ddb3dabe69 [service-utils] allow target addresses and api url stringy (#1349) 2023-07-14 19:17:28 +00:00
Manan TankandGitHub b96a228273 [wallets, react] Various improvements (#1350) 2023-07-14 18:26:26 +00:00
Tair AsimandGitHub 781e26d896 [service-utils] authorize bundle (#1347) 2023-07-14 16:47:22 +00:00
Tair AsimandGitHub f7392138ee [service-utils] api url fix (#1346) 2023-07-14 09:52:23 +00:00
Jonas DanielsandGitHub 5eb6fc1bf3 [service-utils] - rewrite (#1345) 2023-07-14 08:21:03 +00:00
Danny FridayandGitHub 7dc685bbec Add creatorWalletAddress to ApiKey type (#1343) 2023-07-14 04:11:26 +00:00
Jonas DanielsandGitHub 4915ac50f8 [service-utils] add relayer service definition (#1342) 2023-07-14 04:02:47 +00:00
Jonas DanielsandGitHub d724ad85c5 [service-utils] - fix use endpoint (#1340) 2023-07-14 00:27:25 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
1d32b299a0 Version Packages (#1337)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-13 16:02:54 -07:00
Tair AsimandGitHub cfa7ecbc9a service-utils: remove crypt + unfetch (#1339) 2023-07-13 22:20:42 +00:00
Jonas DanielsandGitHub 8dd7540c45 [storage] - remove HEAD request pre upload (#1338) 2023-07-13 21:57:30 +00:00
07c7d97c28 [service-utils] - initially add package (#1333)
Co-authored-by: Tair Asim <[email protected]>
2023-07-13 20:51:55 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
47e931e0dd Version Packages (#1336)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-13 09:25:13 -07:00
Jonas DanielsandGitHub 0407b2c2f3 [chains] update chains (#1335) 2023-07-13 16:01:04 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
55ffb176f2 Version Packages (#1331)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-12 19:28:04 -07:00
Adam MajmudarandGitHub a9093bcf28 Override binance chain slug (#1330) 2023-07-12 19:17:58 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
db964131b4 Version Packages (#1329)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-12 18:56:29 -07:00
Adam MajmudarandGitHub 4393b22805 Make base default chain (#1328) 2023-07-12 18:42:27 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
b28c3a5a67 Version Packages (#1327)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-12 18:29:43 -07:00
Adam MajmudarandGitHub 4068219145 [Chains] Add support for base (#1326) 2023-07-13 00:25:33 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
03d1a6d73b Version Packages (#1311)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-11 14:34:02 -07:00
YashandGitHub fd74d79180 [Chains] Update chains: Linea Mainnet (#1320) 2023-07-11 17:42:19 +00:00
Jonas DanielsandGitHub 35f20ceb4f [all] add package resolutions (#1315) 2023-07-11 01:27:22 +00:00
iketwandGitHub db68bd04cd Passes API key to all packages (#1314) 2023-07-10 23:06:05 +00:00
Manan TankandGitHub 3df86ad16f [react] ConnectWallet UI fixes (#1310) 2023-07-10 15:42:50 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
4389083ca3 Version Packages (#1294)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-09 22:16:24 -07:00
Jonas DanielsandGitHub 4961b597a0 unblock storage (#1309) 2023-07-10 04:54:23 +00:00
nkrishangandGitHub 7e044c664d [SDK] Create ERC721LoyaltyCard and ERC721UpdatableMetadata (#1299) 2023-07-08 00:55:24 +00:00
iketwandGitHub 498df5d69a [RN] Fix ImageSvgUri render by trying Image first (#1306) 2023-07-07 16:47:53 +00:00
Nacho IacovinoandGitHub b8d4930305 [SDK] Add social_urls to CommonContractSchema (#1305) 2023-07-07 16:30:51 +00:00
Nacho IacovinoandGitHub 2c0bb07899 [SDK] Fix pack code snippets (#1304) 2023-07-07 15:24:34 +00:00
Joaquim VergesandGitHub 72ada47596 [SDK] Proper handling of custom contract metadata types (#1298) 2023-07-07 04:38:27 +00:00
iketwandGitHub dc9eee735c [RN] Improve svg rendering (#1300) 2023-07-07 00:46:12 +00:00
Adam MajmudarandGitHub b4aee9b591 [Wallets] Add all supported chains to safe server urls (#1301) 2023-07-07 00:38:39 +00:00
FirekeeperandGitHub b5c6eedb38 Firekeeper/default chains zksync (#1297) 2023-07-06 22:22:02 +00:00
iketwandGitHub 8672c8533c Ike/demo (#1283) 2023-07-06 22:08:04 +00:00
FirekeeperandGitHub bb207473f8 Firekeeper/default wallets wcv2 (#1293) 2023-07-06 21:00:46 +00:00
Tair AsimandGitHub 10b3a717da fix: handling authz errors from smart wallet connector (#1292) 2023-07-06 19:08:49 +00:00
Josh SteinandGitHub aa81bedaf2 deps: change Taro to Bubs testnet (#1289) 2023-07-06 03:56:52 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
b4676e1b4e Version Packages (#1279)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-07-04 11:48:14 -07:00
Jonas DanielsandGitHub 0135a7790c [storage] - fix head request schema (#1287) 2023-07-04 18:22:56 +00:00
Jonas DanielsandGitHub 2d088d367c [storage] - fix double / case (#1286) 2023-07-04 17:43:01 +00:00
Jonas DanielsandGitHub 546353a479 [storage] - add additional fallback gateways (#1285) 2023-07-04 17:08:03 +00:00
9daf044926 [STORAGE] Use subdomain-based paths for our IPFS gateway (#1232)
Co-authored-by: Jonas Daniels <[email protected]>
2023-07-04 16:14:05 +00:00
Kien NgoandGitHub 7054f9f016 Fix #1201 (#1282) 2023-07-01 00:48:32 +00:00
nkrishangandGitHub a3bb17cb33 [SDK] Handle ERC4337Signer correctly in signTypedDataInternal (#1281) 2023-06-30 23:30:29 +00:00
d03645aefd Omit marketplacev3 filter parameters that have no effect (#1221)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-30 23:22:24 +00:00
Mariano FuentesandGitHub 53626f8100 Don't rely on package.json to run export (#1280) 2023-06-30 16:59:43 +00:00
Jonas DanielsandGitHub 8a389f1295 [all] - update dependencies (#1278) 2023-06-30 02:55:20 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
4e5eb13b82 Version Packages (#1266)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-06-29 19:11:03 -07:00
2b11353909 [SDK] remove ethers/lib/utils dependency (#1277)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-30 01:10:47 +00:00
Manan TankandGitHub 5882091eab [chains] Fix RPC override issue (#1276) 2023-06-29 22:27:59 +00:00
Mariano FuentesandGitHub 8fc5f204b0 Fix bugs with cli deploy (#1274) 2023-06-29 18:11:25 +00:00
nkrishangandGitHub c953571588 mass rename smart-wallet -> account (#1271) 2023-06-29 12:26:48 +00:00
Manan TankandGitHub edcd22d612 [react-core] Add autoConnectTimeout (#1273) 2023-06-29 12:19:43 +00:00
iketwandGitHub 0d5503aae9 [RN] Only handle link if coinbase in supportedWallets (#1270) 2023-06-28 21:56:12 +00:00
Manan TankandGitHub 998e521733 [wallets, react] expose advancedOptions in paper (#1269) 2023-06-28 21:08:34 +00:00
FirekeeperandGitHub be606dd3c9 [paper] set signer null on disconnect (#1267) 2023-06-28 17:26:35 +00:00
d794b8f9f4 update: Add zerion to useInstalledWallets (#1210)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-28 16:50:36 +00:00
YashandGitHub 21b29490d4 [SDK] Tests for new publish+deploy flow (#1244) 2023-06-28 16:23:36 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
7b1d62b323 Version Packages (#1262)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-06-28 08:07:57 -07:00
Manan TankandGitHub e78da6b36c [wallets] Wallet connect v2 corrections (#1265) 2023-06-28 13:34:42 +00:00
ed711c8cb2 [Wallets] Use min number of chains if user passes more than 50 chains (#1263)
Co-authored-by: Manan Tank <[email protected]>
2023-06-28 12:04:28 +00:00
05a7495a13 [Wallets] handle passing RPC urls to SmartWallet config (#1255)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-28 07:20:04 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
11bb053246 Version Packages (#1261)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-06-27 22:16:09 -07:00
efb3546ec8 [Wallets] Fix. Respect dev passed chains. (#1259)
Co-authored-by: Manan Tank <[email protected]>
2023-06-28 05:07:24 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
0a5d2b5bdd Version Packages (#1247)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-06-27 17:36:21 -07:00
FirekeeperandGitHub ac3e019cd1 [unity-js-bridge] wcv2 and paper support (#1256) 2023-06-28 00:28:16 +00:00
3c5dc4804a Migration to WalletConnectV2 (#1215)
Co-authored-by: Manan Tank <[email protected]>
2023-06-28 00:04:07 +00:00
Joaquim VergesandGitHub 30ac3aef84 [SDK] Handle base64 encoded NFTs (#1254) 2023-06-27 23:31:52 +00:00
YashandGitHub ef4cb09219 [SDK] Any EVM deployments: update EIP155 error substrings (#1249) 2023-06-27 22:55:16 +00:00
ad7dae3b16 [React] Stop using useActiveChain deprecated hook (#1253)
Co-authored-by: Nacho Iacovino <[email protected]>
2023-06-27 21:50:28 +00:00
0fd8aa04a9 fix(chains): Celo Alfajores Explorer URL (#1243)
Co-authored-by: Joaquim Verges <[email protected]>
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-27 19:37:23 +00:00
620e89dc25 [React] Export smart wallet hooks (#1248)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-27 19:01:45 +00:00
Nacho IacovinoandGitHub 86d33c4b3e [React] Fix marketplace v3 cache keys (#1251) 2023-06-27 18:06:30 +00:00
Adam MajmudarandGitHub d43f6171d9 Allow setting login payload duration (#1250) 2023-06-27 18:04:33 +00:00
06ca1c407d [SDK] Add tests for SmartWallet and SmartWalletFactory; add smartWallet.setAccess and smartWallet.isAdmin (#1227)
Co-authored-by: Nacho Iacovino <[email protected]>
Co-authored-by: Nacho Iacovino <[email protected]>
2023-06-27 01:57:33 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
c578a437cc Version Packages (#1234)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-06-26 18:42:04 -07:00
Danny FridayandGitHub 0c5b03b8d6 Remove ipfs-2 gateway (#1246) 2023-06-27 00:31:06 +00:00
nkrishangandGitHub 9af346eead [SDK][React] SmartWalletFactory: use getAllAccounts instead of event logs of AccountCreated to get accounts of a factory (#1241) 2023-06-26 17:51:22 +00:00
iketwandGitHub d9fb134ad4 [RN] better design for custom details button (#1245) 2023-06-26 15:25:19 +00:00
Mariano FuentesandGitHub 1c7264b403 Fix install bug (#1240) 2023-06-24 00:59:52 +00:00
Joaquim VergesandGitHub a140ee99b2 add zora extension in auto docs (#1239) 2023-06-24 00:23:07 +00:00
iketwandGitHub 6e1fe6e582 [React] Add Rainbow and Trust wallets connection hooks (#1238) 2023-06-23 23:06:59 +00:00
iketwandGitHub 536b0f1240 [React] Add Rainbow Wallet (#1237) 2023-06-23 22:11:40 +00:00
b626782b0e [React/Wallets] Add Trust Wallet (#1236)
Co-authored-by: Manan Tank <[email protected]>
2023-06-23 21:23:13 +00:00
Nacho IacovinoandGitHub 1d76334dd3 [React] Fix required type for address on useSmartWalletsForAddress (#1235) 2023-06-23 18:44:00 +00:00
nkrishangandGitHub d498c79a91 [SDK] Fix smartWalletFactory.getAllWallets (#1233) 2023-06-23 18:20:03 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
736b45ac8e Version Packages (#1211)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-06-23 10:33:33 -07:00
Nacho IacovinoandGitHub b5e1d3bb2b [React] Add useSmartWalletsForAddress hook (#1230) 2023-06-23 12:00:37 +00:00
Jonas DanielsandGitHub 6816219ac1 [chains] - add/update chains (#1229) 2023-06-22 23:57:03 +00:00
Nacho IacovinoandGitHub 48065bcd91 [SDK] Accept string in shared metadata (#1222) 2023-06-22 23:39:34 +00:00
Manan TankandGitHub a388d07a3d Add Magic Connect support (#1226) 2023-06-22 20:28:04 +00:00
Nacho IacovinoandGitHub 483e2b9109 [SDK] Fix namespace for platformFees (#1225) 2023-06-22 19:24:04 +00:00
Nacho IacovinoandGitHub f7f4f20737 [React + SDK] Better return type for get shared metadata (#1224) 2023-06-22 18:46:57 +00:00
Joaquim VergesandGitHub 6aa6f7e0bd [SDK] fix maxId in getAll for Open Edition contracts (#1223) 2023-06-22 03:42:24 +00:00
d4d9550713 [React + SDK] Add get shared metadata (#1218)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-22 01:56:48 +00:00
iketwandGitHub 3cb298ac4b [RN/Wallets] Fix Coinbase Wallet connection rejection error (#1220) 2023-06-22 00:29:24 +00:00
Joaquim VergesandGitHub c747670b98 [SDK] Fix nextTokenIdToMint for open edition (#1219) 2023-06-22 00:08:55 +00:00
Joaquim VergesandGitHub c08e6ba988 [SDK] Fix claim counts for Open Edition contracts (#1216) 2023-06-21 23:49:27 +00:00
Manan TankandGitHub 60fb188943 [react] Fix safeWallet tree-shaking (#1212) 2023-06-21 20:17:13 +00:00
iketwandGitHub 1ce8558df4 [Wallets] Fix switchChain in WCV2 connector (#1214) 2023-06-21 16:28:16 +00:00
iketwandGitHub 3ce5f9a0c3 [RC/Wallets] Improve error messages for wc and auth (#1213) 2023-06-21 15:45:03 +00:00
3d615a62d0 [SDK] Code abstraction; import/export updates (#1188)
Co-authored-by: Manan Tank <[email protected]>
2023-06-21 14:40:12 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
6ce366f59e Version Packages (#1190)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-06-20 23:26:22 -07:00
8a2d92046a [SDK] update polygon gas station url (#1208)
Co-authored-by: Joaquim Verges <[email protected]>
2023-06-21 06:04:20 +00:00
YashandGitHub 45ae105ed3 [SDK] Minimal forwarders for ZKSync (#1191) 2023-06-21 05:53:53 +00:00
Jonas DanielsandGitHub 23d61cfeff [SDK] - open edition feature (#1193) 2023-06-21 02:33:58 +00:00
nkrishangandGitHub 990c665de9 Feature detection and SDK class for Smart Wallet. (#1134) 2023-06-20 23:46:01 +00:00
Joaquim VergesandGitHub 08eaefcf0b [SDK] shortcut getAllOwners for NFT drops to only check claimed (#1203) 2023-06-20 23:40:36 +00:00
Manan TankandGitHub 3d62278aba [wallets, react, react-core] Add eslint-plugin-better-tree-shaking (#1206) 2023-06-20 20:53:22 +00:00
iketwandGitHub 3ab7d1e975 [ReactNative] Export more components for easy development (#1205) 2023-06-20 19:19:21 +00:00
Manan TankandGitHub c6f44722f9 [sdk] Add eslint-plugin-better-tree-shaking (#1199) 2023-06-20 15:06:30 +00:00
Joaquim VergesandGitHub e0ce4a3759 [SDK] Zora claim extension (#1197) 2023-06-20 04:47:02 +00:00
iketwandGitHub 04416e7c93 [RN] Return connection Promise for better error handling (#1202) 2023-06-19 20:30:41 +00:00
Manan TankandGitHub 5166b24a48 [readme] Update install command for windows in contributing.md (#1200) 2023-06-19 17:29:33 +00:00
Manan TankandGitHub bb7ca20e49 [sdk] Better PURE annotations for tree-shaking (#1198) 2023-06-17 19:34:08 +00:00
Jonas DanielsandGitHub f41f1a2958 [chains] - fix arbitrum goerli (#1192) 2023-06-16 21:55:21 +00:00
Manan TankandGitHub d9b7360d1d [sdk] Refactor erc-721.ts, erc-1155.ts, erc-20.ts (#1196) 2023-06-16 21:36:38 +00:00
Manan TankandGitHub 8941b22682 [sdk] Add PURE annotations for improved tree-shaking (#1189) 2023-06-16 13:51:28 +00:00
github-actions[bot]andGitHub f61beace93 Version Packages (#1158) 2023-06-15 19:49:18 -07:00
Adam MajmudarandGitHub 08403dd9da Expose useSwitchAccount (#1187) 2023-06-16 00:35:25 +00:00
Nacho IacovinoandGitHub 36f3191f3e [React] Fix useIsSmartWalletDeployed cache (#1186) 2023-06-15 23:46:24 +00:00
YashandGitHub 7d2a446ece [SDK] Expose salt input for deployments (#1155) 2023-06-15 21:20:56 +00:00
ab575726fe [unity-js-bridge] add allChains to unity bridge wallet instantiation (#1176)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-15 18:20:02 +00:00
Jonas DanielsandGitHub 8e28b0f5e7 [chains] add zora mainnet (#1185) 2023-06-15 17:57:43 +00:00
Mariano FuentesandGitHub e7f1ce43b0 Detector typo fix (#1184) 2023-06-15 17:46:31 +00:00
Mariano FuentesandGitHub 224b7241dc Bugfix for python detectors (#1183) 2023-06-15 17:20:41 +00:00
iketwandGitHub a0eee749a2 Ike/demo (#1182) 2023-06-15 14:21:13 +00:00
iketwandGitHub 20bbad1abc [SDK] Switch warn to debug console message (#1181) 2023-06-15 12:53:15 +00:00
YashandGitHub a430160e6b [SDK] Util for deterministic direct deployments (#1162) 2023-06-14 23:56:58 +00:00
Mariano FuentesandGitHub 5745481584 Revert Checking for pip and pip3 (#1178) 2023-06-14 21:22:29 +00:00
Mariano FuentesandGitHub afdedb1feb [Install] - Handle pip and pip3 install automatically (#1177) 2023-06-14 20:30:58 +00:00
Manan TankandGitHub 01293857fa [sdk] Tree shaking improvements (#1175) 2023-06-14 17:25:02 +00:00
Nacho IacovinoandGitHub ecdcf82cf3 [React] Add password data-test (#1172) 2023-06-14 00:29:46 +00:00
12b07aad9a [SDK] Fix circular deps issue between metadata-resolver <-> core/sdk (#1167)
Co-authored-by: Joaquim Verges <[email protected]>
2023-06-14 00:20:01 +00:00
Mariano FuentesandGitHub c0e2c9457f Bug fixes for install (#1171) 2023-06-13 23:56:37 +00:00
654b8ab351 [REACT] Add Zerion Wallet (#1160)
Co-authored-by: iketw <[email protected]>
Co-authored-by: Manan Tank <[email protected]>
2023-06-13 17:02:26 +00:00
a5578abf66 [REACT] Reduce circular dependencies (#1164)
Co-authored-by: Joaquim Verges <[email protected]>
2023-06-13 10:37:30 +00:00
Nacho IacovinoandGitHub 541e488d5b [React] Add data-address to ConnectWallet (#1166) 2023-06-13 00:42:46 +00:00
Adam MajmudarandGitHub 088f2567f6 [Auth] Include chain id in login payload (#1165) 2023-06-13 00:29:31 +00:00
Nacho IacovinoandGitHub 6803e8ca09 [React] Add data-test to ConnectWallet (#1163) 2023-06-12 23:41:44 +00:00
Adam MajmudarandGitHub d60e544a24 [Auth] Update with refresh interval and active account (#1150) 2023-06-12 22:52:08 +00:00
cc20f93e17 Update Install Command (#1074)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-12 17:47:43 +00:00
329bccec4b [react, wallets] Add Frame wallet (#1000)
Co-authored-by: Jonas Daniels <[email protected]>
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: ikethirdweb <[email protected]>
2023-06-12 14:06:24 +00:00
02d55a063e fix: always use latest CLI version to prevent build failures in CI (#1154)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-09 19:09:23 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
73bee2bed1 Version Packages (#1121)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-06-08 22:35:52 -06:00
2a443365bd [Smart Wallet] Fix Celo support (#1153)
Co-authored-by: Joaquim Verges <[email protected]>
2023-06-09 04:22:15 +00:00
Manan TankandGitHub ed47fd5310 [sdk] Reduce circular dependencies (#1152) 2023-06-08 22:01:35 +00:00
Manan TankandGitHub 2a0294d8e6 [react] Fix wrong balance in ConnectWallet (#1151) 2023-06-08 20:09:52 +00:00
Manan TankandGitHub 65ecf072eb [react] Improve rendering of long Network List in ConnectWallet Modal (#1149) 2023-06-08 19:10:45 +00:00
Manan TankandGitHub 9ce3eb6aad [react-core] Remove WalletConfig.config, Remove circular dependency (#1144) 2023-06-08 09:43:16 +00:00
Nacho IacovinoandGitHub e32faeb57a [React] Fix return type for useIsSmartWalletDeployed (#1146) 2023-06-08 00:38:59 +00:00
Nacho IacovinoandGitHub 6a19426200 [React] Add useIsSmartWalletDeployed hook (#1145) 2023-06-07 23:40:11 +00:00
iketwandGitHub 2bcad4b716 [ReactNative] make links optional (#1143) 2023-06-07 20:57:22 +00:00
FirekeeperandGitHub 193de1e9d8 [unity-js-bridge] WebGL SW Multi EOA Support (#1142) 2023-06-07 09:35:17 +00:00
645b0303cc feat: create Taro Testnet (#1138)
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-07 05:22:09 +00:00
YashandGitHub 16232de9ea [Chains] Update chains (#1140) 2023-06-06 23:36:12 +00:00
Joaquim VergesandGitHub 52056edfd6 [SDK] Fix contract.call documentation (#1139) 2023-06-06 19:53:17 +00:00
iketwandGitHub dec4c4a8cf [ReactNative] Exports WCV1 and V2 abstract classes to facilitate creation of wallet connect based wallets (#1137) 2023-06-06 17:22:58 +00:00
Manan TankandGitHub 9a015a23cd [react-core] Logout user on account switch (#1136) 2023-06-06 10:39:43 +00:00
iketwandGitHub 15ef4779e0 [ReactNative] Exports base UI components for external use (#1135) 2023-06-05 22:22:37 +00:00
FirekeeperandGitHub b8498c2a10 [unity-js-bridge] sw lw persistence webgl & export (#1133) 2023-06-05 16:38:48 +00:00
56f85e57df [sdk] Reduce circular dependencies (#1124)
Co-authored-by: Joaquim Verges <[email protected]>
2023-06-05 15:22:02 +00:00
Manan TankandGitHub 197a6838f6 [wallets] Clear localWallet.ethersWallet when calling localWallet.disconnect (#1132) 2023-06-05 15:10:59 +00:00
YashandGitHub 3bf7f37593 [SDK] Fix handling of standard contracts (#1131) 2023-06-03 23:30:21 +00:00
YashandGitHub 6803c3e97c Fix any evm deploy: when not autoFactory (#1129) 2023-06-03 02:43:58 +00:00
YashandGitHub b672860397 [SDK] Enable ZKSync mainnet deployments (#1128) 2023-06-03 01:02:58 +00:00
Adam MajmudarandGitHub ab14cd8938 [Auth] Add expiration date to cookies (#1126) 2023-06-02 23:28:39 +00:00
YashandGitHub 8687d6ac3a Add missing exports (#1127) 2023-06-02 23:27:30 +00:00
YashandGitHub a5f16b6dc5 Check standard deploy type (#1125) 2023-06-02 22:19:18 +00:00
6a91b6a025 [SDK] Publish flow updates (#1016)
Co-authored-by: Nacho Iacovino <[email protected]>
2023-06-02 20:59:45 +00:00
Nacho IacovinoandGitHub 54cfd6d891 [React] Update useCreateSmartWallet (#1123) 2023-06-02 19:56:14 +00:00
Manan TankandGitHub 522453fd56 [sdk] Reduce circular dependencies (#1120) 2023-06-02 18:01:57 +00:00
Nacho IacovinoandGitHub 0cba69ca40 Export smart wallet factory hooks (#1119) 2023-06-02 17:48:15 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
96b43b8488 Version Packages (#1106)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-06-02 10:33:56 -07:00
b4c9515937 Add Smart Wallet Factory hooks (#1115)
Co-authored-by: Krishang <[email protected]>
2023-06-02 16:19:24 +00:00
Manan TankandGitHub 9b20fc9ad2 [wallets, react] Remove chain restriction in paper wallet, Fix email validation in paper & magic (#1118) 2023-06-02 15:54:48 +00:00
Manan TankandGitHub 51bbd3d1bc [sdk] Reduce circular dependencies (#1117) 2023-06-02 13:58:26 +00:00
Manan TankandGitHub 356f7aa643 [react] Fix missing connectionStatus on localWallet connection, Metamask QR connection (#1116) 2023-06-02 12:35:14 +00:00
Adam MajmudarandGitHub 2283e71aca [Auth] Switch to server-side payload generation (#1114) 2023-06-02 00:38:35 +00:00
iketwandGitHub 90ab9ab031 [RN] fix lint warning (#1113) 2023-06-01 22:13:39 +00:00
Manan TankandGitHub 6aee041343 [sdk] Reduce circular dependencies (#1112) 2023-06-01 22:07:36 +00:00
Adam MajmudarandGitHub 21627c03d1 Update auth expiration (#1111) 2023-06-01 18:48:26 +00:00
ce36322b38 [SDK] Added getNonce() & updated airdrop (#1104)
Co-authored-by: Joaquim Verges <[email protected]>
Co-authored-by: Jonas Daniels <[email protected]>
2023-06-01 17:43:55 +00:00
nkrishangandGitHub 564eaccf48 Smart Wallet Factory class for creating accounts and fetching data about them. (#1095) 2023-06-01 14:31:32 +00:00
Manan TankandGitHub aa9e952cb5 [sdk] Reduce circular dependencies (#1110) 2023-06-01 14:28:30 +00:00
Manan TankandGitHub 85a6162137 [sdk] Reduce circular deps (#1109) 2023-06-01 13:30:29 +00:00
Manan TankandGitHub e93aa70ef0 [sdk] Reduce circular deps (#1108) 2023-06-01 12:43:31 +00:00
Manan TankandGitHub 6e86123403 [sdk] Reduce circular dependencies (#1107) 2023-06-01 12:13:22 +00:00
Manan TankandGitHub c60658ed8c [sdk] Reduce circular deps (#1105) 2023-06-01 11:29:45 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
df5f016d31 Version Packages (#1099)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-31 16:52:33 -07:00
iketwandGitHub 89102b0c89 [RN] fix bug after scanning wc uri (#1103) 2023-05-31 23:44:10 +00:00
Adam MajmudarandGitHub e1846c4469 [Auth] Default invalid before state to 5 minutes ago (#1101) 2023-05-31 22:05:16 +00:00
Manan TankandGitHub cc56037e64 [sdk] Reduce circular dependencies (#1102) 2023-05-31 21:23:03 +00:00
Manan TankandGitHub 23d90b3e77 [sdk] Reduce circular dependencies (#1100) 2023-05-31 19:58:48 +00:00
Manan TankandGitHub 6745078947 add sideEffects: false on auth, storage, unity-js-bridge (#1098) 2023-05-31 18:52:05 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
55d1f5c550 Version Packages (#1045)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-31 11:43:16 -07:00
iketwandGitHub b694f3c300 [Readme] fix react native title (#1097) 2023-05-31 17:58:09 +00:00
iketwandGitHub 217879ace1 [ReactNative] Make magic deps and camera deps optional (#1096) 2023-05-31 17:52:20 +00:00
Adam MajmudarandGitHub 35984362b0 [Wallets] Update gnosis safe signMessage function (#1087) 2023-05-31 00:47:23 +00:00
YashandGitHub bdabbef71a Fix create2 factory deployment (#1094) 2023-05-30 23:30:33 +00:00
Manan TankandGitHub 2f1df0b535 [sdk] reduce circular deps (#1093) 2023-05-30 22:16:06 +00:00
Joaquim VergesandGitHub da57610802 [SDK] return data from DeployTransaction.simulate() (#1091) 2023-05-30 21:51:46 +00:00
iketwandGitHub 119e785461 [RN] fix supportedWallets type (#1092) 2023-05-30 21:27:41 +00:00
Joaquim VergesandGitHub 5f1e6abb39 [Chains] add base-goerli as default chain (#1090) 2023-05-30 21:11:09 +00:00
Manan TankandGitHub 59206233e1 [sdk] reduce circular deps (#1089) 2023-05-30 20:52:34 +00:00
iketwandGitHub 4f99ccb49c [ReactNative/Wallets] Add sendTransaction for WCV1 handler (#1088) 2023-05-30 18:43:33 +00:00
Manan TankandGitHub 292a321a95 [wallets] Fix disconnect on switchChain in MetaMask (#1085) 2023-05-30 16:30:03 +00:00
Manan TankandGitHub 74f898ac28 [react] Fix Local wallet backup (#1084) 2023-05-30 15:20:32 +00:00
iketwandGitHub 431445e3c6 [Wallets] Fix bug getting account address (#1083) 2023-05-30 12:36:04 +00:00
fd7111d544 [react, react-core] add theme in WalletConfig.selectUI (#1068)
Co-authored-by: ikethirdweb <[email protected]>
2023-05-30 12:05:56 +00:00
ciaranightingaleandGitHub f3b2ae3f6d [SDK] add data to getAddress for Smart Wallet (#1073) 2023-05-27 01:17:39 +00:00
Manan TankandGitHub f5ae61aeba useSwitchChain instead of wallet.switchChain (#1078) 2023-05-26 21:50:37 +00:00
iketwandGitHub 37e0af5753 [ReactNative] Auto-connect sw with one EOA (#1077) 2023-05-26 20:56:37 +00:00
Manan TankandGitHub a034b0321f [sdk] reduce circular deps (#1075) 2023-05-26 18:48:28 +00:00
iketwandGitHub 8ffc597c06 [ReactNative] implement send_transaction for wcv2 (#1076) 2023-05-26 18:38:03 +00:00
Manan TankandGitHub 8eecf4c2d5 [sdk] reduce circular deps (#1072) 2023-05-26 10:54:33 +00:00
32cc54423e [CLI] De-duplicate addresses on generate (#1066)
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-26 00:12:14 +00:00
iketwandGitHub bd86661f54 [ReactNative] Sign in with email/phone number (#1065) 2023-05-25 23:10:55 +00:00
Manan TankandGitHub ee4c7de25c [sdk] reduce circular deps (#1071) 2023-05-25 22:05:33 +00:00
Manan TankandGitHub c68a4bdd1f [sdk] reduce cyclic deps (#1069) 2023-05-25 20:24:39 +00:00
Joaquim VergesandGitHub 68fa1896f7 [Wallets] Expose smartWallet.deploy() and smartWallet.isDeployed() (#1070) 2023-05-25 19:17:23 +00:00
Manan TankandGitHub e21bdd0328 [react-core] return wallet instance from useConnect (#1067) 2023-05-25 16:37:31 +00:00
Manan TankandGitHub c85810eee3 [wallets] don't cache signer (#1064) 2023-05-24 23:17:20 +00:00
YashandGitHub d24a6146d8 [CLI] Add support for ZKSync (#1003) 2023-05-24 23:07:51 +00:00
FirekeeperandGitHub e94b7fdfed [thirdweb-unity-bridge] smart wallet webgl (#1063) 2023-05-24 22:39:44 +00:00
Joaquim VergesandGitHub 98efd090f6 [SDK] add transferFrom for 1155 contracts (#1062) 2023-05-24 21:24:21 +00:00
Joaquim VergesandGitHub 189daf0280 [SDK] add transferFrom for erc721 (#1061) 2023-05-24 19:54:29 +00:00
Joaquim VergesandGitHub f7b352a585 [SDK] Expose getSignerAddress on tx object (#1060) 2023-05-24 17:57:58 +00:00
iketwandGitHub 56ad0867bd [RN] Use walletConfig's selectUI to render Choose your Wallet item (#1059) 2023-05-24 14:16:00 +00:00
Manan TankandGitHub d565100614 [sdk] reduce cyclic deps (#1055) 2023-05-23 16:34:33 +00:00
Manan TankandGitHub edaa5b2e6c [sdk] reduce cyclic deps (#1054) 2023-05-23 14:08:45 +00:00
iketwandGitHub 77123a9a5a [ReactNative] Adds WC qrcode support for Connect an App (#1052) 2023-05-23 00:26:39 +00:00
Manan TankandGitHub 6fd10f94b4 [chains] Fix tree shaking in thirdweb-dev/chains package (#1047) 2023-05-22 22:42:05 +00:00
Nacho IacovinoandGitHub afae0873b0 [JS] Fix check for erc1155 claim conditions (#1051) 2023-05-22 21:55:20 +00:00
Nacho IacovinoandGitHub 4a1d758110 [JS] Fix creator phase check (#1049) 2023-05-22 21:09:21 +00:00
YashandGitHub c6e74ef0b0 [SDK] Allow overrides for read actions (#1043) 2023-05-22 19:43:30 +00:00
iketwandGitHub bba9767adf [ReactNative-Wallets] Enables SmartWallet to connect to an app, with implementation in React Native (#1010) 2023-05-22 17:58:12 +00:00
Manan TankandGitHub a5e509438d [react-core] do not re-throw auto-connect error (#1044) 2023-05-22 16:14:35 +00:00
Manan TankandGitHub f461290216 [react] Fix smart wallet config type (#1042) 2023-05-22 16:01:24 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
8febea4db0 Version Packages (#1041)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-21 13:45:57 -07:00
Joaquim VergesandGitHub 30e5593dd1 [Wallets] deploy smart wallet contract before signing messages (#1040) 2023-05-20 21:01:38 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
f253909710 Version Packages (#1032)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-19 14:39:22 -07:00
iketwandGitHub 99ffa8ce3b [RN] Single global modal (#1025) 2023-05-19 18:09:49 +00:00
Adam MajmudarandGitHub 61212d27d7 [React] Add ability to configure gatewayUrl on MediaRenderer (#1030) 2023-05-19 18:09:28 +00:00
FirekeeperandGitHub 58df84f8ba [unity-js-bridge] MagicLink bridge integration (#1038) 2023-05-19 17:49:18 +00:00
Joaquim VergesandGitHub b6f48e1088 [Wallets] Expose overrideable paymasterAPI in SmartWalletConfig (#1034) 2023-05-19 17:48:51 +00:00
Jonas DanielsandGitHub d51230441a [storage] - update ipfs gateway and add additional fallbacks (#1037) 2023-05-19 16:54:40 +00:00
MykandGitHub 01e83b6f13 update sepolia weth to an address that does not have a mint function (#1036) 2023-05-19 16:43:04 +00:00
Joaquim VergesandGitHub 907d97bede [Chains] Added faucet for optimism goerli (#1033) 2023-05-19 03:52:48 +00:00
Jonas DanielsandGitHub 3c8c5d56f2 Jd/add xrp ledger (#1031) 2023-05-19 03:19:26 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
7faab1c09b Version Packages (#994)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-18 11:15:53 -07:00
8bb0a6d874 fix: set ethers@^5 version in peerDeps of @thirdweb/contracts-js (#921)
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-18 04:06:46 +00:00
b1ede491fb [REACT] Add React hook useBuyDirectListing() (#993)
Co-authored-by: Fran Ros <[email protected]>
Co-authored-by: Jarrod Watts <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-18 04:00:01 +00:00
f674da7b44 Add sepolia as a supported chain for WETH (#987)
Co-authored-by: Nacho Iacovino <[email protected]>
Co-authored-by: Jarrod Watts <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-18 03:49:27 +00:00
iketwandGitHub 748e3e7856 [RN] clear unusued fields (#1026) 2023-05-17 23:40:59 +00:00
738c0ec6c4 [wallets] Update paper sdk and add new supported chains (#1022)
Co-authored-by: Manan Tank <[email protected]>
2023-05-17 22:35:09 +00:00
Joaquim VergesandGitHub e4356e76d1 [SDK] Update error message when contracts ABIs cannot be resolved, with url to import contract (#1021) 2023-05-17 17:27:38 +00:00
iketwandGitHub 8a0dd070d4 [RN] Adds modalTitle, buttonTitle and detailsButton props to the ConnectWallet component (#1019) 2023-05-17 00:06:39 +00:00
Manan TankandGitHub 39bd963015 Render input for magic and paper wallet using selectUI API (#1015) 2023-05-16 22:41:48 +00:00
84fc3b6fab Add detect-project command to CLI (#926)
Co-authored-by: Jonas Daniels <[email protected]>
2023-05-16 20:05:59 +00:00
Adam MajmudarandGitHub 49ec2d171e [SDK] Add a prepareGaslessRequest function (#983) 2023-05-15 21:27:57 +00:00
Adam MajmudarandGitHub b92aabe450 [Auth] Expose request on user hook (#1013) 2023-05-15 21:21:40 +00:00
Manan TankandGitHub 470e0a144d [react-core] rename ConfiguredWallet -> WalletConfig (#1011) 2023-05-15 19:29:22 +00:00
Manan TankandGitHub b6bb73b34c [react, react-core] Various connect Wallet changes (#1006) 2023-05-15 18:20:45 +00:00
YashandGitHub 9886c858d9 [SDK] Add support for ZKSync Era Testnet (#988) 2023-05-12 22:24:31 +00:00
iketwandGitHub 25de32d45d [RN] Update wcv2 props (#1005) 2023-05-12 15:35:55 +00:00
Manan TankandGitHub d495a4b8a6 [react, wallets] Expose Web3Modal QRModalOptions in WalletConnect v2 (#1002) 2023-05-12 14:53:06 +00:00
Manan TankandGitHub 2b0fb9d22f [react] Fix flaky Coinbase QR code scan (#1001) 2023-05-11 15:12:39 +00:00
e9b69300d1 [SDK] Display plugins on router release page (#713)
Co-authored-by: Jonas Daniels <[email protected]>
2023-05-10 23:18:40 +00:00
Manan TankandGitHub 4f8438335e [react] Connect Wallet improvements (#998) 2023-05-10 22:42:45 +00:00
Manan TankandGitHub c3645c451b Various Connect Wallet changes (#996) 2023-05-10 18:49:58 +00:00
iketwandGitHub 482f6d1b58 [ReactNative] update export wallet modal UI (#995) 2023-05-10 18:05:05 +00:00
Joaquim VergesandGitHub 799d98e862 [SDK] switch type of abi in SmartContract to Abi (#997) 2023-05-10 17:51:01 +00:00
iketwandGitHub 8db78299ea [React/RN] rename useThirdwebWallet to useProviderContext (#989) 2023-05-10 11:44:04 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
1119f63a47 Version Packages (#991)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-09 23:23:42 -07:00
Joaquim VergesandGitHub 32908b7683 [SDK] rename extension detection functions (#992) 2023-05-10 06:03:26 +00:00
Joaquim VergesandGitHub 6a4aab0b8a [Wallets] LocalWalletNode fix + cleanup SmartWallet logs (#990) 2023-05-10 05:15:22 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
e87d166d2b Version Packages (#965)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-09 20:46:05 -07:00
Adam MajmudarandGitHub af4b535637 [SDK] Add chunked snapshot input parsing (#986) 2023-05-09 04:29:35 +00:00
Joaquim VergesandGitHub a2df187bc1 [Sol] Fix token deployement (#985) 2023-05-09 03:30:41 +00:00
iketwandGitHub ea0f9479a3 [ReactNative] setup support for custom wallets UI with LocalWallet as example (#981) 2023-05-08 19:49:19 +00:00
Manan TankandGitHub bbe329a656 [react, react-core] Wallet UI API refactor (#979) 2023-05-08 15:09:46 +00:00
Joaquim VergesandGitHub 05ebbc15a0 [Wallets] export ethers and pkey wallets (#978) 2023-05-05 23:50:07 +00:00
Manan TankandGitHub 93bd57337b Connect wallet Modal UI fixes (#977) 2023-05-05 22:29:36 +00:00
Adam MajmudarandGitHub eb521d240a [SDK] Expose raw error on transaction error (#976) 2023-05-05 19:46:57 +00:00
Adam MajmudarandGitHub aa9b6acc3f [SDK] Add ability to resolveAddress (#975) 2023-05-05 19:16:33 +00:00
iketwandGitHub 4ca557ae4a [Wallet] Rename Connector to WagmiConnector (#974) 2023-05-05 16:41:52 +00:00
Manan TankandGitHub 93bdec061d [wallets] various fixes (#973) 2023-05-04 21:41:28 +00:00
Joaquim VergesandGitHub c6e9406808 Update wallets README (#971) 2023-05-04 19:00:34 +00:00
iketwandGitHub 12ad7fead2 [ReactNative] Remove gap for pre-71 RN apps (#969) 2023-05-04 17:23:21 +00:00
Manan TankandGitHub 7d7685e3fa [wallets] Magic and Local wallet improvements (#967) 2023-05-04 17:12:09 +00:00
iketwandGitHub 9640e0731f [ReactNative] Add guest mode warnings (#968) 2023-05-04 16:59:45 +00:00
Manan TankandGitHub 87021cee45 [react] Connect wallet UI improvements (#966) 2023-05-04 16:45:24 +00:00
Jarrod WattsandGitHub 5305b42db5 [REACT, SDK] - Use generated contract's types for useContract Read & Write (#954) 2023-05-04 14:42:15 +00:00
Manan TankandGitHub c8ba96fa00 [react] Wallet UI API refactor, and other fixes (#962) 2023-05-04 11:56:12 +00:00
nkrishangandGitHub 89c821d49e Build deployArgs.json only on deploy --dynamic command (#964) 2023-05-04 06:25:12 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
318b274aae Version Packages (#924)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-03 21:24:18 -07:00
77f0474b88 [ReactNative] update copy for smart wallet (#963)
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-03 19:15:33 +00:00
5ffb1cba03 [REACT] Add onLogout function to ConnectWallet authOptions prop (#960)
Co-authored-by: frog <[email protected]>
2023-05-03 16:07:31 +00:00
YashandGitHub 0bf29745b0 [SDK] GSNv2 Forwarder addresses (#961) 2023-05-03 15:55:30 +00:00
Joaquim VergesandGitHub 00d0d01e61 [SDK] Feature detection for Account and AccountFactory (#959) 2023-05-03 05:51:13 +00:00
Adam MajmudarandGitHub 72b8b9829e [Auth] Add all fields to cookie on logout (#958) 2023-05-03 00:14:29 +00:00
Joaquim VergesandGitHub 26cd91ffe1 [Wallets] update to latest account factory (#953) 2023-05-02 23:24:30 +00:00
1c3a846045 [ReactNative] Update guest mode icon and update learn more link (#957)
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-02 22:40:44 +00:00
4a69f8c85d [ReactNative] Allow switching between personal wallet and smart wallet (#956)
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-02 19:44:32 +00:00
Manan TankandGitHub c7c2530c7f [react] Local Wallet UI refactor, various fixes and cleanup (#955) 2023-05-02 17:58:14 +00:00
7012513bc2 [ReactNative] Introducing Smart Wallet (#937)
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-01 22:58:06 +00:00
YashandGitHub 28b5d1eb6d [SDK] Custom gas-price for Theta testnet and mainnet (#951) 2023-05-01 21:37:15 +00:00
1e9fad779f safe, device wallet, smartWallet autoconnect (#927)
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-01 20:07:25 +00:00
Joaquim VergesandGitHub 7e7a507f03 [Unity] fix unity wallet connect (#950) 2023-05-01 18:48:09 +00:00
Joaquim VergesandGitHub 5a67d5d894 [Wallets] Batch transactions functionality for Smart Wallets (#948) 2023-04-30 21:42:41 +00:00
Joaquim VergesandGitHub fc96e14750 [Wallets] Expose execute functions directly from smart wallet (#947) 2023-04-29 02:05:16 +00:00
YashandGitHub 8f962bc15c [SDK] Add default domain in gasless options (#944) 2023-04-29 01:19:15 +00:00
Joaquim VergesandGitHub f12a80a475 [Wallets] fix default RPC for local wallet providers (#931) 2023-04-29 01:11:57 +00:00
Joaquim VergesandGitHub 0186721bc4 [Wallets] New utils functions for smart wallets (#945) 2023-04-28 23:25:27 +00:00
Manan TankandGitHub 5d67b2807f add magic link wallet and UI (#941) 2023-04-28 21:11:52 +00:00
Joaquim VergesandGitHub 1e4ac67272 [SmartWallet] remove accountIds and allow passing custom factory/account contract definitions (#942) 2023-04-28 17:41:44 +00:00
iketwandGitHub 465d8e2c3d [ReactNative] Make web3button action return a promise (#943) 2023-04-28 15:03:05 +00:00
0xHendrixandGitHub a8b790652c [REACT] Add onLogin callback to ConnectWallet authOptions props (#940) 2023-04-28 03:41:38 +00:00
iketwandGitHub 4828c87691 [ReactNative] Enable copying the address by pressing on it (#936) 2023-04-26 17:46:52 +00:00
iketwandGitHub 45d2ffcf89 [ReactNative] continue as guest (#935) 2023-04-26 15:37:03 +00:00
YashandGitHub bf6df26711 [SDK] Add support for Skale chaos testnet (#932) 2023-04-25 19:56:15 +00:00
Manan TankandGitHub e22e4a47d7 [react] suggest first supportedWallet for getting started (#930) 2023-04-24 12:29:13 +00:00
iketwandGitHub d2c7f6d758 [ReactNativeSDK] Adds Local Wallet (#787) 2023-04-22 04:14:55 +00:00
Joaquim VergesandGitHub 7af99d9a6d [Wallets] Switch to entrypoint v0.6 for Smart Wallet (#929) 2023-04-21 23:01:33 +00:00
YashandGitHub f0279c2288 [SDK] Contract verification utils (#905) 2023-04-21 17:17:10 +00:00
iketwandGitHub 07194b06e5 [RN] Remove select wallet step with one supported wallet (#925) 2023-04-21 14:43:51 +00:00
255c5dcae8 [Wallets] Add accountId handling for SmartWallet (#923)
Co-authored-by: Manan Tank <[email protected]>
2023-04-21 14:15:39 +00:00
8cfb4f38ed [Wallets] Introducing Smart Wallet (#904)
Co-authored-by: Manan Tank <[email protected]>
2023-04-21 05:10:56 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
7c15913e46 Version Packages (#883)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-04-20 21:57:14 -07:00
Adam MajmudarandGitHub 477324ec85 [Auth] Add useAuth back to @thirdweb-dev/react (#922) 2023-04-19 20:05:51 +00:00
c9ee9b32f0 [SDK] Fix error handling for create2 factory deployments (#915)
Co-authored-by: Joaquim Verges <[email protected]>
2023-04-18 23:40:50 +00:00
Manan TankandGitHub 3010d84595 [react] improved autocomplete for imported device wallet (#920) 2023-04-18 21:01:57 +00:00
Manan TankandGitHub 81770647ab [react] improved device wallet password input autocomplete (#919) 2023-04-18 19:14:05 +00:00
Manan TankandGitHub 26644d63b5 Fix Connect Wallet Modal max-width on tablet (#918) 2023-04-18 17:33:01 +00:00
Manan TankandGitHub 09fae984e7 [react] Device wallet and other UI improvements (#917) 2023-04-18 15:57:11 +00:00
iketwandGitHub 0b1f522906 [ReactNative] Improve theming for Web3Button and ConnectWallet (#916) 2023-04-17 21:32:43 +00:00
Manan TankandGitHub ec36df5f75 Add Request Testnet Funds for Localhost (#914) 2023-04-17 11:00:46 +00:00
Manan TankandGitHub c93edc4999 [wallets] paper: add Avalanche (#913) 2023-04-17 09:20:13 +00:00
YashandGitHub 29146e009d [SDK] Fix listing validation for marketplace v2 & v3 (#907) 2023-04-15 01:14:25 +00:00
Adam MajmudarandGitHub ea04edf478 [SDK] Fix StaticJsonBatchRpcProvider (#911) 2023-04-14 23:54:39 +00:00
Joaquim VergesandGitHub c2fec93052 [Wallets] Allow passing any EVMWallet as personal Safe signer (#910) 2023-04-14 23:20:34 +00:00
Manan TankandGitHub d8b54a6f91 [react] add back device wallet UI (#909) 2023-04-14 22:43:30 +00:00
Manan TankandGitHub 664d1cd0dd [wallets] fix dynamic import error of crypto-js on vite (#908) 2023-04-14 20:40:16 +00:00
Manan TankandGitHub 4275c8e739 [wallets] device wallet fixes (#906) 2023-04-14 19:55:30 +00:00
Manan TankandGitHub 82bea3fa10 [wallets] Device Wallet Revamp (#901) 2023-04-14 17:15:30 +00:00
YashandGitHub 8e8ceaa344 [SDK] Update Weth addresses (#902) 2023-04-14 05:12:26 +00:00
Joaquim VergesandGitHub 77224646d5 [SDK] more transaction error parsing (#903) 2023-04-14 05:11:53 +00:00
Adam MajmudarandGitHub 72db2dc3e1 [CLI] Add cleaner messages to thirdweb generate (#894) 2023-04-13 18:29:54 +00:00
Joaquim VergesandGitHub abe88599b6 [SDK] fix gasless open pack (#898) 2023-04-12 22:38:23 +00:00
a6610f1211 Portal Links added to functions (#896)
Co-authored-by: Jonas Daniels <[email protected]>
2023-04-11 23:20:14 +00:00
YashandGitHub bfdd84939d [SDK] Enable MarketplaceV3 deploys on any EVM (#885) 2023-04-11 23:07:10 +00:00
Manan TankandGitHub 06cc1df3b7 Fix supported chains not having activeChain for wallets (#895) 2023-04-11 22:21:07 +00:00
Manan TankandGitHub 4acb2b5561 [react] add switch account for MetaMask (#892) 2023-04-10 21:38:15 +00:00
Adam MajmudarandGitHub 00f4355f1a [SDK] Add ability to batch list on marketplace v3 (#890) 2023-04-10 19:59:55 +00:00
Manan TankandGitHub 430a5f7934 [React] network selector revamp (#887) 2023-04-08 04:34:48 +00:00
iketwandGitHub 51e6b4146e [ReactNative] Fixes Coinbase Wallet Connect for iOS (#886) 2023-04-07 17:29:42 +00:00
iketwandGitHub 49922de9d9 [Core/RN] Implements auth for React Native (#874) 2023-04-07 00:43:56 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
603e24f1e2 Version Packages (#873)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-04-06 17:18:37 -07:00
YashandGitHub c9027fced0 [SDK] transaction count for any-evm deploy (#878) 2023-04-07 00:01:26 +00:00
Joaquim VergesandGitHub ac8fa0b345 [SDK] Fix resolving proxy implementation addreses with leading 0s (#882) 2023-04-06 23:26:13 +00:00
iketwandGitHub 81a32b4dd2 [React] change major change to patch (#881) 2023-04-06 20:40:03 +00:00
ciaranightingaleandGitHub bd0bb4fed7 fix portal links in README (#880) 2023-04-06 17:35:45 +00:00
iketwandGitHub b616dca7eb [Wallets] Rename base wallets (#868) 2023-04-06 17:12:13 +00:00
59434aac4f [react] add style prop on ConnectWallet and Web3Button (#879)
Co-authored-by: Nacho Iacovino <[email protected]>
2023-04-06 16:47:07 +00:00
iketwandGitHub cef16471f4 [CLI] Update min ruby version to 2.7.6 for React Native templates (#877) 2023-04-06 15:19:08 +00:00
Nacho IacovinoandGitHub 0db0cc7564 [React] Fix useContractEvents cache not storing individual events (#876) 2023-04-06 14:09:43 +00:00
229a47413e Fix build error in vite when connecting safe (#859)
Co-authored-by: Jonas Daniels <[email protected]>
2023-04-05 22:05:47 +00:00
b75bcef55b [SDK] any evm deploy setup (#756)
Co-authored-by: Jonas Daniels <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-04-05 21:38:00 +00:00
Nacho IacovinoandGitHub 2545a440dc Rename Wallet Connect to WalletConnect (#872) 2023-04-05 19:41:58 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
0b4b6a5b4e Version Packages (#871)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-04-05 12:42:31 -07:00
b3d57949bd [SDK] Relax the requirement for LazyMint (#864)
Co-authored-by: Joaquim Verges <[email protected]>
2023-04-05 17:26:02 +00:00
Manan TankandGitHub 1cf1f866d5 Add stable css selectors on web3button and connect wallet button (#866) 2023-04-05 14:24:48 +00:00
602d8cbcfa [SDK] Add .prepare() support to tiered-drop (#869)
Co-authored-by: Jonas Daniels <[email protected]>
2023-04-05 01:01:46 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
33a78e68d1 Version Packages (#865)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-04-04 17:50:09 -07:00
Jonas DanielsandGitHub 235eb0460a [react-core, wallets] - fix window undefined error during SSR (#870) 2023-04-05 00:41:12 +00:00
Adam MajmudarandGitHub 3bb846adf0 [CLI] Generate detects contracts in project (#867) 2023-04-05 00:19:56 +00:00
b5648aee83 [React] Make tokenId optional one useNFTBalance (#862)
Co-authored-by: Adam Majmudar <[email protected]>
2023-04-04 23:51:28 +00:00
ciaranightingaleandGitHub 1b8f812fb8 [SDK] contract portal links (#863) 2023-04-04 21:47:53 +00:00
Adam MajmudarandGitHub 1547d76cce [SDK] Add unix timestamp dates (#861) 2023-04-04 00:54:48 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
7c78d1c6e8 Version Packages (#858)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-04-03 16:41:59 -07:00
iketwandGitHub 058e4357c7 [CLI] Only run react-native ios specific tasks on macOS envs (#860) 2023-04-03 23:14:19 +00:00
Adam MajmudarandGitHub 3a0e904fc2 [CLI] Add skip intro flag to generate and update regex (#857) 2023-04-02 22:08:59 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
5143d535f4 Version Packages (#852)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-03-31 16:51:47 -07:00
Manan TankandGitHub 2dd192a567 [react] add auth in connect wallet button (#855) 2023-03-31 22:20:58 +00:00
Adam MajmudarandGitHub 6e9396f535 Update README.md (#854) 2023-03-31 19:55:44 +00:00
Jonas DanielsandGitHub b3b00e510b [tooling] - update pnpm (#853) 2023-03-31 19:04:21 +00:00
Manan TankandGitHub c5c2d9478a [wallets] Fix autoconnect issues (#851) 2023-03-31 18:10:14 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
1a5d9034f9 Version Packages (#846)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-03-31 00:37:08 -07:00
Jonas DanielsandGitHub 1137a20de4 [chains] - better types and generation (#848) 2023-03-31 07:03:17 +00:00
Jarrod WattsandGitHub e4d9fa72d8 Create LICENSE (#847) 2023-03-31 01:28:56 +00:00
Manan TankandGitHub 48fe2ce5ed connect wallet: UI and text adjustments (#844) 2023-03-30 23:15:38 +00:00
2084 changed files with 122222 additions and 25125 deletions
+6
View File
@@ -0,0 +1,6 @@
# rename this file to .env and fill in the values
# this is not required to build the packages but will significantly increase test performance
# used for unit tests that hit real IPFS gateway
# get a secret key from https://thirdweb.com/create-api-key
TW_SECRET_KEY=""
+1 -1
View File
@@ -6,7 +6,7 @@ runs:
steps:
- uses: pnpm/action-setup@v2
with:
version: 7
version: 8
- name: Setup Node.js
uses: actions/setup-node@v3
with:
+6
View File
@@ -59,9 +59,15 @@ To begin:
```
pnpm install
```
If you are on windows, use the `--ignore-scripts` flag
```
pnpm install --ignore-scripts
```
Now you have got the repo on your local machine, and you're ready to start making your changes!
<br/>
### Test Your Changes
We use [yalc](https://github.com/wclr/yalc) to test changes locally.
+13
View File
@@ -0,0 +1,13 @@
## Problem solved
Short description of the bug fixed or feature added
## Changes made
- [ ] Public API changes: list the public API changes made if any
- [ ] Internal API changes: explain the internal logic changes
## How to test
- [ ] Automated tests: link to unit test file
- [ ] Manual tests: step by step instructions on how to test
+5 -3
View File
@@ -17,6 +17,7 @@ concurrency:
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
TW_SECRET_KEY: ${{ secrets.TW_SECRET_KEY }}
jobs:
build:
@@ -60,7 +61,7 @@ jobs:
- uses: pnpm/action-setup@v2
with:
version: 7
version: 8
- uses: actions/cache@v3
timeout-minutes: 5
@@ -85,7 +86,7 @@ jobs:
- uses: pnpm/action-setup@v2
with:
version: 7
version: 8
- uses: actions/cache@v3
timeout-minutes: 5
@@ -115,7 +116,7 @@ jobs:
- uses: pnpm/action-setup@v2
with:
version: 7
version: 8
- uses: actions/cache@v3
timeout-minutes: 5
@@ -131,3 +132,4 @@ jobs:
run: pnpm e2e
env:
NODE_OPTIONS: "--max_old_space_size=4096"
CLI_E2E_API_KEY: ${{ secrets.CLI_E2E_API_KEY }}
+5 -1
View File
@@ -16,4 +16,8 @@ public/dist
yalc.lock
build/
playwright-report/
.vscode/
.vscode/
.env/
# Artifacts
packages/cli/artifacts/
-1
View File
@@ -1 +0,0 @@
auto-install-peers=true
+1
View File
@@ -0,0 +1 @@
16
+201
View File
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2021 Non-Fungible Labs, Inc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+8 -7
View File
@@ -20,13 +20,14 @@
## Packages
| Package | Description | Latest Version |
| ------------------------------ | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [/sdk](./packages/sdk) | Best in class web3 SDK for Browser, Node and Mobile apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/sdk"><img src="https://img.shields.io/npm/v/@thirdweb-dev/sdk?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/react](./packages/react) | Ultimate collection of React hooks for your web3 apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/react"><img src="https://img.shields.io/npm/v/@thirdweb-dev/react?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/auth](./packages/auth) | Best in class wallet authentication for Node backends | <a href="https://www.npmjs.com/package/@thirdweb-dev/auth"><img src="https://img.shields.io/npm/v/@thirdweb-dev/auth?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/storage](./packages/storage) | Best in class decentralized storage SDK for Browser and Node | <a href="https://www.npmjs.com/package/@thirdweb-dev/storage"><img src="https://img.shields.io/npm/v/@thirdweb-dev/storage?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/cli](./packages/cli) | Publish and deploy smart contracts without dealing with private keys | <a href="https://www.npmjs.com/package/thirdweb"><img src="https://img.shields.io/npm/v/thirdweb?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| Package | Description | Latest Version |
| ---------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [/sdk](./packages/sdk) | Best in class web3 SDK for Browser, Node and Mobile apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/sdk"><img src="https://img.shields.io/npm/v/@thirdweb-dev/sdk?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/react](./packages/react) | Ultimate collection of React hooks for your web3 apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/react"><img src="https://img.shields.io/npm/v/@thirdweb-dev/react?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/react-native](./packages/react-native) | Ultimate collection of React hooks for your native mobile web3 apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/react-native"><img src="https://img.shields.io/npm/v/@thirdweb-dev/react-native?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/auth](./packages/auth) | Best in class wallet authentication for Node backends | <a href="https://www.npmjs.com/package/@thirdweb-dev/auth"><img src="https://img.shields.io/npm/v/@thirdweb-dev/auth?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/storage](./packages/storage) | Best in class decentralized storage SDK for Browser and Node | <a href="https://www.npmjs.com/package/@thirdweb-dev/storage"><img src="https://img.shields.io/npm/v/@thirdweb-dev/storage?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/cli](./packages/cli) | Publish and deploy smart contracts without dealing with private keys | <a href="https://www.npmjs.com/package/thirdweb"><img src="https://img.shields.io/npm/v/thirdweb?color=red&label=npm&logo=npm" alt="npm version"/></a> |
## Documentation
+29 -10
View File
@@ -31,25 +31,44 @@
"hotlink-revert": "node ./scripts/hotlink/hotlink-revert.mjs",
"explain:major": "node ./scripts/changeset-explain-major.mjs"
},
"packageManager": "pnpm@7.29.3",
"packageManager": "pnpm@8.6.12",
"dependencies": {
"@changesets/changelog-github": "^0.4.8",
"@changesets/cli": "^2.26.1",
"@changesets/get-dependents-graph": "^1.3.5",
"@changesets/get-release-plan": "^3.0.16",
"@changesets/cli": "^2.26.2",
"@changesets/get-dependents-graph": "^1.3.6",
"@changesets/get-release-plan": "^3.0.17",
"@changesets/parse": "^0.3.16",
"@manypkg/cli": "^0.20.0",
"@manypkg/cli": "^0.21.0",
"@manypkg/get-packages": "^1.1.3",
"@playwright/test": "1.31.2",
"@trivago/prettier-plugin-sort-imports": "^4.1.1",
"@types/node": "^18.15.7",
"eslint": "^8.36.0",
"@trivago/prettier-plugin-sort-imports": "^4.2.0",
"@types/node": "^18.17.1",
"eslint": "^8.45.0",
"mocha": "^10.2.0",
"prettier": "^2.8.7",
"turbo": "^1.8.5",
"prettier": "^3.0.0",
"turbo": "^1.10.12",
"yalc": "1.0.0-pre.53"
},
"manypkg": {
"defaultBranch": "main"
},
"pnpm": {
"overrides": {
"cross-fetch@>=3.0.0 <3.1.5": ">=3.1.5",
"got@<11.8.5": ">=11.8.5",
"glob-parent@<5.1.2": ">=5.1.2",
"node-fetch@<2.6.7": ">=2.6.7",
"nth-check@<2.0.1": ">=2.0.1",
"socket.io-parser@>=4.0.4 <4.2.3": ">=4.2.3",
"fast-xml-parser@<4.2.4": ">=4.2.4",
"@openzeppelin/contracts@>=4.3.0 <4.9.1": ">=4.9.1",
"@openzeppelin/contracts@>=4.7.0 <4.9.2": ">=4.9.2",
"xml2js@<0.5.0": ">=0.5.0",
"engine.io@>=5.1.0 <6.4.2": ">=6.4.2",
"semver@<7.5.2": ">=7.5.2",
"json5@<1.0.2": ">=1.0.2",
"protobufjs@>=6.10.0 <7.2.4": ">=7.2.4",
"tough-cookie@<4.1.3": ">=4.1.3"
}
}
}
+453
View File
@@ -1,5 +1,458 @@
# @thirdweb-dev/auth
## 3.2.39
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.22
## 3.2.38
### Patch Changes
- Updated dependencies [[`eb463735`](https://github.com/thirdweb-dev/js/commit/eb463735e2f784cd1d212a982835af95cf60766b), [`0f027069`](https://github.com/thirdweb-dev/js/commit/0f027069064bebe647f9235fa86ef7f165ffc7b3)]:
- @thirdweb-dev/wallets@1.1.21
## 3.2.37
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.20
## 3.2.36
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.19
## 3.2.35
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.18
## 3.2.34
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.17
## 3.2.33
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.16
## 3.2.32
### Patch Changes
- Updated dependencies [[`07fb1b5f`](https://github.com/thirdweb-dev/js/commit/07fb1b5ffa4c170e252df31070852ddb9a81dec9)]:
- @thirdweb-dev/wallets@1.1.15
## 3.2.31
### Patch Changes
- Updated dependencies [[`39e2af6f`](https://github.com/thirdweb-dev/js/commit/39e2af6f2f4d933dca1b3de4a37de76375bafd74)]:
- @thirdweb-dev/wallets@1.1.14
## 3.2.30
### Patch Changes
- Updated dependencies [[`34b31599`](https://github.com/thirdweb-dev/js/commit/34b315993c0abaccb9640a5d5804c2c93af569c2)]:
- @thirdweb-dev/wallets@1.1.13
## 3.2.29
### Patch Changes
- Updated dependencies [[`73462ef1`](https://github.com/thirdweb-dev/js/commit/73462ef10800aeeb5976634e2bc6fb5d3e8501e4), [`70c4a119`](https://github.com/thirdweb-dev/js/commit/70c4a119d691a37ec999d9f6087902d532cc82ed)]:
- @thirdweb-dev/wallets@1.1.12
## 3.2.28
### Patch Changes
- Updated dependencies [[`4b0e63dc`](https://github.com/thirdweb-dev/js/commit/4b0e63dcc0ca871ce9cef76f8a41ff290316741c)]:
- @thirdweb-dev/wallets@1.1.11
## 3.2.27
### Patch Changes
- [#1392](https://github.com/thirdweb-dev/js/pull/1392) [`dfd120a3`](https://github.com/thirdweb-dev/js/commit/dfd120a3a9d1582c8b174265c92bf43dbbaf5c86) Thanks [@adam-maj](https://github.com/adam-maj)! - Expose functions from auth and update useAuth
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.10
## 3.2.26
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.9
## 3.2.25
### Patch Changes
- Updated dependencies [[`a9f2ff73`](https://github.com/thirdweb-dev/js/commit/a9f2ff73c9f83f05c3e2d3c53b23b2843e8a2576), [`fd981655`](https://github.com/thirdweb-dev/js/commit/fd9816556fe595b0c764e34dbcf15b0ad1677edb)]:
- @thirdweb-dev/wallets@1.1.8
## 3.2.24
### Patch Changes
- Updated dependencies [[`3b6b0746`](https://github.com/thirdweb-dev/js/commit/3b6b0746b3fc792f4c5092814a7abfabcbc9801e), [`b0ec1d80`](https://github.com/thirdweb-dev/js/commit/b0ec1d80839efccad11b50afbf2216c2c132cf7e)]:
- @thirdweb-dev/wallets@1.1.7
## 3.2.23
### Patch Changes
- Updated dependencies [[`fbde927a`](https://github.com/thirdweb-dev/js/commit/fbde927a0cb36a6269e045d8e577536f23164ef7)]:
- @thirdweb-dev/wallets@1.1.6
## 3.2.22
### Patch Changes
- [#1415](https://github.com/thirdweb-dev/js/pull/1415) [`256ee0d5`](https://github.com/thirdweb-dev/js/commit/256ee0d5ec9c8598aa79cd4cb1fd839c6cc7d390) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Downgrade preconstruct to 2.7.0
- Updated dependencies [[`256ee0d5`](https://github.com/thirdweb-dev/js/commit/256ee0d5ec9c8598aa79cd4cb1fd839c6cc7d390)]:
- @thirdweb-dev/wallets@1.1.5
## 3.2.21
### Patch Changes
- [#1409](https://github.com/thirdweb-dev/js/pull/1409) [`b1e8c8e2`](https://github.com/thirdweb-dev/js/commit/b1e8c8e231013182eb46c16d0c441ee0f3bdfdb2) Thanks [@jnsdls](https://github.com/jnsdls)! - update dependencies
- [#1410](https://github.com/thirdweb-dev/js/pull/1410) [`247cf57d`](https://github.com/thirdweb-dev/js/commit/247cf57d375a4ec0bc6867e0b65a262c94a9e2f2) Thanks [@jnsdls](https://github.com/jnsdls)! - expose `getToken()` helper function
- Updated dependencies [[`06b4f298`](https://github.com/thirdweb-dev/js/commit/06b4f2983161fc9ff5913fd05dacf17260902576), [`b1e8c8e2`](https://github.com/thirdweb-dev/js/commit/b1e8c8e231013182eb46c16d0c441ee0f3bdfdb2), [`2025b8cb`](https://github.com/thirdweb-dev/js/commit/2025b8cb8d5157c03314e5db47a0d50382519c41), [`385895ca`](https://github.com/thirdweb-dev/js/commit/385895ca928a5276586f0a370fabdcece7620d83), [`9acf6854`](https://github.com/thirdweb-dev/js/commit/9acf6854dfdc5c0be768e660c1f174e017b06a9c), [`48ca58b7`](https://github.com/thirdweb-dev/js/commit/48ca58b7aa45348b928932b9c7b76b3dc233e429), [`60fbb767`](https://github.com/thirdweb-dev/js/commit/60fbb767c18ffe1e49792c6ac8e808792acf594c), [`277cfd5c`](https://github.com/thirdweb-dev/js/commit/277cfd5ce1f3a576d29c95492c735b46a00c164e), [`2025b8cb`](https://github.com/thirdweb-dev/js/commit/2025b8cb8d5157c03314e5db47a0d50382519c41), [`cc5e2ec5`](https://github.com/thirdweb-dev/js/commit/cc5e2ec51fce09af05be33811eb46980825829ee), [`7ae9f4cd`](https://github.com/thirdweb-dev/js/commit/7ae9f4cda1a2009dd414f836757bec8202c83172)]:
- @thirdweb-dev/wallets@1.1.4
## 3.2.20
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.3
## 3.2.19
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.2
## 3.2.18
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.1.1
## 3.2.17
### Patch Changes
- Updated dependencies [[`d8447146`](https://github.com/thirdweb-dev/js/commit/d8447146092c1962f410155ab2047225453aaa2b)]:
- @thirdweb-dev/wallets@1.1.0
## 3.2.16
### Patch Changes
- Updated dependencies [[`c5761b99`](https://github.com/thirdweb-dev/js/commit/c5761b99e9797772481506e90cbfa5c35a05bd1d), [`b96a2282`](https://github.com/thirdweb-dev/js/commit/b96a2282730582b684cc96802649a96851af5220)]:
- @thirdweb-dev/wallets@1.0.12
## 3.2.15
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.0.11
## 3.2.14
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.0.10
## 3.2.13
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.0.9
## 3.2.12
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.0.8
## 3.2.11
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.0.7
## 3.2.10
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@1.0.6
## 3.2.9
### Patch Changes
- Updated dependencies [[`10b3a717`](https://github.com/thirdweb-dev/js/commit/10b3a717da606632a05769ac821bdd21d6b63a03), [`b4aee9b5`](https://github.com/thirdweb-dev/js/commit/b4aee9b59121bab5f9b3d9b7ecdc4bcb4cd66f58)]:
- @thirdweb-dev/wallets@1.0.5
## 3.2.8
### Patch Changes
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
- Updated dependencies [[`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2)]:
- @thirdweb-dev/wallets@1.0.4
## 3.2.7
### Patch Changes
- Updated dependencies [[`2b113539`](https://github.com/thirdweb-dev/js/commit/2b113539098384f910b3c4d54e1fde9d35a6f053), [`be606dd3`](https://github.com/thirdweb-dev/js/commit/be606dd3c93c1514834c1d970e864d7f949a07ab), [`998e5217`](https://github.com/thirdweb-dev/js/commit/998e521733efd6a67e42f9bf0beab5fbdccf08ae)]:
- @thirdweb-dev/wallets@1.0.3
## 3.2.6
### Patch Changes
- Updated dependencies [[`ed711c8c`](https://github.com/thirdweb-dev/js/commit/ed711c8cb2ed6a0deb1b2a5eeec06df1d4edc5e8), [`05a7495a`](https://github.com/thirdweb-dev/js/commit/05a7495a132aabab5f48abbdb80a468ff6f65df8), [`e78da6b3`](https://github.com/thirdweb-dev/js/commit/e78da6b36cfa6d954234820563201bf760186ed1)]:
- @thirdweb-dev/wallets@1.0.2
## 3.2.5
### Patch Changes
- Updated dependencies [[`efb3546e`](https://github.com/thirdweb-dev/js/commit/efb3546ec8268156be00301af28b9d83ecd5ab08)]:
- @thirdweb-dev/wallets@1.0.1
## 3.2.4
### Patch Changes
- [#1250](https://github.com/thirdweb-dev/js/pull/1250) [`d43f6171`](https://github.com/thirdweb-dev/js/commit/d43f6171d910e31b748b171b012174390aac3fff) Thanks [@adam-maj](https://github.com/adam-maj)! - Allow setting login payload validity duration
- Updated dependencies [[`ac3e019c`](https://github.com/thirdweb-dev/js/commit/ac3e019cd1776dbdb0d06b213420ad17586f678e), [`3c5dc480`](https://github.com/thirdweb-dev/js/commit/3c5dc4804abc56b933ec45e9e1da11eb182296cc)]:
- @thirdweb-dev/wallets@1.0.0
## 3.2.3
### Patch Changes
- Updated dependencies [[`536b0f12`](https://github.com/thirdweb-dev/js/commit/536b0f1240ab446aac22cf547a4e09e73ee6bf7b), [`b626782b`](https://github.com/thirdweb-dev/js/commit/b626782b0e8c6b76673472d3aee1c802dfb11b5f)]:
- @thirdweb-dev/wallets@0.3.3
## 3.2.2
### Patch Changes
- Updated dependencies [[`3cb298ac`](https://github.com/thirdweb-dev/js/commit/3cb298ac4b04d295899b5ac77c7fc5869ec2f5f2), [`3ce5f9a0`](https://github.com/thirdweb-dev/js/commit/3ce5f9a0c3fc7e99b5abf691a87048ab8475f6b1), [`a388d07a`](https://github.com/thirdweb-dev/js/commit/a388d07a3d449e56dc53fed9600931022f4a15e1), [`1ce8558d`](https://github.com/thirdweb-dev/js/commit/1ce8558df47186bcba5ee8564fdb04583bf115dd), [`60fb1889`](https://github.com/thirdweb-dev/js/commit/60fb18894372f14d9cd815fa9a239926d31bb273)]:
- @thirdweb-dev/wallets@0.3.2
## 3.2.1
### Patch Changes
- Updated dependencies [[`3d62278a`](https://github.com/thirdweb-dev/js/commit/3d62278aba79101ae1158fb726d6ddfed505c939)]:
- @thirdweb-dev/wallets@0.3.1
## 3.2.0
### Minor Changes
- [#1150](https://github.com/thirdweb-dev/js/pull/1150) [`d60e544a`](https://github.com/thirdweb-dev/js/commit/d60e544a240b93312743e62096ee2dc77d0c1bd1) Thanks [@adam-maj](https://github.com/adam-maj)! - Add support for multipled logged in accounts and token refreshing to auth
### Patch Changes
- [#1165](https://github.com/thirdweb-dev/js/pull/1165) [`088f2567`](https://github.com/thirdweb-dev/js/commit/088f2567f615360edd44776b20ae0bedff250f43) Thanks [@adam-maj](https://github.com/adam-maj)! - Include chain id in login payload
- Updated dependencies [[`654b8ab3`](https://github.com/thirdweb-dev/js/commit/654b8ab35184e02127a5a47f05d78606dd5b29ca), [`329bccec`](https://github.com/thirdweb-dev/js/commit/329bccec4b88b02db5bac6c1415158928843376a)]:
- @thirdweb-dev/wallets@0.3.0
## 3.1.1
### Patch Changes
- [#1126](https://github.com/thirdweb-dev/js/pull/1126) [`ab14cd89`](https://github.com/thirdweb-dev/js/commit/ab14cd89385aefad7f32e20a22baa9fce42b98e2) Thanks [@adam-maj](https://github.com/adam-maj)! - Add expiration date to cookie
- Updated dependencies [[`2a443365`](https://github.com/thirdweb-dev/js/commit/2a443365bdc3d47d0f41fc895f70256dcde423f5), [`197a6838`](https://github.com/thirdweb-dev/js/commit/197a6838f69ae8b9ad46524e7c469fc757d0a2cb)]:
- @thirdweb-dev/wallets@0.2.26
## 3.1.0
### Minor Changes
- [#1114](https://github.com/thirdweb-dev/js/pull/1114) [`2283e71a`](https://github.com/thirdweb-dev/js/commit/2283e71acaaf3d15eb2d6121682f1d2a81eec4f3) Thanks [@adam-maj](https://github.com/adam-maj)! - Switch to server-side payload generation
### Patch Changes
- [#1111](https://github.com/thirdweb-dev/js/pull/1111) [`21627c03`](https://github.com/thirdweb-dev/js/commit/21627c03d1bb1658fee19b12d580faa6c7f048d9) Thanks [@adam-maj](https://github.com/adam-maj)! - Update expiration dates for auth
- Updated dependencies [[`9b20fc9a`](https://github.com/thirdweb-dev/js/commit/9b20fc9ad2d303edc31f44fbd2ea3b4dcf35d11e)]:
- @thirdweb-dev/wallets@0.2.25
## 3.0.23
### Patch Changes
- [#1101](https://github.com/thirdweb-dev/js/pull/1101) [`e1846c44`](https://github.com/thirdweb-dev/js/commit/e1846c44696bcb25a6a137d63e117e7d2ce9d979) Thanks [@adam-maj](https://github.com/adam-maj)! - Bump invalid before with 5 minute window
- [#1098](https://github.com/thirdweb-dev/js/pull/1098) [`67450789`](https://github.com/thirdweb-dev/js/commit/67450789473b6008b86453ee4f4c7b99461223a6) Thanks [@MananTank](https://github.com/MananTank)! - add sideEffects: false in package.json
- Updated dependencies []:
- @thirdweb-dev/wallets@0.2.24
## 3.0.22
### Patch Changes
- Updated dependencies [[`bba9767a`](https://github.com/thirdweb-dev/js/commit/bba9767adfe20e41055450b86e4448fcb2119855), [`bd86661f`](https://github.com/thirdweb-dev/js/commit/bd86661f54ca2f1eb09cbae35c704dc79be1b63a), [`68fa1896`](https://github.com/thirdweb-dev/js/commit/68fa1896f75d3514e00cc380924fd8bc623064f0), [`292a321a`](https://github.com/thirdweb-dev/js/commit/292a321a95ed2d847097eed205353dd69eeb8d54), [`f3b2ae3f`](https://github.com/thirdweb-dev/js/commit/f3b2ae3f6d9c66356c521d3b9c2a6c096dbb4b57), [`4f99ccb4`](https://github.com/thirdweb-dev/js/commit/4f99ccb49c584946de709fbc01017611d2828b76), [`c85810ee`](https://github.com/thirdweb-dev/js/commit/c85810eee318b10eee4ada61828adaa51f94ea6c), [`35984362`](https://github.com/thirdweb-dev/js/commit/35984362b0a60e5b9c3d3c9731450a8f47deb1c4)]:
- @thirdweb-dev/wallets@0.2.23
## 3.0.21
### Patch Changes
- Updated dependencies [[`30e5593d`](https://github.com/thirdweb-dev/js/commit/30e5593dd1ce9abd809ad216a1cfce77b897093c)]:
- @thirdweb-dev/wallets@0.2.22
## 3.0.20
### Patch Changes
- Updated dependencies [[`b6f48e10`](https://github.com/thirdweb-dev/js/commit/b6f48e1088b5d36a51103de4afda53179029faaf)]:
- @thirdweb-dev/wallets@0.2.21
## 3.0.19
### Patch Changes
- [#1013](https://github.com/thirdweb-dev/js/pull/1013) [`b92aabe4`](https://github.com/thirdweb-dev/js/commit/b92aabe450f40b248fd1b7533f1d3bc7f8f25288) Thanks [@adam-maj](https://github.com/adam-maj)! - Expose request on onUser hook
- Updated dependencies [[`738c0ec6`](https://github.com/thirdweb-dev/js/commit/738c0ec6c4190aa2252233c1382aed5d982cc7b8), [`d495a4b8`](https://github.com/thirdweb-dev/js/commit/d495a4b8a6e0599e5b4611620f3fded80a411173), [`4f843833`](https://github.com/thirdweb-dev/js/commit/4f8438335e3e3731b67ae271cb34c383832242a0)]:
- @thirdweb-dev/wallets@0.2.20
## 3.0.18
### Patch Changes
- Updated dependencies [[`6a4aab0b`](https://github.com/thirdweb-dev/js/commit/6a4aab0b8a2e0f6ff1b47992a3c1e5426a74f7ff)]:
- @thirdweb-dev/wallets@0.2.19
## 3.0.17
### Patch Changes
- Updated dependencies [[`93bdec06`](https://github.com/thirdweb-dev/js/commit/93bdec061dc05ab133e79f5f739dcae9b5393f53), [`ea0f9479`](https://github.com/thirdweb-dev/js/commit/ea0f9479a38d442201e367fce1234c130228fde6), [`05ebbc15`](https://github.com/thirdweb-dev/js/commit/05ebbc15a012855735fba2aa93887b88e14295d1), [`4ca557ae`](https://github.com/thirdweb-dev/js/commit/4ca557ae4ab225e39decc3b7a01a04c0d8e464c7), [`7d7685e3`](https://github.com/thirdweb-dev/js/commit/7d7685e3fab5780b3c1d26b8ef431b96f8486972), [`93bd5733`](https://github.com/thirdweb-dev/js/commit/93bd57337b7d2c2fcd252987d10df3206c839daf)]:
- @thirdweb-dev/wallets@0.2.18
## 3.0.16
### Patch Changes
- [#958](https://github.com/thirdweb-dev/js/pull/958) [`72b8b982`](https://github.com/thirdweb-dev/js/commit/72b8b9829eb11d51a63530af62e5634f182c0d03) Thanks [@adam-maj](https://github.com/adam-maj)! - Add extra options to cookie on logout
- Updated dependencies [[`7012513b`](https://github.com/thirdweb-dev/js/commit/7012513bc20f283b2cde46c0b938af33fe3a1a20), [`5d67b280`](https://github.com/thirdweb-dev/js/commit/5d67b2807f2504add4c202d2eb18897415662fb6), [`f12a80a4`](https://github.com/thirdweb-dev/js/commit/f12a80a4758aa91c43084acedb212de9f36a7371), [`5a67d5d8`](https://github.com/thirdweb-dev/js/commit/5a67d5d89474eac9a638ffaddba139b62965deff), [`d2c7f6d7`](https://github.com/thirdweb-dev/js/commit/d2c7f6d758787fab102ecc0cec16ac74f3c87a1f), [`c7c2530c`](https://github.com/thirdweb-dev/js/commit/c7c2530c7f2ef412f1e40428391e85decf504392), [`e22e4a47`](https://github.com/thirdweb-dev/js/commit/e22e4a47d73e1bbc6e3f0ae7ed56717b44e5ffcd), [`1e4ac672`](https://github.com/thirdweb-dev/js/commit/1e4ac672720c2fb01046bec195877a074ffbda06), [`fc96e147`](https://github.com/thirdweb-dev/js/commit/fc96e14750175b19cb66fa7d50cdbad65b42153a), [`4a69f8c8`](https://github.com/thirdweb-dev/js/commit/4a69f8c85dec420615e9eda8d1ad5b5ef0b87713), [`26cd91ff`](https://github.com/thirdweb-dev/js/commit/26cd91ffe18dad37133a18988f21185c13d64cfb), [`0186721b`](https://github.com/thirdweb-dev/js/commit/0186721bc455aa1f8454839a1a25fa4062b45102), [`1e9fad77`](https://github.com/thirdweb-dev/js/commit/1e9fad779f3ebe535d32c0ce76905a3a8033f2fa), [`7af99d9a`](https://github.com/thirdweb-dev/js/commit/7af99d9a6d54492a29a90288a25b30773a8a10a7), [`8cfb4f38`](https://github.com/thirdweb-dev/js/commit/8cfb4f38ed89c26ad04f19d27c65c24cefa976b6)]:
- @thirdweb-dev/wallets@0.2.17
## 3.0.15
### Patch Changes
- [#874](https://github.com/thirdweb-dev/js/pull/874) [`49922de9`](https://github.com/thirdweb-dev/js/commit/49922de9d9c1258e58a3a05e656b229db469b1dd) Thanks [@iketw](https://github.com/iketw)! - [RN] Adds Auth to React Native
- Adds an optional `secureStorage` to authConfig
- Adds `expo-secure-store` to store the JWT token securely in React Native, passing a default value
- Stores the token in secure storage to be accessed by subsequent calls
- Returns the token in `useLogin` to be used by the user
How I tested:
- Tested in Android/iOS/Web
Usage:
```
<ThirdwebProvider
activeChain="ethereum"
supportedWallets={[metamaskWallet(), rainbowWallet()]}
authConfig={{
domain: https://your-domain.com,
authUrl: '/api/auth',
}}>
<AppInner />
</ThirdwebProvider>
```
```
const { login } = useLogin();
const { logout } = useLogout();
const { user, isLoggedIn } = useUser();
...
const token = await login();
```
- Updated dependencies [[`4acb2b55`](https://github.com/thirdweb-dev/js/commit/4acb2b5561118dde5c7372400d4d754b879aef2e), [`82bea3fa`](https://github.com/thirdweb-dev/js/commit/82bea3fa10294eb3c5c7327fb047e3d1b2c62ff9), [`664d1cd0`](https://github.com/thirdweb-dev/js/commit/664d1cd0dd03f32337c2cf532f0ad860e5aa5ea8), [`c2fec930`](https://github.com/thirdweb-dev/js/commit/c2fec930520e2df89532ec0027ead4563c7708cf)]:
- @thirdweb-dev/[email protected]
## 3.0.14
### Patch Changes
- Updated dependencies [[`b616dca7`](https://github.com/thirdweb-dev/js/commit/b616dca7eb861cd1d2adba3f3d1fe9c3b50f259e), [`2545a440`](https://github.com/thirdweb-dev/js/commit/2545a440dc272690cacbc23023f7b0a68f390c6e), [`229a4741`](https://github.com/thirdweb-dev/js/commit/229a47413e422952ad946b8c09af32cc1fcdc7f0)]:
- @thirdweb-dev/[email protected]
## 3.0.13
### Patch Changes
- Updated dependencies [[`235eb046`](https://github.com/thirdweb-dev/js/commit/235eb0460ae0638f63acf82957bcfea41b9e955d)]:
- @thirdweb-dev/[email protected]
## 3.0.12
### Patch Changes
- Updated dependencies [[`c5c2d947`](https://github.com/thirdweb-dev/js/commit/c5c2d9478acd4d4a4e6ce814716bdf1b6e51eafc), [`2dd192a5`](https://github.com/thirdweb-dev/js/commit/2dd192a5676f1b6d3c310ec796bf331252098d48)]:
- @thirdweb-dev/[email protected]
## 3.0.11
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/[email protected]
## 3.0.10
### Patch Changes
+10 -2
View File
@@ -13,6 +13,14 @@
<p align="center"><strong>Best in class wallet authentication for Node backends</strong></p>
<br />
## Overview
Auth is a developer SDK that lets you integrate passwordless web3-native authentication and authorization into your applications.
It enables users to sign in with their wallets, allowing apps to access rich blockchain-level data and interact with their users on-chain.
With Auth, developers can build applications that have secure, self-custodied, web3-first authentication.
## Installation
Install the latest version of the SDK with either `npm` or `yarn`:
@@ -25,6 +33,6 @@ npm install @thirdweb-dev/auth
yarn add @thirdweb-dev/auth
```
## Documentation
## Resources
- [Auth Docs](https://portal.thirdweb.com/auth)
- Check out the [Auth Documentation](https://portal.thirdweb.com/auth) for full guides and API references on how to use Auth.
+23 -21
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/auth",
"version": "3.0.10",
"version": "3.2.39",
"main": "dist/thirdweb-dev-auth.cjs.js",
"module": "dist/thirdweb-dev-auth.esm.js",
"browser": {
@@ -54,13 +54,15 @@
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/auth",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
"sideEffects": false,
"scripts": {
"build": "preconstruct build",
"format": "prettier --write 'src/**/*'",
"lint": "eslint src/",
"fix": "eslint src/ --fix",
"clean": "rm -rf dist/ && rm -rf node_modules/",
"test": "mocha --config './test/.mocharc.json' --timeout 30000 --parallel './test/**/*.test.ts'"
"test": "mocha --config './test/.mocharc.json' --timeout 30000 --parallel './test/**/*.test.ts'",
"push": "yalc push"
},
"preconstruct": {
"entrypoints": [
@@ -78,41 +80,41 @@
}
},
"devDependencies": {
"@babel/core": "^7.19.3",
"@babel/preset-env": "^7.18.10",
"@babel/preset-typescript": "^7.18.6",
"@microsoft/api-documenter": "^7.19.4",
"@microsoft/api-extractor": "^7.29.2",
"@babel/core": "^7.22.9",
"@babel/preset-env": "^7.22.9",
"@babel/preset-typescript": "^7.22.5",
"@microsoft/api-documenter": "^7.22.30",
"@microsoft/api-extractor": "^7.36.3",
"@microsoft/tsdoc": "^0.14.1",
"@preconstruct/cli": "^2.2.1",
"@preconstruct/cli": "2.7.0",
"@solana/web3.js": "^1.62.0",
"@swc-node/register": "^1.5.1",
"@swc/core": "^1.3.23",
"@swc-node/register": "^1.6.6",
"@swc/core": "^1.3.71",
"@thirdweb-dev/tsconfig": "workspace:*",
"@types/chai": "^4.3.3",
"@types/chai": "^4.3.5",
"@types/cookie": "^0.5.1",
"@types/cookie-parser": "^1.4.3",
"@types/express": "^4.17.13",
"@types/mocha": "^10.0.0",
"@types/uuid": "^9.0.0",
"@typescript-eslint/eslint-plugin": "^5.33.0",
"@typescript-eslint/parser": "^5.33.0",
"@types/uuid": "^9.0.2",
"@typescript-eslint/eslint-plugin": "^6.2.0",
"@typescript-eslint/parser": "^6.2.0",
"chai": "^4.3.6",
"cookie-parser": "^1.4.6",
"eslint": "^8.21.0",
"eslint-config-prettier": "^8.3.0",
"eslint": "^8.45.0",
"eslint-config-prettier": "^8.9.0",
"eslint-config-thirdweb": "workspace:*",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-inclusive-language": "^2.2.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-tsdoc": "^0.2.16",
"ethers": "^5.7.2",
"express": "^4.18.1",
"mocha": "^10.2.0",
"next": "^12.2.0",
"next-auth": "^4.20.1",
"prettier": "^2.7.1",
"typescript": "^4.7.4"
"next": "^12.3.4",
"next-auth": "^4.22.3",
"prettier": "^3.0.0",
"typescript": "^5.1.6"
},
"peerDependencies": {
"@solana/web3.js": "^1.73.0",
+7
View File
@@ -0,0 +1,7 @@
const THIRDWEB_AUTH_COOKIE_PREFIX = `thirdweb_auth`;
export const THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX = `${THIRDWEB_AUTH_COOKIE_PREFIX}_token`;
export const THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE = `${THIRDWEB_AUTH_COOKIE_PREFIX}_active_account`;
export const THIRDWEB_AUTH_DEFAULT_LOGIN_PAYLOAD_DURATION_IN_SECONDS = 60 * 10;
export const THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS = 60 * 60 * 24;
export const THIRDWEB_AUTH_DEFAULT_REFRESH_INTERVAL_IN_SECONDS = 5;
+78 -372
View File
@@ -1,22 +1,28 @@
import {
LoginOptions,
LoginPayload,
GenerateOptions,
LoginPayloadData,
LoginPayloadDataSchema,
AuthenticationPayloadDataSchema,
AuthenticationPayloadData,
LoginOptionsSchema,
VerifyOptionsSchema,
VerifyOptions,
GenerateOptionsSchema,
AuthenticateOptionsSchema,
AuthenticateOptions,
User,
Json,
} from "./schema";
import { isBrowser } from "./utils";
authenticateJWT,
generateJWT,
parseJWT,
refreshJWT,
} from "./functions/jwt";
import {
buildAndSignLoginPayload,
buildLoginPayload,
signLoginPayload,
verifyLoginPayload,
} from "./functions/login";
import type { GenericAuthWallet } from "@thirdweb-dev/wallets";
import { Json, User } from "./schema/common";
import {
LoginOptionsWithOptionalDomain,
LoginPayload,
LoginPayloadData,
} from "./schema/login";
import { VerifyOptionsWithOptionalDomain } from "./schema/verify";
import { GenerateOptionsWithOptionalDomain } from "./schema/generate";
import {
AuthenticateOptionsWithOptionalDomain,
AuthenticationPayload,
} from "./schema/authenticate";
export class ThirdwebAuth {
private domain: string;
@@ -31,382 +37,82 @@ export class ThirdwebAuth {
this.wallet = wallet;
}
public async login(options?: LoginOptions): Promise<LoginPayload> {
const parsedOptions = LoginOptionsSchema.parse(options);
let chainId: string | undefined = parsedOptions?.chainId;
if (!chainId && this.wallet.getChainId) {
try {
chainId = (await this.wallet.getChainId()).toString();
} catch {
// ignore error
}
}
const payloadData = LoginPayloadDataSchema.parse({
type: this.wallet.type,
domain: parsedOptions?.domain || this.domain,
address: await this.wallet.getAddress(),
statement: parsedOptions?.statement,
version: parsedOptions?.version,
uri:
parsedOptions?.uri ||
(isBrowser() ? window.location.origin : undefined),
chain_id: chainId,
nonce: parsedOptions?.nonce,
expiration_time:
parsedOptions?.expirationTime || new Date(Date.now() + 1000 * 60 * 5),
invalid_before: parsedOptions?.invalidBefore,
resources: parsedOptions?.resources,
public async payload(
options?: LoginOptionsWithOptionalDomain,
): Promise<LoginPayloadData> {
return buildLoginPayload({
wallet: this.wallet,
options: this.formatOptions(options),
});
}
const message = this.generateMessage(payloadData);
const signature = await this.wallet.signMessage(message);
public async loginWithPayload(
payload: LoginPayloadData,
): Promise<LoginPayload> {
return signLoginPayload({ wallet: this.wallet, payload });
}
return {
payload: payloadData,
signature,
};
public async login(
options?: LoginOptionsWithOptionalDomain,
): Promise<LoginPayload> {
return buildAndSignLoginPayload({
wallet: this.wallet,
options: this.formatOptions(options),
});
}
public async verify(
payload: LoginPayload,
options?: VerifyOptions,
options?: VerifyOptionsWithOptionalDomain,
): Promise<string> {
const parsedOptions = VerifyOptionsSchema.parse(options);
if (payload.payload.type !== this.wallet.type) {
throw new Error(
`Expected chain type '${this.wallet.type}' does not match chain type on payload '${payload.payload.type}'`,
);
}
// Check that the intended domain matches the domain of the payload
const domain = parsedOptions?.domain || this.domain;
if (payload.payload.domain !== domain) {
throw new Error(
`Expected domain '${domain}' does not match domain on payload '${payload.payload.domain}'`,
);
}
// Check that the payload statement matches the expected statement
if (parsedOptions?.statement) {
if (payload.payload.statement !== parsedOptions.statement) {
throw new Error(
`Expected statement '${parsedOptions.statement}' does not match statement on payload '${payload.payload.statement}'`,
);
}
}
// Check that the intended URI matches the URI of the payload
if (parsedOptions?.uri) {
if (payload.payload.uri !== parsedOptions.uri) {
throw new Error(
`Expected URI '${parsedOptions.uri}' does not match URI on payload '${payload.payload.uri}'`,
);
}
}
// Check that the intended version matches the version of the payload
if (parsedOptions?.version) {
if (payload.payload.version !== parsedOptions.version) {
throw new Error(
`Expected version '${parsedOptions.version}' does not match version on payload '${payload.payload.version}'`,
);
}
}
// Check that the intended chain ID matches the chain ID of the payload
if (parsedOptions?.chainId) {
if (payload.payload.chain_id !== parsedOptions.chainId) {
throw new Error(
`Expected chain ID '${parsedOptions.chainId}' does not match chain ID on payload '${payload.payload.chain_id}'`,
);
}
}
// Check that the payload nonce is valid
if (parsedOptions?.validateNonce !== undefined) {
try {
await parsedOptions.validateNonce(payload.payload.nonce);
} catch (err) {
throw new Error(`Login request nonce is invalid`);
}
}
// Check that it isn't before the invalid before time
const currentTime = new Date();
if (currentTime < new Date(payload.payload.invalid_before)) {
throw new Error(`Login request is not yet valid`);
}
// Check that the payload hasn't expired
if (currentTime > new Date(payload.payload.expiration_time)) {
throw new Error(`Login request has expired`);
}
// Check that the specified resources are present on the payload
if (parsedOptions?.resources) {
const missingResources = parsedOptions.resources.filter(
(resource) => !payload.payload.resources?.includes(resource),
);
if (missingResources.length > 0) {
throw new Error(
`Login request is missing required resources: ${missingResources.join(
", ",
)}`,
);
}
}
// Check that the signing address is the claimed wallet address
const message = this.generateMessage(payload.payload);
const chainId =
this.wallet.type === "evm" && payload.payload.chain_id
? parseInt(payload.payload.chain_id)
: undefined;
const verified = await this.verifySignature(
message,
payload.signature,
payload.payload.address,
chainId,
);
if (!verified) {
throw new Error(
`Signer address does not match payload address '${payload.payload.address.toLowerCase()}'`,
);
}
return payload.payload.address;
return verifyLoginPayload({
wallet: this.wallet,
payload,
options: this.formatOptions(options),
});
}
public async generate(
payload: LoginPayload,
options?: GenerateOptions,
options?: GenerateOptionsWithOptionalDomain,
): Promise<string> {
if (isBrowser()) {
throw new Error(
"Authentication tokens should not be generated in the browser, as they must be signed by a server-side admin wallet.",
);
}
const parsedOptions = GenerateOptionsSchema.parse(options);
const domain = parsedOptions?.domain || this.domain;
const userAddress = await this.verify(payload, {
domain,
...parsedOptions?.verifyOptions,
return generateJWT({
wallet: this.wallet,
payload,
options: this.formatOptions(options),
});
}
public async refresh(jwt: string, expirationTime?: Date): Promise<string> {
return refreshJWT({
wallet: this.wallet,
jwt,
options: { expirationTime },
});
let session: Json | undefined = undefined;
if (typeof parsedOptions?.session === "function") {
const sessionTrigger = (await parsedOptions.session(userAddress)) as Json;
if (sessionTrigger) {
session = sessionTrigger;
}
} else {
session = parsedOptions?.session;
}
const adminAddress = await this.wallet.getAddress();
const payloadData = AuthenticationPayloadDataSchema.parse({
iss: adminAddress,
sub: userAddress,
aud: domain,
nbf: parsedOptions?.invalidBefore || new Date(),
exp:
parsedOptions?.expirationTime ||
new Date(Date.now() + 1000 * 60 * 60 * 5),
iat: new Date(),
jti: parsedOptions?.tokenId,
ctx: session,
});
const message = JSON.stringify(payloadData);
const signature = await this.wallet.signMessage(message);
// Header used for JWT token specifying hash algorithm
const header = {
// Specify ECDSA with SHA-256 for hashing algorithm
alg: "ES256",
typ: "JWT",
};
const encodedHeader = Buffer.from(JSON.stringify(header)).toString(
"base64",
);
const encodedData = Buffer.from(JSON.stringify(payloadData))
.toString("base64")
.replace(/=/g, "");
const encodedSignature = Buffer.from(signature).toString("base64");
// Generate a JWT token with base64 encoded header, payload, and signature
const token = `${encodedHeader}.${encodedData}.${encodedSignature}`;
return token;
}
/**
* Authenticate With Token
* @remarks Server-side function that authenticates the provided JWT token. This function verifies that
* the provided authentication token is valid and returns the address of the authenticated wallet.
*
* @param domain - The domain of the server-side application doing authentication
* @param token - The authentication token being used
* @returns The address of the authenticated wallet
*
* @example
* ```javascript
* const domain = "example.com";
* const loginPayload = await sdk.auth.login(domain);
* const token = await sdk.auth.generateAuthToken(domain, loginPayload);
*
* // Authenticate the token and get the address of authenticating users wallet
* const address = sdk.auth.authenticate(domain, token);
* ```
*/
public async authenticate<TSession extends Json = Json>(
token: string,
options?: AuthenticateOptions,
jwt: string,
options?: AuthenticateOptionsWithOptionalDomain,
): Promise<User<TSession>> {
if (isBrowser()) {
throw new Error(
"Should not authenticate tokens in the browser, as they must be verified by the server-side admin wallet.",
);
}
const parsedOptions = AuthenticateOptionsSchema.parse(options);
const domain = parsedOptions?.domain || this.domain;
const encodedPayload = token.split(".")[1];
const encodedSignature = token.split(".")[2];
const payload: AuthenticationPayloadData = JSON.parse(
Buffer.from(encodedPayload, "base64").toString(),
);
const signature = Buffer.from(encodedSignature, "base64").toString();
// Check that the payload unique ID is valid
if (parsedOptions?.validateTokenId !== undefined) {
try {
await parsedOptions.validateTokenId(payload.jti);
} catch (err) {
throw new Error(`Token ID is invalid`);
}
}
// Check that the token audience matches the domain
if (payload.aud !== domain) {
throw new Error(
`Expected token to be for the domain '${domain}', but found token with domain '${payload.aud}'`,
);
}
// Check that the token is past the invalid before time
const currentTime = Math.floor(new Date().getTime() / 1000);
if (currentTime < payload.nbf) {
throw new Error(
`This token is invalid before epoch time '${payload.nbf}', current epoch time is '${currentTime}'`,
);
}
// Check that the token hasn't expired
if (currentTime > payload.exp) {
throw new Error(
`This token expired at epoch time '${payload.exp}', current epoch time is '${currentTime}'`,
);
}
// Check that the connected wallet matches the token issuer
const connectedAddress = await this.wallet.getAddress();
if (connectedAddress.toLowerCase() !== payload.iss.toLowerCase()) {
throw new Error(
`Expected the connected wallet address '${connectedAddress}' to match the token issuer address '${payload.iss}'`,
);
}
let chainId: number | undefined = undefined;
if (this.wallet.getChainId) {
try {
chainId = await this.wallet.getChainId();
} catch {
// ignore error
}
}
const verified = await this.verifySignature(
JSON.stringify(payload),
signature,
connectedAddress,
chainId,
);
if (!verified) {
throw new Error(
`The connected wallet address '${connectedAddress}' did not sign the token`,
);
}
return {
address: payload.sub,
session: payload.ctx as TSession | undefined,
};
return authenticateJWT({
wallet: this.wallet,
jwt,
options: this.formatOptions(options),
});
}
private async verifySignature(
message: string,
signature: string,
address: string,
chainId?: number,
) {
return this.wallet.verifySignature(message, signature, address, chainId);
public parseToken(jwt: string): AuthenticationPayload {
return parseJWT(jwt);
}
/**
* Generates a EIP-4361 & CAIP-122 compliant message to sign based on the login payload
*/
private generateMessage(payload: LoginPayloadData): string {
const typeField = payload.type === "evm" ? "Ethereum" : "Solana";
const header = `${payload.domain} wants you to sign in with your ${typeField} account:`;
let prefix = [header, payload.address].join("\n");
prefix = [prefix, payload.statement].join("\n\n");
if (payload.statement) {
prefix += "\n";
}
const suffixArray = [];
if (payload.uri) {
const uriField = `URI: ${payload.uri}`;
suffixArray.push(uriField);
}
const versionField = `Version: ${payload.version}`;
suffixArray.push(versionField);
if (payload.chain_id) {
const chainField = `Chain ID: ` + payload.chain_id || "1";
suffixArray.push(chainField);
}
const nonceField = `Nonce: ${payload.nonce}`;
suffixArray.push(nonceField);
const issuedAtField = `Issued At: ${payload.issued_at}`;
suffixArray.push(issuedAtField);
const expiryField = `Expiration Time: ${payload.expiration_time}`;
suffixArray.push(expiryField);
if (payload.invalid_before) {
const invalidBeforeField = `Not Before: ${payload.invalid_before}`;
suffixArray.push(invalidBeforeField);
}
if (payload.resources) {
suffixArray.push(
[`Resources:`, ...payload.resources.map((x) => `- ${x}`)].join("\n"),
);
}
const suffix = suffixArray.join("\n");
return [prefix, suffix].join("\n");
private formatOptions<TOptions extends { domain?: string }>(
options?: TOptions,
): Omit<TOptions, "domain"> & { domain: string } {
return options
? { ...options, domain: options?.domain || this.domain }
: ({ domain: this.domain } as Omit<TOptions, "domain"> & {
domain: string;
});
}
}
+226
View File
@@ -0,0 +1,226 @@
import {
AuthenticateOptionsSchema,
AuthenticationPayload,
AuthenticationPayloadData,
AuthenticationPayloadDataSchema,
} from "../schema/authenticate";
import { Json, User } from "../schema/common";
import {
BuildJwtParams,
RefreshJwtParams,
GenerateJwtParams,
AuthenticateJwtParams,
} from "../schema/functions";
import { GenerateOptionsSchema } from "../schema/generate";
import { RefreshOptionsSchema } from "../schema/refresh";
import { verifyLoginPayload } from "./login";
function isBrowser() {
return typeof window !== "undefined";
}
function base64encode(data: string): string {
if (isBrowser()) {
return window.btoa(data);
}
return Buffer.from(data).toString("base64").replace(/=/g, "");
}
function base64decode(data: string): string {
if (isBrowser()) {
return window.atob(data);
}
return Buffer.from(data, "base64").toString();
}
/**
* Build JWT token based on the authentication payload
*/
async function buildJWT({ wallet, payload }: BuildJwtParams): Promise<string> {
const payloadData = AuthenticationPayloadDataSchema.parse(payload);
const message = JSON.stringify(payloadData);
const signature = await wallet.signMessage(message);
// Header used for JWT token specifying hash algorithm
const header = {
// Specify ECDSA with SHA-256 for hashing algorithm
alg: "ES256",
typ: "JWT",
};
const encodedHeader = base64encode(JSON.stringify(header));
const encodedData = base64encode(JSON.stringify(payloadData));
const encodedSignature = base64encode(signature);
// Generate a JWT with base64 encoded header, payload, and signature
const jwt = `${encodedHeader}.${encodedData}.${encodedSignature}`;
return jwt;
}
/**
* Generate a new JWT using a login payload
*/
export async function generateJWT({
wallet,
payload,
options,
}: GenerateJwtParams): Promise<string> {
const parsedOptions = GenerateOptionsSchema.parse(options);
const userAddress = await verifyLoginPayload({
wallet,
payload,
options: {
domain: parsedOptions.domain,
...parsedOptions.verifyOptions,
},
});
let session: Json | undefined = undefined;
if (typeof parsedOptions?.session === "function") {
const sessionTrigger = (await parsedOptions.session(userAddress)) as Json;
if (sessionTrigger) {
session = sessionTrigger;
}
} else {
session = parsedOptions?.session;
}
const adminAddress = await wallet.getAddress();
return buildJWT({
wallet,
payload: {
iss: adminAddress,
sub: userAddress,
aud: parsedOptions.domain,
nbf: parsedOptions?.invalidBefore || new Date(),
exp: parsedOptions.expirationTime,
iat: new Date(),
jti: parsedOptions?.tokenId,
ctx: session,
},
});
}
/**
* Parse data from an encoded auth JWT
*/
export function parseJWT(jwt: string): AuthenticationPayload {
const encodedPayload = jwt.split(".")[1];
const encodedSignature = jwt.split(".")[2];
const payload: AuthenticationPayloadData = JSON.parse(
base64decode(encodedPayload),
);
const signature = base64decode(encodedSignature);
return {
payload,
signature,
};
}
/**
* Refresh an existing JWT
*/
export async function refreshJWT({
wallet,
jwt,
options,
}: RefreshJwtParams): Promise<string> {
const { payload } = parseJWT(jwt);
const parsedOptions = RefreshOptionsSchema.parse(options);
return buildJWT({
wallet,
payload: {
iss: payload.iss,
sub: payload.sub,
aud: payload.aud,
nbf: new Date(),
exp: parsedOptions.expirationTime,
iat: new Date(),
ctx: payload.ctx,
},
});
}
/**
* Validate a JWT and extract the user's info
*/
export async function authenticateJWT<TSession extends Json = Json>({
wallet,
jwt,
options,
}: AuthenticateJwtParams): Promise<User<TSession>> {
const parsedOptions = AuthenticateOptionsSchema.parse(options);
const { payload, signature } = parseJWT(jwt);
// Check that the payload unique ID is valid
if (parsedOptions?.validateTokenId !== undefined) {
try {
await parsedOptions.validateTokenId(payload.jti);
} catch (err) {
throw new Error(`Token ID is invalid`);
}
}
// Check that the token audience matches the domain
if (payload.aud !== parsedOptions.domain) {
throw new Error(
`Expected token to be for the domain '${parsedOptions.domain}', but found token with domain '${payload.aud}'`,
);
}
// Check that the token is past the invalid before time
const currentTime = Math.floor(new Date().getTime() / 1000);
if (currentTime < payload.nbf) {
throw new Error(
`This token is invalid before epoch time '${payload.nbf}', current epoch time is '${currentTime}'`,
);
}
// Check that the token hasn't expired
if (currentTime > payload.exp) {
throw new Error(
`This token expired at epoch time '${payload.exp}', current epoch time is '${currentTime}'`,
);
}
// Check that the connected wallet matches the token issuer
const issuerAddress = parsedOptions.issuerAddress
? parsedOptions.issuerAddress
: await wallet.getAddress();
if (issuerAddress.toLowerCase() !== payload.iss.toLowerCase()) {
throw new Error(
`The expected issuer address '${issuerAddress}' did not match the token issuer address '${payload.iss}'`,
);
}
let chainId: number | undefined = undefined;
if (wallet.getChainId) {
try {
chainId = await wallet.getChainId();
} catch {
// ignore error
}
}
const verified = await wallet.verifySignature(
JSON.stringify(payload),
signature,
issuerAddress,
chainId,
);
if (!verified) {
throw new Error(
`The expected signer address '${issuerAddress}' did not sign the token`,
);
}
return {
address: payload.sub,
session: payload.ctx as TSession | undefined,
};
}
+224
View File
@@ -0,0 +1,224 @@
import {
BuildLoginPayloadParams,
SignLoginPayloadParams,
VerifyLoginPayloadParams,
} from "../schema/functions";
import {
LoginOptionsSchema,
LoginPayload,
LoginPayloadData,
LoginPayloadDataSchema,
} from "../schema/login";
import { VerifyOptionsSchema } from "../schema/verify";
/**
* Create an EIP-4361 & CAIP-122 compliant message to sign based on the login payload
*/
function createLoginMessage(payload: LoginPayloadData): string {
const typeField = payload.type === "evm" ? "Ethereum" : "Solana";
const header = `${payload.domain} wants you to sign in with your ${typeField} account:`;
let prefix = [header, payload.address].join("\n");
prefix = [prefix, payload.statement].join("\n\n");
if (payload.statement) {
prefix += "\n";
}
const suffixArray = [];
if (payload.uri) {
const uriField = `URI: ${payload.uri}`;
suffixArray.push(uriField);
}
const versionField = `Version: ${payload.version}`;
suffixArray.push(versionField);
if (payload.chain_id) {
const chainField = `Chain ID: ` + payload.chain_id || "1";
suffixArray.push(chainField);
}
const nonceField = `Nonce: ${payload.nonce}`;
suffixArray.push(nonceField);
const issuedAtField = `Issued At: ${payload.issued_at}`;
suffixArray.push(issuedAtField);
const expiryField = `Expiration Time: ${payload.expiration_time}`;
suffixArray.push(expiryField);
if (payload.invalid_before) {
const invalidBeforeField = `Not Before: ${payload.invalid_before}`;
suffixArray.push(invalidBeforeField);
}
if (payload.resources) {
suffixArray.push(
[`Resources:`, ...payload.resources.map((x) => `- ${x}`)].join("\n"),
);
}
const suffix = suffixArray.join("\n");
return [prefix, suffix].join("\n");
}
export async function buildLoginPayload({
wallet,
options,
}: BuildLoginPayloadParams): Promise<LoginPayloadData> {
const parsedOptions = LoginOptionsSchema.parse(options);
let chainId: string | undefined = parsedOptions?.chainId;
if (!chainId && wallet.getChainId) {
try {
chainId = (await wallet.getChainId()).toString();
} catch {
// ignore error
}
}
return LoginPayloadDataSchema.parse({
type: wallet.type,
domain: parsedOptions.domain,
address: parsedOptions?.address || (await wallet.getAddress()),
statement: parsedOptions?.statement,
version: parsedOptions?.version,
uri: parsedOptions?.uri,
chain_id: chainId,
nonce: parsedOptions?.nonce,
expiration_time: parsedOptions.expirationTime,
invalid_before: parsedOptions.invalidBefore,
resources: parsedOptions?.resources,
});
}
export async function signLoginPayload({
wallet,
payload,
}: SignLoginPayloadParams): Promise<LoginPayload> {
const message = createLoginMessage(payload);
const signature = await wallet.signMessage(message);
return {
payload,
signature,
};
}
export async function buildAndSignLoginPayload({
wallet,
options,
}: BuildLoginPayloadParams): Promise<LoginPayload> {
const payload = await buildLoginPayload({ wallet, options });
return signLoginPayload({ wallet, payload });
}
export async function verifyLoginPayload({
wallet,
payload,
options,
}: VerifyLoginPayloadParams): Promise<string> {
const parsedOptions = VerifyOptionsSchema.parse(options);
if (payload.payload.type !== wallet.type) {
throw new Error(
`Expected chain type '${wallet.type}' does not match chain type on payload '${payload.payload.type}'`,
);
}
// Check that the intended domain matches the domain of the payload
if (payload.payload.domain !== parsedOptions.domain) {
throw new Error(
`Expected domain '${parsedOptions.domain}' does not match domain on payload '${payload.payload.domain}'`,
);
}
// Check that the payload statement matches the expected statement
if (parsedOptions?.statement) {
if (payload.payload.statement !== parsedOptions.statement) {
throw new Error(
`Expected statement '${parsedOptions.statement}' does not match statement on payload '${payload.payload.statement}'`,
);
}
}
// Check that the intended URI matches the URI of the payload
if (parsedOptions?.uri) {
if (payload.payload.uri !== parsedOptions.uri) {
throw new Error(
`Expected URI '${parsedOptions.uri}' does not match URI on payload '${payload.payload.uri}'`,
);
}
}
// Check that the intended version matches the version of the payload
if (parsedOptions?.version) {
if (payload.payload.version !== parsedOptions.version) {
throw new Error(
`Expected version '${parsedOptions.version}' does not match version on payload '${payload.payload.version}'`,
);
}
}
// Check that the intended chain ID matches the chain ID of the payload
if (parsedOptions?.chainId) {
if (payload.payload.chain_id !== parsedOptions.chainId) {
throw new Error(
`Expected chain ID '${parsedOptions.chainId}' does not match chain ID on payload '${payload.payload.chain_id}'`,
);
}
}
// Check that the payload nonce is valid
if (parsedOptions?.validateNonce !== undefined) {
try {
await parsedOptions.validateNonce(payload.payload.nonce);
} catch (err) {
throw new Error(`Login request nonce is invalid`);
}
}
// Check that it isn't before the invalid before time
const currentTime = new Date();
if (currentTime < new Date(payload.payload.invalid_before)) {
throw new Error(`Login request is not yet valid`);
}
// Check that the payload hasn't expired
if (currentTime > new Date(payload.payload.expiration_time)) {
throw new Error(`Login request has expired`);
}
// Check that the specified resources are present on the payload
if (parsedOptions?.resources) {
const missingResources = parsedOptions.resources.filter(
(resource) => !payload.payload.resources?.includes(resource),
);
if (missingResources.length > 0) {
throw new Error(
`Login request is missing required resources: ${missingResources.join(
", ",
)}`,
);
}
}
// Check that the signing address is the claimed wallet address
const message = createLoginMessage(payload.payload);
const chainId =
wallet.type === "evm" && payload.payload.chain_id
? parseInt(payload.payload.chain_id)
: undefined;
const verified = await wallet.verifySignature(
message,
payload.signature,
payload.payload.address,
chainId,
);
if (!verified) {
throw new Error(
`Signer address does not match payload address '${payload.payload.address.toLowerCase()}'`,
);
}
return payload.payload.address;
}
+24 -1
View File
@@ -1,2 +1,25 @@
// Export thirdweb auth class
export { ThirdwebAuth } from "./auth";
export * from "./schema";
// Export individual auth functions
export {
generateJWT,
parseJWT,
refreshJWT,
authenticateJWT,
} from "./functions/jwt";
export {
buildLoginPayload,
signLoginPayload,
buildAndSignLoginPayload,
verifyLoginPayload,
} from "./functions/login";
// Export schema files individually
export * from "./schema/authenticate";
export * from "./schema/common";
export * from "./schema/functions";
export * from "./schema/generate";
export * from "./schema/login";
export * from "./schema/refresh";
export * from "./schema/verify";
-208
View File
@@ -1,208 +0,0 @@
import { utils, BigNumber } from "ethers";
import { v4 as uuidv4 } from "uuid";
import { z } from "zod";
export const AddressSchema = z.string().refine(
(arg) => utils.isAddress(arg),
(out) => {
return {
message: `${out} is not a valid address`,
};
},
);
export const RawDateSchema = z.date().transform((i) => {
return BigNumber.from(Math.floor(i.getTime() / 1000));
});
export const AccountTypeSchema = z.union([
z.literal("evm"),
z.literal("solana"),
]);
const literalSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
type Literal = z.infer<typeof literalSchema>;
export type Json = Literal | { [key: string]: Json } | Json[];
const JsonSchema: z.ZodType<Json> = z.lazy(
() => z.union([literalSchema, z.array(JsonSchema), z.record(JsonSchema)]),
{ invalid_type_error: "Provided value was not valid JSON" },
);
/**
* @internal
*/
export const LoginOptionsSchema = z
.object({
domain: z.string().optional(),
statement: z.string().optional(),
uri: z.string().optional(),
version: z.string().optional(),
chainId: z.string().optional(),
nonce: z.string().optional(),
expirationTime: z.date().optional(),
invalidBefore: z.date().optional(),
resources: z.array(z.string()).optional(),
})
.optional();
/**
* @internal
*/
export const LoginPayloadDataSchema = z.object({
type: AccountTypeSchema,
domain: z.string(),
address: z.string(),
statement: z
.string()
.default(
"Please ensure that the domain above matches the URL of the current website.",
),
uri: z.string().optional(),
version: z.string().default("1"),
chain_id: z.string().optional(),
nonce: z.string().default(uuidv4()),
issued_at: z
.date()
.default(new Date())
.transform((d) => d.toISOString()),
expiration_time: z.date().transform((d) => d.toISOString()),
invalid_before: z
.date()
.default(new Date())
.transform((d) => d.toISOString()),
resources: z.array(z.string()).optional(),
});
/**
* @internal
*/
export const LoginPayloadSchema = z.object({
payload: LoginPayloadDataSchema,
signature: z.string(),
});
/**
* @internal
*/
const VerifyOptionsSchemaRequired = z.object({
domain: z.string().optional(),
statement: z.string().optional(),
uri: z.string().optional(),
version: z.string().optional(),
chainId: z.string().optional(),
validateNonce: z.function().args(z.string()).optional(),
resources: z.array(z.string()).optional(),
});
/**
* @internal
*/
export const VerifyOptionsSchema = VerifyOptionsSchemaRequired.optional();
/**
* @internal
*/
export const GenerateOptionsSchema = z
.object({
domain: z.string().optional(),
tokenId: z.string().optional(),
expirationTime: z.date().optional(),
invalidBefore: z.date().optional(),
session: z.union([JsonSchema, z.function().args(z.string())]).optional(),
verifyOptions: VerifyOptionsSchemaRequired.omit({
domain: true,
}).optional(),
})
.optional();
/**
* @internal
*/
export const AuthenticationPayloadDataSchema = z.object({
iss: z.string(),
sub: z.string(),
aud: z.string(),
exp: RawDateSchema.transform((b) => b.toNumber()),
nbf: RawDateSchema.transform((b) => b.toNumber()),
iat: RawDateSchema.transform((b) => b.toNumber()),
jti: z.string().default(uuidv4()),
ctx: JsonSchema.optional(),
});
/**
* @internal
*/
export const AuthenticationPayloadSchema = z.object({
payload: AuthenticationPayloadDataSchema,
signature: z.string(),
});
/**
* @internal
*/
export const AuthenticateOptionsSchema = z
.object({
domain: z.string().optional(),
validateTokenId: z.function().args(z.string()).optional(),
})
.optional();
/**
* @public
*/
export type LoginOptions = z.input<typeof LoginOptionsSchema>;
/**
* @public
*/
export type LoginPayloadData = z.output<typeof LoginPayloadDataSchema>;
/**
* @public
*/
export type LoginPayload = z.output<typeof LoginPayloadSchema>;
/**
* @public
*/
export type VerifyOptions = z.input<typeof VerifyOptionsSchema>;
/**
* @public
*/
export type GenerateOptions = z.input<typeof GenerateOptionsSchema>;
/**
* @public
*/
export type AuthenticationPayloadData = z.output<
typeof AuthenticationPayloadDataSchema
>;
/**
* @public
*/
export type AuthenticationPayload = z.output<
typeof AuthenticationPayloadSchema
>;
/**
* @public
*/
export type AuthenticateOptions = z.output<typeof AuthenticateOptionsSchema>;
/**
* @public
*/
export type User<TContext extends Json = Json> = {
address: string;
session?: TContext;
};
export const LoginPayloadOutputSchema = LoginPayloadSchema.extend({
payload: LoginPayloadDataSchema.extend({
issued_at: z.string(),
expiration_time: z.string(),
invalid_before: z.string(),
}),
});
@@ -0,0 +1,46 @@
import { z } from "zod";
import { v4 as uuidv4 } from "uuid";
import { AddressSchema, JsonSchema, RawDateSchema } from "./common";
export const AuthenticationPayloadDataSchema = z.object({
iss: z.string(),
sub: z.string(),
aud: z.string(),
exp: RawDateSchema,
nbf: RawDateSchema,
iat: RawDateSchema,
jti: z.string().default(uuidv4()),
ctx: JsonSchema.optional(),
});
export const AuthenticationPayloadSchema = z.object({
payload: AuthenticationPayloadDataSchema,
signature: z.string(),
});
export const AuthenticateOptionsSchema = z.object({
domain: z.string(),
issuerAddress: AddressSchema.optional(),
validateTokenId: z.function().args(z.string()).optional(),
});
export type AuthenticationPayloadDataInput = z.input<
typeof AuthenticationPayloadDataSchema
>;
export type AuthenticationPayloadData = z.output<
typeof AuthenticationPayloadDataSchema
>;
export type AuthenticationPayload = z.output<
typeof AuthenticationPayloadSchema
>;
export type AuthenticateOptions = z.output<typeof AuthenticateOptionsSchema>;
export type AuthenticateOptionsWithOptionalDomain = Omit<
AuthenticateOptions,
"domain"
> & {
domain?: string;
};
+34
View File
@@ -0,0 +1,34 @@
import { utils } from "ethers";
import { z } from "zod";
const literalSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
type Literal = z.infer<typeof literalSchema>;
export type Json = Literal | { [key: string]: Json } | Json[];
export const JsonSchema: z.ZodType<Json> = z.lazy(
() => z.union([literalSchema, z.array(JsonSchema), z.record(JsonSchema)]),
{ invalid_type_error: "Provided value was not valid JSON" },
);
export const AddressSchema = z.string().refine(
(arg) => utils.isAddress(arg),
(out) => {
return {
message: `${out} is not a valid address`,
};
},
);
export const RawDateSchema = z.date().transform((i) => {
return Math.floor(i.getTime() / 1000);
});
export const AccountTypeSchema = z.union([
z.literal("evm"),
z.literal("solana"),
]);
export type User<TContext extends Json = Json> = {
address: string;
session?: TContext;
};
@@ -0,0 +1,48 @@
import { GenericAuthWallet } from "@thirdweb-dev/wallets";
import { LoginOptions, LoginPayload, LoginPayloadData } from "./login";
import { VerifyOptions } from "./verify";
import {
AuthenticateOptions,
AuthenticationPayloadDataInput,
} from "./authenticate";
import { RefreshOptions } from "./refresh";
import { GenerateOptions } from "./generate";
export type BuildLoginPayloadParams = {
wallet: GenericAuthWallet;
options: LoginOptions;
};
export type SignLoginPayloadParams = {
wallet: GenericAuthWallet;
payload: LoginPayloadData;
};
export type VerifyLoginPayloadParams = {
wallet: GenericAuthWallet;
payload: LoginPayload;
options: VerifyOptions;
};
export type BuildJwtParams = {
wallet: GenericAuthWallet;
payload: AuthenticationPayloadDataInput;
};
export type GenerateJwtParams = {
wallet: GenericAuthWallet;
payload: LoginPayload;
options: GenerateOptions;
};
export type RefreshJwtParams = {
wallet: GenericAuthWallet;
jwt: string;
options?: RefreshOptions;
};
export type AuthenticateJwtParams = {
wallet: GenericAuthWallet;
jwt: string;
options: AuthenticateOptions;
};
+31
View File
@@ -0,0 +1,31 @@
import { z } from "zod";
import { VerifyOptionsSchema } from "./verify";
import { JsonSchema } from "./common";
import { THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS } from "../../constants";
export const GenerateOptionsSchema = z.object({
domain: z.string(),
tokenId: z.string().optional(),
expirationTime: z
.date()
.default(
() =>
new Date(
Date.now() + 1000 * THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS,
),
),
invalidBefore: z.date().optional(),
session: z.union([JsonSchema, z.function().args(z.string())]).optional(),
verifyOptions: VerifyOptionsSchema.omit({
domain: true,
}).optional(),
});
export type GenerateOptions = z.input<typeof GenerateOptionsSchema>;
export type GenerateOptionsWithOptionalDomain = Omit<
GenerateOptions,
"domain"
> & {
domain?: string;
};
+81
View File
@@ -0,0 +1,81 @@
import { z } from "zod";
import { v4 as uuidv4 } from "uuid";
import { AccountTypeSchema } from "./common";
import { THIRDWEB_AUTH_DEFAULT_LOGIN_PAYLOAD_DURATION_IN_SECONDS } from "../../constants";
export const LoginOptionsSchema = z.object({
domain: z.string(),
address: z.string().optional(),
statement: z.string().optional(),
uri: z.string().optional(),
version: z.string().optional(),
chainId: z.string().optional(),
nonce: z.string().optional(),
expirationTime: z
.date()
.default(
() =>
new Date(
Date.now() +
1000 * THIRDWEB_AUTH_DEFAULT_LOGIN_PAYLOAD_DURATION_IN_SECONDS,
),
),
invalidBefore: z
.date()
.default(
() =>
new Date(
Date.now() -
1000 * THIRDWEB_AUTH_DEFAULT_LOGIN_PAYLOAD_DURATION_IN_SECONDS,
),
),
resources: z.array(z.string()).optional(),
});
export const LoginPayloadDataSchema = z.object({
type: AccountTypeSchema,
domain: z.string(),
address: z.string(),
statement: z
.string()
.default(
"Please ensure that the domain above matches the URL of the current website.",
),
uri: z.string().optional(),
version: z.string().default("1"),
chain_id: z.string().optional(),
nonce: z.string().default(uuidv4()),
issued_at: z
.date()
.default(new Date())
.transform((d) => d.toISOString()),
expiration_time: z.date().transform((d) => d.toISOString()),
invalid_before: z
.date()
.default(new Date())
.transform((d) => d.toISOString()),
resources: z.array(z.string()).optional(),
});
export const LoginPayloadSchema = z.object({
payload: LoginPayloadDataSchema,
signature: z.string(),
});
export const LoginPayloadOutputSchema = LoginPayloadSchema.extend({
payload: LoginPayloadDataSchema.extend({
issued_at: z.string(),
expiration_time: z.string(),
invalid_before: z.string(),
}),
});
export type LoginOptions = z.input<typeof LoginOptionsSchema>;
export type LoginPayloadData = z.output<typeof LoginPayloadDataSchema>;
export type LoginPayload = z.output<typeof LoginPayloadSchema>;
export type LoginOptionsWithOptionalDomain = Omit<LoginOptions, "domain"> & {
domain?: string;
};
+15
View File
@@ -0,0 +1,15 @@
import { z } from "zod";
import { THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS } from "../../constants";
export const RefreshOptionsSchema = z.object({
expirationTime: z
.date()
.default(
() =>
new Date(
Date.now() + 1000 * THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS,
),
),
});
export type RefreshOptions = z.input<typeof RefreshOptionsSchema>;
+17
View File
@@ -0,0 +1,17 @@
import { z } from "zod";
export const VerifyOptionsSchema = z.object({
domain: z.string(),
statement: z.string().optional(),
uri: z.string().optional(),
version: z.string().optional(),
chainId: z.string().optional(),
validateNonce: z.function().args(z.string()).optional(),
resources: z.array(z.string()).optional(),
});
export type VerifyOptions = z.input<typeof VerifyOptionsSchema>;
export type VerifyOptionsWithOptionalDomain = Omit<VerifyOptions, "domain"> & {
domain?: string;
};
-9
View File
@@ -1,9 +0,0 @@
/**
* @internal
*/
export const isBrowser = () => typeof window !== "undefined";
/**
* @internal
*/
export const isNode = () => !isBrowser();
+40 -8
View File
@@ -1,24 +1,56 @@
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
import { Json } from "../../core/schema";
import { ThirdwebAuthContext, ThirdwebAuthUser } from "../types";
import { Request } from "express";
function getToken(req: Request): string | undefined {
export function getCookie(req: Request, cookie: string): string | undefined {
if (typeof req.cookies.get === "function") {
return req.cookies.get(cookie);
}
return req.cookies[cookie];
}
export function getActiveCookie(req: Request): string | undefined {
if (!req.cookies) {
return undefined;
}
const activeAccount = getCookie(req, THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE);
if (activeAccount) {
return `${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${activeAccount}`;
}
// If active account is not present, then use the old default
return THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX;
}
/**
* @internal
* @param req
* @returns
*/
export function getToken(req: Request): string | undefined {
if (req.headers["authorization"]) {
const authorizationHeader = req.headers["authorization"].split(" ");
if (authorizationHeader?.length === 2) {
return authorizationHeader[1];
}
}
if (!req.cookies) {
return undefined;
}
const cookie: string | undefined = !req.cookies
? undefined
: typeof req.cookies.get === "function"
? (req.cookies as any).get("thirdweb_auth_token")
: (req.cookies as any).thirdweb_auth_token;
const activeCookie = getActiveCookie(req);
if (!activeCookie) {
return undefined;
}
return cookie;
return getCookie(req, activeCookie);
}
export async function getUser<
@@ -51,7 +83,7 @@ export async function getUser<
return authenticatedUser;
}
const data = await ctx.callbacks.onUser(authenticatedUser);
const data = await ctx.callbacks.onUser(authenticatedUser, req);
if (!data) {
return authenticatedUser;
}
+17
View File
@@ -1,8 +1,10 @@
import { Json, ThirdwebAuth as ThirdwebAuthSDK } from "../core";
import { getUser } from "./helpers/user";
import payloadHandler from "./routes/payload";
import loginHandler from "./routes/login";
import logoutHandler from "./routes/logout";
import userHandler from "./routes/user";
import switchAccountHandler from "./routes/switch-account";
import {
ThirdwebAuthConfig,
ThirdwebAuthContext,
@@ -12,6 +14,7 @@ import cookieParser from "cookie-parser";
import express, { Request, Response } from "express";
export * from "./types";
export { getToken } from "./helpers/user";
const asyncHandler =
(fn: CallableFunction) =>
@@ -47,6 +50,13 @@ export function ThirdwebAuth<
router.use(express.json());
router.use(cookieMiddleware);
router.post(
"/payload",
asyncHandler((req: Request, res: Response) =>
payloadHandler(req, res, ctx as ThirdwebAuthContext),
),
);
router.post(
"/login",
asyncHandler((req: Request, res: Response) =>
@@ -68,6 +78,13 @@ export function ThirdwebAuth<
),
);
router.post(
"/switch-account",
asyncHandler((req: Request, res: Response) =>
switchAccountHandler(req, res, ctx as ThirdwebAuthContext),
),
);
return {
authRouter: router,
authMiddleware: cookieMiddleware,
+24 -4
View File
@@ -1,3 +1,7 @@
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
import { GenerateOptions } from "../../core";
import { LoginPayloadBodySchema, ThirdwebAuthContext } from "../types";
import { serialize } from "cookie";
@@ -64,18 +68,34 @@ export default async function handler(
}
}
const {
payload: { exp },
} = ctx.auth.parseToken(token);
// Securely set httpOnly cookie on request to prevent XSS on frontend
// And set path to / to enable thirdweb_auth_token usage on all endpoints
res.setHeader(
"Set-Cookie",
serialize("thirdweb_auth_token", token, {
res.setHeader("Set-Cookie", [
serialize(
`${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${payload.payload.address}`,
token,
{
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(exp * 1000),
httpOnly: true,
secure: true,
},
),
serialize(THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE, payload.payload.address, {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(exp * 1000),
httpOnly: true,
secure: true,
}),
);
]);
// Send token in body and as cookie for frontend and backend use cases
return res.status(200).json({ token });
+12 -2
View File
@@ -1,4 +1,4 @@
import { getUser } from "../helpers/user";
import { getActiveCookie, getUser } from "../helpers/user";
import { ThirdwebAuthContext } from "../types";
import { serialize } from "cookie";
import { Request, Response } from "express";
@@ -14,6 +14,13 @@ export default async function handler(
});
}
const activeCookie = getActiveCookie(req);
if (!activeCookie) {
return res.status(400).json({
error: "No logged in user to logout.",
});
}
if (ctx.callbacks?.onLogout) {
const user = await getUser(req, ctx);
if (user) {
@@ -24,10 +31,13 @@ export default async function handler(
// Set the access token to 'none' and expire in 5 seconds
res.setHeader(
"Set-Cookie",
serialize("thirdweb_auth_token", "", {
serialize(activeCookie, "", {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(Date.now() + 5 * 1000),
httpOnly: true,
secure: true,
}),
);
@@ -0,0 +1,36 @@
import { Request, Response } from "express";
import { PayloadBodySchema, ThirdwebAuthContext } from "../types";
export default async function handler(
req: Request,
res: Response,
ctx: ThirdwebAuthContext,
) {
if (req.method !== "POST") {
return res.status(405).json({
error: "Invalid method. Only POST supported.",
});
}
const parsedPayload = PayloadBodySchema.safeParse(req.body);
if (!parsedPayload.success) {
return res.status(400).json({ error: "Please provide an address" });
}
// TODO: Add nonce generation + custom expiration + invalid before
const payload = await ctx.auth.payload({
address: parsedPayload.data.address,
statement: ctx.authOptions?.statement,
uri: ctx.authOptions?.uri,
version: ctx.authOptions?.version,
chainId: parsedPayload.data.chainId || ctx.authOptions?.chainId,
resources: ctx.authOptions?.resources,
expirationTime: ctx.authOptions?.loginPayloadDurationInSeconds
? new Date(
Date.now() + 1000 * ctx.authOptions.loginPayloadDurationInSeconds,
)
: undefined,
});
return res.status(200).json({ payload });
}
@@ -0,0 +1,63 @@
import { Request, Response } from "express";
import { ActiveBodySchema, ThirdwebAuthContext } from "../types";
import { serialize } from "cookie";
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
import { getCookie } from "../helpers/user";
export default async function handler(
req: Request,
res: Response,
ctx: ThirdwebAuthContext,
) {
if (req.method !== "POST") {
return res.status(405).json({
error: "Invalid method. Only POST supported.",
});
}
const parsedPayload = ActiveBodySchema.safeParse(req.body);
if (!parsedPayload.success) {
return res.status(400).json({ error: "Please provide an address" });
}
let cookieExpiration: Date;
const cookie = getCookie(
req,
`${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${parsedPayload.data.address}`,
);
if (cookie) {
// If the new account is already logged in, get the expiration time from the cookie
const {
payload: { exp },
} = ctx.auth.parseToken(cookie);
cookieExpiration = new Date(exp * 1000);
} else if (ctx.authOptions?.tokenDurationInSeconds) {
// Otherwise, if we have a token duration in seconds, set it to that
cookieExpiration = new Date(
Date.now() + 1000 * ctx.authOptions.tokenDurationInSeconds,
);
} else {
// Otherwise, just default to 24 hours
cookieExpiration = new Date(
Date.now() + 1000 * THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS,
);
}
res.setHeader("Set-Cookie", [
serialize(THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE, parsedPayload.data.address, {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: cookieExpiration,
httpOnly: true,
secure: true,
}),
]);
return res.status(200).end();
}
+56 -1
View File
@@ -1,6 +1,12 @@
import { getUser } from "../helpers/user";
import { serialize } from "cookie";
import { getToken, getUser } from "../helpers/user";
import { ThirdwebAuthContext } from "../types";
import { Request, Response } from "express";
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_DEFAULT_REFRESH_INTERVAL_IN_SECONDS,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
export default async function handler(
req: Request,
@@ -14,5 +20,54 @@ export default async function handler(
}
const user = await getUser(req, ctx);
// Importantly, make sure the user was actually logged in before refreshing
if (user) {
const token = getToken(req);
if (token) {
const payload = ctx.auth.parseToken(token);
const refreshDate = ctx.authOptions?.refreshIntervalInSeconds
? new Date(
payload.payload.iat * 1000 +
ctx.authOptions.refreshIntervalInSeconds * 1000,
)
: new Date(
payload.payload.iat * 1000 +
THIRDWEB_AUTH_DEFAULT_REFRESH_INTERVAL_IN_SECONDS * 1000,
);
if (new Date() > refreshDate) {
const expirationTime = ctx.authOptions?.tokenDurationInSeconds
? new Date(Date.now() + 1000 * ctx.authOptions.tokenDurationInSeconds)
: undefined;
const refreshedToken = await ctx.auth.refresh(token, expirationTime);
const refreshedPayload = ctx.auth.parseToken(refreshedToken);
res.setHeader("Set-Cookie", [
serialize(
`${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${user.address}`,
refreshedToken,
{
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(refreshedPayload.payload.exp * 1000),
httpOnly: true,
secure: true,
},
),
serialize(THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE, user.address, {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(refreshedPayload.payload.exp * 1000),
httpOnly: true,
secure: true,
}),
]);
}
}
}
return res.status(200).json(user);
}
+12 -1
View File
@@ -1,9 +1,18 @@
import { ThirdwebAuth } from "../../core";
import { Json, LoginPayloadOutputSchema, User } from "../../core/schema";
import { Json, LoginPayloadOutputSchema, User } from "../../core";
import type { GenericAuthWallet } from "@thirdweb-dev/wallets";
import { Request } from "express";
import { z } from "zod";
export const PayloadBodySchema = z.object({
address: z.string(),
chainId: z.string().optional(),
});
export const ActiveBodySchema = z.object({
address: z.string(),
});
export const LoginPayloadBodySchema = z.object({
payload: LoginPayloadOutputSchema,
});
@@ -35,7 +44,9 @@ export type ThirdwebAuthConfig<
validateTokenId?:
| ((tokenId: string) => void)
| ((tokenId: string) => Promise<void>);
loginPayloadDurationInSeconds?: number;
tokenDurationInSeconds?: number;
refreshIntervalInSeconds?: number;
};
cookieOptions?: {
domain?: string;
+40 -8
View File
@@ -1,9 +1,40 @@
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
import { Json } from "../../core/schema";
import { ThirdwebAuthContext, ThirdwebAuthUser } from "../types";
import { GetServerSidePropsContext, NextApiRequest } from "next";
import { NextRequest } from "next/server";
function getToken(
export function getCookie(
req: GetServerSidePropsContext["req"] | NextRequest | NextApiRequest,
cookie: string,
): string | undefined {
if (typeof req.cookies.get === "function") {
return req.cookies.get(cookie);
}
return (req.cookies as any)[cookie];
}
export function getActiveCookie(
req: GetServerSidePropsContext["req"] | NextRequest | NextApiRequest,
): string | undefined {
if (!req.cookies) {
return undefined;
}
const activeAccount = getCookie(req, THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE);
if (activeAccount) {
return `${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${activeAccount}`;
}
// If active account is not present, then use the old default
return THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX;
}
export function getToken(
req: GetServerSidePropsContext["req"] | NextRequest | NextApiRequest,
): string | undefined {
if (!!(req as NextApiRequest).headers["authorization"]) {
@@ -13,17 +44,18 @@ function getToken(
if (authorizationHeader?.length === 2) {
return authorizationHeader[1];
}
}
if (!req.cookies) {
return undefined;
}
const cookie: string | undefined = !req.cookies
? undefined
: typeof req.cookies.get === "function"
? (req.cookies as any).get("thirdweb_auth_token")
: (req.cookies as any).thirdweb_auth_token;
const activeCookie = getActiveCookie(req);
if (!activeCookie) {
return undefined;
}
return cookie;
return getCookie(req, activeCookie);
}
export async function getUser<
@@ -56,7 +88,7 @@ export async function getUser<
return authenticatedUser;
}
const data = await ctx.callbacks.onUser(authenticatedUser);
const data = await ctx.callbacks.onUser(authenticatedUser, req);
if (!data) {
return authenticatedUser;
}
+6
View File
@@ -1,8 +1,10 @@
import { Json, ThirdwebAuth as ThirdwebAuthSDK } from "../core";
import { getUser } from "./helpers/user";
import payloadHandler from "./routes/payload";
import loginHandler from "./routes/login";
import logoutHandler from "./routes/logout";
import userHandler from "./routes/user";
import switchAccountHandler from "./routes/switch-account";
import {
ThirdwebAuthConfig,
ThirdwebAuthContext,
@@ -27,12 +29,16 @@ async function ThirdwebAuthRouter(
const action = thirdweb?.[0] as ThirdwebAuthRoute;
switch (action) {
case "payload":
return await payloadHandler(req, res, ctx);
case "login":
return await loginHandler(req, res, ctx);
case "user":
return await userHandler(req, res, ctx);
case "logout":
return await logoutHandler(req, res, ctx);
case "switch-account":
return await switchAccountHandler(req, res, ctx);
default:
return res.status(400).json({
message: "Invalid route for authentication.",
+24 -4
View File
@@ -1,3 +1,7 @@
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
import { GenerateOptions } from "../../core";
import { LoginPayloadBodySchema, ThirdwebAuthContext } from "../types";
import { serialize } from "cookie";
@@ -64,18 +68,34 @@ export default async function handler(
}
}
const {
payload: { exp },
} = ctx.auth.parseToken(token);
// Securely set httpOnly cookie on request to prevent XSS on frontend
// And set path to / to enable thirdweb_auth_token usage on all endpoints
res.setHeader(
"Set-Cookie",
serialize("thirdweb_auth_token", token, {
res.setHeader("Set-Cookie", [
serialize(
`${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${payload.payload.address}`,
token,
{
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(exp * 1000),
httpOnly: true,
secure: true,
},
),
serialize(THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE, payload.payload.address, {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(exp * 1000),
httpOnly: true,
secure: true,
}),
);
]);
// Send token in body and as cookie for frontend and backend use cases
return res.status(200).json({ token });
+12 -2
View File
@@ -1,4 +1,4 @@
import { getUser } from "../helpers/user";
import { getActiveCookie, getUser } from "../helpers/user";
import { ThirdwebAuthContext } from "../types";
import { serialize } from "cookie";
import { NextApiRequest, NextApiResponse } from "next";
@@ -14,6 +14,13 @@ export default async function handler(
});
}
const activeCookie = getActiveCookie(req);
if (!activeCookie) {
return res.status(400).json({
error: "No logged in user to logout.",
});
}
if (ctx.callbacks?.onLogout) {
const user = await getUser(req, ctx);
if (user) {
@@ -24,10 +31,13 @@ export default async function handler(
// Set the access token to 'none' and expire in 5 seconds
res.setHeader(
"Set-Cookie",
serialize("thirdweb_auth_token", "", {
serialize(activeCookie, "", {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(Date.now() + 5 * 1000),
httpOnly: true,
secure: true,
}),
);
+36
View File
@@ -0,0 +1,36 @@
import { PayloadBodySchema, ThirdwebAuthContext } from "../types";
import { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
ctx: ThirdwebAuthContext,
) {
if (req.method !== "POST") {
return res.status(405).json({
error: "Invalid method. Only POST supported.",
});
}
const parsedPayload = PayloadBodySchema.safeParse(req.body);
if (!parsedPayload.success) {
return res.status(400).json({ error: "Please provide an address" });
}
// TODO: Add nonce generation + custom expiration + invalid before
const payload = await ctx.auth.payload({
address: parsedPayload.data.address,
statement: ctx.authOptions?.statement,
uri: ctx.authOptions?.uri,
version: ctx.authOptions?.version,
chainId: parsedPayload.data.chainId || ctx.authOptions?.chainId,
resources: ctx.authOptions?.resources,
expirationTime: ctx.authOptions?.loginPayloadDurationInSeconds
? new Date(
Date.now() + 1000 * ctx.authOptions.loginPayloadDurationInSeconds,
)
: undefined,
});
return res.status(200).json({ payload });
}
@@ -0,0 +1,63 @@
import { serialize } from "cookie";
import { getCookie } from "../helpers/user";
import { ActiveBodySchema, ThirdwebAuthContext } from "../types";
import { NextApiRequest, NextApiResponse } from "next";
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
ctx: ThirdwebAuthContext,
) {
if (req.method !== "POST") {
return res.status(405).json({
error: "Invalid method. Only POST supported.",
});
}
const parsedPayload = ActiveBodySchema.safeParse(req.body);
if (!parsedPayload.success) {
return res.status(400).json({ error: "Please provide an address" });
}
let cookieExpiration: Date;
const cookie = getCookie(
req,
`${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${parsedPayload.data.address}`,
);
if (cookie) {
// If the new account is already logged in, get the expiration time from the cookie
const {
payload: { exp },
} = ctx.auth.parseToken(cookie);
cookieExpiration = new Date(exp * 1000);
} else if (ctx.authOptions?.tokenDurationInSeconds) {
// Otherwise, if we have a token duration in seconds, set it to that
cookieExpiration = new Date(
Date.now() + 1000 * ctx.authOptions.tokenDurationInSeconds,
);
} else {
// Otherwise, just default to 24 hours
cookieExpiration = new Date(
Date.now() + 1000 * THIRDWEB_AUTH_DEFAULT_TOKEN_DURATION_IN_SECONDS,
);
}
res.setHeader("Set-Cookie", [
serialize(THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE, parsedPayload.data.address, {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: cookieExpiration,
httpOnly: true,
secure: true,
}),
]);
return res.status(200).end();
}
+56 -1
View File
@@ -1,4 +1,10 @@
import { getUser } from "../helpers/user";
import { serialize } from "cookie";
import {
THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE,
THIRDWEB_AUTH_DEFAULT_REFRESH_INTERVAL_IN_SECONDS,
THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX,
} from "../../constants";
import { getToken, getUser } from "../helpers/user";
import { ThirdwebAuthContext } from "../types";
import { NextApiRequest, NextApiResponse } from "next";
@@ -14,5 +20,54 @@ export default async function handler(
}
const user = await getUser(req, ctx);
// Importantly, make sure the user was actually logged in before refreshing
if (user) {
const token = getToken(req);
if (token) {
const payload = ctx.auth.parseToken(token);
const refreshDate = ctx.authOptions?.refreshIntervalInSeconds
? new Date(
payload.payload.iat * 1000 +
ctx.authOptions.refreshIntervalInSeconds * 1000,
)
: new Date(
payload.payload.iat * 1000 +
THIRDWEB_AUTH_DEFAULT_REFRESH_INTERVAL_IN_SECONDS * 1000,
);
if (new Date() > refreshDate) {
const expirationTime = ctx.authOptions?.tokenDurationInSeconds
? new Date(Date.now() + 1000 * ctx.authOptions.tokenDurationInSeconds)
: undefined;
const refreshedToken = await ctx.auth.refresh(token, expirationTime);
const refreshedPayload = ctx.auth.parseToken(refreshedToken);
res.setHeader("Set-Cookie", [
serialize(
`${THIRDWEB_AUTH_TOKEN_COOKIE_PREFIX}_${user.address}`,
refreshedToken,
{
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(refreshedPayload.payload.exp * 1000),
httpOnly: true,
secure: true,
},
),
serialize(THIRDWEB_AUTH_ACTIVE_ACCOUNT_COOKIE, user.address, {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(refreshedPayload.payload.exp * 1000),
httpOnly: true,
secure: true,
}),
]);
}
}
}
return res.status(200).json(user);
}
+18 -3
View File
@@ -1,10 +1,18 @@
import { ThirdwebAuth } from "../../core";
import { Json, LoginPayloadOutputSchema, User } from "../../core/schema";
import { Json, LoginPayloadOutputSchema, ThirdwebAuth, User } from "../../core";
import type { GenericAuthWallet } from "@thirdweb-dev/wallets";
import { GetServerSidePropsContext, NextApiRequest } from "next";
import { NextRequest } from "next/server";
import { z } from "zod";
export const PayloadBodySchema = z.object({
address: z.string(),
chainId: z.string().optional(),
});
export const ActiveBodySchema = z.object({
address: z.string(),
});
export const LoginPayloadBodySchema = z.object({
payload: LoginPayloadOutputSchema,
});
@@ -14,7 +22,12 @@ type RequestType =
| NextRequest
| NextApiRequest;
export type ThirdwebAuthRoute = "login" | "logout" | "user";
export type ThirdwebAuthRoute =
| "payload"
| "login"
| "logout"
| "user"
| "switch-account";
export type ThirdwebAuthUser<
TData extends Json = Json,
@@ -41,7 +54,9 @@ export type ThirdwebAuthConfig<
validateTokenId?:
| ((tokenId: string) => void)
| ((tokenId: string) => Promise<void>);
loginPayloadDurationInSeconds?: number;
tokenDurationInSeconds?: number;
refreshIntervalInSeconds?: number;
};
cookieOptions?: {
domain?: string;
+22 -2
View File
@@ -3,7 +3,7 @@ import { EthersWallet } from "@thirdweb-dev/wallets/evm/wallets/ethers";
import { expect } from "chai";
import { Wallet } from "ethers";
describe("Wallet Authentication", async () => {
describe("Wallet Authentication - EVM", async () => {
let adminWallet: any, signerWallet: any, attackerWallet: any;
let auth: ThirdwebAuth;
@@ -272,7 +272,7 @@ describe("Wallet Authentication", async () => {
expect.fail();
} catch (err: any) {
expect(err.message).to.contain(
`Expected the connected wallet address '${await signerWallet.getAddress()}' to match the token issuer address '${await adminWallet.getAddress()}'`,
`The expected issuer address '${await signerWallet.getAddress()}' did not match the token issuer address '${await adminWallet.getAddress()}'`,
);
}
});
@@ -350,4 +350,24 @@ describe("Wallet Authentication", async () => {
role: "admin",
});
});
it("Should authenticate with issuer address", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload);
auth.updateWallet(attackerWallet);
try {
await auth.authenticate(token);
expect.fail();
} catch (err: any) {
expect(err.message).to.contain("The expected issuer address");
}
const user = await auth.authenticate(token, {
issuerAddress: await adminWallet.getAddress(),
});
expect(user.address).to.equal(await signerWallet.getAddress());
});
});
+2 -2
View File
@@ -3,7 +3,7 @@ import { Keypair } from "@solana/web3.js";
import { KeypairWallet } from "@thirdweb-dev/wallets/solana/wallets/keypair";
import { expect } from "chai";
describe("Wallet Authentication", async () => {
describe("Wallet Authentication - Solana", async () => {
let adminWallet: any, signerWallet: any, attackerWallet: any;
let auth: ThirdwebAuth;
@@ -272,7 +272,7 @@ describe("Wallet Authentication", async () => {
expect.fail();
} catch (err: any) {
expect(err.message).to.contain(
`Expected the connected wallet address '${await signerWallet.getAddress()}' to match the token issuer address '${await adminWallet.getAddress()}'`,
`The expected issuer address '${await signerWallet.getAddress()}' did not match the token issuer address '${await adminWallet.getAddress()}'`,
);
}
});
+322
View File
@@ -1,5 +1,327 @@
# @thirdweb-dev/chains
## 0.1.50
### Patch Changes
- [#1558](https://github.com/thirdweb-dev/js/pull/1558) [`926dd7b0`](https://github.com/thirdweb-dev/js/commit/926dd7b03f38ed25ca303dc23d3323d5edd28005) Thanks [@Marfuen](https://github.com/Marfuen)! - Updating chains list
## 0.1.49
### Patch Changes
- [#1540](https://github.com/thirdweb-dev/js/pull/1540) [`b30566c6`](https://github.com/thirdweb-dev/js/commit/b30566c68436ad94ddc938a380eccc13a8a7147d) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - updated chains
- [#1422](https://github.com/thirdweb-dev/js/pull/1422) [`0f027069`](https://github.com/thirdweb-dev/js/commit/0f027069064bebe647f9235fa86ef7f165ffc7b3) Thanks [@Marfuen](https://github.com/Marfuen)! - CLI will now use an OAuth like login flow to authenticate the device with the wallet on the dashboard.
Any actions performed by the CLI will be linked to your account / wallet on the dashboard, including but not limited to tracking your usage, and billing as needed.
- [#1551](https://github.com/thirdweb-dev/js/pull/1551) [`f5aed34d`](https://github.com/thirdweb-dev/js/commit/f5aed34d3c71065c3f45df2c1eb84ba9c36162d5) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Update chains
## 0.1.48
### Patch Changes
- [#1530](https://github.com/thirdweb-dev/js/pull/1530) [`911e14fc`](https://github.com/thirdweb-dev/js/commit/911e14fcac743b07fa1a66440c72d662c08e971c) Thanks [@kumaryash90](https://github.com/kumaryash90)! - Add Chiliz Spicy testnet
## 0.1.47
### Patch Changes
- [#1518](https://github.com/thirdweb-dev/js/pull/1518) [`34a3bb8a`](https://github.com/thirdweb-dev/js/commit/34a3bb8ae3c1d7a506e5568a9e79ab7e469557a8) Thanks [@nkrishang](https://github.com/nkrishang)! - Update contracts package
## 0.1.46
### Patch Changes
- [#1508](https://github.com/thirdweb-dev/js/pull/1508) [`184c325a`](https://github.com/thirdweb-dev/js/commit/184c325ab2ef028022a050c4274f2ab12b1a3a7f) Thanks [@jnsdls](https://github.com/jnsdls)! - update xpla chain icons
- [#1513](https://github.com/thirdweb-dev/js/pull/1513) [`c12f0874`](https://github.com/thirdweb-dev/js/commit/c12f0874b4dac43c263c7edb20d0343c16381c34) Thanks [@jnsdls](https://github.com/jnsdls)! - add additonal chains
## 0.1.45
### Patch Changes
- [#1506](https://github.com/thirdweb-dev/js/pull/1506) [`f97ddf4c`](https://github.com/thirdweb-dev/js/commit/f97ddf4c7f14854f3b204ad9741b52ddb8dac736) Thanks [@jnsdls](https://github.com/jnsdls)! - add xpla chains & update chains
## 0.1.44
### Patch Changes
- [#1499](https://github.com/thirdweb-dev/js/pull/1499) [`8f3b685a`](https://github.com/thirdweb-dev/js/commit/8f3b685ad2bd73cb4d5d8c8aa25c04ffc10fb7cf) Thanks [@Marfuen](https://github.com/Marfuen)! - Update deploy command from CLI to use show a public gateway url temporarily. Updated chains too.
## 0.1.43
### Patch Changes
- [#1469](https://github.com/thirdweb-dev/js/pull/1469) [`cb1c9937`](https://github.com/thirdweb-dev/js/commit/cb1c9937fadb2d06eb148cf9819f2b3601376308) Thanks [@jnsdls](https://github.com/jnsdls)! - update chains
- [#1474](https://github.com/thirdweb-dev/js/pull/1474) [`a1732663`](https://github.com/thirdweb-dev/js/commit/a17326634e758c3bf42f0cc3869b8792f1e18cc9) Thanks [@adam-maj](https://github.com/adam-maj)! - Add back scroll-alpha-testnet
- [#1458](https://github.com/thirdweb-dev/js/pull/1458) [`588b2106`](https://github.com/thirdweb-dev/js/commit/588b21060139a7c0bf5805e2c629a16792ed2c76) Thanks [@kien-ngo](https://github.com/kien-ngo)! - Update chains
- [#1461](https://github.com/thirdweb-dev/js/pull/1461) [`269e68c0`](https://github.com/thirdweb-dev/js/commit/269e68c0a15e8f78cb5b68c9456ca8094b9e1f30) Thanks [@0xFirekeeper](https://github.com/0xFirekeeper)! - add xai-goerli chain and support BigInteger from Unity
## 0.1.42
### Patch Changes
- [#1450](https://github.com/thirdweb-dev/js/pull/1450) [`262edc6a`](https://github.com/thirdweb-dev/js/commit/262edc6a46792da88f49ff6ef0a756a932a6a0cf) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - update chains
## 0.1.41
### Patch Changes
- [#1436](https://github.com/thirdweb-dev/js/pull/1436) [`fd981655`](https://github.com/thirdweb-dev/js/commit/fd9816556fe595b0c764e34dbcf15b0ad1677edb) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Updated chains
- [#1432](https://github.com/thirdweb-dev/js/pull/1432) [`9f5adc5c`](https://github.com/thirdweb-dev/js/commit/9f5adc5c5c2782ffb878759df481e5fb1e1740e5) Thanks [@jnsdls](https://github.com/jnsdls)! - update chains
## 0.1.40
### Patch Changes
- [#1415](https://github.com/thirdweb-dev/js/pull/1415) [`256ee0d5`](https://github.com/thirdweb-dev/js/commit/256ee0d5ec9c8598aa79cd4cb1fd839c6cc7d390) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Downgrade preconstruct to 2.7.0
## 0.1.39
### Patch Changes
- [#1407](https://github.com/thirdweb-dev/js/pull/1407) [`0a5eb19d`](https://github.com/thirdweb-dev/js/commit/0a5eb19d672909027bb6c7e79ea76d431535559c) Thanks [@jnsdls](https://github.com/jnsdls)! - remove non-standard urls
- [#1409](https://github.com/thirdweb-dev/js/pull/1409) [`b1e8c8e2`](https://github.com/thirdweb-dev/js/commit/b1e8c8e231013182eb46c16d0c441ee0f3bdfdb2) Thanks [@jnsdls](https://github.com/jnsdls)! - update dependencies
- [#1376](https://github.com/thirdweb-dev/js/pull/1376) [`48ca58b7`](https://github.com/thirdweb-dev/js/commit/48ca58b7aa45348b928932b9c7b76b3dc233e429) Thanks [@iketw](https://github.com/iketw)! - Pass bundleId if present
- [#1399](https://github.com/thirdweb-dev/js/pull/1399) [`3152d4e9`](https://github.com/thirdweb-dev/js/commit/3152d4e9b42e2777316b1b58513657f4430cb79a) Thanks [@jnsdls](https://github.com/jnsdls)! - update chains
- [#1387](https://github.com/thirdweb-dev/js/pull/1387) [`aa6bdd08`](https://github.com/thirdweb-dev/js/commit/aa6bdd0809d1d5536c837c59b2d407ee974c1f9c) Thanks [@nkrishang](https://github.com/nkrishang)! - Simplify account permissions
- [#1405](https://github.com/thirdweb-dev/js/pull/1405) [`75587c8b`](https://github.com/thirdweb-dev/js/commit/75587c8b38bbbcf68d2101526e9792349cce728f) Thanks [@jnsdls](https://github.com/jnsdls)! - sort explorers (etherscan -> blockscout -> other)
- [#1385](https://github.com/thirdweb-dev/js/pull/1385) [`cc5e2ec5`](https://github.com/thirdweb-dev/js/commit/cc5e2ec51fce09af05be33811eb46980825829ee) Thanks [@iketw](https://github.com/iketw)! - Adds chains and improve error messages
- [#1378](https://github.com/thirdweb-dev/js/pull/1378) [`5a02c5ec`](https://github.com/thirdweb-dev/js/commit/5a02c5ec0288fd6dfb2b765ef70bb18e714aca19) Thanks [@MananTank](https://github.com/MananTank)! - add icon in MinimalChain
## 0.1.38
### Patch Changes
- [#1374](https://github.com/thirdweb-dev/js/pull/1374) [`7cb55e70`](https://github.com/thirdweb-dev/js/commit/7cb55e7051617268bba1b80146865c606ff6e66d) Thanks [@jnsdls](https://github.com/jnsdls)! -
## 0.1.37
### Patch Changes
- [#1371](https://github.com/thirdweb-dev/js/pull/1371) [`d665954f`](https://github.com/thirdweb-dev/js/commit/d665954fee0554985055bf06abbed8d7b8d5bc38) Thanks [@jnsdls](https://github.com/jnsdls)! - add more chains
## 0.1.36
### Patch Changes
- [#1366](https://github.com/thirdweb-dev/js/pull/1366) [`02ab92cc`](https://github.com/thirdweb-dev/js/commit/02ab92cc5c97f475e3b5642e5a7bdbe63ca136ee) Thanks [@jnsdls](https://github.com/jnsdls)! - new supported chains
- [#1358](https://github.com/thirdweb-dev/js/pull/1358) [`6cc4b8d2`](https://github.com/thirdweb-dev/js/commit/6cc4b8d28b982c5be3e1cd17d2a9a947001d1608) Thanks [@DLHTX](https://github.com/DLHTX)! - feat(chain): add iotex chain icon
## 0.1.35
### Patch Changes
- [#1316](https://github.com/thirdweb-dev/js/pull/1316) [`d8447146`](https://github.com/thirdweb-dev/js/commit/d8447146092c1962f410155ab2047225453aaa2b) Thanks [@iketw](https://github.com/iketw)! - Adds support for clientId / secretKey
## 0.1.34
### Patch Changes
- [#1338](https://github.com/thirdweb-dev/js/pull/1338) [`8dd7540c`](https://github.com/thirdweb-dev/js/commit/8dd7540c455aa70534f6d29986537592fd12169b) Thanks [@jnsdls](https://github.com/jnsdls)! - update chains
## 0.1.33
### Patch Changes
- [#1335](https://github.com/thirdweb-dev/js/pull/1335) [`0407b2c2`](https://github.com/thirdweb-dev/js/commit/0407b2c2f39b5f3fa06e613e671623b5644b3a28) Thanks [@jnsdls](https://github.com/jnsdls)! - update chains again
## 0.1.32
### Patch Changes
- [#1330](https://github.com/thirdweb-dev/js/pull/1330) [`a9093bcf`](https://github.com/thirdweb-dev/js/commit/a9093bcf287c01e3335fd780e2ccbfdb3380bf95) Thanks [@adam-maj](https://github.com/adam-maj)! - Override binance slug
## 0.1.31
### Patch Changes
- [#1328](https://github.com/thirdweb-dev/js/pull/1328) [`4393b228`](https://github.com/thirdweb-dev/js/commit/4393b2280505fd0b2284555d64eae6567e8401a5) Thanks [@adam-maj](https://github.com/adam-maj)! - Make base default chain
## 0.1.30
### Patch Changes
- [#1326](https://github.com/thirdweb-dev/js/pull/1326) [`40682191`](https://github.com/thirdweb-dev/js/commit/40682191450de08ad40b9d2957afced248657af2) Thanks [@adam-maj](https://github.com/adam-maj)! - Add base chain support
## 0.1.29
### Patch Changes
- [#1320](https://github.com/thirdweb-dev/js/pull/1320) [`fd74d791`](https://github.com/thirdweb-dev/js/commit/fd74d7918072cda03b52f852ebb3f8dccb84074d) Thanks [@kumaryash90](https://github.com/kumaryash90)! - Linea mainnet support
- [#1315](https://github.com/thirdweb-dev/js/pull/1315) [`35f20ceb`](https://github.com/thirdweb-dev/js/commit/35f20ceb4f943e95d9566105096f06412978da7a) Thanks [@jnsdls](https://github.com/jnsdls)! - add more chains
## 0.1.28
### Patch Changes
- [#1299](https://github.com/thirdweb-dev/js/pull/1299) [`7e044c66`](https://github.com/thirdweb-dev/js/commit/7e044c664d8a034f5324b859ac3596860c86f9a5) Thanks [@nkrishang](https://github.com/nkrishang)! - Add ERC721LoyaltyCard and ERC721UpdatableMetadata
- [#1297](https://github.com/thirdweb-dev/js/pull/1297) [`b5c6eedb`](https://github.com/thirdweb-dev/js/commit/b5c6eedb38aa3c52eb97f3d25ad83e38c55afe61) Thanks [@0xFirekeeper](https://github.com/0xFirekeeper)! - add zksync as default chain
- [#1309](https://github.com/thirdweb-dev/js/pull/1309) [`4961b597`](https://github.com/thirdweb-dev/js/commit/4961b597a098dae0a4eff01a9ef268a65fe1a352) Thanks [@jnsdls](https://github.com/jnsdls)! - unblock storage domains
## 0.1.27
### Patch Changes
- [#1278](https://github.com/thirdweb-dev/js/pull/1278) [`8a389f12`](https://github.com/thirdweb-dev/js/commit/8a389f1295d2bf726059997ea0ca10cf0424f2a2) Thanks [@jnsdls](https://github.com/jnsdls)! - updated various dependencies
- [#1281](https://github.com/thirdweb-dev/js/pull/1281) [`a3bb17cb`](https://github.com/thirdweb-dev/js/commit/a3bb17cb33f033846fb3b4c8a0a4809ba76cab96) Thanks [@nkrishang](https://github.com/nkrishang)! - Handle ERC4337Signer correctly for signTypedData
## 0.1.26
### Patch Changes
- [#1276](https://github.com/thirdweb-dev/js/pull/1276) [`5882091e`](https://github.com/thirdweb-dev/js/commit/5882091eab65978009a5a5305701f121851b10ad) Thanks [@MananTank](https://github.com/MananTank)! - Do not change order or RPCs in `getChainRPCs` to Fix RPC override issue
## 0.1.25
### Patch Changes
- [#1248](https://github.com/thirdweb-dev/js/pull/1248) [`620e89dc`](https://github.com/thirdweb-dev/js/commit/620e89dc25c91557e2164a602c7aedd733525087) Thanks [@nachoiacovino](https://github.com/nachoiacovino)! - update chains
- [#1243](https://github.com/thirdweb-dev/js/pull/1243) [`0fd8aa04`](https://github.com/thirdweb-dev/js/commit/0fd8aa04a9424497758d13a51a72363edcc30e19) Thanks [@therealharpaljadeja](https://github.com/therealharpaljadeja)! - update chains
## 0.1.24
### Patch Changes
- [#1241](https://github.com/thirdweb-dev/js/pull/1241) [`9af346ee`](https://github.com/thirdweb-dev/js/commit/9af346eeada1037be27c8d3c9e1777f7be11a8ea) Thanks [@nkrishang](https://github.com/nkrishang)! - Use fn getAllAccounts instead of event logs AccountCreated
## 0.1.23
### Patch Changes
- [#1229](https://github.com/thirdweb-dev/js/pull/1229) [`6816219a`](https://github.com/thirdweb-dev/js/commit/6816219ac13ae571a0c90db6ab389c319bc1f052) Thanks [@jnsdls](https://github.com/jnsdls)! - add/update chains
## 0.1.22
### Patch Changes
- [#1192](https://github.com/thirdweb-dev/js/pull/1192) [`f41f1a29`](https://github.com/thirdweb-dev/js/commit/f41f1a2958a2cedcf0496c9a3ca284d0b98f1b89) Thanks [@jnsdls](https://github.com/jnsdls)! - fix arbitrum goerli infura url
## 0.1.21
### Patch Changes
- [#1074](https://github.com/thirdweb-dev/js/pull/1074) [`cc20f93e`](https://github.com/thirdweb-dev/js/commit/cc20f93e178d86ee2b3f39102bbb0811de211f05) Thanks [@Marfuen](https://github.com/Marfuen)! - Enhance CLI Install command and update chains
- [#1185](https://github.com/thirdweb-dev/js/pull/1185) [`8e28b0f5`](https://github.com/thirdweb-dev/js/commit/8e28b0f5e75596d29273ed80269bcee6d209adb4) Thanks [@jnsdls](https://github.com/jnsdls)! - add Zora Mainnet
## 0.1.20
### Patch Changes
- [#1140](https://github.com/thirdweb-dev/js/pull/1140) [`16232de9`](https://github.com/thirdweb-dev/js/commit/16232de9eab9966e24e335929b2a3919346af265) Thanks [@kumaryash90](https://github.com/kumaryash90)! - Update chains
- [#1138](https://github.com/thirdweb-dev/js/pull/1138) [`645b0303`](https://github.com/thirdweb-dev/js/commit/645b0303cc1a9cbb0a0e9cbd67d11c3b865e4584) Thanks [@jcstein](https://github.com/jcstein)! - feat: create Taro Testnet
## 0.1.19
### Patch Changes
- [#1065](https://github.com/thirdweb-dev/js/pull/1065) [`bd86661f`](https://github.com/thirdweb-dev/js/commit/bd86661f54ca2f1eb09cbae35c704dc79be1b63a) Thanks [@iketw](https://github.com/iketw)! - [Chains] update chains
- [#1064](https://github.com/thirdweb-dev/js/pull/1064) [`c85810ee`](https://github.com/thirdweb-dev/js/commit/c85810eee318b10eee4ada61828adaa51f94ea6c) Thanks [@MananTank](https://github.com/MananTank)! - Do not cache signer in wallets
- [#1047](https://github.com/thirdweb-dev/js/pull/1047) [`6fd10f94`](https://github.com/thirdweb-dev/js/commit/6fd10f94b469dc5659e2ff4ce92a5aff86f3c89d) Thanks [@MananTank](https://github.com/MananTank)! - Fix tree-shaking issue in `@thirdweb-dev/chains`
- [#1090](https://github.com/thirdweb-dev/js/pull/1090) [`5f1e6abb`](https://github.com/thirdweb-dev/js/commit/5f1e6abb391f5c58dbdb207f569b3dd0b5d4729c) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Add base-goerli to default chains
## 0.1.18
### Patch Changes
- [#1040](https://github.com/thirdweb-dev/js/pull/1040) [`30e5593d`](https://github.com/thirdweb-dev/js/commit/30e5593dd1ce9abd809ad216a1cfce77b897093c) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Update chains
## 0.1.17
### Patch Changes
- [#1031](https://github.com/thirdweb-dev/js/pull/1031) [`3c8c5d56`](https://github.com/thirdweb-dev/js/commit/3c8c5d56f2a21c0918fede71061c6745f2956f83) Thanks [@jnsdls](https://github.com/jnsdls)! - update chains
- [#1033](https://github.com/thirdweb-dev/js/pull/1033) [`907d97be`](https://github.com/thirdweb-dev/js/commit/907d97bedef7331148bdfe8b9bf1e19459282e4c) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Added faucet for optimism goerli
## 0.1.16
### Patch Changes
- [#996](https://github.com/thirdweb-dev/js/pull/996) [`c3645c45`](https://github.com/thirdweb-dev/js/commit/c3645c451b5e9a0fcf651fa07eb0e31ebf1882ca) Thanks [@MananTank](https://github.com/MananTank)! - - add `theme` in `ConfiguredWallet.connectUI`'s props - to use theme aware UI for wallets
- add `useWalletConfig` hook to get the `ConfiguredWallet` object for active wallet
- add hooks `useSetConnectedWallet`, `useSetConnectionStatus`
- rename `useActiveChain` to `useChain` - keep the `useActiveChain` also with deprecated tag
- make `useSafe` hook await-able by returning the promise of connect() call
- add hook `useSmartWallet`
- allow rendering custom wallet details button via `<ConnectWallet detailsButton={} />` prop
- Rename "Export" to "Backup" in local wallet UI
- [#1011](https://github.com/thirdweb-dev/js/pull/1011) [`470e0a14`](https://github.com/thirdweb-dev/js/commit/470e0a144db6aa03e7789e231bbdfae43144f0e0) Thanks [@MananTank](https://github.com/MananTank)! - rename ConfiguredWallet to WalletConfig
```diff
- import { ConfiguredWallet } from '@thirdweb-dev/react';
+ import { WalletConfig } from '@thirdweb-dev/react';
```
- [#995](https://github.com/thirdweb-dev/js/pull/995) [`482f6d1b`](https://github.com/thirdweb-dev/js/commit/482f6d1b58ac99b331fc750d3eeb6082556fd526) Thanks [@iketw](https://github.com/iketw)! - [Chains] Update chains
- [#989](https://github.com/thirdweb-dev/js/pull/989) [`8db78299`](https://github.com/thirdweb-dev/js/commit/8db78299ea6cfb51d93b91bb1a351644a83c73d2) Thanks [@iketw](https://github.com/iketw)! - [React/ReactNative] Updated useThirdwebWallet to useWalletContext
## 0.1.15
### Patch Changes
- [#990](https://github.com/thirdweb-dev/js/pull/990) [`6a4aab0b`](https://github.com/thirdweb-dev/js/commit/6a4aab0b8a2e0f6ff1b47992a3c1e5426a74f7ff) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - updated chains
## 0.1.14
### Patch Changes
- [#954](https://github.com/thirdweb-dev/js/pull/954) [`5305b42d`](https://github.com/thirdweb-dev/js/commit/5305b42db554b69f903b3d95f3ba0eeddabd6114) Thanks [@jarrodwatts](https://github.com/jarrodwatts)! - useContract now types correctly for thirdweb generate
## 0.1.13
### Patch Changes
- [#787](https://github.com/thirdweb-dev/js/pull/787) [`d2c7f6d7`](https://github.com/thirdweb-dev/js/commit/d2c7f6d758787fab102ecc0cec16ac74f3c87a1f) Thanks [@iketw](https://github.com/iketw)! - [ReactNative] Adds Device Wallet
- [#931](https://github.com/thirdweb-dev/js/pull/931) [`f12a80a4`](https://github.com/thirdweb-dev/js/commit/f12a80a4758aa91c43084acedb212de9f36a7371) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Updated chains
## 0.1.12
### Patch Changes
- [#896](https://github.com/thirdweb-dev/js/pull/896) [`a6610f12`](https://github.com/thirdweb-dev/js/commit/a6610f1211e9359885b948bf69a66d834707ec07) Thanks [@atharvadeosthale](https://github.com/atharvadeosthale)! - Added links to portal
- [#903](https://github.com/thirdweb-dev/js/pull/903) [`77224646`](https://github.com/thirdweb-dev/js/commit/77224646d542db3171394d744b455497cd057633) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - new chains
## 0.1.11
### Patch Changes
- [#870](https://github.com/thirdweb-dev/js/pull/870) [`235eb046`](https://github.com/thirdweb-dev/js/commit/235eb0460ae0638f63acf82957bcfea41b9e955d) Thanks [@jnsdls](https://github.com/jnsdls)! - update chains
## 0.1.10
### Patch Changes
- [#848](https://github.com/thirdweb-dev/js/pull/848) [`1137a20d`](https://github.com/thirdweb-dev/js/commit/1137a20de44603d35e71eae2f2b6fec79febec00) Thanks [@jnsdls](https://github.com/jnsdls)! - more complete types for chains and better generation
## 0.1.9
### Patch Changes
+18 -12
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Ethereum Mainnet",
"chain": "ETH",
@@ -5,24 +6,18 @@ export default {
"url": "ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/ethereum/512.png",
"height": 512,
"width": 512,
"format": "png",
"sizes": [
512,
256,
128,
64,
32,
16
]
"format": "png"
},
"rpc": [
"https://ethereum.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}",
"https://mainnet.infura.io/v3/${INFURA_API_KEY}",
"wss://mainnet.infura.io/ws/v3/${INFURA_API_KEY}",
"https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}",
"https://api.mycryptoapi.com/eth",
"https://cloudflare-eth.com",
"https://ethereum.publicnode.com"
"https://ethereum.publicnode.com",
"https://mainnet.gateway.tenderly.co",
"wss://mainnet.gateway.tenderly.co"
],
"features": [
{
@@ -51,8 +46,19 @@ export default {
"name": "etherscan",
"url": "https://etherscan.io",
"standard": "EIP3091"
},
{
"name": "blockscout",
"url": "https://eth.blockscout.com",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "ethereum"
} as const;
} as const satisfies Chain;
+20 -13
View File
@@ -1,11 +1,15 @@
import type { Chain } from "../src/types";
export default {
"name": "Optimism",
"name": "OP Mainnet",
"chain": "ETH",
"rpc": [
"https://optimism.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://opt-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}",
"https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}",
"https://mainnet.optimism.io/"
"https://opt-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}",
"https://mainnet.optimism.io",
"https://optimism.publicnode.com",
"https://optimism.gateway.tenderly.co",
"wss://optimism.gateway.tenderly.co"
],
"faucets": [],
"nativeCurrency": {
@@ -22,22 +26,25 @@ export default {
"name": "etherscan",
"url": "https://optimistic.etherscan.io",
"standard": "EIP3091"
},
{
"name": "blockscout",
"url": "https://optimism.blockscout.com",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
},
"standard": "EIP3091"
}
],
"icon": {
"url": "ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/optimism/512.png",
"height": 512,
"width": 512,
"format": "png",
"sizes": [
512,
256,
128,
64,
32,
16
]
"format": "png"
},
"testnet": false,
"slug": "optimism"
} as const;
} as const satisfies Chain;
+18 -8
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Gnosis",
"chain": "GNO",
@@ -10,20 +11,24 @@ export default {
"rpc": [
"https://gnosis.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.gnosischain.com",
"https://rpc.gnosis.gateway.fm",
"https://rpc.ankr.com/gnosis",
"https://gnosischain-rpc.gateway.pokt.network",
"https://gnosis-mainnet.public.blastapi.io",
"https://gnosis.api.onfinality.io/public",
"https://gnosis.blockpi.network/v1/rpc/public",
"https://web3endpoints.com/gnosischain-mainnet",
"https://gnosis.oat.farm",
"wss://rpc.gnosischain.com/wss"
],
"faucets": [
"https://gnosisfaucet.com",
"https://faucet.gimlu.com/gnosis",
"https://stakely.io/faucet/gnosis-chain-xdai",
"https://faucet.prussia.dev/xdai"
],
"nativeCurrency": {
"name": "xDAI",
"symbol": "xDAI",
"symbol": "XDAI",
"decimals": 18
},
"infoURL": "https://docs.gnosischain.com",
@@ -33,17 +38,22 @@ export default {
"slip44": 700,
"explorers": [
{
"name": "gnosisscan",
"url": "https://gnosisscan.io",
"name": "blockscout",
"url": "https://gnosis.blockscout.com",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
},
"standard": "EIP3091"
},
{
"name": "blockscout",
"url": "https://blockscout.com/xdai/mainnet",
"icon": "blockscout",
"name": "gnosisscan",
"url": "https://gnosisscan.io",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "gnosis"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "GTON Mainnet",
"chain": "GTON",
@@ -28,4 +29,4 @@ export default {
},
"testnet": false,
"slug": "gton"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Smart Bitcoin Cash",
"chain": "smartBCH",
@@ -20,4 +21,4 @@ export default {
"networkId": 10000,
"testnet": false,
"slug": "smart-bitcoin-cash"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "QuarkChain Mainnet Root",
"chain": "QuarkChain",
@@ -17,4 +18,4 @@ export default {
"networkId": 100000,
"testnet": false,
"slug": "quarkchain-root"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "QuarkChain Mainnet Shard 0",
"chain": "QuarkChain",
@@ -29,4 +30,4 @@ export default {
],
"testnet": false,
"slug": "quarkchain-shard-0"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "QuarkChain Mainnet Shard 1",
"chain": "QuarkChain",
@@ -29,4 +30,4 @@ export default {
],
"testnet": false,
"slug": "quarkchain-shard-1"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "QuarkChain Mainnet Shard 2",
"chain": "QuarkChain",
@@ -29,4 +30,4 @@ export default {
],
"testnet": false,
"slug": "quarkchain-shard-2"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "QuarkChain Mainnet Shard 3",
"chain": "QuarkChain",
@@ -29,4 +30,4 @@ export default {
],
"testnet": false,
"slug": "quarkchain-shard-3"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "QuarkChain Mainnet Shard 4",
"chain": "QuarkChain",
@@ -29,4 +30,4 @@ export default {
],
"testnet": false,
"slug": "quarkchain-shard-4"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "QuarkChain Mainnet Shard 5",
"chain": "QuarkChain",
@@ -29,4 +30,4 @@ export default {
],
"testnet": false,
"slug": "quarkchain-shard-5"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "QuarkChain Mainnet Shard 6",
"chain": "QuarkChain",
@@ -29,4 +30,4 @@ export default {
],
"testnet": false,
"slug": "quarkchain-shard-6"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "QuarkChain Mainnet Shard 7",
"chain": "QuarkChain",
@@ -29,4 +30,4 @@ export default {
],
"testnet": false,
"slug": "quarkchain-shard-7"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "VeChain",
"chain": "VeChain",
@@ -26,4 +27,4 @@ export default {
],
"testnet": false,
"slug": "vechain"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Smart Bitcoin Cash Testnet",
"chain": "smartBCHTest",
@@ -18,4 +19,4 @@ export default {
"networkId": 10001,
"testnet": true,
"slug": "smart-bitcoin-cash-testnet"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "VeChain Testnet",
"chain": "VeChain",
@@ -23,4 +24,4 @@ export default {
],
"testnet": true,
"slug": "vechain-testnet"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Klaytn Testnet Baobab",
"chain": "KLAY",
@@ -19,4 +20,4 @@ export default {
"networkId": 1001,
"testnet": true,
"slug": "klaytn-testnet-baobab"
} as const;
} as const satisfies Chain;
+6 -2
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Gon Chain",
"chain": "GonChain",
@@ -10,7 +11,10 @@ export default {
"rpc": [
"https://gon-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://node1.testnet.gaiaopen.network",
"http://database1.gaiaopen.network"
"https://node1.mainnet.gon.network",
"https://node2.mainnet.gon.network",
"https://node3.mainnet.gon.network",
"https://node4.mainnet.gon.network"
],
"faucets": [],
"nativeCurrency": {
@@ -31,4 +35,4 @@ export default {
],
"testnet": true,
"slug": "gon-chain"
} as const;
} as const satisfies Chain;
+8 -2
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "T-EKTA",
"title": "EKTA Testnet T-EKTA",
@@ -26,10 +27,15 @@ export default {
{
"name": "test-ektascan",
"url": "https://test.ektascan.io",
"icon": "ekta",
"icon": {
"url": "ipfs://QmfMd564KUPK8eKZDwGCT71ZC2jMnUZqP6LCtLpup3rHH1",
"width": 2100,
"height": 2100,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "t-ekta"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Plian Testnet Subchain 1",
"chain": "Plian",
@@ -28,4 +29,4 @@ export default {
},
"testnet": true,
"slug": "plian-testnet-subchain-1"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Newton Testnet",
"chain": "NEW",
@@ -17,4 +18,4 @@ export default {
"networkId": 1007,
"testnet": true,
"slug": "newton-testnet"
} as const;
} as const satisfies Chain;
+8 -2
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Eurus Mainnet",
"chain": "EUN",
@@ -25,10 +26,15 @@ export default {
{
"name": "eurusexplorer",
"url": "https://explorer.eurus.network",
"icon": "eurus",
"icon": {
"url": "ipfs://QmaGd5L9jGPbfyGXBFhu9gjinWJ66YtNrXq8x6Q98Eep9e",
"width": 471,
"height": 471,
"format": "svg"
},
"standard": "none"
}
],
"testnet": false,
"slug": "eurus"
} as const;
} as const satisfies Chain;
+29
View File
@@ -0,0 +1,29 @@
import type { Chain } from "../src/types";
export default {
"name": "Japan Open Chain Testnet",
"chain": "JOCT",
"rpc": [
"https://japan-open-chain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-1.testnet.japanopenchain.org:8545",
"https://rpc-2.testnet.japanopenchain.org:8545"
],
"faucets": [],
"nativeCurrency": {
"name": "Japan Open Chain Testnet Token",
"symbol": "JOCT",
"decimals": 18
},
"infoURL": "https://www.japanopenchain.org/",
"shortName": "joct",
"chainId": 10081,
"networkId": 10081,
"explorers": [
{
"name": "Testnet Block Explorer",
"url": "https://explorer.testnet.japanopenchain.org",
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "japan-open-chain-testnet"
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "SJATSH",
"chain": "ETH",
@@ -17,4 +18,4 @@ export default {
"networkId": 10086,
"testnet": false,
"slug": "sjatsh"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "EtherInc",
"chain": "ETI",
@@ -18,4 +19,4 @@ export default {
"slip44": 464,
"testnet": false,
"slug": "etherinc"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Evrice Network",
"chain": "EVC",
@@ -18,4 +19,4 @@ export default {
"slip44": 1020,
"testnet": false,
"slug": "evrice-network"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Blockchain Genesis Mainnet",
"chain": "GEN",
@@ -19,4 +20,4 @@ export default {
"networkId": 10101,
"testnet": false,
"slug": "blockchain-genesis"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Soverun Testnet",
"chain": "SVRN",
@@ -32,4 +33,4 @@ export default {
],
"testnet": true,
"slug": "soverun-testnet"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Soverun Mainnet",
"chain": "SVRN",
@@ -32,4 +33,4 @@ export default {
],
"testnet": false,
"slug": "soverun"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Newton",
"chain": "NEW",
@@ -17,4 +18,4 @@ export default {
"networkId": 1012,
"testnet": false,
"slug": "newton"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Web3Games Testnet",
"chain": "Web3Games",
@@ -25,4 +26,4 @@ export default {
"networkId": 102,
"testnet": true,
"slug": "web3games-testnet"
} as const;
} as const satisfies Chain;
+16 -9
View File
@@ -1,6 +1,7 @@
import type { Chain } from "../src/types";
export default {
"name": "Chiado Testnet",
"chain": "CHI",
"name": "Gnosis Chiado Testnet",
"chain": "GNO",
"icon": {
"url": "ipfs://bafybeidk4swpgdyqmpz6shd5onvpaujvwiwthrhypufnwr6xh3dausz2dm",
"width": 1800,
@@ -8,16 +9,17 @@ export default {
"format": "png"
},
"rpc": [
"https://chiado-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://gnosis-chiado-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.chiadochain.net",
"https://rpc.eu-central-2.gateway.fm/v3/gnosis/archival/chiado"
"https://rpc.chiado.gnosis.gateway.fm",
"wss://rpc.chiadochain.net/wss"
],
"faucets": [
"https://gnosisfaucet.com"
],
"nativeCurrency": {
"name": "Chiado xDAI",
"symbol": "xDAI",
"symbol": "XDAI",
"decimals": 18
},
"infoURL": "https://docs.gnosischain.com",
@@ -27,11 +29,16 @@ export default {
"explorers": [
{
"name": "blockscout",
"url": "https://blockscout.chiadochain.net",
"icon": "blockscout",
"url": "https://gnosis-chiado.blockscout.com",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "chiado-testnet"
} as const;
"slug": "gnosis-chiado-testnet"
} as const satisfies Chain;
+38
View File
@@ -0,0 +1,38 @@
import type { Chain } from "../src/types";
export default {
"name": "MaxxChain Mainnet",
"chain": "MaxxChain",
"rpc": [
"https://maxxchain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.maxxchain.org",
"https://rpc1.maxxchain.org",
"https://rpc2.maxxchain.org"
],
"faucets": [
"https://faucet.maxxchain.org"
],
"nativeCurrency": {
"name": "Power",
"symbol": "PWR",
"decimals": 18
},
"icon": {
"url": "ipfs://QmRhQG9TZrXDdbQeTzBmjg3pqgwaD5TKVZj8k4kaz8AoZx",
"width": 1021,
"height": 1021,
"format": "png"
},
"infoURL": "https://www.maxxchain.org/",
"shortName": "PWR",
"chainId": 10201,
"networkId": 10201,
"explorers": [
{
"name": "MaxxChain Block Explorer",
"url": "https://explorer.maxxchain.org",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "maxxchain"
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Sakura",
"chain": "Sakura",
@@ -14,4 +15,4 @@ export default {
"networkId": 1022,
"testnet": false,
"slug": "sakura"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Clover Testnet",
"chain": "Clover",
@@ -14,4 +15,4 @@ export default {
"networkId": 1023,
"testnet": true,
"slug": "clover-testnet"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "CLV Parachain",
"chain": "CLV",
@@ -17,4 +18,4 @@ export default {
"networkId": 1024,
"testnet": false,
"slug": "clv-parachain"
} as const;
} as const satisfies Chain;
+42
View File
@@ -0,0 +1,42 @@
import type { Chain } from "../src/types";
export default {
"name": "Arthera Testnet",
"chain": "AA",
"icon": {
"url": "ipfs://QmYQp3e52KjkT4bYdAvB6ACEEpXs2D8DozsDitaADRY2Ak",
"width": 1024,
"height": 998,
"format": "png"
},
"rpc": [
"https://arthera-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-test.arthera.net"
],
"faucets": [
"https://faucet.arthera.net"
],
"nativeCurrency": {
"name": "Arthera",
"symbol": "AA",
"decimals": 18
},
"infoURL": "https://docs.arthera.net",
"shortName": "aa",
"chainId": 10243,
"networkId": 10243,
"explorers": [
{
"name": "blockscout",
"url": "https://explorer-test.arthera.net",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "arthera-testnet"
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "0XTade",
"chain": "0XTade Chain",
@@ -24,4 +25,4 @@ export default {
],
"testnet": false,
"slug": "0xtade"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "BitTorrent Chain Testnet",
"chain": "BTTC",
@@ -24,4 +25,4 @@ export default {
],
"testnet": true,
"slug": "bittorrent-chain-testnet"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Conflux eSpace",
"chain": "Conflux",
@@ -30,4 +31,4 @@ export default {
],
"testnet": false,
"slug": "conflux-espace"
} as const;
} as const satisfies Chain;
+8 -2
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Crystaleum",
"chain": "crystal",
@@ -26,10 +27,15 @@ export default {
{
"name": "blockscout",
"url": "https://scan.crystaleum.org",
"icon": "crystal",
"icon": {
"url": "ipfs://Qmbry1Uc6HnXmqFNXW5dFJ7To8EezCCjNr4TqqvAyzXS4h",
"width": 150,
"height": 150,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "crystaleum"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Proxy Network Testnet",
"chain": "Proxy Network",
@@ -24,4 +25,4 @@ export default {
],
"testnet": true,
"slug": "proxy-network-testnet"
} as const;
} as const satisfies Chain;
+8 -2
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Bronos Testnet",
"chain": "Bronos",
@@ -28,9 +29,14 @@ export default {
"name": "Bronos Testnet Explorer",
"url": "https://tbroscan.bronos.org",
"standard": "none",
"icon": "bronos"
"icon": {
"url": "ipfs://bafybeifkgtmhnq4sxu6jn22i7ass7aih6ubodr77k6ygtu4tjbvpmkw2ga",
"width": 500,
"height": 500,
"format": "png"
}
}
],
"testnet": true,
"slug": "bronos-testnet"
} as const;
} as const satisfies Chain;
+8 -2
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Bronos Mainnet",
"chain": "Bronos",
@@ -23,9 +24,14 @@ export default {
"name": "Bronos Explorer",
"url": "https://broscan.bronos.org",
"standard": "none",
"icon": "bronos"
"icon": {
"url": "ipfs://bafybeifkgtmhnq4sxu6jn22i7ass7aih6ubodr77k6ygtu4tjbvpmkw2ga",
"width": 500,
"height": 500,
"format": "png"
}
}
],
"testnet": false,
"slug": "bronos"
} as const;
} as const satisfies Chain;
+8 -2
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Kaiba Lightning Chain Testnet",
"chain": "tKLC",
@@ -25,10 +26,15 @@ export default {
{
"name": "kaibascan",
"url": "https://kaibascan.io",
"icon": "kaibascan",
"icon": {
"url": "ipfs://bafybeihbsw3ky7yf6llpww6fabo4dicotcgwjpefscoxrppstjx25dvtea",
"width": 932,
"height": 932,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "kaiba-lightning-chain-testnet"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Web3Games Devnet",
"chain": "Web3Games",
@@ -30,4 +31,4 @@ export default {
],
"testnet": false,
"slug": "web3games-devnet"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Numbers Mainnet",
"chain": "NUM",
@@ -30,4 +31,4 @@ export default {
],
"testnet": false,
"slug": "numbers"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Numbers Testnet",
"chain": "NUM",
@@ -33,4 +34,4 @@ export default {
],
"testnet": true,
"slug": "numbers-testnet"
} as const;
} as const satisfies Chain;
+2 -1
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Velas EVM Mainnet",
"chain": "Velas",
@@ -31,4 +32,4 @@ export default {
],
"testnet": false,
"slug": "velas-evm"
} as const;
} as const satisfies Chain;
+3 -2
View File
@@ -1,3 +1,4 @@
import type { Chain } from "../src/types";
export default {
"name": "Nebula Testnet",
"chain": "NTN",
@@ -9,7 +10,7 @@ export default {
},
"rpc": [
"https://nebula-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.rpc.novanetwork.io:9070"
"https://testnet.rpc.novanetwork.io"
],
"faucets": [
"https://faucet.novanetwork.io"
@@ -32,4 +33,4 @@ export default {
],
"testnet": true,
"slug": "nebula-testnet"
} as const;
} as const satisfies Chain;
+38
View File
@@ -0,0 +1,38 @@
import type { Chain } from "../src/types";
export default {
"name": "ShimmerEVM Testnet",
"title": "ShimmerEVM Testnet",
"chain": "ShimmerEVM",
"icon": {
"url": "ipfs://bafkreibky2sy6qhi6arktayvologkrgu5kudpgdxfkx4uosbvmstz7v4di",
"width": 720,
"height": 720,
"format": "png"
},
"rpc": [
"https://shimmerevm-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://json-rpc.evm.testnet.shimmer.network"
],
"faucets": [
"https://evm-toolkit.evm.testnet.shimmer.network",
"https://evm-faucet.testnet.shimmer.network"
],
"nativeCurrency": {
"name": "SMR",
"symbol": "SMR",
"decimals": 6
},
"infoURL": "https://shimmer.network",
"shortName": "shimmerevm-testnet",
"chainId": 1072,
"networkId": 1072,
"explorers": [
{
"name": "explorer",
"url": "https://explorer.evm.testnet.shimmer.network",
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "shimmerevm-testnet"
} as const satisfies Chain;
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"name": "Mintara Testnet",
"title": "Mintara Testnet",
"chain": "Mintara",
"icon": {
"url": "ipfs://bafybeie7jzlzlpz7c3a3oh4x5joej23dj2qf3cexmchjyc72hv3fblcaja",
"width": 256,
"height": 256,
"format": "png"
},
"rpc": [
"https://mintara-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/mintara/testnet/rpc"
],
"faucets": [],
"nativeCurrency": {
"name": "MINTARA",
"symbol": "MNTR",
"decimals": 18
},
"infoURL": "https://playthink.co.jp",
"shortName": "mintara-testnet",
"chainId": 1079,
"networkId": 1079,
"explorers": [
{
"name": "explorer",
"url": "https://subnets-test.avax.network/mintara",
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "mintara-testnet"
} as const satisfies Chain;

Some files were not shown because too many files have changed in this diff Show More